Ваша задача - написать программу, функцию или фрагмент (да, фрагменты разрешены), которые просто выводят целое число. Однако вы должны иметь возможность разделять отправку на префиксы, которые также производят разные целые числа. Вы не можете использовать байты, которые появились в предыдущих префиксах. Например, мы можем иметь префиксы:
1 # 1 (Now we can't use 1)
1-6 # -5 (Now we can't use - or 6)
1-6/3 # -1 (Now we can't use / or 3)
1-6/3+0xA # 9 Final submission
правила
- Ваша цель - создать, чтобы попытаться создать самые уникальные целые числа, сохраняя их близкими к нулю.
- Система подсчета очков там
((number of unique integers)**3)/(sum of absolute values)
, где чем выше ваш балл, тем лучше. Приведенный выше пример оценивает .
- Система подсчета очков там
- Должно быть как минимум два уникальных целых числа (без деления на ноль!)
- Пожалуйста, отформатируйте ваш ответ так:
# Language, \$(4^{3})/16 = 4\$
1-6/3+0xA (the full program)
- Укажите, если ваша заявка состоит из фрагментов, которые оценивают значение, функции или полные программы.
- Перечислите каждый из префиксов и (необязательно) объяснение того, как они работают.
number
code-challenge
restricted-source
Джо Кинг
источник
источник
print 123-len(open(__file__).read())
за ним по#
одному из каждого байта, который до сих пор не использовался (за исключением некоторых управляющих символов), с префиксами, отбирающими эти байты. Отрегулируйте значение 123 так, чтобы диапазон выходных значений был равен 0. Для лучшей оценки часть программы без комментариев можно переписать, используя только 7 различных символов, универсальных для Python. Это все верно?Ответы:
TI-BASIC (TI-84 + С),2383/ 14161=952,0
256 байтов в TI-BASIC разбиваются следующим образом:
"
,→
символы и символ новой строки , которые нарушают строки.Строка содержит все 237 допустимых байтов в первой категории, которой еще нет
118-length(
.Программа вычисляет 238 различных целых чисел, в диапазоне от 118 до -119. Счет2383Σ118n = - 119| п |= 952
источник
mean({1,2,3
, что бы завершитьmean({1,2,3})
. Строки также завершены:Disp "Hi!
завершает кDisp "Hi!"
. Поэтому заключительная заключительная цитата не нужнаvim, 14³ / 53 = 51,77
Попробуйте онлайн! (все префиксы)
Сломать:
источник
<esc>
представляет собой клавишу escape и<c-char>
представляет ctrl + charLenguage , 256³ / 16384 = 1024
Исходный код решения можно описать следующим образом:
Каждый прогон идентичных байтов в сочетании с предыдущими прогонами составляет префикс, а полная программа - все строки, описанные выше, объединенные.
Это оптимальный результат. (Программы печатают все числа от -127 до 128 включительно.)
Чтобы создать этот ответ, сначала я скопировал ответ Java здесь для генерации программ brainfuck для печати строки. Я запустил его с этой
main
функцией:Затем я запустил этот скрипт на Ruby, чтобы сгенерировать читабельный текст, показанный здесь:
Самая большая программа имеет длину 3594571896764310192036774345469579167648804468538578264427 байт (и печатает
-90
).источник
(Отдайте должное этой интересной утилите для конвертации.) Выше приведено следующее выражение:
... который создает прокси, который преобразует длину имени свойства в число. Первый префикс заканчивается на один символ после
.
и использует только 6 уникальных символов, исключая.$
. Следующие 63 фрагмента добавляют 63 других однобайтовых символа, которые действительны в именах свойств объекта JS. Следующие 44 фрагмента добавляют двухбайтовые допустимые символы, состоящие из неиспользуемых байтов. Конечные ломтики добавить&''
,|""**""
и,~{}
. Первый срез возвращается-2
, второй2
, затем-3
, затем3
,-4
,4
,-5
и т.д. вплоть до последних трех ломтиков , которые0
,1
и-1
.источник
Для этого мы используем отрывки мозгов, поэтому нас интересует ценность, а не то, что они делают.
Полная программа:
Префиксы и вывод
Попробуйте онлайн!
объяснение
Вероятно, это лучшее, что может дать ответ «мозговой злопамятник», поскольку мы израсходовали всех персонажей, которых волнует «мозговой вздор», и не можем сгруппировать числа ближе к нулю.
Первый фрагмент является
<>
,<>
изменяет стек , но в противном случае имеет значение ноль, поэтому мы начинаем с нуля. Отсюда мы добавляем,(())
что делает один. Мы могли бы только что сделать()
, потому что это тоже один, но если мы нажмем один сейчас, мы сможем вспомнить это позже с{}
и[]
. Это в значительной степени единственный способ{}
и[]
может создать ценность, поэтому мы делаем это. Поскольку в стеке есть одна вещь, которая[]
считается как 1, мы вычитаем 3 из общей суммы, что[[][][]]
приводит к -2. Наконец, мы используем,{}
чтобы вытолкнуть тот, который мы нажали ранее, доводя нас до -1.источник
После двух часов проб и ошибок я наконец получил все целые числа от
-4
до+5
(и7
).Это фрагмент со следующими фрагментами префикса:
Попробуйте онлайн!
источник
2*2
до22&7
(-3 & 6 вместо -3 и 4) , чтобы установить , что повторение*
.'
и_
использоватьcmp(cmp,())
вместо,cmp('','_')
если это полезно.--[-1-1-1-1-1]
, но это не улучшит ваш счет.Пакетный, 176³ / 7744 = 704
Первый префикс включает двоеточие и выводит число -88. Последующие префиксы выводят возрастающие числа, а конечные программы выводят 87.
источник
Pyth,( 2493) / 15500 = 996,0
Все экранированные символы являются однобайтовыми - я представил программу в этой форме для простоты копирования и вставки. Эта ссылка на полную программу без экранированных символов; как можно видеть, есть много заполнителей для непечатаемых символов.
Используемый подход аналогичен ответу TI-BASIC от lirtosiast , хотя я написал свой ответ до просмотра других записей. Шнур работает следующим образом:
Строка состоит из каждого однобайтового символа, кроме 0 (NULL), 127 (backspace) и шаблонных символов (
-C\|l"
). Таким образом, каждый символ строки можно удалить по одному за раз, чтобы получить строки длиной от 248 до 0. Эти программы выдают результаты в диапазоне [-124 - 124] с суммой абсолютных значений 15500.Код был сгенерирован с помощью этой программы :
И сумма чисел, сгенерированных из каждой усеченной программы, была найдена с помощью этой программы :
источник
Желе , 984
Попробуйте онлайн!
Вы можете увидеть префиксы (разделенные двойной новой строкой) здесь .
Напечатанные числа в порядке:
источник
Python 2,113/ 53=25.1132075472
Префиксы:
Не оптимально, но лучшее, что я мог лично найти с этой конкретной структурой.
источник
Python 263/ 9=24
Вот префиксы и что они выводят
источник
Чистый , 403 / 400 = 160
Попробуйте онлайн!
Определяет,
n
что производит в-20, -19, ..., 18, 19
зависимости от длины типаG
.Наименьший префикс
G
выглядит так:: G = G
, как и предшествующий сортированный импорт и определения.Самый большой префикс
G
выглядит так же , как и ранее.:: G = GABCFHIJKMNOPQRUVWXYZcjkqxyz_0123456789`
источник
Джапт ,2453/ 15006=980.0163268026123
Попробуйте онлайн!
Как и другие записи, использует длину строки. Символы в начальном фрагменте, а также
\r
(текстовые области не очень хорошо с этим{
работают ) и (символ интерполяции строки) исключаются из строки.Первая программа
_Ê-122}$($"
, каждая программа на один символ длиннее, за исключением случаев, когда вы добавляете\\
.источник
122
на,#z
но это не улучшит ваш счет.Python 3,( 63) / 12 = 18
Это фрагмент.
Отдельные фрагменты префикса:
Битовые операторы Python обрабатывают отрицательные целые числа как дополнение к двум с неограниченным числом
1
s справа, поэтому они-5
обрабатываются как...11111011
, что при ORed с...000010
дает...11111011
неизменным.источник
Excel,( 63) / 12 = 18
Prefix
вызов плохо сочетается с формулой Excelисточник
Рунические Enchantments , 117 3 /3422 = 468.034
Попробуйте онлайн!
И префикс .
Отпечатки [-58,58] включительно.
Использует тактику, аналогичную другим записям, используя постепенно увеличивающуюся строку, получая ее длину, вычитает
B
(десятичное значение66
) и печатает результат. Использует непечатаемый символ(показанный в блоке кода как, по-
€
видимому, потому что, по-видимому, это то, что€
оценивается в HTML), чтобы использовать значение байта0x80
(и использовать непригодное для использования в противном случае0x00
) и получить еще одно значение. Только байтовые значения до 127 , которые не могут быть представлены любым способом , являются10
и13
, потому что они заставляют программу две строки в высоту и не быть правильно прочитан указатель инструкции.источник
Древесный уголь ,
95³ / 2256 = 380.0421196³ / 2304 = 384Первый префикс представляет собой первые 7 байтов и выводит число
47
. Попробуйте онлайн! Последующие префиксы выводят нисходящие числа и конечные выходные данные программы-48
. Попробуйте онлайн! Редактировать: Увеличено количество очков на 3.95789 благодаря @ ASCII-only.источник