(Esta es mi primera pregunta de código de golf)
Cuando era niño, mi papá y yo inventamos un juego en el que la placa que vemos en los autos puede dar ciertos puntos basados en algunas reglas bastante simples:
La cantidad X de la misma letra o número da puntos X-1, ejemplos:
22 = 1 point
aa = 1 point
5555 = 3 points
Los números deben estar uno al lado del otro, por lo que 3353
solo da 1 punto, ya que el 5 rompe la secuencia de 3.
Una secuencia de números X en orden ascendente o descendente, con un mínimo de 3, da X puntos, ejemplos:
123 = 3 points
9753 = 4 points
147 = 3 points
El sistema de puntos solo funciona para números de 1 dígito, por lo 1919
que no da puntos, y 14710
solo da 3, (147).
Las secuencias se pueden combinar para hacer más puntos, ejemplos:
1135 = 4 points (1 point for 11 and 3 points for 135)
34543 = 6 points (3 points for 345 and 3 points for 543)
Sin embargo, no está permitido cortar una secuencia más grande en 2 secuencias más pequeñas para obtener puntos adicionales: 1234 = 123, 234 (6 points)
no está permitido.
Su tarea es, dada una secuencia, determinar la cantidad de puntos que otorga la placa.
En Dinamarca, las placas están estructuradas de la siguiente manera: CC II III, donde C es carácter y yo es entero, y por lo tanto, mis entradas de ejemplo reflejarán esta estructura. Si lo desea, puede hacer que la secuencia se adapte a su propia estructura o, si se siente realmente aventurero, deje que el programa analice la estructura de la placa y haga que funcione en cualquier tipo de placa en todo el mundo. Explique explícitamente la estructura que decide usar en su respuesta.
Puede tomar la entrada de la forma que desee, ya sea una cadena o una matriz parece tener más sentido para mí.
Entrada de prueba | salida:
AA 11 111 | 5
AB 15 436 | 3
OJ 82 645 | 0
UI 65 456 | 6
HH 45 670 | 5
YH 00 244 | 5
AJ 00 754 | 1
Debido a la naturaleza de elegir su propia estructura, o incluso cubrir todas las estructuras, no veo necesariamente cómo se puede determinar explícitamente un ganador. Supongo que el ganador serán los bytes más cortos en la estructura que uno haya decidido. (Y no tome una entrada como CICIC, solo para que sea más fácil para usted)
EDITAR:
Debido a los comentarios que piden, tengo algunas informaciones adicionales para compartir: una secuencia de números ascendentes o descendentes se refiere a una secuencia aritmética, por lo que X +/- a * 0, X +/- a * 1, ... X +/- a * n etc. Así que 3-5-7, por ejemplo, es 3 + 2 * 0, 3 + 2 * 1, 3 + 2 * 2. Sin embargo, la secuencia no necesita comenzar desde 0 ni terminar en 0.
MÁS EDITAR:
Puede dar la entrada de la forma que desee, no necesita ingresar espacios, guiones o cualquier otra cosa que haga que una placa sea más legible. Si puede guardar bytes solo aceptando letras mayúsculas o algo así, puede hacerlo también. El único requisito es que su programa pueda tomar una cadena / matriz / cualquier cosa que contenga tanto caracteres como números, y generar la cantidad correcta de puntos de acuerdo con las reglas establecidas.
XX 87 654
. Se me ocurrió algo que era correcto para todos sus casos de prueba, pero de alguna manera incorrecto para este ... Trabajando para solucionarlo.CCIIIII
no haya espacios), o de lo contrario este problema carece de un criterio de ganancia objetivo, que requerimos por aquí. Tal como está, "(y no tome una entrada como CICIC, solo para que sea más fácil para usted)" es muy subjetivo. ¿Qué es y no es una estructura admisible?IA99999
(contiene una secuencia decreciente de puntos de código, pero no números).Respuestas:
05AB1E ,
25222018 bytesAcepta una cadena de caracteres alfabéticos en minúsculas y números sin espacios.
Pruébalo en línea! o como un conjunto de pruebas
fuente
Casco ,
201615 bytes-1 byte gracias a @Zgarb
Toma entrada sin espacios y en minúsculas.
Pruébalo en línea!
Explicación
fuente
K0
puede estar¬
aquí.IA99999
.Python 3 ,
19385 bytes-3 bytes gracias a Lynn
Toma de entrada como un byte-cadena con letras minúsculas como:
b'aa11111'
.Pruébalo en línea!
fuente
C=0!=d==c-l
Es aún más corto.Java 8, 195 bytes
Definitivamente se puede jugar un poco más usando otra técnica para verificar las secuencias.
Explicación:
Pruébalo aquí.
fuente
Pyth ,
5150 bytes (asombroso)Verifique todos los casos de prueba o Pruébelo aquí.
fuente
R ,
153,145, 143 bytesFunción anónima que toma un vector de caracteres y devuelve un entero.
Entrada esperada
z(c("A", "A", "1", "1", "1", "1", "1"))
Pruébalo en línea!
Versión sin golf
fuente
C (gcc) , 91 bytes
Pruébalo en línea!
Idea robada de la respuesta Python de Felipe Nardi Batista .
fuente
Pyth ,
4842 bytesPuerto directo de mi respuesta de Python. Toma la entrada como una cadena de bytes con letras minúsculas como: b'aa11111 '.
Esta es la primera vez que codifico en Pyth, por lo que cualquier sugerencia es bienvenida: D
Pruébalo aquí
fuente
JavaScript,
216192186202201 bytesNo minificado
Editar historial:
0000 XXX
formato. (-24 bytes)fuente
0000
da 7 puntos, ¿es eso correcto? (se lee como una secuencia aritmética y una secuencia numérica repetida al mismo tiempo)