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.

jacksonecac
fonte
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.
Steadybox
fonte
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                                     
dzaima
fonte
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!

Jonathan Frech
fonte
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.

Neil
fonte
2

Perl 5 , 91 + 1 ( -p) = 92 bytes

$_='('.($s=$"x($q=$_))."/\\$s)";while(--$q){say;y/()/|/;s| /|/ |;s|\\ | \\|}s/\|/(/;s/\|/)/

Experimente online!

Xcali
fonte
2

Java (OpenJDK 8) , 200 190 170 bytes

n->{for(char i=0,s[];i<n;s[-~n-i]=47,s[2+n+i]=92,s[0]=i<1|i>n-2?40:'|',s[3+n+n]=i<1|i++>n-2?41:'|',System.out.println("".valueOf(s).replace('\0',' ')))s=new char[4+n+n];}

Experimente online!

Roberto Graham
fonte
167 bytes
ceilingcat 23/11/19
2

Pitão , 43 bytes

Isso é bastante gigantesco, uma vez que foi feito no celular: - /

j_m++++++@"(|"J!/,1QdK*;d\/*;y-Qd\\K@")|"JS

Experimente online!

Mr. Xcoder
fonte
2

Python 2 , 85 bytes

n=a=input()
while a:print'(|'[1<a<n]+a*' '+'/'+(n-a)*'  '+'\\'+a*' '+')|'[1<a<n];a-=1

Experimente online!

Lynn
fonte
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!

NofP
fonte
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.

Neil
fonte
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        
David Smith
fonte
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
2

Funky , 101 bytes

n=>for(i=0;i<n;i++)print(((c=(i==n-1)or!i)?"(":"|")..(s=" "*n-i).."/"..(" "*i*2).."\\"..s..c?")":"|")

Experimente online!

ATaco
fonte
1

Python 2 , 90 bytes

n=input()
for i in range(n):m=-~i%n<2;s=' '*(n-i);print'|('[m]+s+'/'+'  '*i+'\\'+s+'|)'[m]

Experimente online!

-1 graças a ovs .

Erik, o Outgolfer
fonte
falha n=1, mas pode ser corrigido substituindo i%~-n<1por-~i%n<2
Rod
@Rod obrigado, corrigido
Erik the Outgolfer
90 bytes : '<space>'*i*2->'<space><space>'*i
ovs 20/10
@ovs @ _ @ por que eu não pensei nisso?
Erik the Outgolfer
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"," ");
}
Ayb4btu
fonte
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
mypetlion
fonte
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.

Veskah
fonte
1
89 bytes: Experimente online!
Mazzy
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
dzaima
fonte