Ich habe eine einfache Aufgabe, die relativ einfach mittels Code zu implementieren sein sollte. Ihr Ziel ist es, ein Programm zu schreiben, das die auf Spanisch geschriebene Zeit im Format HH: MM ausgibt. Viele Leute wissen wahrscheinlich nicht, wie sie das machen sollen, also werde ich darauf näher eingehen.
Die Zeit in Spanisch ist ziemlich logisch. Es folgt normalerweise dem Muster "Es la / Son las (Stunde) y (Minuten)". Stunden sind im 12-Stunden-Format und "Es la" wird nur verwendet, wenn die Stunde 1 ist (dh 1 Uhr). Die Protokolle sind eine andere Geschichte. Wenn die Minute kürzer als 30 ist, wird sie wie oben dargestellt. Wenn die Minute jedoch über 30 liegt, wird die Stunde aufgerundet und die Minute abgezogen. Beispiel: 7:35 entspricht "8 Stunden minus 25 Minuten". Einige weitere Beispiele werden unten angegeben. Die Liste der erforderlichen spanischen Nummern finden Sie hier . Einige Zahlen enthalten Akzente, die jedoch nicht erforderlich sind.
Hinweis: Die Quelle sagt "uno", aber um grammatikalisch korrekt zu sein, sollte es "una" sein. Dies sollte bisher keine Antworten beeinflussen.
Anmerkung 2: Auch "cero" ist nicht erforderlich. Wenn Ihr Programm "Es la una" oder "Son las tres" ausgibt, ist das in Ordnung für mich. Entschuldigen Sie diese Regeländerungen.
Regeln
- Die Eingabe erfolgt über STDIN oder ein gleichwertiges Programm in Ihrer Sprache.
- Kein Lesen aus externen Bibliotheken.
- Ihr Code kann mit ungültigen Eingaben alles machen.
Boni
- -10 wenn Ihr Code diese zusätzlichen Ausdrücke hinzufügt - "y cuarto" für: 15, "y media" für: 30 und "menos cuarto" für: 45 (aufgerundet).
- -15 Wenn Ihr Code AM und PM verarbeiten kann, antworten Sie entsprechend mit "de la mañana" und "de la tarde".
- -15 wenn Ihr Code die aktuelle Zeit übersetzen kann, wenn keine Eingabe erfolgt.
Wertung
- Dies ist eine Code-Golf-Herausforderung und wird nach Bytes und nicht nach Zeichen gewertet.
Beispiele
Eingabe: 8:10
Ausgabe:Son las ocho y diez.
Eingabe: 6:45
Ausgabe:Son las siete menos quince (or cuarto).
Eingabe: 1:29
Ausgabe:Es la una y veintinueve.
Eingabe: 12:55
Ausgabe:Es la una menos cinco.
Lassen Sie mich wissen, ob es hier etwas zu spezifizieren gibt. Dies ist meine erste Frage, daher ist sie definitiv nicht perfekt.
Es la una y cero
ist ziemlich repetitiv, also verstehe ich deinen Standpunkt. Ich habe das nicht spezifiziert, also denke ich, dass beides in Ordnung wäre. Danke für die Rückmeldung.01:21
als Testfall hinzufügen , da mindestens ein Antwortender durch das, was Sie über una vs uno sagten, verwirrt war .Antworten:
JavaScript (ES6) 308
316Edit2 Bugfix Edit hat vergessen, den Bonus
als Programm mit I / O via Popup zu beanspruchen
Als testbare Funktion
Test In FireFox / Firebug - Konsole
Ausgabe
quelle
Ja, die am wenigsten erwartete Sprache, die der schlechteste Golfspieler der Welt bei einem Golfwettbewerb erwartet, ist zurück!
Java - 676 Byte (716-10-15-15)
Golf gespielt:
Ungolfed:
Beschäftigt sich mit dem
quarto
undmedia
, mit dem AM / PM und hat keine Eingabe. Also kann ich alle Boni beanspruchen, obwohl ich, wenn ich diese Funktionen nicht implementiere, eine noch niedrigere Punktzahl hätte, lol. Gesichtspalmenquelle
Python 3: 294 Zeichen - 10 = 284
Dies bringt den Zehn-Punkte-Bonus für die Verwendung von "cuarto" und "media"
Wir lesen die Stunden und Minuten als
int
s. Wenn die Minuten über 30 liegen, wechseln wir zur nächsten Stunde, messen den Abstand von 60 Minuten und ändern die Konjunktion in "menos".Die Liste
d
hat die Übersetzungen der spanischen Zahlen bis zu 15. Wir machend[0]
sein ,''
Dinge zu verhindern , wie „diecicero“. Dies geschieht durch umständliches Aufrufensplit(' ')
mit einem Anfangsraum; der Stammgastsplit
würde es einfach ignorieren. Der Null-Minuten-Fall wird später behandelt.Um Zahlen über 15 zu erhalten, kombinieren wir die zehnstellige Zeichenfolge mit der entsprechenden einstelligen Zeichenfolge.
15
und30
werden kostenlos als "media" und "cuarto" geschrieben.Python 3 speichert ein Char-Netz über Python 2: -4 für
input
anstelle vonraw_input
+2 für gedruckte Parens, +1 für//
.quelle
una
in einzufügenuno
, sollte jetzt funktionieren.PHP,
351349360 - 15 = 345 BytesDieses Programm ist keine Befehlszeile: Es nimmt Eingaben über $ _GET [0] entgegen. Möglicherweise müssen Sie Benachrichtigungen in Ihrer php.ini deaktivieren. Dank Niet the Dark Absol kommt jetzt die automatische Zeit ohne Eingabe.
Tricks verwendet:
~(...)
Speichert ein Byte durch bitweises Invertieren einer Zeichenfolge, da Sie keine Anführungszeichen benötigen, da PHP normalerweise davon ausgeht, dass alle ASCII-Zeichen von 0x80 bis 0xFF eine Zeichenfolge sind.<?=preg_filter(...,...)
: Das<?=
ist eine Abkürzung zum Schreiben<? echo
.preg_filter()
Wendet normalerweise Ersetzungen auf eine Zeichenfolge unter Verwendung eines regulären Ausdrucks an, aber wir können den Modifikator depreciated / e verwenden, um die resultierende Zeichenfolge als PHP-Code auszuwerten. Anstatt die Eingabezeichenfolge in zwei separate Variablen aufteilen zu müssen, können wir daher Rückverweise ($ 1 und $ 2) auf die übereinstimmende Eingabezeichenfolge verwenden, wodurch große Mengen an Bytes eingespart werden.quelle
$_GET[0]?:date(~·Å–)
3 von Ihrer Punktzahl abziehen.C ++:
474...422411 BytesDiese Version löst den cuarto / media Bonus (-10) ein.
Mein erster Versuch überhaupt, Code zu spielen! Ich werde versuchen, es an diesem Wochenende zu verbessern.
Ungolfed:
quelle
m%=10
Lua, 450 - 10 (cuarto / media) - 15 (manana / tarde) = 425
H>=12
durchH<12
und Vertauschen des abhängigen Ausdrucks.table.concat
, durch Zeichenfolgenoperationen ersetzt und der Vorschlag von @ edc65 hinzugefügt, wodurch letztendlich 22 Bytes hinzugefügt wurden.function
Körpers in den Hauptblock reduzierte die Länge um satte 15 Bytes .quelle
Es la una y uno
D - 484 Bytes
quelle
Es la una y uno
Python 3, 409 Bytes
quelle
'string1 string2 string3'.split()
d[j]if i<31 else d[(j+1)%12]
zud[(j+(i>30))%12]
. Wenn Ihre beiden Alternativen eine ähnliche Struktur haben, können Sie häufig einen einfachen Ausdruck erstellen, der dem jeweiligen Ausdruck in Abhängigkeit vom Booleschen Wert entspricht.Ruby, 313 (338-15-10)
Diese Lösung übersetzt die aktuelle Zeit ohne Eingabe und fügt die drei Ausdrücke "y cuarto", "y media" und "menos cuarto" hinzu.
quelle
Son las ocho y diecioch
Bash 423
(433 - 10 = 423)
quelle
Perl - 297 - 10 + 1 = 288 (Zählen der
p
Flagge)Edit: dank @guifa kann ich jetzt einen Bonus beanspruchen :)
Hier ist derselbe Code zur besseren Lesbarkeit in mehreren Zeilen:
quelle
Es la una y uno
Scala 652 Bytes - 25
quelle
Pyth :
277ein paar mehr234 - 10 (cuarto / media bonus) = 224 BytesJetzt über 50 Bytes vom Original reduziert!
Wahnsinnig lang für Pyth, aber das liegt daran, dass es einige Rohdaten gibt. Kann wohl noch weiter golfen werden. Verwendet die offensichtliche Technik der Aufteilung der Aufgabe in Stunden, Y / Menos, Zehnerstelle von Minuten und Einerstelle von Minuten und übersetzt dann Zahlen unter Verwendung eines Übersetzungsarrays und alles andere unter Verwendung einer Tonne von Ternären.
Golf Geschichte
quelle
":"
und"i"
, Verwendung\:
und\i
stattdessen.