Если вам это нравится, рассмотрите возможность участия в:
Создайте 12 фрагментов / выражений на одном языке, которые приводят к числам от 0 до 10 и 42 соответственно, но без записи каких-либо буквенных числовых, строковых или символьных данных.
Встраиваемые данные, такие как PI()
и ALPHABET()
, хороши, как, например, константы CJam U, X, Y, Z и A, а также обработка BLEND, CHORD, CENTER, BREAK и LINES.
Каждый фрагмент должен быть в состоянии стоять самостоятельно, то есть они не могут быть взаимозависимыми. Однако внутри одного фрагмента вы можете назначить переменную и использовать ее свободно, если вы обращаетесь к ней напрямую по имени, а не через строку, содержащую ее имя.
Все фрагменты должны быть действительны на компьютере отправителя на момент отправки (согласно сообщениям SE), но могут не зависеть от необычных локальных условий, таких как количество файлов в каталоге, точная дата или время или конкретный ввод от пользователя ,
Примеры допустимых фрагментов
3: INT(LOG10(YEAR(TODAY())))
потому что это остается верным в обозримом будущем
4: CUBICROOT(LEN(CHARACTERSET()))
потому что набор символов из 256 букв очень распространен
8: SQRT(SYSTEMTYPE())
потому что 64-битные системы очень распространены
Примеры неверных фрагментов
5: LEN(USERNAME())
потому что большинство людей не используют «Admin» для входа в систему :-)
9: LOG10(SYSTEMMEMORY())
потому что он работает только в системах с ровно 1 ГБ памяти
42: CODE("*")
потому что он содержит строковый / символьный литерал
Результатом каждого фрагмента должно быть фактическое число (значение, целое число, число с плавающей запятой и т. Д.), Которое можно использовать для дальнейших вычислений с использованием того же языка, что и фрагмент, т.е. не текстовая строка, представляющая это число.
Разрешены только языки символов.
Оценка - это общее количество байтов всех 12 объединенных фрагментов. Новые строки, разделяющие фрагменты, не учитываются.
Обратите внимание, что приведенные выше правила могут препятствовать участию некоторых языков, даже если они завершены по Тьюрингу.
Вопросы-Ответы
В Могут ли программы принять любой ввод?
О Да, но вы можете не просто запросить ввод и ввести соответствующий номер.
Q Разрешены ли физические цифры (не данные)? Да, например .
LOG10()
Q Символы в Ruby считаются литералами?
А да.
Q Включает ли оценка новые строки между каждым фрагментом? No.
Q Достаточно ли TI-BASIC «на основе символов», чтобы быть действительным?
А да.
Q Ложь и истина считаются числовыми литералами? Нет, они являются приемлемыми.
В Можем ли мы использовать числовой литерал для вызова функции, если это единственный способ, и число не влияет на вывод функции?
О Да, если это нормальный способ написания кода на вашем языке.
Q Мой язык предполагает, что в начале каждой программы / выражения есть [что-то]. Должен ли я включить его, или мои фрагменты должны просто работать, если они помещены в середину программы / выражения? Они просто должны работать в середине программы / выражения.
Q Как насчет литералов регулярных выражений? Запрещено, для языков , которые только делают регулярные выражения , за исключением.
В Является ли приемлемым один фрагмент кода, который может печатать все указанные числа?
О Нет, они должны быть отдельными и взаимно независимыми.
Q Могу ли я предположить, что шаблон int main() {}...
или аналог?
А да.
Q Какие выходные типы данных разрешены?
A Любой числовой тип данных, например, int, float и т. Д.
Q Нужно ли печатать результат каждого фрагмента?
A Нет, достаточно сделать результат доступным для последующего использования.
В Допустимы ли предварительно установленные переменные? Да, и они становятся сброса (если он был изменен) для каждого фрагмента.
Q π и e считаются числовыми литералами? Нет, вы можете использовать их.
Q Могу ли я вернуть 4 и 2 в разные ячейки для 42?
О Нет, они должны быть связаны как один номер.
Q байтов или символов? Bytes, но вы можете выбрать любой желаемый кодовую.
Q Могут ли использоваться постоянные функции и заданные переменные, такие как J 9:
, Actually 9
и Pretzel 9
?
A Да, если словарный запас конечен (19 для J, 10 для Actual и Pretzel).
Ответы:
Гексагония , 13 байт
Попробуйте онлайн!
В Hexagony
0
сквозными9
являются функции, которые умножают текущую память на 10, а затем добавляют число, представленное именем функции. Следовательно, первый фрагмент пуст, поскольку воспоминания начинаются как0
.Например, если текущая память есть
65
, выполнение функции3
создаст текущую память653
.(Для downvoters: downvote все, что вы хотите; я готов.)
источник
Функцион , 1222 байта
Помимо числовых литералов, есть два способа, которыми я могу создать значение (любое значение вообще) в Funciton: выражения stdin и lambda. Stdin - это одно поле, в то время как для полного лямбда-выражения требуется больше синтаксиса, поэтому я собираюсь использовать stdin. Однако, несмотря на то, что stdin может быть чем угодно, все следующие операции работают независимо от того, какой ввод предоставляется.
Все используемые здесь библиотечные функции существовали до публикации заявки.
0 (40 байт в UTF-16)
Это использует сырой синтаксис для менее чем. Значение никогда не бывает меньше самого себя, поэтому результат равен 0.
1 (52 байта в UTF-16)
⌑
возвращает ленивую последовательность, содержащую один элемент, иɕ
подсчитывает количество элементов. (Ленивая последовательность достаточно ленива, чтобы этот фрагмент на самом деле вообще не оценивал стандартный ввод!)2 (70 байт в UTF-16)
= 2¹.
ʂ
генерирует все подпоследовательности последовательности и, таким образом, превращает последовательность из n элементов в последовательность с 2ⁿ.3 (88 байт в UTF-16)
= 2 + 1.
♯
увеличивает значение на 1.4 (88 байт в UTF-16)
= 2².
5 (106 байтов в UTF-16)
= 4 + 1.
6 (106 байт в UTF-16)
= 3 факториала.
7 (110 байт в UTF-16)
= A (2, 2) (функция Аккермана).
8 (118 байт в UTF-16)
= 2 << 2 (сдвиг влево).
9 (128 байт в UTF-16)
= 3 × 3.
10 (146 байт в UTF-16)
= 5 + 5.
42 (170 байт в UTF-16)
= 6 × (6 + 1).
источник
JavaScript,
144141140138132125123 байтаС помощью @ edc65 , @Sjoerd Job Postmus , @DocMax , @usandfriends , @Charlie Wynn и @ Mwr247 !
источник
-~-~Math.PI
и-~-~-~Math.PI
сохранить другой байт (дважды).(escape+NaN).length
. PS Сегодня я узнал, что JavaScript действительно странный ...NaN
это число, но буквально не число: PМышь-2002 ,
27261714 байтПервые фрагменты нажимают 0-10, а
ZR+
толкает25
тогда17
и25 17 + 42 =
есть1
.источник
int main() {}...
эквивалент, который заставит его работать.CJam,
2724 байтаСпасибо @ MartinBüttner за -1 байт!
Попробуйте онлайн!
источник
Brainfuck, 70 байт
Каждая строка должна быть запущена индивидуально.
Первые 10 говорят сами за себя: мы увеличиваем значение ячейки через каждый плюс.
42 намного сложнее. Он основан на том факте, что большинство интерпретаторов «мозгового пота» используют 8-битные ячейки, а это означает, что все операции над ним выполняются по модулю 256.
--
Устанавливает ячейку от 0 до 254. Затем мы вводим цикл, который выполняется до тех пор, пока ячейка # 0 не станет 0. Каждая итерация добавляет 1 к ячейке # 1 и добавляет 6 к ячейке # 0. Этот цикл выполняется 43 раза, поэтому ячейка № 1 равна 43. Наконец, мы вычитаем 1 из ячейки № 1, чтобы сделать ее 42.Я получил самые эффективные 42 из когда-либо найденных на http://esolangs.org/wiki/Brainfuck_constants
источник
Тьма ,
339303 байтаВот где действительно светит тьма . Возьми? : ~)!
Без печати (замените пробел
\s
в первой строке, так как иначе не будет отображаться):С печатью:
В этом случае каждая строка должна запускаться индивидуально, так как программа заканчивается на свету (пробел). Однако это можно записать в одну или несколько строк в одной и той же программе.
Обычная темнота (█) увеличивает регистр на 1, а инструкция ■ (своего рода мини-тьма) выводит содержимое регистра.
источник
Perl 5,
86757166 байтВсе
^F
s являются буквенными управляющими символами (0x06 в ASCII) и, следовательно, одним байтом.Спасибо msh210 за сохранение 11 байтов и Dom Hastings за 9 байтов!
источник
!$[+ord$/ # -1 + 10
Я не понимаю. В строке 2 вы говорите, что!$[
дает вам 1, а не -1, поэтому этот фрагмент дает 11.MATL, 30 байт
H
,I
ИK
предопределенные константы для 2, 3 и 4 (напримерpi
).O
иl
являются функциями, которые возвращают матрицу нулей (O
) или ones (l
), размер по умолчанию - 1x1.:
делает вектор иs
суммирует его, поэтомуK:s
делает вектор от 1 до 4 и суммирует его, чтобы получить 10.Yq
является n-й простой функцией,KYq
равно как и 4-е простое число, 7.источник
Yq
функция (и ее реализация) была вашим хорошим предложением :-)IK+
будет работать так же хорошо для 7, но это слишком скучно: PПролог,
11399 байтОтрывки:
Объединяет математические константы e и pi различными способами, преобразованными в int.
Редактировать: Сохранено 14 байтов с использованием поплавков для 0-2.
источник
PHP,
15714591 байтПервый раз, когда я писал на Code Golf, решил, что я попробую. Я поправлюсь в конце концов: P Если вы видите какие-либо очевидные (для вас) места, где я могу сохранять персонажей, дайте мне знать.
РЕДАКТИРОВАТЬ: понял, что мне не нужны точки с запятой, так как это всего лишь фрагменты.
РЕДАКТИРОВАТЬ 2: Спасибо Blackhole за много предложений!
источник
LC_ALL
для 0 (-1 байт),DNS_A
для 1 (-3 байта),LOCK_NB
для 4 (-3 байта),LC_TIME
для 5 (-7 байт),LOG_INFO
для 6 (-8 байт),INI_ALL
для 7 (-5 байт),…IMG_WBMP
Для 8 (-4 байта),SQL_DATE
для 9 (-9 байтов),SQL_TIME
для 10 (-3 байта) иLOG_INFO*INI_ALL
для 42 (-11 байтов). Следовательно, в общей сложности 51 байтов сохранено! Эти константы действительны по крайней мере в PHP 5.6.1 для Windows.LC_ALL
зависит от локали?setlocale()
для изменения всех категорий локалей. Но значение самой константы, конечно, не зависит от локали :).Python 2,
191159158157156149146 байтМоя первая подача, надеюсь, я все правильно понял! Исходя из того, сколько времени я потратил на это, я думаю, что для некоторых из них наверняка найдется лучший.
Большое спасибо FryAmTheEggman!
источник
True
идиомы для 1 должно быть приемлемым, поскольку я не знаю, когда они не эквивалентны фрагментам.True is not 1
но для всех вычислений, основанных на 1, это помогает! Редактирование сейчас.#8 len(`id(id)`)
. Тогда 8, 9 и 10 будут короче. Также, возможно, добавьте гиперссылку, чтобы попробовать онлайн .len(`{()}`)
на 11 байтов, и это дает вам от 7 до 10 короче.C #, без использования, 234 байта
Это гораздо скучнее, чем я думал вначале. У меня были довольно разнообразные идеи, такие как
new[]{true}.Length
иtrue.GetHashCode()
иtypeof(int).Name.Length
и иuint.MinValue
т. Д., Но яnew int()
победил их всех.источник
var a = new int();
и затем использоватьa
в каждом фрагменте?using
объявлений.int a=-~-~new int();a<<a
PowerShell, 147 байт
Они используют
+
для неявного приведения вещей к целым числам. В более поздних числах используются перечисления .Net Framework из PowerShell, которые имеют правильные значения.-~-~-~
используемые в JavaScript, C # и PHP ответы будут- -bnot - -bnot - -bnot
в PowerShell.x^y
возведение в степень, используемое в ответах Perl, илиx**y
в Python или JavaScript ES7, будет[Math]::Pow($x,$y)
константы е и пи тяжелые
[Math]::E
и[Math]::PI
источник
x^y
это XOR в JavaScript. JavaScript (ES7) имеет**
для показателей. ИсточникDC , 35 байт
Чтобы проверить фрагменты, добавьте a,
f
чтобы напечатать стек и передать эту строкуdc
:источник
E
иF
здесь есть цифры (даже когда они больше, чем входной радиус). Доказательством этого является то, что они объединяются в виде цифр; напримерF0
->150
. Вы можете увидеть то же поведение с десятичными цифрами после изменения основ ввода и вывода.TI-BASIC, 41 байт
0 ~ 10:
42:
В TI-BASIC все неинициализированные однобуквенные переменные начинаются с 0, а
Xmax
(правая граница окна экрана графика) начинается с 10.Математическая константа
π
составляет один байт , ноe
составляет два байта.источник
Python 2,
306275274 байтаЯ использовал тот факт, что для любого x (целое число, а не 0) выражение
x/x
равно 1 и играл с некоторыми побитовыми операциями.Я настроил фрагменты так, чтобы они все еще соответствовали требованиям (спасибо @nimi, это сэкономило мне 24 байта), но вы должны вручную протестировать их. Вот код и количество отдельных байтов:
источник
i=id(id);r=~i/i
Математика ++, всего 92 байта
0 (1 байт):
a
1 (2 байта):
!a
2 (3 байта):
_$e
3 (4 байта):
_$pi
4 (7 байт):
_$e+_$e
5 (8 байт):
_($e+$e)
6 (9 байт):
_$pi+_$pi
7 (8 байт):
_($e*$e)
8 (9 байт):
_($e*$pi)
9 (10 байт):
_($pi*$pi)
10 (12 байт):
_$e*_($e+$e)
42 (19 байт):
_($pi+$pi)*_($e*$e)
источник
Javascript (Env браузера),
155136130 байтСпасибо:
@Ismael Miguel : 155 -> 136 -> 130 байтов
источник
-~[]+[]+-[]
для производства10
. Он вернет строку, но все равно будет использоваться как число. Кроме того, вы можете использовать-~(top+top.s).length
для расчета42
(-8 байт) и отказаться от зависимости от Google Chrome. Чтобы сохранить больше 3 байтов, используйте(P=Math.PI)*P>>+[]
для вычисления 9.~(~[]+[]+-[])
для генерации9
. Это должно сократить еще несколько байтов.+[12]
дает12
и+[1, 2]
даетNaN
. Я ненавижу JS[1,2,3]
=>,"1,2,3"
а строки - к числам наподобие"12"
=>,12
но если в строке есть нечисловые символы, возвращается приведениеNaN
.+[1,2]
бросает в строку затем число, но строка содержит запятую, так"1,2"
становитсяNaN
.Серьезно,
3933 байтаМатериал в скобках это объяснения:
Hexdumps программ:
Спасибо Quintopia за 6 байтов!
источник
HlPD
сохраняет 2 байта на 42, иQlP
сохраняет байт на 7, иQlª
сохраняет байт на 9, иQl╙
сохраняет байт на 8. Я думаю, что все серьезно снижается до 33 байтов, связывая Pyth.постоянный ток, 42 байта
Результаты
Существует не так много способов генерировать новые числа с помощью DC. Я использую
O
: выходная база, изначально 10;K
: точность, изначально 0;z
глубина стека, изначально 0;Z
значащие цифры операнда. Мы объединяем их с обычными арифметическими операторами.Тестовая программа
источник
Mathematica, 101 байт
Я уверен, что некоторые из них неоптимальны. Эти круглые скобки действительно дороги.
Для согласованности первые два также могут быть
E-E
и,E/E
конечно, но я подумал, что это довольно изящно получить0
и1
вычислить с неопределенными переменными.источник
0
. Если впоследствииa
получит значение0
, это не проблема, если оно не используется приa/a
оценке.Japt ,
343330 байт1 байт сохранен благодаря @ThomasKwa
Вот что означает каждый из этих символов:
источник
A-I
- это переменные, которые по умолчанию присваиваются различным номерам, как показано выше.A-F
назначены на 10-15. Это делает эти переменные недействительными?Marbelous , 98 байт
Не очень интересно, он опирается на
?n
устройства, которые превращают любой мрамор в случайное значение в диапазоне 0..n (включительно), побочным эффектом которого является то, что?0
любой мрамор превращается в 0 независимо от входных данных. Я думаю, что использование литералов разрешено, потому что значение не влияет на результат, и нет другого способа вызвать функцию один раз в Marbelous.0:
1:
...
9:
10:
42:
источник
> <> , 86 байт
ln;
lln;
llln;
lll+n;
lll:+n;
llll+n;
llll++n;
илиllll:+n;
lllll+n;
lllll:+n;
lllll++n;
илиllllll+n;
llll+:+n;
илиlll:l+*n;
llll*ll+*n;
Полагается на размер стека, чтобы получить его литералы.
источник
n
каждый из них, потому что функции в языках на основе стека могут оставлять выходные данные в стеке на -11 байт.;
общей сложности 22 байта и рассмотреть конец функции, достигнутой в конце строки, но это немного неоднозначно, так><>
как не имеет готовых функций.><>
, ваши функции должны принимать возвращаемую позицию (x & y) в стеке в дополнение к их параметрам, убедитесь, что они не мешают выполнению вычислений (это[
удобно в этом контексте), затем перейдите в позицию возврата после завершения выполнения. Я сделал POC некоторое время назад, проверьте это, если вам интересно;
. Причина, по которой я говорю оставить,;
состоит в том, что иначе нет способа обозначить, когда функция заканчивается без.
. Кажется, что большинство людей считают это справедливым, но я мог бы попытаться написать конкретный мета-пост здесь, если вы обеспокоены.><>
фрагментов кода.
будет лучшим способом придерживаться определения функции, как описано в наиболее одобренном ответе мета-поста, однако я согласен,;
что это хорошая альтернатива, которая требует меньше объяснений.Формулы MS Excel,
163151150143 байтаНе совсем язык программирования, но здесь это идет ...
PI()
используется в большинстве случаев, так как это более короткий (насколько мне известно) способ ввода числового значения без использования числового или строкового литерала.N
преобразует различные вещи (включая логические) в числа иT
преобразует различные вещи в текст.TYPE
возвращает 2 для текстового аргумента и 4 для логического аргумента.TRUNC
отбрасывает дробную часть (т.е. округляет положительные числа вниз),EVEN
округляет до следующего четного числа иODD
округляет до следующего нечетного числа.CODE(-PI())
это код ASCII первого символа преобразования в текст -π, т.е. 45 (для «-»).РЕДАКТИРОВАТЬ: Удалены знаки равенства из числа байтов (-12!) - как указано Nᴮᶻ в комментариях, они не должны быть включены.
РЕДАКТИРОВАТЬ 2: Предполагая, что остальная часть листа пуста, можно использовать ссылку на пустую ячейку как ноль (опять же, предложенный Nᴮᶻ), при условии, что мы добавляем знак минус (или используем его в другом числовом выражении) для разрешения типа двусмысленность.
источник
=Z9
=
с, спасибо. Что касается вашего предложения, я специально избегал ссылок на ячейки, чтобы гарантировать, что формулы не зависят от содержимого таблицы - еслиZ9
содержит текст,=Z9
больше не будет возвращать ноль. Я решил не предполагать ничего о столе.Z9
на ячейки: на пустом листе есть пустое значение, которое преобразуется0
во многих случаях, но может быть преобразовано в""
(пустую строку), если используется в некоторых выражениях - очень похоже на неинициализированный вариант VBA - поэтому он не является строго эквивалентным0
. Например,= 0&"a"
оценивается,"0a"
но= Z9&"a"
оценивается"a"
. Это может быть решено, однако, путем добавления унарного-
к ссылке (таким образом, заставляя его быть числовым - опять же, как в VBA). Так что-Z9
можно использовать как ноль. Я только что обновил ответ. Еще раз спасибо.DUP , 68 байт
Try it here.
Есть много способов сделать это, но я злоупотребляю стеком возврата для этого.
объяснение
Чтобы полностью понять это, вам нужно понять поведение DUP в отношении лямбд. Вместо того, чтобы помещать лямбду в стек, она фактически выталкивает текущий IP в стек при обнаружении лямбды. Это может объяснить первые 3 фрагмента, которые включают лямбды.
Следующие фрагменты используют возвращаемый стек. Когда
!
выполняется, текущий IP передается в стек возврата, а вершина стека устанавливается в качестве нового IP для запуска лямбда-выполнения.)
выталкивает число из стека возврата в стек данных.Этого достаточно, чтобы объяснить остальные фрагменты. Если вы все еще не получаете его, имейте в виду, что Stepкнопка довольно удобна!
источник
05AB1E,
403824 байтаисточник
Y·
более стек чистой , чемYx
,X
может быть использован вместоº
здесь (это значение по умолчанию1
,º
значитlen(stack)>1
, так оно не по умолчанию ни к чему). Кроме того, ваш счет будет 24, а не 35 (CP-1252, переводы строк не учитываются, если они являются отдельными фрагментами).₆t
теперь можно 6 (нажать 36, квадратный корень), чтобы сохранить байт ( попробуйте онлайн ).D1ffe7e45e , 112
Каждая строка - это отдельный фрагмент.
Числа в программе не считаются числовыми литералами, поскольку они используются только в качестве команд.
Финал определенно может быть больше в гольфе.
РЕДАКТИРОВАТЬ: у меня работает переводчик и все фрагменты работают. Если вы хотите проверить себя, добавьте
0f0f
в конец фрагмента, чтобы программа завершилась.источник
+
в Brainf ** k). Я подумал, что, поскольку они используются в качестве команд, а не числовых литералов, он все равно считается. Я удалю ответ, если это не так.Pyth,
353433 байта-1 байт @Mimarik
Есть несколько возможностей для некоторых программ.
0, 1 байт
1, 2 байта
2,3 байта
3, 3 байта
4, 3 байта
5, 4 байта
6, 3 байта
7, 4 байта
8, 3 байта
9,2 байта
10, 1 байт
42, 4 байта
Все они включают в себя либо базовые команды double (
y
), +1 (h
) и -1 (t
), либоl
(длина строки). Переменная Z инициализируется нулем.Для 5
b
инициализируется символом новой строки. Backtick дает"\n"
(включая кавычки, и длина этой строки 4.Попробуйте их здесь !
источник
yhyT
. (Я отклонил редактирование согласно meta.codegolf.stackexchange.com/questions/1615/… )