Wie viele Staaten grenze ich an?

20

Als ich jünger war, hatte ich eine große Karte der USA an der Wand gegenüber meinem Bett. Wenn mir langweilig war, starrte ich auf diese Karte und dachte über Sachen nach. Sachen wie das Vier-Farben-Theorem oder welcher Staat grenzte an die meisten anderen Staaten. Um mir beim Zählen ein wenig Kopfzerbrechen zu ersparen, werden Sie eine Zeitmaschine erfinden und mir sagen, wie viele Staaten an die Eingabe grenzen. Weil die Zeit knapp ist, muss sie so kurz wie möglich sein.

Die Aufgabe

Geben Sie bei einem der 50 US-Bundesstaaten entweder den vollständigen Namen oder die postalische Abkürzung auf dieser Seite ( archive.org mirror ) an, um wie viele Bundesstaaten es sich handelt. Das Folgende ist eine Zuordnung aller Eingaben für vollständige Zustandsnamen zu der Anzahl der benachbarten Zustände, die auf dieser Website zu finden sind .

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

Die Regeln

  • Ihr Programm kann entweder den vollständigen Statusnamen oder die Postleitzahl verarbeiten - es kann keine Kombination verwenden.
  • Sie können die Groß- / Kleinschreibung der Eingabe angeben, jedoch keine Leerzeichen in der Eingabe entfernen.
  • Sie müssen nicht mit Washington, DC oder irgendetwas anderem umgehen, das nicht zu den 50 Bundesstaaten gehört.
  • Die Anzahl der Zustände begrenzt wird nicht den Eingangszustand umfassen.
  • Das ist , also gewinnt die kürzeste Antwort in Bytes.

Ich weiß zwar, dass dies nur derjenige sein kann, der die beste Komprimierung aufweist oder das beste Regex-Muster pro Zahl findet. Wenn ich jedoch zu viele dieser Antworten erhalte, werde ich einer Antwort, die eine Karte der USA generiert und diese dazu verwendet, ein Kopfgeld gewähren Berechnen Sie die Anzahl der Grenzzustände.

Stephen
quelle
11
inb4Mathematica Built-in
DJMcMayhem
@ DJMcMayhem uh oh (hört sich auf den ersten Blick gut an, aber siehe Update ...)
Stephen
@StepHen Oh nein, ich wurde verdrängt! Ich habe gerade an einer Antwort gearbeitet, die dies beinhaltet ...;)
notjagan
Related
Geokavel
Dürfen wir DC behandeln / in unsere Zählungen einbeziehen, wenn wir das möchten?
Notjagan

Antworten:

17

Jelly , 73 65 Bytes

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

Probieren Sie es online!

Builtins? Wer braucht die? ( ʂÞiƬangewidert am Boden).

Übernimmt die Eingabe als vollständigen Namen, z "Idaho".

Wie es funktioniert

“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
fireflame241
quelle
Welchen Prozess haben Sie verwendet, um diese Liste zu erhalten?
Scott Milner
2
@ ScottMilner Ich lief OS%168auf jedem der Staaten, die direkt die Liste ergab. Ich fand die Konstante 168, indem ich alle Möglichkeiten mit weniger als 250 brachial erzwang und überprüfte, ob sie in der Lage waren, tatsächlich zwischen verschiedenen Anzahlen von Grenzen zu unterscheiden. 168arbeitete (unter anderem) und hatte den zusätzlichen Vorteil, dass nur 48Werte aufgrund von Kollisionen hart codiert werden mussten.
Fireflame241
18

Mathematica, 112 111 Bytes

-5 Byte danke an Mark S. und LegionMammal978 !

-22 Bytes (und bemerken ein Problem mit der Ausgabe) dank ngenisis !

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

Natürlich ist eine Mathematica dafür eingebaut. Schließt DC in die Zählung ein.

notjagan
quelle
3
Das fühlt sich schmutzig an, ist aber AdministrativeDivisionso unglaublich lang, dass Sie ein Byte mit Length [x = "AdministrativeDivision" ~ Entity ~ StringDelete [""] @ # ~ ToExpression [x <> "Data"] ~ "BorderingStates"] &
Mark S.
1
ToExpressionkann durch ersetzt werden Symbol, wenn ich mich richtig erinnere.
LegionMammal978
1
Sie müssen es auch nicht verwenden AdministrativeDivisionData, sondern übergeben es einfach "BorderingStates"als Argument an die Entität. egEntity["AdministrativeDivision","Alaska"]["BorderingStates"]
ngenisis
1
@ngenisis Ich habe das erste Problem behoben. Zum Glück wurden aufgrund Ihrer Vorschläge nicht so viele Bytes hinzugefügt. Das letztere Problem, das Sie in Bezug auf DC angesprochen haben, ist kein Problem, da ich OP gefragt habe, ob dies gültig ist und die Antwort ja lautet.
Notjagan
1
@notjagan Sie können Tr[1^...]anstelle von auch ein Length@...anderes Byte speichern.
Genisis
13

JavaScript (ES6), 115 113 Byte

Bearbeiten: 2 Bytes gespart, indem 2 weitere String-Optimierungen aus der Step Hen Python-Antwort ausgeliehen wurden . Ich habe sie bei meinem ersten Versuch verpasst.

Nimmt Postleitzahlen als Eingabe.

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

Wie?

Ein an die .match()Methode übergebenes Nicht-RegExp-Argument wird implizit in ein RegExp-Objekt konvertiert. Wir testen also den regulären Ausdruck /.\D*{{input}}/für unsere codierte Zeichenfolge. Dies entspricht einer Ziffer (1) , gefolgt von 0 bis N nicht-stelligen Zeichen, gefolgt von der Eingabe.

Beispiel: Wenn die Eingabe "NH"(New Hampshire) lautet, lautet die übereinstimmende Zeichenfolge "3CACTNDELANH". Wir behalten einfach das erste Zeichen dieser Zeichenfolge bei oder geben "6"standardmäßig zurück, wenn keine Übereinstimmung gefunden wurde.

(1): Das .stimmt eigentlich mit jedem Zeichen überein, aber die Zeichenfolge ist so aufgebaut, dass das, was vor einer Buchstabengruppe gefunden wird, immer eine Ziffer ist.

Demo


Hash-Version, 115 Bytes

Gleiches Eingabeformat.

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

Demo

Arnauld
quelle
Sie könnten eine Menge Bytes sparen, indem Sie diesen String
Downgoat
7

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

Probieren Sie es online!

-4 bytes dank isaacg

-10 Bytes dank ETHProductions

-1 byte dank notjagen

Standardmäßig wurden einige Bytes mehr als sechs gespeichert, wie dies bei anderen Antworten der Fall war.

TIO beinhaltet Tests. Übernimmt die Eingabe als Postleitzahl. Erzeugt eine Liste der Statusnamen als Zeichenfolgen für jeden Satz, die nach Möglichkeit zusammengequetscht werden (z. B. WVVAgespeichert als WVA). Die Lambda-Funktion ruft den Index in der Liste ab, dessen Zeichenfolge die Eingabe enthält. Es gibt einen Weg, wie ich über den Golf den Körper der Funktion nicht kenne. [0]Ausgabe als Liste mit einer Ganzzahl - Addiere an das Ende des Lambdas, um als Ganzzahl auszugeben.

Stephen
quelle
Sie können es auch nur leinmal verwenden, Sie können es also genauso gut inline schreiben.
isaacg
@ETHproductions yep, danke
Stephen
@isaacg danke, keine Ahnung, warum ich das nicht gesehen habe
Stephen
-1 Byte durch Neuordnung der Position von Texas.
Notjagan
@notjagan danke, habe das verpasst
Stephen
4

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

Probieren Sie es 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

Ich habe dies geschrieben, bevor mir klar wurde, dass Sie die Eingabe als Postleitzahlen verwenden können. Ich bin mir nicht sicher, ob das tatsächlich kürzer ist oder nicht :shrug:. Diese Antwort verwendet Regex, um nach bestimmten Zuständen zu suchen, und ändert dann die Eingabe in eine bestimmte Zahl, wenn sie übereinstimmt. Da die Anzahl der getesteten Status jedoch steigt, sinkt die kleinste Suche, die wir verwenden können. Zum Beispiel können wir nicht suchen, Cda dies mit Coloradound übereinstimmt California. (Wie auch Conneticut und The Carolinas) Nachdem wir jedoch für jeden Bundesstaat mit mehr als drei Grenzen getestet haben, können wir nur nach Starts mit C suchen, da diese nicht mehr mit den vorherigen übereinstimmen.

Ein paar Testfälle könnten falsch sein, da ich nicht die Zeit habe, alle zu testen. Lassen Sie mich wissen, wenn Sie falsche Ausgaben finden. :)

DJMcMayhem
quelle
3

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 Verkettung. Ich bin mir sicher, dass es dafür einen besseren Weg gibt.

Dank eines Vorschlags von jemandem von Discord wird standardmäßig 6 ausgegeben, die häufigste Anzahl von Grenzstaaten. 183 Bytes bis 151 Bytes.

Ein Kommentator wies darauf hin, dass dies für AK und HI fehlschlägt, daher habe ich zwei Bytes hinzugefügt, um das Problem zu beheben. 151 bis 153 Bytes.

Eli Richardson
quelle
1
Ich bin mir ziemlich sicher, dass dies fehlschlägt AKund HIweil 0||66 ausgewertet wird, was eine falsche Ausgabe ist.
Kamoroso94
@ kamoroso94 Ich habe meinen Code aktualisiert. Wenn Sie der Meinung sind, dass es eine bessere Lösung gibt, lassen Sie es mich wissen.
Eli Richardson
3

05AB1E , 78 72 Bytes

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

Probieren Sie es 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.

Dies funktioniert NUR, weil die Reihenfolge der Statusabkürzungen das Auftreten des Status NO bei der Überlappung zwischen den Status zulässt:

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

Es hat eine Weile gedauert, bis die Anordnung richtig war ... Dann erhalten wir das richtige Ergebnis, indem wir die Eingabe aufteilen und die Leerzeichen im ersten Teil zählen.


Wenn ich den "Standardwert 6" aus den anderen Antworten stehle, erhalte ich 65 Bytes:

05AB1E , 65 Bytes

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

Probieren Sie es online!

Magische Kraken-Urne
quelle
Took awhile to get the arrangement right-> oh, ich denke, du hättest es von meiner Antwort kopieren können (wenn ich das richtig lese)
Stephen
@Stephen Naja, ich habe keine Ahnung von anderen Posts, wenn man sich den "sucky hashing algorithm" ansieht, habe ich eine Stunde lang mit zufälligen Ideen für das Hashing rumgespielt und dann über die Leerzeichen nachgedacht, was ich nicht konnte schlagen Sie diese Implementierung, egal wie stark ich versuchte.
Magic Octopus Urn
@Stephen jetzt, da ich deine lese, wünschte ich, ich hätte auch darüber nachgedacht, standardmäßig 6 xD zu verwenden.
Magic Octopus Urn
1
Ich habe nicht daran gedacht, ich habe es zuerst bei dieser Antwort gesehen , also nimm es
Stephen
2

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

Probieren Sie es online! Hat jemand Regex gesagt? Bearbeiten: 1 Byte dank @Arnauld gespeichert.

Neil
quelle
2

JavaScript (ES6), 195 Byte

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

Eine Reihe von regulären Ausdrücken, die sich auf den vollständigen Namen des Staates beziehen.

Testfälle:

Rick Hitchcock
quelle
2

Jelly ,  61  59 Bytes

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

Ein vollständiges Programm, das den vollständigen Statusnamen verwendet und das Ergebnis druckt (als monadische Verknüpfung gibt es entweder eine Liste mit einer einzelnen Nummer oder die Nummer 6 zurück).

Probieren Sie es online! oder sehen Sie sich eine Testsuite an .

Wie?

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

ist eine Liste von Listen mit Codeseitenindizes:

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

und wird wie folgt angezeigt “ ... ‘:

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
Jonathan Allan
quelle
1

Excel VBA, 177 154 147 Bytes

Anonyme VBE-Funktion, die Eingaben des erwarteten Typs Stringfür die Postleitzahl eines Bundesstaates aus dem Bereich entgegennimmt [A1]und eine IntegerZahl zurückgibt , die die Anzahl der Bundesstaaten darstellt, die an diesen Bundesstaat angrenzen.

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)

Vorherige Versionen

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

Zur besseren Lesbarkeit formatiert

[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)]
Taylor Scott
quelle
1

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)

Beginnen wir mit dem Einfachen leicht optimierten, fest codierten Antwort. Verwendet die Postleitzahl als Eingabe.

-145 Bytes dank bfontaine.

Pfeffer
quelle
4
Sie können fast 100 Bytes einsparen, indem Sie dict(MO=8,TN=8,...)anstelle von verwenden {'MO':8,'TN':8,...}. Sie können dann fast 50 Bytes sparen, .get(a,6)indem Sie die Zustände verwenden und entfernen, die an 6 andere Zustände angrenzen. Mit diesen beiden Tricks komme ich auf 219 runter.
bfontaine
@Mitch sparen Sie etwas mehr durch die Verwendung von Speicherplatz anstelle von .und zu tun split()(ich denke)
Stephen
@Mitch brauchst du überhaupt die Stunden? Gibt es eine Methode, um eine Liste in Zweiergruppen aufzuteilen?
Magic Octopus Urn
Ich glaube, Sie können mit ein paar Bytes mehr sparen dict((i[0]+i[1],int(i[-1])) for i in zip(*[iter("WA2WI4WV5FL2...")]*3)). Außerdem könnten Sie wahrscheinlich intdarauf verzichten, wenn die Ausgabe als Zeichenfolge zulässig ist.
Izaak van Dongen
Eigentlich, wenn Sie das Auspacken verwenden, könnten Sie tun dict((a+b,int(c)) for a,b,c in zip(*[iter("WA2WI4WV5...")]*3)). Entschuldigung, ich bin ein bisschen unentschlossen: D
Izaak van Dongen
1

PowerShell , 187 Byte

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

Probieren Sie es online!

Ich bin sicher, es gibt einen besseren Weg, dies zu tun, aber hier ist der Ansatz, den ich mir ausgedacht habe.

Übernimmt Eingaben $aund verwendet diese, um das .IndexOfVorkommen in der langen Zeichenfolge von Status- / Grenzkombinationen zu ermitteln. Speichert das in $xund die Zeichenfolge in $bden Prozess. Dann geht eine ifAnweisung ein, die prüft, ob sie eine Übereinstimmung gefunden hat, und wenn ja, die Ziffer indiziert und dann exit. Andernfalls sind wir einer der 6Zustände oder AKoder HI, also führen wir eine Logik durch, um festzustellen, ob $aeiner der 0Zustände vorliegt, und subtrahieren sie gegebenenfalls. In jedem Fall verbleibt dies in der Pipeline und die Ausgabe ist implizit.

AdmBorkBork
quelle
1

Python 3, 729 733 Bytes

Nimmt Eingaben als postalische Abkürzung entgegen. Dies ist mein erster Versuch einer Golfherausforderung, und dies ist ungefähr der kürzeste, den ich mit dieser höllischen Herangehensweise erreichen kann. Ich weiß, es ist gewaltig - wenn ich es mir überlege, hätte ich wahrscheinlich besser mit if-elseAussagen abgeschnitten , aber nach all der Zeit und Mühe musste ich es posten: 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

Mir ist gerade klar geworden, dass ich den Luxus eines dreistelligen Variablennamens in Anspruch genommen hatte - 4 Bytes weniger, noch 400!

Izaak van Dongen
quelle
Willkommen bei PPCG! Manchmal sind einfachere Lösungen kürzer, wie die anderen Antworten von Python zeigen: P
Stephen
Ja, ich
finde die Mühe großartig