ฉันเป็นวิศวกรหรือไม่


42

เมื่อเร็ว ๆ นี้วิศวกรไฟฟ้ากำลังศึกษากำหนดเวลาสัญญาณไฟจราจรถูกปรับ $ 500 โดยรัฐโอเรกอนสำหรับการอ้างอิงถึงตัวเองในฐานะวิศวกร

รับสายอักขระ 2 ตัวเป็นอินพุตซึ่งแทนสถานะของสหรัฐอเมริกาเอาต์พุต:

  • I am not an engineerถ้ารัฐโอเรกอน ( OR)
  • I am an engineer ถ้ารัฐเป็นรัฐอื่น ๆ ของสหรัฐอเมริกา
  • What is an engineer? ได้รับการป้อนข้อมูลอื่น ๆ

ผลลัพธ์อาจไม่มีช่องว่างนำหน้า แต่อาจมีช่องว่างต่อท้ายมากเท่าที่คุณต้องการ

คุณสามารถสมมติว่าการป้อนข้อมูลจะเป็นตัวอักษรตัวพิมพ์ใหญ่ 2 ตัวเสมอ

นี่คือรายการของตัวย่อทั้งหมด 50 รัฐของสหรัฐอเมริกา:

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

เกณฑ์การให้คะแนน

นี่คือซึ่งมีจำนวนน้อยที่สุดในแต่ละภาษาที่ชนะ!


ฉันสามารถมีช่องว่างต่อท้ายในเอาต์พุตได้หรือไม่
ธุรกิจ Cat

@ BusinessCat ใช่จะอัปเดตสเป็คเพื่อบอกว่า
Skidsdev

4
หมายเหตุด้านข้าง: หากคุณต่อสตริงทั้งหมดเข้าด้วยกันคุณจะได้รับ "... OKOR PARIS CSDTN ... " ;-)
Mateen Ulhaq

Mats Järlströmไม่ได้รับอนุญาตให้แสดงตนเป็นวิศวกรในเท็กซัสเช่นกัน
Ben Voigt

คำตอบ:


17

C #, 311 309 240 237 222 195 184 183 ไบต์

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

ลองออนไลน์!

บันทึก 2 ไบต์โดยการเพิ่มช่องว่างก่อนanถึงb

-69 (huehue) -72 ไบต์ขอบคุณ TheLethalCoder

-15 ไบต์ขอบคุณสตริงอัจฉริยะของ TotallyHuman

-38 ไบต์การบีบอัดสตริงมีค่ามากกว่า

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

ใช้..."+bแทนการสอดแทรกสตริงเปลี่ยนif..else if...elseเป็นreturn s=="OR"? .... : System.Arr ... `ie ใช้แบบไตรภาค ใช้แทนu.Contains Array.Existsฉันคิดว่าถ้าคุณใช้ช่องว่างแทนเครื่องหมายจุลภาคแล้ว.Split()โดยไม่มีพารามิเตอร์จะทำงาน
TheLethalCoder

ประกาศ b และ u ในบรรทัดเดียวกันและแม้ว่าคุณจะต้องใช้สตริงประเภทที่ชัดเจนควรยังช่วยคุณ byte
LiefdeWen

@StefanDelport uเป็นอาร์เรย์ไม่ใช่สตริง อย่างไรก็ตามคุณสามารถบันทึกไบต์โดยการตั้งค่าuเป็นสตริงและใช้.Containsกับมัน
TheLethalCoder

240 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}?";};ไบต์: คิดว่าฉันได้ลบช่องว่างที่เกี่ยวข้องทั้งหมดแล้ว (ยังไม่ได้ทดสอบ)
TheLethalCoder

1
คุณสามารถตีกอล์ฟนี้โดยกำหนด "วิศวกร" เป็นตัวแปรแยกต่างหากเพื่อบันทึกไบต์
OldBunny2800

11

JavaScript (ES6), 182 ไบต์

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

การสาธิต


3
ล้มเหลวสำหรับเช่นLA: /
Christoph

@Christoph ควรจะตกลงตอนนี้ ขอบคุณที่รายงานสิ่งนี้!
Arnauld

คิดว่ามันหายไปหรือเดี๋ยวก่อน!
Chas Brown

ใช้codegolf.stackexchange.com/a/124164/76323เพื่อปรับให้เหมาะสม
l4m2

8

C, 215 208 190 190 ไบต์

-7 ขอบคุณ 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"?"

ใช้ "สตริงชนิด" ของ @ totalhuman แล้ว

มันทำงานอย่างไร:

  • "string"zเชื่อมต่อ"string"กับz( " an engineer") โดยอัตโนมัติ ใช่ C ทำเช่นนั้น
  • !strcmp(s,"OR") เปรียบเทียบสตริงกับ "หรือ"
  • ?"I am not"zส่งคืน "ฉันไม่ใช่วิศวกร" ถ้าเป็นจริง มิฉะนั้น...
  • :strstr(...,s) ตรวจสอบว่าสตริงอัจฉริยะของ @ totalhuman มีสตริงที่ระบุหรือไม่
  • ?"I am"z ส่งคืน "ฉันเป็นวิศวกร" ถ้าใช่และ ...
  • :"What is"z"?")ส่งคืน "วิศวกรคืออะไร" มิฉะนั้น.

ลองออนไลน์!


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 นั่นจะไม่ทำงานสำหรับ "วิศวกรคืออะไร" แต่ฉันได้มันไปใช้งานใน 209 ไบต์ ขอบคุณ!
MD XF

คุณสามารถส่งคืนสตริงแทนการพิมพ์ได้
l4m2

@ l4m2 ทำสิ่งที่คล้ายกัน
MD XF


5

Python 2 , 192 186 182 178 176 ไบต์

อาจบีบอัดสตริงสถานะเพิ่มเติม

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

ลองออนไลน์!


2
คุณใช้uในif s in uเท่านั้นคุณสามารถใช้มันโดยตรงแทนการประกาศมันได้หรือไม่
TheLethalCoder

1
@tallyallyhuman ที่การบีบอัดสตริงเป็นสิ่งที่น่าอัศจรรย์สวยดี!
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 WYเป็นที่เล็กที่สุดที่ฉันสามารถทำให้มัน
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
อ๊ะขอโทษด้วยฉันใช้เวลานานมาก ดูเหมือนว่าฉันจะเสียการคัดลอกสตริงนั้นไม่ได้ทำให้คำตอบของฉันดีกว่าที่ใช้ โปรดหยุดการโหวตนี้และตอบคำถามอื่น ๆ ที่ดีกว่า
มนุษย์โดยรวม

5

Java (JDK 10) , 184 ไบต์

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

ลองออนไลน์!

ฉันขอโทษที่นำสตริงที่บีบอัดกลับมาใช้ใหม่: ฉันไม่พบอะไรที่ดีไปกว่านี้ ... :(


4

05AB1E , 104 103 101 ไบต์

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

ลองออนไลน์!

รุ่น 104 ไบต์เก่าในกรณีที่ปรับปรุงได้ง่ายขึ้น

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

?ไม่ได้มีความสุขกับการบีบอัดหรือกรณีพิเศษสำหรับ


ตกลงนี่คืออะไร คุณเพิ่งสั่งซื้อรัฐหรืออะไรใหม่อีกครั้ง?
Erik the Outgolfer

@EriktheOutgolfer: รุ่น 104 (A=1,C=3 ...)ไบต์เป็นเพียงการบีบอัดของตัวเลขที่สอดคล้องกับตำแหน่งตัวละครในอักษร รุ่น 103 ไบต์ไม่เหมือนกันสำหรับบางรัฐและผสานบางรัฐที่ลงท้ายด้วยตัวอักษรเดียวกันกับที่รัฐใหม่เริ่มต้นด้วย ฉันแน่ใจว่าสิ่งนี้ยังคงได้รับการปรับปรุงและฉันจะเพิ่มคำอธิบายที่ดีขึ้นเมื่อฉันเล่นกอล์ฟเพิ่มเติม
Emigna

1
คำตอบที่ดี! ผมชอบที่คุณใช้สำหรับบางส่วนของรัฐแทนเพียงการบีบอัดรัฐทั้งหมดและทำ.•~Zµ∞/'—¶[@øl•Œ2ù และวิธีการที่ดีโดยรวม (ดีใจที่ฉันเห็นคำตอบของคุณก่อนที่จะลองสิ่งที่ตัวเองเพราะมันจะไม่สั้นแน่นอน .. )
เควิน Cruijssen

4

F # , 222 ไบต์

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

ลองออนไลน์!

ขยาย:

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

ให้สถานะตัวอักษรสองตัวvส่งผ่านไปยังฟังก์ชันf , สร้าง tuple (a, b)แทนหัวและส่วนท้ายของประโยค "วิศวกร"

รู้สึกอิสระที่จะใช้ "สตริงรัฐบีบอัด" ได้อย่างอิสระ; มันเป็นหนึ่งไบต์ทั้งสั้นกว่า MINCALA หนึ่ง ...



3

Japt , 136 135 131 129 128 ไบต์

ประหยัดได้มากขึ้นโดยการทดลองตามลำดับตัวย่อของรัฐ - ฉันจะกลับมาที่อีกสักครู่

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

ลองออนไลน์


คำอธิบาย

  • เราใช้สตริงที่ถูกบีบอัดของตัวย่อที่ลดขนาดขยายและแยกมันออกเป็นอาร์เรย์ของสตริงอักขระ 2 ตัวโดยใช้òเมธอด
  • จากนั้นเราจะใช้øวิธีการเพื่อดูว่าอาร์เรย์มีUvหรือไม่ซึ่งเป็นสตริงอินพุตที่แปลงเป็นตัวพิมพ์เล็ก
  • ถ้าเราเป็นเช่นนั้นเราสร้างสตริงการส่งออกของเราเริ่มต้นด้วย "I am "
  • ตรวจสอบว่าสายป้อน¥(เท่ากับ) "OR"ช่วยให้เราสามารถผนวกทั้งหรือตัวแปรสตริงที่ว่างเปล่า"not "P
  • "an engineer"และจากนั้นเราขยายและผนวกสตริงบีบอัด
  • "What is an engineer?"ถ้าใส่ไม่พบในอาร์เรย์แล้วเราส่งออกการบีบอัดของสตริงที่ถูกบีบอัด

3

Python 3 , 180 179 178 ไบต์

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

ลองออนไลน์!


ใช่มันถูกต้อง: ลองออนไลน์!
int6h

166 ไบต์ ฉันแน่ใจว่าสตริงยังสามารถกระชับ liitle มากขึ้นโดยการนำรัฐกลับมาใช้ใหม่
Jo King

ขอบคุณ @JoKing มันคล้ายกับ Python 2 คำตอบมากเกินไป ณ จุดนี้ IMO :) ฉันพยายามบีบอัดสตริง แต่สิ่งที่สั้นที่สุดที่ฉันสามารถทำได้คือ 92 สัญลักษณ์ ฉันได้เขียนสคริปต์สั้น ๆเพื่อทำเช่นนั้น แต่มันสามารถลดความยาวได้ถึง 94 ตัวอักษรและไม่บีบอัดอย่างเหมาะสม ฉันยังคิดว่าในการท้าทายนี้สายวิเศษไม่ควรรวมอยู่ในจำนวนไบต์
int6h

2

CJam , 143 ไบต์

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

ลองออนไลน์! หรือเป็นชุดทดสอบ

คำอธิบาย

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

เนื่องจาก Oregon ( OR) อยู่ที่จุดเริ่มต้นของสตริงการค้นหา signum ของดัชนีของอินพุตในนั้นจะเป็น -1 ถ้าไม่พบ 0 ถ้าOR1 ถ้าสถานะอื่น ๆ สามารถเลือกสตริงที่จะพิมพ์ได้


2

PHP, 188 ไบต์

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

ลองออนไลน์!


in_array(...)strpos(_AKALARAZCACOCTDEFLGAHIIAIDILINKSKYLAMAMDMEMIMNMOMSMTNCNDNENHNJNMNVNYOHOKPARISCSDTNTXUTVAVTWAWIWVWY,$argn)&1ไปยัง
Christoph

@Christoph ไม่ทำงานสำหรับการป้อนข้อมูลเช่น LA
JörgHülsermann

อืมถูกต้อง: / บางทีเราสามารถเรียงลำดับสตริงอีกสักหน่อย .. ฉันจะลอง และทำให้ js ตอบ btw ใช้ไม่ได้เช่นกัน
Christoph

_NMMNINTNRIHIMIWISCNCCTMTUTVTWVNVFLILCAALGAIAMAPAVAWACOLAMOAKARKSMSNHOHOKORAZDEIDKYMEMDNENJNYNDSDTXWYทำงาน
Christoph

@Christoph หรือสั่งซื้อของฉันทำงานเกินไป
JörgHülsermann

2

C #, 178 ไบต์

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

ทำงานใน C # Pad

กอล์ฟขึ้นอยู่กับการแก้ปัญหาของ Mayube ; ใหม่ที่นี่ดังนั้นฉันไม่มีตัวแทนมากพอที่จะแสดงความคิดเห็น


อาจต้องการแก้ไขลิงก์ในโซลูชันของเขา :) หากคุณคลิกแชร์โซลูชันของเขาลิงก์นั้นจะให้ลิงก์ตรงไปยังคุณ
Stephen

@ สตีเฟนส์ขอบคุณสำหรับเคล็ดลับ!
Arthur Rump

2

Haskell , 220 214 210 209 ไบต์

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

ลองออนไลน์!


มิฉะนั้น = True 1<2จะสั้นกว่านี้
BlackCap

Facepalmขอบคุณ!
bartavelle

คุณได้รวมไว้ORในสตริงยาวในคำจำกัดความที่สองของ i
BlackCap

ฉันขโมยสายยาวจากคำตอบอื่น หรือไม่เป็นส่วนหนึ่งของมันแม้ว่า?
bartavelle

1
ไม่ไม่ได้อีกต่อไป :)
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
การปรับให้เหมาะสมอย่าง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]]
แท้จริง

@ l4m2 ดีที่ได้คำตอบของฉันชนะ
martin

1

AWK, 189 ไบต์

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

หากอินพุตตรงกับ regex ที่มีตัวย่อของรัฐทั้งหมดให้พิมพ์ "ฉันเป็นวิศวกร" โดยมี 'ไม่' แทรกอยู่ตรงกลางหากสถานะเป็นโอเรกอนจากนั้นออก

หากอินพุตไม่ตรงกับ regex จะต้องไม่ใช่ตัวย่อของรัฐสหรัฐอเมริกา


1

Python 3, 238 ไบต์

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

คำอธิบาย

ไม่ใช้เทคนิคการบีบอัด

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

มันเป็นโอเรกอนไม่ใช่โอไฮโอ
L3viathan

1
@ L3viathan ไม่แน่ใจว่าฉันยุ่งขนาดนั้นหลังจากเห็นโอเรกอนได้ทุกที่เนื่องจากชีวิตมีความแปลก ... ¯ \ _ (ツ) _ / ¯
Mateen Ulhaq

1

Java, 173 ไบต์

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
ยินดีต้อนรับสู่ PPCG! รายการทั้งหมดจะต้องเป็นโปรแกรมเต็มรูปแบบหรือฟังก์ชั่น; ฉันเชื่อว่าคุณสามารถเปลี่ยนให้เป็นการแสดงออกแลมบ์ดาที่ถูกต้อง (และฟังก์ชั่นดังนั้น) โดยการเพิ่มs->ไปยังจุดเริ่มต้น
ETHproductions

1

Stax , 100 ไบต์

ภาษานี้ลงวันที่ท้าทาย แต่ผู้แต่ง (ฉัน) ไม่เห็นมันจนกระทั่งตอนนี้

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

เรียกใช้และแก้ไขข้อบกพร่อง


1

JavaScript ES6, 175 171 ไบต์

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

เข้าร่วมดีมาก

หรือ 152 ไบต์ในการเข้ารหัส ISO

เครื่องกำเนิดไฟฟ้า:

'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,'/')))

อาจเป็นไปได้ที่จะจัดเรียงสตริงใหม่โดยใช้ btoa เพื่อขยาย
l4m2


1

Powershell, 175 ไบต์

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

สคริปต์ทดสอบ:

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

เอาท์พุท:

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 ไบต์

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'

ลองออนไลน์!

TIO มีกรณีทดสอบสำหรับทุกรัฐ
-54 ไบต์ขอบคุณการบีบอัดสตริง


คุณสามารถใช้การบีบอัดสตริงจากคำตอบอื่น ๆ เพื่อบันทึกไบต์
TheLethalCoder

1
MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH ORIA UT WVT WIL WYอัดดีกว่า
Skidsdev

0

q / kdb +, 174 ไบต์

วิธีการแก้:

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

คำอธิบาย:

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

หมายเหตุ:

ใช้สตริง 'ที่บีบอัด' จากคำตอบอื่น ๆ พยายามหาวิธีที่จะนำมาไว้ในบรรทัดเดียวเพื่อหลีกเลี่ยงการกำหนดaตัวแปร (แต่ยังคงเพิ่ม?เมื่ออินพุตไม่ใช่สถานะ


0

เรติน่า 175 ไบต์

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

ลองออนไลน์! หวังว่าฉันจะจัดสรรรายชื่อของรัฐที่ดีที่สุด คำอธิบาย:

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

หากเป็นรัฐใดรัฐหนึ่งใน 49 รัฐให้ลบรัฐและรายการ

OR~.*
not ~

หากเป็น Oregon ให้เปลี่ยนสถานะด้วยnotและลบรายการ

I am ..~.*
What is ~?

หากเป็นอย่างอื่นให้แทนที่ทุกสิ่งด้วยเอาต์พุตอื่น

~
an engineer

เพิ่มคำเหล่านี้ในครั้งสุดท้ายเพื่อหลีกเลี่ยงการทำซ้ำ


0

คริสตัล, 232 207 205 ไบต์

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

ลองมันออนไลน์ (แก้ไขเล็กน้อยเนื่องจากปัญหา ARGV)


0

ตัวคูณ 135 ไบต์

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

อ่านเพิ่มเติมและชื่อ:

: 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 ] dipและx swapเทียบเท่าในผลสแต็ค [ [ [ x ] dip ] dip ] dipแต่แรกจะสั้นเฉพาะเมื่อซ้อนกัน:


0

Python 2, 213 211 194 ไบต์

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

ลองใช้ออนไลน์

สิ่งที่ฉันกำลังทำงานเพื่อทำให้สั้นลง:

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

ปรับปรุง:

  • บันทึก 2 ไบต์โดยแทนที่s=not rด้วยs=r^1
  • แยกส่วนหัวและส่วนท้ายของรหัส

0

ทับทิมขนาด 164 ไบต์

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

ใช้การเข้ารหัสความยาวของการวิ่งดังนั้นสตริงมายากลจึงมีความยาว 50 ไบต์ต่อหนึ่งสถานะ ในการสร้างสิ่งนี้จำเป็นต้องใส่รหัสรัฐตามลำดับตัวอักษรของรหัสรัฐแทนที่จะเป็นชื่อรัฐ น่าเสียดายที่ 7 ไบต์จำเป็นต้องแปลงการแสดง base36 ของjจาก statecode ตัวพิมพ์เล็กเป็น statecode ตัวพิมพ์ใหญ่

Ungolfed ในโปรแกรมทดสอบ

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]]}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.