Учитывая одно из следующих в качестве входных данных:
AK,AR,AS,AZ,CA,CT,DC,FL,GA,IL,IN,IA,KS,KY,LA,MD,MI,MN,MS,NV,NH,NJ,NM,NY,NC,ND,MP,OH,OK,OR,PA,PR,RI,SC,TN,TX,UT,VT,VA,WA,WI
(с кавычками)
"AK","AR","AS","AZ","CA","CT","DC","FL","GA","IL","IN","IA","KS","KY","LA","MD","MI","MN","MS","NV","NH","NJ","NM","NY","NC","ND","MP","OH","OK","OR","PA","PR","RI","SC","TN","TX","UT","VT","VA","WA","WI"
Создайте и выведите (равномерно) случайный номерной знак в формате, соответствующем вводу. Если существует несколько (через запятую) форматов, используйте (равномерно) случайный формат:
AK, IA, MS, MP, VT: AAA 000
AS: 0000
AZ, GA, WA: AAA0000
AR, KS, KY, LA, ND, OR: 000 AAA
CA: 0AAA000
CT: AA-00000
DC: AA-0000
FL: AAA A00
IL: AA 00000
IN: 000A,000AA,000AAA,AAA000
MD: 0AA0000
MI: AAA 0000,0AA A00,AAA 000
MN: 000-AAA
NV: 00A-000
NH: 000 0000
NJ: A00-AAA
NM: 000-AAA,AAA-000
NY, NC, PA, TX, VA, WI: AAA-0000
OH: AAA 0000
OK: 000AAA
PR: AAA-000
RI: 000-000
SC: AAA 000,000 0AA
TN: A00-00A
UT: A00 0AA
Где A
означает случайный символ в верхнем регистре алфавита минус IOQ
и 0
означает случайное однозначное число ( 0
до 9
).
Вся информация из Википедии . Это были те штаты, которые я поняла и у которых не было странных правил.
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах!
code-golf
random
generation
Стивен
источник
источник
IN
. Равномерно ли мы выбираем формат (один из 000A, 000AA, 000AAA или AAA000), затем выбираем число из этого формата (каждый формат имеет одинаковый вес). Или мы рассматриваем номерное пространство для всех форматов для этого состояния и выбираем из этого всего числового пространства (большие форматы взвешиваются больше)?Ответы:
Perl 6 ,
492350 байтПопробуйте онлайн!
После первой попытки я был так далеко вперед, что приложил немало усилий, чтобы сократить код. Теперь у меня есть.
В моем кодировании шаблонов номерного знака цифры 1-4 указывают на серию такого количества случайных цифр, а цифры 5-7 указывают на серию случайных разрешенных букв длиной на четыре меньше числа.
источник
Python3,
861821819714678674670662661658596591561555551536 байт.-8 байт благодаря @DestructibleLemon (
b=a+
... иd=B
...), -15 байт благодаря @Felipe Nardi Batista (бесполезная лямбда и переменная)И спасибо всем, кто помогал в этом!
Попробуйте онлайн
Любые предложения по игре в гольф приветствуются (и желательны). И, пожалуйста, если вы обнаружите какие-либо ошибки, просто скажите мне через комментарии!
источник
IA
наlist[0]
или что - то подобное (я не знаю , питон)b= a+"0"
? d может быть = B [1:]?b
не может бытьa+'0'
, как я облажался номерных знаков.JavaScript (ES6),
374368 байтОтформатировано и прокомментировано
В следующем коде разделы данных были усечены. Недостающие части отмечены значком
(...)
.демонстрация
Показать фрагмент кода
источник
T-SQL,
1104 1100 797657 байтРЕДАКТИРОВАТЬ 1: Сохранено более 300 байтов путем изменения
VALUES()
наSTRING_SPLIT()
(доступно только в SQL 2016 и более поздних версиях)РЕДАКТИРОВАТЬ 2: Сохранено еще 140 байтов с использованием сжатия GZIP как описано здесь . Мы уже ограничились SQL 2016 и более поздними версиями, поэтому эти функции доступны.
Ввод осуществляется через существующую таблицу t с кодом состояния в столбце s. , в соответствии с нашими стандартами IO .
После развертывания сжатой строки вот отформатированный код с очень длинным списком состояний:
Поэтому я создал огромную таблицу в памяти, состоящую из всех возможных пар (состояние, шаблон). Обратите внимание, что я не объединяю строки, каждое состояние является отдельным, и состояния, подобные IN, будут иметь 4 строки, по одной для каждого шаблона.
Когда я присоединяю эту таблицу в памяти к входной таблице, я сортирую по
NEWID()
: случайный порядок и возвращаем случайный образец соответствия переменной@
.Затем я просто заменяю каждое
&
случайной буквой, а каждое#
- случайной цифрой и возвращаю результат.источник
> <> ,
967860851 байтПопробуйте онлайн или посмотрите на рыбной площадке !
Этот код состоит из двух частей: сопоставление состояния с шаблоном, а затем замена шаблона случайными символами. Ни одна из этих вещей не легка в> <>.
Прежде всего, мы читаем два символа и вычисляем 2 c 1 - 9 c 2 + 533, где c 1 и c 2два символа символов. 2 и 9 были выбраны так, чтобы формула давала каждому состоянию уникальное значение, а смещение 533 было выбрано, чтобы максимизировать количество этих значений, которое можно сделать, используя только 3> <> инструкции - в итоге получилось 28 из из 41 из них. Затем мы отправляем рыбу зигзагообразно вниз по коду, пока она не найдет правильное значение, после чего она ускользает от зигзага, считывает соответствующий шаблон и вводит быстрый поток в крайний левый столбец вплоть до части 2. Некоторые из состояния, особенно те, которые имеют выбор из нескольких шаблонов, нуждались в особом рассмотрении, но мне удалось повторно использовать некоторые части кода, чтобы сэкономить несколько байтов.
Далее, иначе 2, мы должны заменить буквы «А» и «0» случайными буквами и цифрами соответственно. Единственная случайная команда в> <>
x
, которая устанавливает направление рыбы случайным образом вверх, вниз, влево и вправо - не способствует выбору чего-либо из 10 цифр или 23 букв. Давайте посмотрим на цифры немного, чтобы увидеть, как рыба это делает:Рыба входит сверху справа. Рыба устанавливает пустой стек -
0[
- затем случайно толкает1
или0
с равной вероятностью, пока длина стека не станет 4:Затем он объединяет четыре
1
s и0
s, как если бы они были двоичными числами -l1=?\2*+
давая число от 0 до 15. Если результат больше 9, он отбрасывает всю работу, которую он только что сделал, и пытается снова; в противном случае он печатает номер и продолжает:Создание случайных букв почти такое же, за исключением того, что мы также проверяем, что результат не «I», «O» или «Q» с
::8-:6-:2-**
.источник
Mathematica,
635507470 байт-165 байт от @JungHwanMin
форма ввода
источник
\[PlusMinus]
: pastebin.com/cGHvSJRiPHP, 609 байт
Основная идея состоит в том, чтобы закодировать шаблон номерного знака с цифрами, которые указывают, сколько повторений цифры или буквы следуют. От 1 до 5 обозначают количество цифр, а 7, 8 и 9 обозначают 1, 2 или 3 буквы соответственно. Несколько шаблонов разделены знаком X, пробелы и тире остаются как есть. Поиск состояния - это простой поиск ключа массива, избыточные строки помещаются в переменные для экономии места.
Ungolfed:
источник
PHP ( Phar ), 495 байт
Бинарный файл Phar можно скачать здесь и запустить с ним
php uslic.phar <state code>
.Базовый код, используемый для генерации Phar, выглядит следующим образом (820 байт):
Если вы хотите сгенерировать Phar самостоятельно из этого кода, вам нужно будет сделать следующее:
Интересно, что это сжимает лучше, чем более гольф версия .
Hexdump файла:
источник
Clojure,
502501 байтВходной аргумент является символом , а не строкой. Это позволило мне избежать многих двойных кавычек.
B
-D
кодировать повторенияA
-AAA
,1
-4
кодировать повторения0
-0000
.источник
Python 2 , 438 байт
Попробуйте онлайн!
Читаемая версия: попробуйте онлайн!
Обратите внимание, что
states
длина строки составляет всего 49 букв. Я сложил перекрывающиеся буквы в одну, насколько это возможно (MD
→DC
→CA
→AS
→SC
…), и опустил,NY, NC, PA, TX, VA, WI
что, таким образом, все соответствует-1
.В списке
codes
,12345
означают , что многие цифры и678
средние (что-5) много писем.источник
C (gcc) ,
473469 байтБлагодаря потолку кошки за -4 байта.
Первая слабая попытка. Я подозреваю, что есть способ существенно сократить строки.
Попробуйте онлайн!
источник