Bin ich ingenieur


42

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 engineerwenn der Staat Oregon ist ( OR)
  • I am an engineer wenn der Staat ein anderer US-Bundesstaat ist
  • What 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 , so dass nur wenige Bytes in jeder Sprache gewinnen!


Kann ich ein Leerzeichen in der Ausgabe haben?
Business Cat

@ BusinessCat ja, wird die Spezifikation aktualisieren, um zu sagen, dass
Skidsdev

4
Randnotiz: Wenn Sie die gesamte Zeichenfolge zusammenfügen, erhalten Sie "... OKOR PARIS CSDTN ..." ;-)
Mateen Ulhaq

Mats Järlström durfte sich auch in Texas nicht als Ingenieur präsentieren.
Ben Voigt

Antworten:


17

C #, 311 309 240 237 222 195 184 183 Bytes

s=>s=="OR"?"I am not an engineer":"MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH RIA UT WVT WIL WY".Contains(s)?"I am an engineer":"What is an engineer?";

Probieren Sie es online!

Gespeichert 2 Bytes durch den Raum hinzufügen , bevor anzub

-69 (Huehue) -72 Bytes dank TheLethalCoder

-15 Bytes dank TotallyHumans genialem Zustandsstring

-38 Bytes für mehr String-Komprimierung

Ungolfed:

public static string a(string s)
{
    var b = " an engineer";
    if (s == "OR")
    {
        return "I am not" + b;
    }
    else
    {
        if ("MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH RIA UT WVT WIL WY".Contains(s))
        {
            return "I am" + b;
        }
        else
        {
            return $"What is{b}?";
        }
    }
}

Verwenden Sie ..."+banstelle von interpoliert Strings, ändern if..else if...elsezu return s==„ODER“ ....:? System.Arr ... `dh ein ternäres verwenden. Verwenden Sie u.Containsanstelle von Array.Exists. Ich denke, wenn Sie Leerzeichen anstelle von Kommas verwenden, wird es .Split()ohne Parameter funktionieren.
TheLethalCoder

deklarieren Sie b und u in derselben Zeile, und obwohl Sie explizite Zeichenfolgen verwenden müssen, sollten Sie trotzdem ein Byte speichern
LiefdeWen

@StefanDelport uist ein Array ohne Zeichenfolge. Sie können jedoch Bytes speichern, indem Sie sie uals Zeichenfolge festlegen und verwenden .Contains.
TheLethalCoder

240 Bytes 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)
TheLethalCoder

1
Sie können dies tun, indem Sie "Ingenieur" als separate Variable definieren, um einige Bytes zu sparen.
OldBunny2800

11

JavaScript (ES6), 182 Byte

s=>['I am'+(x=' an engineer'),`What is${x}?`,'I am not'+x][s=='OR'?2:'MNNMLATNAKALARAZCACOCTDEFLGAHIIAIDILINKSKYMAMDMEMIMOMSMTNCNDNENHNJNVNYOHOKPARISCSDTXUTVAVTWAWIWVWY'.search(s)&1]

Demo


3
Scheitert zB an LA: /
Christoph

@Christoph Sollte jetzt OK sein. Vielen Dank für den Hinweis!
Arnauld

Dachte, es fehlt oder für einen Moment - albern!
Chas Brown

Verwenden Sie codegolf.stackexchange.com/a/124164/76323 , um zu optimieren
l4m2

8

C 215, 208, 190 Bytes

-7 danke an Cool Guy

#define z" an engineer"
#define f(s)!strcmp(s,"OR")?"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)?"I am"z:"What is"z"?"

Benutzt @ totallyhumans "Gattungszeichenfolge".

Wie es funktioniert:

  • "string"zVerkettet sich automatisch "string"mit z( " an engineer"). Ja, C macht das.
  • !strcmp(s,"OR") vergleicht den String mit "OR".
  • ?"I am not"zGibt "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!


1
206 Bytes:#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);}
Spikatrix

@CoolGuy Das funktioniert nicht für "Was ist ein Ingenieur?" Aber ich habe es in 209 Bytes zum Laufen gebracht. Vielen Dank!
MD XF

Sie können die Zeichenfolge zurückgeben, anstatt sie zu drucken
l4m2

@ l4m2 Hab was ähnliches gemacht.
MD XF


5

Python 2 , 192 186 182 178 176 Bytes

Könnte wahrscheinlich die Statuszeichenfolge mehr komprimieren.

lambda s,e=' an engineer':'I am'+' not'*(s=='OR')+e if s in'MINCALAZ SCT FL GA WIAKSD ME MD MA MNMS MOKY MTNE NVTX NH NJ NY ND COHIDE OR PARIL UT VA WA WV WY'else'What is%s?'%e

Probieren Sie es online!


2
Sie verwenden es nur uin. if s in uKönnen Sie es direkt verwenden, anstatt es zu deklarieren?
TheLethalCoder

1
@totallyhuman, die Saitenkomprimierung ist ziemlich erstaunlich, schön!
Skidsdev

2
@totallyhuman 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 WYist die kleinste, die ich machen kann
Skidsdev

2
'MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH ORIA UT WVT WIL WY'
Felipe Nardi Batista

2
Tut mir leid, dass ich so lange gebraucht habe. Scheint, als hätte ich verloren, weil das Kopieren dieser Zeichenfolge meine Antwort nicht besser macht als die, die sie verwendet. Bitte hören Sie auf, dies zu bewerten, und stimmen Sie der anderen besseren Antwort zu.
Totalhuman

5

Java (JDK 10) , 184 Byte

s->s.format(s.equals("OR")?"I am not%s":"MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH RIA UT WVT WIL WY".contains(s)?"I am%s":"What is%s?"," an engineer")

Probieren Sie es online!

Ich entschuldige mich für die Wiederverwendung der komprimierten Zeichenfolge: Ich konnte nichts Besseres finden ... :(


4

05AB1E , 104 103 101 Bytes

„€À€ˆ„I€Ü‚.•~Zµ∞/'—¶[@øl•Œ2ù.•9₆\|&׃Ω#àöF},cΓ páe;ð²∍₆jÌn#dÅ?DvĆ8A•2ôìuIå©è¹„ORQi'€–}„€¤©É)ðýª'?®_×J

Probieren Sie es online!

Alte 104-Byte-Version, falls dies leichter zu verbessern ist.

„€À€ˆ„I€Ü‚.•ÂkXñ…ΓVt€Ïè∍‡Λi„2¶’að=–½6™oÑþÁāõgO·ð~
λ†₃›;â&ÄFv¾‡1~ǝQa«;cS•u2ôIå©è¹„ORQi'€–}„€¤©É)ðýª'?®_×J

Nicht zufrieden mit der Komprimierung oder dem Sonderfall für ?.


Ok was ist das Hast du gerade die Staaten nachbestellt oder so?
Erik der Outgolfer

@EriktheOutgolfer: Die 104-Byte-Version ist nur eine Komprimierung der Zahlen, die den Zeichenpositionen im Alphabet entsprechen (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.
Emigna

1
Gute Antwort! Ich mag das, was .•~Zµ∞/'—¶[@øl•Œ2ùSie für einige Zustände verwendet haben, anstatt nur alle Zustände zu komprimieren und das zu tun . 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.)
Kevin Cruijssen

4

F # 222 Bytes

let f v=let (a,b)=if ("WALAKSCARINMNVTNCTX NHIDE MOHIL COKY MSD PAZ WIA WVA FL GA MA MD ME MI MT NE ND NJ NY UT WY").Contains v then ("I am",".") elif "OR"=v then ("I am not",".") else ("What is","?") in a+" an engineer"+b

Probieren Sie es online!

Erweitert:

let f v =
    let (a, b) =
        if ("WALAKSCARINMNVTNCTX NHIDE MOHIL COKY MSD PAZ WIA WVA FL GA MA MD ME MI MT NE ND NJ NY UT WY").Contains v then ("I am", ".")
        elif "OR" = v then ("I am not", ".")
        else ("What is", "?")
    a + " an engineer" + b

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 ...



3

Japt , 136 135 131 129 128 Bytes

Weitere Einsparungen können durch Experimentieren mit der Reihenfolge der Staatsabkürzungen erzielt werden. Ich werde gleich darauf zurückkommen.

`mnnmlãGLÏz¯¬ct¸flgaá[9¨kyµmçpCijmsmtnhnvnyn¬kpÂÉcsdk¡x©vavt°±wvwy`ò øUv)?"I am {¥"OR"?"not ":P}"+` à¨\ `:`Wt   à¨\?

Probieren Sie es online aus


Erläuterung

  • Wir nehmen eine komprimierte Zeichenfolge der Abkürzungen in Kleinbuchstaben, dekomprimieren sie und teilen sie mit der òMethode in ein Array von 2 Zeichenfolgen auf .
  • Wir verwenden dann die øMethode, um zu sehen, ob das Array enthält Uv. Dabei handelt es sich um die in Kleinbuchstaben konvertierte Eingabezeichenfolge.
  • In diesem Fall erstellen wir unsere Ausgabezeichenfolge, beginnend mit "I am "
  • Wenn Sie überprüfen, ob die Eingabezeichenfolge ¥(gleich) ist, "OR"können Sie entweder "not "die leere Zeichenfolgenvariable anhängen P.
  • Dann dekomprimieren wir den komprimierten String und hängen ihn an "an engineer".
  • Wenn die Eingabe nicht im Array gefunden wurde, geben wir die Dekomprimierung der komprimierten Zeichenfolge aus "What is an engineer?".

3

Python 3 , 180 179 178 Bytes

def f(s):e=" not"*(s=="OR")+" an engineer";return"I am"+e if s in"PALAKSCAZ CTNMINCOR FL GA MDE ME MND MA MSD MOKY NE NH NJ NY WA OHID UTX MTNVARIA WIL WVT WY"else"What is"+e+"?"

Probieren Sie es online!


Ja, es ist richtig: Probieren Sie es online!
17.

166 Bytes . Ich bin mir sicher, dass die Saite durch die Wiederverwendung von Zuständen auch ein bisschen enger werden kann
Jo King

Vielen Dank @JoKing. Es ähnelt der Python 2-Antwort zu sehr an dieser Stelle IMO :). Ich habe versucht, die Zeichenfolge zu komprimieren, aber das kürzeste, das ich bekommen konnte, waren 92 Symbole. Ich habe ein kurzes Skript dafür geschrieben, aber es kann nur auf 94 Zeichen reduziert werden, und es wird nicht optimal komprimiert. Ich denke auch, dass in dieser besonderen Herausforderung die magische Zeichenfolge selbst nicht in die Byteanzahl einbezogen werden sollte.
18.

2

CJam , 143 Bytes

"ORIA MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH UT WVT WIL WY"q#g"I am not 
I am 
What is?"N/=)" an engineer"\

Probieren Sie es online! oder als Testsuite

Erläuterung

"ORIA...."       e# Push a string in which every state is a substring, but no non-state is
                 e# a substring.
q                e# Read the input.
#                e# Find the index of the input in the string. (-1 if not found)
g                e# Signum of the index: -1 for negative, 0 for 0, 1 for positive.
"I am.... "      e# Push this string. Note the trailing space on the first two lines of it.
N/               e# Split it on newlines.
=                e# Get the string at index given by the signum.
)                e# Pull out the last character.
" an engineer"\  e# Push " an engineer" and bring the other character to the TOS.
                 e# Implicit output.

Da Oregon ( OR) am Anfang der Zeichenfolge steht, ist -1, wenn es nicht gefunden wird, 0, wenn es OR1 ist, wenn es sich um einen anderen Zustand handelt. Welcher String gedruckt werden soll, kann dadurch entschieden werden.


2

PHP, 188 Bytes

$e=" an engineer";echo strpos(_TNNMLAALAKAZARCACOCTDEFLGAHIIDILINIAKSKYMEMDMAMIMNMSMOMTNENVNHNJNYNCNDOHOKORPARISCSDTXUTVTVAWAWVWIWY,$argn)&1?"I am".($argn!="OR"?"":" not").$e:"What is$e?";

Probieren Sie es online!


in_array(...)zu strpos(_AKALARAZCACOCTDEFLGAHIIAIDILINKSKYLAMAMDMEMIMNMOMSMTNCNDNENHNJNMNVNYOHOKPARISCSDTNTXUTVAVTWAWIWVWY,$argn)&1.
Christoph

@Christoph funktioniert nicht für einen Input zum Beispiel von LA
Jörg Hülsermann

Hm richtig: / Vielleicht können wir die Saite ein bisschen umordnen. Ich werde es versuchen. Ungültig macht auch die js Antwort übrigens.
Christoph

_NMMNINTNRIHIMIWISCNCCTMTUTVTWVNVFLILCAALGAIAMAPAVAWACOLAMOAKARKSMSNHOHOKORAZDEIDKYMEMDNENJNYNDSDTXWYArbeiten
Christoph

@Christoph Oder meine Bestellung funktioniert auch.
Jörg Hülsermann

2

C #, 178 Bytes

s=>(s=="OR"?"I am notx":"MINCALA MSCTNMNVAKY WAZ PARIA FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH UT WVT WIL WY".Contains(s)?"I amx":"What isx?").Replace("x"," an engineer");

Führen Sie in C # Pad

Golf basierend auf Mayubes Lösung ; Neu hier, daher habe ich nicht genug Repräsentanten, um Kommentare abzugeben.


Möglicherweise möchten Sie einen Link zu seiner Lösung bearbeiten.
Stephen

@StephenS Danke für den Tipp!
Arthur Rump

2

Haskell , 220 214 210 209 Bytes

s(a:b:c)=[a,b]:s(b:c)
s _=[]
a="I am "
e="an engineer "
i"OR"=a++"not "++e
i x|x`elem`s"MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH RIA UT WVT WIL WY"=a++e
i _="What is "++e++"?"

Probieren Sie es online!


sonst = True, 1<2ist noch kürzer
BlackCap

Facepalm , danke!
Bartavelle

Sie haben ORdie lange Zeichenfolge in der zweiten Definition von i
BlackCap

Ich habe den langen Faden aus den anderen Antworten gestohlen. ODER ist es nicht dabei?
Bartavelle

1
Nein, nicht mehr :)
BlackCap

1

Javascript 204

s=>{h=/^(A[LKZR]|C[AOT]|DE|FL|[GPLV]A|[HR]I|I[DLNA]|K[SY]|M[EDAINSOT]|N[EVHJMYCD]|O[HK]|S[CD]|T[NX]|[VU]T|W[AVIY]|(OR))$/.exec(s);return(!h?"What is ":"I am "+(h[2]?"not ":""))+"an engineer"+(!h?'?':'')}

1
Reine Optimierungs=>(!(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]]
l4m2

@ l4m2 schön, das hat meine antwort geschlagen.
Martin

1

AWK, 189 Bytes

/A[LKZR]|C[AOT]|DE|FL|[GPV]A|HI|I[DLNA]|KS|KY|LA|M[EDAINSOT]|N[EVHJMYCD]|O[HKR]|RI|SC|SD|TN|TX|UT|VT|W[AVIY]/{print"I am "($0~OR?"not ":"")"an engineer";exit}
{print"What is an engineer?"}

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.


1

Python 3, 238 Bytes

def f(x):s=x in('ALAKAZARCACOCTDEFLGAHIIDILINIAKSKYLAMEMDMAMIMNMSMOMTNENVNHNJNMNYNCNDOHOKORPARISCSDTNTXUTVTVAWAWVWIWY'[i:i+2]for i in range(0,100,2));o=x=='OR';q=(1-o)*(1-s);return q*'What is'+(1-q)*('I am'+o*' not')+' an engineer'+q*'?'

Erläuterung

Keine Komprimierungstechniken verwendet.

def f(x):
    # Check if State
    s = x in ('ALAK...WIWY'[i:i+2]
              for i in range(0, 100, 2))

    # Check if Oregon
    o = x == 'OR'

    # Check if neither Oregon nor State
    q = (1-o) * (1-s)

    # Construct output string
    return q * 'What is' + \
        (1-q) * ('I am' + o * ' not') + \
        ' an engineer' + \
        q * '?'

Es ist Oregon, nicht Ohio.
L3viathan

1
@ L3viathan nicht sicher , wie ich Schlamassel , dass bis nach Oregon überall aufgrund Sehen Das Leben ist seltsam ... ¯ \ _ (ツ) _ / ¯
Mateen Ulhaq

1

Java, 173 Bytes

s->(!"MINCALARIA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH UT WVT WIL WY OR".contains(s)?"What is":"I am"+(s.equals("OR")?" not":""))+" an engineer"

3
Willkommen bei PPCG! Alle Einträge müssen ein vollständiges Programm oder eine Funktion sein. Ich glaube, Sie können dies in einen gültigen Lambda-Ausdruck (und damit in eine Funktion) umwandeln s->, indem Sie den Anfang ergänzen .
ETHproductions

1

Stax , 100 Bytes

Diese Sprache datiert die Herausforderung nach. Aber der Autor (ich) hat es bis jetzt nicht gesehen.

éë&W≈#W¬π█▐╜╣╟◙√a☻∞ZrπU♫ÿô♠▌⌠Që≡AûpI⌡ÄNA綵↑╝╣òøΩ.¬É]╩Æ↓d∩é¡2ŲeB┼¼▬5∟┤sW♠♂↑q▐WMï╝|Ñ↑╫+3¼↔îûvlLΩ∟┬oë

Führen Sie es aus und debuggen Sie es


1

JavaScript ES6, 175 171 Bytes

x=>[`What is${e=" an engineer"}?`,`I am${x=="OR"?" not"+e:e}`][+!!'MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH ORIA UT WVT WIL WY'.match(x)]

Viel Gutes beigetreten

Oder 152 Bytes bei ISO-Codierung

Generator:

'x=>[`What is${e=" an engineer"}?`,`I am${x=="OR"?" not"+e:e}`][+!!btoa`*`.match(x)]'.replace('*',atob('MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH ORIA UT WVT WIL WY '.replace(/ /g,'/')))

Möglicherweise können Sie die Zeichenfolge mit btoa neu anordnen, um sie zu erweitern
l4m2

1

C (gcc) , 0 + 176 Bytes

-Dz"=an engineer" -Df(s)*s-79|1[s]-82?strstr("MINCALA=MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH RIA UT WVT WIL WY",s)?"I am"z:"What is"z"?":"I am not"z

Probieren Sie es online!

rein übersetzen


1

Powershell, 175 Bytes

(('I am'+' not'*!($i='ORIA MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH UT WVT WIL WY'.IndexOf($args))+($e=' an engineer')),"What is$e`?")[!++$i]

Testskript:

$f = {

$e=' an engineer'
$i='ORIA MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH UT WVT WIL WY'.IndexOf($args)
(('I am'+' not'*!$i+$e),"What is$e`?")[!++$i]

# Important! OR is a first state in the modified @totallyhuman's genuis string

}

@(
    ,('OR', 'I am not an engineer')
    ,('AL', 'I am an engineer')
    ,('IL', 'I am an engineer')
    ,('ZZ', 'What is an engineer?')
) | % {
    $s,$e = $_
    $r = &$f $s
    "$($r-eq$e): $r"
}

Ausgabe:

True: I am not an engineer
True: I am an engineer
True: I am an engineer
True: What is an engineer?

0

Python 3 , 236 182 181 Bytes

lambda s:'I am not'+e if s=='OR'else'I am'+e if s in'MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH RIA UT WVT WIL WY'else'What is%s?'%e
e=' an engineer'

Probieren Sie es online!

TIO enthält Testfälle für alle Zustände.
-54 Bytes dank der String-Komprimierung


Sie können die String-Komprimierung aus den anderen Antworten verwenden, um Bytes zu speichern
TheLethalCoder

1
MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH ORIA UT WVT WIL WYist eine bessere Komprimierung
Skidsdev

0

q / kdb + 174 Bytes

Lösung:

{a:" an engineer?";$[(#:)l:ss["ORIA MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH UT WVT WIL WY";x];-1_"I am",$[l~(),0;" not";""],a;"What is",a]}

Erläuterung:

  {
  // save string into variable a
  a:" an engineer?";
  // try to find the input x in the condensed string, save location in variable l, $ is a if/else
  $[(#:)l:ss["ORIA MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH UT WVT WIL WY";x];
  // found a match, check if it was at index 0 ('OR') and inject " not" if so, drop the '?' off the end
  -1_"I am",$[l~(),0;" not";""],a;
  // otherwise return 'What is an engineer?'
  "What is",a]
  }

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 aVariablen zu vermeiden ?.


0

Netzhaut , 175 Bytes

..
I am $&~MINCALAZ SCT FL GA WIAKSD ME MD MA MNMS MOKY MTNE NVTX NH NJ NY ND COHIDE PARIL UT VA WA WV WY
(..)~.*\1.*
~
OR~.*
not ~
I am ..~.*
What is ~?
~
an engineer

Probieren Sie es online! Hoffentlich habe ich die Liste der besten Bundesstaaten übernommen. Erläuterung:

..
I am $&~MINCALAZ SCT FL GA WIAKSD ME MD MA MNMS MOKY MTNE NVTX NH NJ NY ND COHIDE PARIL UT VA WA WV WY

Baue das Ergebnis auf. Fügen Sie außerdem die Statusliste ein, die für die nächste Stufe verwendet werden soll.

(..)~.*\1.*
~

Wenn es sich um einen der 49 Status handelt, löschen Sie den Status und die Liste.

OR~.*
not ~

Wenn es sich um Oregon handelt, ersetzen Sie den Status durch notund löschen Sie die Liste.

I am ..~.*
What is ~?

Wenn es etwas anderes ist, ersetzen Sie alles durch den anderen Ausgang.

~
an engineer

Fügen Sie dieses Wort als letztes hinzu, um Wiederholungen zu vermeiden.


0

Crystal, 232 207 205 Bytes

i="ORALAKAZARCACOCTDEFLGAHIIDILINIAKSKYLAMEMDMAMIMNMSMOMTNENVNHNJNMNYNCNDOHOKPARISCSDTNTXUTVTVAWAWVWIWY".split(/(..)/).index ARGV[0];p (i ?"I am ": "What is ")+(i==1 ?"not ": "")+"an engineer"+(i ?"": "?")

Probieren Sie es online aus . (geringfügig geändert aufgrund einer Ausgabe von ARGV)


0

Faktor 135 Byte

USE: usa-cities [ " an engineer"swap [ "I am"swap string>state OR = 
[ " not"append ] when ""] [ 2drop "What is" "?"] recover surround ]

Mehr lesbar und benannt:

: engineer? ( state-name -- str ) 
  [ " an engineer" ] dip ! put this below the input on the stack 
  [ 
    [ "I am" ] dip       ! put this below the input too but above the other 
    string>state OR =    ! string>state throws on a non-state name 
    [ " not" append ] when ""  ! otherwise and if it is OR, append this 
  ] 
  [ 2drop "What is" "?" ] recover surround ; ! catch error, surround string

[ x ] dipund x swapsind äquivalent in Stapeleffekt aber die erste ist kürzer , wenn nur verschachtelt: [ [ [ x ] dip ] dip ] dip.


0

Python 2, 213 211 194 Bytes

c="uTXnMSCORIDEwVAKYmTNHILfLAZpALmNEmOKSDwINCARmEwAnJnDmAmIAgAwYcTnVToHnYmD"
r=(lambda x:x in c or x[0].lower()+x[1]in c)(i)^1
u="What is "*r+("I am "+"not "*(i=="OR"))*(r^1)+"an engineer"+"?"*r

Probieren Sie es online

Sachen, an denen ich gerade arbeite:

  • (i=="OR")
  • or x[0].lower()+x[1]in c

Aktualisieren:

  • Gespeichert 2 Bytes durch den Austausch s=not rmits=r^1
  • Getrennte Kopf- und Fußzeile des Codes

0

Ruby, 164 Bytes

->s{r="What is an engineer?"
j=379
"##(*Q0'7q;N>%*$o(.F%#&'#&#5##%$%+%5%)5r@#P,B353*/%".bytes{|i|s==(j+=i-34).to_s(36).upcase&&r="I am not"[0,i==41?8:4]+r[7,12]}
r}

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 jvon einem Kleinbuchstaben-Statuscode in einen Großbuchstaben-Statuscode umzuwandeln.

Ungolfed im Testprogramm

f=->s{                                                  #s is the input string.
  r="What is an engineer?"                              #Set r to "What is an engineer?"
  j=379                                                 #Set j to one less than 380, which in base36 becomes AK, the first statecode alphabetically
  "##(*Q0'7q;N>%*$o(.F%#&'#&#5##%$%+%5%)5r@#P,B353*/%". #Iterate through the run length encoded string 
  bytes{|i|                                             #(each character represents how far in base 36 each state code is from the previous one)
    s==(j+=i-34).to_s(36).upcase&&                      #take the ascii value of the character and subtract 34 (example #=35-34=1) and add to j. Convert j to base36 to get a state code.
      r="I am not"[0,i==41?8:4]+r[7,12]                 #if the state code matches s, modify r. Take the first 4 characters of "I am not" (first 8 in the case of OR where i==41) 
  }                                                     #and add r[7,12]==" an engineer" (12 characters of the existing value of r, starting at character 7 
r}                                                      #return r

%w{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 XX}.map{|i|p [i,f[i]]}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.