Dada una cadena como entrada, genera el estado de EE. UU. Cuyo capital es si es una capital del estado, la capital del estado si es un estado o Arstotzka
si no lo es.
Ejemplos:
Austin -> Texas
Alaska -> Juneau
The Nineteenth Byte -> Arstotzka
Todas las capitales y sus respectivos estados:
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
Reglas
- No hay incorporados ni bibliotecas / módulos que proporcionen un mapeo de estados a capitales o de capitales a estados, o listas de capitales y / o estados (por ejemplo,
CityData
incorporado a Mathematica )
- Se aplican lagunas estándar
- Este es el código de golf , por lo que la respuesta más corta en bytes gana
Tabla de clasificación
El Fragmento de pila al final de esta publicación genera la tabla de clasificación a partir de las respuestas a) como una lista de la solución más corta por idioma yb) como una tabla de clasificación general.
Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:
## Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
## Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento:
## [><>](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>
Respuestas:
Pyth,
597596590El hexdump anterior se puede revertir con
xxd -r -c 17
. Pruébelo en línea en el compilador Pyth .Idea
Codificamos la información requerida de la siguiente manera:
Todos los nombres se han convertido en minúsculas, los espacios se han reemplazado por q y los nombres están separados por saltos de línea.
Todas las mayúsculas se enumeran primero (en un orden que logró minimizar el recuento de bytes). Luego, los estados correspondientes se enumeran en orden inverso. Finalmente, se adjunta Arstotzka .
De esta manera, el capital / estado en el índice i corresponde al estado / capital en el índice - (x + 2) . Además, una entrada no válida tendrá el índice 100 ( Arstotzka ) o -1 (no encontrado), y - (100 + 2) ≡ -1 ≡ - (- 1 + 2) mod 101 . Este diseño evita que Arstotzka sea un caso especial, sin anteponer ni agregar nada a la lista.
Para comprimir la información, encontramos el índice de cada personaje
"\nabc...xyz"
y convertimos el resultado de la base 27 a la base 256.La decodificación es sencilla: volvemos de la base 256 a la base 27, recuperamos los elementos correspondientes
"\nabc…xyz"
, reemplazamos las q con espacios y escribimos con mayúscula la primera letra de cada palabra resultante.Código
fuente
Python3, 997 bytes
No puedo molestarme en hacer la conversión de base o el empaquetado binario que la versión ganadora indudablemente hará, pero quiero publicar esto para mostrar un truco realmente genial.
XOR'un número por 1 es equivalente a sumar 1 si el número es par, o restar 1 si el número es impar. Puedes hacer mapas bidireccionales realmente fáciles y de golf con este truco.
fuente
print()
y todo lo demás debería funcionarraw_input
). @orlpCJam,
625609603599 bytesEl hexdump anterior se puede revertir con
xxd -r -c 17
. Pruébelo en línea en el intérprete de CJam .Idea
Codificamos la información requerida de la siguiente manera:
Todos los nombres se han convertido en minúsculas, los espacios se han reemplazado por q y los nombres están separados por comillas inversas.
Todas las mayúsculas se enumeran primero (en un orden que logró minimizar el recuento de bytes). Luego, los estados correspondientes se enumeran en orden inverso. Finalmente, se adjunta Arstotzka .
De esta manera, el capital / estado en el índice i corresponde al estado / capital en el índice - (x + 2) . Además, una entrada no válida tendrá el índice 100 ( Arstotzka ) o -1 (no encontrado), y - (100 + 2) ≡ -1 ≡ - (- 1 + 2) mod 101 . Este diseño evita que Arstotzka sea un caso especial, sin anteponer ni agregar nada a la lista.
Para comprimir la información, restamos 97 (punto de código de
`
) de cada carácter en la cadena y convertimos el resultado de la base 27 a la base 256.La decodificación es sencilla: volvemos de la base 256 a la base 27, agregamos los dígitos de la base 27 resultante al carácter de retroceso, reemplazamos las q con espacios y escribimos con mayúscula la primera letra de cada palabra resultante.
Código
fuente
JavaScript (ES6),
821806 bytesUtiliza la decodificación Base64 para comprimir cadenas. Demo en vivo
Aquí hay un hexdump; usar
xxd -r filename
para revertir.fuente
r=
necesario?PHP,
12721239 bytesAsegúrese de haber habilitado short_open_tag en php.ini:
Este código usa argv [1] como entrada.
fuente
<?$c=['Baton Rouge'=>Louisiana,$I=Indiana=>$I.polis, ... ];echo$c[$z=$argv[1]]?:(array_flip($c)[$z]?:Arstotzka);
. Solo necesita llenar la matriz. Ignorar todas las advertenciasJava,
1062964 bytes-17 bytes gracias a @KevinCruijssen.
Pruébalo en línea!
Muy claro; Si se encuentra una coincidencia, sume o reste del índice actual de la matriz, dependiendo de si es par o impar. De lo contrario, imprima "Arstotzka".
La mayoría de los bytes guardados se debieron a la eliminación de los 99
:
sy a la división de la cadena en función de la expresión regular(?<=[a-z])(?=[A-Z])
, que utiliza una mirada positiva hacia atrás y hacia adelante para verificar una diferencia en la carcasa.fuente
R ,
1023985 bytesPruébalo en línea!
Diferente de la otra presentación de R.
El código pone las capitales y los estados en el mismo vector. Los estados están en orden inverso, de modo que, dado el índice del estado o de la capital, el índice de la entrada coincidente es
length(data)-index+1
, dondelength(data)=100
, 50 (estados) + 50 (mayúsculas)Además, los datos de entrada se empaquetan como una sola cadena y luego se dividen. La cuerda podría ser comprimida para jugar más al golf.
Editar: se agregó una sustitución no optimizada de pares de caracteres.
fuente
Javascript,
10571042 bytesRespuesta 1: 1042
La respuesta actualizada 1 perdió un cero: S, también se corrigió la incorrección general. La respuesta actualizada 1 + 2 reorganizó un poco la estructura.
Se recomienda que la respuesta 1 se ejecute en una consola Javascript (la de su navegador, por ejemplo), una función sin nombre que regresa a la consola. También puedes probarlo aquí .
Respuesta 2 1049
La respuesta 2 funcionará con el botón de fragmento de código
fuente
Rubí, 989
Divide los datos en una sola matriz. Encuentre el índice de la entrada en la matriz (
index
devuelve un valor falso denil
si la entrada no está allí)Si es falso, devuelve "Arstotzka", de lo contrario, XOR el índice con 1 para encontrar el otro miembro del par
En programa de prueba:
fuente
~a.index(s)
y haciendo que los estados y las capitales se relacionen de esa manera (por ejemplo,["New York", "New Jersey", "California",..., "Sacramento", "Trenton", "Albany"]
)PHP, 674 bytes
Maleficio:
Explicación
fuente
Prólogo, 1221 bytes
La mayor parte del recuento de bytes proviene de la lista de estados y capitales.
Todos los nombres de estados y capitales necesitan ser átomos citados, ya que comienzan con letras mayúsculas, lo que nos cuesta 202 bytes solo.
Cómo funciona
Obtiene el índice I del elemento X en la lista L .
Índice Xor con 1 para obtener el índice del valor de retorno.
Obtiene el elemento E en el índice J de la lista L .
Si alguna regla falla, imprime Arstotzka
Ejemplo
fuente
Python 2.7,
127112321054 bytesEjemplo de E / S:
Editar: forma mejorada
fuente
zip()
, nada más que eso! (también creo que intentar usar la interpolación / concatenación de cadenas en esto solo hará que el código sea más largo mientras acorta marginalmente el diccionario, pero no sé cómo intentarlo)Perl 5, 999 bytes
Mi primer post en codegolf.
Sin golf:
fuente
Perl 5, 1029 bytes
fuente
Haskell ,
1077106910681063 bytesPruébalo en línea!
Después de perder mucho tiempo tratando de desarrollar una implementación de la codificación Huffman, me di cuenta de que el enfoque directo es probablemente más corto. Ah bueno.
EDITAR: ¡Gracias a @Laikoni por despegar 8 bytes!
EDITAR: Gracias de nuevo a Laikoni por ese byte adicional. Buena idea usar '~'
EDITAR: ¡Gracias a Laikoni por quitar esos 5 bytes!
fuente
fmap tail
:(l,_:r)<-span(/=',')
.span(>',')
también debería funcionar.span(>',')
no funciona si hay un espacio en el nombre de la capital (por ejemplo, Baton Rouge) desde' '<','
~
lugar de,
, que es más grande que todos los demás caracteres utilizados.last$l:[r|s==l]
es más corto quefilter(/=s)[l,r]!!0
ys==l||s==r
lateelem s[l,r]
por un byte.T-SQL, 1402 bytes (contando el tamaño del archivo .sql)
Para este tipo de tareas, la lógica del conjunto triunfa sobre la lógica de procedimiento, lo que facilita y agiliza la resolución en una base de datos relacional.
Debajo del código sin golf. Tenga en cuenta que solo podemos ejecutar la parte crear / llenar una vez en un lote separado
Y con esos datos persistentes solo use esta consulta
La declaración de variable no es obligatoria, por supuesto, solo puede poner la entrada directamente en la consulta y ahorrar 10 bytes, pero prefiero que mis consultas estén parametizadas.
fuente
sqlldr
formato en lugar de la inserción directasqlldr
; por ejemploZsh ,
993 928924 bytes-4 bytes gracias a la respuesta Bash de @ spuck, reemplazando
th Dakota
yth Carolina
Pruébalo en línea! Pruébalo en línea!Pruébalo en línea!Compresión manual reemplazando los números 0..9 en la matriz.
Debido a que Zsh usa matrices indexadas 1, tenemos que agregar un elemento ficticio al comienzo.
$a[(i)$1]
obtiene el índice del elemento de matriz correspondiente. Agregar la(e)
bandera deshabilita la coincidencia de patrones y utiliza la coincidencia de cadenas simples. Si no hacemos esto,Ut*
coincideUtah
y imprimiremosCarson City
. Si no se encuentra el elemento, esto devuelve un índice más allá del final de la matriz.Luego xor con 1 y obtenemos el elemento emparejado correspondiente. Si nuestro elemento ficticio en el índice 1 coincide, esto será
$a[0]
, lo que sustituye la cadena vacía. En cualquier caso, si está vacío,${ :-Arstotzka}
sustituirá a Arstotzka.fuente
Bash , 927
97810031051976bytesUna edición más, reduciendo los bytes ocupados por espacios y nuevas líneas en $ T.
También reordenó la sustitución para 0..9, solucionando un problema al manejar "Carol1a", ya que la sustitución de 1 -> "en" ya se habría realizado antes de ese punto.
Editando mi respuesta después del comentario de @ GammaFuntion a continuación; No cumplía con las reglas originales para manejar todas las entradas; una cadena que coincidía parcialmente con un estado o capital daría un resultado incorrecto.
Su respuesta Zsh me inspiró a usar también la XOR en lugar de la indexación del módulo 100 y hacer algo de compresión manual usando los números 0..9. Escribí un script para hacer algunos cálculos rápidos y sucios en la lista de entrada para decidir qué diez cadenas darían la mejor reducción de bytes. Luego usé ese script iterativamente para reducir las cadenas. Compruébelo aquí: ¡ Pruébelo en línea!
Pruébalo en línea!
Pruébalo en línea!Pruébalo en línea!Pruébalo en línea!Pruébalo en línea!fuente
Rock
como entrada, la salida es enLittle Arkansas
lugar deArstotzka
.for t in on in an is th.Carol1a or en as th.Dakota er;{ S=${S//$[j++]/$t};}
. Además, un buen uso deth.
, lo estoy agregando a mi respuesta zsh.i
(oj
) de antemano.R, 1294 bytes
Es sensible a mayúsculas y minúsculas según la entrada que se muestra como ejemplo.
Código no protegido (ligeramente diferente en la posición de escaneo):
fuente
Java, 1312
fuente
Javascript, 1042
fuente
AWK , 1009 bytes
Pruébalo en línea!
Si hay una manera de reducir esto, me alegraría saberlo. :)
fuente
J ,
843829 bytesPruébalo en línea!
fuente