C'est l'heure espagnole!

24

J'ai une tâche simple qui devrait être relativement facile à implémenter au moyen de code. Votre objectif est d'écrire un programme qui affichera l'heure écrite en espagnol, compte tenu de l'heure au format HH: MM. Beaucoup de gens ne savent probablement pas comment procéder, alors je vais développer.

Le temps en espagnol est assez logique. Il suit généralement le modèle «Es la / Son las (heure) y (minutes)». Les heures sont au format 12 heures et "Es la" n'est utilisé que si l'heure est 1 (c'est-à-dire une heure). Les minutes sont une histoire différente. Si la minute est inférieure à 30, elle est représentée comme indiqué ci-dessus. Si la minute est supérieure à 30, cependant, l'heure est arrondie et la minute est soustraite. Par exemple, 7:35 est traduit par l'équivalent de "8 heures moins 25 minutes". D'autres exemples seront donnés ci-dessous. La liste des numéros espagnols nécessaires est disponible ici . Il y a des accents sur certains chiffres, mais ils ne sont pas nécessaires.

Remarque: La source dit «uno», mais pour être grammaticalement correcte, elle devrait être «una». Jusqu'à présent, cela ne devrait affecter aucune réponse.

Remarque 2: De plus, "cero" n'est pas nécessaire. Si votre programme produit «Es la una» ou «Son las tres», cela me convient. Désolé pour ces changements de règles.

Règles

  • Les informations seront fournies via STDIN ou l'équivalent dans votre langue.
  • Pas de lecture depuis les bibliothèques extérieures.
  • Votre code peut tout faire avec une entrée non valide.

Bonus

  • -10 si votre code ajoute ces phrases supplémentaires - "y cuarto" pour: 15, "y media" pour: 30 et "menos cuarto" pour: 45 (arrondi).
  • -15 si votre code peut gérer AM et PM, en répondant "de la mañana" et "de la tarde", en conséquence.
  • -15 si votre code peut traduire l'heure actuelle si aucune entrée n'est fournie.

Notation

  • Il s'agit d'un défi de code-golf, et il sera marqué par octets, pas par caractères.

Exemples

Entrée: 8:10 Sortie:Son las ocho y diez.

Entrée: 6:45 Sortie:Son las siete menos quince (or cuarto).

Entrée: 1:29 Sortie:Es la una y veintinueve.

Entrée: 12:55 Sortie:Es la una menos cinco.

Faites-moi savoir s'il y a quelque chose à préciser ici. Ceci est ma première question, donc ce n'est certainement pas parfait.

mdc32
la source
Pour votre information, vous pouvez obtenir des commentaires avant de publier dans le bac à sable .
Stretch Maniac
1
@Sparr j'en doute. Il y a probablement suffisamment de chiffres qui doivent être codés en dur pour que cela se produise - au moins 45 caractères, même en tenant compte des modèles.
mdc32
1
@ Dennis Hmm ... Je suppose que ce serait bien. Es la una y ceroest assez répétitif, donc je vois votre point. Je n'ai pas précisé cela, donc je suppose que l'un ou l'autre irait bien. Merci pour les commentaires.
mdc32
1
Vous devriez ajouter 01:21comme cas de test, car au moins un répondeur a été confondu par ce que vous avez dit à propos de una vs uno .
Peter Taylor
3
Le deuxième bonus ne vaut (presque?) Jamais la peine car les phrases "de la", "manana" et "tarde" comptent déjà jusqu'à 16 octets.
britishtea

Réponses:

9

JavaScript (ES6) 308 316

Correction d'un bug Edit2 Edit a oublié de réclamer le bonus
En tant que programme avec E / S via popup

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):''))

Comme fonction testable

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):'')
)

Test dans la console 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)))
}

Sortie

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
la source
8

Oui, la langue la moins attendue pour apparaître sur un concours de golf, codée par le pire golfeur du monde, est de retour!

Java - 676 ​​octets (716-10-15-15)

Golfé:

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);}}

Non 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);
    }
}

Traite avec quartoet media, avec AM / PM et n'a pas d'entrée. Je peux donc réclamer tous les bonus, même si, si je n'implémentais pas ces fonctionnalités, j'aurais un score encore plus bas, lol. paumes des visages

Rodolfo Dias
la source
6

Python 3: 294 caractères - 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]+".")

Cela obtient le bonus de dix points pour l'utilisation de "cuarto" et "media"

Nous lisons les heures et les minutes comme l' intart. Si les minutes sont supérieures à 30, nous passons à l'heure suivante, mesurons les minutes à partir de 60 et changeons la conjonction en "menos".

La liste dcontient des traductions de numéros espagnol jusqu'à 15. Nous faisons d[0]être ''pour éviter des choses comme « diecicero ». Cela se fait en appelant maladroitement split(' ')avec un espace initial; l'habituel splitl'ignorerait. Le cas zéro minute est traité plus tard.

Pour obtenir des nombres supérieurs à 15, nous combinons la chaîne à dix chiffres avec la chaîne à un chiffre appropriée. 15et 30sont écrits comme "médias" et "cuarto" sans frais.

Python 3 enregistre un net de caractères sur Python 2: -4 pour inputau lieu de raw_input, +2 pour les parens en impression, +1 pour //.

xnor
la source
Je suis triste de dire que c'est plus compliqué que ça. 01:21 devrait être la una y veintiuno car les heures sont féminines mais les minutes sont masculines.
Peter Taylor
@ PeterTaylor je vois. Uno / una est-il le seul numéro affecté?
2014
Oui, bien que s'il atteignait des centaines, il y en aurait d'autres.
Peter Taylor
@PeterTaylor Fixed, pour 5 caractères.
2014
@ edc65 Whoops, j'ai oublié de coller dans le changement réel de unaà uno, devrait fonctionner maintenant.
xnor
5

PHP, 351 349 360 - 15 = 345 octets

<?$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(~·Å–));

Ce programme n'est pas en ligne de commande: il prend l'entrée via $ _GET [0]. Vous devrez peut-être désactiver les notifications dans votre php.ini. Vient maintenant avec l'heure automatique sans entrée, grâce à Niet the Dark Absol.

Astuces utilisées:

~(...) enregistre un octet en inversant au niveau du bit une chaîne, car vous n'avez pas besoin de guillemets car PHP suppose généralement que tout ASCII de 0x80 à 0xFF est une chaîne.

<?=preg_filter(...,...): Le <?=est un raccourci pour écrire <? echo. preg_filter()applique généralement des remplacements sur une chaîne à l'aide d'une expression régulière, mais nous pouvons utiliser le modificateur depreciated / e pour évaluer la chaîne résultante en tant que code PHP. Par conséquent, au lieu d'avoir à diviser la chaîne d'entrée en deux variables distinctes, nous pouvons utiliser des références arrières ($ 1 et $ 2) sur la chaîne d'entrée correspondante, économisant de grandes quantités d'octets.

Tryth
la source
2
Vous pouvez réclamer le bonus de -15 si vous utilisez $_GET[0]?:date(~·Å–)pour soustraire 3 de votre score.
Niet the Dark Absol
Merci. J'ai fait cela et une autre amélioration mineure.
Tryth
5

C ++: 474 ... 422 411 octets

Cette version utilise le bonus 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]);}

Ma première tentative de golf de code! J'essaierai de l'améliorer ce week-end.

Non 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
la source
1
Pourriez-vous pasm%=10
Timtech
Bon point! Malheureusement, dans ma nouvelle révision, je dois attribuer cette valeur à une variable différente, donc je ne peux pas.
BMac
Ok, je me demandais juste :)
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)
  • A chuté de 12 octets en réécrivant le générateur pour 21-29.
  • Supprimé 1 de plus en remplaçant H>=12par H<12et en changeant l'expression dépendante.
  • Supprimé 4 de plus en polluant l'espace de noms global d'une fonction (mal, mais dans l'intérêt du golf :).
  • Correction de l'expression régulière, j'ai oublié les deux points. Ne modifie cependant pas le nombre d'octets.
  • Correction du cas de zéro minute, échange table.concatpour des opérations de chaîne et ajout de la suggestion de @ edc65, ajoutant finalement 22 octets.
  • J'ai honte. Tirer le functioncorps dans le bloc principal a réduit la longueur de 15 octets .
criptych se tient avec Monica
la source
Devrait utiliser «una» pour les heures, «uno» pour les minutes. Donc '01: 01 'devrait donnerEs la una y uno
edc65
3

D - 484 octets

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
la source
Devrait utiliser «una» pour les heures, «uno» pour les minutes. Donc '01: 01 'devrait donnerEs la una y uno
edc65
3

Python 3, 409 octets

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
la source
Une longue liste de chaînes peut être raccourcie comme'string1 string2 string3'.split()
xnor
@xnor Très bien, merci!
Hosch250
@ hosch250 Aussi, assurez-vous de suivre à nouveau les commentaires dans le message d'origine. Je vais probablement apporter de nombreux changements mineurs aux règles, et ceux-ci vous aideront probablement au golf.
mdc32
@ mdc32 Ajustement en ce moment. J'ai quand même eu quelques erreurs.
Hosch250
2
Vous pouvez raccourcir d[j]if i<31 else d[(j+1)%12]à d[(j+(i>30))%12]. En général, si vos deux alternatives ont une structure similaire, vous pouvez souvent créer une expression simple égale à chacune selon le booléen.
xnor
3

Rubis, 313 (338 - 15 - 10)

Cette solution traduit l'heure actuelle où aucune entrée n'a été donnée et ajoute les trois phrases "y cuarto", "y media" et "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
la source
Est-ce que ça marche? Testé dans ideone, entrée '01: 01 ', heure actuelle 20:09, sortie:Son las ocho y diecioch
edc65
Tous les cas de test ont réussi pour moi localement. Je vois que quelque chose s'est mal passé avec la copie des chiffres, alors je vais corriger ça.
britishtea
1
"seite" devrait être "siete" et "neuve" devrait être "nueve"
jmm
2

Bash 423

(433 - 10 = 423, en supprimant les diacritiques et le cuarto, nous pourrions descendre à 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}
Ange
la source
Il utilise déjà «una» pour les heures et «uno» pour les minutes. Regardez plus attentivement :)
Ángel
Désolé, ce n'est pas clair d'un coup d'œil et bash est difficile à tester dans Windows. +1 alors.
edc65
@ edc66, les ordinaux sont en femenine, puis $ {o [$ m] /% a / o} remplace le a suivi par o pour les minutes.
Ángel
2

Perl - 297 - 10 + 1 = 288 (en comptant le p drapeau)

Edit: grâce à @guifa, je peux désormais réclamer un bonus :)

#!/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).'.'

Voici le même code sur plusieurs lignes pour plus de lisibilité:

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
la source
Devrait utiliser «una» pour les heures, «uno» pour les minutes. Alors '01: 01 '- devrait donnerEs la una y uno
edc65
Si vous changez simplement "coing" en "cuarto" et "treinta" en "media", vous obtiendrez un bonus de -10.
user0721090601
@ edc65 J'espère que ça va maintenant ...
core1024
0

Scala 652 octets - 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
la source
0

Pyth : 277 un tas de plus 234 - 10 (bonus cuarto / media) = 224 octets

Maintenant réduit de plus de 50 octets par rapport à l'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"

Incroyablement long pour Pyth, mais c'est parce qu'il y a des données brutes. Peut probablement être joué au golf encore plus loin. Utilise une technique évidente de fractionnement de la tâche en heures, y / menos, dizaines de minutes et unités de minutes, puis traduit les nombres en utilisant un tableau de traduction et tout le reste en utilisant une tonne de ternaires.

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

Histoire du golf

  • 10 octets - le bonus, le coing et le trienta peuvent simplement être remplacés dans le tableau de traduction, donc aucun changement n'est requis, sauf l'essai de traduction et sa même taille.
  • 6 octets - ternaires réorganisés - malheureusement, cela a supprimé les 4 opérateurs ternaires consécutifs :(
  • 6 octets - autres golfs divers
  • 6 octets - affectation initiale de l'heure / min au golf
  • +3 octets - fixe uno / una
  • 3 octets - construit veinti de veinte, non codé en dur
  • 18 octets - extrait dieci des adolescents <16
  • 2 octets - supprimé certains espaces sans raison
  • 2 octets - utilisé \ pour une chaîne de caractères
Maltysen
la source
Pour 1 chaîne de caractères, comme ":"et "i", utilisez \:et à la \iplace.
2015
@isaacg oh cool je ne savais pas que tu pouvais faire ça, mise à jour
Maltysen