Anleitung
In Anbetracht eine unbekannte Eingabezeichenfolge i
mit einem Wert von entweder Kopf oder Schwanz , kehrt 1
für Köpfe oder -1
für Schwanz mit dem kürzesten Code.
Beispiel nicht Golf Code (55b):
if(i == "heads"){
print(1);
}else{
print(-1);
}
Beispiel Golf Code (16b):
print("t">i||-1)
Für das Beispiel wurde Javascript verwendet, dies ist jedoch keine Voraussetzung . Entschuldigung, wenn es für die meisten Benutzer zu einfach ist, kann es verbessert werden.
Antworten:
CJam, 4 Bytes
Angenommen, die Variable
I
enthält die Eingabe, dai
in CJam kein gültiger Bezeichner vorhanden ist.Probieren Sie es online aus.
Dies entspricht dem JavaScript-Code
I.indexOf('e')
.quelle
p
auf? Gehört es in CJam nicht zum Standard?p
nicht benötigt wird.C 18 Bytes
Ziemlich einfach, aber lass es uns nur zum Spaß machen ...
Wenn die Zeichenfolge angegeben
char *i
wird, werden 1 fürheads
und -1 fürtails
mit nachfolgendem Zeilenumbruch ausgegeben.Erläuterung
Zeigt in C
"-1" + 1
auf 1 Zeichen vorwärts, ist also dasselbe wie"1"
. Werfen wir einen Blick auf die ersten Zeichen:Wenn wir die Bits vom rechten Ende beginnend bei Null zählen, ist Bit 3 1 in
heads
und 0 intails
: Summieren, um"-1"
die richtige Zeichenfolge zu ergeben. Es sieht aus wie das:Ersetzen Sie nun
i[0]
mit*i
und die rechte Verschiebung durch die Division mit Zweierpotenz, um einige Bytes zu sparen. Entfernen Sie auch unnötige Klammern:Nun
& 1
kann substituiert sein mit% 2
. Die Anzahl der Zeichen ist gleich, der Modul hat jedoch eine höhere Priorität, sodass die Klammern weggelassen werden können. Leerzeichen entfernen:Bonus
Ich denke, der kürzeste Weg, um eine Ganzzahl 1 oder -1 (keine Zeichenfolge) in C zu erhalten, ist:
Erläuterung:
quelle
Ruby, 8 (6 ohne Ausgabe)
Rocketship-Betreiber!
quelle
PHP - 11 Bytes
Dies funktioniert, weil
'tails' ^ 'F'
→'2'
und'heads' ^ 'F'
→'.'
, die bei der Eingabe als Ganzzahl sind0
.Sie können diese Lösung (oder eine der folgenden) folgendermaßen testen:
Ideone Link
Alternativen
15 :
<?=1-md5($i)%3;
16 :
<?=md5($i)[5]-5;
16 :
<?=-crc32($i)%5;
quelle
TI-BASIC, 9-10 Bytes
Einfach. "t" befindet sich in Position 1 von "tails", "t" jedoch nicht in der Zeichenfolge "heads", also inString (gibt 1 für tails und 0 für heads zurück.
Wenn sich Ihr Rechner im Bogenmaßmodus befindet (wie es jeder Mathematiker tun sollte), sind nur neun Bytes erforderlich:
Beachten Sie, dass TI-Taschenrechner keine benannten Zeichenfolgen haben, sodass die Eingabe in der Antwortvariablen des Taschenrechners erfolgt. Beachten Sie auch, dass Kleinbuchstaben jeweils zwei Bytes umfassen, sodass diese Lösung tatsächlich weniger Speicher benötigt als das Wort "Köpfe".
quelle
t
undinString(
sind jeweils zwei Bytes.Spaltung ,
2621 BytesMartin (und seine ausgezeichnete Antwort hier ) überzeugte mich, eine neue Sprache zu lernen, und welchen besseren Ort als ein schnelles Golfspiel? Das ist mit ziemlicher Sicherheit nicht optimal, aber hey, es hat Spaß gemacht! Sobald ich mich gut dabei fühle, kann ich eine Erklärung abgeben, wenn ich darum gebeten werde.
quelle
Python 2, 16 Bytes
quelle
Pyth - 4 Bytes
Laufen Sie mit Kopf oder Schwanz . Wie
i
istint
in Pyth, Diese verwendetz
als Variablennamen, die jeder Benutzereingabe enthält. Es entspricht dem Pythonprint(z.find("e"))
, verwendet also die @ Dennis-Methode.quelle
VBA (Excel), 12 Byte
Kein fantastisches Stück Golf, aber es macht Spaß, mit VBA zu versuchen, einer richtigen Programmiersprache nahe zu kommen ...
i ist die Zeichenfolge, die nur den ASCII-Wert des ersten Zeichens ausnutzt, durch 6 geteilt und von 13 subtrahiert, um 1 oder -1 zu ergeben. Sehr einfach.
Beispiel im unmittelbaren Fenster ausführen (10 zusätzliche Bytes, um die Eingabevariable festzulegen):
quelle
C, 22 Bytes
Credits gehen an @TheE, um mir davon zu erzählen !
Erläuterung:
Wenn das erste Zeichen der Zeichenfolge größer als ist
'h'
, wird die Zeichenfolge"-1"
gedruckt. Andernfalls wird die Zeichenfolge"1"
gedruckt. Beachten Sie, dass dieser Ansatz mit einem nachgestellten Zeilenumbruchzeichen einhergeht.Alte Version (25 Bytes):
Erläuterung:
Ist das erste Zeichen der Zeichenfolge größer als
'h'
, wird -1 ausgegeben. Andernfalls wird 1 gedruckt.quelle
h
und 7 fürt
.puts(*i>'h'?"-1":"1");
nicht besser? (22 bytes)Tr:
1713 Zeichen(Oder
1410, wenn Sie nur die Argumente zählen ...)Probelauf:
Kurze Erklärung:
tr
steht für transliterate, dh ersetzt jedes Zeichen der im ersten Argument gefundenen Eingabe durch ein Zeichen an derselben Stelle im zweiten Argument:Wenn das erste Argument länger ist, werden die Zeichen ohne Positionsübereinstimmung im zweiten Argument durch das letzte Zeichen des zweiten Arguments ersetzt:
Wenn die Option
-s
(--squeeze-repeats
) verwendet wird, werden aufeinanderfolgende Zeichen, die durch dasselbe Zeichen ersetzt würden, sofort ersetzt:Wenn wir also alle Zeichen in "Tails" auflisten, erhalten wir das, was wir brauchen:
Das Gleiche gilt für "Köpfe", aber wir müssen das "t" voranstellen, um das Minus zu verbrauchen (Buchstaben alphabetisch sortiert nach Gruseligkeit):
Das Zusammenführen aller eindeutigen Zeichen von "Tails" und "Heads" in einem einzigen ersten Argument, wobei "T" im Vordergrund bleibt, führt zur endgültigen Lösung:
Um die Aufzählung der Zeichen zu vermeiden, kann stattdessen ein Intervall im Format von - bis verwendet werden.
quelle
tr
. POSIXly:tr -s ta-s '-[1*]'
8088-Assembly, IBM PC DOS, 17 Byte
Zerlegt:
Erläuterung:
Verwenden Sie das Paritätsflag der CPU, um zu bestimmen, ob das erste Zeichen eine
'h'
(gerade Anzahl von Binären1
) oder eine't'
(ungerade Anzahl von Binären1
) ist. Dies spart ein Byte gegenüber dem Vergleich des Zeichens in ASCII.Eingabe über die Befehlszeile, Ausgabe an die Konsole.
Input-Output:
quelle
Japt , 2 Bytes
Probieren Sie es online aus
quelle
Shell (portabel / POSIX), 16 Byte
expr $i : he - 1
Probieren Sie es online!
Vielen Dank an @ StéphaneChazelas in unix.stackexchange.com
Andere Lösungen ausprobiert:
echo $[30#$i%7-1] # 17 bytes but only in bash, zsh.
Probieren Sie es online!echo $((30#$i%7-1)) # 19 bytes but only bash,ksh,zsh.
Probieren Sie es online!he=2;echo $[${i%a*}-1] # 22 bytes But only in bash,zsh .
Probieren Sie es online!a=${i%h*};echo ${a:+-}1 # 23 .
tragbar . Probieren Sie es online!he=2;echo $((${i%a*}-1)) # 24 bytes .
tragbar . Probieren Sie es online!IFS=h;set $i;echo ${1:+-}1 # 26 (change IFS) .
tragbar . Probieren Sie es online!(IFS=h;set $i;echo ${1:+-}1) # 28 (subshell) .
tragbar . Probieren Sie es online!(IFS=h;set $i;echo $(($#*2-3))) # 31 bytes .
tragbar . Probieren Sie es online!Hinweis: Verwendung
dash
als sinnvoller Vergleich eines tragbaren Shell-Testers.expr $i : he - 1
Zählt, wie viele Zeichen übereinstimmenhe
mit$i : he
. Eineheads
Übereinstimmung2
und einetails
Übereinstimmung 0 (keine). Dann subtrahieren1
mit- 1
.$[30#$i%7-1]
Konvertiert den String in eine Ganzzahl. Die Basis 30 und der Mod von 7 wurden ausgewählt, um eine Differenz von 2 zwischenheads
und zu erhaltentails
. Durch Subtrahieren von 1 werden die Zahlen in1
und umgewandelt-1
.Beachten Sie, dass a
$[...]
eine archaische Form des arithmetischen Ausdrucks ist,$((...))
die nur in einigen Shells gültig ist.he=2;echo $[${i%a*}-1]
Dies funktioniert, indem eine Variable mit einem bestimmten Wert erstellt und anschließend mit der arithmetischen Erweiterung diese Variable (ausgehend vom Textwert) erweitert wird. Das${i%a*}
Konvertierungheads
nachhe
undtails
nacht
(die als Variable den Wert 0 hat).IFS=h;set $i;echo ${1:+-}1
Arbeitet in zwei Schritten. Wenn Sie IFS so einstellen , dassh
das Anführungszeichen$i
inset $i
durch das Zeichen getrennte Teile geteilt wirdh
,heads
wird es in''
und geteilt und'eads'
somit$1
auf null gesetzt.tail
wird nicht durch geteilth
, macht also$1
gleichtails
. Dann,${1:+-}
erzeugt ein ,-
wenn der Wert$1
nicht null ist (wie intails
) oder nichts (wie bei einem Null$1
). Dieses Zeichen (oder nichts) ist verkettet mit1
.(IFS=h;set $i;echo $(($#*2-3)))
funktioniert auf ähnliche Weise, aber verwenden Sie die Anzahl der Teile ($#
), in denen die Zeichenfolge enthalten ist$i
gerissen wurde.quelle
Python 2, 17 Bytes
'heads'
ist kleiner als't'
, also wertet es ausTrue == 1
und die Zeichenfolge nach dem ersten Zeichen gedruckt.'tails'
ist größer als't'
, wird also ausgewertetFalse == 0
und die gesamte Zeichenfolge gedruckt.Wenn wir dies über die Befehlszeile mit implizitem Drucken tun, wird es einfach zu:
... für 12 Bytes, fügt der Ausgabe jedoch einfache Anführungszeichen hinzu.
quelle
QBasic, 11 Bytes
Dies muss das kürzeste Stück von QBasic sein, das ich je geschrieben habe.
Erläuterung:
Das obige ist ein ziemlich stark golfener QBasic. Sobald der Autoformatierer damit fertig ist, sieht es so aus:
Die erste Zeile vergleicht den String
i
mit"t"
. Wenni
ist"heads"
,i > "t"
ist falsch undc = 0
. Wenni
ist"tails"
,i > "t"
ist wahr undc = -1
. Ja,-1
in QBasic ist der Standardwert für boolean true!Die zweite Zeile abbildet
-1
auf-1
und0
zu1
über einen mathematischen Trick:(-1)^(-1) == 1/(-1) == -1
und0^0
, wenn auch technisch mathematisch nicht definiert, kehrt1
.Für diesen Code muss
i
explizit eine Zeichenfolgenvariable deklariert werden. sonst müsste es seini$
. Vollständiges Testprogramm (getestet auf QB64 ):quelle
Gaia ,
54 BytesFindet ähnlich wie Dennis 'CJam-Antwort den Index von
e
in der Eingabezeichenfolge1 Byte gespeichert, da ich nicht erkannte, dass die Eingabe automatisch als Argument verwendet wurde, wenn nicht genügend Stapelwerte vorhanden sind
Wie es funktioniert
Probieren Sie es online!
quelle
Bash , 22
Nimmt den 2. Buchstaben (
e
odera
) und interpretiert ihn als Hexadezimalziffer (14 oder 10), dividiert dann durch 2 und subtrahiert 6, um die richtigen Antworten zu erhalten.Probieren Sie es online!
quelle
echo $[30#$i%7-1]
nur 17 Byte. :-)ed ,
272521 bytesed
gab mir Kopfschmerzen. Endlich habe ich es mit Hilfe von@ed1conf
Twitter und einigen Guckern herausgefundenunix.se
. Man kann nicht einfach Dinge mits/re/newtext/
abgleichen, man muss es mit voranstellen,g
sonsted
packt man ein trauriges. Es ist wie ein mürrisches 50 Jahre altes Unix-Programm, das sagt "Komm von meinem Rasen runter".Probieren Sie es online!
-2 Bytes durch
/
Löschen der letzten s-4 Bytes dank @manatwork (& dessen
sed
Antwort ich plagiiert habe)Alte Version:
g/t/s//- g/\w\+/s//1 wq .
quelle
q
, es wird von selbst beendet, wenn nichts mehr zu tun ist. Und Sie brauchen nur einen Zeilenumbruch nach ihnen, das "." (Oder "Roblogic" ...) ist unnötig. Probieren Sie es online!Python, 20 Bytes
Dies wird zurückgegeben,
False
wenn dies nicht der Fall ist undTrue
wenn dies der Fall ist. In PythonFalse
und0
sind gleich, undTrue
und1
auch.So:
quelle
Golflua
252018Vielleicht könnte man noch mehr Golf spielen, wenn man einige Tricks benutzt, über die ich im Moment nicht nachdenke.(siehe Verlauf für alte Version) 5 Zeichen wurden gespeichert, indem die Eingabe inwrite
dieif
Anweisung verschoben und dort ignoriert wurde . Zwei weitere Zeichen wurden gespeichert, indem die optionale Klammer an ignoriert wurdefind
. Es wird nicht nach fehlgeschlagenen Bedingungen gesucht (dh Eingaben, die weder Kopf noch Zahl sind) ).Ein Lua-Äquivalent wäre
quelle
Haskell, 18 Bytes
Jede Zeichenfolge, die mit dem Buchstaben beginnt,
h
wird zugeordnet1
, alle anderen bis-1
.quelle
Sed: 16 Zeichen
Probelauf:
quelle
ed
Lösung verwendet, aber es hat immer noch 23 Bytes gedauert, weil ered
alt und mürrisch ist!\w
und\+
sind allerdings GNU-Erweiterungen.Stax , 3 Bytes
Führen Sie es aus und debuggen Sie es
quelle
Stax , 4 Bytes
Führen Sie es aus und debuggen Sie es
Es ist der Codepunkt des ersten Zeichens Mod 7 minus 5.
quelle
PowerShell , 15 Byte
Probieren Sie es online!
Übernimmt die Eingabe per Splatting. Verwendet die
e
vs diea
ASCII-Mathematik zu tunquelle
Gleichstrom , 8 Bytes
dc kann mit Strings nichts Sinnvolles anfangen, als sie einzulesen und zu versuchen, sie auszuwerten. Dabei gibt "heads" einige Warnungen über nicht implementierte Befehle und leeren Stack aus, die wir ignorieren. Wichtig ist jedoch, dass der Stack leer bleibt. "tails" macht fast dasselbe mit der wichtigen Ausnahme, dass das letzte "ls" einen Wert aus dem s-Register in den Stack lädt.
Wir verwenden dann "z", um die Stapellänge zu erhalten, und tüfteln arithmetisch, um die richtigen Antworten zu erhalten.
Probieren Sie es online!
quelle
Dreieckig , 10 Bytes
Probieren Sie es online!
Dividiert den ASCII-Wert eines eingegebenen Zeichens durch 7. Subtrahiert den Quotienten von 15. Die Ausführung wird angehalten, wenn die IP nicht mehr über den Programmbereich verfügt. Dies funktioniert, weil Triangular nur Ganzzahldivisionen verwalten kann. Praktischerweise hat "h" einen Wert von 104, was 14 ist, wenn die ganze Zahl durch 7 geteilt wird; "t" ist 116, was 16 ist, wenn die ganze Zahl durch 7 geteilt wird.
Ungolfed / Erklärung:
Vorherige Version (14 Bytes):
Liest ein Zeichen aus der Eingabe; Wenn der durch 8 geteilte ASCII-Wert dieses Zeichens einen Rest enthält, geben Sie -1 aus, andernfalls geben Sie 1 aus.
quelle
Fass ,
8128 BytesProbieren Sie es online!
Erklärung (syntaktisch ungültig)
quelle
^
.Vitsy , 13 Bytes
Also, ich bin zu spät für die Party. ¯ \ _ (ツ) _ / ¯
quelle