Geben Sie den US-Bundesstaat aus, dessen Hauptstadt es ist, wenn es sich um eine Bundesstaatshauptstadt handelt, die Hauptstadt des Bundesstaats, wenn es sich um einen Bundesstaat handelt, oder Arstotzka
wenn es keiner ist.
Beispiele:
Austin -> Texas
Alaska -> Juneau
The Nineteenth Byte -> Arstotzka
Alle Hauptstädte und ihre jeweiligen Staaten:
Baton Rouge, Louisiana
Indianapolis, Indiana
Columbus, Ohio
Montgomery, Alabama
Helena, Montana
Denver, Colorado
Boise, Idaho
Austin, Texas
Boston, Massachusetts
Albany, New York
Tallahassee, Florida
Santa Fe, New Mexico
Nashville, Tennessee
Trenton, New Jersey
Jefferson, Missouri
Richmond, Virginia
Pierre, South Dakota
Harrisburg, Pennsylvania
Augusta, Maine
Providence, Rhode Island
Dover, Delaware
Concord, New Hampshire
Montpelier, Vermont
Hartford, Connecticut
Topeka, Kansas
Saint Paul, Minnesota
Juneau, Alaska
Lincoln, Nebraska
Raleigh, North Carolina
Madison, Wisconsin
Olympia, Washington
Phoenix, Arizona
Lansing, Michigan
Honolulu, Hawaii
Jackson, Mississippi
Springfield, Illinois
Columbia, South Carolina
Annapolis, Maryland
Cheyenne, Wyoming
Salt Lake City, Utah
Atlanta, Georgia
Bismarck, North Dakota
Frankfort, Kentucky
Salem, Oregon
Little Rock, Arkansas
Des Moines, Iowa
Sacramento, California
Oklahoma City, Oklahoma
Charleston, West Virginia
Carson City, Nevada
Regeln
- Keine eingebauten oder Bibliotheken / Module, die eine Zuordnung von Bundesstaaten zu Hauptstädten oder Hauptstädten zu Bundesstaaten oder eine Liste von Hauptstädten und / oder Bundesstaaten bereitstellen (z. B. die
CityData
eingebaute Mathematica )
- Es gelten Standardlücken
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes!
Bestenliste
Das Stapel-Snippet am Ende dieses Beitrags generiert die Rangliste aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamtrangliste.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
## Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
## Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Snippet angezeigt wird:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table><script>var QUESTION_ID = 64254; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 45941; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
Antworten:
Pyth,
597596590Der obige Hexdump kann mit umgekehrt werden
xxd -r -c 17
. Versuchen Sie es online im Pyth-Compiler .Idee
Wir codieren die erforderlichen Informationen wie folgt:
Alle Namen wurden in Kleinbuchstaben umgewandelt, Leerzeichen durch q ersetzt und Namen durch Zeilenvorschübe getrennt.
Alle Hauptstädte werden zuerst aufgelistet (in einer Reihenfolge, die es geschafft hat, die Byteanzahl zu minimieren). Dann werden die entsprechenden Zustände in umgekehrter Reihenfolge aufgelistet. Schließlich wird Arstotzka angehängt.
Auf diese Weise entspricht das Kapital am Index i dem Kapital am Index - (x + 2) . Außerdem hat eine ungültige Eingabe entweder den Index 100 ( Arstotzka ) oder -1 (nicht gefunden) und - (100 + 2) ≡ -1 ≡ - (- 1 + 2) mod 101 . Dieses Layout verhindert, dass Arstotzka ein Sonderfall ist, ohne dass der Liste etwas vorangestellt oder angehängt wird.
Um die Informationen zu komprimieren, finden wir den Index jedes Zeichens in
"\nabc...xyz"
und konvertieren das Ergebnis von Basis 27 zu Basis 256.Die Dekodierung ist einfach: Wir gehen von der Basis 256 zur Basis 27 zurück, rufen die entsprechenden Elemente ab
"\nabc…xyz"
, ersetzen qs durch Leerzeichen und schreiben den ersten Buchstaben jedes resultierenden Wortes in Großbuchstaben.Code
quelle
Python3, 997 Bytes
Ich kann mich nicht die Mühe machen, die Basiskonvertierung oder das Binärpacken durchzuführen, die die gewinnende Version zweifellos tun wird, aber ich möchte dies posten, um einen wirklich coolen Trick zu zeigen.
Das XOR einer Zahl um 1 entspricht dem Addieren von 1, wenn die Zahl gerade ist, oder dem Subtrahieren von 1, wenn die Zahl ungerade ist. Mit diesem Trick können Sie wirklich einfache und golfene bidirektionale Karten erstellen.
quelle
print()
und alles andere sollte noch funktionierenraw_input
). @orlpCJam,
625609603599 BytesDer obige Hexdump kann mit umgekehrt werden
xxd -r -c 17
. Versuchen Sie es online in dem CJam Dolmetscher .Idee
Wir codieren die erforderlichen Informationen wie folgt:
Alle Namen wurden in Kleinbuchstaben umgewandelt, Leerzeichen durch q ersetzt und Namen durch Backticks getrennt.
Alle Hauptstädte werden zuerst aufgelistet (in einer Reihenfolge, die es geschafft hat, die Byteanzahl zu minimieren). Dann werden die entsprechenden Zustände in umgekehrter Reihenfolge aufgelistet. Schließlich wird Arstotzka angehängt.
Auf diese Weise entspricht das Kapital am Index i dem Kapital am Index - (x + 2) . Außerdem hat eine ungültige Eingabe entweder den Index 100 ( Arstotzka ) oder -1 (nicht gefunden) und - (100 + 2) ≡ -1 ≡ - (- 1 + 2) mod 101 . Dieses Layout verhindertArstotzka ein Sonderfall ist, ohne dass der Liste etwas vorangestellt oder angehängt wird.
Um die Informationen zu komprimieren, subtrahieren wir 97 (Codepunkt von
`
) von jedem Zeichen in der Zeichenfolge und konvertieren das Ergebnis von der Basis 27 zur Basis 256.Die Dekodierung ist unkompliziert: Wir gehen von der Basis 256 zur Basis 27 zurück, fügen die resultierenden Ziffern der Basis 27 zum Backtick-Zeichen hinzu, ersetzen die qs durch Leerzeichen und schreiben den ersten Buchstaben jedes resultierenden Wortes in Großbuchstaben.
Code
quelle
JavaScript (ES6),
821806 ByteVerwendet Base64-Dekodierung, um Zeichenfolgen zu komprimieren. Live-Demo
Hier ist ein Hexdump; verwenden
xxd -r filename
zu umkehren.quelle
r=
nötig?PHP,
12721239 BytesStellen Sie sicher, dass Sie short_open_tag in der php.ini aktiviert haben:
Dieser Code verwendet argv [1] als Eingabe.
quelle
<?$c=['Baton Rouge'=>Louisiana,$I=Indiana=>$I.polis, ... ];echo$c[$z=$argv[1]]?:(array_flip($c)[$z]?:Arstotzka);
. Sie müssen nur das Array ausfüllen. Ignorieren Sie alle WarnungenJava,
1062964 Bytes-17 Bytes dank @KevinCruijssen.
Probieren Sie es online!
Ziemlich einfach; Wenn eine Übereinstimmung gefunden wird, addieren Sie den aktuellen Index des Arrays oder subtrahieren Sie ihn, je nachdem, ob er gerade oder ungerade ist. Ansonsten drucken Sie "Arstotzka".
Der Großteil der gesparten Bytes ist darauf zurückzuführen, dass die 99 Sekunden entfernt und
:
die Zeichenfolge basierend auf dem(?<=[a-z])(?=[A-Z])
regulären Ausdruck aufgeteilt wurde, der einen positiven Lookbehind und Lookahead verwendet, um nach Unterschieden in der Groß- und Kleinschreibung zu suchen.quelle
R ,
1023985 BytesProbieren Sie es online!
Unterscheidet sich von der anderen R-Vorlage.
Der Code fügt die Groß- und Kleinschreibung in den gleichen Vektor ein. Die Zustände sind in umgekehrter Reihenfolge, sodass der Index des übereinstimmenden Eintrags bei gegebenem Index entweder des Staates oder des Kapitals ist
length(data)-index+1
, wolength(data)=100
50 (Zustände) + 50 (Großbuchstaben)Außerdem werden die Eingabedaten als einzelne Zeichenfolge gepackt und dann aufgeteilt. Die Saite könnte komprimiert werden, um weiter Golf zu spielen.
Bearbeiten: Einige nicht optimierte Ersetzungen von Zeichenpaaren hinzugefügt.
quelle
Javascript,
10571042 BytesAntwort 1: 1042
Aktualisierte Antwort 1 hat eine Null verpasst: S, Auch allgemeine Unkorrektheit behoben. Aktualisierte Antwort 1 + 2 hat die Struktur etwas umgestellt.
Antwort 1 sollte in einer JavaScript-Konsole (z. B. in Ihrem Browser) ausgeführt werden, die eine unbenannte Funktion enthält und zur Konsole zurückkehrt. Sie können auch testen hier .
Antwort 2 1049
Antwort 2 funktioniert mit der Code-Snippet-Schaltfläche
quelle
Ruby, 989
Teilen Sie die Daten in ein einzelnes Array auf. Suchen Sie den Index der Eingabe im Array (
index
gibt einen falschen Wert von zurücknil
wenn die Eingabe nicht vorhanden ist)Wenn dies falsch ist, geben Sie "Arstotzka" zurück, andernfalls XOR den Index mit 1, um das andere Mitglied des Paares zu finden
Im Testprogramm:
quelle
~a.index(s)
die Bundesstaaten und Hauptstädte so verwenden und miteinander in Beziehung setzen (z. B.["New York", "New Jersey", "California",..., "Sacramento", "Trenton", "Albany"]
)PHP, 674 Bytes
Verhexen:
Erläuterung
quelle
Prolog, 1221 Bytes
Der größte Teil der Byteanzahl stammt aus der Liste der Bundesstaaten und Hauptstädte.
Alle Namen von Bundesstaaten und Hauptstädten müssen in Anführungszeichen gesetzt werden, da sie mit Großbuchstaben beginnen und uns allein 202 Bytes kosten.
Wie es funktioniert
Ruft Index I von Element X in der Liste L .
Xoder Index mit 1, um den Index des Rückgabewerts zu erhalten.
Ruft Element E mit dem Index J der Liste L .
Wenn eine Regel fehlschlägt, drucken Sie Arstotzka
Beispiel
quelle
Python 2.7,
127112321054 BytesBeispiel I / O:
Edit: Weg verbessert
quelle
zip()
anderes als das! (Ich denke auch, dass der Versuch, String-Interpolation / Verkettung zu verwenden, den Code nur um einiges länger macht, während das Wörterbuch geringfügig gekürzt wird, aber ich weiß nicht, wie ich es versuchen soll)Perl 5, 999 Bytes
Mein erster Beitrag in Codegolf.
Ungolfed:
quelle
Perl 5, 1029 Bytes
quelle
Haskell ,
1077106910681063 BytesProbieren Sie es online!
Nachdem ich viel Zeit mit dem Golfspielen einer Implementierung von Huffman-Codierung verbracht hatte, stellte ich fest, dass der direkte Ansatz wahrscheinlich kürzer ist. Ah, gut.
EDIT: Danke an @Laikoni für die 8 Bytes!
EDIT: Nochmals vielen Dank Laikoni für das zusätzliche Byte. Gute Idee, '~' zu verwenden
EDIT: Danke an Laikoni für die 5 Bytes!
quelle
fmap tail
: verwenden(l,_:r)<-span(/=',')
.span(>',')
sollte das auch funktionieren.span(>',')
funktioniert nicht, wenn der Name der Hauptstadt ein Leerzeichen enthält (z. B. Baton Rouge) seit' '<','
~
stattdessen verwenden,
, was größer ist als alle anderen verwendeten Zeichen.last$l:[r|s==l]
ist kürzer alsfilter(/=s)[l,r]!!0
unds==l||s==r
schlägtelem s[l,r]
um ein Byte.T-SQL, 1402 Bytes (Zählen der Größe der SQL-Datei)
Für diese Art von Task-Set-Logik ist die prozedurale Logik wichtiger als die prozedurale Logik. Sie lässt sich einfach und schnell in einer relationalen Datenbank lösen.
Unter dem Code ohne Golf. Beachten Sie, dass wir das Teil zum Erstellen / Auffüllen nur einmal in einem separaten Stapel ausführen können
Und wenn diese Daten bestehen bleiben, verwenden Sie nur diese Abfrage
Die Variablendeklaration ist nicht obligatorisch. Natürlich können Sie die Eingabe auch direkt in die Abfrage einfügen und 10 Byte sparen, aber ich bevorzuge, dass meine Abfragen parametrisiert werden.
quelle
sqlldr
Format speichern, anstatt sie direkt einzufügen -sqlldr
benötigt nicht überall Anführungszeichen, BeispielZsh ,
993 928924 Bytes-4 Bytes dank @spucks Bash-Antwort, die
th Dakota
und ersetztth Carolina
Probieren Sie es online! Probieren Sie es online!Probieren Sie es online!Manuelle Komprimierung durch Ersetzen der Nummern 0..9 im Array.
Da Zsh 1-indizierte Arrays verwendet, müssen wir zu Beginn ein Dummy-Element hinzufügen.
$a[(i)$1]
Ruft den Index des übereinstimmenden Array-Elements ab. Durch Hinzufügen des(e)
Flags wird die Mustererkennung deaktiviert und die einfache Zeichenfolgenerkennung verwendet. Wenn wir das nicht tun, stimmen wirUt*
übereinUtah
und druckenCarson City
. Wenn das Element nicht gefunden wird, wird ein Index hinter dem Ende des Arrays zurückgegeben.Wir xoren dann mit 1 und erhalten das entsprechende gepaarte Element. Wenn unser Dummy-Element bei Index 1 übereinstimmt, wird dies der Fall sein
$a[0]
, der die leere Zeichenfolge ersetzt. In jedem Fall, wenn dies leer ist,${ :-Arstotzka}
wird Arstotzka stattdessen ersetzen.quelle
Bash , 927
97810031051976BytesEine weitere Bearbeitung, die die Anzahl der Bytes reduziert, die von Leerzeichen und Zeilenumbrüchen in $ T belegt werden.
Die Substitution für 0..9 wurde ebenfalls neu angeordnet, wodurch ein Problem bei der Behandlung von "Carol1a" behoben wurde, da die Substitution von 1 -> "in" bereits vor diesem Zeitpunkt durchgeführt worden wäre.
Bearbeiten meiner Antwort nach dem Kommentar von @ GammaFuntion unten; Ich habe die ursprünglichen Regeln nicht eingehalten, um alle Eingaben zu verarbeiten. Eine Zeichenfolge, die teilweise mit einem Bundesstaat oder einer Hauptstadt übereinstimmt, würde eine falsche Ausgabe ergeben.
Seine / ihre Zsh-Antwort hat mich dazu inspiriert, statt der Modulo-100-Indizierung auch die XOR-Methode zu verwenden und eine manuelle Komprimierung mit den Ziffern 0..9 durchzuführen. Ich habe ein Skript geschrieben, um einige schnelle und unsaubere Berechnungen in der Eingabeliste durchzuführen und zu entscheiden, welche zehn Zeichenfolgen die beste Byte-Reduzierung ergeben. Verwenden Sie dieses Skript dann iterativ, um die Zeichenfolgen zu reduzieren. Probieren Sie es hier aus: Probieren Sie es online!
Probieren Sie es online!
Probieren Sie es online!Probieren Sie es online!Probieren Sie es online!Probieren Sie es online!quelle
Rock
als Eingabe gebe , ist die AusgabeLittle Arkansas
anstelle vonArstotzka
.for t in on in an is th.Carol1a or en as th.Dakota er;{ S=${S//$[j++]/$t};}
. Außerdem fügeth.
ich es meiner zsh-Antwort hinzu.i
(oderj
).R, 1294 Bytes
Es ist case senstive entsprechend der als Beispiel gezeigten Eingabe.
Ungolfed Code (etwas anders in der Position des Scans):
quelle
Java, 1312
quelle
Javascript, 1042
quelle
AWK , 1009 Bytes
Probieren Sie es online!
Wenn es eine Möglichkeit gibt, dies zu verringern, würde ich mich freuen, davon zu hören. :)
quelle
J ,
843829 BytesProbieren Sie es online!
quelle