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 Ms é desnecessária.
— 194 Neil

1
Além disso, você Iθpode Nsalvar 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.