Gaano karaming mga estado ang hangganan ko?

Step Hen 08/23/2017. 13 answers, 2.433 views
code-golf number

Noong mas bata pa ako, nagkaroon ako ng isang malaking mapa ng US na nakalagay sa aking dingding sa kabuuan ng aking higaan. Kapag ako ay nababato, Gusto ko tumitig sa na mapa at mag-isip tungkol sa mga bagay-bagay. Bagay-bagay tulad ng four-color-theorem, o kung saan ang estado ay may bordered ang iba pang mga estado. Upang i-save ang mas bata sa akin ang ilang mga brainpower sa pagbilang, ikaw ay mag- imbento ng isang oras machine at sabihin sa akin kung gaano karaming mga estado hangganan ang input. Sapagkat ang oras ay maselan, kailangan itong maging maikli hangga't maaari.

Ang gawain

Bibigyan ng isa sa 50 estado ng Estados Unidos, alinman sa pamamagitan ng buong pangalan nito o sa pamamagitan ng pagpapalabas ng koreo nito, tulad ng makikita sa pahinang ito ( archive.org mirror ), ibalik ang bilang ng mga estado na hangganan nito. Ang sumusunod ay isang pagmamapa ng lahat ng mga input para sa buong pangalan ng estado sa bilang ng mga estado na katabi, na matatagpuan sa website na ito .

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 

Mga panuntunan

  • Maaaring hawakan ng iyong programa ang buong pangalan ng estado o ang postal code - hindi ito maaaring gumamit ng isang kumbinasyon.
  • Maaari mong tukuyin ang kaso ng input, ngunit hindi mo maaaring alisin ang whitespace sa input.
  • Hindi mo kailangang pangasiwaan ang Washington, DC, o anumang bagay na hindi isa sa 50 estado.
  • Ang bilang ng mga estado na bordered ay not kasama ang input ng estado.
  • Ito ay , kaya ang pinakamaikling sagot sa mga byte na panalo.

Habang alam ko ito ay maaaring maging sinuman ang may pinakamainam na compression o nakakahanap ng pinakamahusay na pattern ng regex sa bawat numero, kung nakakuha ako ng masyadong maraming mga sagot, magpapadala ako ng isang bounty sa isang sagot na bumubuo ng isang mapa ng US at ginagamit iyon sa kalkulahin ang bilang ng mga karatig na estado.

5 Comments
11 DJMcMayhem 08/20/2017
inb4 Mathematica Built-in
Step Hen 08/20/2017
@DJMcMayhem uh oh (magandang tunog sa una, ngunit makita ang pag-update ...)
notjagan 08/20/2017
@StepHen Oh no, ako ay na-ousted! Ako ay nagtatrabaho sa sagot na ngayon na nagsasama ito ...;)
notjagan 08/20/2017
Maaari naming hawakan DC / isama ito sa aming mga bilang kung mangyaring namin kaya?

13 Answers


notjagan 08/21/2017.

Mathematica, 112 111 bytes

-5 byte salamat sa Mark S. at LegionMammal978 !

-22 bytes (at napansin ang isang problema sa output) salamat sa ngenisis !

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

Siyempre, may isang Mathematica builtin para dito. May kasamang DC sa count.

5 comments
2 Mark S. 08/20/2017
Ito ay nararamdaman na marumi, ngunit ang AdministrativeDivision ay napakalaki na mahaba na gusto mong i-save ang isang byte na may Haba [x = "AdministrativeDivision" ~ Entity ~ StringDelete [""] @ # ~ ToExpression [x <> "Data"] ~ "BorderingStates"] &
1 LegionMammal978 08/20/2017
ToExpression ay maaaring mapalitan ng Symbol , kung naaalala ko nang tama.
1 ngenisis 08/21/2017
Gayundin hindi mo kailangang gamitin ang AdministrativeDivisionData , ipasa lamang ang "BorderingStates" bilang argumento sa entity; hal Entity["AdministrativeDivision","Alaska"]["BorderingStates"]
1 notjagan 08/21/2017
@ngenisis Inilapat ko ang pag-ayos sa unang problema; sa kabutihang-palad, dahil sa iyong mga suhestiyon, hindi ito nagdadagdag ng maraming bytes. Ang huling problema na iyong nabanggit patungkol sa DC ay hindi isang isyu na tinanong ko ang OP kung ito ay wasto at ang sagot ay oo.
1 ngenisis 08/21/2017
@notjagan Maaari mo ring gamitin Tr[1^...] sa lugar ng Length@... upang i-save ang isa pang byte.

fireflame241 08/20/2017.

Halaya , 73 65 bytes

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

Subukan ito online!

Builtins? Sino ang nangangailangan ng mga ito? ( ʂÞiƬ on)

Dadalhin ang input bilang buong pangalan, tulad ng "Idaho" .

How it Works

“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 
2 comments
Scott Milner 08/20/2017
Anong proseso ang ginamit mo upang makuha ang listahang iyon?
2 fireflame241 08/20/2017
@ScottMilner Pinatatakbo ko ang OS%168 sa bawat isa sa mga estado, na direktang nagbigay ng listahan. Natagpuan ko ang pare-pareho 168 sa pamamagitan ng brute-pagpwersa sa lahat ng mga posibilidad na mas mababa sa 250, sinuri ang bawat isa sa kanila dahil sa pagiging tunay na pagkakaiba sa pagitan ng iba't ibang mga bilang ng mga hangganan. 168 nagtrabaho (bukod sa ilang mga iba pa) at nagkaroon ng dagdag na benepisyo ng pagkakaroon lamang ng hard-code 48 halaga dahil sa mga banggaan.

Arnauld 08/20/2017.

JavaScript (ES6), 115 113 bytes

I-edit: nai-save na 2 bytes sa pamamagitan ng paghiram ng 2 higit pang mga pag-optimize ng string mula sa Hakbang na Hakbang ng hininga ng Python . Naiwan ako sa kanila sa aking unang pagtatangka.

Dadalhin ang mga postal code bilang input.

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

Paano?

Ang isang di-RegExp na argumento na ipinasa sa .match() paraan ay .match() sa isang bagay na RegExp. Kaya, sinusubok namin ang regular na expression /.\D*NO sa aming naka-encode na string. Ito ay tumutugma sa isang digit (1) , na sinusundan ng 0 hanggang N non-digit na mga character, na sinusundan ng input.

Halimbawa: kung ang input ay "NH" (New Hampshire), ang tugmang string ay "3CACTNDELANH" . Itinatakda lamang namin ang unang karakter ng string na ito, o ibalik ang "6" default kung walang tugma.

(1): Ang . ay aktwal na tumutugma sa anumang karakter, ngunit ang string ay binuo sa isang paraan na kung ano ang matatagpuan bago ang isang pangkat ng mga titik ay palaging isang digit.

Demo

 let f =

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

const o = {
  8:['MO', 'TN'],
  7:['CO', 'KY'],
  6:['AR', 'ID', 'IL', 'IA', 'NE', 'NY', 'OK', 'PA', 'SD', 'UT', 'WY'],
  5:['AZ', 'GA', 'MA', 'MI', 'MN', 'NV', 'NM', 'OH', 'VA', 'WV'],
  4:['AL', 'IN', 'KS', 'MD', 'MS', 'MT', 'NC', 'OR', 'TX', 'WI'],
  3:['CA', 'CT', 'DE', 'LA', 'NH', 'NJ', 'ND', 'RI', 'VT'],
  2:['FL', 'SC', 'WA'],
  1:['ME'],
  0:['AK', 'HI']
};

for(let n = 8; n >= 0; n--) {
  o[n].forEach(s => {
    let res = f(s);
    console.log(s + ' -> ' + res + ' ' + (res == n ? 'OK' : 'FAIL'));
  });
} 


Hash na bersyon, 115 bytes

Parehong input format.

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

Demo

 let f =

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

const o = {
  8:['MO', 'TN'],
  7:['CO', 'KY'],
  6:['AR', 'ID', 'IL', 'IA', 'NE', 'NY', 'OK', 'PA', 'SD', 'UT', 'WY'],
  5:['AZ', 'GA', 'MA', 'MI', 'MN', 'NV', 'NM', 'OH', 'VA', 'WV'],
  4:['AL', 'IN', 'KS', 'MD', 'MS', 'MT', 'NC', 'OR', 'TX', 'WI'],
  3:['CA', 'CT', 'DE', 'LA', 'NH', 'NJ', 'ND', 'RI', 'VT'],
  2:['FL', 'SC', 'WA'],
  1:['ME'],
  0:['AK', 'HI']
};

for(let n = 8; n >= 0; n--) {
  o[n].forEach(s => {
    let res = f(s);
    console.log(s + ' -> ' + res + ' ' + (res == n ? 'OK' : 'FAIL'));
  });
} 

1 comments
Downgoat 08/21/2017
Maaari mong i-save ang isang pulutong ng mga bytes sa pamamagitan ng btoaing na String

Step Hen 08/20/2017.

Python 3 , 168 154 153 137 bytes

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

Subukan ito online!

-4 bytes thanks to isaacg

-10 bytes thanks to ETHProductions

-1 byte thanks to notjagen

Naka-save ng higit pang mga byte sa pamamagitan ng pag-default sa anim, tulad ng iba pang mga sagot na nagawa.

Ang TIO ay nagsasama ng mga pagsusulit. Dadalhin ang input bilang postal code. Binubuo ang isang listahan ng mga pangalan ng estado bilang mga string para sa bawat hanay, pinapalitan magkasama kung posible (halimbawa, ang WVVA ay naka-imbak bilang WVA ). Ang lambda function ay makakakuha ng index sa listahan na ang string ay naglalaman ng input. Maaaring may isang paraan na hindi ko alam tungkol sa golf ang katawan ng function. Mga Output bilang isang listahan na naglalaman ng isang integer - idagdag [0] sa dulo ng lambda sa output bilang integer.

5 comments
isaacg 08/20/2017
Gayundin, gumamit ka lamang ng isang beses, kaya maaari mo ring inline ito.
Step Hen 08/20/2017
@ETHproductions yep, thanks
Step Hen 08/20/2017
@ iacacg salamat, dunno kung bakit hindi ko nakita iyon
notjagan 08/20/2017
-1 byte sa pamamagitan ng pag-aayos ng posisyon ng Texas.
Step Hen 08/20/2017
@ notjagan salamat, napalampas na

DJMcMayhem 08/20/2017.

V , 143 bytes

ç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 

Subukan ito online!

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 

Isinulat ko ito bago ko natanto na maaari mong gawin ang input bilang mga postal code. Hindi ako sigurado kung talagang mas maikli o hindi :shrug: Ang sagot na ito ay gumagamit ng regex upang maghanap para sa ilang mga estado, at pagkatapos ay baguhin ang input sa isang tiyak na numero kung ito ay tumutugma. Gayunpaman, habang ang bilang ng mga estado na sinubok namin laban ay napupunta, ang pinakamaliit na paghahanap na maaari naming gamitin ay bumaba. Kaya halimbawa, hindi kami maaaring maghanap ng C dahil iyon ay tutugma sa Colorado at California . (Gayundin ang Conneticut at The Carolinas) Gayunpaman, sa sandaling sinubukan namin ang bawat estado na may higit sa 3 karatig, maaari lamang namin maghanap ng mga starts with C dahil hindi ito maaaring tumugma sa isang naunang isa.

Ang ilang mga kaso ng pagsusulit ay maaaring mali dahil wala akong panahon upang subukan ang lahat ng ito. Ipaalam sa akin kung nakakita ka ng anumang hindi tamang mga output. :)


Eli R 08/20/2017.

JavaScript, 153 bytes

 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) 

Variable chaining. Sigurado ako na may isang mas mahusay na paraan upang gawin ito kahit na.

Salamat sa isang mungkahi mula sa isang tao mula sa Discord ang mga default na output sa 6, ang pinaka-karaniwang bilang ng mga bordered estado. 183 bytes sa 151 bytes.

Isang komentarista ang itinuturo na nabigo ito para sa AK at HI, kaya nagdagdag ako ng dalawang byte upang ayusin ang isyu. 151 hanggang 153 bytes.

2 comments
1 kamoroso94 08/20/2017
Ako ay sigurado na nabigo ito para sa AK at HI dahil 0||6 sinusuri sa 6, na kung saan ay hindi tamang output.
Eli R 08/20/2017
@ kamoroso94 Na-update ko ang code ko, kung sa tingin mo may mas mahusay na ayusin ipaalam sa akin.

Neil 08/20/2017.

Retina , 106 105 bytes

MO|TN
8
CO|KY
7
AK|HI
0
ME
1
FL|WA
2
[CDLR].|N[HJD]|VT
3
.[CSX]|AL|IN|MD|MT|OR|WI
4
[GMV].|.[HMVZ]
5
..
6 

Subukan ito online! Mayroon bang sabihin ng regex? I-edit: Nai-save na 1 byte salamat sa @ Arnauld.


Rick Hitchcock 08/21/2017.

JavaScript (ES6), 195 bytes

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 

Isang serye ng mga regular na expression, na gumagana sa buong pangalan ng estado.

Test cases:

 var states = ['Alabama','Alaska','Arizona','Arkansas','California','Colorado','Connecticut','Delaware',
'Florida','Georgia','Hawaii','Idaho','Illinois','Indiana','Iowa','Kansas',
'Kentucky','Louisiana','Maine','Maryland','Massachusetts','Michigan','Minnesota',
'Mississippi','Missouri','Montana','Nebraska','Nevada','New Hampshire','New Jersey',
'New Mexico','New York','North Carolina','North Dakota','Ohio','Oklahoma','Oregon',
'Pennsylvania','Rhode Island','South Carolina','South Dakota','Tennessee','Texas','Utah',
'Vermont','Virginia','Washington','West Virginia','Wisconsin','Wyoming'];

let f=

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

for(i = 0 ; i <= 8 ; i++) {
  s = []
  states.forEach(st => f(st) == i && s.push(st))
  console.log(i + ' bordering states: ' + s.join(', '))
} 


Magic Octopus Urn 08/22/2017.

05AB1E , 78 72 bytes

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

Subukan ito online!


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

Gumagana ito LAMANG dahil ang pagkakasunud-sunod ng mga pagdadaglat ng estado ay nagbibigay-daan para sa WALANG estado na mangyari sa magkakapatong sa pagitan ng mga estado:

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 

Kumuha ng ilang sandali upang makuha ang tamang pag-aayos ... Pagkatapos, sa pamamagitan ng paghahati sa input at pagbibilang ng mga puwang sa unang bahagi, nakuha namin ang tamang resulta.


Dapat kong sipsipin sa pagsulat na na-optimize ang hashing algorithm dahil:

Ç.¥0KP233%>255B"Úε v Û’н γΩʒ68åYa] ιÑ߶ºzžj@! f#∞R,—&₅ÐB Æ₃è8ĀEɨS1‡ s¦ Ø_"s¡¬ð¢ 

Was a idiotic attempt ...


Taylor Scott 08/20/2017.

Excel VBA, 177 154 147 Bytes

Ang hindi kilalang function ng VBE na tumatagal ng input, ng inaasahang uri ng String kumakatawan sa postal code ng estado, mula sa range [A1] , at nagbalik ng isang Integer na kumakatawan sa bilang ng mga estado na hangganan na estado.

 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) 

Nakaraang bersyon

154 Bytes:

 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 Bytes:

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

Na-format para sa pagiging madaling mabasa

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

ppperry 08/21/2017.

Python 2, 363 218 bytes

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) 

Magsimula tayo sa simpleng bahagyang na-optimize na hardcoded na sagot. Dadalhin ang postal code bilang input.

-145 bytes salamat sa bfontaine.

5 comments
4 bfontaine 08/20/2017
Maaari mong i-save ang halos 100 bytes gamit ang dict(MO=8,TN=8,...) halip ng {'MO':8,'TN':8,...} . Pagkatapos ay maaari mong i-save ang halos 50 bytes sa pamamagitan ng paggamit .get(a,6) at pag-alis sa mga estado na hangganan ng 6 iba pang mga estado. Magagawa kong bumaba sa 219 kasama ang dalawang trick na iyon.
Step Hen 08/21/2017
@Mitch i-save ang ilang higit pa sa pamamagitan ng paggamit ng espasyo sa halip ng . at paggawa ng split() (sa palagay ko)
Magic Octopus Urn 08/21/2017
@Mitch mo kahit na kailangan ang mga panahon? Mayroon bang paraan upang hatiin ang isang listahan sa mga grupo ng 2?
Izaak van Dongen 08/22/2017
Naniniwala ako na maaari mong i-save ang ilang mga byte gamit ang dict((i[0]+i[1],int(i[-1])) for i in zip(*[iter("WA2WI4WV5FL2...")]*3)) . Gayundin maaari mong marahil iwanan ang int out na kung ito ay pinapayagan na magkaroon ng output bilang isang string.
Izaak van Dongen 08/22/2017
Talaga kung gumamit ka ng pag-unpack na maaari mong gawin dict((a+b,int(c)) for a,b,c in zip(*[iter("WA2WI4WV5...")]*3)) . Paumanhin, ako ay medyo hindi kataka-taka: D

AdmBorkBork 08/21/2017.

PowerShell , 187 bytes

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

Subukan ito online!

Sigurado ako na may isang mas mahusay na paraan upang gawin ito, ngunit narito ang diskarte ko dumating up sa.

Dadalhin ang input $a at .IndexOf iyon upang makuha ang. .IndexOf ang pangyayari nito sa mahabang string ng mga kumbinasyon ng estado / hangganan. Ang mga tindahan na sa $x at ang string sa $b sa proseso. Pagkatapos ay pumupunta sa isang if pahayag na sumusuri kung ito ay natagpuan ng isang tugma, at kung kaya index sa digit at pagkatapos ay exit . Kung hindi man, isa kami sa 6 estado o AK o HI , kaya gumanap kami ng ilang lohika upang makita kung ang $a ay alinman sa 0 estado, at ibawas kung kinakailangan. Sa anumang kaso, na naiwan sa pipeline at output ay pahiwatig.


Izaak van Dongen 08/22/2017.

Python 3, 729 733 bytes

Dadalhin ang input bilang isang pagpapalabas ng postal. Ito ang aking unang pagtatangka sa isang hamon sa paglalaro, at ito ay tungkol sa pinakamaikling tingin ko na maaari kong makuha sa ganitong masasamang diskarte. Alam kong napakalaking ito - isipin ko na malamang na ako ay mas mahusay na may mga pahayag if-else , ngunit pagkatapos ng lahat ng oras at pagsisikap na kailangan kong i-post ito: 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=fb!~-rtwsRW=RBni}Y7T^gD\\IoxzJf.%|1.&4*"$%Q+).|8p(vcJ]cLRGUyC2eF:RoGc~ZP~e&{Hwo6bd<](hV)=l9#[fGA?,BpS}"RzzdMRtL[cre;\\tld^xT\':pry\'Nu_*R}eYg_U!Ld{p7rYPqwfg4cFG*3-(z'))>>(5*int(s,36)-1850)&15 

Napagtanto ko lang na kinuha ko ang luho ng isang tatlong pangalan ng variable na titik - 4 na byte pababa, 400 upang pumunta!

3 comments
Step Hen 08/21/2017
Maligayang Pagdating sa PPCG! Minsan ang mas simpleng mga solusyon ay mas maikli, tulad ng ipinapakita ng iba pang mga sagot ng Python: P
Zacharý 08/21/2017
Oo, mahal ko ang lahat ng pagsisikap na iyong inilagay sa bagay na ito, isinasaalang-alang ang iyong nagkasala na kasiyahan ay "ginagawang madali ang iyong code na ito ay hindi mabasa", magkakaroon ka ng tama.
Izaak van Dongen 08/21/2017
Salamat guys!

Related questions

Hot questions

Language

Popular Tags