концепция
Каким образом вы можете зашифровать английский алфавит, чтобы его можно было петь под мелодию Twinkle Twinkle Little Star, не разрушая мелодию?
правила
Перестановка
Давайте просто предположим, что буквы, содержащиеся в каждом из следующих наборов, могут свободно заменяться по умолчанию, не разрушая мелодию:
- {A, J, K}
- {B, C, D, E, G, P, T, V, Z}
- {Я, Y}
- {Q, U}
- {S, X, F}
- {M, N}
- Поэтому H, L, O, R и W заблокированы на месте
Выход
Программа должна вывести единственную СЛУЧАЙНУЮ строку (или список символов), содержащую полный английский алфавит в любом порядке, при условии, что этот порядок удовлетворяет вышеуказанным условиям. У вас не должно быть возможности предсказать, какая строка будет выводиться вашей программой (если мы игнорируем заполнение), то есть вы не можете просто жестко ее кодировать.
Ваша программа должна иметь некоторую положительную вероятность (не обязательно равномерную) генерации каждого из выходов.
Не существует особых ограничений форматирования, касающихся пробелов, разделителей или регистра, просто будьте последовательными.
Цель
Побеждает несколько байтов!
Примеры:
- KCDBPSVHIAJLMNOZQRXGUEWFYT
- А, G, Z, V, Р, X, C, H, Y, K, J, L, N, М, О, Т, U, R, S, D, Q, B, W, F, I, Е
- KVTDCFBHIJALNMOPURSZQGWXYE
- jcdebxthikalnmogursvq pwfyz
- АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ
Nonexample:
- HLWROABCDEFZXYGIJKMNPQTSVU
Подтверждение концепции: (Python3, 529 байт)
import random
g1 = ['A', 'J', 'K']
g2 = ['B', 'C', 'D', 'E', 'G', 'P', 'T', 'V', 'Z']
g3 = ['I', 'Y']
g4 = ['Q', 'U']
g5 = ['S', 'X', 'F']
g6 = ['M', 'N']
random.shuffle(g1)
random.shuffle(g2)
random.shuffle(g3)
random.shuffle(g4)
random.shuffle(g5)
random.shuffle(g6)
print(g1[0] + g2[0] + g2[1] + g2[2] + g2[3] + g5[0] + g2[4] + 'H' + g3[0] + g1[1] + g1[2] + 'L' + g6[0] + g6[1] + 'O' + g2[5] + g4[0] + 'R' + g5[1] + g2[6] + g4[1] + g2[7] + 'W' + g5[2] + g3[1] + g2[8])
Z
быть «заперто на месте», оно не рифмуется с остальными?Ответы:
05AB1E , 28 байт
Выводится в виде одной строчной строки.
Попробуйте онлайн или проверьте случайных выходов сразуN .
Объяснение:
Посмотрите эту подсказку 05AB1E (раздел Как сжимать строки, не являющуюся частью словаря? ), Чтобы понять, почему
.•¬=©ƶÓÄûkTVã”ØζÞ•
это так"ajk bcdegptvz iy qu sxf mn"
.источник
Python 3 ,
140133124123 байтаПопробуйте онлайн!
-1 байт, спасибо Джо Кингу
Python 2 ,
174170158 байтПопробуйте онлайн!
источник
Рубин , 102 байта
Попробуйте онлайн!
источник
Pyth ,
595756 байтПопробуйте онлайн!
Вывод представляет собой массив строчных букв.
источник
R ,
9391 байтПопробуйте онлайн!
источник
Perl 6 , 76 байт
Попробуйте онлайн!
Блок анонимного кода не принимает аргументов и возвращает список символов.
Объяснение:
источник
JavaScript -
421344328320306280277276... 176 байт-77 байт - сам по себе
-18 байт - благодаря @tsh и @Geza Kerecsenyi, которые заставили меня увидеть то, на что @tsh изначально указал тоже
-8 байт - благодаря @Geza Kerecsenyi
-14 байт - с помощью @Geza Kerecsenyi
- 28 байтов - самостоятельно
-3 байта - снова с помощью @Geza Kerecsenyi
-1 байтов - как это могло произойти ...
...
-100 байт - @Kaiido убил его и за несколько шагов до того, как все это сломалось до 176 байт
Golfed:
или попробуйте онлайн !
источник
'BCDEGPTVZ'.split``
вместо.split('')
-2.y=q=>q.split``
в верхней части своего кода, и сделать все строки массивов, в которые вы передаетеy()
- например,a=['A','J','K']
становитсяa=y("AJK")
'BCDEGPTVZ'.split('')
наy('BCDEGPTVZ')
'abcdef'.includes(s)?r(eval(s)):l[i]
Рунические чары , 210 байт
Попробуйте онлайн!
Рандомизация не является равномерной, так как в Рунической системе нет хорошего способа сделать это. Вместо этого он случайным образом поворачивает каждую коллекцию букв (например
[BCDEGPTVZ]
, одну группу) на некоторую величину (например, поворачивая вышеуказанный набор на 4, где вершина стека находится справа, результат будет[BCDEGZPTV]
), а затем случайным образом решает, стоит ли перевернуть стек. Он выполняет эти операции 15 раз. В результате все возможные заказы возможны, но не одинаково вероятны. (В случае, если этого недостаточно, его дальнейшее увеличение обходится в ноль байтов , до 15000 циклов перемешивания).Это раздел кода, который обрабатывает тасование:
Остальная часть кода разворачивается в это:
Если буквы остаются не перетасованными (но однажды перевернутыми) путем изменения двух байтов, алфавит печатается нормально , что можно использовать для проверки того, что все группировки букв печатаются в правильных местах. Пробел, сдвигающий
B
команды не по фазе, заключается в том, что все IP-адреса могут использовать цикл функций одновременно, не сталкиваясь, а затем снова возвращать их в фазу.Для игры в гольф сначала было обрезано любое пространство, которое можно было удалить по всем строкам, затем каждые два пространства были преобразованы в a
y
, и каждая последовательностьyyyy
была преобразована в̤
потому что̤
иyyyy
имеют одинаковую величину задержки, но дешевле на 2 байта. Выход цикла также был объединен сHLORW
основным сегментом программы, чтобы сэкономить на байтах интервала (12 байтов).источник
Perl 5 ,
103 9185 байтПопробуйте онлайн!
Этот код (ab) использует тот факт, что вывод Perl хэш-ключей (
%l
) является случайным, чтобы создать отображение (%k
) всех модифицируемых букв на один из их возможных аналогов. Во время вывода предполагается, что любая несуществующая клавиша остается неизменной.источник
keys
определенно является хорошим подходом, но вы можете сэкономить 6 байт, используяsort rand 2,...
вместо этого :( Попробуйте онлайн!Желе , 34 байта
Попробуйте онлайн!
источник
Python 3 , 149 байт
Попробуйте онлайн!
Рандомизация с использованием pop () для набора букв
источник
APL (Dyalog Extended) , 55 байт
Полная программа. Печатает заглавные буквы с начальным и конечным пробелом, но без промежуточных пробелов.
Попробуйте онлайн!
⎕A
прописные буквы алфавита'AjkBcdegptvzIyQuSxfMn'(
…)
Применить следующую анонимную молчаливую функцию с этим в качестве правого аргумента и указанной строкой в качестве левого аргумента:⊣
для левого аргумента,⊂
разбить его, начиная новый сегмент, где∊
символы левых аргументов являются членами правого аргумента (то есть заглавными буквами),⍨
Append⊂
Вложите (рассматривать его как отдельный элемент)⍤
с⊢
правым аргументом⌈
прописные буквы все{
...}/
уменьшить на следующую анонимную лямбду, давая ..."QU"λ("SXF"λ("MN"λ"A-Z"))
:⊢⍵
на правильном аргументе (алфавит в процессе шифрования)(
…)@(∊∘⍺)
Применить следующую анонимную молчаливую функцию к подмножеству, которое является членом левого аргумента (группы рифм)⊢
на этом подмножестве⊇
изменить порядок, чтобы быть?⍨
случайная перестановка подсчета∘
длины≢
букв в подмножествеисточник
Древесный уголь , 43 байта
Попробуйте онлайн! Ссылка на подробную версию кода. У древесного угля нет тасующих операторов, но я придумал метод отбора проб без замены. Объяснение:
Обведите каждую букву алфавита.
Разбейте строку
AJK BCDEGPTVZ IY QU SXF MN H L O R W
на пробелы и зациклите подстроки.Зацикливайтесь на том, сколько раз текущая буква появляется в подстроке. (Я использую цикл, потому что условному требованию требуется
else
вызов. В качестве альтернативы я мог бы отфильтровать подстроку, содержащую текущее письмо, для того же количества байтов.)Напечатайте случайный символ, но исключите те, которые уже были напечатаны.
источник
Сетчатка , 80 байт
Попробуйте онлайн!
Вероятно, не самый удачный метод, но я все равно отправлю его.
Объяснение:
Установите рабочую строку в
1A2B2C2D2E5F2GH3I1J1KL6M6NO2P4QR5S2T4U2VW5X3Y2Z
. Существует ряд перед каждой буквой в группе, напримерA
,J
иK
все они имеют1
перед ними.Отметьте раздел кода, который будет генерировать некоторый код сетчатки, а затем запустите его.
Установите рабочую строку в
123456
Заменить каждого персонажа на
?O`{character}.¶
Удалите завершающий символ новой строки и завершите группу, чтобы сгенерировать код. Группа сгенерирует код:
{n}.
соответствует всем экземплярам числа n, за которым следует символ.?O
сортирует каждый экземпляр случайным образом, и это делается для всех наборов символов.Наконец, удалите все числа и неявно выведите сгенерированную строку.
источник