Ich habe den Sandkasten vor dem Posten dieser Herausforderung nicht überprüft - anscheinend wurde diese Herausforderung von Cᴏɴᴏʀ O'Bʀɪᴇɴ vorgeschlagen .
Schreiben Sie bei einer Ganzzahleingabe ein Programm, das das Rätsel "Vier ist eine magische Zahl" ausgibt
- Vier ist die magische Zahl
- Fünf ist vier und vier ist die magische Zahl
- Sechs ist drei und drei ist fünf und fünf ist vier und vier ist die magische Zahl
- Elf ist sechs und sechs ist drei und drei ist fünf und fünf ist vier und vier ist die magische Zahl
- Fünfhundert ist elf und elf ist sechs und sechs ist drei und drei ist fünf und fünf ist vier und vier ist die magische Zahl
Wenn Sie das Rätsel bereits kennen oder zu faul sind, um es zu lösen , finden Sie hier eine Erklärung
Die nächste Nummer ist die Anzahl der Buchstaben in der vorherigen Nummer. So zum Beispiel fünf hat vier Buchstaben, so dass die nächste Nummer vier .
Sechs hat drei Buchstaben, also ist die nächste Zahl 3 und Drei hat fünf Buchstaben, also ist die nächste Zahl 5 und Fünf hat vier Buchstaben, also ist die nächste Zahl 4.
Der Grund, warum das Rätsel bei Vier endet, ist, dass Vier vier Buchstaben hat und vier ist vier und vier ist vier und vier ist vier ... (vier ist die magische Zahl)
Testfälle
0 =>
Zero is four and four is the magic number
1 =>
One is three and three is five and five is four and four is the magic number
2 =>
Two is three and three is five and five is four and four is the magic number
3 =>
Three is five and five is four and four is the magic number
4 =>
Four is the magic number
5 =>
Five is four and four is the magic number
6 =>
Six is three and three is five and five is four and four is the magic number
7 =>
Seven is five and five is four and four is the magic number
8 =>
Eight is five and five is four and four is the magic number
9 =>
Nine is four and four is the magic number
10 =>
Ten is three and three is five and five is four and four is the magic number
17 =>
Seventeen is nine and nine is four and four is the magic number
100 =>
One Hundred is ten and ten is three and three is five and five is four and four is the magic number
142 =>
One Hundred Forty Two is eighteen and eighteen is eight and eight is five and five is four and four is the magic number
1,000 =>
One Thousand is eleven and eleven is six and six is three and three is five and five is four and four is the magic number
1,642 =>
One Thousand Six Hundred Forty Two is twenty nine and twenty nine is ten and ten is three and three is five and five is four and four is the magic number
70,000 =>
Seventy Thousand is fifteen and fifteen is seven and seven is five and five is four and four is the magic number
131,072 =>
One Hundred Thirty One Thousand Seventy Two is thirty seven and thirty seven is eleven and eleven is six and six is three and three is five and five is four and four is the magic number
999,999 =>
Nine Hundred Ninety Nine Thousand Nine Hundred Ninety Nine is fifty and fifty is five and five is four and four is the magic number
Regeln
- Die Eingabe kann entweder
STDIN
einer Funktion entnommen oder als Argument für eine Funktion verwendet werden - Die Eingabe ist eine positive Zahl zwischen 0 und 999.999
- Die Eingabe enthält nur Zahlen (sie folgt dem regulären Ausdruck
^[0-9]+$
). - Die Eingabe kann entweder als Ganzzahl oder als Zeichenfolge erfolgen
- Bei der Konvertierung in eine Wortfolge sollten Leerzeichen und Bindestriche nicht in die Zählung einbezogen werden (100 [Einhundert] sind 10 Zeichen, nicht 11). 1.742 [Eintausendsiebenhundertzweiundvierzig] sind 31 Zeichen, nicht 36).
- Bei der Umwandlung in eine Zeichenfolge sollten 100 Einhundert, nicht Hundert oder Hundert, 1000 Eintausend und nicht Tausend oder Tausend sein.
- Wenn in einen String umgewandelt 142 sollte Einhundert Forty Two, nicht hundert sein und Forty Two
- Die Ausgabe unterscheidet nicht zwischen Groß- und Kleinschreibung und sollte dem Format " N ist K und K ist M und M ist ... und vier ist die magische Zahl" folgen (es sei denn, die Eingabe ist 4, in diesem Fall sollte die Ausgabe einfach "vier" sein ist die magische Zahl ")
- Die Ausgabe kann Zahlen anstelle von Buchstaben verwenden ("5 ist 4 und 4 ist die magische Zahl" anstelle von "fünf ist vier und vier ist die magische Zahl"), solange Ihr Programm immer konsistent ist
- Die Ausgabe kann entweder der Rückgabewert einer Funktion sein oder auf gedruckt werden
STDOUT
- Es gelten Standardlücken
- Das ist Code-Golf , also gewinnt das kürzeste Programm in Bytes. Viel Glück!
Bonus
-30 Bytes, wenn das Programm funktioniert, wenn die Eingabe zwischen -999.999 und 999.999 liegt.
Negative Zahlen haben, wenn sie in Wörter umgewandelt werden, nur ein "Negativ" vor sich. Zum Beispiel -4
ist "Negative Four", Negative Four ist zwölf und zwölf ist sechs und sechs ist drei und drei ist fünf und fünf ist vier und vier ist die magische Zahl
-150 Byte, wenn das Programm keine eingebauten Funktionen zum Generieren der Zeichenfolgendarstellung der Zahl verwendet
Bestenliste
Dies ist ein Stack-Snippet, das sowohl eine Rangliste als auch eine Übersicht der Gewinner nach Sprache generiert.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift unter Verwendung der folgenden Markdown-Vorlage
## Language Name, N bytes
Wobei N die Größe Ihrer Übermittlung in Byte ist
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. alte Punkte durchstreichen oder Flags in die Byteanzahl aufnehmen möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in Ihrer Kopfzeile ist
## Language Name, <s>K</s> X + 2 = N bytes
Antworten:
Bash + gemeinsame Dienstprogramme (einschließlich BSD-Spiele), 123 - 30 = 93 Bytes
Zum Glück ist die Ausgabe von dem bsd-games -
number
Dienstprogramm ist fast genau das, was wir brauchen. Die Ausgabenummern sind alle numerisch und nicht in Worten nach dem achten Aufzählungspunkt geschrieben:quelle
C,
263261 Bytes - 180 = 81Inspiriert von der Antwort von Cole Cameron . Ich dachte, ich könnte es ohne die Makrodefinition besser machen. Obwohl ich es letztendlich geschafft habe, brauchte ich ein bisschen Druck, um es zu erreichen!
Es erfordert einen Host-Zeichensatz mit aufeinanderfolgenden Buchstaben (also ist ASCII in Ordnung, aber EBCDIC funktioniert nicht). Das ist für das Paar Nachschlagetabellen. Ich wählte
j
als Nullzeichen und nutzte den Vorteil, zwei Nachschläge zu benötigen, damit ich einen vom anderen abziehen konnte, anstatt meine Null von beiden abziehen zu müssen.Kommentierte Version:
Es gibt eine offensichtliche Erweiterung Millionen zu unterstützen, durch den Ersatz
f(n/1000,8)
mitf(n/1000000,7)+f(n/1000%1000,8)
.Ausgang testen
quelle
Mathematica, 156-30 = 126 Bytes
Ich bin einfach überrascht, dass dies Zeichenfolgen verwendet und nicht lächerlich lang ist.
quelle
Swift 2 ,
408419 - 30 = 389 BytesIch würde 176 Bytes loswerden können, wenn Swift nicht so ausführlich mit regulären Ausdrücken umgehen würde (Bindestriche und Leerzeichen entfernen) * starrt Apple an *
Dies kann auf swiftstub.com hier getestet werden
Ich habe eine kleine for-Schleife ausgeführt, und es hat sich herausgestellt, dass
100003
die Zahl zwischen 0 und 999999 das längste Zeichenfolgenergebnis mit 6 Iterationen hat und istUngolfed
quelle
NSStringCompareOptions.RegularExpressionSearch
Und ich dachte, JSString.fromCharCode
war wortreich. : Pstring.replace
. Swift:String.stringByReplacingOccurrencesOfString
Haskell, 285 - 180 = 105 Bytes
Tatsächlich gibt es überhaupt keine eingebaute Funktion zum Anzeigen von Nummern. Ich bin immer noch unzufrieden mit der Punktzahl. Fühlen Sie sich frei zu kommentieren. Ich werde jedoch weiter experimentieren. Trotzdem ist die Punktzahl besser als die von Swift
Verwendung
Erläuterung.
m
ist trivial genug, ist dasc
aber nicht.c
ist die Funktion, um die Anzahl der Zeichen und den englischen Namen der Nummer zu zählen.quelle
C, 268-180 = 88 Bytes
Probieren Sie es hier aus .
Ungolfed
quelle
Java, 800 - 150 = 650 Bytes
Entgolft
quelle
==0
zu<1
. Also:return P<1?_>0?d:e:P<R?f[P]+Q:P<Y?(f[R+(P/X)]+" "+a(P%X,0,e)).trim()+Q:P<Z?a(P/Y,0,O)+a(P%Y,0,e)+Q:a(P/Z,0," thousand ")+a((P/Y)%X,0,O)+a(P%Y,0,e)+Q;
( - 10 Bytes )QC, 265 - 30 - 150 = 85 Bytes
Testsuite
Ungolfed:
quelle
JavaScript, 382 - 150 - 30 = 202 Bytes
Die Eingabe wird als Parameter für den direkt aufgerufenen Funktionsausdruck angegeben.
Testeingang:
Entgolft:
quelle
Python 641-150 = 501 Bytes
Zumindest ist es nicht länger als Java! Es basiert darauf, außer wenn Zeichenfolgen verwendet werden.
BEARBEITEN : Ich habe die 0 vergessen und muss sagen "5 ist 4", nicht zu "4 ist die magische Zahl" übergehen - das hat ein bisschen zur Punktzahl beigetragen.
Probieren Sie es hier aus!
quelle
i(5)
druckt4 is the magic number
statt5 is 4 and 4 is the magic number
.Moo,
182176/192188 Byte - 30 = 146/158188-Byte-Version:
176 Byte implementierungsabhängige Version:
Beides sind Funktionen.
quelle
PHP, 168 - 30 = 138 Bytes
quelle