Tôi có phải là kỹ sư không?


42

Gần đây, một kỹ sư điện đang nghiên cứu thời gian đèn giao thông đã bị tiểu bang Oregon phạt 500 đô la vì coi mình là kỹ sư.

Đưa ra một chuỗi 2 chữ cái làm đầu vào, đại diện cho một tiểu bang của Hoa Kỳ, đầu ra:

  • I am not an engineernếu tiểu bang là Oregon ( OR)
  • I am an engineer nếu tiểu bang là bất kỳ tiểu bang nào khác của Hoa Kỳ
  • What is an engineer? đưa ra bất kỳ đầu vào khác

Đầu ra có thể không chứa bất kỳ khoảng trắng hàng đầu nào , nhưng có thể chứa nhiều khoảng trắng theo sau bạn muốn.

Bạn có thể giả sử đầu vào sẽ luôn là 2 chữ cái viết hoa.

Dưới đây là danh sách tất cả 50 chữ viết tắt của tiểu bang Hoa Kỳ:

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

Chấm điểm

Đây là , vì vậy ít byte nhất trong mỗi ngôn ngữ sẽ thắng!


Tôi có thể có một khoảng trống ở đầu ra không?
Mèo kinh doanh

@BusinessCat có, sẽ cập nhật thông số để nói rằng
Skidsdev

4
Lưu ý bên lề: Nếu bạn nối toàn bộ chuỗi với nhau, bạn sẽ nhận được "... OKOR PARIS CSDTN ..." ;-)
Mateen Ulhaq

Mats Järlström cũng không được phép thể hiện mình là một kỹ sư ở Texas.
Ben Voigt

Câu trả lời:


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

Hãy thử trực tuyến!

Đã lưu 2 byte bằng cách thêm khoảng trắng trước anvàob

-69 (huehue) -72 byte nhờ TheLethalCoder

-15 byte nhờ chuỗi trạng thái thiên tài của TotallyHuman

-38 byte cos nén chuỗi nhiều hơn

Ung dung:

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

Sử dụng ..."+bthay vì các chuỗi nội suy, thay đổi if..else if...elsethành return s=="HOẶC"? ....: System.Arr ... `tức là sử dụng một ternary. Sử dụng u.Containsthay vì Array.Exists. Tôi nghĩ rằng nếu bạn sử dụng dấu cách thay vì dấu phẩy thì .Split()không có thông số nào sẽ hoạt động.
TheLethalCoder

khai báo b và u trong cùng một dòng và mặc dù bạn phải sử dụng chuỗi kiểu rõ ràng vẫn sẽ giúp bạn tiết kiệm một byte
LiefdeWen

@StefanDelport ulà một mảng không phải là chuỗi. Tuy nhiên, bạn có thể lưu byte bằng cách đặt uthành một chuỗi và sử dụng .Containsnó.
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}?";};. Hãy nghĩ rằng tôi đã xóa tất cả các khoảng trắng có liên quan. (Chưa được kiểm tra)
TheLethalCoder

1
Bạn có thể đánh gôn này bằng cách định nghĩa "một kỹ sư" là một biến riêng biệt để lưu một số 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]

Bản giới thiệu


3
Thất bại ví dụ LA: /
Christoph

@Christoph nên ổn ngay bây giờ. Cảm ơn đã báo cáo này!
Arnauld

Nghĩ rằng nó đã bị mất HOẶC trong giây lát - ngớ ngẩn!
Chas Brown

Sử dụng codegolf.stackexchange.com/a/124164/76323 để tối ưu hóa
l4m2

8

C, 215 208 190 byte

-7 cảm ơn 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"?"

Được sử dụng "hoàn toàn chuỗi" của @ hoàn toàn.

Làm thế nào nó hoạt động:

  • "string"ztự động nối "string"với z( " an engineer"). Có, C làm điều đó.
  • !strcmp(s,"OR") so sánh chuỗi với "HOẶC".
  • ?"I am not"ztrả về "Tôi không phải là kỹ sư" nếu đúng. Nếu không thì...
  • :strstr(...,s) kiểm tra xem chuỗi thiên tài của @ hoàn toàn có chứa chuỗi được cung cấp hay không.
  • ?"I am"z trả về "Tôi là một kỹ sư" nếu vậy, và ...
  • :"What is"z"?")trả về "một kỹ sư là gì?" nếu không thì.

Hãy thử trực tuyến!


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 Điều đó sẽ không làm việc cho "Kỹ sư là gì?" Nhưng tôi đã làm cho nó hoạt động trong 209 byte. Cảm ơn!
MD XF

Bạn có thể trả lại chuỗi thay vì in nó
l4m2

@ l4m2 Đã làm một cái gì đó tương tự.
MD XF


5

Python 2 , 192 186 182 178 176 byte

Có lẽ có thể nén chuỗi trạng thái nhiều hơn.

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

Hãy thử trực tuyến!


2
Bạn chỉ sử dụng utrong if s in ubạn có thể lưu ý sử dụng nó trực tiếp thay vì khai báo nó?
TheLethalCoder

1
@totallyhuman rằng nén chuỗi là khá tuyệt vời, một trong những tốt đẹp!
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 WYlà nhỏ nhất tôi có thể làm được
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
Rất tiếc, xin lỗi, tôi mất quá nhiều thời gian. Có vẻ như tôi đã mất khi sao chép chuỗi đó không giúp câu trả lời của tôi tốt hơn câu trả lời. Hãy ngừng nâng cao điều này và nâng cao câu trả lời khác tốt hơn.
hoàn toàn là

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

Hãy thử trực tuyến!

Tôi xin lỗi vì đã sử dụng lại chuỗi nén: Tôi không thể tự mình tìm thấy bất cứ điều gì tốt hơn ... :(


4

05AB1E , 104 103 101 byte

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

Hãy thử trực tuyến!

Phiên bản 104 byte cũ trong trường hợp dễ dàng cải thiện hơn.

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

Không hài lòng với nén cũng không phải là trường hợp đặc biệt cho ?.


OK cái gì đây? Bạn vừa đặt hàng lại các tiểu bang hay cái gì đó?
Erik the Outgolfer

@EriktheOutgolfer: Phiên bản 104 byte chỉ là một số nén tương ứng với các vị trí ký tự trong bảng chữ cái (A=1,C=3 ...). Phiên bản 103 byte thực hiện tương tự đối với một số trạng thái và hợp nhất một số trạng thái kết thúc bằng cùng một chữ cái mà trạng thái mới bắt đầu. Tôi chắc chắn rằng điều này vẫn có thể được cải thiện và tôi sẽ thêm một lời giải thích tốt hơn khi tôi đánh gôn nhiều hơn.
Emigna

1
Câu trả lời tốt đẹp! Tôi thích .•~Zµ∞/'—¶[@øl•Œ2ùbạn đã sử dụng cho một số trạng thái, thay vì chỉ nén tất cả các trạng thái và thực hiện . Và cách tiếp cận tốt đẹp tổng thể. (Vui mừng tôi đã thấy câu trả lời của bạn trước khi tự mình thử một cái gì đó, bởi vì nó chắc chắn sẽ không ngắn như vậy ..)
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

Hãy thử trực tuyến!

Mở rộng:

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

Cho một trạng thái hai chữ cái v được truyền cho hàm f , xây dựng một tuple (a, b) đại diện cho đầu và đuôi của câu "kỹ sư".

Thoải mái sử dụng "chuỗi trạng thái nén" một cách tự do; nó ngắn hơn một byte so với MINCALA ...



3

Japt , 136 135 131 129 128 byte

Có thể tiết kiệm nhiều hơn bằng cách thử nghiệm thứ tự viết tắt của tiểu bang - tôi sẽ quay lại vấn đề đó sau một thời gian.

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

Dùng thử trực tuyến


Giải trình

  • Chúng tôi lấy một chuỗi nén các chữ viết tắt viết tắt, giải nén nó và chia nó thành một chuỗi gồm 2 chuỗi ký tự bằng òphương thức.
  • Sau đó, chúng tôi sử dụng øphương thức để xem mảng chứa Uv, đó là chuỗi đầu vào được chuyển đổi thành chữ thường.
  • Nếu chúng ta làm như vậy, chúng ta xây dựng chuỗi đầu ra của mình, bắt đầu bằng "I am "
  • Kiểm tra xem chuỗi đầu vào ¥(bằng) "OR"cho phép chúng ta nối thêm "not "hoặc biến chuỗi rỗng P.
  • Và sau đó chúng tôi giải nén và nối thêm chuỗi nén "an engineer".
  • Nếu không tìm thấy đầu vào trong mảng, thì chúng ta sẽ giải nén chuỗi nén "What is an engineer?".

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

Hãy thử trực tuyến!



166 byte . Tôi chắc chắn rằng chuỗi cũng có thể được thắt chặt hơn một danh hiệu bằng cách sử dụng lại các trạng thái
Jo King

Cảm ơn @JoKing. Nó giống với câu trả lời Python 2 quá nhiều vào thời điểm này IMO :). Tôi đã cố gắng nén chuỗi, nhưng ngắn nhất tôi có thể nhận được là 92 biểu tượng. Tôi đã viết một đoạn script ngắn để làm điều đó, nhưng nó chỉ có thể cắt nó xuống còn 94 ký tự và nó không nén tối ưu. Tôi cũng nghĩ rằng trong thử thách đặc biệt này, chuỗi ma thuật không nên được đưa vào số 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"\

Hãy thử trực tuyến! hoặc như một bộ thử nghiệm

Giải trình

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

Vì Oregon ( OR) nằm ở đầu chuỗi, nên việc tìm ra dấu hiệu của chỉ số của đầu vào trong đó sẽ là -1 nếu không tìm thấy, 0 nếu OR, 1 nếu có bất kỳ trạng thái nào khác. Chuỗi nào để in có thể được quyết định bởi điều đó.


2

PHP, 188 byte

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

Hãy thử trực tuyến!


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

@Christoph hoạt động không phải cho Đầu vào, ví dụ như LA
Jörg Hülsermann

Hừm: / có lẽ chúng ta có thể sắp xếp lại chuỗi một chút .. Tôi sẽ thử. Cũng làm mất hiệu lực câu trả lời js btw.
Christoph

_NMMNINTNRIHIMIWISCNCCTMTUTVTWVNVFLILCAALGAIAMAPAVAWACOLAMOAKARKSMSNHOHOKORAZDEIDKYMEMDNENJNYNDSDTXWYhoạt động
Christoph

@Christoph Hoặc đơn hàng của tôi cũng làm việc.
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");

Chạy trong C # Pad

Golf dựa trên giải pháp của Mayube ; mới ở đây, vì vậy tôi không có đủ đại diện để bình luận.


Có thể muốn chỉnh sửa trong một liên kết đến giải pháp của anh ấy :) Nếu bạn nhấp vào chia sẻ về giải pháp của anh ấy, nó sẽ cung cấp cho bạn một liên kết thẳng đến nó.
Stephen

@StephenS Cảm ơn vì tiền boa!
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++"?"

Hãy thử trực tuyến!


nếu không = Đúng, 1<2thậm chí còn ngắn hơn
BlackCap

Facepalm , cảm ơn!
bartavelle

Bạn đã bao gồm ORchuỗi dài trong định nghĩa thứ hai của i
BlackCap

Tôi đã đánh cắp chuỗi dài từ các câu trả lời khác. HOẶC không phải là một phần của nó mặc dù?
bartavelle

1
Không, không còn nữa :)
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]]
Tối

@ l4m2 đẹp, đó là câu trả lời của tôi.
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?"}

Nếu đầu vào khớp với biểu thức chính có chứa tất cả các chữ viết tắt của tiểu bang, hãy in "Tôi là kỹ sư" với chữ 'không' được chèn ở giữa nếu tiểu bang là Oregon, sau đó thoát.

Nếu đầu vào không khớp với biểu thức chính quy, thì đó không phải là chữ viết tắt của tiểu bang Hoa Kỳ.


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

Giải trình

Không có kỹ thuật nén được sử dụng.

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

Đó là Oregon, không phải Ohio.
L3viathan

1
@ L3viathan Không chắc chắn làm thế nào tôi làm hỏng điều đó sau khi thấy Oregon ở mọi nơi do Cuộc sống thật kỳ lạ ... ¯ \ _ (ツ) _ /
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"

3
Chào mừng đến với PPCG! Tất cả các mục phải là một chương trình đầy đủ hoặc một chức năng; Tôi tin rằng bạn có thể biến điều này thành biểu thức lambda hợp lệ (và do đó là hàm) bằng cách thêm s->vào đầu.
Sản phẩm ETH

1

Stax , 100 byte

Ngôn ngữ này hoãn lại thách thức. Nhưng tác giả (tôi) đã không nhìn thấy nó cho đến bây giờ.

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

Chạy và gỡ lỗi nó


1

JavaScript ES6, 175 171 byte

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

Tham gia nhiều điều tốt

Hoặc 152 byte trên mã hóa ISO

Máy phát điện:

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

Có thể sắp xếp lại chuỗi để sử dụng btoa để mở rộng
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

Hãy thử trực tuyến!

dịch thuần túy


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]

Kịch bản thử nghiệm:

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

Đầu ra:

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

Hãy thử trực tuyến!

TIO chứa các trường hợp thử nghiệm cho tất cả các tiểu bang.
-54 byte nhờ nén chuỗi


Bạn có thể sử dụng nén chuỗi từ các câu trả lời khác để lưu byte
TheLethalCoder

1
MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH ORIA UT WVT WIL WYnén tốt hơn
Skidsdev

0

q / kdb +, 174 byte

Giải pháp:

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

Giải trình:

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

Ghi chú:

Đã sử dụng chuỗi 'nén' từ các câu trả lời khác, đấu tranh để tìm cách đưa nó thành một dòng duy nhất để tránh gán abiến (nhưng vẫn thêm ?khi đầu vào không phải là trạng thái.


0

Võng mạc , 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

Hãy thử trực tuyến! Hy vọng rằng tôi đã chiếm được danh sách nhà nước tốt nhất. Giải trình:

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

Bắt đầu xây dựng kết quả. Ngoài ra, chèn danh sách trạng thái để sử dụng cho giai đoạn tiếp theo.

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

Nếu đó là một trong 49 tiểu bang, hãy xóa trạng thái và danh sách.

OR~.*
not ~

Nếu là Oregon, hãy thay thế tiểu bang bằng notvà xóa danh sách.

I am ..~.*
What is ~?

Nếu đó là bất cứ điều gì khác, thay thế mọi thứ bằng đầu ra khác.

~
an engineer

Thêm những từ này cuối cùng để tránh lặp lại.


0

Pha lê, 232 207 205 byte

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

Hãy thử trực tuyến . (sửa đổi một chút do vấn đề ARGV)


0

Yếu tố, 135 byte

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

Dễ đọc hơn và được đặt tên:

: 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 ] dipx swaptương đương trong hiệu ứng ngăn xếp nhưng lần đầu tiên chỉ ngắn hơn khi lồng nhau : [ [ [ x ] dip ] dip ] dip.


0

Python 2, 213 211 194 byte

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

Dùng thử trực tuyến

Những thứ tôi đang làm để rút ngắn:

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

Cập nhật:

  • Đã lưu 2 byte bằng cách thay thế s=not rbằngs=r^1
  • Tách tiêu đề và chân trang của mã

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}

Sử dụng mã hóa độ dài chạy, do đó chuỗi ma thuật dài 50 byte, mỗi chuỗi một trạng thái. Để xây dựng điều này, trước tiên cần đặt mã trạng thái theo thứ tự chữ cái của mã trạng thái, thay vì tên trạng thái. Thật không may, 7 byte là cần thiết để chuyển đổi biểu diễn base36 jtừ một statecode chữ thường thành statecode chữ hoa.

Ungolfed trong chương trình thử nghiệm

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]]}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.