ฉันจะระบุรัฐได้กี่รัฐ


20

เมื่อฉันยังเด็กฉันมีแผนที่ขนาดใหญ่ของสหรัฐอเมริกาติดอยู่บนผนังตรงข้ามกับเตียง เมื่อฉันเบื่อฉันจะจ้องที่แผนที่นั้นและคิดถึงสิ่งต่าง ๆ สิ่งที่ชอบทฤษฎีบทสี่สีหรือรัฐที่ล้อมรอบรัฐอื่น ๆ มากที่สุด เพื่อประหยัดพลังสมองในการนับน้องของฉันคุณจะต้องคิดค้นเครื่องย้อนเวลาและบอกฉันว่ามีกี่รัฐที่ส่งสัญญาณเข้ามา เนื่องจากเวลามีความพิถีพิถันสิ่งนี้จึงต้องสั้นที่สุด

งาน

เมื่อระบุหนึ่งใน 50 รัฐของสหรัฐอเมริกาไม่ว่าจะด้วยชื่อเต็มหรือตัวย่อของไปรษณีย์ตามที่พบในหน้านี้ ( mirror.org mirror.org ) ให้ส่งกลับจำนวนสถานะที่ชายแดน ต่อไปนี้คือการแม็พอินพุตทั้งหมดสำหรับชื่อเต็มของรัฐกับจำนวนของรัฐที่อยู่ติดกันซึ่งพบได้บนเว็บไซต์นี้

Missouri, Tennessee -> 8
Colorado, Kentucky -> 7
Arkansas, Idaho, Illinois, Iowa, Nebraska, New York, Oklahoma, Pennsylvania, South Dakota, Utah, Wyoming -> 6
Arizona, Georgia, Massachusetts, Michigan, Minnesota, Nevada, New Mexico, Ohio, Virginia, West Virginia -> 5
Alabama, Indiana, Kansas, Maryland, Mississippi, Montana, North Carolina, Oregon, Texas, Wisconsin -> 4
California, Connecticut, Delaware, Louisiana, New Hampshire, New Jersey, North Dakota, Rhode Island, Vermont -> 3
Florida, South Carolina, Washington -> 2
Maine -> 1
Alaska, Hawaii -> 0

กฎระเบียบ

  • โปรแกรมของคุณสามารถจัดการชื่อเต็มของรัฐหรือรหัสไปรษณีย์ซึ่งไม่สามารถใช้ร่วมกันได้
  • คุณสามารถระบุกรณีของการป้อนข้อมูล แต่คุณไม่สามารถลบช่องว่างในการป้อนข้อมูล
  • คุณไม่ต้องจัดการกับวอชิงตันดีซีหรืออะไรก็ตามที่ไม่ใช่หนึ่งใน 50 รัฐ
  • จำนวนสถานะที่ล้อมรอบไม่รวมถึงสถานะอินพุต
  • นี่คือดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ

ในขณะที่ฉันรู้ว่านี่อาจเป็นใครก็ตามที่มีการบีบอัดที่ดีที่สุดหรือค้นหารูปแบบ regex ที่ดีที่สุดต่อหมายเลขถ้าฉันได้รับคำตอบมากเกินไปฉันจะให้รางวัลแก่คำตอบที่สร้างแผนที่ของสหรัฐอเมริกาและใช้มันเพื่อ คำนวณจำนวนรัฐที่มีพรมแดนติด


11
inb4Mathematica Built-in
DJMcMayhem

@DJMcMayhem เอ่อโอ้ (ฟังดูดีในตอนแรก แต่ดูการปรับปรุง ... )
สตีเฟ่น

@ ขั้นตอนไม่นะฉันถูกขับออกไปแล้ว! ตอนนี้ฉันกำลังหาคำตอบอยู่ซึ่งรวมเอาสิ่งนี้ ... ;)
notjagan


เราสามารถจัดการ DC / รวมไว้ในการนับของเราได้ไหมถ้าเราโปรด
notjagan

คำตอบ:


17

เยลลี่ , 73 65 ไบต์

“U[“Ȥ“!÷2“®Ɓ⁵]StƁ}K“ʂÞiƬ¦.ÞrÆu“4œ(°fWg?Ʋd“Ɠ©“Œb‘i³OS%168¤$€Tµ’6L?

ลองออนไลน์!

builtins? ใครต้องการสิ่งเหล่านี้ (ʂÞiƬบนพื้นด้วยความขยะแขยง)

ใช้อินพุตเป็นชื่อเต็มเช่น "Idaho"จะเข้าเป็นชื่อเต็มรูปแบบเช่น

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

“U[“Ȥ“!÷2“®Ɓ⁵]StƁ}K“ʂÞiƬ¦.ÞrÆu“4œ(°fWg?Ʋd“Ɠ©“Œb‘i³OS%168¤$€Tµ’6L?
“U[“Ȥ“!÷2“®Ɓ⁵]StƁ}K“ʂÞiƬ¦.ÞrÆu“4œ(°fWg?Ʋd“Ɠ©“Œb‘                   The literal list of code-page index lists  [[85, 91], [154], [33, 28, 50], [8, 143, 133, 93, 83, 116, 143, 125, 75], [167, 20, 105, 152, 5, 46, 20, 114, 13, 117], [52, 30, 40, 128, 102, 87, 103, 63, 153, 100], [147, 6], [19, 98]]
                           €        On each sublist:
                         ¤            Evaluate the hash value:
                 ³                     Input
                   O                   Character values
                    S                  Sum.
                     %                 Modulus.
                      168              168
                i                     Does the sublist contain that nilad?
                            T       Get the sublist which does contain that nilad.
                                 ?  If
                                L     Length.
                                    Then
                             ’        Return the index - 1
                                    Else
                              6      Return 6

คุณใช้กระบวนการใดในการรับรายการนั้น
Scott Milner

2
@ScottMilner ฉันทำงานOS%168ในแต่ละรัฐซึ่งให้รายการโดยตรง ฉันพบว่าค่าคงที่ 168 โดยการบังคับให้มีความเป็นไปได้ทั้งหมดน้อยกว่า 250 ตรวจสอบแต่ละอันเพื่อให้สามารถแยกแยะความแตกต่างระหว่างจำนวนเส้นขอบที่แตกต่างกันได้ 168ทำงานได้ (ในหมู่คนอื่น ๆ ไม่กี่คน) และได้รับประโยชน์เพิ่มเติมจากการต้องใส่48ค่ารหัสถาวรเนื่องจากการชน
fireflame241

18

Mathematica, 112 111 ไบต์

-5 ไบต์ขอบคุณMark S.และLegionMammal978 !

-22 ไบต์ (และสังเกตเห็นปัญหากับผลลัพธ์) ขอบคุณngenisis !

Tr[1^Entity["AdministrativeDivision",#~StringDelete~" "]@"BorderingStates"]+Boole@StringMatchQ[#,"Il*"|"Mic*"]&

แน่นอนว่ามี Mathematica ในตัวสำหรับมัน รวม DC ในการนับ


3
สิ่งนี้รู้สึกสกปรก แต่AdministrativeDivisionมีความยาวอย่างน่าประหลาดใจที่คุณจะบันทึกไบต์ด้วยความยาว [x = "AdministrativeDivision" ~ Entity ~ StringDelete [""] @ # ~ ToExpression [x <> "Data"] ~ "BorderingStates"] &
Mark S.

1
ToExpressionสามารถถูกแทนที่ด้วยSymbolถ้าฉันจำได้อย่างถูกต้อง
LegionMammal978

1
นอกจากนี้คุณไม่จำเป็นต้องใช้AdministrativeDivisionDataเพียงแค่ส่งผ่าน"BorderingStates"ข้อโต้แย้งไปยังเอนทิตี; เช่นEntity["AdministrativeDivision","Alaska"]["BorderingStates"]
ngenisis

1
@ngenisis ฉันใช้การแก้ไขปัญหาแรก; โชคดีเนื่องจากคำแนะนำของคุณไม่ได้เพิ่มจำนวนไบต์ ปัญหาหลังที่คุณพูดถึงเรื่อง DC นั้นไม่ใช่ปัญหาเพราะฉันถาม OP ว่ามันใช้ได้หรือไม่และการตอบสนองก็ใช่
notjagan

1
@notjagan คุณสามารถใช้Tr[1^...]แทนLength@...การบันทึกไบต์อื่นได้
ngenisis

13

JavaScript (ES6), 115 113 ไบต์

แก้ไข: บันทึก 2 ไบต์โดยการกู้ยืมเงินเพิ่มเติม 2 การเพิ่มประสิทธิภาพสตริงจากขั้นตอนที่ไก่คำตอบหลาม ฉันคิดถึงพวกเขาในความพยายามครั้งแรกของฉัน

ใช้รหัสไปรษณีย์เป็นอินพุต

s=>('7KYCO8MOTN0AKHI1ME2FLSCWA3CACTNDELANHNJRIVT4ALWINCKSMDMSMTXOR5GAZOHMANMIMNVWVA'.match('.\\D*'+s)||'6')[0][0]

อย่างไร?

อาร์กิวเมนต์ที่ไม่ใช่ RegExp ส่งผ่านไปยัง.match()วิธีการจะถูกแปลงเป็นวัตถุ RegExp โดยปริยาย ดังนั้นเรากำลังทดสอบนิพจน์ปกติ/.\D*{{input}}/บนสตริงที่เข้ารหัสของเรา นี่คือการจับคู่ตัวเลข(1)ตามด้วย 0 ถึง N อักขระที่ไม่ใช่ตัวเลขตามด้วยอินพุต

ตัวอย่างเช่นถ้าใส่เป็น"NH"(นิวแฮมป์เชียร์), "3CACTNDELANH"สตริงจะจับคู่ เราจะเก็บตัวอักษรตัวแรกของสตริงนี้หรือส่งคืน"6"โดยปริยายหากไม่มีการจับคู่

(1): .อันที่จริงคือการจับคู่ตัวละครใด ๆ แต่สตริงที่ถูกสร้างขึ้นในลักษณะที่สิ่งที่พบก่อนที่กลุ่มตัวอักษรเป็นตัวเลขหลักเสมอ

การสาธิต


รุ่นแฮช 115 ไบต์

รูปแบบอินพุตเดียวกัน

s=>`04436303035050063062750600644408${6e7}503600300540410005207058036442600400000650035`[parseInt(s,33)%589%180%98]

การสาธิต


คุณสามารถบันทึกจำนวนมากไบต์โดยการสตริงที่
Downgoat

7

Python 3 , 168 154 153 137 ไบต์

lambda s:[i for i,S in enumerate('AKHI ME FLSCWA CACTLANHNJNDERIVT ALWINCKSMDMSMTXOR MAZOHGANMIMNVWVA A KYCO MOTN'.split())if s in S]or 6

ลองออนไลน์!

-4 ไบต์ต้องขอบคุณ isaacg

-10 ไบต์ขอบคุณ ETHProductions

-1 ไบต์ขอบคุณ notjagen

บันทึกเพิ่มเติมบางไบต์โดยค่าเริ่มต้นถึงหกตามคำตอบอื่น ๆ ได้ทำ

TIO รวมถึงการทดสอบ รับข้อมูลเป็นรหัสไปรษณีย์ สร้างรายการชื่อรัฐเป็นสตริงสำหรับแต่ละชุด squished ร่วมกันเป็นไปได้ (ตัวอย่างเช่นWVVAเก็บไว้เป็นWVA) ฟังก์ชั่นแลมบ์ดารับดัชนีในรายการที่สตริงมีอินพุต อาจมีวิธีที่ฉันไม่รู้เกี่ยวกับการเล่นกอล์ฟในส่วนของฟังก์ชั่น เอาท์พุทเป็นรายการที่มีจำนวนเต็ม - เพิ่ม[0]ที่ส่วนท้ายของแลมบ์ดาเพื่อเอาท์พุทเป็นจำนวนเต็ม


นอกจากนี้คุณใช้เพียงlครั้งเดียวดังนั้นคุณอาจรวมถึงแบบอินไลน์
isaacg

@ETHproductions อ๋อขอบคุณ
Stephen

@isaacg ขอบคุณ dunno ทำไมฉันไม่เห็น
สตีเฟ่น

-1 ไบต์โดยจัดตำแหน่งใหม่ของเท็กซัส
notjagan

@notjagan ขอบคุณที่พลาดไป
Stephen

4

V , 143 ไบต์

çourüee/C8
çdoüke/C7
çrküI„sn]üebüOkünnsüSDüUüwy/C6
çzüg„ot]üttüinnüvaüxiüOh/C5
çbüdiüKüMáû5}üNCüOüTüWi/C4
ç^[CDLNRV]/C3
ç[FSW]/C2
çM/C1
ñlS0

ลองออนไลน์!

hexdump:

00000000: e76f 7572 fc65 652f 4338 0ae7 646f fc6b  .our.ee/C8..do.k
00000010: 652f 4337 0ae7 726b fc49 8473 6e5d fc65  e/C7..rk.I.sn].e
00000020: 62fc 4f6b fc6e 6e73 fc53 8144 fc55 fc77  b.Ok.nns.S.D.U.w
00000030: 792f 4336 0ae7 7afc 6784 6f74 5dfc 7474  y/C6..z.g.ot].tt
00000040: fc69 6e6e fc76 61fc 7869 fc4f 682f 4335  .inn.va.xi.Oh/C5
00000050: 0ae7 62fc 6469 fc4b fc4d e1fb 357d fc4e  ..b.di.K.M..5}.N
00000060: 8143 fc4f fc54 fc57 692f 4334 0ae7 5e5b  .C.O.T.Wi/C4..^[
00000070: 4344 4c4e 5256 5d2f 4333 0ae7 5b46 5357  CDLNRV]/C3..[FSW
00000080: 5d2f 4332 0ae7 4d2f 4331 0af1 6c53 30    ]/C2..M/C1..lS0

ฉันเขียนสิ่งนี้ก่อนที่ฉันจะรู้ว่าคุณสามารถรับข้อมูลเป็นรหัสไปรษณีย์ได้ :shrug:ฉันไม่แน่ใจว่าจริงหรือไม่ที่สั้นกว่า คำตอบนี้ใช้ regex เพื่อค้นหาสถานะที่แน่นอนแล้วเปลี่ยนอินพุตเป็นตัวเลขที่แน่นอนถ้าตรงกับ อย่างไรก็ตามเมื่อจำนวนสถานะที่เราทดสอบเพิ่มขึ้นการค้นหาขนาดเล็กที่สุดที่เราสามารถใช้ได้ลดลง ดังนั้นสำหรับตัวอย่างเช่นเราไม่สามารถค้นหาCเพราะที่จะตรงและColorado California(เช่นเดียวกับ Conneticut และ The Carolinas) อย่างไรก็ตามเมื่อเราทดสอบสำหรับทุกรัฐที่มีพรมแดนมากกว่า 3 เราสามารถค้นหาการเริ่มต้นด้วย Cเพราะมันไม่สามารถเทียบกับก่อนหน้านี้อีกต่อไป

บางกรณีทดสอบอาจผิดเนื่องจากฉันไม่มีเวลาทดสอบทั้งหมด แจ้งให้เราทราบหากคุณพบผลลัพธ์ที่ไม่ถูกต้อง :)


3

จาวาสคริปต์, 153 ไบต์

MO=TN=8;CO=KY=7;AZ=GA=MA=MI=MN=NV=NM=OH=VA=WV=5;AL=IN=KS=MD=MS=MT=NC=OR=TX=WI=4;CT=DE=LA=NH=NJ=ND=RI=VT=3;FL=WA=2;ME=1;AK=HI="0";alert(self[prompt()]||6)

การผูกมัดตัวแปร ฉันแน่ใจว่ามีวิธีที่ดีกว่าในการทำเช่นนี้

ขอบคุณคำแนะนำจากใครบางคนจาก Discord ค่าดีฟอลต์ของเอาต์พุตเป็น 6 ซึ่งเป็นจำนวนที่มากที่สุดของสถานะแบบมีขอบ 183 ไบต์ถึง 151 ไบต์

ผู้แสดงความคิดเห็นชี้ให้เห็นว่าสิ่งนี้ล้มเหลวสำหรับ AK และ HI ดังนั้นฉันจึงเพิ่มสองไบต์เพื่อแก้ไขปัญหา 151 ถึง 153 ไบต์


1
ฉันค่อนข้างมั่นใจว่าสิ่งนี้จะล้มเหลวAKและHIเพราะ0||6ประเมินเป็น 6 ซึ่งเป็นผลลัพธ์ที่ไม่ถูกต้อง
kamoroso94

@ kamoroso94 ฉันได้อัปเดตโค้ดแล้วหากคุณคิดว่าจะมีวิธีแก้ไขที่ดีกว่าโปรดแจ้งให้เราทราบ
อีไลริชาร์ดสัน

3

05AB1E , 78 72 ไบต์

.•n£þuγ{çâ/₁=èó[nK™ΩFîÀî˜Çʒ÷¿ηZ¬³ã®ÿΣÔ¢*5ŠÜ‚!¶Ö¾#}ê(Ûø‰¢þL[Æ₁cgIkö•s¡¬ð¢

ลองออนไลน์!


.•n£þuγ{çâ/₁=èó[nK™ΩFîÀî˜Çʒ÷¿ηZ¬³ã®ÿΣÔ¢*5ŠÜ‚!¶Ö¾#}ê(Ûø‰¢þL[Æ₁cgIkö•
# Push the string: akhi me flscwa cactdelanhnjndrivt alinksmdmsncmtortxwi azgamamimnnvnmvaohwv idilianarenyokpnsdutwy kyco motn

s¡    # Split on input.
  ¬   # Get head.
   ð¢ # Count number of spaces.

สิ่งนี้ใช้งานได้เนื่องจากคำสั่งของตัวย่อสถานะอนุญาตให้ไม่มีสถานะใด ๆ เกิดขึ้นในการทับซ้อนระหว่างสถานะ:

a[kh]i 
me 
f[ls][cw]a 
c[ac][td][el][an][hn][jn][dr][iv]t 
a[li][nk][sm][dm][sn][cm][to][rt][xw]i 
a[zg][am][am][im][nn][vn][mv][ao][hw]v 
i[di][li][an][ar][en][yo][kp][ns][du][tw]y 
k[yc]o 
m[ot]n

ใช้เวลาสักครู่เพื่อให้ได้การจัดเรียงที่ถูกต้อง ... จากนั้นโดยการแยกอินพุตและการนับช่องว่างในส่วนแรกเราจะได้ผลลัพธ์ที่ถูกต้อง


หากฉันขโมย "ค่าเริ่มต้นเป็น 6" จากคำตอบอื่น ๆ ฉันจะได้รับ 65 ไบต์:

05AB1E , 65 ไบต์

.•3θ0ÔÕ—ú^?D§:‚A†ǝλα“i›p‚ιCöΔƒñPŠ J€ŽãB»ΣUƤÆuhÃgŠ¦,Y²•s¡¬ð¢D9Qi6

ลองออนไลน์!


Took awhile to get the arrangement right-> โอ้ฉันคิดว่าคุณน่าจะคัดลอกมาจากคำตอบของฉันได้ (ถ้าฉันอ่านถูกต้อง)
สตีเฟ่น

@ สตีเฟ่นฉันไม่ได้รับความคิดจากการโพสต์อื่น ๆ ถ้าคุณดูที่ "อัลกอริทึม hashing sucky" ฉันยุ่งกับความคิดสุ่มสำหรับ hashing ประมาณหนึ่งชั่วโมงแล้วคิดเกี่ยวกับช่องว่างพบว่าฉันไม่สามารถ เอาชนะการนำไปใช้นั้นไม่ว่าฉันจะพยายามมากแค่ไหนก็ตาม
Magic Octopus Urn

@ สตีเฟ่นตอนนี้ที่ฉันอ่านของคุณฉันหวังว่าฉันยังคิดเกี่ยวกับการเริ่มต้นที่ 6 xD
Magic Octopus Urn

1
ฉันไม่ได้คิดถึงมันฉันเห็นคำตอบนี้ก่อนดังนั้นอย่าลังเลที่จะรับมัน: P
สตีเฟ่น


2

JavaScript (ES6), 195 ไบต์

s=>/las|ii/[t='test'](s)?0:/ai/[t](s)?1:/Fl|Wa|S.*C/[t](s)?2:/fo|ct|de|ui|mp|er|^N.+ak/i[t](s)?3:/do|ck/[t](s)?7:/ur|ee/[t](s)?8:/iz|gi|ch|ev|xi|hi|es/[t](s)?5:/rk|ah|oi|ow|br|om|lv|ak/[t](s)?6:4

ชุดของนิพจน์ทั่วไปซึ่งทำงานกับชื่อเต็มของรัฐ

กรณีทดสอบ:


2

เยลลี่ ,  61  59 ไบต์

OP%⁽/r%101eЀ“¿=“þ“(7“¡¦ðø,0@L“€ç÷<CMZa“Ø!)5HNV““1^“¥+‘Tȯ7’

โปรแกรมเต็มรูปแบบที่ใช้ชื่อเต็มของรัฐและพิมพ์ผลลัพธ์ (เป็นลิงก์แบบ monadic มันจะส่งคืนรายการที่มีหมายเลขเดียวหรือหมายเลข 6)

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

อย่างไร?

“¿=“þ“(7“¡¦ðø,0@L“€ç÷<CMZa“Ø!)5HNV““1^“¥+‘

คือรายการของดัชนีหน้ารหัส:

[[11,61],[31],[40,55],[0,5,24,29,44,48,64,76],[12,23,28,60,67,77,90,97],[18,33,41,53,72,78,86],[],[49,94],[4,43]]

และแสดงเป็น“ ... ‘ด้านล่าง:

OP%⁽/r%101eЀ“ ... ‘Tȯ7’ - Main link: list of characters, stateName  e.g. Ohio
O                        - cast to ordinals                   [79,104,105,111]
 P                       - product                                    95757480
   ⁽/r                   - base 250 literal                              12865
  %                      - modulo by 12865                                3285
      %101               - modulo by 101                                    53
             “ ... ‘     - list of lists of code-page indices
          eЀ            - map: exists in?                 [0,0,0,0,0,1,0,0,0]
                    T    - truthy indices (if none yields an empty list)   [6]
                     ȯ7  - logical or with 7 (replace empty list with 7)   [6]
                       ’ - decrement                                       [5]
                         - implicit print (Jelly's representation of a list of
                         -                 one item is just that item)       5

1

Excel VBA, 177 154 147 ไบต์

ฟังก์ชัน VBE แบบไม่ระบุชื่อที่รับอินพุตเป็นชนิดที่คาดหวังซึ่งStringแสดงถึงรหัสไปรษณีย์ของรัฐจากช่วง[A1]และส่งกลับค่าIntegerที่แสดงถึงจำนวนสถานะที่ชายแดนรัฐนั้น

For i=0To 8:r=r+IIf(Instr(1,Split("AKHI ME FLSCWA CACTLANHNJNDERIVT ALWINCKSMDMSMTXOR MAZOHGANMIMNVWVA | KYCO MOTN")(i),[A1]),i,0):Next:?IIf(r,r,6)

รุ่นก่อนหน้า

154 ไบต์:

For Each s in Split("AKHI ME FLSCWA CACTLANHNJNDERIVT ALWINCKSMDMSMTXOR MAZOHGANMIMNVWVA | KYCO MOTN"):r=r+IIf(Instr(1,s,[A1]),i,0):i=i+1:Next:?IIf(r,r,6)

177 ไบต์:

[2:2]=Split("AKHI ME FLSCWA CACTLANHNJNDERIVT ALWINCKSMDMSMTXOR MAZOHGANMIMNVWVA A KYCO MOTN"):[3:3]="=IfError(If(Find($A1,A2),Column(A3)),"""")":[B1]="=Sum(3:3)":?[If(B1,B1,6)]

จัดรูปแบบเพื่อให้อ่านง่าย

[2:2]=Split("AKHI ME FLSCWA CACTLANHNJNDERIVT ALWINCKSMDMSMTXOR MAZOHGANMIMNVWVA | KYCO MOTN")
[3:3]="=IfError(If(Find($A1,A2),Column(A3)-1),"""")"
[B1]="=Sum(3:3)"
?[If(B1,B1,6)]

1

Python 2, 363 218 ไบต์

lambda a:dict(WA=2,WI=4,WV=5,FL=2,NH=3,NJ=3,NM=5,NC=4,ND=3,RI=3,NV=5,CO=7,CA=3,GA=5,CT=3,OH=5,KS=4,SC=2,KY=7,OR=4,DE=3,HI=0,TX=4,LA=3,TN=8,VA=5,AK=0,AL=4,VT=3,IN=4,AZ=5,ME=1,MD=4,MA=5,MO=8,MN=5,MI=5,MT=4,MS=4).get(a,6)

เรามาเริ่มกันง่ายๆคำตอบ hardcoded ที่ปรับให้เล็กน้อย ใช้รหัสไปรษณีย์เป็นอินพุต

-145 ไบต์ขอบคุณ bfontaine


4
คุณสามารถบันทึกเกือบ 100 ไบต์โดยใช้แทนdict(MO=8,TN=8,...) {'MO':8,'TN':8,...}คุณสามารถบันทึกเกือบ 50 ไบต์โดยใช้.get(a,6)และลบสถานะเหล่านั้นที่เส้นขอบ 6 สถานะอื่น ฉันสามารถลงไปที่ 219 ด้วยสองเทคนิคนี้
bfontaine

@Mitch บันทึกบางมากขึ้นโดยใช้พื้นที่แทน.และการทำsplit()(ฉันคิด)
สตีเฟ่น

@Mitch คุณจำเป็นต้องมีช่วงเวลาหรือไม่? มีวิธีการแบ่งรายการเป็นกลุ่ม 2 หรือไม่?
Magic Octopus Urn

dict((i[0]+i[1],int(i[-1])) for i in zip(*[iter("WA2WI4WV5FL2...")]*3))ผมเชื่อว่าคุณสามารถบันทึกไบต์บางมากขึ้นโดยใช้ นอกจากนี้คุณอาจจะปล่อยให้intมันถ้ามันได้รับอนุญาตให้มีการส่งออกเป็นสตริง
Izaak van Dongen

dict((a+b,int(c)) for a,b,c in zip(*[iter("WA2WI4WV5...")]*3))อันที่จริงถ้าคุณใช้การเอาออกคุณสามารถทำ ขออภัยฉันลังเลเล็กน้อย: D
Izaak van Dongen

1

PowerShell , 187 ไบต์

param($a)$x=($b=" MO8TN8CO7KY7AZ5GA5MA5MI5MN5NV5NM5OH5VA5WV5AL4IN4KS4MD4MS4MT4NC4OR4TX4WI4CA3CT3DE3LA3NH3NJ3ND3RI3VT3FL2SC2WA2ME1").IndexOf($a);if($x+1){$b[$x+2];exit}6-6*($a-in'AK','HI')

ลองออนไลน์!

ฉันแน่ใจว่ามีวิธีที่ดีกว่าในการทำเช่นนี้ แต่นี่คือวิธีที่ฉันใช้

รับอินพุต$aและใช้สิ่งนั้นเพื่อรับ.IndexOfเหตุการณ์ในสตริงที่ยาวของการรวมกันของรัฐ / ชายแดน จัดเก็บข้อมูลที่เข้าสู่$xและสตริงเข้าสู่$bกระบวนการ จากนั้นก็เป็นคำสั่งที่ตรวจสอบไม่ว่าจะพบการแข่งขันและถ้าเป็นเช่นดัชนีหลักแล้วif exitมิฉะนั้นเราเป็นหนึ่งใน6รัฐหรือAKหรือHIดังนั้นเราจึงดำเนินการตรรกะบางอย่างเพื่อดูว่า$aเป็นของ0รัฐอย่างใดอย่างหนึ่งและลบหากจำเป็น ไม่ว่าในกรณีใดก็ตามที่เหลืออยู่บนไพพ์ไลน์


1

Python 3, 729 733ไบต์

ใช้อินพุตเป็นตัวย่อทางไปรษณีย์ นี่เป็นความพยายามครั้งแรกของฉันในการแข่งขันกอล์ฟและนี่เป็นเรื่องที่สั้นที่สุดที่ฉันคิดว่าฉันสามารถทำได้ด้วยวิธีชั่วร้ายนี้ ฉันรู้ว่ามันมีขนาดใหญ่ - มาลองคิดดูฉันอาจจะดีกว่าที่มีif-elseข้อความ แต่หลังจากเวลาและความพยายามทั้งหมดฉันต้องโพสต์มัน: D.

lambda s:sum((i-32)*96**j for j,i in enumerate(b'`*g$<#?wP\\.=)kuDbk$yvv\\D:Nh:cd/Pj, e*[_yXGz6lR<$jMo0qUU*7(Dua3-ThO}iX6VWRYDv=<K$8mVbYK9ld);TFB/m\'NE3ow4./pUsI5yJrwYrM4@e6\\kHJ%q8NA3>fb!~-rtwsRW=RBni}Y7T^gD\\IoxzJf.%|1.&4*"$%Q+).|8p(vcJ]cLRGUyC2eF:<Q4!_)y\\<`tr2A[z7re6OaR["2PRv\x7f,bRE [XrvtA<R<UlS23on?Byym&uy{XuB\x7fIMfh<y&waHElg-vk:4*on\x7f@?Ai5=2swfZSBF.PjkL{,|=,M<Bw"w,e@f`aKnmh\'xgg1#b4En\x7f+*\'g_ZRoeN*Q]mX\'>RoGc~ZP~e&{Hwo6bd<](hV)=l9#[f<Gj,#Ea!nJnL=9k"M,`bP2PsP6(eJoGEU>GA?,BpS}"RzzdMRtL[cre;\\tld^xT\':pry\'Nu_*R}eYg_U!Ld{p7<f:95lD]OBMX(r"Jg\'|%Cq"`Qy9g0aNrtYP9dnPRRr3\'yT(CE~\\&@5#tMLZ+a:V5NNXVp+Uy61s9$=Vb99(!ga7f7x}#=*]q.\x7f0R+f[*m:i^qe#D 8M&W\x7faGmCNCU9"~1Pj!]2r5 H>rYPqwfg4cFG*3-(z'))>>(5*int(s,36)-1850)&15

ฉันเพิ่งรู้ว่าฉันใช้ชื่อตัวแปรตัวอักษรสามตัวอันหรูหรา - 4 ไบต์ลงไป 400!


ยินดีต้อนรับสู่ PPCG! บางครั้งวิธีแก้ปัญหาที่ง่ายกว่านั้นสั้นกว่าดังที่แสดงโดยคำตอบของ Python อื่น ๆ : P
Stephen

ใช่ฉันรักความพยายามทั้งหมดที่คุณใส่ลงไปในการพิจารณาความสุขที่ผิดของคุณคือ "การทำให้รหัสของคุณกระชับมันอ่านไม่ออก" คุณจะเหมาะสมใน
Zacharý
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.