Na versão musical de Les Miserables, uma música aparece chamada "Red and Black". Aqui está parte dessa música:
Vermelho - o sangue de homens furiosos!
Preto - a escuridão das eras passadas!
Vermelho - um mundo prestes a amanhecer!
Preto - a noite que termina finalmente!
Sua tarefa é transformar a entrada em um hino retumbante "Vermelho e Preto".
Entrada
Texto delimitado por novas linhas ou uma entrada de texto adequada semelhante. Por exemplo,
The blood of angry men!
The dark of ages past!
A world about to dawn!
The night that ends at last!
A entrada vazia está indefinida (fora do escopo).
Resultado
Se o comprimento (número de linhas, comprimento da matriz de entrada ou similar) da entrada for ímpar, não produza nada ou produza falsey. Seu envio pode não gerar erros ou tentar gerar a saída correta.
Caso contrário, transforme a entrada em uma letra vermelha / preta. Vire todas as letras maiúsculas no início de uma linha para minúsculas. Adicione Red
mais um delimitador à frente das linhas ímpares e Black
mais um delimitador (visível) à frente das linhas pares. O delimitador também deve estar entre espaços, para que a saída pareça não aglomerada (e não destruída;)).
Agora você tem sua saída.
Casos de teste
O delimitador de saída é -
.
In:
The blood of angry men!
The dark of ages past!
A world about to dawn!
The night that ends at last!
Out:
Red - the blood of angry men!
Black - the dark of ages past!
Red - a world about to dawn!
Black - the night that ends at last!
In:
test test
1
[][][]
BBB
Out:
Red - test test
Black - 1
Red - [][][]
Black - bBB
In:
I feel my soul on fire!
The color of desire!
The color of despair!
Out:
falsey OR nothing
In:
Red - I feel my soul on fire!
Black - My world if she's not there!
Out:
Red - red - I feel my soul on fire!
Black - black - My world if she's not there!
Respostas:
05AB1E , 26 bytes
Código:
Usa a codificação 05AB1E . Experimente online!
Explicação:
fonte
V ,
31, 30 bytesExperimente online!
Hexdump:
Isso é trivial em V, mas o caso extremo de entradas ímpares torna complicado porque V realmente não tem condicionais. Felizmente, podemos lidar com isso com um custo relativamente pequeno de
+6
bytes.fonte
Haskell ,
104120113112111110 bytesExperimente online!
Ungolfed com explicação
f
é uma função que pega uma lista de strings (também conhecida como lista deChar
s) e retornaMaybe
a mesma. As funções de Haskell são bastante "puras" e, portanto, precisamos deixar claro que essa função pode não retornar nada. (Uma função do tipoMaybe a
retornaNothing
ouJust a
).O
|
operador é um guarda - uma espécie de condicional. O primeiro ramo é seguido seeven $ length $ x
(que é outra maneira de escrevereven (length x)
) forTrue
. Caso contrário, o segundo (1<2
no exemplo do golfe, que é sempre verdadeiro) é seguido e retornamosNothing
.zipWith
pega uma função de dois argumentos e a aplica a cada elemento de duas listas. A função que estamos usando aqui é\(h : t) x -> x ++ toLower h : t
.h : t
separa implicitamente o primeiro caractere do nosso primeiro argumento, que é o tipo de coisa agradável que você pode fazer em Haskell. A primeira lista é a entrada (que já sabemos que contém um número par de linhas) e a segunda alterna infinitamente "Vermelho -" e "Preto -" (listas infinitas são outra coisa interessante que é possível, desta vez porque Haskell é preguiçoso - ele só se importa com o que você usa).fonte
(h:t)!x=x++toLower h:t
salva alguns bytes.f x|odd$length$x=Nothing|1<2=Just ...
mempty
economiza 1 byte em comparação comNothing
!c="Red - ":"Black - ":c
e usando emc
vez decycle["Red - ","Black - "]
: Experimente online!Gelatina , 29 bytes
Um programa completo.
Usa a opção de saída "falsey" para entradas com um número ímpar de linhas.
Experimente online!
Como?
fonte
Japonês ,
363534 bytesSaídas
0
parafalse
. Inclui um imprimível após o segundoR
.Experimente online
fonte
C,
11210710510399 bytes-4 graças ao ASCII-apenas
-2 graças ao Mego
Toma uma "matriz" como entrada. Exemplo:
Como funciona
i
cria uma variáveli
fora de todas as funções, o que significa que é automaticamente inicializado como 0.main(a,s)char**s;{
declara a função principal, que recebe dois argumentos - umint a
(número de argumentos da linha de comando) e umchar ** s
(conjunto de argumentos da linha de comando).for(;a%2&++i<a;)
é um loop que verifica sea
é par (a%2
) e se é menor que o número de argumentos da linha de comando passados (i<a
).printf("%s - %c%s\n",i%2"Red":"Black",tolower(*s[i]),s[i]+1
impressões:i
for ímpar, "Preto" sei
for par (i%2?"Red":"Black"
)tolower(*s[i])
)s[i]+1
)Experimente online!
fonte
=0
peça para salvar mais 2 bytes.Röda , 97 bytes
Experimente online!
fonte
Gelatina , 30 bytes
Experimente online!
fonte
Retina , 58 bytes
Experimente online!
fonte
CJam, 41 bytes
fonte
JavaScript (ES6), 93 bytes
Toma a música como uma matriz de linhas.
Mostrar snippet de código
fonte
Python 2 , 215-> 184-> 165 bytes
Salva 31 bytes de acordo com o comentário de Stephen S '
Challenger5 reduziu para 165 bytes
Experimente online!
fonte
Javascript, 118 bytes
Teste
Mostrar snippet de código
fonte