Kürzlich wurde ein Elektrotechniker, der Ampel-Timings studierte, vom Bundesstaat Oregon mit einer Geldstrafe von 500 US-Dollar belegt, weil er sich als Ingenieur bezeichnet hatte.
Bei einer 2-Buchstaben-Zeichenfolge als Eingabe für einen US-Bundesstaat wird Folgendes ausgegeben:
I am not an engineer
wenn der Staat Oregon ist (OR
)I am an engineer
wenn der Staat ein anderer US-Bundesstaat istWhat is an engineer?
jede andere Eingabe gegeben
Die Ausgabe enthält möglicherweise keine führenden Leerzeichen, aber möglicherweise so viele nachgestellte Leerzeichen, wie Sie möchten.
Sie können davon ausgehen, dass die Eingabe immer aus 2 Großbuchstaben besteht.
Hier ist eine Liste aller 50 Abkürzungen für US-Bundesstaaten:
AL, AK, AZ, AR, CA, CO, CT, DE, FL, GA, HI, ID, IL, IN, IA, KS, KY, LA, ME,
MD, MA, MI, MN, MS, MO, MT, NE, NV, NH, NJ, NM, NY, NC, ND, OH, OK, OR, PA,
RI, SC, SD, TN, TX, UT, VT, VA, WA, WV, WI, WY
Wertung
Dies ist Code-Golf , so dass nur wenige Bytes in jeder Sprache gewinnen!
code-golf
string
kolmogorov-complexity
Skidsdev
quelle
quelle
Antworten:
C #,
311 309240237222195184183 BytesProbieren Sie es online!
Gespeichert 2 Bytes durch den Raum hinzufügen , bevor
an
zub
-69 (Huehue)-72 Bytes dank TheLethalCoder-15 Bytes dank TotallyHumans genialem Zustandsstring
-38 Bytes für mehr String-Komprimierung
Ungolfed:
quelle
..."+b
anstelle von interpoliert Strings, ändernif..else if...else
zureturn s==
„ODER“ ....:? System.Arr ... `dh ein ternäres verwenden. Verwenden Sieu.Contains
anstelle vonArray.Exists
. Ich denke, wenn Sie Leerzeichen anstelle von Kommas verwenden, wird es.Split()
ohne Parameter funktionieren.u
ist ein Array ohne Zeichenfolge. Sie können jedoch Bytes speichern, indem Sie sieu
als Zeichenfolge festlegen und verwenden.Contains
.s=>{var b=" an engineer";return s=="OR"?"I am not"+b:"AL AK AZ AR CA CO CT DE FL GA HI ID IL IN IA KS KY LA ME MD MA MI MN MS MO MT NE NV NH NJ NM NY NC ND OH OK PA RI SC SD TN TX UT VT VA WA WV WI WY".Contains(s)?"I am"+b:$"What is{b}?";};
. Denke, ich habe alle relevanten Leerzeichen entfernt. (Ungetestet)JavaScript (ES6), 182 Byte
Demo
Code-Snippet anzeigen
quelle
LA
: /C
215,208,190 Bytes-7 danke an Cool Guy
Benutzt @ totallyhumans "Gattungszeichenfolge".
Wie es funktioniert:
"string"z
Verkettet sich automatisch"string"
mitz
(" an engineer"
). Ja, C macht das.!strcmp(s,"OR")
vergleicht den String mit "OR".?"I am not"z
Gibt "Ich bin kein Ingenieur" zurück, wenn dies zutrifft. Andernfalls...:strstr(...,s)
Überprüft, ob der Genius-String von @ totallyhuman den angegebenen String enthält.?"I am"z
gibt "Ich bin Ingenieur" zurück und ...:"What is"z"?")
gibt "Was ist ein Ingenieur?" Andernfalls.Probieren Sie es online!
quelle
#define z " an engineer" f(char*s){!strcmp(s,"OR")?puts("I am not"z):strstr("MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH RIA UT WVT WIL WY",s)?puts("I am"z):puts("What is"z);}
Python 2 ,
228168 BytesProbieren Sie es online!
quelle
Python 2 ,
192186182178176 BytesKönnte wahrscheinlich die Statuszeichenfolge mehr komprimieren.
Probieren Sie es online!
quelle
u
in.if s in u
Können Sie es direkt verwenden, anstatt es zu deklarieren?VALA WAZ NCA COH CTX SDE FL GA HID WIL MIN IAKSC KY ME MD MA MNMS MOK MTNE NH NJ NY ND PARI UT NVT WV WY
ist die kleinste, die ich machen kann'MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH ORIA UT WVT WIL WY'
Java (JDK 10) , 184 Byte
Probieren Sie es online!
Ich entschuldige mich für die Wiederverwendung der komprimierten Zeichenfolge: Ich konnte nichts Besseres finden ... :(
quelle
05AB1E ,
104103101 BytesProbieren Sie es online!
Alte 104-Byte-Version, falls dies leichter zu verbessern ist.
Nicht zufrieden mit der Komprimierung oder dem Sonderfall für
?
.quelle
(A=1,C=3 ...)
. Die 103-Byte-Version macht dasselbe für einige Zustände und führt einige Zustände zusammen, die mit demselben Buchstaben enden, mit dem ein neuer Zustand beginnt. Ich bin sicher, dass dies noch verbessert werden kann und ich werde eine bessere Erklärung hinzufügen, wenn ich mehr Golf gespielt habe..•~Zµ∞/'—¶[@øl•Œ2ù
Sie für einige Zustände verwendet haben, anstatt nur alle Zustände zu komprimieren und das zu tun2ô
. Und insgesamt eine schöne Herangehensweise. (Ich bin froh, dass ich Ihre Antwort gesehen habe, bevor ich selbst etwas versucht habe, denn es wäre definitiv nicht so kurz gewesen.)F # 222 Bytes
Probieren Sie es online!
Erweitert:
Wenn ein aus zwei Buchstaben bestehender Zustand v an die Funktion f übergeben wurde , erstellen Sie ein Tupel (a, b), das den Kopf und den Schwanz des Satzes "engineer" darstellt.
Fühlen Sie sich frei, die "komprimierte Statuszeichenfolge" frei zu verwenden; es ist ein ganzes Byte kürzer als das MINCALA ...
quelle
R ,
10996 BytesProbieren Sie es online!
13 Bytes dank J.Doe - durch Verwendung von Regex und Indexierung.
quelle
sub
ist viel besser, danke!Japt ,
136135131129128 BytesWeitere Einsparungen können durch Experimentieren mit der Reihenfolge der Staatsabkürzungen erzielt werden. Ich werde gleich darauf zurückkommen.
Probieren Sie es online aus
Erläuterung
ò
Methode in ein Array von 2 Zeichenfolgen auf .ø
Methode, um zu sehen, ob das Array enthältUv
. Dabei handelt es sich um die in Kleinbuchstaben konvertierte Eingabezeichenfolge."I am "
¥
(gleich) ist,"OR"
können Sie entweder"not "
die leere Zeichenfolgenvariable anhängenP
."an engineer"
."What is an engineer?"
.quelle
Python 3 ,
180179178 BytesProbieren Sie es online!
quelle
CJam , 143 Bytes
Probieren Sie es online! oder als Testsuite
Erläuterung
Da Oregon (
OR
) am Anfang der Zeichenfolge steht, ist -1, wenn es nicht gefunden wird, 0, wenn esOR
1 ist, wenn es sich um einen anderen Zustand handelt. Welcher String gedruckt werden soll, kann dadurch entschieden werden.quelle
PHP, 188 Bytes
Probieren Sie es online!
quelle
in_array(...)
zustrpos(_AKALARAZCACOCTDEFLGAHIIAIDILINKSKYLAMAMDMEMIMNMOMSMTNCNDNENHNJNMNVNYOHOKPARISCSDTNTXUTVAVTWAWIWVWY,$argn)&1
._NMMNINTNRIHIMIWISCNCCTMTUTVTWVNVFLILCAALGAIAMAPAVAWACOLAMOAKARKSMSNHOHOKORAZDEIDKYMEMDNENJNYNDSDTXWY
ArbeitenC #, 178 Bytes
Führen Sie in C # Pad
Golf basierend auf Mayubes Lösung ; Neu hier, daher habe ich nicht genug Repräsentanten, um Kommentare abzugeben.
quelle
Haskell ,
220214210209 BytesProbieren Sie es online!
quelle
1<2
ist noch kürzerOR
die lange Zeichenfolge in der zweiten Definition von iJavascript 204
quelle
s=>(!(h=/(A[LKZR]|C[AOT]|DE|FL|[GPLV]A|[HR]I|I[DLNA]|K[SY]|M[EDAINSOT]|N[EVHJMYCD]|O[HKR]|S[CD]|T[NX]|[VU]T|W[AVIY])/.test(s))?"What is":"I am"+(s=='OR'?" not":""))+" an engineer"+['?'[+h]]
AWK, 189 Bytes
Wenn die Eingabe mit einem regulären Ausdruck übereinstimmt, der alle Statusabkürzungen enthält, geben Sie "Ich bin Ingenieur" mit einem "Nicht" in der Mitte ein, wenn der Status Oregon ist, und beenden Sie den Vorgang.
Wenn die Eingabe nicht mit dem regulären Ausdruck übereinstimmt, darf es sich nicht um eine Abkürzung für den US-Bundesstaat handeln.
quelle
Python 3, 238 Bytes
Erläuterung
Keine Komprimierungstechniken verwendet.
quelle
Java, 173 Bytes
quelle
s->
, indem Sie den Anfang ergänzen .Stax , 100 Bytes
Diese Sprache datiert die Herausforderung nach. Aber der Autor (ich) hat es bis jetzt nicht gesehen.
Führen Sie es aus und debuggen Sie es
quelle
JavaScript ES6,
175171 BytesViel Gutes beigetreten
Oder 152 Bytes bei ISO-Codierung
Generator:
quelle
C (gcc) , 0 + 176 Bytes
Probieren Sie es online!
rein übersetzen
quelle
Powershell, 175 Bytes
Testskript:
Ausgabe:
quelle
Python 3 ,
236182181 BytesProbieren Sie es online!
TIO enthält Testfälle für alle Zustände.
-54 Bytes dank der String-Komprimierung
quelle
MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH ORIA UT WVT WIL WY
ist eine bessere Komprimierungq / kdb + 174 Bytes
Lösung:
Erläuterung:
Anmerkungen:
Verwendete die 'komprimierte' Zeichenfolge aus anderen Antworten und bemühte sich, eine Möglichkeit zu finden, sie in eine einzelne Zeile zu bringen, um die Zuweisung der
a
Variablen zu vermeiden?
.quelle
Netzhaut , 175 Bytes
Probieren Sie es online! Hoffentlich habe ich die Liste der besten Bundesstaaten übernommen. Erläuterung:
Baue das Ergebnis auf. Fügen Sie außerdem die Statusliste ein, die für die nächste Stufe verwendet werden soll.
Wenn es sich um einen der 49 Status handelt, löschen Sie den Status und die Liste.
Wenn es sich um Oregon handelt, ersetzen Sie den Status durch
not
und löschen Sie die Liste.Wenn es etwas anderes ist, ersetzen Sie alles durch den anderen Ausgang.
Fügen Sie dieses Wort als letztes hinzu, um Wiederholungen zu vermeiden.
quelle
Crystal,
232 207205 BytesProbieren Sie es online aus . (geringfügig geändert aufgrund einer Ausgabe von ARGV)
quelle
Faktor 135 Byte
Mehr lesbar und benannt:
[ x ] dip
undx swap
sind äquivalent in Stapeleffekt aber die erste ist kürzer , wenn nur verschachtelt:[ [ [ x ] dip ] dip ] dip
.quelle
Python 2,
213211194 BytesProbieren Sie es online
Sachen, an denen ich gerade arbeite:
(i=="OR")
or x[0].lower()+x[1]in c
Aktualisieren:
s=not r
mits=r^1
quelle
Ruby, 164 Bytes
Verwendet eine Lauflängencodierung, daher ist die magische Zeichenfolge 50 Byte lang, eine pro Status. Um dies zu erstellen, war es zunächst erforderlich, die Statuscodes in alphabetischer Reihenfolge des Statuscodes anstelle des Statusnamens einzugeben. Leider werden 7 Bytes benötigt, um die base36-Darstellung
j
von einem Kleinbuchstaben-Statuscode in einen Großbuchstaben-Statuscode umzuwandeln.Ungolfed im Testprogramm
quelle