Escreva um programa ou função que "reaja" a um número inteiro n (entrada via parâmetro de função / args / stdin)
O programa não se importa com números negativos, gosta de pares, não gosta de números ímpares e teme o número 13.
Ele deve gerar o seguinte:
se n <0:
--------------------------
| |
| |
(| _ _ |)
| |
| |
| |
| |
| oooooooooo |
| |
| |
| |
--------------------------
se n% 2 == 0 en> -1:
--------------------------
| |
| |
(| ^ ^ |)
| |
| |
| |
| o o |
| oooooooooo |
| |
| |
| |
--------------------------
se n% 2 == 1 en> -1 en! = 13:
--------------------------
| |
| |
(| > < |)
| |
| |
| |
| |
| oooooooooo |
| o o |
| |
| |
--------------------------
se n == 13:
--------------------------
| |
| |
(| (O) (O) |)
| |
| |
| oooooooooo |
| o o |
| oooooooooo |
| |
| |
| |
--------------------------
A solução mais curta em bytes vence.
Respostas:
CJam - 169
Experimente em http://cjam.aditsu.net/
Explicação de alto nível:
S24*aB*
cria uma matriz cheia de espaços, pois a face sem bordasli_D=3{_0<2{_2%}?}?\;:X
lê o número e o converte em 0 (par), 1 (ímpar), 2 (negativo) ou 3 (13), armazenando-o em XX"^^<>__":s"(O)"a2*+2/=~
seleciona os tipos de olho (2 cordas){S*_@+_,C\-S*2*+@@++}:F
- função F leva 2 cadeias (digamos S1, S2) e um número (digamos N) e faz com que uma corda 24 no carvão contendo espaços N, S2, outros espaços, S1, N espaços2 (eyes) 6X3=- (F)~t
coloca a linha de olhos na matriz7'o5*_7F:Mt
coloca o linha da boca comum na matriz e também a salva em MX3={5Mt6'o_7Ft}*
se X for 3, coloca M novamente na matriz, 2 linhas mais altas e coloca os lados da boca no meioX2<{X2*6+'o_5Ft}*
se X for 0 ou 1, coloca os cantos da boca em a posição apropriada{" |"\+'|+}%
adiciona bordas verticais e um espaço à esquerda em cada linhaS'-26*+aa2*\*
adiciona as bordas horizontais_3=1>"()"\*3\t
adiciona as orelhasN*
adiciona separadores de nova linhafonte
Ruby,
241224Isso define uma função a ser chamada como
f[13]
. Tenho certeza de que há muito espaço para melhorias, semelhante ao que Ventero me ajudou a fazer aqui .Basicamente, estou construindo a estrutura áspera primeiro e prendo as orelhas e a boca. Então eu coloco os olhos, dependendo do número. Enquanto elabora os personagens para colocar nos olhos, eu também cuido das bocas diferentes para não precisar verificar o tipo de número novamente. Finalmente, preciso corrigir o olho direito para números ímpares, porque o código acima coloca a mesma string nos dois olhos.
fonte
C # - 349 bytes
Certamente não vou ganhar nenhum prêmio, mas uma maneira diferente de fazer as coisas.
Golfe:
Menos golfe:
fonte
Python 2-255
Não é muito curto, mas vou postá-lo de qualquer maneira:
Eu sinto falta da atribuição de itens para strings em Python! :( Então pode-se começar com a matriz de caracteres e simplesmente modificar olhos e boca.
fonte
b=bytearray()
e, em seguida,b+'mystring'
irá gerar um bytearray mutável, que imprime da mesma maneira que qualquer outra string.Python 2, 257
Não é um vencedor, mas uma abordagem alternativa, chegou bem perto! Espero poder extrair mais alguns caracteres dele. Constrói todas as linhas peça por peça, usando substrings comuns para realmente extrair os bytes.
fonte
CJam, 202
fonte