Desafío
Considere el arco iris como siete colores, representados por cadenas como Red Orange Yellow Green Blue Indigo Violet
.
Su tarea es crear un programa que reciba uno de estos colores como entradas y salidas a continuación en el orden del color del arco iris. Esto incluye la superposiciónViolet -> Red
Entrada
Una cadena que contiene uno de los colores del arco iris.
Salida
El siguiente en orden color del arcoiris.
Reglas
- Los nombres de los colores distinguen entre mayúsculas y minúsculas. Deben coincidir con el caso incluido en esta publicación.
- La entrada siempre será válida. Cualquier comportamiento está permitido para entradas no válidas.
- Este es el código de golf, por lo que gana la menor cantidad de bytes.
Ejemplo de entrada y salida
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.
Respuestas:
SOGL V0.12 , 23 bytes
Pruébalo aquí!
Explicación:
fuente
JavaScript, 68 bytes
Para la entrada
"Red"
, esta función primero construye un RegExp/Red(.[a-z]*)/
para que coincida con la cadena'RedOrangeYellowGreenBlueIndigoVioletRed'
y luego devuelve el primer resultado de captura.Mostrar fragmento de código
fuente
'RedOrangeYellowGreenBlueIndigoVioletRed'
o algo asíPerl 5
-p
,5857 bytesPruébalo en línea!
Ahora que el desafío ha cambiado para ser cíclico, la solución regex
ya no es óptimo (debido al doble
Red
)También 57 bytes:
Pruébalo en línea!
fuente
Python , 79 bytes
Pruébalo en línea!
Manijas
Violet -> Red
. La función deseada se proporciona de forma anónima en la segunda línea.80 bytes
Pruébalo en línea!
fuente
Perl 6 , 56 bytes
Pruébalo en línea!
Explota el hecho de que los bits 2-4 de los códigos ASCII de la primera letra de cada color se asignan a 0-6.
Aquí hay una buena solución no competitiva que usa "púrpura" en lugar de "índigo" y "violeta" (38 caracteres, 59 bytes):
Pruébalo en línea!
fuente
%12
solución para el coco, pero, por supuesto, esta es más ordenada.Ruby
-n
,6260 bytes-2 por Asone Tuhid.
Pruébalo en línea!
El enfoque de Regex también parece prometedor para Ruby. Sin embargo, llegué a una solución más corta usando una búsqueda anticipada e imprimiendo directamente el partido, en lugar de jugar con grupos de captura. La lista de colores está en dirección inversa, ya que la búsqueda anticipada es 1 byte más barata que la búsqueda anticipada.
fuente
/#$_/
interpola)Rojo , 87 bytes
Pruébalo en línea!
fuente
05AB1E , 30 bytes
Pruébalo en línea!
Explicación
fuente
Excel, 85 bytes
Utiliza nombres en minúsculas.
Mismo enfoque, con letras mayúsculas 86 bytes:
fuente
Haskell ,
80 7175 bytes¡Gracias a Laikoni por acortar 9 bytes!
Pruébalo en línea!
Otra solución, un poco más idiomática, pero no pude acortarla:
Debe derivar
Read
debido al requisito de que la entrada es una cadena y al menosEq
oShow
para probar la igualdad o mostrar el resultado.fuente
span
: ¡ Pruébelo en línea!span
...Violet
debería ajustarse aRed
, por lo que debe agregarRed
nuevamente al final de la cadena.succ Violet
, no funcionará paraEnum
s, no se envuelva :(Retina ,
6558 bytesPruébalo en línea!
Explicación
Comenzamos agregando
(.[a-z]+)
a la entrada, convirtiéndola en una expresión regular que coincida con el color de entrada, seguido inmediatamente por un color más (capturando el último).Ahora
:
intercambia la entrada del escenario con su propia expresión regular. Entonces, el resultado anterior se convierte en la expresión regular y se compara con la lista de colores. La coincidencia (única) se reemplaza con su primer grupo de captura (es decir, el siguiente color en el ciclo) y se devuelve. La salida al final del programa ocurre automáticamente.fuente
\1
y saltar al objetivo desperdicia muchos bytes: :-)Vim,
59565352 Bytes-1 byte gracias a tsh
fuente
Java (JDK 10) , 77 bytes
Pruébalo en línea!
Créditos
fuente
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
Pruébalo en línea!
fuente
s->"# green indigo yellow # # orange blue # violet red".split()[ord(s[0])%12]
Casco , 28 bytes
Pruébalo en línea!
Quizás haya mejores opciones para manejar los argumentos, pero esto es lo mejor que pude encontrar
Explicación
fuente
Stax ,
313029 bytesEjecutar y depurarlo
Esto usa la instrucción de traducción de anillo. Reemplaza cada elemento en una matriz con el siguiente del "anillo decodificador". Por lo general, se usa para reemplazar caracteres en una cadena, pero también se puede usar en una cadena completa, si está envuelta en una matriz singleton.
Aquí está la representación ascii desempaquetada, sin golf y comentada del mismo programa.
Ejecute este
fuente
J ,
67 6462 bytes-2 bytes gracias a FrownyFrog
Pruébalo en línea!
fuente
&.
En realidad funciona para esto. Pruébelo en líneaR ,
10993 bytesPruébalo en línea!
-16 gracias a Giuseppe por el uso de
match
consejosfuente
match(y,x)%%7+1
es más corto para indexar que suif
declaración. Además, el incorporadocolors()
contiene muchos nombres de colores, si encuentra los índices :)colors()
que no contieneindigo
! Ah bueno, todavía, +1!match
es mejor aquícolors()
: /Lote, 97 bytes
Explicación: El
call
en la segunda línea tiene el efecto de sustituir el parámetro en el comando y evaluarlo, convirtiéndolo enset s=%s:Red =%
, por ejemplo , lo que elimina el prefijo de la cadena que incluye el parámetro. La sustitución en la tercera línea reemplaza todos los espacios con separadores de declaraciones y comentarios. Esto funciona porque la sustitución de cadenas ocurre antes del análisis.fuente
Ruby
-n
,7569 bytesPruébalo en línea!
fuente
i&&
cosa? No hay necesidad de comprobar sinil
, como “Ignorar cualquier error si esto no es un color.”Julia 0.6 , 76 bytes
Pruébalo en línea!
Esto maneja el Violet-> Red reciclando la cadena con el poder
^
operador de .Aquí hay una solución un poco más larga sin expresiones regulares:
fuente
PowerShell , 74 bytes
Pruébalo en línea!
Toma la cuerda
"Red ... Violet "
y la cadena la multiplica por dos para manejar adecuadamente elViolet -> Red
caso de prueba. Luego-split
colocamos esa cadena en la entrada$args
para darnos una matriz de dos cadenas. Tomamos la segunda cuerda del mismo[1]
, luego-split
en el espacio en blanco para darnos una serie de cadenas y tomar la primera[0]
.Por ejemplo, para la entrada
"Yellow"
, el primer paso dará como resultado@("Red Orange ", " Green Blue Indigo ... Indigo Violet ")
. Tomamos el segundo de eso, lo dividimos en espacios en blanco (que elimina el espacio en blanco), lo que da como resultado@("Green", "Blue", ... "Violet")
, por lo que tomar[0]
uno de los mismos da como resultado la siguiente cadena adecuada.fuente
Lenguaje de fórmulas IBM / Lotus Notes,
7974 bytesVersión anterior para 79:
Toma datos de un campo de texto editable llamado
a
.No hay TIO para el lenguaje de fórmulas, así que aquí hay un par de capturas de pantalla.
fuente
PHP, 92 bytes
Pruébalo en línea!
fuente
Kotlin , 73 bytes
Pruébalo en línea!
Aprovechando el hecho de que muchos colores son de 6 caracteres, los que no lo son tienen prefijos de espacios para que tengan 6 caracteres de longitud. Con suerte, es aceptable que algunos de los colores se emitan con espacios antes de ellos.
por ejemplo, rojo es
" Red"
, azul es" Blue"
fuente
SmileBASIC,
9484 bytesfuente
Gema , 67 personajes
Ejecución de muestra:
Gema , 59 caracteres
Aburrido uno. El enfoque más tonto de todos los tiempos, pero bastante corto.
Ejecución de muestra:
fuente
q / kdb + ,
5955 bytesSolución:
Ejemplos:
Explicación:
Cree un diccionario de color => siguiente color, la entrada es la clave del diccionario:
Prima:
Son 53 bytes en K4:
fuente
Japt ,
4543 bytes-2 bytes gracias a Shaggy
Pruébalo en línea!
fuente
N
sed, 72 bytes
Pruébalo en línea
Ejemplo 1:
Entrada:
Salida:
Ejemplo 2
Entrada:
Salida:
fuente