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.
Es la una y cero
est 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.01:21
comme cas de test, car au moins un répondeur a été confondu par ce que vous avez dit à propos de una vs uno .Réponses:
JavaScript (ES6) 308
316Correction d'un bug Edit2 Edit a oublié de réclamer le bonus
En tant que programme avec E / S via popup
Comme fonction testable
Test dans la console FireFox / FireBug
Sortie
la source
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é:
Non golfé:
Traite avec
quarto
etmedia
, 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 visagesla source
Python 3: 294 caractères - 10 = 284
Cela obtient le bonus de dix points pour l'utilisation de "cuarto" et "media"
Nous lisons les heures et les minutes comme l'
int
art. 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
d
contient des traductions de numéros espagnol jusqu'à 15. Nous faisonsd[0]
être''
pour éviter des choses comme « diecicero ». Cela se fait en appelant maladroitementsplit(' ')
avec un espace initial; l'habituelsplit
l'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.
15
et30
sont écrits comme "médias" et "cuarto" sans frais.Python 3 enregistre un net de caractères sur Python 2: -4 pour
input
au lieu deraw_input
, +2 pour les parens en impression, +1 pour//
.la source
una
àuno
, devrait fonctionner maintenant.PHP,
351349360 - 15 = 345 octetsCe 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.la source
$_GET[0]?:date(~·Å–)
pour soustraire 3 de votre score.C ++:
474...422411 octetsCette version utilise le bonus cuarto / media (-10).
Ma première tentative de golf de code! J'essaierai de l'améliorer ce week-end.
Non golfé:
la source
m%=10
Lua, 450-10 (cuarto / media) - 15 (manana / tarde) = 425
H>=12
parH<12
et en changeant l'expression dépendante.table.concat
pour des opérations de chaîne et ajout de la suggestion de @ edc65, ajoutant finalement 22 octets.function
corps dans le bloc principal a réduit la longueur de 15 octets .la source
Es la una y uno
D - 484 octets
la source
Es la una y uno
Python 3, 409 octets
la source
'string1 string2 string3'.split()
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.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".
la source
Son las ocho y diecioch
Bash 423
(433 - 10 = 423, en supprimant les diacritiques et le cuarto, nous pourrions descendre à 381)
la source
Perl - 297 - 10 + 1 = 288 (en comptant le
p
drapeau)Edit: grâce à @guifa, je peux désormais réclamer un bonus :)
Voici le même code sur plusieurs lignes pour plus de lisibilité:
la source
Es la una y uno
Scala 652 octets - 25
la source
Pyth :
277un tas de plus234 - 10 (bonus cuarto / media) = 224 octetsMaintenant réduit de plus de 50 octets par rapport à l'original!
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.
Histoire du golf
la source
":"
et"i"
, utilisez\:
et à la\i
place.