나는 엔지니어입니까?


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

채점

이것은 이므로 각 언어에서 가장 적은 바이트 이깁니다!


출력에 후행 공백이 있습니까?
비즈니스 고양이

@BusinessCat 예, 사양을 업데이트합니다
Skidsdev

4
참고 : 전체 문자열을 함께 연결하면 "... OKOR PARIS CSDTN ...";-)
Mateen Ulhaq

Mats Järlström도 텍사스에서 엔지니어로 자신을 소개 할 수 없었습니다.
벤 보이트

답변:


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

TheLethalCoder 덕분에 -69 (huehue) -72 바이트

TotallyHuman의 천재 상태 문자열 덕분에 -15 바이트

-38 바이트 이상의 문자열 압축

언 골프 드 :

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 ...`로 변경하십시오. 즉, 삼항을 사용하십시오. u.Contains대신에 사용하십시오 Array.Exists. 쉼표 대신 공백을 사용하면 .Split()매개 변수가 없으면 작동하지 않는다고 생각합니다 .
TheLethalCoder

b와 u를 같은 줄에 선언하고 명시 적 타입 문자열을 사용해야하더라도 여전히 바이트를 절약해야합니다.
LiefdeWen

@StefanDelport u는 문자열이 아닌 배열입니다. 그러나 u문자열 로 설정 하고 사용하여 바이트를 저장할 수 있습니다 .Contains.
TheLethalCoder 2016 년

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 2016 년

1
"엔지니어"를 별도의 변수로 정의하여 약간의 바이트를 절약함으로써 이것을 골프화 할 수 있습니다.
OldBunny2800 2016 년

11

자바 스크립트 (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 바이트

Cool Guy 덕분에 -7

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

@totallyhuman의 "genus string"을 사용했습니다.

작동 방식 :

  • "string"z( ) "string"와 자동으로 연결 됩니다 . 예, C는 그렇게합니다.z" an engineer"
  • !strcmp(s,"OR") 문자열을 "OR"과 비교합니다.
  • ?"I am not"ztrue 인 경우 "나는 엔지니어가 아닙니다"를 반환합니다. 그렇지 않으면...
  • :strstr(...,s) @totallyhuman의 천재 문자열에 제공된 문자열이 포함되어 있는지 확인합니다.
  • ?"I am"z "나는 엔지니어입니다"를 반환하고 ...
  • :"What is"z"?")"엔지니어 란 무엇입니까?" 그렇지 않으면.

온라인으로 사용해보십시오!


1
206 바이트 :#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

파이썬 (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
당신은 사용 uif s in u당신은 그것을 선언의 직접 대신 사용주의 수 있습니까?
TheLethalCoder

1
@totallyhuman 문자열 압축은 꽤 훌륭하고 훌륭합니다!
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'
펠리페 나디 바티스타

2
죄송합니다. 너무 오래 걸렸습니다. 해당 문자열을 복사해도 문자열을 사용하는 것보다 더 나은 답변을 얻지 못하는 것처럼 보입니다. 이것을지지하지 말고 다른 더 나은 답변을지지하십시오.
전적으로 인간

5

자바 (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

에 대한 압축이나 특별한 경우에 만족하지 않습니다 ?.


그래이게 뭐야? 당신은 상태 또는 무언가를 다시 주문 했습니까?
아웃 골퍼 에릭

@EriktheOutgolfer : 104 바이트 버전은 알파벳의 문자 위치에 해당하는 숫자를 압축 한 것입니다 (A=1,C=3 ...). 103 바이트 버전은 일부 상태에서 동일하게 수행되며 새 상태로 시작하는 동일한 문자로 끝나는 일부 상태를 병합합니다. 나는 이것이 여전히 향상 될 수 있다고 확신하고 더 골프를 칠 때 더 나은 설명을 추가 할 것입니다.
Emigna

1
좋은 대답입니다! 나는 .•~Zµ∞/'—¶[@øl•Œ2ù모든 상태를 압축하고을 수행하는 대신 일부 상태에 사용했던 것을 좋아 합니다 . 그리고 전체적으로 좋은 접근 방식입니다. (
단지

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로 전달 되면 "엔지니어"문장의 머리와 꼬리를 나타내는 튜플 (a, b) 을 작성하십시오.

"압축 된 상태 문자열"을 자유롭게 사용하십시오. MINCALA보다 1 바이트 짧습니다 ...



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

파이썬 3 , 180 179178 바이트

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

온라인으로 사용해보십시오!



166 바이트 . 나는 국가를 재사용함으로써 끈을 더욱 강화할 수 있다고 확신합니다
Jo King

@JoKing 감사합니다. 이 시점에서 파이썬 2의 대답과 너무 비슷합니다 :). 문자열을 압축하려고 시도했지만 가장 짧은 것은 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.

오레곤 ( OR)이 문자열의 시작 부분에 있으므로 입력 인덱스 색인의 부호를 찾을 수없는 경우 -1 OR, 다른 경우 에는 0 , 1입니다. 인쇄 할 문자열을 결정할 수 있습니다.


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


흠 맞아 : / 어쩌면 우리는 문자열을 약간 재정렬 할 수 있습니다. 또한 js 응답 btw를 무효화합니다.
Christoph

_NMMNINTNRIHIMIWISCNCCTMTUTVTWVNVFLILCAALGAIAMAPAVAWACOLAMOAKARKSMSNHOHOKORAZDEIDKYMEMDNENJNYNDSDTXWY작품
Christoph

@Christoph 또는 내 주문도 작동합니다.
Jörg Hülsermann 2016 년

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 # 패드에서 실행

Mayube의 솔루션을 기반으로 한 골프 ; 여기에 새로운 내용이므로 의견을 말할 충분한 담당자가 없습니다.


그의 솔루션에 대한 링크에서 편집하고 싶을 수도 있습니다.
Stephen

@StephenS 팁 주셔서 감사합니다!
Arthur Rump

2

하스켈 , 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

ORi의 두 번째 정의
LongCap에

다른 답변에서 긴 줄을 훔쳤습니다. 아니면 그것의 일부가 아닌가?
bartavelle

1
아니요, 더 이상은 아닙니다 :)
BlackCap

1

자바 스크립트 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

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

입력이 모든 상태 약어를 포함하는 정규식과 일치하면 상태가 오레곤 인 경우 중간에 'not'이라는 문자가 삽입 된 "I am a engineer"를 인쇄 한 다음 종료하십시오.

입력 값이 정규식과 일치하지 않으면 미국 주 약어가 아니어야합니다.


1

파이썬 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

자바, 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 바이트

이 언어는 도전 과제를 게시합니다. 그러나 저자 (me)는 지금까지 그것을 보지 못했습니다.

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

실행 및 디버깅


1

자바 스크립트 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)]

많은 좋은 합류

또는 ISO 인코딩에서 152 바이트

발전기:

'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

파워 쉘, 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

파이썬 (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 ~

오레곤 인 경우 상태를로 바꾸고 not목록을 삭제하십시오.

I am ..~.*
What is ~?

다른 것이 있으면 모든 것을 다른 출력으로 바꾸십시오.

~
an engineer

반복하지 않도록 마지막에이 단어를 추가하십시오.


0

수정, 232207205 바이트

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 ] dipx swap스택 효과가 동일하지만 중첩 때만 먼저 짧은이다 [ [ [ x ] dip ] dip ] dip.


0

파이썬 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

최신 정보:

  • 로 교체 s=not r하여 2 바이트 절약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 바이트입니다. 이를 구축하기 위해서는 먼저 상태 코드가 아닌 상태 코드를 알파벳 순서로 상태 코드에 배치해야했습니다. 불행히도 base36 표현을 변환하려면 7 바이트가 필요합니다.j 소문자 상태 대문자 상태 .

테스트 프로그램에서 언 골프

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.