Apakah saya seorang insinyur?

42

Baru-baru ini, seorang insinyur listrik yang mempelajari penentuan waktu lampu lalu lintas didenda $ 500 oleh negara bagian Oregon karena menyebut dirinya seorang insinyur.

Diberikan string 2 huruf sebagai input, mewakili negara bagian AS, keluaran:

  • I am not an engineerjika negara bagian Oregon ( OR)
  • I am an engineer jika negara bagian adalah negara bagian AS lainnya
  • What is an engineer? diberi input lain

Output mungkin tidak mengandung terkemuka spasi, tetapi mungkin berisi sebanyak Trailing spasi yang Anda inginkan.

Anda dapat berasumsi bahwa input akan selalu berupa 2 huruf besar.

Berikut adalah daftar semua 50 singkatan negara bagian AS:

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

Mencetak gol

Ini adalah , sehingga byte paling sedikit di setiap bahasa menang!

Skidsdev
sumber
Bisakah saya memiliki ruang tambahan di output?
Business Cat
@BusinessCat ya, akan memperbarui spek untuk mengatakan bahwa
Skidsdev
4
Catatan: Jika Anda menyatukan seluruh string menjadi satu, Anda mendapatkan "... OKOR PARIS CSDTN ..." ;-)
Mateen Ulhaq
Mats Järlström juga tidak akan diizinkan tampil sebagai insinyur di Texas.
Ben Voigt

Jawaban:

17

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

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?";

Cobalah online!

Disimpan 2 byte dengan menambahkan spasi sebelum ankeb

-69 (huehue) -72 bytes berkat TheLethalCoder

-15 byte berkat string status genius TotallyHuman

-38 byte karena lebih banyak kompresi string

Tidak Disatukan:

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}?";
        }
    }
}
Skidsdev
sumber
Gunakan ..."+balih-alih string yang diinterpolasi, ubah if..else if...elsemenjadi return s=="ATAU"? ....: System.Arr ... `mis. Gunakan ternary. Gunakan u.Containssebagai ganti Array.Exists. Saya pikir jika Anda menggunakan spasi alih-alih koma maka .Split()tanpa params akan berhasil.
TheLethalCoder
mendeklarasikan b dan u di baris yang sama dan meskipun Anda harus menggunakan string tipe eksplisit masih harus menyelamatkan Anda byte
LiefdeWen
@StefanDelport uadalah array bukan string. Namun, Anda dapat menyimpan byte dengan menetapkan usebagai string dan menggunakannya .Contains.
TheLethalCoder
240 byte: 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}?";};. Rasanya saya telah menghapus semua spasi putih yang relevan. (Belum diuji)
TheLethalCoder
1
Anda dapat menggunakan ini dengan mendefinisikan "seorang insinyur" sebagai variabel terpisah untuk menghemat beberapa byte.
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

Arnauld
sumber
3
Gagal misalnya LA: /
Christoph
@Christoph Harus baik-baik saja sekarang. Terima kasih telah melaporkan ini!
Arnauld
Mengira itu hilang ATAU untuk saat ini - konyol!
Chas Brown
Gunakan codegolf.stackexchange.com/a/124164/76323 untuk mengoptimalkan
l4m2
8

C, 215 208 190 byte

Terima kasih pada 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"?"

Menggunakan "string genus" @ totallyhuman.

Bagaimana itu bekerja:

  • "string"zsecara otomatis digabungkan "string"dengan z( " an engineer"). Ya, C melakukan itu.
  • !strcmp(s,"OR") membandingkan string dengan "ATAU".
  • ?"I am not"zmengembalikan "Saya bukan seorang insinyur" jika benar. Jika tidak...
  • :strstr(...,s) memeriksa apakah string jenius @ totallyhuman berisi string yang disediakan.
  • ?"I am"z mengembalikan "Saya seorang insinyur" jika demikian, dan ...
  • :"What is"z"?")mengembalikan "Apa itu insinyur?" jika tidak.

Cobalah online!

MD XF
sumber
1
206 byte:#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 Itu tidak akan bekerja untuk "Apa itu insinyur?" Tapi saya membuatnya bekerja dalam 209 byte. Terima kasih!
MD XF
Anda dapat mengembalikan string alih-alih mencetaknya
l4m2
@ l4m2 Melakukan sesuatu yang serupa.
MD XF
6

Python 2 , 228 168 byte

lambda s:('What is%s?','I am'+' not'*(s=='OR')+'%s')[s in'MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH ORIA UT WVT WIL WY']%' an engineer'

Cobalah online!

Felipe Nardi Batista
sumber
2
Pengkodean negara sangat lucu.
Ramon Snir
5

Python 2 , 192 186 182 178 176 bytes

Mungkin bisa mengompres string negara lebih.

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

Cobalah online!

benar-benar manusiawi
sumber
2
Anda hanya menggunakan udi if s in udapat Anda perhatikan menggunakannya secara langsung bukannya menyatakan itu?
TheLethalCoder
1
@totallyhuman kompresi string itu sangat luar biasa, bagus!
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 WYadalah yang terkecil yang bisa saya buat
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
Aduh, maaf aku butuh waktu lama. Sepertinya saya telah kehilangan karena menyalin string itu tidak membuat jawaban saya lebih baik daripada yang menggunakannya. Tolong berhentilah memilih ini dan hapus jawaban yang lebih baik lainnya.
totallyhuman
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")

Cobalah online!

Saya minta maaf karena menggunakan kembali string terkompresi: Saya tidak dapat menemukan sesuatu yang lebih baik sendiri ... :(

Olivier Grégoire
sumber
4

05AB1E , 104 103 101 byte

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

Cobalah online!

Versi lama 104 byte jika lebih mudah ditingkatkan.

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

Tidak senang dengan kompresi atau kasus khusus untuk ?.

Emigna
sumber
OK apa ini? Apakah Anda hanya memesan ulang negara atau sesuatu?
Erik the Outgolfer
@EriktheOutgolfer: Versi 104 byte hanyalah kompresi angka yang sesuai dengan posisi karakter dalam alfabet (A=1,C=3 ...). Versi 103 byte melakukan hal yang sama untuk beberapa negara bagian dan menggabungkan beberapa negara bagian yang berakhir dengan huruf yang sama yang dimulai dengan negara baru. Saya yakin ini masih bisa diperbaiki dan saya akan menambahkan penjelasan yang lebih baik ketika saya telah golf lebih.
Emigna
1
Jawaban bagus! Saya suka .•~Zµ∞/'—¶[@øl•Œ2ùAnda telah menggunakan untuk beberapa negara bagian, bukan hanya menekan semua negara bagian dan melakukan . Dan pendekatan yang bagus secara keseluruhan. (Senang saya melihat jawaban Anda sebelum mencoba sesuatu sendiri, karena pasti tidak akan sesingkat ..)
Kevin Cruijssen
4

F # , 222 byte

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

Cobalah online!

Diperluas:

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

Dengan status dua huruf v yang diteruskan ke fungsi f , buat tupel (a, b) yang mewakili kepala dan ekor kalimat "insinyur".

Jangan ragu menggunakan "string state terkompresi" secara bebas; ini satu byte lebih pendek dari MINCALA ...

Vern DeHaven
sumber
4

R , 109 96 byte

function(x)sub("#"," an engineer",c("I am not#","I am#","What is#?"))[2-x%in%state.abb+!x=="OR"]

Cobalah online!

13 byte berkat J. Aduh - melalui penggunaan regex dan indeksasi.

JayCe
sumber
1
97 bytes
J.Doe
1
@ J.Apakah subjauh lebih baik, terima kasih!
JayCe
96 bytes 😉
J.Doe
@ J. Tentu saja!
JayCe
3

Japt , 136 135 131 129 128 byte

Lebih banyak penghematan tersedia dengan bereksperimen dengan urutan singkatan negara - saya akan kembali ke sana sebentar lagi.

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

Cobalah online


Penjelasan

  • Kami mengambil string terkompresi dari singkatan yang lebih kecil, mendekompresnya, dan membaginya menjadi array 2 string karakter menggunakan òmetode ini.
  • Kami kemudian menggunakan ømetode untuk melihat apakah array berisi Uv, yang merupakan string input yang dikonversi menjadi huruf kecil.
  • Jika demikian, kami membangun string keluaran kami, dimulai dengan "I am "
  • Memeriksa apakah string input ¥(sama dengan) "OR"memungkinkan kita untuk menambahkan salah satu "not "atau variabel string kosong P.
  • Dan kemudian kita mendekompres dan menambahkan string terkompresi "an engineer".
  • Jika input tidak ditemukan dalam array, maka kami output dekompresi string terkompresi "What is an engineer?".
Shaggy
sumber
3

Python 3 , 180 179 178 byte

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+"?"

Cobalah online!

int6h
sumber
Yap, benar: Cobalah online!
int6h
166 byte . Saya yakin string juga dapat diperketat liitle lebih banyak dengan menggunakan kembali negara
Jo King
Terima kasih @ JoKing. Itu menyerupai jawaban Python 2 terlalu banyak pada titik ini IMO :). Saya sudah mencoba untuk mengompresi string, tetapi yang terpendek yang saya dapatkan adalah 92 simbol. Saya telah menulis skrip pendek untuk melakukan itu, tetapi hanya dapat memotongnya menjadi 94 karakter, dan tidak kompres secara optimal. Saya juga berpikir bahwa dalam tantangan khusus ini string ajaib itu sendiri tidak boleh dimasukkan dalam jumlah byte.
int6h
2

CJam , 143 byte

"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"\

Cobalah online! atau sebagai test suite

Penjelasan

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

Karena Oregon ( OR) adalah pada awal string, menemukan signum dari indeks input yang akan menjadi -1 jika tidak ditemukan, 0 jika OR, 1 jika ada negara lain. String mana yang akan dicetak dapat diputuskan oleh itu.

Kucing Bisnis
sumber
2

PHP, 188 Bytes

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

Cobalah online!

Jörg Hülsermann
sumber
in_array(...)untuk strpos(_AKALARAZCACOCTDEFLGAHIIAIDILINKSKYLAMAMDMEMIMNMOMSMTNCNDNENHNJNMNVNYOHOKPARISCSDTNTXUTVAVTWAWIWVWY,$argn)&1.
Christoph
@Christoph bekerja bukan untuk Input misalnya LA
Jörg Hülsermann
Hm benar: / mungkin kita bisa menyusun ulang string sedikit .. Saya akan coba. Juga membatalkan jawaban js btw.
Christoph
_NMMNINTNRIHIMIWISCNCCTMTUTVTWVNVFLILCAALGAIAMAPAVAWACOLAMOAKARKSMSNHOHOKORAZDEIDKYMEMDNENJNYNDSDTXWYbekerja
Christoph
@Christoph Atau pesanan saya juga berfungsi.
Jörg Hülsermann
2

C #, 178 byte

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");

Jalankan di C # Pad

Golf berdasarkan solusi Mayube ; baru di sini, jadi saya tidak punya cukup perwakilan untuk berkomentar.

Arthur Rump
sumber
Mungkin ingin mengedit dalam tautan ke solusinya :) Jika Anda mengklik bagikan pada solusinya, itu memberi Anda tautan langsung ke sana.
Stephen
@StephenS Terima kasih atas tipnya!
Arthur Rump
2

Haskell , 220 214 210 209 byte

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++"?"

Cobalah online!

bartavelle
sumber
dinyatakan = Benar, 1<2bahkan lebih pendek
BlackCap
Facepalm , terima kasih!
bartavelle
Anda telah memasukkan ORstring panjang dalam definisi kedua i
BlackCap
Saya mencuri string panjang dari jawaban lain. ATAU bukan bagian dari itu?
bartavelle
1
Tidak, tidak lagi :)
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?'?':'')}
martin
sumber
1
Murni mengoptimalkans=>(!(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 bagus, itu mengalahkan jawaban saya.
martin
1

AWK, 189 byte

/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?"}

Jika input cocok dengan regex yang berisi semua singkatan negara, cetak "Saya seorang insinyur" dengan 'tidak' dimasukkan di tengah jika negara adalah Oregon, kemudian keluar.

Jika input tidak cocok dengan regex, itu tidak boleh singkatan negara bagian AS.

Arc676
sumber
1

Python 3, 238 byte

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*'?'

Penjelasan

Tidak ada teknik kompresi yang digunakan.

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 * '?'
Mateen Ulhaq
sumber
Ini Oregon, bukan Ohio.
L3viathan
1
@ L3viathan Tidak yakin bagaimana saya mengacaukannya setelah melihat Oregon di mana-mana karena Life is Aneh ... ¯ \ _ (ツ) _ / ¯
Mateen Ulhaq
1

Java, 173 byte

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"
JWH
sumber
3
Selamat datang di PPCG! Semua entri harus merupakan program atau fungsi lengkap; Saya percaya Anda dapat mengubah ini menjadi ekspresi lambda yang valid (dan karena itu berfungsi) dengan menambahkan s->ke awal.
ETHproduk
1

Stax , 100 byte

Bahasa ini mengatasi tantangan. Tetapi penulis (saya) tidak melihatnya sampai sekarang.

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

Jalankan dan debug itu

rekursif
sumber
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)]

Bergabung dengan banyak yang baik

Atau 152 byte pada pengkodean ISO

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,'/')))
l4m2
sumber
Dimungkinkan untuk mengatur ulang string menggunakan btoa untuk mengembang
l4m2
1

C (gcc) , 0 + 176 byte

-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

Cobalah online!

menerjemahkan murni

l4m2
sumber
1

Powershell, 175 byte

(('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]

Skrip uji:

$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"
}

Keluaran:

True: I am not an engineer
True: I am an engineer
True: I am an engineer
True: What is an engineer?
mazzy
sumber
0

Python 3 , 236 182 181 byte

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'

Cobalah online!

TIO berisi kasus uji untuk semua negara.
-54 byte berkat kompresi string

Notts90
sumber
Anda dapat menggunakan kompresi string dari jawaban lain untuk menghemat byte
TheLethalCoder
1
MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH ORIA UT WVT WIL WYadalah kompresi yang lebih baik
Skidsdev
0

q / kdb +, 174 byte

Larutan:

{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]}

Penjelasan:

  {
  // 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]
  }

Catatan:

Menggunakan string 'terkompresi' dari jawaban lain, berjuang untuk menemukan cara untuk membawanya menjadi satu baris untuk menghindari penugasan avariabel (namun tetap menambahkan ?ketika input bukan keadaan.

streetster
sumber
0

Retina , 175 byte

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

Cobalah online! Semoga saya telah mengambil daftar negara terbaik. Penjelasan:

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

Mulailah membangun hasilnya. Juga, masukkan daftar status untuk digunakan pada tahap berikutnya.

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

Jika itu salah satu dari 49 negara, hapus negara dan daftar.

OR~.*
not ~

Jika itu Oregon, ganti negara dengan not, dan hapus daftar.

I am ..~.*
What is ~?

Jika ada yang lain, ganti semuanya dengan output lainnya.

~
an engineer

Tambahkan kata ini di akhir untuk menghindari pengulangan.

Neil
sumber
0

Crystal, 232 207 205 Bytes

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

Cobalah online . (sedikit dimodifikasi karena masalah ARGV)

Domii
sumber
0

Faktor, 135 byte

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

Lebih mudah dibaca, dan dinamai:

: 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 ] dipdan x swapsetara berlaku tumpukan tetapi yang pertama lebih pendek hanya ketika bersarang: [ [ [ x ] dip ] dip ] dip.

kucing
sumber
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

Cobalah secara Online

Hal-hal yang saya kerjakan untuk memperpendek:

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

Memperbarui:

  • Disimpan 2 Bytes dengan mengganti s=not rdengans=r^1
  • Header dan footer kode terpisah
Raffi
sumber
0

Ruby, 164 byte

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

Menggunakan pengkodean run length, oleh karena itu string ajaib panjangnya 50 byte, satu per negara. Untuk membangun ini, pertama-tama perlu menempatkan kode negara dalam urutan abjad kode negara, daripada nama negara. Sayangnya diperlukan 7 byte untuk mengubah representasi base36 dari jdari statecode huruf kecil menjadi statecode huruf besar.

Tidak terkurung dalam program uji

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]]}
Level River St
sumber