Яке найменше позитивне ціле число 10, яке може бути надруковано програмою, коротшою (у символах), ніж вона сама?


179

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

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

  • Кваліфікуючими програмами будуть ті, вихід яких довший ( у байтах ), ніж вихідний код програми, вимірюється в байтах (припускаючи кодування ASCII або UTF-8 для вихідного коду програми).

    Тобто код повинен бути коротшим, ніж кількість цифр у отриманому числі.

  • Провідні нулі заборонені за будь-яких обставин. Підрахунок провідних нулів тривіалізує проблему; ігнорування провідних нулів зайво ускладнює питання.

  • Виграюча програма буде відбірковою програмою, яка друкує ціле число з найменшою величиною.

Фрагмент таблиці


64
№1 із питань гарячої мережі . Непогано для першого питання ...
трихоплакс

6
@Kslkgh Суворо менше, інакше питання тривіальне для програм, які неявно друкують останнє значення.
Арандур

6
Це 1.0ціле число?
гістократ

23
Обмеження до UTF-8 є смішним та згубним. Байти - це байти, незалежно від кодування. Я настійно рекомендую змінити правила, оскільки в даний час вони забороняють мови, які не базуються на символах (наприклад, Minecraft, Piet, Папки) або мають більше байтів UTF-8, ніж їх "справжні" (дійсно відповідно до цього питання ) кількість байтів (наприклад, APL, TI-BASIC, серйозно, желе).
ліртосіаст

7
@ZachGates так не працює список HNQ. ;)
Мартін Ендер

Відповіді:


193

Сітківка , оцінка 1


Порожня програма підраховує кількість збігів порожнього регулярного вираження у вході (який є порожнім рядком). Це рівно 1 матч, так що він друкує 1.

Спробуйте в Інтернеті.


39
... У нас є переможець.
Арандур

9
Тільки btw, я б сказав, кількість матчів нескінченна. Порожній рядок може повторюватися необмежену кількість разів і нескінченно відповідати.
nicael

50
@nicael На щастя, це не так, як працює гегекс. ;)
Мартін Ендер

8
@ MartinBüttner, що залежить від вашого двигуна regex. Я, безумовно, стикався із системами, які будуть лаятися, якщо ви коли-небудь спробуєте відповідати порожній рядку.
Спарр

19
@LorenPechtel це правило поширюється лише на завдання, в яких порожня програма тривіально є рішенням більшості мов. Я думаю, що тут справедлива гра, оскільки ця порожня програма насправді має нетривіальну семантику, а у Retina такої поведінки немає через подібні проблеми, а тому, що це єдине послідовне узагальнення її поведінки для всіх однолінійних програм.
Мартін Ендер

73

Піта , 10

T

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


97
Мені подобається, як ваша перша спроба використання Pyth - це лише буква Т.
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,629,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
Мабуть, все одно переможе Ява ... Сподіваємось.
Арктур

3
Ну, це б'є C # ...
LegionMammal978

Чому 6, а не 9?
іммібіс

@immibis Мета завдання - мінімізувати бал, тому це не просто мінімізація байтів; виставлення 9 раніше збільшило б мою оцінку.
Арктур

36

MATLAB, 1 000 000 000 (10 9 )

Також працює з Octave

disp(1e9)

Ніколи не збираюся бити езоланг, але просто для розваги, це найменший MATLAB / Octave зможе зробити, тому подумав, що я все-таки опублікую його.


18
Відповіді esolang, хоча й справедливі, начебто нудні. Радий бачити той, якого немає!
Арандур

1
perl say 1e9трохи коротше, якщо ви хочете покращити свій рахунок у гольфі. (Хоча це ніде не є меншим цілим числом, для якого працює цей підхід ...)
derobert

@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-Greene і 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

@goric Це просто виводить 1E+56.
LegionMammal978

23

Шестикутник , оцінка 100100

Код:

d!!@

У більш читаному вигляді:

  d !
 ! @ .
  . .

Значення значення d становить 100. Це буде просто надрукувати значення char два рази та припиняється після.

Спробуйте в Інтернеті!


Симпатичний! Дякую за ваш внесок.
Арандур

18
Більш читабельна форма? Дійсно? xD
RK.

17

JavaScript, оцінка 100 000 000 000 (або 1 * 10 11 )

alert(1e11)

Це якщо використовувати попередження. Хоча ви можете отримати 100 000 000 разів менший бал, використовуючи консоль:

1e3

Оцінка 1000, як ви бачите, але я не впевнений, що вона рахується за допомогою консолі.


Я не знаю, чому це не врахувало б!
Арандур

6
@Arandur Я здогадуюсь, що "я не впевнений, що це зараховується" відноситься до нижчого балу 1000, оскільки для цього потрібно використовувати консоль як REPL, а не як повноцінна програма.
трихоплакс

@tri саме, зробив уточнення.
nicael

11
+1 для оповіщення, я б не дозволив вивести автоматичну консоль
edc65

17

PlatyPar , 59

#

#починається числова база-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 1, що на 11% більше, ніж 1e35.


Завдяки @Martin Büttner за те, що він збив пару символів, зменшивши загальний вихід у 100 разів за допомогою цього коду (вихід 1e36):

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

Мій старий код (вихід 1 + e38):

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

Я експериментував з езолангами від нудьги. Це найкраще, що я міг зробити в BF. Цікаво, чи можна зробити її меншою?

Ви можете спробувати онлайн тут .


Я написав коротшу відповідь з нуля: посилання
Лінн

@Mauris вражаючий!
Том Карпентер

16

C, 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 "Кількість має бути довше в байтах, ніж програма - мати більше цифр, ніж код має символи" - ОП щойно відредаговано.
nicael

2
Ви не зрозуміли неправильно; якщо програма Japt Aнадрукує 10, то це дійсна програма з оцінкою 10.
Арандур

3
Woohoo, моя мова прив'язана до <s> першого </s> другого місця! відблиски на Retina
ETHproductions

4
Будь-яка причина для голосування?
nicael


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штовхає?
Кіос

9

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

Це написано "з нуля", тому я думаю, що нормально розмістити окрему відповідь:

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

23 байти завдовжки.


Я розглядав рішення BF, чи є поточні інтерпретатори, які виводяться лише як числа?
Rohan Jhunjhunwala

@RohanJhunjhunwala це виводить 51 (код ASCII "3") 25 разів.
Рівень річки Св

@LevelRiverSt, що я кажу, що може існувати інтерпретатор BF, який не вводиться як ascii і має лише цілочисельний вихід, таким чином (-.) Буде виводити 255.
Rohan Jhunjhunwala



8

C, 11111111111111111111111111111111111 (35)

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

Можливо, існує коротший шлях. Відсутність простого способу друку великих цифр на C робить його складним.



7

Java, 111111111111111111111111111111111111111111111111111111111111111111111111111111111 (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: новий A [81])
Jack Ammo

@OldCurmudgeon чомусь .pow(100)не працюватиме?
ETHproductions

7

Cubix , 100100

@'dOu

Cubix - це двовимірний езоланг на основі стека. Cubix відрізняється від інших 2D язиків тим, що вихідний код обмотаний навколо куба.

Перевірте це в Інтернеті!

Пояснення

Перше, що робить перекладач - це розібрати найменший кубик, на який впишеться код. У цьому випадку довжина ребра дорівнює 1. Потім код прокладений без опу, .поки всі шість сторін не заповнені. Білий простір видаляється перед обробкою, тому цей код ідентичний наведеному:

  @
' d O u
  .

Тепер код запускається. IP (покажчик інструкції) починається на лівій крайній стороні, вказуючи на схід.

Перший знак, з яким стикається IP ', який натискає наступний байт на стек; цей байт є d, або 100. Далі O, яка виводить верхній елемент (100) у вигляді цілого числа.

Тоді IP потрапляє u, який повертає його праворуч, переміщує його вперед, потім знову повертає. Він переходить на нижню грань, спрямована на північ, потім обертається на схід. Це завершує його Oзнову, виводячи 100, потім до @цього закінчує програму.


6

MATL , 1000

1e3

Примітка: остання комісія GitHub компілятор компілятора працює як на Octave, так і на Matlab.

Це інтерпретує число в науковій нотації та неявно друкує його, таким чином отримуючи вихід

1000


6

Perl, 1000000000

print 1e9

Прямо.


1
Ви не можете зменшити свій рахунок за допомогою say?
Ніл

-EМабуть, це вимагатиме включення прапора. Я не впевнений, як порахувати це в цьому виклику.
Лінн

1
Оскільки " -M5.010коли це потрібно безкоштовно," вам взагалі не доведеться рахувати це.
ThisSuitIsBlackNot


6

C ++, 1e46

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

Новий рядок потребує додаткових 2 байт, використовуючи формат "1% 048d \ n"


Я не думаю, що C ++ дозволяє опустити тип повернення main(). ОТО, це дасть гарну відповідь С ...
Toby Speight,


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.