Задав строку в качестве входных данных, выведите штат США, в котором он находится, если он является столицей штата, столицей штата, если он является штатом, или, Arstotzka
если это не так.
Примеры:
Austin -> Texas
Alaska -> Juneau
The Nineteenth Byte -> Arstotzka
Все столицы и их государства:
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
правила
- Нет встроенных модулей или библиотек / модулей, которые обеспечивают отображение состояний в столицы или столицы штатов или списки столиц и / или состояний (например,
CityData
встроенные в Mathematica )
- Применяются стандартные лазейки
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах!
Leaderboard
Фрагмент стека в нижней части этого поста создает таблицу лидеров из ответов а) в виде списка кратчайшего решения для каждого языка и б) в качестве общей таблицы лидеров.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
## Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в заголовок несколько чисел (например, потому что ваш результат равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
## Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать имя языка ссылкой, которая будет отображаться во фрагменте кода:
## [><>](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>
Ответы:
Pyth,
597596590Вышеупомянутый hexdump может быть изменен с
xxd -r -c 17
. Попробуйте онлайн в компиляторе Pyth .идея
Мы кодируем необходимую информацию следующим образом:
Все имена были приведены к нижнему регистру, пробелы были заменены на q, а имена разделены переводом строки.
Все заглавные буквы перечислены первыми (в порядке, в котором удалось минимизировать количество байтов). Тогда соответствующие состояния перечислены в обратном порядке. Наконец, Арстоцка добавляется.
Таким образом, капитал / штат по индексу i соответствует состоянию / капиталу по индексу - (x + 2) . Кроме того, недопустимый ввод будет иметь индекс 100 ( Arstotzka ) или -1 (не найден) и - (100 + 2)) -1 ≡ - (- 1 + 2) мод 101 . Этот макет не позволяет Arstotzka быть особым случаем, без добавления или добавления чего-либо в список.
Чтобы сжать информацию, мы находим индекс каждого символа
"\nabc...xyz"
и конвертируем результат из базы 27 в базу 256.Декодирование простое: мы возвращаемся с базы 256 на базу 27, извлекаем соответствующие элементы
"\nabc…xyz"
, заменяем q пробелами и пишем с заглавной буквы первую букву каждого полученного слова.Код
источник
Python3, 997 байт
Я не могу потрудиться сделать базовое преобразование или бинарную упаковку, что несомненно сделает победная версия, но я хочу опубликовать это, чтобы показать действительно крутой трюк.
XOR'ование числа на 1 эквивалентно добавлению 1, если число четное, или вычитанию 1, если число нечетное. С помощью этого трюка вы можете сделать действительно легкие двунаправленные карты для гольфа.
источник
print()
а все остальное должно работатьraw_input
). @orlpCJam,
625609603599 байтВышеупомянутый hexdump может быть изменен с
xxd -r -c 17
. Попробуйте онлайн в интерпретаторе CJam .идея
Мы кодируем необходимую информацию следующим образом:
Все имена были приведены к нижнему регистру, пробелы были заменены на q, а имена разделены обратными чертами.
Все заглавные буквы перечислены первыми (в порядке, в котором удалось минимизировать количество байтов). Тогда соответствующие состояния перечислены в обратном порядке. Наконец, Арстоцка добавляется.
Таким образом, капитал / штат по индексу i соответствует состоянию / капиталу по индексу - (x + 2) . Кроме того, недопустимый ввод будет иметь индекс 100 ( Arstotzka ) или -1 (не найден) и - (100 + 2)) -1 ≡ - (- 1 + 2) мод 101 . Этот макет не позволяет Arstotzka быть особым случаем, без добавления или добавления чего-либо в список.
Чтобы сжать информацию, мы вычитаем 97 (кодовая точка
`
) из каждого символа в строке и преобразуем результат из базы 27 в базу 256.Расшифровка проста: мы возвращаемся от базового 256 к базовому 27, добавляем получающиеся цифры base-27 к символу обратного удара, заменяем q пробелами и пишем с заглавной буквы первую букву каждого полученного слова.
Код
источник
JavaScript (ES6),
821806 байтИспользует декодирование Base64 для сжатия строк. Live демо
Вот hexdump; использовать
xxd -r filename
для реверса.источник
r=
необходимо?PHP,
12721239 байтУбедитесь, что вы включили short_open_tag в php.ini:
Этот код использует argv [1] в качестве входных данных.
источник
<?$c=['Baton Rouge'=>Louisiana,$I=Indiana=>$I.polis, ... ];echo$c[$z=$argv[1]]?:(array_flip($c)[$z]?:Arstotzka);
. Вам просто нужно заполнить массив. Игнорировать все предупрежденияJava,
1062964 байта-17 байт благодаря @KevinCruijssen.
Попробуйте онлайн!
Довольно просто; если совпадение найдено, то добавьте или вычтите из текущего индекса массива в зависимости от того, является ли он четным или нечетным. В противном случае выведите «Arstotzka».
Большая часть сохраненных байтов была вызвана удалением 99
:
с и разделением строки на основе регулярного выражения(?<=[a-z])(?=[A-Z])
, которое использует положительный взгляд назад и вперед, чтобы проверить разницу в регистре.источник
R ,
1023985 байтПопробуйте онлайн!
Отличается от других R представления.
Код помещает заглавные буквы и штаты в один и тот же вектор. Состояния в обратном порядке, так что, учитывая индекс штата или столицы, индекс соответствующей записи равен
length(data)-index+1
, гдеlength(data)=100
50 (штаты) + 50 (столицы)Кроме того, входные данные упаковываются в одну строку и затем разделяются. Струна может быть сжата для игры в гольф дальше.
Редактировать: добавлена неоптимизированная замена пар символов.
источник
Javascript,
10571042 байтаОтвет 1: 1042
Обновленный ответ 1 пропустил ноль: S, Также исправлена общая некорректность. Обновленный ответ 1 + 2 немного перестроил структуру.
Ответ 1 рекомендуется запускать в консоли Javascript (например, в вашем браузере) безымянной функцией, которая возвращает консоль. Вы также можете проверить это здесь .
Ответ 2 1049
Ответ 2 будет работать с кнопкой фрагмента кода
источник
Рубин, +989
Разделите данные в один массив. Найти индекс входных данных в массиве (
index
возвращает ложное значение,nil
если входные данные отсутствуют)Если ложно, верните «Arstotzka», иначе XOR индекс с 1, чтобы найти другого члена пары
В тестовой программе:
источник
~a.index(s)
и связывая штаты и столицы таким образом (например,["New York", "New Jersey", "California",..., "Sacramento", "Trenton", "Albany"]
)PHP, 674 байта
Hex:
объяснение
источник
Пролог, 1221 байт
Большая часть подсчета байтов происходит из списка штатов и штатов.
Все названия штатов и столиц должны быть в кавычках, поскольку они начинаются с заглавных букв и стоят нам 202 байта в одиночку.
Как это работает
Возвращает индекс I из элемента X в списке L .
Индекс Xor с 1, чтобы получить индекс возвращаемого значения.
Получает элемент Е с индексом J из списка L .
Если какое-либо правило не выполняется, выведите Arstotzka
пример
источник
Python 2,7,
1271,1232,1054 байтаПример ввода / вывода:
Изменить: способ улучшен
источник
zip()
, ничего, кроме этого! (также я думаю, что попытка использовать интерполяцию / конкатенацию строк в этом случае просто увеличит длительность кода при незначительном сокращении словаря, но я не знаю, как это сделать)Perl 5, 999 байт
Мой первый пост в Codegolf.
Ungolfed:
источник
Perl 5, 1029 байт
источник
Haskell ,
1077106910681063 байтПопробуйте онлайн!
Потратив много времени, пытаясь отыграть реализацию кодирования Хаффмана, я понял, что простой подход, вероятно, короче. Ах хорошо.
РЕДАКТИРОВАТЬ: Спасибо @Laikoni за удаление 8 байтов!
РЕДАКТИРОВАТЬ: Еще раз спасибо Laikoni за этот дополнительный байт. Хорошая идея использовать «~»
РЕДАКТИРОВАТЬ: Спасибо Laikoni за удаление этих 5 байтов!
источник
fmap tail
:(l,_:r)<-span(/=',')
.span(>',')
должно работать.span(>',')
не работает, если в названии столицы есть пробел (например, Батон-Руж) с тех пор' '<','
~
вместо,
, который больше, чем все другие используемые символы.last$l:[r|s==l]
корочеfilter(/=s)[l,r]!!0
иs==l||s==r
бьетelem s[l,r]
на один байт.T-SQL, 1402 байта (считая размер файла .sql)
Для такого рода задач логика набора задач превосходит процедурную логику, облегчая и быстро решая ее в реляционной БД.
Внизу не разгромленный код. Обратите внимание, что мы можем просто запустить один раз создать / заполнить часть в отдельном пакете
И с этими данными сохраняются только использовать этот запрос
Объявление переменной не является обязательным, конечно, вы можете просто поместить входные данные непосредственно в запрос и сэкономить 10 байтов, но я предпочитаю, чтобы мои запросы были параметризованы.
источник
sqlldr
формат, а не прямую вставку -sqlldr
не нужны кавычки везде, напримерZsh ,
993 928924 байта-4 байта благодаря ответу Bash @ spuck, заменяя
th Dakota
иth Carolina
Попробуйте онлайн! Попробуйте онлайн!Попробуйте онлайн!Ручное сжатие путем замены чисел 0..9 в массиве.
Поскольку Zsh использует массивы с 1 индексом, мы должны добавить фиктивный элемент в начале.
$a[(i)$1]
получает индекс соответствующего элемента массива. Добавление(e)
флага отключает сопоставление с образцом и использует сопоставление с простой строкой. Если мы этого не сделаем,Ut*
совпадет,Utah
и мы напечатаемCarson City
. Если элемент не найден, возвращается индекс за концом массива.Затем мы xor с 1 и получим соответствующий парный элемент. Если наш фиктивный элемент с индексом 1 был сопоставлен, это будет
$a[0]
, что заменяет пустую строку. В любом случае, если это пусто,${ :-Arstotzka}
вместо него будет подставлена Арстоцка.источник
Баш , 927
97810031051976байтЕще одно редактирование, сокращающее количество байтов, занятых пробелами и символами новой строки в $ T.
Также изменил порядок замены на 0..9, исправив проблему с обработкой «Carol1a», поскольку замена 1 -> «in» уже была бы выполнена до этого момента.
Редактирование моего ответа после комментария @ GammaFuntion ниже; Я не отвечал первоначальным правилам для обработки всего ввода; строка, которая частично соответствовала бы государству или капиталу, дала бы неправильный вывод.
Его / ее Zsh-ответ вдохновил меня также использовать XOR вместо индексации по модулю 100 и выполнить некоторое ручное сжатие, используя цифры 0..9. Я написал скрипт для выполнения быстрых и грязных вычислений в списке ввода, чтобы решить, какие десять строк дадут наилучшее сокращение байтов. Затем использовал этот сценарий итеративно, чтобы уменьшить количество строк. Проверьте это здесь: попробуйте онлайн!
Попробуйте онлайн!
Попробуйте онлайн!Попробуйте онлайн!Попробуйте онлайн!Попробуйте онлайн!источник
Rock
в качестве ввода, выводLittle Arkansas
вместоArstotzka
.for t in on in an is th.Carol1a or en as th.Dakota er;{ S=${S//$[j++]/$t};}
. Кроме того, хорошее использованиеth.
, я добавляю это к своему ответу zsh.i
(илиj
) заранее.R, 1294 байта
Он чувствителен к регистру в зависимости от ввода, показанного в качестве примера.
Код Ungolfed (немного отличается в позиции сканирования):
источник
Ява, 1312
источник
Javascript, 1042
источник
AWK , 1009 байт
Попробуйте онлайн!
Если есть способ уменьшить это, я был бы рад услышать об этом. :)
источник
J ,
843829 байтПопробуйте онлайн!
источник