Desafio
Considere o arco-íris como sete cores, representadas por seqüências de caracteres como Red Orange Yellow Green Blue Indigo Violet
.
Sua tarefa é criar um programa que receba uma dessas cores como entrada e saída a seguir na ordem da cor do arco-íris. Isso inclui sobreposiçãoViolet -> Red
Entrada
Uma sequência contendo uma das cores do arco-íris.
Saída
O próximo em ordem cor do arco-íris.
Regras
- Os nomes de cores diferenciam maiúsculas de minúsculas. Eles devem corresponder ao caso incluído nesta postagem.
- A entrada sempre será válida. Qualquer comportamento é permitido para entrada inválida.
- Isso é código de golfe, então a menor quantidade de bytes vence!
Exemplo de entrada e saída
Input -> Output
Red -> Orange
Orange -> Yellow
Yellow -> Green
Green -> Blue
Blue -> Indigo
Indigo -> Violet
Violet -> Red
Provide at least one example input and output. Make sure they match your own description of what the input should look like.
Respostas:
SOGL V0.12 , 23 bytes
Experimente aqui!
Explicação:
fonte
JavaScript, 68 bytes
Para entrada
"Red"
, essa função primeiro constrói um RegExp/Red(.[a-z]*)/
para corresponder à sequência'RedOrangeYellowGreenBlueIndigoVioletRed'
e, em seguida, retorna o primeiro resultado da captura.Mostrar snippet de código
fonte
'RedOrangeYellowGreenBlueIndigoVioletRed'
algo assimPerl 5
-p
,5857 bytesExperimente online!
Agora que o desafio foi alterado para ser cíclico, a solução regex
não é mais ideal (devido ao dobro
Red
)Também 57 bytes:
Experimente online!
fonte
Python , 79 bytes
Experimente online!
Alças
Violet -> Red
. A função desejada é dada anonimamente na segunda linha.80 bytes
Experimente online!
fonte
Perl 6 , 56 bytes
Experimente online!
Explora o fato de que os bits 2-4 dos códigos ASCII da primeira letra de cada cor são mapeados para 0-6.
Aqui está uma boa solução não concorrente que usa "roxo" em vez de "índigo" e "violeta" (38 caracteres, 59 bytes):
Experimente online!
fonte
%12
solução para o coco, mas é claro que isso é mais agradável.Ruby
-n
,6260 bytes-2 por Asone Tuhid.
Experimente online!
A abordagem Regex também parece promissora para Ruby. No entanto, cheguei a uma solução mais curta usando um lookahead e imprimindo diretamente a partida, em vez de jogar com grupos de captura. A lista de cores está na direção inversa, já que a aparência da cabeça é 1 byte mais barata que a aparência.
fonte
/#$_/
interpola)Vermelho , 87 bytes
Experimente online!
fonte
05AB1E , 30 bytes
Experimente online!
Explicação
fonte
Excel, 85 bytes
Usa nomes em minúsculas.
Mesma abordagem, com letras maiúsculas 86 bytes:
fonte
Haskell ,
80 7175 bytesObrigado a Laikoni por reduzir 9 bytes!
Experimente online!
Outra solução, um pouco mais idiomática, mas não consegui reduzi-la:
Ele precisa derivar
Read
devido ao requisito de que a entrada seja uma sequência e, pelo menosEq
ouShow
para testar a igualdade ou mostrar o resultado.fonte
span
: Experimente online!span
...Violet
deve envolver em torno deRed
, então você precisa adicionarRed
novamente ao final da sequência.succ Violet
não vai funcionar paraEnum
s não envolver em torno :(Retina ,
6558 bytesExperimente online!
Explicação
Começamos anexando
(.[a-z]+)
à entrada, transformando-a em um regex que corresponde à cor da entrada, imediatamente seguido por exatamente mais uma cor (capturando a última).Agora, a
:
entrada do palco é trocada com seu próprio regex. Portanto, o resultado anterior se torna o regex e é comparado com a lista de cores. A partida (única) é substituída por seu primeiro grupo de captura (ou seja, a próxima cor do ciclo) e retornada. A saída no final do programa acontece automaticamente.fonte
\1
e saltar para os resíduos alvo muitos bytes: :-)Vim,
59565352 Bytes-1 byte graças a tsh
fonte
Java (JDK 10) , 77 bytes
Experimente online!
Créditos
fonte
s->"RedOrangeYellowGreenBlueIndigoVioletRed".split(s)[1].split("(?=[A-Z])")[0]
s->"Red Orange Yellow Green Blue Indigo Violet Red".split(s)[1].split(" ")[1]
Coco , 79 bytes
Experimente online!
fonte
s->"# green indigo yellow # # orange blue # violet red".split()[ord(s[0])%12]
Casca , 28 bytes
Experimente online!
Talvez haja melhores opções para gerenciar os argumentos, mas isso é o melhor que pude encontrar
Explicação
fonte
Stax ,
313029 bytesExecute e depure
Isso usa a instrução de conversão de toque. Ele substitui cada elemento em uma matriz pelo seguinte do "anel decodificador". Geralmente, é usado para fazer a substituição de caracteres em uma string, mas também pode ser usado em uma string inteira, se estiver envolvido em uma matriz singleton.
Aqui está a representação ASCII descompactada, não destruída e comentada do mesmo programa.
Execute este
fonte
J ,
67 6462 bytes-2 bytes obrigado a FrownyFrog
Experimente online!
fonte
&.
realmente funciona para isso. Experimente onlineR ,
10993 bytesExperimente online!
-16 agradecimentos a Giuseppe pelo uso de
match
conselhosfonte
match(y,x)%%7+1
é mais curto para indexação do que suaif
declaração. Além disso, o embutidacolors()
contém uma grande quantidade de nomes de cores, se você encontrar os índices :)colors()
que não contémindigo
! Ah, bem, ainda, +1!match
é melhor aquicolors()
: /Lote, 97 bytes
Explicação: A
call
segunda linha tem o efeito de substituir o parâmetro no comando e avaliá-lo, transformando-o emset s=%s:Red =%
, por exemplo , que exclui o prefixo da sequência que inclui o parâmetro. A substituição na terceira linha substitui todos os espaços por separadores de instrução e comentários. Isso funciona porque a substituição de string ocorre antes da análise.fonte
Ruby
-n
,7569 bytesExperimente online!
fonte
i&&
coisa? Não há necessidade de verificarnil
, como “Ignore qualquer erro se isso não é uma cor.”Julia 0.6 , 76 bytes
Experimente online!
Isso lida com o violeta-> vermelho reciclando a corda com o
^
operador de energia .Aqui está uma solução um pouco mais longa sem regexes:
fonte
PowerShell , 74 bytes
Experimente online!
Pega a string
"Red ... Violet "
e multiplica-a por dois para lidar adequadamente com oViolet -> Red
caso de teste. Em seguida, colocamos-split
a string na entrada$args
para fornecer uma matriz de duas strings. Tomamos a segunda corda do mesmo[1]
, em seguida,-split
que no espaço em branco para nos dar uma matriz de strings e tomar a primeira[0]
.Por exemplo, para entrada
"Yellow"
, o primeiro passo resultará em@("Red Orange ", " Green Blue Indigo ... Indigo Violet ")
. Nós pegamos o segundo, dividimos no espaço em branco (o que remove o espaço em branco), resultando em@("Green", "Blue", ... "Violet")
, portanto, pegar[0]
um deles resulta na próxima sequência correta.fonte
IBM / Lotus Notes Formula Language,
7974 bytesVersão anterior para 79:
Recebe entrada de um campo de texto editável chamado
a
.Não há TIO para o idioma das fórmulas, então aqui estão algumas capturas de tela.
fonte
PHP, 92 bytes
Experimente online!
fonte
Kotlin , 73 bytes
Experimente online!
Aproveitando o fato de que muitas cores têm 6 caracteres, as que não são são prefixadas com espaços para torná-las 6 caracteres. Espero que seja aceitável que algumas cores sejam produzidas com espaços à sua frente.
por exemplo, vermelho é
" Red"
, azul é" Blue"
fonte
SmileBASIC,
9484 bytesfonte
Gema , 67 caracteres
Exemplo de execução:
Gema , 59 caracteres
Chato. A abordagem mais burra de todos os tempos, mas bastante curta.
Exemplo de execução:
fonte
q / kdb + ,
5955 bytesSolução:
Exemplos:
Explicação:
Crie um dicionário de cor => próxima cor, a entrada é a chave do dicionário:
Bônus:
São 53 bytes no K4:
fonte
Japonês ,
4543 bytes-2 bytes graças a Shaggy
Experimente online!
fonte
N
sed, 72 bytes
Experimente Online
Exemplo 1:
Entrada:
Saída:
Exemplo 2:
Entrada:
Saída:
fonte