Desenhe o brasão lambda


16

Para comemorar o 2497º aniversário da vitória grega em Salamina, em 480 aC. Desenhe o brasão lambda.

O brasão lambda era o lambda pintado nos escudos gregos da seguinte maneira:

imagens de lambda de capital vermelha em fundos de escudo circular branco e ouro

Quebra-cabeça: Dado um número inteiro ímpar positivo n, produza uma imagem ascii art do escudo acima.

Especificações:

n = 1:

( /\ )

n = 3:

(   /\   )
|  /  \  | 
( /    \ )

n = 5

(     /\     )
|    /  \    |
|   /    \   |
|  /      \  |
( /        \ )

Gráfico: n = 3

          2|   (   /\   )
y-axis    1|   |  /  \  | 
          0|   ( /    \ )
               ___________  
               0123456789

                 x-axis

Descrição:

Deve haver exatamente n \ caracteres e n / caracteres. Os /es \não devem tocar a borda do escudo. Os cantos inferior e superior do escudo serão indicados com a (ou a )menos que n = 1, onde haverá um )e um (. Sempre haverá um espaço entre os cantos inferiores e a lambda, aumentando em 1 com o eixo y até y + 1 == n. Não cantos do lado do escudo serão indicados com |. Não há escudo superior.


7
Por que voto negativo? (2 mais para ir)
user202729

3
@ user202729 o que você quer dizer com mais 2?
jacksonecac

4
O SE possui restrição de caracteres de comentário, que força os comentários a terem pelo menos 15 caracteres.
user202729

7
Por que você não esperou 3 anos para publicá-lo pelo 2.5k'th aniversário; -;
HyperNeutrino

5
Por que apenas números inteiros ímpares? : o
Felix Palmen

Respostas:


8

Carvão ,  17  13 bytes

Obrigado a @Neil por salvar 4 bytes!

(↙↓⊖θM↑(→↗N‖M

Experimente online!

Explicação:

(↙                // Print '(' and move one step down and to the left.
  ↓⊖θ             // Print n-1 '|'s downwards.
     M↑          // Move one step up.
        (→        // Print '(' and move one step to the right.
          ↗N      // Print n '/'s towards the upper right corner.
            ‖M    // Mirror the left half to produce the right half.

1
economiza um byte e metade dos seus s é desnecessária.
194 Neil

1
Além disso, você Iθpode salvar outro byte.
194 Neil

Resumindo as sugestões de Neil, 13 bytes
Sr. Xcoder 20/10

@ Mr.Xcoder Obrigado, mas eu já fiz isso.
Steadybox

É pequeno, mas acredito na sua explicação (→ deve significar "... e mover um passo para a direita "
Kamil Drakari

6

SOGL V0.12 , 17 14 bytes

┐*ƨ(Κm«@.╚┼┼╬³

Experimente aqui!

Explicação:

example input: 3
┐*              push a string of input amount of "|"                      "|||"
  ƨ(            push "("                                                  "|||", "(("
    Κ           prepend that to the vertical bar string                   "((|||"
     m          mold that string as the input (remove excess characters)  "((|"
      «         put the first character at the end                        "(|("
       @        push a space                                              "(|(", " "
        .╚      create a diagonal of input length                         "(|(", " ", ["  /", " / ", "/  "]
          ┼┼    append those three horizontally together                  ["(   /", "|  / ", "( /  "]
            ╬³  palindromize that all                                     

4

C (gcc) , 103 96 bytes

f(n,j,b){for(j=n;j--;printf("%c%*c%*c%*c\n","|("[b],j+2,47,n+n-j+~j,92,j+2,"|)"[b=j<1|n-2<j]));}

Experimente online!


Desculpamos o principal e inclui agora? Esta comunidade mudou.
Alec Teal

2
@AlecTeal É aceitável escrever uma função que execute a tarefa especificada em vez de um programa completo. Inclui, em geral, fazer a contagem para a contagem de bytes, alguns compiladores C, no entanto, tentar adivinhar a definição de função se não houver correspondência inclui estão presentes.
Jonathan Frech

Acho que você riscou o número errado, chefe
Veskah 18/01/19

@Veskah True. ._.
Jonathan Frech

3

Retina , 41 bytes

.+
$* 
 
( $'/$`$`\$' )¶
G`.
sT`()`|`¶.*¶

Experimente online! Explicação:

.+
$* 

Converta para unário, mas usando espaços.

 
( $'/$`$`\$' )¶

Use os operadores de prefixo e sufixo de correspondência para gerar uma série de linhas com quantidades crescentes de espaço central em cada linha.

G`.

No entanto, há uma linha em branco extra, que libera a transliteração final, então exclua-a aqui.

sT`()`|`¶.*¶

Em todas as linhas, exceto a primeira e a última, altere ()s para |s.






2

R , 153 bytes

function(n){s=2*n+4
m=matrix('|',s,n)
m[3:s-1,]=' '
m[cbind(5:s-2,c(n:1,1:n))]=1
m[1,c(1,n)]='('
m[s,c(1,n)]=')'
m[m>0]=rep(c('/','\\'),n)
rbind(m,'\n')}

Experimente online!


2

Lote, 218 bytes

@echo off
set s=
for /l %%i in (1,1,%1)do call set s= %%s%%
set s=%s%/\%s%
echo (%s%)
for /l %%i in (2,1,%1)do call:l %1 %%i
exit/b
:l
set s=%s: /=/ %
set s=%s:\ = \%
if %1==%2 (echo ^(%s%^))else echo ^|%s%^|

Como se |s não bastasse ruim, ()s não funcionam bem com if... else.


2

05ab1e (27 bytes)

F"|("0NQ¹<NQ~èð¹N-×'/ðN×J∞,

experimente online

explicação

F                                                #Loop n times        
 |("0NQ¹<NQ~è                                    #Use ( or |        
             ð¹N-×                               #put spaces (1)        
                  '/                             #put /                
                    ðN×                          #put more space                
                       J∞,                       #reverse image        

Eu acho que '/¹N-úé um byte menor que ð¹N-×'/.
Neil

Abordagem agradável, mas existem algumas coisas para jogar golfe. Uma é o que @Neil sugeriu acima. Além disso: "|("pode ser „|((existem builtins para 1, 2, 3 e cordas em carvão sendo ', e , respectivamente); e 0NQ¹<NQ~pode ser ΂Nåè( Îparece ser grampeado na versão legado de TIO, mas ela não funciona na versão mais recente do 05AB1E, caso em que você também terá que substituir com º). Portanto, no total ( 21 bytes ): F„|(΂Nåè'/¹N-úðN×Jº, Experimente online .
Kevin Cruijssen 18/01/19



1

C # (.NET Core) , 188 bytes

n=>{int y=0,i=-1;var s="";while(y<n){var r=new char[n*2+4];r[n+1-y]='/';r[n+2+y]='\\';if(y<2|y++>n-2)i++;r[0]="(|("[i];r[n*2+3]=")|)"[i];s+=new string(r)+"\n";}return s.Replace("\0"," ");}

Experimente online!

Degolfed

n=>{
    int y=0,i=-1;
    var s="";

    while(y<n){
        var r=new char[n*2+4];
        r[n+1-y]='/';
        r[n+2+y]='\\';

        if(y<2 | y++>n-2)
            i++;

        r[0] = "(|("[i];
        r[n*2+3] = ")|)"[i];

        s += new string(r)+"\n";
    }

    return s.Replace("\0"," ");
}

1

Python 3, 110 bytes 93 bytes

b=c=int(input())*2
d,e='/\\'
while b:print('(|%%ss)|'[2<b<c::2]%f' {d+e:^{c}} ');d+='  ';b-=2

1

PowerShell , 93 91 90 89 bytes

-2 Agradecimentos ao ASCII-only por apontar parens extras
-1 Agradecimentos ao Mazzy por ajustar a lógica de troca

param($n)0..--$n|%{"|("[!($x=($n-$_)*$_)]+($y=" "*($n-$_+1))+"/"+"  "*$_+"\$y"+"|)"[!$x]}

Experimente online!

Tentando ajustar um $x=pouco. Provavelmente existe uma maneira mais inteligente de obter a primeira e a última linha em menos alguns bytes. Existe um melhor, $x=mas não é muito mais barato.



0

Tela , 12 bytes

┤|×(e⟳ +╴/+║

Experimente aqui!

Explicação:

┤             decrease the input by 2
 |×           repeat "|" vertically - if the amount is -1 (for input of 1), ir just removes the item currently
   (          push "("
    e        encase in that parentheis - if that first string isn't there, currently it just fails doing anything and leaves the parenthesis on the stack
     ⟳       rotate clockwise
       +     append horizontally a space
        ╴/   get a diagonal the length of the input
          +  append it horizontally to the current result
           ║  and palindromize horizontally with 0 overlap
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.