¡Es hora de español!

24

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.

mdc32
fuente
Para su información, puede obtener comentarios antes de publicar en el sandbox .
Stretch Maniac
1
@Sparr lo dudo. Probablemente hay suficientes números que deben codificarse para que esto suceda, con un valor de al menos 45 caracteres, incluso teniendo en cuenta los patrones.
mdc32
1
@ Dennis Hmm ... Supongo que tampoco estaría bien. Es la una y ceroes 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.
mdc32
1
Debe agregar 01:21como un caso de prueba, porque al menos un respondedor estaba confundido por lo que dijo sobre una vs uno .
Peter Taylor
3
El segundo bono es (¿casi?) Nunca vale la pena porque las frases "de la", "manana" y "tarde" solo cuentan hasta 16 bytes.
britishtea

Respuestas:

9

JavaScript (ES6) 308 316

Edit2 corrección de errores Editar olvidó reclamar el bono
Como un programa con E / S a través de una ventana emergente

s='media0uno0dos0tres0cuatro0cinco0seis0siete0ocho0nueve0diez0once0doce0trece0catorce0cuarto0dieci0veint'.split(0),
N=n=>n<16?s[n]:n<20?s[16]+s[n-10]:n>29?s[0]:s[17]+(n>20?'i'+s[n-20]:'e'),
[h,m]=prompt().split(':'),
alert(((h=(10-~h+(m>30))%12)?'Son las '+N(1+h):'Es la una')+(m>30?' menos '+N(60-m):-m?' y '+N(~~m):''))

Como una función comprobable

F=t=>(
  s='media0uno0dos0tres0cuatro0cinco0seis0siete0ocho0nueve0diez0once0doce0trece0catorce0cuarto0dieci0veint'.split(0),
  N=n=>n<16?s[n]:n<20?s[16]+s[n-10]:n>29?s[0]:s[17]+(n>20?'i'+s[n-20]:'e'),
  [h,m]=t.split(':'),
  ((h=(10-~h+(m>30))%12)?'Son las '+N(1+h):'Es la una')+(m>30?' menos '+N(60-m):-m?' y '+N(~~m):'')
)

Prueba en la consola FireFox / FireBug

for(i=0;i<13;i++)
{
   console.log(F(i+':'+i)+'. '+F(i+':'+(i+15))+'. '+F(i+':'+(i+30))+'. '+F(i+':'+(i+45)))
}

Salida

Son las doce. Son las doce y cuarto. Son las doce y media. Es la una menos cuarto
Es la una y uno. Es la una y dieciseis. Son las dos menos veintinueve. Son las dos menos catorce
Son las dos y dos. Son las dos y diecisiete. Son las tres menos veintiocho. Son las tres menos trece
Son las tres y tres. Son las tres y dieciocho. Son las cuatro menos veintisiete. Son las cuatro menos doce
Son las cuatro y cuatro. Son las cuatro y diecinueve. Son las cinco menos veintiseis. Son las cinco menos once
Son las cinco y cinco. Son las cinco y veinte. Son las seis menos veinticinco. Son las seis menos diez
Son las seis y seis. Son las seis y veintiuno. Son las siete menos veinticuatro. Son las siete menos nueve
Son las siete y siete. Son las siete y veintidos. Son las ocho menos veintitres. Son las ocho menos ocho
Son las ocho y ocho. Son las ocho y veintitres. Son las nueve menos veintidos. Son las nueve menos siete
Son las nueve y nueve. Son las nueve y veinticuatro. Son las diez menos veintiuno. Son las diez menos seis
Son las diez y diez. Son las diez y veinticinco. Son las once menos veinte. Son las once menos cinco
Son las once y once. Son las once y veintiseis. Son las doce menos diecinueve. Son las doce menos cuatro
Son las doce y doce. Son las doce y veintisiete. Es la una menos dieciocho. Es la una menos tres
edc65
fuente
8

¡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:

class A{void main(String[]a){java.util.Calendar c=java.util.Calendar.getInstance();int h,m;String s="";h=c.get(c.HOUR);m=c.get(c.MINUTE);String[]e={"doce","una","dos","tres","quatro","cinco","ses","siete","ocho","nueve","diez","once","doce","trece","catorce","quarto","çseís","çsiete","çocho","çnueve","xe","xiuno","xidós","xitrés","xiquatro","xicinco","xiséis","xisiete","xiocho","xinueve","media"};for(int i=0;++i<30;e[i]=e[i].replace("ç","dieci"),e[i]=e[i].replace("x","vient"));s+=(h==1&m<30|h==12&m>30)?"Es la ":"Son las ";s+=(m<=30)?e[h]:(h==12&m>30)?e[1]:e[h+1];s+=(m==0)?" certas":(m<=30)?" y "+e[m]:" menos "+e[60-m];s+=(c.get(c.AM_PM)==0)?" de la mañana.":" de la tarde.";System.out.println(s);}}

Sin golf:

public class A {

    public static void main(String[] a) {
        java.util.Calendar c = java.util.Calendar.getInstance();
        int h, m;
        String s = "";
        h = c.get(c.HOUR);
        m = c.get(c.MINUTE);
        String[] e = {"doce", "una", "dos", "tres", "quatro", "cinco", "ses", "siete", "ocho", "nueve", "diez", "once", "doce", "trece", "catorce", "quarto", "çseís", "çsiete", "çocho", "çnueve", "xe", "xiuno", "xidós", "xitrés", "xiquatro", "xicinco", "xiséis", "xisiete", "xiocho", "xinueve", "media"};
        for (int i = 0; ++i < 30; e[i] = e[i].replace("ç", "dieci"), e[i] = e[i].replace("x", "vient"));
        s += (h == 1 & m < 30 | h == 12 & m > 30) ? "Es la " : "Son las ";
        s += (m <= 30) ? e[h] : (h == 12 & m > 30) ? e[1] : e[h + 1];
        s += (m == 0) ? " certas" : (m <= 30) ? " y " + e[m] : " menos " + e[60 - m];
        s += (c.get(c.AM_PM) == 0) ? " de la mañana." : " de la tarde.";
        System.out.println(s);
    }
}

Trata con quartoy media, 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. palmas

Rodolfo Dias
fuente
6

Python 3: 294 caracteres - 10 = 284

h,m=map(int,input().split(':'))
t="y"
d="yunoydosytresycuatroycincoyseisysieteyochoynueveydiezyonceydoceytreceycatorceycuarto".split(t)*2
if m>30:h=h%12+1;m=60-m;t="menos"
print(["Es la una","Son las "+d[h]][h>1],t,[d[m]or"cero",["dieci","veint"+'ei'[m>20],"media"][m//10-1]+d[m%10]][m>15]+".")

Esto obtiene la bonificación de diez puntos por usar "cuarto" y "medios"

Leemos las horas y minutos como ints. 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 dtiene las traducciones de los números españoles hasta 15. Hacemos d[0]sea ''para evitar cosas como "diecicero". Esto se hace llamando torpemente split(' ')con un espacio inicial; el regular splitsimplemente 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. 15y 30están escritos como "medios" y "cuarto" sin costo alguno.

Python 3 ahorra una red de caracteres sobre Python 2: -4 para en inputlugar de raw_input, +2 para parens en la impresión, +1 para //.

xnor
fuente
Me entristece decir que es más complicado que eso. 01:21 debería ser la una y veintiuno porque las horas son femeninas pero los minutos son masculinos.
Peter Taylor
@PeterTaylor Ya veo. ¿Uno / una es el único número afectado?
xnor
Sí, aunque si se elevara a cientos, habría otros.
Peter Taylor
@PeterTaylor Fijo, por 5 caracteres.
xnor
@ edc65 Whoops, olvidé pegar el cambio real de unaa uno, debería funcionar ahora.
xnor
5

PHP, 351 349 360 - 15 = 345 Bytes

<?$a=split(~ß,~œšßŠ‘ß›Œß‹šŒßœŠž‹ßœ–‘œßŒš–ŒßŒ–š‹šßœ—ß‘Šš‰šß›–š…ß‘œšß›œšß‹šœšßœž‹œšßŽŠ–‘œšß›–šœ–߉š–‘‹–ß‹š–‘‹ž)?><?=preg_filter(~Ð×ÑÔÖÅ×ÑÔÖК,'(($h=($1-($k=$2<31))%12+1)>1?~¬‘ß“žŒß:~ºŒß“žß).$a[$h].($k?~߆ß:~ß’š‘Œß).(($m=$k?$2+0:60-$2)<16?$a[$m]:($m<20?$a[16].$a[$m%10]:($m<21?viente:($m<30?$a[17].$a[$m%10]:$a[18])))).~Ñ',$_GET[0]?:date(~·Å–));

Este 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.

Tryth
fuente
2
Puedes reclamar el bono de -15 si usas $_GET[0]?:date(~·Å–)para restar 3 de tu puntaje.
Niet the Dark Absol
Gracias. He hecho eso y otra mejora menor.
Tryth
5

C ++: 474 ... 422 411 bytes

Esta versión está canjeando el bono cuarto / media (-10).

#include<cstdlib>
#include<cstdio>
int main(int u,char**v){char*b[]={"cero","una","dos","tres","cuatro","cinco","seis","siete","ocho","nueve","diez","once","doce","trece","catorce","cuarto","dieci","veinti","media",0,"veinte"};int h=atoi(v[1]),m=atoi(v[1]+2+(v[1][2]>57)),n=m>30,o;h=n?h%12+1:h;m=o=n?60-m:m;if(u=m>15&m!=20)o=m%10;printf("%s %s %s %s%s",h>1?"Son las":"Es la",b[h],n?"menos":"y",u?b[m/10+15]:"",b[o?o:m]);}

Mi primer intento en el golf de código! Intentaré mejorarlo este fin de semana.

Sin golf:

#include<cstdlib>
#include<cstdio>
int main(int u,char**v)
{
char*b[]={"cero","una","dos","tres","cuatro","cinco","seis","siete","ocho","nueve","diez","once","doce","trece","catorce","cuarto","dieci","veinti","media",0,"veinte"};
int h=atoi(v[1]),m=atoi(v[1]+2+(v[1][2]>57)),n=m>30,o;
h=n?h%12+1:h;
m=o=n?60-m:m;
if(u=m>15&m!=20)o=m%10;
printf("%s %s %s %s%s",h>1?"Son las":"Es la",b[h],n?"menos":"y",u?b[m/10+15]:"",b[o?o:m]);
}
BMac
fuente
1
¿No podría ustedm%=10
Timtech
¡Buen punto! Lamentablemente, en mi nueva revisión, tengo que asignar ese valor a una variable diferente, por lo que no puedo.
BMac
Ok, solo me pregunto :)
Timtech
4

Lua, 450-10 (cuarto / media) - 15 (manana / tarde) = 425

n={'uno','dos','tres','cuatro','cinco','seis','siete','ocho','nueve','diez','once','doce','trece','catorce','cuarto',[20]='veinte',[30]='media'}for i=1,9 do n[i+10]=n[i+10]or'dieci'..n[i]n[i+20]='veinti'..n[i]end H,M=io.read():match('(%d+):(%d+)')H,M=H+0,M+0 X,Y='tarde',' y 'if H<12 then X='manana'end if M>30 then H,M,Y=H+1,60-M,' menos 'end H=(H-1)%12+1 S=H==1 and'es la una'or'son las '..n[H]if M>0 then S=S..Y..n[M]end S=S..' de la '..X print(S)
  • Eliminó 12 bytes reescribiendo el generador para 21-29.
  • Dropped 1 más mediante la sustitución H>=12con H<12y conmutar la expresión dependiente de alrededor.
  • Se eliminaron 4 más contaminando el espacio de nombres global de una función (malvado, pero en interés del golf :).
  • Se corrigió la expresión regular, olvidé los dos puntos. Sin embargo, no cambia el recuento de bytes.
  • Se table.concatcorrigió el caso de cero minutos, se cambió por operaciones de cadena y se agregó la sugerencia de @ edc65, agregando finalmente 22 bytes.
  • Estoy avergonzado. Tirar del functioncuerpo hacia el trozo principal redujo la longitud en 15 bytes .
críptico se encuentra con Mónica
fuente
Debería usar 'una' por horas, 'uno' por minutos. Entonces '01: 01 'debería darEs la una y uno
edc65
3

D - 484 bytes

import std.stdio,std.conv,std.string;void main(){auto n="cero una dos tres cuatro cinco seis siete ocho nueve diez once doce trece catorce quince dieciséis diecisiete dieciocho diecinueve e iuno idos itres icuatro icinco iseis isiete iocho inueve treinta".split;auto p=stdin.readln()[0..$-1];int b=to!int(p[0..$-3]),a=to!int(p[$-2..$]);auto c=a;b=a>30?b+1:b;b%=12;a=a>30?60-a:a;writefln("%s %s %s %s", b==1||b==12?"Es la":"Son las",n[b],c>30?"menos":"y",(a/10==2?"vient":"")~n[a]);}
Hackerpilot
fuente
Debería usar 'una' por horas, 'uno' por minutos. Entonces '01: 01 'debería darEs la una y uno
edc65
3

Python 3, 409 bytes

d='cero uno dos tres cuatro cinco seis siete ocho nueve diez once doce trece catorce quince dieciseis diecisiete dieciocho diecinueve veinte xuno xdos xtres xcuatro xcinco xseis xsiete xocho xnueve treinta';d=str(d.replace('x','veinti')).split();t=input().split(':');i=int(t[1]);j=int(t[0]);print(["Son las","Es la"][1<(2*j+i/30)%24<=3],[d[[j%12+1,j][i<31]],'una'][j==1],'y'if i<31 else'menos',d[min(i,60-i)])
Hosch250
fuente
Una larga lista de cadenas se puede acortar como'string1 string2 string3'.split()
xnor
@xnor Muy bien, gracias!
Hosch250
@ hosch250 Además, asegúrese de seguir los comentarios en la publicación original nuevamente. Probablemente haré muchos cambios menores en las reglas, y estos probablemente te ayudarán a jugar golf.
mdc32
@ mdc32 Ajuste ahora mismo. Tuve algunos errores de todos modos.
Hosch250
2
Puedes acortar d[j]if i<31 else d[(j+1)%12]a d[(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.
xnor
3

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".

require'time'
t,x,s=Time,$*[0],%w[cero una dos tres cuatro cinco seis siete ocho nueve diez once doce trece catorce cuarto]
1.upto(9){|i|i>5?s[10+i]="dieci"+s[i]:0;s[20+i]="veinti"+s[i]}
s[20]="veinte"
s<<"media"
c=x ?t.parse(x):t.new
h,m=c.hour%12,c.min
m<31?(a=" y "):(h,m,a=h+1,60-m," menos ")
$><<(h<2?"Es la ":"Son las ")+s[h]+a+s[m]
britishtea
fuente
¿Funciona? Probado en ideone, entrada '01: 01 ', hora actual 20:09, salida:Son las ocho y diecioch
edc65
Todos los casos de prueba pasaron por mí localmente. Veo que algo salió mal al copiar los números, así que lo arreglaré.
britishtea
1
"seite" debería ser "siete" y "neuve" debería ser "nueve"
jmm 10/11
2

Bash 423

(433-10 = 423, eliminando diacríticos y cuarto podríamos bajar a 381)

IFS=: read h m
s=y
m=${m#0}
[ $m -gt 30 ]&&h=$(($h+1))&&s=menos
[ -z ${m%0} ]&&s=en&&m=punto
n[0]=0
o[0]=0
S=" séis siete ocho nueve"
n=(punto una dos trés cuatro cinco $S diez {on,do,tre,cator,quin}ce ${S// / dieci} veinte)
n=($(eval echo "${n[@]}" veinti\$\{n[{1..9}]\}))
n[3]=tres;n[6]=seis
n=(${n[@]} media\  $(tac -s' '<<<${n[@]}))
o=("${n[@]/q*/cuarto}")
a=Son\ las
[ $h = 1 ]&&a=Es\ la
echo $a ${n[$h]/p*/cero} $s ${o[$m]/%a/o}
Ángel
fuente
Ya usa 'una' por horas y 'uno' por minutos. Mira más cuidadosamente :)
Ángel
Lo sentimos, no está claro de un vistazo y bash es difícil de probar en Windows. +1 entonces.
edc65
@ edc66, los ordinales están en femenino, luego $ {o [$ m] /% a / o} reemplaza el final a por o por los minutos.
Ángel
2

Perl - 297-10 + 1 = 288 (contando la pbandera)

Editar: gracias a @guifa, ahora puedo reclamar un bono :)

#!/usr/bin/perl -p
sub n{($_=shift)%10?(once,doce,trece,catorce,cuarto)[$_>9?$_-11:5]||('',dieci,veinti)[$_/10].(0,un.pop,dos,tres,cuatro,cinco,seis,siete,ocho,nueve)[$_%10]:(cero,diez,veinte,media)[$_/10]}/:/;$a=$`%12;$b=$';$c=$b>30?(++$a,$b=60-$b,menos):'y';$_=($a-1?'Son las ':'Es la ').n($a,a)." $c ".n($b,o).'.'

Aquí está el mismo código en varias líneas para facilitar la lectura:

sub n {
        ($_ = shift) % 10
            ? (once, doce, trece, catorce, cuarto)[$_ > 9 ? $_ -11 : 5]
                || ('', dieci, veinti)[$_ / 10]
                . (0, un.pop, dos, tres, cuatro, cinco, seis, siete, ocho, nueve)[$_ % 10]
            : (cero, diez, veinte, media)[$_ / 10]
}
/:/;
$a = $` % 12;
$b = $';
$c = $b > 30 ? (++$a, $b = 60 - $b, menos) : 'y';
$_ = ($a - 1 ? 'Son las ' : 'Es la ') . n($a, a) . " $c " . n($b, o) . '.'
core1024
fuente
Debería usar 'una' por horas, 'uno' por minutos. Entonces '01: 01 '- debería darEs la una y uno
edc65
Si simplemente cambia "quince" a "cuarto" y "treinta" a "medios", obtendrás una bonificación de -10.
user0721090601
@ edc65 Espero que esté bien ahora ...
core1024
0

Scala 652 bytes - 25

import java.util.Scanner
object S extends App{val s=new Scanner(System.in).useDelimiter("[:\n]")
var h=s.nextInt
var m=s.nextInt
if(m>30)m-=60 else h-=1
val n=m.abs
h%=24
val p=h%12
val l=List("una","dos","tres","cuatro","cinco","seis","siete","ocho","nueve","diez","once","doce","trece","catorce","cuarto")
val k=List("úno","dós","trés",l(3),l(4),"séis",l(6),"ócho",l(8))
println(s"""${if(p==0)"Es la"else"Son las"} ${l(p)} ${if(m>0)"y "else if(m<0)"menos "}${if(n==1)"uno"else if(n==0)""else if(n<=15)l(n-1) else if(n==30)"media"else if(n<20)"dieci"+k(n-11)else if(n==20)"veinte"else"veinti"+k(n-21)} de la ${if(h<12)"mañana"else"tarde"}.""")}
bb94
fuente
0

Pyth : 277 un montón más 234-10 (cuarto / media bonus) = 224 bytes

¡Ahora reducido más de 50 bytes del original!

=H" y "ANkmsdcz\:Kc"cero uno dos tres cuatro cinco seis siete ocho nueve diez once doce trece catorce cuarto veinte"dI>k30=k-60k=H" menos "=N?1qN12+N1)++?+"Son las "@KN>N1"Es la una"H??eKqk20?@Kk<k16+?"dieci"<k21+PeK\i@K%kT<k30"media"

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.

=H" y "                 Set H to " y "
A                       Double Assignment
 Nk                     The variables N and k (hours and mins)
 m  cz\:                Map input split by ":"
  sd                    Make both int
Kc"..."d                Set K to string split by spaces
I>k30                   If k>30
     =k-60k             Set k to 60-k
     =H" menos "        Set k to menos instead of y
     =N                 Set N
      ?   qN12          If N=12
       1                Go back to one
       +N1              Increment N
)                       Close entire if block 
+                       Concat of hours and minutes
 +                      Concat hours and y/menos
  ?           >N1       If hour greater than one
   +                    Concat of son las and hour
    "Son las "          "Son las "
    @KN                 Index translation array for hour
   "Es la una"          Else es la una
  H                     " y " or " menos "
 ?               <k30   If minutes less than 30
  ?  qk20               If minutes is 20
   ek                   Last element of array (veinte)
   ?   <k16             Else check if minutes<16
    @Kk                 Get minutes directly from array
    +                   Else tens and ones sum
     ?       <k21       If minutes<21
      "dieci"           "dieci"
      +PeK\i            Else get veinti from veinte
     @K%kT              Ones digit of minutes
  "media"               Else get "media"

Historia del golf

  • 10 bytes: la bonificación, el membrillo y la trienta solo se pueden reemplazar en la matriz de traducción, por lo que no se requieren cambios, excepto el ensayo de traducción y su mismo tamaño.
  • 6 bytes - terrarios reorganizados - desafortunadamente esto eliminó los 4 operadores ternarios consecutivos :(
  • 6 bytes - otros varios golf
  • 6 bytes - asignación inicial de golf / hora / min
  • +3 bytes - fijo uno / una
  • 3 bytes: construido veinti de veinte, no codificado
  • 18 bytes - extraído dieci de adolescentes <16
  • 2 bytes: eliminó algunos espacios allí sin ningún motivo
  • 2 bytes - usado \ para cadenas de un carácter
Maltysen
fuente
Para cadenas de 1 carácter, como ":"y "i", use \:y en su \ilugar.
isaacg
@isaacg oh genial No sabía que podías hacer eso, actualizando
Maltysen