Étant donné une chaîne en entrée, sortez l'État américain dont le capital est s'il s'agit d'un capital d'État, le capital de l'État s'il s'agit d'un État, ou Arstotzka
s'il n'est ni l'un ni l'autre.
Exemples:
Austin -> Texas
Alaska -> Juneau
The Nineteenth Byte -> Arstotzka
Toutes les capitales et leurs États respectifs:
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
Règles
- Pas de modules intégrés ou de bibliothèques / modules qui fournissent un mappage des états aux capitales ou des capitales aux états, ou des listes de capitales et / ou d'états (par exemple, Mathematica
CityData
intégré)
- Des échappatoires standard s'appliquent
- C'est le golf de code , donc la réponse la plus courte en octets gagne!
Classement
L'extrait de pile au bas de cet article génère le classement à partir des réponses a) comme une liste des solutions les plus courtes par langue et b) comme un classement général.
Pour vous assurer que votre réponse s'affiche, veuillez commencer votre réponse avec un titre, en utilisant le modèle Markdown suivant:
## Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les rayant. Par exemple:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou que vous souhaitez répertorier les pénalités de drapeau d'interprète séparément), assurez-vous que le score réel est le dernier numéro de l'en-tête:
## Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de code:
## [><>](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>
Réponses:
Pyth,
597596590Le vidage hexadécimal ci-dessus peut être inversé avec
xxd -r -c 17
. Essayez-le en ligne dans le compilateur Pyth .Idée
Nous encodons les informations requises comme suit:
Tous les noms ont été convertis en minuscules, les espaces ont été remplacés par des q et les noms sont séparés par des sauts de ligne.
Toutes les capitales sont répertoriées en premier (dans un ordre qui a réussi à minimiser le nombre d'octets). Ensuite, les états correspondants sont répertoriés dans l'ordre inverse. Enfin, Arstotzka est annexé.
De cette façon, le capital / état à l'indice i correspond à l'état / capital à l'indice - (x + 2) . En outre, une entrée non valide aura soit l'index 100 ( Arstotzka ) ou -1 (introuvable), et - (100 + 2) ≡ -1 ≡ - (- 1 + 2) mod 101 . Cette disposition empêche Arstotzka d'être un cas spécial, sans ajouter ou ajouter quoi que ce soit à la liste.
Pour compresser les informations, nous trouvons l'index de chaque caractère dans
"\nabc...xyz"
et convertissons le résultat de la base 27 en base 256.Le décodage est simple: on revient de la base 256 à la base 27, on récupère les éléments correspondants
"\nabc…xyz"
, on remplace les q par des espaces et on capitalise la première lettre de chaque mot résultant.Code
la source
Python3, 997 octets
Je ne peux pas être dérangé pour faire la conversion de base ou l'emballage binaire que la version gagnante fera sans aucun doute, mais je veux poster ceci pour montrer un truc vraiment cool.
XOR 'un nombre par 1 équivaut à ajouter 1 si le nombre est pair, ou soustraire 1 si le nombre est impair. Vous pouvez créer des cartes bidirectionnelles vraiment faciles et golfiques en utilisant cette astuce.
la source
print()
et tout le reste devrait toujours fonctionnerraw_input
). @orlpCJam,
625609603599 octetsLe vidage hexadécimal ci-dessus peut être inversé avec
xxd -r -c 17
. Essayez-le en ligne dans l' interpréteur CJam .Idée
Nous encodons les informations requises comme suit:
Tous les noms ont été convertis en minuscules, les espaces ont été remplacés par des q et les noms sont séparés par des crochets.
Toutes les capitales sont répertoriées en premier (dans un ordre qui a réussi à minimiser le nombre d'octets). Ensuite, les états correspondants sont répertoriés dans l'ordre inverse. Enfin, Arstotzka est annexé.
De cette façon, le capital / état à l'indice i correspond à l'état / capital à l'indice - (x + 2) . En outre, une entrée non valide aura soit l'index 100 ( Arstotzka ) ou -1 (introuvable), et - (100 + 2) ≡ -1 ≡ - (- 1 + 2) mod 101 . Cette disposition empêche Arstotzka d'être un cas spécial, sans ajouter ou ajouter quoi que ce soit à la liste.
Pour compresser les informations, nous soustrayons 97 (point de code de
`
) de chaque caractère de la chaîne et convertissons le résultat de la base 27 à la base 256.Le décodage est simple: nous revenons de la base 256 à la base 27, ajoutons les chiffres de la base 27 résultante au caractère de backtick, remplaçons les q par des espaces et mettons en majuscule la première lettre de chaque mot résultant.
Code
la source
JavaScript (ES6),
821806 octetsUtilise le décodage Base64 pour compresser les chaînes. Démo en direct
Voici un hexdump; utiliser
xxd -r filename
pour inverser.la source
r=
nécessaire?PHP,
12721239 octetsAssurez-vous que vous avez activé short_open_tag dans php.ini:
Ce code utilise argv [1] comme entrée.
la source
<?$c=['Baton Rouge'=>Louisiana,$I=Indiana=>$I.polis, ... ];echo$c[$z=$argv[1]]?:(array_flip($c)[$z]?:Arstotzka);
. Il vous suffit de remplir le tableau. Ignorer tous les avertissementsJava,
1062964 octets-17 octets grâce à @KevinCruijssen.
Essayez-le en ligne!
Assez simple; si une correspondance est trouvée, ajoutez ou soustrayez à l'index actuel du tableau selon qu'il est pair ou impair. Sinon, imprimez "Arstotzka".
La majorité des octets enregistrés était due à la suppression des 99
:
s et au fractionnement de la chaîne en fonction de l'expression régulière(?<=[a-z])(?=[A-Z])
, qui utilise un lookbehind positif et un lookahead pour vérifier une différence dans le boîtier.la source
R ,
1023985 octetsEssayez-le en ligne!
Différent de l'autre soumission R.
Le code place les capitales et les états dans le même vecteur. Les états sont dans l'ordre inverse de sorte que, étant donné l'indice de l'état ou de la capitale, l'indice de l'entrée correspondante est
length(data)-index+1
, oùlength(data)=100
, 50 (états) + 50 (capitales)En outre, les données d'entrée sont regroupées en une seule chaîne, puis divisées. La chaîne pourrait être compressée pour jouer au golf plus loin.
Edit: ajout d'une substitution non optimisée de paires de caractères.
la source
Javascript,
10571042 octetsRéponse 1: 1042
La réponse mise à jour 1 a raté un zéro: S, Correction également d'une inexactitude générale. La réponse mise à jour 1 + 2 a un peu réorganisé la structure.
La réponse 1 est recommandée pour être exécutée dans une console Javascript (votre navigateur, par exemple), une fonction sans nom qui revient à la console. Vous pouvez également le tester ici .
Réponse 2 1049
La réponse 2 fonctionnera avec le bouton d'extrait de code
la source
Rubis, 989
Divisez les données en un seul tableau. Trouver l'index de l'entrée dans le tableau (
index
retourne une valeur faussenil
si l'entrée n'est pas là)Si faux, retournez "Arstotzka" sinon XOR l'index avec 1 pour trouver l'autre membre de la paire
En programme de test:
la source
~a.index(s)
et en reliant les états et les capitales de cette façon (par exemple,["New York", "New Jersey", "California",..., "Sacramento", "Trenton", "Albany"]
)PHP, 674 octets
Hex:
Explication
la source
Prolog, 1221 octets
La plupart du nombre d'octets provient de la liste des États et capitales.
Tous les noms d'états et de capitales doivent être cités comme des atomes, car ils commencent par des lettres majuscules, ce qui nous coûte 202 octets uniquement.
Comment ça marche
Obtient l' index I de l' élément X dans la liste L .
Index Xor avec 1 pour obtenir l'indice de valeur de retour.
Obtient élément E à l' indice J de la liste L .
Si une règle échoue, imprimez Arstotzka
Exemple
la source
Python 2.7,
127112321054 octetsExemple d'E / S:
Edit: façon améliorée
la source
zip()
autre chose que ça! (Je pense aussi qu'essayer d'utiliser l'interpolation / concaténation de chaînes sur cela ne fera que rendre le code plus long tout en raccourcissant légèrement le dictionnaire, mais je ne sais pas comment essayer)Perl 5, 999 octets
Mon premier post dans codegolf.
Non golfé:
la source
Perl 5, 1029 octets
la source
Haskell ,
1077106910681063 octetsEssayez-le en ligne!
Après avoir perdu beaucoup de temps à essayer de jouer au golf avec une implémentation du codage Huffman, j'ai réalisé que l'approche simple était probablement plus courte. Et bien.
EDIT: Merci à @Laikoni pour avoir décollé 8 octets!
EDIT: Merci encore Laikoni pour cet octet supplémentaire. Bonne idée d'utiliser '~'
EDIT: Merci à Laikoni d'avoir enlevé ces 5 octets!
la source
fmap tail
:(l,_:r)<-span(/=',')
.span(>',')
devrait également fonctionner.span(>',')
ne fonctionne pas s'il y a un espace au nom de la capitale (par exemple Baton Rouge) depuis' '<','
~
place de,
, qui est plus grand que tous les autres caractères utilisés.last$l:[r|s==l]
est plus court quefilter(/=s)[l,r]!!0
ets==l||s==r
batelem s[l,r]
d'un octet.T-SQL, 1402 octets (taille de comptage du fichier .sql)
Pour ce type de logique, l'ensemble des tâches l'emporte sur la logique procédurale, ce qui facilite et accélère sa résolution sur une base de données relationnelle.
Ci-dessous le code non golfé. Notez que nous pouvons simplement exécuter la partie créer / remplir une fois dans un lot distinct
Et avec ces données persistantes, utilisez uniquement cette requête
La déclaration de variable n'est pas obligatoire, bien sûr vous pouvez simplement mettre l'entrée directement dans la requête et épargner 10 octets mais je préfère mes requêtes paramétrées.
la source
sqlldr
sqlldr
Zsh ,
993 928924 octets-4 octets grâce à la réponse Bash de @ spuck, remplaçant
th Dakota
etth Carolina
Essayez-le en ligne! Essayez-le en ligne!Essayez-le en ligne!Compression manuelle en remplaçant les nombres 0..9 dans le tableau.
Parce que Zsh utilise des tableaux indexés 1, nous devons ajouter un élément factice au début.
$a[(i)$1]
obtient l'index de l'élément de tableau correspondant. L'ajout de l'(e)
indicateur désactive la correspondance de modèle et utilise la correspondance de chaîne simple. Si nous ne le faisons pas, lesUt*
correspondancesUtah
et nous imprimeronsCarson City
. Si l'élément n'est pas trouvé, cela renvoie un index au-delà de la fin du tableau.Nous xor alors avec 1 et obtenons l'élément apparié correspondant. Si notre élément factice à l'index 1 a été mis en correspondance, ce sera le cas
$a[0]
, qui remplace la chaîne vide. Dans tous les cas, si celui-ci est vide,${ :-Arstotzka}
substituera Arstotzka à la place.la source
Bash , 927
97810031051976octetsEncore une modification, réduisant les octets pris par les espaces et les sauts de ligne dans $ T.
A également réorganisé la substitution pour 0..9, corrigeant un problème de gestion de "Carol1a", car la substitution de 1 -> "in" aurait déjà été effectuée avant ce point.
Modification de ma réponse après le commentaire de @ GammaFuntion ci-dessous; Je ne respectais pas les règles d'origine pour gérer toutes les entrées; une chaîne qui correspondait partiellement à un état ou à une capitale donnerait une sortie incorrecte.
Sa réponse Zsh m'a inspiré à utiliser également le XOR plutôt que l'indexation modulo 100 et à faire une compression manuelle en utilisant les chiffres 0..9. J'ai écrit un script pour faire des calculs rapides et sales sur la liste d'entrée pour décider quelles dix chaînes donneraient la meilleure réduction d'octets. Ensuite, j'ai utilisé ce script de manière itérative pour réduire les chaînes. Découvrez-le ici: essayez-le en ligne!
Essayez-le en ligne!
Essayez-le en ligne!Essayez-le en ligne!Essayez-le en ligne!Essayez-le en ligne!la source
Rock
comme entrée, la sortie est à laLittle Arkansas
place deArstotzka
.for t in on in an is th.Carol1a or en as th.Dakota er;{ S=${S//$[j++]/$t};}
. Aussi, bonne utilisation deth.
, je l'ajoute à ma réponse zsh.i
(ouj
) au préalable.R, 1294 octets
Il est sensible à la casse selon l'entrée montrée en exemple.
Code non golfé (légèrement différent dans la position de scan):
la source
Java, 1312
la source
Javascript, 1042
la source
AWK , 1009 octets
Essayez-le en ligne!
S'il y a un moyen de réduire cela, je serais heureux d'en entendre parler. :)
la source
J ,
843829 octetsEssayez-le en ligne!
la source