Какое наименьшее положительное целое число из 10 оснований может быть напечатано программой короче (в символах), чем она сама?

179

Я думаю, что вопрос, как указано выше, ясен, но на всякий случай:

  • Напишите полную программу (а не только функцию), которая печатает положительное целое число 10, за которым может следовать одна новая строка.

  • Квалификационными программами будут те, чей вывод будет длиннее ( в байтах ), чем исходный код программы, измеренный в байтах (при условии кодировки ASCII или UTF-8 для исходного кода программы).

    Т.е. код должен быть короче количества цифр в результирующем номере.

  • Ведущие нули запрещены при любых обстоятельствах. Подсчет лидирующих нулей упрощает задачу; игнорирование начальных нулей излишне усложняет вопрос.

  • Программа-победитель будет квалификационной программой, которая печатает целое число с наименьшей величиной.

Фрагмент таблицы лидеров

Arandur
источник
64
Номер 1 в Горячих Сетевых Вопросах . Неплохо для первого вопроса ...
trichoplax
6
@Kslkgh Строго меньше чем, иначе вопрос тривиален для программ, которые неявно печатают свое последнее значение.
Арандур
6
Есть 1.0целое?
гистократ
23
Ограничение UTF-8 смешно и вредно. Байты являются байтами, независимо от кодировки. Я настоятельно рекомендую вам изменить правила, так как в настоящее время они запрещают языки, которые не основаны на символах (например, Minecraft, Piet, Folders) или имеют большее число байтов UTF-8, чем их «реальные» (действительные в соответствии с этим вопросом) ) количество байтов (например, APL, TI-BASIC, Seriously, Jelly).
lirtosiast
7
@ZachGates это не то, как работает список HNQ. ;)
Мартин Эндер

Ответы:

193

Сетчатка , оценка 1


Пустая программа считает количество совпадений пустого регулярного выражения во входных данных (которые являются пустой строкой). Это ровно 1 совпадение, поэтому оно печатается 1.

Попробуйте онлайн.

Мартин Эндер
источник
39
... У нас есть победитель.
Арандур
9
Кстати, я бы сказал, что количество совпадений бесконечно. Пустая строка может повторяться неограниченное количество раз и соответствовать бесконечно.
Никель
50
@nicael К счастью, это не так, как работает регулярное выражение. ;)
Мартин Эндер
8
@ MartinBüttner, это зависит от вашего движка регулярных выражений. Я определенно сталкивался с системами, которые вылетят, если вы когда-нибудь попробуете сопоставить пустую строку.
Спарр
19
@LorenPechtel, это правило применяется только к задачам quine, где пустая программа - тривиальное решение для большинства языков. Я думаю, что это справедливая игра, так как эта пустая программа на самом деле имеет нетривиальную семантику, и Retina не имеет такого поведения из-за подобных проблем, а потому что это единственное непротиворечивое обобщение ее поведения для всех однострочных программ.
Мартин Эндер
73

Пиф , 10

T

Первая попытка использования Pyth. После выяснения вопроса, кажется, 10 будет наименьшим числом. В Pyth буква T начинается с цифры 10, поэтому она просто печатает, 10что больше, чем длина исходного кода. Вы можете попробовать это здесь .

Том Карпентер
источник
97
Мне нравится, что ваша первая попытка использовать Pyth - это буква T.
djechlin
8
Ну, я думал, что это будет самая читаемая программа Pyth, которую я когда-либо видел, но это впечатляюще легко понять.
Деусови
2
Это полигот, это работает и в 05AB1E. 05ab1e.tryitonline.net/#code=VA
Волшебная Урна Осьминога
60

до н.э., 10

A

К счастью, bcвыводит результат последнего выражения по умолчанию. Aинтерпретируется как шестнадцатеричное число, так что приводит 10.

Цифровая травма
источник
1
Но уже есть (по крайней мере) 5 подобных ответов, включая решение с помощью A, потому что многие языки гольфа определяют A как 10.
nicael
45
@nicael Да, это правда. Я утверждаю, что этот ответ отличается, потому что bcэто не язык игры в гольф. На самом деле это определенный по Posix язык, доступный по умолчанию практически для любой стандартной системы * nix, которую вы можете найти.
Цифровая травма
47

Рыбалка, оценка 7,958,661,109,946,400,884,391,936 1,208,925,819,614,676,174,706,176

Является ли это самым высоким нетривиальным результатом в минимизации? (Хотя он был в гольф на 84,8%)

v+CCCCCCCCCC
  `32`nSSSSP

объяснение

v              Sets the casting direction to down
 +             Increments the casting distance by 1
  CCCCCCCCCC   Casts the rod

`32`         Pushes a string "32" to the stack
    n        Converts the stack from a string to an integer
     SSSS    Repeated squaring of the stack
         P   Prints the stack

Номер есть 32^16и имеет 25 цифр. Код длиной 24 байта. Предыдущий ответ был 6^32.

Арктур
источник
2
Принес слезу на глаза. Спасибо за ваш вклад.
Арандур
30
Это, вероятно, все еще победит Java ... Надеюсь.
Арктур
3
Ну, это бьет C # ...
LegionMammal978
Почему 6, а не 9?
immibis
@immibis Цель задачи состоит в том, чтобы минимизировать счет, а не просто минимизировать количество байтов; если поставить 9 раньше, мой счет излишне увеличится.
Арктур
36

MATLAB, 1 000 000 000 (10 9 )

Также работает с Octave

disp(1e9)

Никогда не собираюсь побеждать esolangs, но просто для удовольствия, это самый маленький MATLAB / Octave, который можно сделать, так что я все равно опубликую его.

Том Карпентер
источник
18
Ответы esolang, хотя и действительны, довольно скучны. Рад видеть, что это не так!
Арандур
1
Perl say 1e9немного короче, если вы хотите улучшить свой счет в гольф. (Хотя это не близко к меньшему целому числу, для которого этот подход работает ...)
Дероберт
@derobert Правда. 1e1 удовлетворяет постановке задачи и дает оценку 10 (чем ниже, тем лучше) (Предполагая, что символ равен 1 байту)
dberm22
@ dberm22 10(2 символа) не длиннее 1e1(3 символа)
SuperJedi224
@ SuperJedi224 Ах, я прочитал это, поскольку величина напечатанного числа должна быть больше, чем число байтов, а не количество цифр в напечатанном числе. Спасибо за разъяснения.
dberm22
29

TI-84 BASIC, 120

5!

ᴇ2был бы лучше, если бы не глупое требование UTF-8. (Это только два байта в исходной кодированной кодировке калькулятора, но это 4 в UTF-8 ...)

SuperJedi224
источник
Может быть, я что-то упустил, но строка "E2" в UTF-8 занимает всего два байта ...
jbg
11
@ JasperBryant-Грин и Eне тот же персонаж. В TI-BASIC, это научное обозначение и Eявляется переменной.
SuperJedi224
4
Спасибо :) Я должен был заметить, что персонаж был немного меньше ростом…
jbg
Не 3!лучше забить?
dberm22
1
@NobodyNada На этот раз вопрос специально сказал, чтобы забить в UTF8, по некоторым причинам.
SuperJedi224
26

C #, оценка 10 ^ 72 10 ^ 70 10 ^ 64 10 ^ 63

class A{static void Main(){System.Console.Write($"1{0:D63}");}}

Это 1 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 Я думаю, что я пытался ...

LegionMammal978
источник
1
Потрясающе, правда.
Арандур
4
Не Write(new string('1',70))будет лучше?
Линн
1
Вы можете записать это как двойную, а не строку, что сокращает его до 10 ^ 56:class A{static void Main(){System.Console.Write(1e56);}}
горический
@goric Это просто вывод 1E+56.
LegionMammal978
23

Гексагония , оценка 100100

Код:

d!!@

В более читаемой форме:

  d !
 ! @ .
  . .

Значение char равно d100. Это просто напечатает значение char дважды и завершится после.

Попробуйте онлайн!

Аднан
источник
Милый! Спасибо за ваш вклад.
Арандур
18
Более читаемая форма? В самом деле? xD
рк.
17

JavaScript, оценка 100 000 000 000 (или 1 * 10 11 )

alert(1e11)

Это при использовании оповещения. Хотя при использовании консоли вы можете получить в 100 000 000 раз меньше баллов:

1e3

Наберите 1000, как вы можете видеть, но я не уверен, что это считается при использовании консоли.

nicael
источник
Я не знаю, почему это не считается!
Арандур
6
@Arandur Я предполагаю, что «я не уверен, что это считается» относится к более низкому баллу 1000, так как это требует использования консоли в качестве REPL, а не полной программы.
Трихоплакс
@tri точно, сделал разъяснение.
Никель
11
+1 за оповещение, я бы не разрешил автоматический вывод консоли
edc65
17

PlatyPar , 59

#

#запускает числовой литерал base-60, и поскольку цифры не найдены, он заканчивается как 59. Это началось как счастливый случай, но так как я уже [ab] использовал эту ошибку в другом ответе , я сохранил ее.

Попробуйте онлайн !

Вот другой подход, мой взгляд на скучный путь, который все и их бабушка использовали для этого испытания.

PlatyPar , 100000000 (9 цифр)

'18Md0+;

объяснение

'1        ## push "1" (a string) to the stack
  8Md  ;  ## repeat 8 times
     0+    ## add a 0
          ## [implicitly] print the result

Попробуйте онлайн !

Cyoce
источник
16

Brainf ** k , 11111111111111111111111111111111111 (~ 1e34)

И еще одно сокращение:

+++++++[>+++++++>+<<-]>>[<.....>-]

Что дает 35 последовательных 1-х, или приблизительно 1e34.


Немного меньше еще

++++++++[>++++++>+<<-]>+>+[<....>-]

Дает 36 единиц, что примерно на 11% больше, чем 1е35.


Спасибо @Martin Büttner за то, что он выбил пару символов, сократив общий результат в 100 раз с помощью этого кода (выдает 1e36):

++++++[>++++++++>++<<-]>+.->[<...>-]

Мой старый код (дает 1 + e38):

++++++++[>++++++>++<<-]>+.->+++[<..>-]

Я экспериментировал с esolangs от скуки. Это лучшее, что я мог сделать в БФ. Интересно, возможно ли сделать его меньше?

Вы можете попробовать это онлайн здесь .

Том Карпентер
источник
Я написал короткий ответ, с нуля: ссылка
Линн
@ Маурис впечатляет!
Том Карпентер
16

С, 1000000000000000000000000000 (28 цифр)

main(){printf("1%027d",0);}

Аналогично моему ответу на C ++, без #include <stdio.h> (Игнорировать предупреждение о пропущенном объявлении printf. Спасибо @Dennis)

Новая строка потребует дополнительных 2 байтов, используя формат 1%029d\n

Гленн Рандерс-Персон
источник
14

Japt , оценка 10

A

Как показывает счет, печатает 10.

nicael
источник
Это не код гольф, цель - напечатать наименьшее число, ваш счет 10.
pppery
@ppp «Число должно быть длиннее в байтах, чем программа - иметь больше цифр, чем код содержит символы» - OP только что отредактирован.
Никель
2
Вы не поняли неправильно; если программа Japt Aнапечатает 10, то это действительная программа со счетом 10.
Арандур
3
Woohoo, мой язык привязан к <s> первому </ s> второму месту! смотрит на сетчатку
глаза
4
Есть ли причина для понижения?
Никаэль
10

PHP, оценка 10 000 000

<?=1e7;

Это печатает 10000000, как можно увидеть там .

nicael
источник
2
Поскольку ОП запросила наименьшее целое число, почему вы выбрали показатель семи? Он печатает без запятых?
WGroleau
@WGroleau печатает без запятых, justachat.freevar.com/test.php
nicael
9

Лабиринт , оценка 10 000 000

1!!!!>@

Возможно, это можно уменьшить на один порядок, но сейчас я ничего не могу найти.

Первые 1!!!!отпечатки 1000. Затем >сдвигает исходный код

@1!!!!>

что позволяет избежать досрочного прекращения. Тогда IP попадает в тупик и оборачивается. Теперь !!!!печатает еще четыре нуля и @завершает программу.

Попробуйте онлайн.

Мартин Эндер
источник
9

Самау , 42

A

Aпомещает в стек ответ на главный вопрос жизни, вселенной и всего остального. Тогда вершина стека автоматически печатается.

alephalpha
источник
Я думаю, что-то не так с вашими сообщениями коммита: P
Doorknob
3
@ Doorknob 冰 Я не знаю, как писать коммит-сообщения, поэтому я просто использую случайные эмодзи.
алефальфа
5
Хорошо, вот реальный вопрос: что Qтолкает?
Cyoce
9

Brainfuck, 3333333333333333333333333 (25 тройки)

Это написано "с нуля", так что я думаю, что можно опубликовать отдельный ответ:

-[>+>+<<-----]>-[-->.<]

23 байта длиной.

Линн
источник
Я рассматривал решение BF, есть ли текущие интерпретаторы, которые выводят только как числа?
Рохан
@RohanJhunjhunwala это выводит 51 (код ASCII для "3") 25 раз.
Уровень Река St
@LevelRiverSt То, что я говорю, это то, что может существовать bf-интерпретатор, который не вводит как ascii, а только целочисленный, поэтому (-.) Будет выводить 255.
Рохан Джхунджхунвала
9

DC , 10000

Программа 4-х символов:

I4^f

5 цифр вывода:

$ dc<<<'I4^f'
10000
йети
источник
3
+1. Да, я думаю, что это оптимально в DC. Необычно до н.э короче .
Цифровая травма
Я думал, что у меня все хорошо 6d^p(получая 46656), но у вас есть этот удар - молодец!
Тоби Спейт
8

Витси , 7! = 5040

7FN

Выходы 5040.

Попробуйте онлайн!

Аддисон Крамп
источник
Почему не 3FNвывод 6?
Питер Тейлор
@PeterTaylor Число должно быть больше по длине, а не по величине.
Эддисон Крамп,
8

С, 11111111111111111111111111111111111 (35 единиц)

main(c){while(c++<36)putchar(49);}

Может быть, есть более короткий путь. Отсутствие простого способа печати больших чисел в C делает его сложным.

Линн
источник
7

CJam, оценка 10

A

Попробуйте онлайн!

Деннис
источник
Почему нет Y, оценка 2?
Питер Тейлор
2
Потому что 2это только один символ, поэтому он не длиннее исходного кода.
Денис
7

Java, 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 (81)

interface A{static void main(String[]a){for(A i:new A[81])System.out.print(1);}}
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Я подчеркнул часть, которая на самом деле является «переменной» здесь; все остальное абсолютно необходимо для работающей Java-программы.

Предположительно, это короче, чем возиться с Java BigInteger.

Линн
источник
Предположительно ... - возможно System.out.print(BigInteger.TEN.pow(10));- это один персонаж меньше? Извините - далеко не достаточно большой - и .pow(10).pow(10)длиннее.
OldCurmudgeon
Вы можете заменить interfaceна class.
LegionMammal978
2
Но тогда mainдолжно быть public.
Линн
7
Вы можете сбрить 2 символа, выполнив это для цикла for: for (A a: new A [81])
Jack Ammo
@ OldCurmudgeon .pow(100)не будет работать по какой-то причине?
ETHproductions
7

Cubix , 100100

@'dOu

Cubix - это двумерный esolang на основе стека. Cubix отличается от других двумерных языков тем, что исходный код обернут снаружи куба.

Проверьте это онлайн!

объяснение

Первое, что делает интерпретатор, это вычисляет наименьший куб, на который поместится код. В этом случае длина ребра равна 1. Затем код дополняется без операций, .пока все шесть сторон не будут заполнены. Пробелы удаляются перед обработкой, поэтому этот код идентичен приведенному выше:

  @
' d O u
  .

Теперь код запускается. IP (указатель инструкций) начинается с крайней левой грани, указывая на восток.

Первый символ, с которым сталкивается IP ', помещает следующий байт в стек; этот байт dили 100. Далее идет Oвывод верхнего элемента (100) в виде целого числа.

Затем IP-удары u, которые поворачивают его вправо, перемещают его вперед, а затем поворачивают его снова. Он переключается на нижнюю грань, указывающую на север, а затем вращается на восток. Это оборачивает его Oснова, выводя 100, затем до @которого программа завершается.

ETHproductions
источник
6

МАТЛ , 1000

1e3

Примечание: последний коммит компилятора GitHub работает как в Octave, так и в Matlab.

Это интерпретирует число в научной нотации и неявно печатает его, таким образом производя вывод

1000

Луис Мендо
источник
6

Perl, 1000000000

print 1e9

Непосредственная.

Линн
источник
1
Вы не можете уменьшить свой счет с помощью say?
Нил
-EПолагаю, это потребует включения флага. Я не уверен, как считать это в этом вызове.
Линн
1
Поскольку « -M5.010когда это необходимо, бесплатно», вам вообще не нужно это считать.
ThisSuitIsBlackNot
6

Python 2, 107918163081

print 69**6
синий
источник
Вы можете удалить пространство между printи 2.
Бакуриу
1
@Bakuriu Нет, ты не можешь
Blue
69**6это только 107918163081.
Нил
2
Интересно, что это также работает в Perl.
Grimy
6

C ++, 1e46

#include <stdio.h>
main(){printf("1%046d",0);}

Новая строка потребует дополнительных 2 байтов, используя формат "1% 048d \ n"

Гленн Рандерс-Персон
источник
Я не думаю, что C ++ позволяет вам опустить возвращаемый тип main(). OTOH, это было бы хорошим ответом C ...
Тоби Спейт
5

О, 10

A

Видимо счет - это число, которое мы печатаем!

kirbyfan64sos
источник
5

05AB1E , оценка 10

Код

T

Объяснение:

T         # Puts 10 onto the stack
          # Implicit, print the last item of the stack
Аднан
источник