Gewinner: Professorfishs heftige Antwort ! Ganze 9 Bytes! Beeindruckend!
Sie können Ihre Antwort weiterhin übermitteln, jedoch nicht mehr gewinnen. Originalpost für die Nachwelt aufbewahrt:
Ihr Ziel ist es, eine ganze Zahl zwischen 1 und 9 in das Wort umzuwandeln, das es darstellt.
- Sie müssen sich keine Gedanken über Dezimalstellen machen
- Der Benutzer gibt eine Nummer ein. Angenommen, sie geben niemals 10 oder höher ein
- Der Benutzer muss die Nummer zu einem bestimmten Zeitpunkt geben, aber das Verfahren des Programm liest es spielt keine Rolle. Dies kann mit stdin, Lesen einer Textdatei usw. geschehen. Der Benutzer muss jedoch irgendwann die Taste 9 auf seiner Tastatur drücken
- Es wird nicht zwischen Groß- und Kleinschreibung unterschieden (dh "Eins", "Eins", "Eins", usw. sind alle akzeptabel).
- HTTP / etc-Anforderungen sind zulässig, jedoch zählt jeder Code, der vom Server ausgeführt wird, für die Bytezahl Ihres endgültigen Codes (z. B. wenn ich von einem C ++ - Programm eine HTTP-Anforderung erstellt habe, zählt der in der HTTP-Anforderung verwendete PHP-Code) )
- Alles, was kompiliert und ausgeführt werden kann, ist akzeptabel
- Dieser Wettbewerb ist am 27. Juni 2014 (7 Tage nach Veröffentlichung) zu Ende gegangen.
- Dies ist ein Code-Golf , also gewinnt der kürzeste Code
one
akzeptabel?3
, können Sie nicht ausgebenone two three four five six seven eight nine
, obwohl Sie technisch ausgebenthree
. Ebenso können Sie nicht ausgebenthree seven
, etc.Antworten:
Bash (mit bsdgames), 9
Liest von der Standardeingabe.
Ich weiß nicht, warum es dafür einen Nutzen gibt, aber was auch immer.
quelle
Python 2, 64
So sieht die Zeichenfolge mit einem zusätzlichen Leerzeichen aus (versuchen Sie, vertikal zu lesen):
[input()::9]
Beginnt, wie in den Kommentaren unten erläutert, am angegebenen Index und wählt jedes neunte nachfolgende Zeichen aus.quelle
input()::9
ist ein Bereich voninput()
bis zum Ende der Zeichenfolge in Schritten von9
, wie1,10,19,28,37
oder3,12,21,30,39
, die genau die Indizes sind, an denen die Buchstaben für das entsprechende Wort gefunden werden.Common Lisp - 22 Bytes
Hier ist eine allgemeine (nicht nur für eine Zehn):
Oh, Sie möchten Ordnungszahlen (erstens, zweitens, ... dreihundertstel ...)? Okay!
quelle
BASH 51
Also habe ich mit meiner zweiten Idee und Hilfe von anderen eine neue Idee gemacht:
Wobei 'X' die gewünschte Zahl ist.
BASH 48 (67)
67 mit
\n
ZeilenumbrüchenIch bin mir nicht sicher, ob dies wirklich zählt, weil es aus einer Datei liest, aber:
sed -n Xp a
Wo ist "X" die Eingabe und wo
a
ist eine Datei mit:Die Datei hat 36 Zeichen und der Bash-Befehl ist 13.
Wie es funktioniert:
quelle
a
.'
Anführungszeichen weglassen . Sie können auch versuchen, anstelle der externen Datei eine Here-Zeichenfolge zu verwenden. Aber Sie sollten wirklich die Zeilenumbrüche in Ihrer Datei zählen.C # - 127 (86/46)
Wenn Sie nur den ausführbaren Teil nehmen ...
und wenn
HourOfDay
es Teil des System-Namespace gewesen wäre, bräuchten Sie 46 Zeichen. Leider sitzt es inSystem.DirectoryServices.ActiveDirectory
dem es 86 macht ... der andere Lärm verdirbt es.Dies kann von der Kommandozeile aus kompiliert und ausgeführt werden (127 Zeichen):
Wenn in einer Datei mit dem Namen cg2.cs gespeichert
Wie funktioniert das?
HourOfDay
ist ein Aufzählungstyp, sodass wir Namen anstelle von magischen Konstanten verwenden können. Aufzählungstypen verfügen über eine ToString () - Implementierung, die den Namen des Werts angibt . Sie können ein Int in eine Enumeration umwandeln. Console.Read () liest ein Zeichen aus dem als Ganzzahl dargestellten Eingabestream. Wenn Sie '1' eingeben, erhalten Sie 49 , subtrahieren Sie 48, um 1 zu erhaltenHourOfDay
.Schauen Sie sich die Powershell-Version dieses Tricks an
quelle
-48
hier?Befunge 98,
116105103 BytesBefunge wurde dafür nicht gemacht ...
Erläuterung:
quelle
char[][]
, behalte einenx
und eineny
Ort und führe den Charakter an diesem Ort aus. Das Schwierigste wäre, die Operation für jeden möglichen Charakter zu definieren.&1-
.Javascript 68
Atob / btoa kann ein schlechtes Komprimierungswerkzeug sein
(aber wenn Sie dies in der Konsole ausprobieren möchten, können Sie nicht aus dem formatierten Text kopieren, den Sie auf einmal sehen. Gehen Sie zu "Bearbeiten" und kopieren Sie ihn aus dem Quellbereich.)Der Markdown-Editor mag einige der Zeichen in dieser Antwort nicht: Einige Zeichen gehen beim Speichern verloren. Trotzdem denke ich, dass es ein Editorproblem ist, nicht meins. Die verlorenen Zeichen sind absolut gültige 8-Bit-Unicode-Zeichen.
(Sonst irre ich mich, wenn dieses Problem bereits in Meta diskutiert wurde, lass es mich wissen.) Hier ist die Version, in der beleidigende Zeichen maskiert sind. Jede Sequenz \ xNN sollte 1 zählen
Einfacher Test
In der Firefox-Konsole:
quelle
Tree
undEightF
.Javascript 73
69
quelle
alert('0one0two0three0four0five0six0seven0eight0nine'.split(0)[#])
dasselbe, aber Sie sparen 8 Bytes? Der Benutzer gibt immer noch die gewünschte Nummer ein ...Perl, 55
Es wird mit der Option
-p
(+1 Byte) ausgeführt, zB:Die Eingabe wird in STDIN erwartet und die Ausgabe wird in STDOUT geschrieben.
Der Code generiert lediglich ein Array und wählt das richtige Element aus. Option
-p
übernimmt das Einlesen der Eingabezeile$_
und druckt das Ergebnis aus$_
.Variationen:
Mit nachfolgender neuer Zeile (+3):
oder (gleiche Byteanzahl):
Aktualisieren:
Mit bloßen Worten statt
qw[...]
(danke Zaid).Negativer Index speichert ein Byte (danke aragaer).
quelle
$_=(one,two,three,four,five,six,seven,eight,nine)[$_-1]
use strict
).$_=(nine,eight,seven,six,five,four,three,two,one)[-$_]
- Ein Zeichen kürzer.Oracle SQL - 46
Demonstration
Ich gebe zu, dass dies eine Standardlücke beinhaltet , aber die SQL ist kürzer als Golfscript. Ich konnte nicht widerstehen!
Es funktioniert durch (ab) Verwenden der datetime - Formatmodelle von Oracle .
TO_DATE(n, 'j')
konvertiert eine Zahl in einen julianischen Tag , die Anzahl der Tage seit dem 1. Januar 4712 v.TO_CHAR(<date>, 'jsp')
konvertiert diese zurück in die Ganzzahl (allerdings als String). Dassp
, ist ein Format-Elementsuffix , das die Zahl buchstabiert. Dies funktioniert tatsächlich mit ziemlich vielen Zahlen.Dies
&1
ist eine Substitutionsvariable, die nur mit Clients funktioniert, die sie akzeptieren, z. B. SQL * Plus.quelle
CJam,
4543 BytesDas oben genannte verwendet ^ und M-Notation, da einige Zeichen nicht druckbar sind.
Auf Kosten von 9 weiteren Bytes können nicht druckbare Zeichen vermieden werden:
Probieren Sie es online aus.
Wie es funktioniert
Beispiel
quelle
IgGMOPiMFVMfl3LyoDHzA0j82AhFLPGF8TQiMjU2YmFzZSAyMGJhc2V7MTAxK30lIiIr
GolfScript, 51 Bytes
Es ist eine einfache Nachschlagetabelle. Die Eingabe wird ausgewertet (
~
), ein Array der Werte erstellt und der Index gefunden.Probieren Sie es hier aus
quelle
Try it here
Link einen anderen Code als der eingefügte Code.Try it here
Unterschied des Links im Code besteht darin, dass die Webseite keine Benutzereingaben unterstützt. Ändern Sie die Zeichenfolge nach;
, dies ist identisch mit der Benutzereingabe.Perl, 60 Bytes
Benötigt den
-p
Schalter (zwei Bytes).Beispiel
Wie es funktioniert
-p
liest aus STDIN und speichert das Ergebnis in$_
.=~/.[a-z]*/g
Teilt das vorhergehende Bareword in Teilzeichenfolgen aus einem (Groß-) Buchstaben, gefolgt von einer beliebigen Anzahl von Kleinbuchstaben.(…)
sammelt die Teilzeichenfolgen in einem Array.[$_]
Ruft den Teilstring ab, der der Benutzereingabe entspricht.$_=…
speichert das Ergebnis in$_
.-p
druckt den Wert von$_
.quelle
DOS Batch - 162 Zeichen (inkl. Zeilenumbrüche)
Diese Antwort wurde von @ grcs Python-Antwort inspiriert, obwohl ich etwas Ähnliches vorhatte.
Verwendungszweck:
[Dateiname] [Nummer]
Wenn sich der Code beispielsweise in einer Datei mit dem Namen speak.bat befindet und Sie die Nummer "five" sehen möchten, würden Sie ihn wie folgt ausführen:
speak 5
Außerdem erfolgt die Ausgabe von oben nach unten und nicht von links nach rechts! Also statt
du wirst sehen
quelle
Bash + Coreutils, 64
Nicht wettbewerbsfähiges Komprimierungskonzept
Einige der exotischen Zeichen hier werden möglicherweise nicht richtig dargestellt, sodass dieses Skript möglicherweise aus seiner base64-Darstellung rekonstruiert wird:
Beispielausgabe
Erläuterung
Mir ist aufgefallen, dass die Zeichenfolge
one two three four five six seven eight nine
nur die Buchstabenefghinorstuvwx
und ein Leerzeichen enthält - insgesamt 15 Zeichen. Somit kann jedes Zeichen möglicherweise in 4 Bits oder 2 Zeichen pro 1 Byte dargestellt werden. Wir können die hexadezimale Darstellung eines Bytes verwenden, um jedes Byte auf einfache Weise in zwei hexadezimale Ziffern aufzuteilen. Wir können dann die hexadezimalen Ziffern wieder in die Buchstaben umwandeln, die wir benötigentr
oder ähnliches. Wie es der Zufall wollte,rstuvwx
sind in Folge, so ausgedrückt werden kann alsr-x
auftr
. Die Kodierung ist so angeordnet , dasse
undf
bleiben , wie sie ist, und dass die Worte Zeilenumbruch getrennt sind, so dass wir verwenden können ,sed
brauchen wir nur die Linie ouptut.Dieser Dekodierungsprozess benötigt eine Menge zusätzlichen Speicherplatz. Daher ist diese Antwort als Antwort im Shell-Skript-Stil nicht konkurrenzfähig, kann aber in anderen Sprachen ein nützliches Konzept sein.
quelle
(rein) Bash, 64
Nimmt die Eingabe als erstes Argument an, wobei eine gültige Eingabe vorausgesetzt wird.
Erstellt ein Array
v
und greift dann auf das in der Eingabe angegebene Element zu. Da Arrays mit Nullen indiziert sind, musste ich ein 0. Element als Platzhalter hinzufügen. Alternativ (Danke an @DennisWilliamson für diesen Hinweis):quelle
v=(one two three four five six seven eight nine)
undecho ${v[$1-1]}
Python 2.x -
6564Nicht so gut wie @grcs Antwort, aber besser lesbar :-)
Ein Zeichen weniger dank @flornquake
quelle
'nine eight seven six five four three two one'.split()[-input()]
Java 7 - 185
quelle
C 111
Die Länge wird hier sorgfältig konstruiert , damit ich es als binäres und convert interpretieren kann , dass in Dezimalzahlen. Mit nur 7 Zeichen bin ich zuversichtlich, dass ich einen Gewinner habe!
quelle
#include
und weglassenmain()
. Auch biss ein von Refactoring des Ausdrucks:main(){printf("%.5s","one two threefour five six seveneightnine"+5*getchar()-245);}
. 86 Zeichen nach meiner Zählung.111
als binär behandeln , würde das7
in dezimal konvertieren .bash say (OS X):
38"Ihr Ziel ist es, eine ganze Zahl zwischen 1 und 9 in das Wort umzuwandeln, das es darstellt."
Als ich das letzte Mal nachgesehen habe, sind gesprochene Wörter auch Wörter. Vorheriger Versuch (akzeptiert keine Eingabe)
say 4
Bearbeiten, muss Eingabe lesen können:
Geben Sie eine beliebige Zahl ein, und das Wort wird ausgegeben. Ich weiß, dass das Enddatum fällig ist, aber meiner Meinung nach hätte ich den Wettbewerb gewinnen sollen.
Beispiel-Audiodatei: four.aiff
quelle
VBScript
988075quelle
J -
68 oder 6057 oder 53 BytesInteraktive Version (stdin):
Funktionsversion:
Erläuterung:
".(1!:1)1
Liest einen String und konvertiert ihn in eine Ganzzahlquelle
(;:'one two blah')>@{~<:
) schreiben, und weitere sechs, indem Sie stattdessen das Gerundiumone`two`blah
verwenden;:
.>one`two`three`four`five`six`seven`eight`nine{~<:".1!:1]1
3 Zeichen kürzer.Perl 36 (58 eigenständig)
Oder ohne Zusatzmodule:
quelle
Can't locate Number/Spell.pm in @INC (@INC contains: /Library/Perl/5.16/darwin-thread-multi-2level /Library/Perl/5.16 /Network/Library/Perl/5.16/darwin-thread-multi-2level /Network/Library/Perl/5.16 /Library/Perl/Updates/5.16.2 /System/Library/Perl/5.16/darwin-thread-multi-2level /System/Library/Perl/5.16 /System/Library/Perl/Extras/5.16/darwin-thread-multi-2level /System/Library/Perl/Extras/5.16 .) at toto.pl line 1.
BEGIN failed--compilation aborted at toto.pl line 1.
syntax error at titi.pl line 1, near "say qw(one two three four five six seven eight nine)"
Execution of titi.pl aborted due to compilation errors.
In AppleScript; 123 Zeichen.
Dieses Skript übernimmt die Eingabe in einem Dialog. Dann gibt es die Ausgabe im AppleScript- Ergebnis .
Beispiel:
6
"six"
Hier ist eine schönere Version:
Diese Version zeigt die Ausgabe in einem schönen Dialog.
Beispiel:
9
nine
[Antwort bearbeitet; Dialog für die Eingabe leicht verbessert; immer noch 124 Zeichen. Antwort erneut bearbeitet; jetzt 1 char weniger! ]
quelle
set n to text returned of
... Wow.Powershell -
9174So entfernen Sie den Enum- und ToObject-Aufruf:
Wie funktioniert das?
HourOfDay ist ein Aufzählungstyp, sodass wir Namen anstelle von magischen Konstanten verwenden können. Aufzählungstypen haben eine ToString () -Implementierung, die Ihnen den Namen des konstanten Werts gibt. Sie können ein Int in eine Enumeration umwandeln. Console.Read () liest ein Zeichen aus dem als Ganzzahl dargestellten Eingabestream. Wenn Sie '1' eingeben, erhalten Sie 49, subtrahieren Sie 48, um 1 zu erhalten.
Da Powershell einen ToString für alle Objekte ausführt, die in den Ausgabestream geschrieben werden, und keinen Fluff benötigt, um daraus eine ausführbare Datei zu machen, ist dies alles, was außer Powershell benötigt wird ...
quelle
CJam - 50
Dies ist eine einfache ASCII-Lösung, die HTTP-Anforderungen verwendet (dies ist in der Frage zulässig):
Auf dem Server befinden sich 9 Klartextdateien mit den Namen 1, 2, ..., 9, die jeweils das entsprechende Wort enthalten.
Gesamtgröße: 14 + 3 ("eins") + 3 ("zwei") + 5 + 4 + 4 + 3 + 5 + 5 + 4 = 50.
Mit einer kürzeren Domain kann mehr Golf gespielt werden.
Der Online-Interpreter unterstützt keine HTTP-Anforderungen, daher muss das Programm mit dem Java-Interpreter ausgeführt werden .
quelle
Batch - 86
Weitaus kürzer als die andere Batch-Antwort und tatsächlich überraschend wettbewerbsfähig.
Verwendet als
filename.bat number
, und die Ausgabe erfolgt in Form einer Datei mit dem Namen der richtigen Nummer.quelle
Ruby 64
quelle
9-1
Sie , wenn Sie nur sagen können8
? Natürlich sind beide9-1
und8
falsch; Dieses Skript gibt die ganze Zeit "neun" aus und ignoriert Eingaben.Bash 9
schamlose Linux-Replik der Antwort von Cousincoicane
spricht eines aus
quelle
GolfScript, 50 Bytes
Ich wollte sehen, ob ich die 51-Byte-GolfScript-Lösung von Quincunx übertreffen kann . Es stellt sich heraus, dass ich mit genügend Tricks - pro Byte - kann.
Da einer der von mir verwendeten Tricks die Verwendung von Bytes außerhalb des druckbaren ASCII-Bereichs ist, kann das resultierende Programm hier nicht direkt eingefügt werden. Stattdessen stelle ich einen Hex-Dump zur Verfügung. Benutzer auf Unixish-Systemen können
xxd -r
das aktuelle 50-Byte-GolfScript-Programm aus dem Hex-Dump rekonstruieren:Der grundlegende Trick, der zum Generieren dieses Programms verwendet wird, ist einfach: Ich komprimiere das lange String-Literal, das den größten Teil von Quincunx 'Code ausmacht, indem ich 99 (den ASCII-Code des Buchstabens
c
) von den Zeichenwerten subtrahiere und die resultierenden Werte als Zahl in Basis 22 interpretiere (genug, um die Buchstaben bis zu kodierenx
) und dann die resultierende Zahl in Basis 255 neu zu kodieren, um die nicht druckbare Byte-Zeichenfolge zu erzeugen, die den größten Teil der ersten Hälfte meines Programms ausmacht. Der Rest des Programms kehrt diesen Vorgang dann um und dekodiert den String wieder in etwas Druckbares.(Da der niedrigste Buchstabe in den Nummernnamen tatsächlich vorhanden ist
e
, hätte ich die Byte-Zeichenfolge weiter verkürzen können, indem ich 101 von den ASCII-Codes subtrahierte und Basis 20 verwendete.o
Wenn ich jedoch 101 subtrahierte, hätte ich den Buchstaben einer neuen Zeile zugeordnet, die ichn
Ich verwende als Zahlenbegrenzer, weil es bequem als integrierte Konstante in GolfScript verfügbar ist. Das Umgehen kostet mich mehr als das Byte, das bei Verwendung einer niedrigeren Basis gespart würde. Wenn der Versatz 99 verwendet wird, verbleibt die dem Buchstaben entsprechende neue Zeilem
, was in den Nummernnamen praktisch nicht vorkommt.)Hier ist eine abgespeckte Version des Programms:
quelle