A mis dos hijos les gusta jugar con el siguiente juguete:
Se pueden tocar las áreas coloreadas con las formas en el interior y la tortuga luego ilumina el área y reproduce un sonido o dice el nombre del color o la forma en el interior. El botón central cambia el modo. Hay un modo en el que las áreas tocan diferentes notas musicales cuando se tocan, con un giro: si el niño toca tres áreas consecutivas en el sentido de las agujas del reloj, se reproduce una melodía especial 1. Si las tres áreas consecutivas tocadas se colocan en sentido antihorario, se reproduce una melodía especial 2.
El reto
Simulemos la lógica interna del juguete. Dada una cadena con 3 presiones del niño, devuelve dos valores distintos y coherentes si las tres presiones son para áreas consecutivas (en sentido horario o antihorario) y un tercer valor distinto si no lo son.
Detalles
- Las áreas de entrada se nombrarán con un carácter cada una, que puede ser su color:
ROYGB
para rojo, naranja, amarillo, verde y azul; o su forma:HSRTC
para corazón, cuadrado, estrella (R
), triángulo y círculo. El caso no importa, puede elegir trabajar con entrada y salida solo en mayúsculas o minúsculas. - El programa recibirá una cadena (o una matriz de caracteres o algo equivalente) con tres pulsaciones. Ejemplos (utilizando los colores):
RBO
,GYO
,BBR
,YRG
,YGB
,ORB
... - El programa generará tres valores distintos y coherentes para representar los tres resultados posibles: un primer valor si la combinación no activa una melodía especial, un segundo valor si la combinación activa la melodía especial en el sentido de las agujas del reloj, y un tercer valor si la combinación activa Melodía especial en sentido antihorario. Ejemplo:
0
para ninguna combinación especial,1
para la melodía activada por una combinación en sentido horario y-1
para la melodía activada por una combinación en sentido antihorario. - No necesita preocuparse por manejar entradas incorrectas.
Casos de prueba
Input Output // Input based on colors
--------------
RBO 0 // No special combination
GYO -1 // Counterclockwise melody triggered
BBR 0 // No special combination
YRG 0 // No special combination
YGB 1 // Clockwise melody triggered
ORB -1 // Counterclockwise melody triggered
OOO 0 // No special combination
BRO 1 // Clockwise melody triggered
Este es el código de golf , ¡así que puede ganar el código más corto para cada idioma!
fuente
[0,0]
,[1,0]
,[0,1]
permitido como salida? Veo la respuesta de Mathematica haciendo eso, y ahorraría 3 bytes en la respuesta 05AB1E.Respuestas:
Java 8,
483933 bytes-6 bytes gracias a @RickHitchcock , ¡así que asegúrate de votarlo también !
Toma el color en mayúscula como cadena de entrada. Salidas
-1
para none,7
para sentido horario y15
para sentido antihorario.Pruébalo en línea.
Explicación:
Antigua respuesta de 39 bytes:
Toma el color en mayúscula como cadena de entrada. Salidas
9362
para none,0
para sentido horario y1
para sentido antihorario.Pruébalo en línea.
Explicación:
fuente
10922
(división entera por/6
) o8191
(división entera por/8
), pero elijo/7
porque es el índice del espacio en la Cadena. :)JavaScript (ES6), 41 bytes
Toma las iniciales de color como entrada. Devuelve
2
para ninguno,true
en sentido horario ofalse
en sentido antihorario.Pruébalo en línea!
fuente
s=>('ROYGBRO_ORBGYOR'.search(s)+8)/8|0
Python 2 , 36 bytes
-1
- Ninguno0
- En sentido horario1
- En sentido antihorarioPruébalo en línea!
fuente
Excel, 29 bytes
Colores en mayúscula como entrada.
Devuelve
#VALUE!
sin patrón,TRUE
en sentido horario,FALSE
en sentido antihorario.Puede ajustarse
IFERROR( ,0)
para+11 bytes
manejar excepciones y devolver '0' para casos sin patrón.fuente
05AB1E ,
1511 bytesGuardado 4 bytes gracias a Kevin Cruijssen y Magic Octopus Urn .
Utiliza formas.
Salida
[0, 0]
para ninguno ,[1, 0]
en sentido horario y[0, 1]
en sentido antihorarioPruébalo en línea! o como un conjunto de pruebas
Explicación
fuente
.•1´₃éC•Â‚εXå}¥
lo que resulta en[0]
,[1]
o[-1]
, por lo 1 de mí. Por cierto, creo (no estoy seguro) puede guardar tres bytes mediante la eliminación de los tres últimos, la salida[0, 0]
,[1, 0]
y[0, 1]
como valores distintos. Veo que la respuesta de Mathematica hace lo mismo. Le pedirá a OP la verificación.‚.•ÌöJη•så
es de 11 bytes si[1,0], [0,1] and [0,0]
se consideran únicos (a menos que me falte algo obvio aquí, agregarƶO
al final de ese 11 byter sigue siendo 13 para la misma respuesta 0, 1, 2 que tiene ahora). Casos de prueba . Casos de prueba 2 . La inversión del orden elimina la necesidad del bucle.JavaScript (ES6), 32 bytes
Devuelve -1 si no hay combinación, 15 si es en sentido antihorario, 7 si es en sentido horario.
Mostrar fragmento de código
fuente
Wolfram Language (Mathematica) ,
4236 bytesPruébalo en línea!
Cuenta el número de veces que aparece la entrada en ambos
"ROYGBRO"
y"ORBGYOR"
. Devuelve{1,0}
en sentido horario,{0,1}
en sentido antihorario y{0,0}
sin combinación especial.Al costo de solo un byte más, podemos obtener salidas de
0
nada,1
en sentido horario y2
en sentido antihorario con"ROYGBRO.ORBGYORBGYOR"~StringCount~#&
.fuente
código de máquina x86,
3936 bytesMontaje:
Pruébalo en línea!
La salida es
23
para ninguno,7
para las agujas del reloj y15
para las agujas del reloj. Basado en la respuesta de @RickHitchcock.Se guardaron 3 bytes usando una instrucción de comparación de cadenas SSE en lugar de usar libc.
fuente
strstr
siempre será una dirección de 32 bits (4 bytes). El código de máquina en mi publicación está desvinculado.Perl 5
-p
, 30 bytesPruébalo en línea!
fuente
APL (Dyalog),
2218 bytes-4 bytes gracias a @ngn
Toma una cadena de iniciales de color. Salidas 0 para ningún patrón especial, -1 para sentido antihorario, 1 para sentido horario.
Pruébalo en línea!
fuente
Python 2 ,
4543 bytesPruébalo en línea!
Con ideas y crédito serio para @DeadPossum
-2 con agradecimiento a @JoKing. Ahora produce -1 = en sentido antihorario, 0 = ninguno, 1 = en sentido horario.
Mi esfuerzo original está abajo para propósitos históricos.
Python 2 ,
5251 bytesPruébalo en línea!
0 = ninguno, 1 = en sentido antihorario, 2 = en sentido horario
fuente
Python 2 ,
3536 bytes+1: por alguna razón, pensé que todos los botones serían distintos> _ <
Desarrollado independientemente de lo que acabo de ver (y ahora votado) por Dead Possum
Pruébalo en línea!
fuente
Stax ,
1413 bytesEjecutar y depurarlo
La salida es
fuente
Pip , 19 bytes
Salidas
10
para sentido horario,01
para sentido antihorario,00
para ninguno.Pruébalo en línea!Explicación
fuente
J , 21 bytes
Pruébalo en línea!
Cómo funciona
Logra la máxima cantidad de reutilización de funciones.
fuente
Jalea , 12 bytes
Pruébalo en línea!
-4 gracias a Jonathan Allan .
En sentido horario: En
[1, 0]
sentido antihorario:
[0, 1]
Otro:
[0, 0]
fuente
R , 38 bytes
Pruébalo en línea!
Devoluciones :
integer(0)
2
1
fuente
Carbón , 18 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
fuente
Lisp común , 68 bytes
Pruébalo en línea!
fuente
Limpio , 63 bytes
Pruébalo en línea!
[True, True]
sin ruidos especiales,[True, False]
en sentido antihorario,[False, True]
en sentido horario.fuente
Japt,
1714 bytesToma los colores como entrada, en minúsculas. Devuelve
0
en sentido horario,1
en sentido antihorario o-1
si no hay combo.Intentalo
Expansión
fuente
Ruby ,
5336 bytesPruébalo en línea!
Entrada: un entero de 3 dígitos, donde los dígitos representan colores:
Salida: 0 para sentido horario, 1 para sentido antihorario, de lo
nil
contrario.fuente
C (gcc) , 55 bytes
Devuelve 0 para ninguno, -1 para CCW y 1 para CW.
Pruébalo en línea!
fuente