Los residentes de Flapus usan un sistema de números de base 8. Los números son:
0 - Kuzla
1 - Ponara
2 - Boqkel
3 - Colopee
4 - Vruenat
5 - Foham
6 - Stikty
7 - Kricola
Para los números superiores a 7, el nombre completo del último dígito viene primero, seguido del apóstrofe y los primeros caracteres del otro dígito, hasta la primera vocal inclusive:
11 - Ponara (1) 'po (1)
13 - Colopee (3)' po (1)
64 - Vruenat'sti
55 - Foham'fo
47 - Kricola'vru
A medida que aumentan los números, la fórmula permanece igual: el nombre completo del último dígito es el primero, seguido de un apóstrofe y los primeros caracteres de los otros dígitos, hasta e incluyendo la primera vocal. Tenga en cuenta que, aparte del último dígito (primera palabra), el orden sigue siendo el mismo.
123 - Colopee (3) 'po (1) bo (2)
205 - Foham (5)' bo (2) ku (0)
1123 - Colopee'popobo
7654 - Vruenat'kristifo
La excepción a la regla es para los números que terminan en 0. Aquí la palabra comienza con Ku y se completa con las primeras letras de los otros dígitos, hasta e incluyendo la primera vocal. No se usa apóstrofe.
10 - Kupo
70 - Kukri
350 - Kucofo
630 - Kustico
1000 - Kupokuku
Reto
Escriba un programa o función que acepte un número válido de base 8 y genere el equivalente hablado. Puede suponer que siempre recibirá un número válido. El espacio en blanco final / nueva línea única después de su respuesta está bien. El primer carácter debe estar en mayúscula, como en los ejemplos.
Este es el código de golf . El código más corto en bytes gana. Se aplican lagunas estándar. Las respuestas cuyas longitudes se convierten y se envían adicionalmente en Flapussian obtienen cookies adicionales.
Casos de prueba
0 -> Kuzla
1 -> Ponara
2 -> Boqkel
3 -> Colopee
4 -> Vruenat
5 -> Foham
6 -> Stikty
7 -> Kricola
10 -> Kupo
11 -> Ponara'po
23 -> Colopee'bo
56 - > Stikty'fo
70 -> Kukri
100 -> Kupoku
222 -> Boqkel'bobo
2345 -> Foham'bocovru
Respuestas:
Pyth, 117 bytes (Kricola'popo)
Transpilado a mano a pseudocódigo pitónico:
fuente
if ... else
a un ternario cambiando sufor
ciclo a unamap
operación y luego haciendo algunos cambios menores. Aquí está lo que tengo. También llamaría su atención sobre."
cuál puede usarse en cadenas comprimidas.Retina , Colopee'pokri,
165157143127123 bytesEl avance de línea final es significativo.
Pruébalo en línea!
Explicación
Comenzamos llevando el dígito final al frente e insertando un apóstrofe después. Tenga en cuenta que esto deja los números de un solo dígito sin cambios, ya que la expresión regular no coincide, por lo que esos nunca obtienen un apóstrofe en primer lugar.
Esto reemplaza cada dígito con su nombre completo, independientemente de dónde aparezca.
Esto acorta todos los nombres de dígitos que aparecen después de un apóstrofe. Tenga en cuenta que solo las vocales
iou
aparecen primero en el nombre de un dígito, por lo que verificamos una posición que está justo después de una de ellas, y después de un apóstrofe y luego hacemos coincidir (y eliminar) todas las letras minúsculas que siguen a esa posición. Como hemos insertado los nombres de los dígitos en el caso del título, esto se detendrá antes del siguiente dígito.Esto usa la transliteración para convertir todos los caracteres en mayúsculas
L
, en su contraparte en minúsculasl
, siempre que se encuentren en una coincidencia que comience con'
(para dejar intacta la capital principal).Lo único que queda es manejar correctamente los múltiplos de (octal) 10. En ese caso, tendremos un resultado que comienza con el
Kuzla'
que queremos comenzarKu
. Entonces simplemente eliminamos todas las ocurrencias dezla'
.fuente
JavaScript (ES6), 171
Prueba
fuente
Java (1.8) - Vruenat'fobo (
486340 bytes)Justo cuando pensaba que ya no podía jugar más golf, ¡encontré otros 33 bytes! ¡Muy complacido! Los mayores ahorros fueron al cambiar a matrices de caracteres (más cortas a mayúsculas / minúsculas) y reutilizar la matriz de cadenas de entrada para las palabras.
¡Descubriendo montones de trucos de golf, hasta menos de 400! En teoría, aún podría reducir esto más, ya que dije que una función estaría bien en las reglas, mientras que este es un programa completo.
Actualizado Usando el enfoque de Martin Büttner, refactoré para usar regex en su lugar. ¡Logré guardar otros 10 bytes! Gracias martin
Sin golf
fuente
interface F
y eliminar la declaración pública en el método principal. También puede eliminar el espacio adentroString[] x
y adentro.substring(0, v+1)
."Kuzla,Ponara,Boqkel,Colopee,Vruenat,Foham,Stikty,Kricola".split(",")
es 70 bytes, mientras que la matriz en línea es 74.Python (3.5)
225222217202 bytesUna solución de trabajo con comprensión de listas en python
Explicación
Ganar 3 bytes con la versión de división (versión anterior:
d="Kuzla","Ponara",...
)Inicialización del resultado en función del último dígito.
Cambie la lista d para mantener los primeros 2 o 3 caracteres y poner en minúsculas
Cat the string
fuente
Javascript ES6,
231228225222204 bytesAhorré un montón de bytes gracias a Neil.
fuente
[...s]
lugar des.split``
;b=b==c[0]?"Ku":b+"'"
en lugar deif(b==c[0]){b="Ku"}else b+="'"
; de manera similar para elif(a.length)
(solo use0
para laelse
parte);a.map(d=>b+=c[d].match...)
en lugar de jugar confor
yshift
. Creo que ya hay 29 bytes guardados.[iou]
como su clase de "vocal".F #,
364288250 bytes (Kubofo)Devuelve una función que toma un entero y devuelve su equivalente Flapus. = D
fuente
Python 3 -
181177 bytes (Ponara'bosti)Tenga cuidado con el uso más sorprendente
pow
que verá en toda su vida.u**v
¡es equivalente en el contexto booleano como elu|(not v)
que previamente se jugó con la bonita~v+2|u
expresión!fuente