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 Code-Golf , 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.
inb4
Mathematica Built-inAntworten:
Jelly ,
7365 BytesProbieren Sie es online!
Builtins? Wer braucht die? (
ʂÞiƬ
angewidert am Boden).Übernimmt die Eingabe als vollständigen Namen, z
"Idaho"
.Wie es funktioniert
quelle
OS%168
auf 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.168
arbeitete (unter anderem) und hatte den zusätzlichen Vorteil, dass nur48
Werte aufgrund von Kollisionen hart codiert werden mussten.Mathematica,
112111 Bytes-5 Byte danke an Mark S. und LegionMammal978 !
-22 Bytes (und bemerken ein Problem mit der Ausgabe) dank ngenisis !
Natürlich ist eine Mathematica dafür eingebaut. Schließt DC in die Zählung ein.
quelle
AdministrativeDivision
so unglaublich lang, dass Sie ein Byte mit Length [x = "AdministrativeDivision" ~ Entity ~ StringDelete [""] @ # ~ ToExpression [x <> "Data"] ~ "BorderingStates"] &ToExpression
kann durch ersetzt werdenSymbol
, wenn ich mich richtig erinnere.AdministrativeDivisionData
, sondern übergeben es einfach"BorderingStates"
als Argument an die Entität. egEntity["AdministrativeDivision","Alaska"]["BorderingStates"]
Tr[1^...]
anstelle von auch einLength@...
anderes Byte speichern.JavaScript (ES6),
115113 ByteBearbeiten: 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.
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
Code-Snippet anzeigen
Hash-Version, 115 Bytes
Gleiches Eingabeformat.
Demo
Code-Snippet anzeigen
quelle
Python 3 ,
168154153137 BytesProbieren 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.
WVVA
gespeichert alsWVA
). 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.quelle
l
einmal verwenden, Sie können es also genauso gut inline schreiben.V , 143 Bytes
Probieren Sie es online!
Hexdump:
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,C
da dies mitColorado
und übereinstimmtCalifornia
. (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. :)
quelle
JavaScript, 153 Bytes
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.
quelle
AK
undHI
weil0||6
6 ausgewertet wird, was eine falsche Ausgabe ist.05AB1E ,
7872 BytesProbieren Sie es online!
Dies funktioniert NUR, weil die Reihenfolge der Statusabkürzungen das Auftreten des Status NO bei der Überlappung zwischen den Status zulässt:
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
Probieren Sie es online!
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)Retina ,
106105 BytesProbieren Sie es online! Hat jemand Regex gesagt? Bearbeiten: 1 Byte dank @Arnauld gespeichert.
quelle
JavaScript (ES6), 195 Byte
Eine Reihe von regulären Ausdrücken, die sich auf den vollständigen Namen des Staates beziehen.
Testfälle:
Code-Snippet anzeigen
quelle
Jelly ,
6159 BytesEin 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?
ist eine Liste von Listen mit Codeseitenindizes:
und wird wie folgt angezeigt
“ ... ‘
:quelle
Excel VBA,
177154147 BytesAnonyme VBE-Funktion, die Eingaben des erwarteten Typs
String
für die Postleitzahl eines Bundesstaates aus dem Bereich entgegennimmt[A1]
und eineInteger
Zahl zurückgibt , die die Anzahl der Bundesstaaten darstellt, die an diesen Bundesstaat angrenzen.Vorherige Versionen
154 Bytes:
177 Bytes:
Zur besseren Lesbarkeit formatiert
quelle
Python 2,
363218 BytesBeginnen wir mit dem
Einfachenleicht optimierten, fest codierten Antwort. Verwendet die Postleitzahl als Eingabe.-145 Bytes dank bfontaine.
quelle
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..
und zu tunsplit()
(ich denke)dict((i[0]+i[1],int(i[-1])) for i in zip(*[iter("WA2WI4WV5FL2...")]*3))
. Außerdem könnten Sie wahrscheinlichint
darauf verzichten, wenn die Ausgabe als Zeichenfolge zulässig ist.dict((a+b,int(c)) for a,b,c in zip(*[iter("WA2WI4WV5...")]*3))
. Entschuldigung, ich bin ein bisschen unentschlossen: DPowerShell , 187 Byte
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
$a
und verwendet diese, um das.IndexOf
Vorkommen in der langen Zeichenfolge von Status- / Grenzkombinationen zu ermitteln. Speichert das in$x
und die Zeichenfolge in$b
den Prozess. Dann geht eineif
Anweisung ein, die prüft, ob sie eine Übereinstimmung gefunden hat, und wenn ja, die Ziffer indiziert und dannexit
. Andernfalls sind wir einer der6
Zustände oderAK
oderHI
, also führen wir eine Logik durch, um festzustellen, ob$a
einer der0
Zustände vorliegt, und subtrahieren sie gegebenenfalls. In jedem Fall verbleibt dies in der Pipeline und die Ausgabe ist implizit.quelle
Python 3, 729
733BytesNimmt 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-else
Aussagen abgeschnitten , aber nach all der Zeit und Mühe musste ich es posten: D.Mir ist gerade klar geworden, dass ich den Luxus eines dreistelligen Variablennamens in Anspruch genommen hatte - 4 Bytes weniger, noch 400!
quelle