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


179

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

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

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

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

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

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

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


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 ...)


Может быть, я что-то упустил, но строка "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 Я думаю, что я пытался ...


1
Потрясающе, правда.
Арандур

4
Не Write(new string('1',70))будет лучше?
Линн

1
Вы можете записать это как двойную, а не строку, что сокращает его до 10 ^ 56:class A{static void Main(){System.Console.Write(1e56);}}
горический

@goric Это просто вывод 1E+56.
LegionMammal978


17

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

alert(1e11)

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

1e3

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


Я не знаю, почему это не считается!
Арандур

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

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


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.


Это не код гольф, цель - напечатать наименьшее число, ваш счет 10.
pppery

@ppp «Число должно быть длиннее в байтах, чем программа - иметь больше цифр, чем код содержит символы» - OP только что отредактирован.
Никель

2
Вы не поняли неправильно; если программа Japt Aнапечатает 10, то это действительная программа со счетом 10.
Арандур

3
Woohoo, мой язык привязан к <s> первому </ s> второму месту! смотрит на сетчатку
глаза

4
Есть ли причина для понижения?
Никаэль


10

PHP, оценка 10 000 000

<?=1e7;

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


2
Поскольку ОП запросила наименьшее целое число, почему вы выбрали показатель семи? Он печатает без запятых?
WGroleau

@WGroleau печатает без запятых, justachat.freevar.com/test.php
nicael

9

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

1!!!!>@

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

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

@1!!!!>

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

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


9

Самау , 42

A

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


Я думаю, что-то не так с вашими сообщениями коммита: P
Doorknob

3
@ Doorknob 冰 Я не знаю, как писать коммит-сообщения, поэтому я просто использую случайные эмодзи.
алефальфа

5
Хорошо, вот реальный вопрос: что Qтолкает?
Cyoce

9

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

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

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

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


Я рассматривал решение BF, есть ли текущие интерпретаторы, которые выводят только как числа?
Рохан

@RohanJhunjhunwala это выводит 51 (код ASCII для "3") 25 раз.
Уровень Река St

@LevelRiverSt То, что я говорю, это то, что может существовать bf-интерпретатор, который не вводит как ascii, а только целочисленный, поэтому (-.) Будет выводить 255.
Рохан Джхунджхунвала



8

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

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

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



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, затем до @которого программа завершается.



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 ...
Тоби Спейт


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.