Выберите любые пять символов, которые поддерживает ваш язык. Есть 5! = 5 × 4 × 3 × 2 × 1 = 120 способов их размещения в 5-символьную строку, которая содержит каждый символ по одному разу; 120 перестановок .
Выбирайте свои символы так, чтобы при выполнении каждой из 120 строк на вашем языке из 120 создаваемых выходных значений было как можно больше уникальных целых чисел от 1 до 120 (включительно).
То есть для каждой из 120 перестановок ваших 5 символов, которые генерируют исполняемый код, который выводит одно число, вы хотите, чтобы набор всех этих чисел соответствовал как можно ближе к набору целых чисел от 1 до 120.
Таким образом, в идеале ваша первая перестановка будет выводить 1
следующую 2
, следующую 3
, вплоть до 120
. Но этот идеал, вероятно, невозможен для большинства языков и символов.
Строки из 5 символов могут быть выполнены как:
- программа без ввода
- функция без аргументов
- РЕПЛ команда
При желании разные строки можно запускать разными способами.
Чтобы выходные данные учитывались, они должны быть обычным целочисленным выходом , например:
- печатается на стандартный вывод
- возвращается функцией
- результат выражения REPL
Код должен завершаться нормально (что может привести к ошибкам до тех пор, пока номер будет выведен первым). Код, который вообще не запускается, в порядке, только (несуществующий) вывод не считается. Числа должны быть в десятичном виде, если для вашего языка нормой не является другое основание.
Представление, которое генерирует наиболее четкие числа от 1 до 120 побед. Более раннее представление выигрывает в случае ничьей.
Примечания
- Ваши 5 символов не обязательно должны быть разными, но, разумеется, наличие дублированных символов уменьшает эффективное количество перестановок.
- Выводы с плавающей запятой, такие как
32.0
count, а также plain32
. (Но32.01
не будет.) - Ведущие нули, такие как
032
число, а также обычные32
. - Допустимые результаты должны быть детерминированными и инвариантными по времени.
- Мы имеем дело с символами , а не байтами.
пример
Символы 123+*
являются разумным первым выбором для REPL Python (или многих языков). Результирующие 120 перестановок и выходов:
123+* n/a
123*+ n/a
12+3* n/a
12+*3 n/a
12*3+ n/a
12*+3 36
132+* n/a
132*+ n/a
13+2* n/a
13+*2 n/a
13*2+ n/a
13*+2 26
1+23* n/a
1+2*3 7
1+32* n/a
1+3*2 7
1+*23 n/a
1+*32 n/a
1*23+ n/a
1*2+3 5
1*32+ n/a
1*3+2 5
1*+23 23
1*+32 32
213+* n/a
213*+ n/a
21+3* n/a
21+*3 n/a
21*3+ n/a
21*+3 63
231+* n/a
231*+ n/a
23+1* n/a
23+*1 n/a
23*1+ n/a
23*+1 23
2+13* n/a
2+1*3 5
2+31* n/a
2+3*1 5
2+*13 n/a
2+*31 n/a
2*13+ n/a
2*1+3 5
2*31+ n/a
2*3+1 7
2*+13 26
2*+31 62
312+* n/a
312*+ n/a
31+2* n/a
31+*2 n/a
31*2+ n/a
31*+2 62
321+* n/a
321*+ n/a
32+1* n/a
32+*1 n/a
32*1+ n/a
32*+1 32
3+12* n/a
3+1*2 5
3+21* n/a
3+2*1 5
3+*12 n/a
3+*21 n/a
3*12+ n/a
3*1+2 5
3*21+ n/a
3*2+1 7
3*+12 36
3*+21 63
+123* n/a
+12*3 36
+132* n/a
+13*2 26
+1*23 23
+1*32 32
+213* n/a
+21*3 63
+231* n/a
+23*1 23
+2*13 26
+2*31 62
+312* n/a
+31*2 62
+321* n/a
+32*1 32
+3*12 36
+3*21 63
+*123 n/a
+*132 n/a
+*213 n/a
+*231 n/a
+*312 n/a
+*321 n/a
*123+ n/a
*12+3 n/a
*132+ n/a
*13+2 n/a
*1+23 n/a
*1+32 n/a
*213+ n/a
*21+3 n/a
*231+ n/a
*23+1 n/a
*2+13 n/a
*2+31 n/a
*312+ n/a
*31+2 n/a
*321+ n/a
*32+1 n/a
*3+12 n/a
*3+21 n/a
*+123 n/a
*+132 n/a
*+213 n/a
*+231 n/a
*+312 n/a
*+321 n/a
Сгенерировано 36 чисел, все, к счастью, в пределах от 1 до 120:
36, 26, 7, 7, 5, 5, 23, 32, 63, 23, 5, 5, 5, 7, 26, 62, 62, 32, 5, 5, 5, 7, 36, 63, 36, 26, 23, 32, 63, 23, 26, 62, 62, 32, 36, 63
Однако только 8 из них являются уникальными:
36, 26, 7, 5, 23, 32, 63, 62
Таким образом, такое представление получило бы только 8 баллов из максимальных 120.
источник
c
-подобных языках !!!Ответы:
Python3,
2127 значенийПерсонажи:
3479%
Уникальные номера:
[1,2,3,4,5,6,7,8,9,11,12,19,20,21,24,29,34,35,36,37,39,43,46,47,49,73,74]
Как было запрошено, вот перестановки, попавшие в диапазон [1, 120] . Попробуйте онлайн!
источник
/
целочисленное деление?5679%
и5789%
5679%
и5789%
те, и другие), вероятно, также оптимально для PowerShell.5679%
и5798%
), а также путем исчерпывающего поиска по всем комбинациям0123456789+-*/&|^#%
с заменой. Я согласен, что они, вероятно, оптимальны.05AB1E ,
273841 номеровСоздает уникальные числа:
[4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 25, 27, 32, 33, 34, 35, 36, 37, 38, 49, 50, 52, 54, 64, 65, 66, 67, 72, 73, 74, 81, 83, 98, 100, 101, 102]
Использует константу
4
с операциями+1
,+2
,*2
и^2
.источник
-
вместо того, чтобы+
дать более широкий спектр результатов, основанных на его некоммутативном свойстве?-
, но никогда не получал более 30 уникальных номеров. Одна проблема заключается в том, что вы также получаете отрицательные значения, которые выходят за пределы диапазона. Может быть, с заменой некоторых других операторов это может быть лучше, но я пока не нашел улучшения.Питон, 18 номеров
Выдает действительные результаты:
РЕДАКТИРОВАТЬ: Я могу засвидетельствовать, что решение TuukkaX является оптимальным для Python. Я запустил следующий код, используя все возможные комбинации из 5 печатных символов ASCII:
Результаты (после запуска в течение почти 7 часов) показали , что оптимальное решение, на самом деле 27 различных чисел, полученных три различных растворов с использованием все четыре числа и модами (
%
):%3479
,%5679
и%5789
.источник
Java 8,
24 номераВы не ожидали ответа от Java?
Это лямбда, которая может быть организована только одним из двух способов (и с любыми двумя разными цифрами!), В общей сложности два уникальных числа. Все остальное не является действительной лямбда.
На самом деле улучшен ответ, благодаря некоторой помощи из комментариев! Я не видел, что 0 был недействительным, и забыл, что переменные могут быть, как вы знаете, более чем одним символом. У нас есть 4!
Еще худшее решение
()->1
Но, с другой стороны, два уникальных ответа на Java!
источник
n->12
. Это дает вам четыре различных ответов , которые все находятся в пределах:n->12
,n->21
,n1->2
,n2->1
.Желе,
263032 номераЭто (и его анаграммы) являются полными программами, которые не принимают ввода и производят вывод при стандартном выводе.
Выводы из 120 программ находятся в том порядке, в котором Jelly генерирует их, если вы попросите его сгенерировать перестановки программы:
Если вы просто возьмете уникальные результаты в числовом порядке, вы получите:
Многие из них слишком малы, а 135 слишком велики, но есть еще 32, которые находятся в пределах досягаемости.
Основная идея состоит в том, чтобы использовать в основном монадические инструкции (в программе, содержащей только монады и нилады, каждая из которых просто преобразует предыдущий вывод), и те, которые позволяют значению быстро расходиться. Исключение составляет с
3
, который является nilad (постоянное значение 3). Если он появляется в начале программы, все операции будут выполняться с 3. Если он появляется в середине, он разбивает программу на две половины, каждая из которых выводит целое число (и, поскольку они выводятся на стандартный вывод, в результате результаты объединяются, что дает нам «объединение» в качестве дополнительной операции для генерации чисел).Операции, которые мы имеем здесь, в контексте, в котором их генерирует программа, это: приращение; декремент; постоянная 3; площадь; и двойной. Увеличение и уменьшение, к сожалению, противоположны, и уменьшение имеет неудачную тенденцию производить -1 или -2 в первом разделе (таким образом приводя к отрицательному числу в целом), но это все же дало больший разброс результатов, чем другие вещи, которые я пробовал , В частности, мы получаем довольно хороший разброс как первой, так и второй половин числа (обратите внимание, что первая половина может быть пустой строкой, если
3
это первый символ в программе).источник
Œ¿
и диадическуюœ¿
(см. В нижней части страницы атомов Wiki ), но они обе являются двухбайтовыми диадами, которые уменьшают перестановки кода, которые делают то, что вы хотите, плюс вам нужно все ваши входы должны быть списками (12
это не список).JavaScript, 27 номеров
Очень похоже на ответ TuukkaX , с другим набором цифр.
27 различных значений:
источник
~
, помочь вообще? Это унарная операция, которая может быть полезной.~
-257&~
это 11 различных значений.Брахилог , 26 номеров
Это выводит следующие числа:
[2,3,4,5,6,7,8,9,10,16,17,18,19,20,25,26,30,31,32,35,36,37,48,49,63,64]
объяснение
3
это целое число 3, очевидно.+
это приращение*
двойной^
квадратный-
это декрементЕсть много ситуаций, когда программа просто ошибается: например,
*+^3-
ошибки, потому что она спрашивает: «Возьмите 0, удвойте его, увеличьте, возведите в квадрат, результат этого квадрата равен 3, уменьшите», что, очевидно, неправильно.Любая программа, которая заканчивается,
3
будет либо выводиться,3
либо не работать.Любая программа, которая начинается с,
*3
будет бесконечно зацикливаться из-за ошибки (Brachylog пытается найти список подсписков, результат которых в 3, что невозможно).источник
Вим, 16 номеров
Распечатать
источник
3
и4
идти? Вам нужны все перестановки длиной 5.i1234
печатает "1234", это какой-то скрипт или нажатия клавиш? Если это нажатия клавиш, это не работает.МА-32 машинный код, 8 цифр
Шестнадцатеричные байтовые значения:
Код запускается как функция, возвращающая значение в
al
.Допустимые перестановки:
Я выполнил поиск методом перебора со следующими ограничениями:
b0
- для инициализацииal
регистраc3
- возврат; следующие байты отбрасываютсяadd
or
and
sub
xor
aad
inc
dec
Это оставляет только 3 изменяемых байта с максимально 15 возможными результатами. Из них максимум 9 могут отличаться (на самом деле, это происходит только для одного набора байтов!). Одно из значений выходит за пределы диапазона, поэтому остается 8 значений. Есть еще один набор байтов
что также дает 8 различных значений - программы одинаковы, за исключением
sub
замененных наxor
, что делает два возможных выходных идентичных.Все остальные наборы байтов дают 7 или меньше возможных результатов.
источник
Желе , 33 номера
Ḥ
двойной (слева);2
буквальный 2;3
буквальный 3;+
добавить (слева, справа); иc
выберите (слева, справа), то есть количество способов выбрать правые объекты из коллекции левых объектов.Числа приведены с примера программы:
Я попытался выбрать легкие для анализа, но некоторые редкие и немного странные для анализа, например
23
:... и
72
и13
использовать неявную печать:Обратите внимание, что
Ḥ34+c
также производит33
уникальные значения в[1,120]
.источник
Brain-Flak 1
Brain-Flak требует сбалансированных фигурных скобок, поэтому программа из 5 символов действительна, только если один из символов начинает комментарий. Это оставляет нам 4 персонажа для работы. Из них 2 должны быть
(
и в)
противном случае ничего не будет получить в стек. Те, кто должен идти первым и четвертым с комментарием last ((..)#
). Теперь мы можем поставить()
,{}
,<>
или[]
внутри.{}
,<>
и[]
каждый оценивается как 0, но()
равен 1. Это означает, что(())#
это единственная строка из 5 символов, которая создает действительную программу Brain-Flak.Попробуйте онлайн!
Если бы вместо этого был вопрос «Каковы 6 самых сильных персонажей», ответ был бы
(){}[]
таков, когда Brain-Flak завершил свою работу, используя только это подмножество.источник
@ij
флаг отладки приостанавливает работу программы и позволяет пользователю вводить код мозгового штурма, который будет запускаться там, где этот@ij
флаг появился в коде. Довольно мощный, но, к сожалению, требует пользовательского ввода и поэтому здесь бесполезен.(){}[]
набрал бы 0. Вы забыли правило перестановок;)Гексагония , 13 цифр
Это 13 печатных номеров с одной возможной программой для каждого из них:
Программы должны быть достаточно понятными.
@
завершает программу,!
печатает текущее значение,)
увеличивает его2
и4
добавляет к текущему значению (где начальное значение0
). Фактическая шестиугольная структура исходного кода здесь не имеет значения, программы могут быть просто прочитаны слева направо.Это должно быть оптимальным, хотя вместо того , чтобы
2
и4
вы можете выбрать любую пару цифрx
иy
такие , что2 ≤ x ≤ y-2
.Вышеупомянутое решение было найдено (почти исчерпывающим) методом грубой силы, который требовал одного
!
(в противном случае он ничего не печатал бы), одного@
(в противном случае программа не прекратит работу) и заполнения оставшихся трех символов любой (повторяющейся) комбинацией из следующий набор символов:Я не вижу, как любая из других команд могла бы генерировать больше разнообразия.
источник
Perl, 27 номеров
3479%
Perl не имеет встроенного REPL, поэтому вы можете использовать его
re.pl
из Devel :: REPL .Результаты:
Брут-форс с использованием следующей программы:
источник
perl -de 1
какое-то время. Это технически открывает отладчик в пустой программе, но в него встроен REPL-подобный. К сожалению, вам нужно писатьp
в начале каждой строки, чтобы заставить его фактически напечатать результат.R,
1518 номеровНе очень большое число, но, возможно, это лучшее, что можно сделать с помощью R. Я искал все комбинации цифр
0..9
, операторов+ - * / ^
и символа комментария#
, а следующие восемь всех вывели 18 уникальных целых чисел от 1 до 120.В качестве примера давайте возьмем
-#146
. Вот 18 целых чисел, которые мы можем получить:Если вам интересно, какой (некрасивый) код используется для проверки всех возможных комбинаций, вот оно. Он выводит число уникальных целых чисел от 1 до 120 для каждой комбинации символов длиной 5 в файл с именем «файл данных» в текущем рабочем каталоге.
источник
Октава, 18
Это было найдено с помощью грубого поиска по символам
*+-/0123456789:;<\^|~%
. Но это заняло слишком много времени, чтобы вычислить ...Возможные выводы:
источник
Октава, 15 номеров
Не много хвастаться, но это лучшее, что я могу получить в Octave:
Это дает числа:
Я тоже получил 16, но похоже, что это ответ Сефы ...
источник
0123456789+-*.%
для октава139-%
, которая производит массив 18:1 2 3 4 6 8 9 13 16 19 22 31 38 39 88 91 92 93
. Таким образом, вы можете получить еще 3 номера :)PHP, 15 номеров
Использует тот факт, что php печатает что-либо вне его тегов дословно (без использования этого вы можете сделать ровно 1 число с чем-то вроде
<?=1;
). Также использует реальный символ возврата каретки, а не\r
.Создает (отсортировано, удалено ведущие 0):
из которых действительными уникальными номерами являются:
источник
12\r30
печатает12\r30
, терминал просто перезаписывает первые два символа.\r
не для печати, выход12\r30
находится30
.Cubix , 7 номеров
Выводит эти числа:
Любая действительная программа Cubix для этой задачи должна иметь
O
целое число,@
чтобы завершить программу (Cubix никогда не слышал об «ошибках»). Это дает нам 3 символа, с которыми можно поиграть, чтобы получить наибольшую отдачу. Кроме того, из-за того, что Cubix размещает код на кубе, первый символ будет бесполезен, если только один из них не является направленным символом.Я обнаружил, что наиболее эффективный способ генерирования нескольких чисел -
"
это поместить строку символов в стек. Тщательно переставив, мы можем разместить несколько символов в последнем месте и просто вывести их коды символов. Используя)
для увеличения верхнего элемента, мы можем создать дополнительные выходные данные из нескольких из этих соглашений.Здесь используются два основных типа программ. Первое это:
который расширяется до
Результирующая программа помещает
2
в стек, увеличивает его на)
, выводит с помощьюO
и завершает с помощью@
.Второе это:
который расширяется до
Результате программа толкает полукокс-коду
)
,O
и@
, увеличивает последнюю с)
, с выходамиO
, и заканчивается@
.источник
> <> , 6 номеров
Получил 2 номера благодаря Тил Пеликан
Производит уникальные номера
[1, 4, 5, 49, 59, 108]
Нам нужно
n
напечатать номер.Нам нужно
;
прекратить.Это оставляет нам только 3 символа для работы.
Несколько различных комбинаций
value
&operator
вместе с"
подтвержденным производят 6 уникальных значений, но я не нашел ничего лучше этого.источник
Groovy, 10 номеров
Решения Man JVM ПЛОХО для этого ... Кто знал?
Результаты в:
Чего ждать? Как, черт возьми, это делает 17, спросите вы?
Коммерческая тайна, в Groovy / Java целые числа, начинающиеся с 0, являются восьмеричными. Код, который я использовал для проверки Groovy-ответов, если кто-то хочет меня победить:
источник
МАТЛ, 15 номеров
%
является оператором комментария, поэтому он будет «вырезать» во всех возможных местах один раз, помогая создать все возможные комбинации заданных цифр и их подмножеств:источник
J, 16 номеров
Ничего особенного, просто протестировано
1234
со всеми 1-символьными глаголами, которые были разумными.]
выбирает правильный аргумент.Произведенные уникальные числа
из которых 16:
Находятся в диапазоне [1120].
Протестировано с
источник
Япт , 41 число
Практически просто методом проб и ошибок, поэтому может быть лучшее решение. Использует целые числа
3
&4
и ярлыки Japt для возведения в квадрат, сложения1
и умножения на2
. Все 120 программ выдают целое число,>0
но только 78<=120
из них являются уникальными и только 41 из них.Генерирует числа:
Просмотр списка номеров или сборник действительных программ
объяснение
Несколько замечаний о Japt, которые актуальны здесь:
U
, которая по умолчанию0
равна, автоматически вставляется в начале,3Ä4 = 3+14 = 17
и, аналогично,4Ѳ = 4*2**2 = 16
), и,²
тогда, то²
все и до нее, по существу, игнорируются.Объяснения нескольких программ (производящие
1
,3
,37
и93
, соответственно):источник
Befunge, 11 номеров
Befunge немного ограничен, потому что он поддерживает только однозначные литералы. Таким образом, лучшее, что я мог придумать, было 11 чисел, предполагая, что вычисление должно оставить нас с одним и только одним числом в стеке.
Лучшие персонажи:
358*%
Сгенерированные числа: (только один пример каждого)
источник
Python, 16 номеров
Использует #, чтобы закомментировать все ненужные номера.
источник
дк, 19 цифр
Выходные данные находятся в верхней части стека, а ошибки (включая недополнение стека) игнорируются. Допустимые перестановки:
Вот программа Python, которую я использовал, чтобы показать эти результаты:
Две другие строки, которые дают ту же оценку 19,
32d+*
и*4zO+
.источник
Smalltalk, 26 номеров
Пояснение: 12r35 является обозначением для использования radix 12, и, таким образом, это 3 * 12 + 5.
Это можно проверить в Squeak:
дает:
Если мы заменим последнюю строку на:
тогда мы получим выражения:
Я хотел обмануть и определить метод r в Integer как
К сожалению, компилятор включает 1235r, потому что он распознает незаконченное число с помощью radix, а не сообщение r, отправленное на 1235 ...
Я мог бы также легко изменить компилятор, но на мой вкус это слишком много читерства.
источник
Математика, 16 номеров
Не очень интересно, но я не могу найти ничего лучше, используя арифметику. Единственное, что может сработать, это использовать
!
для факториала или двойного факториала, но это настолько склонно к генерации огромных чисел, что невозможно грубой силой.16 чисел (в диапазоне), которые могут быть сгенерированы из вышеуказанных 5 символов:
источник
Рунические чары, 19 номеров
По сути, 3 литерала, оператор pow и команда «напечатать весь стек и завершить».
234p@
отпечатки 812 (3 ^ 4 соединены с 2). Полный список перестановок , обратите внимание, что@
он был заменен дляak@
того, чтобы генерировать новую>
строку между каждым результатом и a был добавлен, чтобы гарантировать, что каждая строка выполняется независимо. Также обратите внимание, что выходные данные не в том же порядке, что и программы, которые их сгенерировали (так как некоторые программы могут завершаться быстрее).Многие перестановки ничего не выводят (например,
@234p
илиp234@
), но 19 приводят к выводу в допустимом диапазоне.Возможные числа (и одна возможная программа, которая приводит к этому;
.
указывает, что эти позиции могут быть любым из оставшихся символов, так как он не выполняется):источник
TI-BASIC, 12 номеров
Скорее всего, есть лучшая комбинация, но я не смог ее найти.
источник