我是工程师吗?


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

计分

这是,因此每种语言中最少的字节都是成功的


输出中是否可以有尾随空格?
Business Cat

@BusinessCat是的,将更新说明以说
Skidsdev

4
旁注:如果将整个字符串连接在一起,则会得到“ ... OKOR PARIS CSDTN ...” ;-)
Mateen Ulhaq

MatsJärlström也不允许在德克萨斯州出任工程师。
Ben Voigt

Answers:


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

在线尝试!

通过在之前添加空格an来节省2个字节b

-69(huehue) -72字节,感谢TheLethalCoder

-15字节归功于TotallyHuman的天才状态字符串

-38字节cos更多字符串压缩

取消高尔夫:

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

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


8

C,215个 208 190字节

-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的“属字符串”。

这个怎么运作:

  • "string"z自动"string"z" an engineer")串联。是的,C做到了。
  • !strcmp(s,"OR") 将字符串与“ OR”进行比较。
  • ?"I am not"z如果为true,则返回“我不是工程师”。除此以外...
  • :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

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
您只能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'
Felipe Nardi Batista

2
抱歉,我花了这么长时间。似乎我迷路了,因为复制该字符串并不比使用它的答案更好。请停止投票,并投票给另一个更好的答案。
totallyhuman


4

05AB1E104个 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)'17

@EriktheOutgolfer:104字节的版本只是对应于字母中字符位置的数字的压缩(A=1,C=3 ...)。103字节版本在某些状态下执行相同的操作,并合并以新状态开头的相同字母结尾的某些状态。我相信这仍然可以改善,当我打更多高尔夫球时,我会添加一个更好的解释。
Emigna

1
好答案!我喜欢.•~Zµ∞/'—¶[@øl•Œ2ù您已经使用过某些状态,而不仅仅是压缩所有状态并执行。总体而言,这是一种不错的方法。(很高兴我自己尝试尝试之前已经看到了您的答案,因为它肯定不会那么短。)
Kevin Cruijssen 18/09/17

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

给定传递给函数f的两个字母的状态v,构建一个表示“ engineer”语句的开头和结尾的元组(a,b)

随意使用“压缩状态字符串”;比MINCALA短一整字节...



3

Japt136个 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
乔金

谢谢@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)位于字符串的开头,因此如果找不到该索引,则查找输入索引的符号将为-1,如果为0,则为OR1,如果有其他状态,则为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)

@Christoph工作不是为了例如LA的输入
约尔格Hülsermann

嗯:/也许我们可以对字符串重新排序..我会尝试的。同时使js答案无效。
克里斯托夫(Christoph)”

_NMMNINTNRIHIMIWISCNCCTMTUTVTWVNVFLILCAALGAIAMAPAVAWACOLAMOAKARKSMSNHOHOKORAZDEIDKYMEMDNENJNYNDSDTXWY作品
Christoph

@Christoph或者我的订单也可以。
约尔格Hü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解决方案的高尔夫;新增内容,因此我没有足够的代表发表评论。


可能要编辑指向他的解决方案的链接:)如果您单击他的解决方案上的共享,它将为您提供直接指向它的链接。
斯蒂芬

@StephenS感谢您的提示!
亚瑟·臀部

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

您已将ORi的第二个定义包含在长字符串中
BlackCap,2017年

我从其他答案中偷走了长长的弦。还是不是一部分?
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

@ l4m2很好,这就是我的答案。
马丁

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”,然后退出。

如果输入与正则表达式不匹配,则它不能是美国州的缩写。


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->到开头将其转换为有效的lambda表达式(并因此转换为函数)。
ETHproductions '17

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,18年

1

C(gcc),0 + 176字节

-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

在线尝试!

纯翻译


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 ~

如果是俄勒冈州,请将状态替换为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 ] dipx 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

更新:

  • 通过替换s=not r为保存2个字节s=r^1
  • 代码的页眉和页脚分开

0

Ruby,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从小写状态码转换为大写状态码。

取消测试程序

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]]}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.