Сценарий: вы - разработчик программного обеспечения, работающий в правительственной компании, которая разрабатывает номерные знаки для автомобилей и других транспортных средств. Вас попросили разработать программное обеспечение, которое генерирует номерные знаки. Прежде чем вы приступили к работе, ваши начальники установили эти основные правила.
Номерной знак не может содержать:
ASS
666
69<any number here>
<any number here>69
KKK
SHT
Правила и требования:
- Номерной знак должен быть сгенерирован случайным образом.
- Как только случайный номерной знак сгенерирован, тот же номерной знак не может быть сгенерирован снова.
- Вы должны вывести не менее 200 уникальных номерных знаков. Вы можете генерировать больше, если хотите .
- Вы можете хранить сгенерированные пластины в файле, чтобы «запомнить» их.
- Номерной знак содержит 2 раздела, один из которых содержит только три буквы, а другой содержит только три числа, разделенных тире, например:
233-ADF
илиADF-233
. - Вы можете использовать только цифры и заглавные буквы.
- Номерные знаки могут быть записаны на стандартный вывод или файл.
- Каждая «сторона» номерного знака будет содержать либо три цифры, либо буквы.
- Это код-гольф , поэтому самый короткий, самый популярный, выигрывает ответ. Победитель будет выбран через семь дней.
Основные правила
- Ответ должен включать, но не ограничиваться следующим.
- Название языка.
- Количество символов
- Размер файла.
- Как выполняется код
- Сам код.
- Пример: Python 234 символа или Python 23mb .
Если мне нужно уточнить какие-либо дополнительные детали, пожалуйста, укажите это в комментариях, и я добавлю это в свой пост. В любом случае, удачи, и создайте мне несколько соответствующих номерных знаков!
Обновление 1: Победитель будет выбран чуть раньше.
Оказывается, я должен скоро отправиться в поездку, поэтому я буду выбирать победителя около 00:00 UTC, 25 июля. После того, как победитель выбран, вы все равно можете подавать заявки, просто знайте, что победитель выбран. Бай.
Обновление 2: Победители!
У нас есть победители! Ура! Сыр и вино всем, кто участвовал! Вот кто победил.
- 1 место: Анхель - Баш (95 знаков)
- 2 место: Мартин Бюттнер - Mathematica (182 байта)
- 2 место: Эмилио М Бумачар - Пиг (92?)
- 2 место: Питер Тейлор - Golfscript (98 знаков)
- 3 место: Марк Томас - Руби (127 знаков)
Ух, три вторых места связи. Вау. Конкурс окончен, но вы можете подать заявку, если хотите. Бай!
источник
AAA-
Ответы:
Баш (95 символов)
Сохранить скрипт как
m
в папке в вашем PATH с установленным битом выполнения.Запустить как
bash m
. Пластины хранятся в файле рЭто эквивалентно выполнению следующего:
Предостережение: Финал
m
должен бытьexec m
(+5 символов), чтобы не оставлять процессы в ожидании завершения (но вы можете иметь тысячи без особых проблем)Кредит идет на http://www.cyberciti.biz/faq/linux-random-password-generator/ за идею использования
tr -dc
источник
grep -v
исключает как черный список, так и список уже сгенерированных табличек (grep
ожидается, что p будет содержать по одному шаблону на строку, но, поскольку таблички не содержат метасимволов регулярных выражений, они соответствуют друг другу). Мы генерируем только одну или ноль пластин за одну итерацию, поэтому после каждой итерации полный (обновленный) список исключаемых пластин будет считываться grep. : DPYG - 92
Теперь можно выбирать равномерно из всех неиспользованных планшетов, сохраняя спецификации ОП, при этом будучи короче еще на 1 символ.
Теоретически возможно, что список из 999 пластин будет содержать достаточно повторений, так что обрезанный набор будет меньше 200. Но шансы на это бесконечно малы. В десяти испытаниях самая низкая длина, которую я получил, была 994.
РЕДАКТИРОВАТЬ: изменил 999 на K (что pyg для 1000), чтобы сохранить два символа по совету bitpwner.
источник
Mathematica, 182 байта
Тьфу, это долго
Ungolfed
Довольно просто. Создает случайные таблички и отфильтровывает дубликаты и запрещенные до тех пор, пока не будут найдены 200.
источник
GolfScript (98 символов)
Это генерирует все возможные номерные знаки в случайном порядке, используя некрасивое базовое преобразование с последующей фильтрацией. Их много, поэтому не ожидайте, что они будут выполняться быстро, но вопрос не накладывал никаких ограничений на время выполнения.
источник
JavaScript (ES6) - 213
Это, вероятно, может быть улучшено. Протестировано на консоли Firefox.
Измените это предупреждение на,
console.log()
если вы хотите проверитьисточник
Рубин -
136133129 знаковУродство. Думаю, что есть возможности для улучшения. Просто введите код
irb
илиpry
нажмите Enter для запуска:источник
Рубин, 127 символов
Моя попытка "читаемой" версии Ruby:
источник
Python 2,7 - 258 символов
Я не профессиональный программист или что-то еще, поэтому я бы сказал, что доволен результатом.
Размер файла составляет 4,0 К, запустить с
python file.py
!источник
pass
бытьcontinue
? Вы также можете сохранить некоторые символы, сделав отступ с 1 пробелом вместо 4.for i in range(0,200):
можно заменить наfor i in range(200):
.continue
.. Ноpass
сделал свое дело. Плюс короче. И когда я попыталсяfor i in range(200)
, это только сделало 199 ^^, я подсчитал их потом, сделавduplicates
переменную и поместивduplicates += 1
передpass
и посчитав вхождения для-
в списке / строке.\t
и замена их на 1 пробел не изменили количество символов ... Спасибо за предложения!if k in t: pass
, так как он ничего не делает.Питон - 208
Привет, вот мой удар по генерации номерного знака. Это решение похоже на решение @ bitpwner, но без строкового модуля и вместо списка для номерного знака, которое я выбрал для использования набора, а также сначала разрешает номера.
Пример вывода:
источник
Python, 252 байта
Вот мой вклад. Я впечатлен этим, но я знаю, что другие сделали лучше с питоном.
источник
Питон - 165
Этот импорт ...
Если есть необходимость начать случайным образом с цифр или алфавитов, которые я не считаю нужными, тогда 190.
источник
PHP
341324320Было лучшее, что я мог сделать.
Чтобы запустить код, просто сохраните его как файл .php и перейдите к нему на любом веб-сервере. Он попытается создать файл черного списка p.txt, если он еще не существует. Однако вам может потребоваться указать его с полным путем к серверу, если у вас нет прав root.
Сам код здесь предварительно до гольфификации:
Был настолько коротким, насколько я мог получить :-(
Пример вывода
РЕДАКТИРОВАТЬ: привести в порядок пару операторов if для использования краткой формы.
источник
$string = (rand(1,2)==1) ? "$rand_number-$letters" : "$letters-$rand_number";
Delphi, 161 байт
Вот мой взгляд на это. Он выводит номерные знаки на стандартный вывод без перевода строки между ними. Если требуется LF (не указано в правилах), то это добавляет дополнительные 4 байта.
Гольф версия:
Ungolfed:
Как запустить:
источник
PHP, 267
Это настолько коротко, насколько я могу это понять.
Пластины хранятся в файле "p".
источник
R, 229 символов
Я уверен, что это можно улучшить:
Запустите в консоли, распечатывает список номерных знаков.
источник
Кобра - 198
источник
ECMAScript 6 -
155168158Предупреждение : 200 предупреждений Диалоги (изменение
alert
кconsole.log
тесту)Редактировать : Ой. Оригинальная версия печатных дубликатов ...
Редактировать 2 : теперь ближе к исходной партитуре - переключен с набора на ассоциативный массив с некоторыми нечетко повторяющимися проверками, позволяющими печатать по ходу дела
Протестировано в консоли Firefox.
источник
l=x=>String.fromCharCode(65+r()*26);
. Я думаю, я не знаю, что происходит сl=x=>...
f=a=>b
это особенность ES6, для которой в основном используется условное обозначение, иfunction f(a) { b }
на данный момент она поддерживается только (?) Firefox.JavaScript (ES6) 184
Как обычно, тестирование в FireFox консоли и изменения
alert
кconsole.log
или быть готовым к прессеescape
200 раз.источник
Python3, 257 символов
Пример вывода:
источник
;
вместо\n
.PHP, 167
это на 100 символов меньше, чем у лучших PHP! :)
надеюсь, вам понравится. В случае, если это разрешено:
только 141 символ, но не тасует символы и числа. Любые предложения приветствуются :)
источник
F #, 264 символа
Не совсем язык, предназначенный для игры в гольф, но я уверен, что это можно улучшить. Использование Seq.exists с лямбдой довольно раздражает, так же как и множество паренов и отсутствие неявного преобразования.
Использует рекурсию, продолжает идти вечно.
Может быть запущен в FSI.
источник
Python 203
Я не уверен, что это технически важно, но мне понравилось, так что я все равно публикую. В то время как я генерирую ответы псевдослучайно, как и почти все остальные, я стратегически выбрал случайное зерно так, чтобы неправильные ответы не попадали в вывод. Таким образом, мой ответ на самом деле не способен генерировать весь набор действительных ответов, а также не может генерировать недействительные.
источник
Perl - 123 персонажа
Ungolfed:
Если у кого-то есть идеи поиграть в гольф дальше, дайте мне знать, мне интересно. Если вы хотите получить более подробное объяснение части кода, оставьте комментарий, и я с удовольствием объясню больше.
источник
Javascript - 283
327символовРедактировать:
После реализации предложений от Alconja , вот моя новая версия:
1) Удалить переменную: s и использовать литерал: "\ n" [-4] [323]
2) Удалить "var o =" ", i, r, n, l," [-17] [306]
3) Удалить Переменная: t и используйте литерал: «ASS | KKK | SHT | 666» [-4] [302]
4) Установите m = Math.random и используйте вместо него «m» [-7] [296]
5) Используйте (m ( ) + "") вместо m (). toString () [-6] [290]
6) Удалить ненужные ";" [-7] [283]
Старая версия: Javascript - 327 символов
Я уверен, что есть место для совершенствования ... Я довольно неопытен в Code-golfing:
Вот отформатированная версия «Ungolfed» с «неминифицированными» именами переменных / функций:
Вот отладочная версия, которую можно вставить в URL-адрес избранного / закладки браузера. Вывод помещается в «TEXTAREA» в новом «окне» вместо «alert ()»:
Вот отладочная версия, отформатированная:
источник
var
(просто назначение будет делать, 323 ), вам не нужны;
s, если нет следующего утверждения, следующего за (например, последний символ в строке, или перед a}
, 316 ), следите за всем, что требует объявить / использовать больше места, чем просто встроенный (например, вашаs
переменная, 312 ), то же самое для обратного, если что-то используется больше, чем . один раз (например ,Math.random(...)
доr=Math.random ... r(...)
, 307 ,(x+"")
корочеx.toString()
, 300