Tengo una tarea simple que debería ser relativamente fácil de implementar mediante código. Su objetivo es escribir un programa que genere el tiempo escrito en español, dado el tiempo en formato HH: MM. Es probable que muchas personas no sepan cómo hacer esto, así que lo explicaré.
El tiempo en español es bastante lógico. Suele seguir el patrón de "Es la / Son las (hora) y (minutos)". Las horas están en formato de 12 horas, y "Es la" solo se usa si la hora es 1 (es decir, la una en punto). Los minutos son una historia diferente. Si el minuto es menor que 30, entonces se representa como se muestra arriba. Sin embargo, si el minuto supera los 30, la hora se redondea y el minuto se resta. Por ejemplo, 7:35 se traduce al equivalente de "8 horas menos 25 minutos". Algunos ejemplos más se darán a continuación. La lista de números en español que son necesarios se puede encontrar aquí . Hay acentos en algunos números, pero no son necesarios.
Nota: La fuente dice "uno", pero para ser gramaticalmente correcto debería ser "una". Esto no debería afectar ninguna respuesta hasta ahora.
Nota 2: Además, "cero" no es necesario. Si su programa emite "Es la una" o "Son las tres", está bien para mí. Perdón por estos cambios en las reglas.
Reglas
- La información se proporcionará a través de STDIN o su equivalente en su idioma.
- No leer desde bibliotecas externas.
- Su código puede hacer cualquier cosa con una entrada no válida.
Bonos
- -10 si su código agrega estas frases adicionales: "y cuarto" para: 15, "y media" para: 30 y "menos cuarto" para: 45 (redondeado).
- -15 si su código puede manejar AM y PM, respondiendo con "de la mañana" y "de la tarde", en consecuencia.
- -15 si su código puede traducir la hora actual si no se proporciona ninguna entrada.
Tanteo
- Este es un desafío de código de golf y se puntuará por bytes, no por caracteres.
Ejemplos
Entrada: 8:10
Salida:Son las ocho y diez.
Entrada: 6:45
Salida:Son las siete menos quince (or cuarto).
Entrada: 1:29
Salida:Es la una y veintinueve.
Entrada: 12:55
Salida:Es la una menos cinco.
Avíseme si hay algo que especificar aquí. Esta es mi primera pregunta, por lo que definitivamente no es perfecta.
Es la una y cero
es bastante repetitivo, así que entiendo tu punto. No especifiqué esto, así que supongo que cualquiera de los dos estaría bien. Gracias por la respuesta.01:21
como un caso de prueba, porque al menos un respondedor estaba confundido por lo que dijo sobre una vs uno .Respuestas:
JavaScript (ES6) 308
316Edit2 corrección de errores Editar olvidó reclamar el bono
Como un programa con E / S a través de una ventana emergente
Como una función comprobable
Prueba en la consola FireFox / FireBug
Salida
fuente
¡Sí, el lenguaje menos esperado para aparecer en un concurso de golf, codificado por el peor golfista del mundo, ha vuelto!
Java: 676 bytes (716-10-15-15)
Golfizado:
Sin golf:
Trata con
quarto
ymedia
, con AM / PM y no tiene entrada. Así que puedo reclamar todas las bonificaciones, aunque eso, si no implementara esas características, tendría una puntuación aún más baja, jajaja. palmasfuente
Python 3: 294 caracteres - 10 = 284
Esto obtiene la bonificación de diez puntos por usar "cuarto" y "medios"
Leemos las horas y minutos como
int
s. Si los minutos están por encima de 30, pasamos a la siguiente hora, medimos minutos desde 60 y cambiamos la conjunción a "menos".La lista
d
tiene las traducciones de los números españoles hasta 15. Hacemosd[0]
sea''
para evitar cosas como "diecicero". Esto se hace llamando torpementesplit(' ')
con un espacio inicial; el regularsplit
simplemente lo ignoraría. El caso de cero minutos se maneja más tarde.Para obtener números superiores a 15, combinamos la cadena de diez dígitos con la cadena de un dígito apropiada.
15
y30
están escritos como "medios" y "cuarto" sin costo alguno.Python 3 ahorra una red de caracteres sobre Python 2: -4 para en
input
lugar deraw_input
, +2 para parens en la impresión, +1 para//
.fuente
una
auno
, debería funcionar ahora.PHP,
351349360 - 15 = 345 BytesEste programa no es línea de comando: toma entrada a través de $ _GET [0]. Puede que tenga que deshabilitar los avisos en su php.ini. Ahora viene con tiempo automático sin entrada, gracias a Niet the Dark Absol.
Trucos utilizados:
~(...)
guarda un byte invirtiendo bit a bit una cadena, ya que no necesita comillas, ya que PHP generalmente supone que todo ASCII de 0x80 a 0xFF es una cadena.<?=preg_filter(...,...)
: El<?=
es un atajo para escribir<? echo
.preg_filter()
generalmente aplica reemplazos en una cadena usando una expresión regular, pero podemos usar el modificador depreciado / e para evaluar la cadena resultante como código PHP. Por lo tanto, en lugar de tener que dividir la cadena de entrada en dos variables separadas, podemos usar referencias inversas ($ 1 y $ 2) en la cadena de entrada coincidente, ahorrando grandes cantidades de bytes.fuente
$_GET[0]?:date(~·Å–)
para restar 3 de tu puntaje.C ++:
474...422411 bytesEsta versión está canjeando el bono cuarto / media (-10).
Mi primer intento en el golf de código! Intentaré mejorarlo este fin de semana.
Sin golf:
fuente
m%=10
Lua, 450-10 (cuarto / media) - 15 (manana / tarde) = 425
H>=12
conH<12
y conmutar la expresión dependiente de alrededor.table.concat
corrigió el caso de cero minutos, se cambió por operaciones de cadena y se agregó la sugerencia de @ edc65, agregando finalmente 22 bytes.function
cuerpo hacia el trozo principal redujo la longitud en 15 bytes .fuente
Es la una y uno
D - 484 bytes
fuente
Es la una y uno
Python 3, 409 bytes
fuente
'string1 string2 string3'.split()
d[j]if i<31 else d[(j+1)%12]
ad[(j+(i>30))%12]
. En general, si sus dos alternativas tienen una estructura similar, a menudo puede hacer una expresión simple que iguale a cada una de ellas dependiendo del booleano.Ruby, 313 (338-15-10)
Esta solución traduce la hora actual cuando no se ingresó información y agrega las tres frases "y cuarto", "y media" y "menos cuarto".
fuente
Son las ocho y diecioch
Bash 423
(433-10 = 423, eliminando diacríticos y cuarto podríamos bajar a 381)
fuente
Perl - 297-10 + 1 = 288 (contando la
p
bandera)Editar: gracias a @guifa, ahora puedo reclamar un bono :)
Aquí está el mismo código en varias líneas para facilitar la lectura:
fuente
Es la una y uno
Scala 652 bytes - 25
fuente
Pyth :
277un montón más234-10 (cuarto / media bonus) = 224 bytes¡Ahora reducido más de 50 bytes del original!
Es increíblemente largo para Pyth, pero eso es porque hay algunos datos en bruto. Probablemente se pueda jugar golf aún más. Utiliza una técnica obvia de dividir la tarea en horas, y / menos, decenas de dígitos de minutos y unos dígitos de minutos y luego traduce números usando una matriz de traducción y todo lo demás usando una tonelada de terrarios.
Historia del golf
fuente
":"
y"i"
, use\:
y en su\i
lugar.