Когда я был моложе, на моей стене напротив моей кровати была прикреплена большая карта США. Когда мне было скучно, я смотрел на эту карту и думал о чем-то другом. Материал, подобный теореме о четырех цветах, или какое состояние граничило с большинством других состояний. Чтобы избавить меня от некоторых умственных способностей в подсчете, вы собираетесь изобрести машину времени и сказать мне, сколько штатов граничит с вводом. Поскольку время очень разборчиво, оно должно быть как можно короче.
Задание
Для одного из 50 штатов США, либо по его полному названию, либо по почтовому сокращению, указанному на этой странице ( зеркало archive.org ), возвращается число штатов, которые он граничит. Ниже приводится сопоставление всех входных данных для полных имен состояний с числом смежных состояний, найденных на этом веб-сайте .
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
Правила
- Ваша программа может обрабатывать полное имя штата или почтовый индекс - она не может использовать комбинацию.
- Вы можете указать регистр ввода, но не можете удалить пробелы во вводе.
- Вам не нужно обращаться с Вашингтоном, округ Колумбия, или с чем-либо, что не входит в число 50 штатов.
- Количество ограниченных состояний не включает состояние ввода.
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Хотя я знаю, что это может быть просто тот, кто имеет лучшее сжатие или найдет лучший шаблон регулярных выражений для числа, если я получу слишком много таких ответов, я назначу награду за ответ, который генерирует карту США и использует ее для рассчитать количество граничащих государств.
inb4
Mathematica ВстроенныйОтветы:
Желе ,
7365 байтПопробуйте онлайн!
Встроенные команды? Кому это нужно? (
ʂÞiƬ
на земле с отвращением).Принимает ввод как полное имя, например
"Idaho"
.Как это устроено
источник
OS%168
по каждому из штатов, которые непосредственно давали список. Я нашел константу 168 путем грубого форсирования всех возможностей менее 250, проверяя каждую из них на возможность на самом деле различать различное количество границ.168
работал (среди нескольких других) и имел дополнительное преимущество, заключающееся в необходимости жесткого кодирования48
значений из-за коллизий.Mathematica,
112111 байт-5 байт благодаря Марку С. и LegionMammal978 !
-22 байта (и замечая проблему с выводом) благодаря ngenisis !
Конечно, для этого есть встроенная Mathematica. Включает DC в подсчет.
источник
AdministrativeDivision
так удивительно долго, что вы бы сохранили байт с помощью Length [x = "AdministrativeDivision" ~ Entity ~ StringDelete [""] @ # ~ ToExpression [x <> "Data"] ~ "BorderingStates"] &ToExpression
можно заменитьSymbol
, если я правильно помню.AdministrativeDivisionData
, просто передайте"BorderingStates"
в качестве аргумента сущность; напр.Entity["AdministrativeDivision","Alaska"]["BorderingStates"]
Tr[1^...]
вместо,Length@...
чтобы сохранить другой байт.JavaScript (ES6),
115113 байтРедактировать: сохранил 2 байта, позаимствовав еще 2 оптимизации строк из ответа Step Hen Python . Я пропустил их с первой попытки.
Принимает почтовые индексы в качестве входных данных.
Как?
Не-RegExp аргумент, передаваемый
.match()
методу, неявно преобразуется в объект RegExp. Итак, мы проверяем регулярное выражение/.\D*{{input}}/
в нашей закодированной строке. Это соответствует цифре (1) , затем от 0 до N нецифровых символов, за которыми следует ввод.Например: если ввод
"NH"
(Нью-Гэмпшир), совпадающая строка будет"3CACTNDELANH"
. Мы просто сохраняем первый символ этой строки или возвращаем"6"
по умолчанию, если совпадений не было.(1):
.
Фактически соответствует любому символу, но строка построена таким образом, что то, что находится перед группой букв, всегда является цифрой.демонстрация
Показать фрагмент кода
Хеш-версия, 115 байт
Тот же формат ввода.
демонстрация
Показать фрагмент кода
источник
Python 3 ,
168154153137 байтПопробуйте онлайн!
-4 байта благодаря isaacg
-10 байт благодаря ETHProductions
-1 байт благодаря notjagen
Сохранено еще несколько байтов по умолчанию до шести, как и другие ответы.
TIO включает в себя тесты. Принимает ввод в виде почтового индекса. Формирует список имен состояний в виде строк для каждого набора, при возможности сводимых вместе (например,
WVVA
сохраняется какWVA
). Лямбда-функция получает индекс в списке, строка которого содержит входные данные. Там может быть способ, которым я не знаю о гольфе тело функции. Выводит в виде списка, содержащего целое число - добавьте[0]
в конец лямбда- выражения для вывода в виде целого числа.источник
l
один раз, так что вы можете также включить его.V , 143 байта
Попробуйте онлайн!
HexDump:
Я написал это до того, как понял, что вы можете использовать вход в качестве почтовых индексов. Я не уверен, что это на самом деле короче или нет
:shrug:
. В этом ответе используется регулярное выражение для поиска определенных состояний, а затем, если оно совпадает, измените ввод на определенное число. Однако, по мере того, как количество состояний, с которыми мы тестировали, увеличивается, наименьший поиск, который мы можем использовать, уменьшается. Так, например, мы не можем искать,C
потому что это будет соответствоватьColorado
иCalifornia
. (А также Conneticut и The Carolinas) Однако, как только мы проверили каждое состояние, имеющее более 3 границ, мы можем просто искать старты с C, потому что он больше не может соответствовать предыдущему.Несколько тестовых случаев могут быть ошибочными, так как у меня нет времени, чтобы протестировать их все. Дайте мне знать, если вы найдете какие-либо неверные результаты. :)
источник
JavaScript, 153 байта
Переменная цепочка. Я уверен, что есть лучший способ сделать это, хотя.
Благодаря предложению кого-то из Discord на выходе по умолчанию установлено 6, самое распространенное число граничных состояний. 183 байта до 151 байта.
Комментатор указал, что это невозможно для AK и HI, поэтому я добавил два байта, чтобы решить эту проблему. От 151 до 153 байтов.
источник
AK
иHI
потому что0||6
оценивается в 6, что является неправильным выводом.05AB1E ,
7872 байтаПопробуйте онлайн!
Это работает ТОЛЬКО потому, что порядок сокращений состояний позволяет НЕТ состоянию возникать в перекрытии между состояниями:
Потребовалось некоторое время, чтобы получить правильное расположение ... Затем, разделив вход и посчитав пробелы в первой части, мы получим правильный результат.
Если я украду «по умолчанию 6» из других ответов, я получу 65 байтов:
05AB1E , 65 байт
Попробуйте онлайн!
источник
Took awhile to get the arrangement right
-> О, я думаю, вы могли бы скопировать это из моего ответа (если я правильно читаю это)Сетчатка ,
106105 байтПопробуйте онлайн! Кто-то сказал регулярное выражение? Редактировать: 1 байт сохранен благодаря @Arnauld.
источник
JavaScript (ES6), 195 байт
Серия регулярных выражений, которые работают на полное имя государства.
Тестовые случаи:
Показать фрагмент кода
источник
Желе ,
6159 байтПолная программа, принимающая полное имя состояния и печатающая результат (в виде монадической ссылки она возвращает либо список, содержащий одно число или число 6).
Попробуйте онлайн! или посмотрите набор тестов .
Как?
список списков индексов кодовой страницы:
и показано
“ ... ‘
ниже:источник
Excel VBA,
177154147 байтАнонимная функция VBE, которая принимает входные данные ожидаемого типа,
String
представляющего почтовый индекс штата, из диапазона[A1]
и возвращает числоInteger
, представляющее число состояний, граничащих с этим состоянием.Предыдущие версии
154 байта:
177 байт:
Отформатирован для удобства чтения
источник
Python 2,
363218 байтДавайте начнем с
простого,слегка оптимизированного, жестко закодированного ответа. Принимает почтовый индекс в качестве ввода.-145 байт благодаря bfontaine.
источник
dict(MO=8,TN=8,...)
вместо{'MO':8,'TN':8,...}
. Затем вы можете сохранить почти 50 байтов, используя.get(a,6)
и удаляя те состояния, которые граничат с 6 другими состояниями. Я могу добраться до 219 с этими двумя трюками..
и делаяsplit()
(я думаю)dict((i[0]+i[1],int(i[-1])) for i in zip(*[iter("WA2WI4WV5FL2...")]*3))
. Кроме того, вы могли бы оставитьint
это, если разрешено иметь вывод в виде строки.dict((a+b,int(c)) for a,b,c in zip(*[iter("WA2WI4WV5...")]*3))
. Извините, я немного нерешительный: DPowerShell , 187 байт
Попробуйте онлайн!
Я уверен, что есть лучший способ сделать это, но вот подход, который я придумал.
Принимает ввод
$a
и использует его, чтобы получить.IndexOf
его появление в длинной строке комбинаций состояния / границы. Сохраняет это в$x
и строку в$b
процессе. Затем переходит кif
оператору, который проверяет, найдено ли совпадение, и, если да, индексирует цифру, а затемexit
. В противном случае мы являемся одним из6
состояний илиAK
илиHI
, поэтому мы выполняем некоторую логику, чтобы увидеть,$a
является ли одно из0
состояний, и вычитаем при необходимости. В любом случае, это остается на конвейере и вывод неявный.источник
Python 3, 729
733байтаВводит в качестве почтовой аббревиатуры. Это моя первая попытка поиграть в гольф, и я думаю, что это самая короткая попытка, которую я получу при таком адском подходе. Я знаю, что это грандиозно - если подумать, мне, наверное, было бы лучше с
if-else
заявлениями, но после всего этого времени и усилий мне пришлось опубликовать это: D.Я только что понял, что взял роскошь трехбуквенного имени переменной - 4 байта вниз, 400 вперед!
источник