В одном из наших проектов мы недавно обнаружили особенно большой метод генерации 6-символьной строки из 15-символьного алфавита. Некоторые из нас заявили: «Могу поспорить, что мы можем получить это в одной строке», что положило начало небольшой внутренней игре в Code Golf.
Ваша задача - победить нас, что, без сомнения, не заставит себя долго ждать!
Оригинальный алгоритм использовал алфавит 0-9A-E, но мы экспериментировали с другими алфавитами. Поэтому есть три подзадачи.
- Создайте
6
строку символов, случайным образом выбирая их из произвольно заданного15
алфавита символов, напримерABC123!@TPOI098
. (Это всего лишь пример, и его следует настраивать, не влияя на количество байтов.) - Создайте
6
строку символов, случайным образом выбирая15
алфавит символов0123456789ABCDE
. - Создайте
6
строку символов, случайным образом выбирая из15
алфавита символов на ваш выбор (только для печати символов, пожалуйста).
Каждый персонаж должен иметь равные шансы на выбор и повторение должно быть возможным.
Лучшее, что мы смогли решить для каждой из подзадач:
- "ABC123! @ TPOI098" -
24 bytes
- "0123456789ABCDE" -
21 bytes
- Пользовательский алфавит -
13 bytes
Ваша оценка - это сумма байтов в решении каждой подзадачи. то есть наша оценка в настоящее время 58.
Мы пытались использовать, среди прочего, CJam и Ruby. Оригинал был на C #. Используйте любой язык, который вам нравится, но нам будет интересно увидеть решения на этих языках, особенно
источник
Ответы:
Желе , 38 байт
TryItOnline ссылки A , B и C .
A :
ABC123!@£POI098
22 байта(думая о сжатии, чтобы уменьшить это)
B :
0123456789ABCDE
8 байт:C :
123456789ABCDEF
(выбор), 8 байтов:Как?
источник
CJam (23 + 14 + 10 = 47 байт)
Произвольный алфавит: 23 байта ( онлайн-демонстрация )
Шестнадцатеричный алфавит: 14 байтов ( онлайн-демонстрация )
Пользовательский алфавит:
ABCDEFGHIJKLMNO
10 байт ( онлайн демо )рассечение
Шестнадцатеричный является интересным:
Шесть символов остаются в стеке и печатаются автоматически.
источник
AbHb
блестящий Я думал об этом общем подходе, но это_9>7*+
было слишком долго.Perl, 46 + 26 + 26 = 98 байт
Большая заслуга принадлежит @Dom Hastings для экономии 13 байтов!
3 программы в значительной степени идентичны, за исключением алфавита, который меняется.
Жестко закодированный алфавит (
ABC123!@)POI098
в этом примере) -> 46 байт:say map{substr"ABC123!@)POI098",15*rand,1}1..6
Фиксированный алфавит
0123456789ABCDE
-> 26 байт:printf"%X",rand 15for 1..6
Пользовательский алфавит
0123456789ABCDE
в этом случае -> 26 байт:printf"%X",rand 15for 1..6
Вы можете поместить их все в файл, чтобы запустить их:
(
say "";
только здесь, чтобы улучшить выходной формат)источник
say
:say map{("ABC123!@)POI098"=~/./g)[rand 15]}1..6
иsay map{(A..O)[rand 15]}1..6
. Для второго вы можете использоватьprintf
:printf"%X",rand 15for 1..6
сохранить 11 над всеми! Я уверен, что Тон может посоветовать немного тайной магии, чтобы сэкономить больше!substr
спасает другое:say map{substr"ABC123!@)POI098",15*rand,1}1..6
printf"%X"
,substr..rand
иmap
, это немного менее очевидно, поэтому я позволяю людям наслаждаться магией Perl без спойлеров! : DR 33 + 43 + 59 = 135 байт
Произвольно жестко заданный алфавит (измените строку, чтобы изменить алфавит):
Алфавит
[0-9A-E]
:Пользовательский алфавит из stdin:
Во всех случаях выводится слово вывода на стандартный вывод.
источник
JavaScript (ES6),
167166164163 байтаСохранено 1 байт благодаря Neil
Сохранено 2 байта благодаря ETHproductions
Сохранено 1 байт благодаря premek.v
Закодировано:
"ABC123!@TPOI098"
(58 байт)Исправлено:
"0123456789ABCDE"
(5857 байт)Пользовательский:
"()+.1=>?M[afhnt"
(514948 байт)источник
(n=6)=>n?f(n-1)+("ABCDE"[n=Math.random()*15|0]||n-5):''
экономит вам байт.1/8+Math
это здорово :).1+JSON
лучше;)JSON+f
([object JSON](n
=>" (JNOS[]bcejnot"
)JavaScript (ES6), 184 байта
Пользовательский алфавит: 66 байт
0-9A-E: 63 байта
0-9a-e: 55 байт
(Вычтите 6 байтов, если допустима случайность на основе даты.)
источник
**
:_=>((Math.random()+1)*15**6|0).toString(15).slice(1)
f=
в число байтовq, 42 байта
A
19 байт
В
14 байт
С
9 байт
(использует первые пятнадцать букв алфавита)
источник
Юлия (36 + 26 + 21 = 83)
источник
CJam, 48 байтов
Произвольный алфавит, 23 байта:
Попробуйте онлайн!
Шестнадцатеричные цифры, 15 байтов:
Попробуйте онлайн!
Алфавит
ABCDEFGHIJKLMNO
, 10 байт:Попробуйте онлайн!
источник
~c
а не'A+
возвращает что-то технически печатное.Рубин 47 + 37 + 31 = 115
Закодировано: "ABC123! @ TPOI098" (47)
Исправлено: "0123456789ABCDE" (37)
Таможня: "ABCDEFGHIJKLMNO" (31)
источник
05AB1E , 43 байта
Арбитражный алфавит (
ABC123!@TPOI098
), 23 байта Попробовать онлайнПочти шестнадцатеричный алфавит (
0123456789ABCDE
), 10 байт. Попробуйте онлайнПользовательский алфавит (
abcdefghijklmno
), 10 байт. Попробуйте онлайнисточник
Python 2, 70 + 70 + 64 = 204 байта
К сожалению, второй пример проще с первым методом, чем что-то вроде
choice([randint(48,57)),choice(65,69)])
источник
from random import*
? Я думаю, что вы можете использоватьimport random
иrandom.choice
по крайней мере в первых двух примерах.import random random.choice
27, ноfrom random import* choice
26, такжеimport random as r r.choice
27format(randrange(8**8),'X')
, я думаю , мы можем сделать немного лучше, используя .F
Витси, 27 +
2422 +1310 =646259 байт# 1:
Попробуйте онлайн!
# 2:
Попробуйте онлайн!
# 3:
Где доступны символы:
Попробуйте онлайн!
источник
J 24 + 24 +
1810 = 58 байт8 миль сэкономлено благодаря миль!
Да, вторая строка не легко сжимается в J:
Если шестнадцатеричный алфавит в нижнем регистре
,hfd?6#15
подойдет , то для 9 байтов, как заметил @miles.Во всяком случае,
?6#15
это 6 случайных чисел от 0 до 15;{~
это взятие из.u:
преобразует числа в символы Последний пример кодируетABCDEFGHIJKLMNOP
.Бонус: общий случай
{~6?@##
примерно:источник
hfd
который преобразует в ч ех е ром д ecimal. Вы можете получить 9-байтовое решение, используя,hfd?6#15
. В последнем случае, просто чтобы что-то легко прочитать, используется алфавит из'A'
10-байтного решенияu:65+?6#15
, что в итоге составляет 24 + 9 + 10 = 45.PHP, 46 + 36 + 35 = 117 байт
Твердо закодировано (46 байт)
(47 байт)Шестнадцатеричный (строчные буквы) (36 байт)
В верхнем регистре 46 байтов в версии с жестким кодом.
Пользовательский (AO) (35 байт)
источник
Scala, 154 байта
Твердо закодированный алфавит (54 байта):
Шестнадцатеричный алфавит (54 байта):
Пользовательский алфавит
ABCDEFGHIJKLMNO
(47 байт):Объяснение:
'A'to'O'
создает последовательность из 15 символов, от А до Оисточник
Пип , 42 байта
Твердо закодированный алфавит, 22 байта:
Шестнадцатеричные цифры, 11 байт:
Первые 15 строчных букв, 9 байтов:
объяснение
Все три программы начинаются с
L6O
: цикл 6 раз и выводит заданное выражение.RC"..."
: Случайный выбор персонажа из жестко закодированной строкиRR15TB16
: RandRange (15), преобразованный в базу 16z@RR15
: строчный алфавитz
, проиндексированный с помощью RandRange (15)Попробуйте онлайн!
источник
Скрипт / skQuery , 108 байт
Закодировано (43 байта):
0123456789ABCDE (34 байта):
Выбор (31 байт):
источник
`
влево?Джольф, 26 + 14 + 13 = 51 байт
Пользовательский алфавит, 24 байта. Попробуй это здесь!
0-9A-E алфавит, 14 байтов. Попробуй это здесь!
lp^0wά
являетсяlp
(0-Z) нарезанным (l
) из0
to15
(wά
).1-9A-F алфавит, 13 байтов. Попробуй это здесь!
lp^1ά
то же самое, что и выше, за исключением1
к16
.Общий метод:
Другие попытки (с использованием сжатия строк):
источник
PowerShell v2 +, 45 + 44 + 37 = 126 байт
Фиксированный алфавит, 45 байт
Почти шестнадцатеричный алфавит, 44 байта
Пользовательский алфавит (от A до O), 37 байт
Все они следуют одному и тому же шаблону - цикл from
0
до5
, каждая итерация выбираетRandom
символ или значение ASCII,char
преобразует его как -array, если необходимо, и-join
объединяет его вместе в строку. Эта строка остается в конвейере, а вывод неявным.Примеры
источник
Пайк, 35 байт
Произвольный алфавит, 20 байтов
Попробуй это здесь!
Шестнадцатеричный алфавит, 8 байт
Попробуй это здесь!
Пользовательский алфавит, 7 байт
Попробуй это здесь!
Алфавит выбран:
abcdefghijklmno
источник