Os 21 penteados do apocalipse
Dada uma lista de números entre 1 e 21 (ou 0 e 20) produz um desenho "costurado" das seguintes faces ( consulte as regras para obter informações sobre costura ):
___ ,,, ooo === +++ ### -*~*-
(o o) (o o) (o o) (o o) (o o) (o o) (o o)
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-
*** ||| _/7 ))) ((( xxx @__
(o o) (o o) (o o) (o o) (o o) (o o) (o o)
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-
((_ >X< '*` ^^^ )|( \|/ &&&
(o o) (o o) (o o) (o o) (o o) (o o) (o o)
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-
Cada face exclusiva listada em uma nova linha (o # é o ID inteiro da face):
___
(o o)
ooO--(_)--Ooo #1
,,,
(o o)
ooO--(_)--Ooo #2
ooo
(o o)
ooO--(_)--Ooo #3
===
(o o)
ooO--(_)--Ooo #4
+++
(o o)
ooO--(_)--Ooo #5
###
(o o)
ooO--(_)--Ooo #6
-*~*-
(o o)
ooO--(_)--Ooo #7
***
(o o)
ooO--(_)--Ooo #8
|||
(o o)
ooO--(_)--Ooo #9
_/7
(o o)
ooO--(_)--Ooo #10
)))
(o o)
ooO--(_)--Ooo #11
(((
(o o)
ooO--(_)--Ooo #12
xxx
(o o)
ooO--(_)--Ooo #13
@__
(o o)
ooO--(_)--Ooo #14
((_
(o o)
ooO--(_)--Ooo #15
>X<
(o o)
ooO--(_)--Ooo #16
'*`
(o o)
ooO--(_)--Ooo #17
^^^
(o o)
ooO--(_)--Ooo #18
)|(
(o o)
ooO--(_)--Ooo #19
\|/
(o o)
ooO--(_)--Ooo #20
&&&
(o o)
ooO--(_)--Ooo #21
O rosto é o seguinte:
hhhhh
(o o)
ooO--(_)--OooS
Onde h
está o penteado apocalíptico dinâmico e S
o potencial hífen de costura.
Exemplos
Entrada: [1,2,3,4,5]
Resultado:
___ ,,, ooo === +++
(o o) (o o) (o o) (o o) (o o)
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-
Entrada: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]
Resultado:
___ ,,, ooo === +++ ### -*~*- *** ||| _/7 ))) ((( xxx @__ ((_ >X< '*` ^^^ )|( \|/ &&&
(o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o)
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-
Entrada: ["Fraggle Rock"]
/ [22]
/ [-21041024]
/[22,23,24,25,26]
Resultado: Nobody cares.
Entrada: [1,1,1,1]
Resultado:
___ ___ ___ ___
(o o) (o o) (o o) (o o)
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-
Regras
- Novas linhas / espaços / hífens anteriores e anteriores são bons.
- Os rostos podem ocorrer mais de uma vez na entrada.
- Se houver um número inválido na entrada, você poderá ter um comportamento indefinido.
- A costura:
- As faces costuradas serão concatenadas por um único hífen na linha inferior (3ª).
- As faces estarão todas em uma única linha (diferente do primeiro desenho).
- A entrada pode ser 0 ou 1 indexada, com 20 sendo o máximo para 0, 21 para 1.
- Isso é código-golfe , vitórias mais baixas na contagem de bytes.
Respostas:
Japt
-R
,12211711311010910710510410310210099 bytes1 indexado, com quebra de índice. Segui a especificação aqui, que requer um hífen entre a última linha de cada face, em vez dos casos de teste, que incluem um hífen após a última linha de cada face.
Tente
fonte
&
que aproveitarm³
era genial. Especialmente porque isso o tornou baseado em 1.&
local se o fizesse com base em 1;) Ainda sinto que há mais para jogar aqui, mas é tarde, então terá que esperar até amanhã.Python 2 , 209 bytes
Experimente online!
Indexação baseada em 0; nada de especialmente inteligente aqui, apenas dados acessados via fatiamento e usando exec em vez de um loop.
fonte
Carvão ,
103102 bytesExperimente online! Link é a versão detalhada do código. Explicação:
Faça um loop sobre a entrada duas vezes. Cada resultado é impresso implicitamente em sua própria linha.
No segundo loop, apenas gere os olhos.
Enrole o penteado 6 em
-
s, outros penteados nos espaços.Extraia os três caracteres de penteado de uma sequência compactada.
Insira nove espaços entre cada cabelo ou olhos.
Mova 4 espaços para a esquerda.
Imprima o restante dos rostos unidos a um
-
.fonte
R ,
413391 bytesObrigado Giuseppe por 22 menos bytes e obtendo isso abaixo de 400 bytes.
Experimente online!
fonte
utf8ToInt
eintToUtf8
rep
para encurtar: #for(i in s)K(I(c(rep<--
JavaScript (ES6),
200199 bytesEspera entrada indexada em 1.
Experimente online!
Comentado
fonte
Ruby , 164 bytes
Zero indexado. Experimente online!
Todas as coisas difíceis acontecem na linha superior.
"_,o=+# *| )(x ^ &"
contém todos os penteados com 3 caracteres idênticos, dos quais selecionamos oi
caractere thj
.se
j
não for um espaço, a expressão a seguir retornará 3 cópias do caractere. Se for um espaço, selecionamos o penteado correto entre os%w{}
. Os penteados "ímpares" são os números 6,9,13,14,15,16,18,19 ei%11-2
fornecem um hash perfeito para0..7
Tudo o que resta é preencher 14 espaços (centralizados) e imprimir um número apropriado de meios / fundos.
fonte
center(14)
Python 2 , 204 bytes
Experimente online!
fonte
Java 8,
273263 bytesExperimente online.
Explicação:
fonte
R ,
247242 bytesExperimente online!
Agora, tentando elevar R a uma contagem de bytes mais gerenciável ...
Como fazer manipulações de personagens em R é tão irremediavelmente detalhada, decidi listar todos os padrões de rosto e penteado completamente. Para imprimir bem os penteados com os quais uso a
format
funçãojustify="centre"
. Infelizmente, precisamos usar um caractere de preenchimento extra,i==20
poisformat
calcula o preenchimento como se a barra invertida tivesse escapado, como\\|/
.A versão atual não usa hífen à direita.
Edit: Crédito para JayCe por -2 e Giuseppe por -3 bytes.
fonte
justify="centre"
que provavelmente poderia reutilizá-lo. Menos dois caracteres :"/"=rep
format(h[i],,,,"c",14+!20-i)
*
parece ainda melhor - agora se assemelha àstring * number
operação comum a muitos outros idiomas!C! ( C-Wow 1.1.0), 251 bytes
(Requer argumentos a serem transmitidos na execução do programa, separados por espaço)
Versão não destruída:
fonte
Vermelho ,
333319 bytesExperimente online!
fonte
Ruby , 163 bytes
Experimente online!
Indexado a 0. Eu brinquei com a resposta de Level River St e encontrei outra abordagem para codificar os penteados, aparentemente com uma golfabilidade semelhante. Aqui, tratamos o corte de cabelo "mais longo" com 5 caracteres como um caso especial, os padrões triviais na primeira parte da lista são codificados por 1 caracter cada e, na segunda parte, todos os padrões de 3 caracteres são listados literalmente, não importa - esses caracteres são distintos ou não. Finalmente, vem o clichê de cara de macaco.
fonte
C (gcc) ,
210212 bytes-4 bytes graças ao ceilingcat . (Ele cresceu novamente quando corrigi um bug que o código original tinha.)
Bem direto.
Experimente online!
fonte
PowerShell ,
187171 bytes-16 bytes graças ao mazzy
Experimente online!
Indexado a 0, tem um hífen à direita.
Desenrolado:
Nada muito chique. Somente a primeira linha possui uma lógica decente. Ele indexa na cadeia de cabelo usando o
$current_entry_value*3
e retira esse pedaço usandos
ubstring
, antes de juntar todos os pedaços em uma linha grande. Corri para o problema de `escapar do próximo sinal de intercalação, deixando-me pensar por que estava recebendo um erro IndexOutOfBounds, mas isso foi corrigido. Agora, usando uma maneira muito melhor de combinar a primeira linha.195 bytes para seguir as especificações de nenhum hífen inicial / final
fonte
Python 3 , 240 bytes
Experimente online!
fonte
Encantos Rúnicos , 313 bytes
Experimente online!
Razoavelmente compacto em termos de compactação de strings e reutilização de segmentos, sempre que possível, além de usar os valores de entrada como compensações diretas de salto na
B
pecuária.Se o excesso de espaço à direita for permitido, isso poderá ser reduzido em 2 bytes, omitindo-o
4-
na última linha. +2 bytes para a1-
se o final-
não estiver lá (especificações correspondentes, exemplos violadores).O pedaço
" (o o) "
é irritante e impossível de compactar, pois construí-lo usando coisas como" "4*
acaba sendo exatamente o mesmo número de bytes.Passar entradas> 21 faz coisas divertidas. Por exemplo, um único 22 faz a barba rente .
fonte