Французские номерные знаки
Французские номерные знаки располагаются в последовательном порядке, следуя определенной схеме цифр и букв:AB-012-CD
Вызов
Напишите программу или функцию, которая для данного номера выводит соответствующий французский номерной знак . Ваша программа не должна обрабатывать какие-либо особые случаи, как указано на связанной странице. Он должен быть в состоянии генерировать все 26*26*1000*26*26 => 456 976 000
возможные таблички, или насколько ваш язык может поддерживать.
Система нумерации выглядит следующим образом:
- С AA-000-AA по AA-999-AA (числа развиваются первыми);
- С AA-000-AB на AA-999-AZ (затем последняя буква справа);
- AA-000-BA до AA-999-ZZ (затем первая буква справа);
- AB-000-AA до AZ-999-ZZ (затем последняя буква слева);
- BA-000-AA до ZZ-999-ZZ (тогда первая буква слева).
вход
- Индекс номера пластины в виде целого числа
Выход
- Соответствующий французский номерной знак
Дополнительная информация
- Письма должны быть в верхнем регистре
- Вы можете использовать индексирование как на основе 0, так и на основе 1, чтобы сгенерировать пластины (то есть AA-000-AA может соответствовать
0
или1
, предполагая, что все другие тестовые примеры используют одинаковое индексирование.
Это код-гольф , самый короткий ответ на любом языке выигрывает!
Контрольные примеры (индексация на основе 0)
0 -> AA-000-AA
1 -> AA-001-AA
999 -> AA-999-AA
1000 -> AA-000-AB
675 999 -> AA-999-ZZ
676 000 -> AB-000-AA
456 975 999 -> ZZ-999-ZZ
Ответы:
Pure Bash (без внешних утилит), 64
Попробуйте онлайн! - требуется около 10 секунд, чтобы пробежать 7 тестов.
eval
Требуется для обеспечения расширения переменной (х) происходит перед расширением распорки.источник
Perl 5 (-ap), 47 байт
Попробуйте онлайн!
PHP , 74 байта
Попробуйте онлайн!
источник
Python 3 ,
79 7877 байтПопробуйте онлайн!
Я почему-то никогда не понимал, что
f"string"
ярлык формата существует, пока не увидел ответ Чёрной Совы Кая.источник
tuple
на(*...,)
f"string"
делает ваш ответ Python 3.6+ эксклюзивным, просто чтобы вы знали. Хорошая работа, хотя!Рубин,
615955 байтТакже 55 байтов:
Попробуйте онлайн!
Это инициализирует счетчик
AA-AA000-
, увеличивает его вn
разы (умножая строку кода, которая делает это на n иeval
ing), а затем перемещает последние 4 символа после 3-го.источник
->n{s=('AA-AA000-'..?Z*9).step.take(n)[-1];s[2]+=s.slice!5,4;s}
длиннее, но мне интересно, можно ли его сократить.->n{s=[*'AA-AA000-'..?Z*9][n];s[2]+=s.slice!5,4;s}
должно работать и имеет длину всего 50 байтов, но сначала генерирует каждую возможную пластину. : - /PHP ,
968479 байт-5 байт благодаря замечательным комментариям Исмаэля Мигеля .
Попробуйте онлайн!
Я пользуюсь тем, что вы можете увеличивать буквы в PHP! Так
AAAA++
быAAAB
иAAAZ++
стал быAABA
. Я рассчитываю, сколько раз буквы должны быть увеличены, получая целую частьinput/1000
. Затем увеличьте длину четырех символов так, чтобы первые два и два последних символа автоматически стали левой и правой сторонами пластины.Например для ввода
675999
числа приращений буквы есть(int)(675999 / 1000) = 675
, значитAAAA
станетAAZZ
.Наконец, вычисляется среднее число,
input%1000
и все печатается в указанном формате с помощью printf .%.2s
печатает первые два символа строки,%03u
дополняет число слева тремя нулями.источник
%0.2s
тебя можно написать%.2s
. Это экономит вам 1 байт. (В качестве небольшого совета: если вы хотите вывести десятичное число с определенным количеством десятичных разрядов, вы можете сделать%.2f
(или любой другой модификатор), как это работает аналогичным образом)0
. Редактировать: глядя на документацию, кажется, что я даже не нуждался в этом в первую очередь: P$x++^$argn/1e3
вместо,$x++<(0^$argn/1e3)
и вы должны сохранить 4 байта. Это будет цикл до($x++^$argn/1e3) === 0
, и это ,0
когда$x
и$argn/1e3
того же целого числа (используя^
повергает число в целое число). Вы можете попробовать это на sandbox.onlinephpfunctions.com/code/…C
8886 байтовДовольно просто, он использует деление и модуль для извлечения полей, добавляет «A» для букв, чтобы сопоставить их с символами ASCII, и форматирование printf для чисел.
Попробуйте онлайн!
источник
Haskell,
85817977 байтПопробуйте онлайн!
источник
05AB1E ,
252220 байт-2 байта (и увеличил производительность, не генерируя весь список) благодаря @Grimy .
Индексирование на основе 0.
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
Последняя часть (
s₄‰`UèX₄+¦'-.øý
) может бытьI₄÷èI₄+3.£.ý'-ý
для альтернативы равными байтами:попробуйте онлайн или проверьте все контрольные примеры .
источник
Au2ããI₄‰`UèX₄+¦'-.øý
илиAu2ããI₄÷èI₄+3.£'-.øý
.J ,
564946 байтПопробуйте онлайн!
-3 байта благодаря FrownyFrog
Все это всего лишь 7 вложенных поездов - если это не весело, то что?
источник
JavaScript (Node.js) , 82 байта
Попробуйте онлайн!
источник
Рубин , 51 байт
Попробуйте онлайн!
источник
R 101 байт
Попробуйте онлайн!
Просто делает необходимые арифметические вычисления. Я сэкономил 5 байт, добавив в вектор
a
бесполезное значениеa[4]
, что позволило мне повторно использовать вспомогательный векторb
.B
AB-012-CD
n
n %/% 676000 %% 26
%/%
%%
источник
Желе ,
2622 байтаМонадическая ссылка, принимающая целое число (1-индексированное), которое выдает список символов ... Сумасшедший-медленный, так как сначала строит все листы!
Попробуйте онлайн!(не завершено)
Или попробуйте версию с уменьшенным алфавитом (только «ABC» для букв).
Для кода, который завершается своевременно, вот 32-байтная полная программа (с индексами 0), которая создает единственную пластину вместо использования модульной арифметической и числовой базовой декомпрессии:
Попробуй это!
источник
APL + WIN, 61 байт
Запрашивает целое число:
Попробуйте онлайн! Предоставлено Dyalog Classic
источник
Древесный уголь , 33 байта
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Введите число.
Распечатать а
-
.Добавьте 1000 к числу, затем приведите результат к строке и выведите последние три цифры.
Разделите число на 1000, затем добавьте 26⁵, чтобы преобразование в пользовательскую базу с использованием прописного алфавита привело к получению строки длиной 6, которая затем делится на пары букв.
Распечатать а
-
.Напечатайте последнюю пару букв.
Перейти к началу номерного знака.
Распечатайте остальные нужные буквы.
источник
Perl 6 , 42 байта
Попробуйте онлайн!
Порт Грили Perl 5 решение. Медленно для больших входных значений.
источник
Excel,
183167155147 байт-16 байт благодаря @Neil. (6 с помощью
E3
)-12 байт благодаря @Keeta. (
TRUNC
вместоQUOTIENT
)-8 байт благодаря @Jonathan Larouche (
INT
вместоTRUNC
)Объединяет 5 частей:
источник
MOD(QUOTIENT(A1,1E3),26)
работает? Кроме того , почему1E3
для1000
но не и26E3
т.д.?456 975 996
->[Z-996-ZZ
CHAR(65+)
молча усекает десятичные дроби до%.9999997614649
. Больше, чем это округляется. СравнитеCHAR(65+24.9999997614649)
иCHAR(65+24.999999761465)
.Чисто , 107 байт
Попробуйте онлайн!
Определяет
$ :: Int -> [Char]
предоставление n-го номера с нулевым индексом.источник
Japt , 21 байт
Непристойно медленный! Серьезно, даже не пытайтесь запустить его!
Совет Кевину, который заставил меня понять, где я ошибался, когда боролся, чтобы заставить это работать прошлой ночью.
Попробуйте - ограничивает диапазон номеров
000-005
.источник
Forth (gforth) , 94 байта
Попробуйте онлайн!
0 индексированные. Ввод взят с вершины стека
Объяснение кода
источник
q , 78 байтов
источник
T-SQL, 135 байт
источник
Python 2 , 88 байт
Попробуйте онлайн!
источник
Красный ,
130127 байтПопробуйте онлайн!
источник
Python 3 , 89 байт
Попробуйте онлайн!
-1 байт благодаря mypetlion
источник
chr(x//26000%26+65)+chr(x//1000%26+65)
чтобы'%c%c'%(x//26000%26+65,x//1000%26+65)
сохранить 1 байт.MATLAB , 113 байт
Пояснения:
Первая строка определяет функцию, которая будет выдавать символ (от
A
доZ
), функцию из 2 входов. Индексный номерx
для преобразования в номерной знак и целое число,p
которое будет использоваться как показатель степени для 26 (то есть26^p
). Этот второй вход позволяет скорректировать вычисления для первой цифры буквенно-цифровой таблички (p=3
) до последней (p=0
).Например, для второй цифры, повторяемой каждые 1000 * 26 * 26 итераций, операция:
mod(idivide(x,1000*26^2),26)
вернуть индекс в от 0 до 25, который затем преобразуется в ASCIIchar
путем добавления 65 (потому что индекс0
основан)Вторая строка просто объединяет символы вместе. Каждый буквенно-цифровой символ рассчитывается с использованием функции
c(x,p)
, числовой символ просто вычисляется с помощьюmodulo
операции и преобразуется в строку.Каждый компонент строки, составляющий номерной знак, выглядит следующим образом:
Поскольку я не могу позволить вам попробовать MATLAB онлайн ( отредактируйте: на самом деле вы можете попробовать его онлайн ), я предоставлю пользователям MATLAB возможность проверять контрольные примеры:
выходы:
Вариант: обратите внимание, что возможен вариант разрешения
sprintf
илиfprintf
преобразования числа в символ. Это позволяет упростить функциюc
, но в целом дает в этой реализации еще несколько байт (119 байт):источник
C (gcc) ,
136106105 байтовПопробуйте онлайн!
-7 байт от celingcat 's решение , с дополнительным -23 вдохновлены ею
-1 байт от решения потолка catcat, изменяя
char[]
кwchar_t[]
неявному приведению кint[]
Использует индексирование на основе 0.
Объяснение / Ungolfed:
источник
a
иb
параметры из макроса и получил до 106 байтЮлия 1,0 , 86 байт
Попробуйте онлайн!
источник
Котлин , 93 байта
Попробуйте онлайн!
источник
Python 3 , 161 байт
Попробуйте онлайн!
источник