Найкоротший код для найдовшого виходу


10

Цей досить простий.

Напишіть найкоротшу програму, яку ви можете, при цьому генеруючи найбільше результатів.

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

Переможець - програма з найбільшим співвідношенням розміру / розміру коду.

Результати ґрунтуються на тому, що працює на моєму комп’ютері, а саме Mac, що працює під управлінням Mac OS X 10.7.5 з Intel Core i5 та 8 Гб пам’яті.


Не ясно, що саме ви просите. Якщо відповіді передбачають необмежену пам'ять, необмежений розмір індексу тощо?
Пітер Тейлор

@PeterTaylor Я це виправив.
tbodt

5
Здувайтеся, якщо я можу це зрозуміти, але я впевнений, що є спосіб, щоб перекладач інтерпретував порожній файл і виробляв будь-який вміст - що також дало б нескінченне співвідношення .

8
@LegoStormtroopr GolfScript підходить до рахунку. Виконання порожнього сценарію дасть рівно один символ виводу:\n
Прим

1
@ user2509848 ні, тому що, як я вже сказав, нескінченний вихід не враховується.
tbodt

Відповіді:


18

Python: 8 символів коду, 387420489 символів вихід - Співвідношення: 48427561.125: 1

'a'*9**9

Ми можемо мати відношення схильне до нескінченності, додаючи більше **9s:

'a'*9**9**9
'a'*9**9**9**9
etc.

Наприклад:

'a'*9**9**9**9**9**9

яке має відношення ~ 10 10 10 10 10 8,568 (немислимо велика кількість).


Краще за інший ...
tbodt

@tbodt Чому? O_o @arshajii Якщо ви додасте достатню кількість **9s, чи не з часом це стане Infinity?
Дверна ручка

@Doorknob Вибачте, я не знаю всього про python. Тепер завдання полягає в тому, щоб визначити максимальну кількість **9s, яку ви можете поставити до того, як результат стане Infinity.
tbodt

1
@Doorknob Python мають довільну точність.
Аршаджі

@tbodt Дивіться коментар вище.
Аршаджі

16

Отже, це все хороші програми, які дають багато виводу з дуже невеликим кодом, але жодна з них не дуже коротка ...

brainfuck, 5 символів, 255 байт виводу

-[.-]

Я думаю, що це єдиний випадок використання, коли мозковий ебан справді перевершує. Я знаю, що це не виграє, але я не думаю, що ми можемо зробити краще, ніж приклад Python. Мало того, але ...

мозковий ебать, 4 символи, нескінченний вихід

-[.]

Я здогадуюсь, що це найкоротша програма з нескінченним виходом.

Насправді, тримайся, моя половинка просто придумала справді хороший.

Python, 80 байт, невідома кількість виводу

from datetime import datetime
while datetime.now()!=datetime.max()
 print "This will probably get disqualified"

Ця програма, безумовно, зупиниться в кінцевому підсумку, але зробить це лише через приблизно 8000 років. Точна кількість виведення символів залежить від швидкості, з якою комп'ютер може видавати символи.


1
Мені подобається пітон: D
Кевін Кокс

2
"Я здогадуюсь, що це найкоротша програма нескінченного виводу там", немає, саме тут є корисний неявний цикл Befunge (через обгортку): .виводить нескінченний потік з 0 символів.
FireFly

14

Perl - 19 байт, 187200000000000000 байтів (9852631578947368.42: 1)

print+($]x9e7)x26e7

166 petabyes з однією заявою друку, використовуючи не більше 1,7 Гб пам'яті.

Є кілька речей, які зробили цей виклик цікавішим, що я вважав, що це буде. Perl, схоже, відмовляється виділяти більше 1 Гб пам'яті на будь-який єдиний список. Отже, 4- байтне скалярне посилання на внутрішню струну може бути повторене лише 26e7 ≈ 2 28 разів. $]- номер "старої версії perl", який, як рядок, становить 8 байт, нагадує 5.016002.

Маючи більше системної пам’яті, вона повинна мати можливість піднятися вище. Якщо припустимо, що повні 8 ГБ фактично були доступні, ви повинні мати можливість використовувати $]x9e8для внутрішньої струни, яка б виводила 1,62 екбабайта.


16
"Якщо ви дасте 1 000 000 мавп 1 000 000 друкарських машинок і дасте їм 1 000 000 років для написання матеріалів, одна мавпа в кінцевому рахунку напише програму Java. Інші просто створюють сценарії Perl." Ось що я подумав, побачивши це: P джерело
Doorknob

5

Ruby and Python, 13 символів, 599994 чарівницьких показників, співвідношення ~ 46153: 1

999999**99999

Просто піднімає дуже велике число до потужності іншого дуже великого числа. Пробіг займає близько 20 секунд. Я не можу збільшувати числа, тому що це зробить число нескінченним.

робив це раніше , я зараз працюю над створенням циклу для ще більшого виходу)

Редагувати: Я це зробив!

Ruby, 28 знаків, 6e599999 char вихід, ~ 6e599998 співвідношення (я думаю)

a=999999**99999;a.times{p a}

Неперевірений (з очевидних причин), але я впевнений, що перше число - це приблизно 1e599994, помножене на 599994, приблизно 6e599999. Теоретично це буде працювати, але я не впевнений, чи не вдарив би ваш комп'ютер, тому відмова: Я не несу відповідальності, якщо це завдає шкоди вашому комп'ютеру будь-яким чином: P

Звичайно, ви можете продовжувати:

Ruby, 37 символів, 6e359992800041 char вихід, ~ 6e359992800040 співвідношення

a=999999**99999;a.times{a.times{p a}}

І так далі, але я сумніваюся, що будь-який комп’ютер може впоратися з цим: P


Це справді поліглот ...
tbodt

@tbodt Hehe, правда! Коли я додаю свої зміни, цього не буде
Doorknob

5

Якщо нескінченний вхід був дозволений,

cat /dev/random

Оскільки це не так,

head -99 /dev/random

(25128 вихід: 20 вхід = 1256,4: 1)

Я не в коробці Linux, але я думаю, ви могли б зробити щось подібне

timeout 99d cat /dev/random

і отримати величезний вихід. (за допомогою відповіді GigaWatt)


2
Ви можете замінити один символ і зробити свій висновок 8562 разів більше: timeout 99d. Так, час виконання 99 днів. Також я не впевнений у цьому, але врешті-решт ви спустошите пул ентропії /dev/randomі він заблокується, тому /dev/urandomможе бути більш доречним. (Мені вдалося отримати 40 Мб / с за допомогою urandomта лише 128 КБ / с random)
Містер Лама

@GigaWatt - це приголомшливо.
тристін

4

HQ9 +, 11471

9

Фактична кількість символів змінюється залежно від перекладача, але, ймовірно, близько 10000 було б правильно?


Що таке HQ9 +? Я ніколи про це не чув.
tbodt

Ах, вибачте, це був здебільшого жарт, оскільки це не "справжня" мова програмування, але: esolangs.org/wiki/HQ9%2B
Dom Hastings

2

C #: 108 символів. Коефіцієнт: 742123445489230793057592: 1

for(ulong i=0;i<ulong.MaxValue;i++){Console.Write(new WebClient().DownloadString(@"http://bit.ly/dDuoI4"));}

Він просто завантажує та роздруковує Вікіпедію Список правників Верховного Суду США (4344904 символів) 18446744073709551615 разів.


Для цього потрібен скорочувач URL-адрес. Я не впевнений у цьому.
tbodt

1
Добре. А як щодо цього: for(ulong i=0;i<ulong.MaxValue;i++){Console.Write(new string('a',int.MaxValue));}2147483647 символів * 18446744073709551615 разів = 39614081238685424720914939905/81 => Співвідношення: 489062731341795366924875801
thepirat000

Значно краще. Не потрібно використовувати короткий URL-код.
tbodt

2

~ - ~! - Коефіцієнт: (64 4 4 4 64 ) / 154 ~ = 10 10 10 10 1,583328920493678

'=~~~~,~~~~,~~~~:''=|*<%[%]'=',',',':''&*-~|:'''=|*<%[%]''&',',',':'''&*-~|:''''=|*<%[%]'''&',',',':''''&*-~|:''''&':''=|*<%[%]@~~~~,~~~~,~~:''&*-~|:''&':

Як це працює: По- перше, він встановлює '4 ^ 3 або 64. Потім він робить ''функцію , яка встановлює 'для '^ 4 * раз (де * це вхід). '''потім робиться функція, яка викликає ''з введенням як '^ 4. Потім ''''робиться функція, яка дзвонить '''з '^ 4 під час введення. ''''Потім викликається з введенням 64. Нарешті, ''змінюється на функцію, яка друкує пробіл * разів; потім це викликається з введенням '.

Виявляється, в кінці кінців, 'становить 64 - 4 - 64 , а довжина моєї програми є 154 ; пробийте це у Вольфрам | Альфа, і він випльовує 10 10 10 10 10 1.583328920493678 , що навіть не намагається обчислити. Я навіть не знаю, скільки цифр містить , але 64 4 4 містить 463. Дуже приємно для мови, яка підтримує лише одинарні явні числа та не має функції експонента; 3

Я міг би зробити це набагато більшим, але, зайвим.


1

Javascript: 27 символів; 260,431,976 діаграми виробництва; Співвідношення 9 645 628,74

for(s=i=61;s=btoa(s),i--;)s

Цей код рекурсивно кодує вхід 61до Base64 61 раз. Кодування будь-якого вводу довжини nдо Base64 дає результат довжини n * 8/6, округлений до кратного 4.

Це потрібно запустити з середовища консолі JavaScript, яке споконвічно підтримує функцію кодування Base64 btoa. (Будь-який сучасний веб-переглядач, але не Node.js.) Примітка. Chrome не може працювати вище i=61, а Firefox може лише охопити i=60. Зауважте також, що консоль Chrome фактично не може відображати вихід, оскільки він занадто великий, але ви можете перевірити розмір результату, запустивши

for(s=i=61;s=btoa(s),i--;)s.length

Якби цю програму було дозволено виконувати на максимум i=99, вона дала б гіпотетичний вихід розмірами 14,566,872,071,840 (14,5 трлн., 14,5е12) символів, при гіпотетичному співвідношенні близько 540 млрд (5,39е11).


1

Рубі, 23 символи - ~ 500000000000000 (5e14) Вихід

while rand
puts 0
end

Ti-Basic 84, 13 символів - ~ 3000 Вихід

:Disp 1
:prgmA

Назвіть програму prgmA


1

рубін, 283 96 44 ч

a=1e99.times;a{a{a{a{a{puts'a'*99}}}}}}}}}}

Не дуже короткий, але це компенсує його у виході, який стільки я ще не зміг виміряти.


2
за моїми підрахунками, це стосувалося б 1e127виведення символів. у будь-якому випадку, присвоєння змінної зменшить розмір коду приблизно вдвічі. також, 1e99більша кількість, що займає менше місця. також, використовувати mapзамість each, використовувати putsзамість print, видалити зайвий пробіл між printі "ier.... Ви також можете замінити ту велику рядок на 'a'*999(або навіть ?a*999), яка є довшою, що займає менше місця. Резюме: це не golfed взагалі
Дверна ручка

@Doorknob Дякую Я нічого не знаю про рубін, окрім глави 3, чому гостро поводиться рубін.
tbodt

так, чому ви просто не призначите (0..1e99).mapзмінну? якa=(0...1e99).map;a{a{a{a{a{puts'a'*99}}}}}
Doorknob

У мого перекладача Рубі не вистачало оцінювання пам'яті a=(0...1e99).map. Можливо, ви захочете трохи віддзеркалити це. 0..1e9буде використовувати близько 4 Гб.
прим

1

Математика 9 символів Співвідношення: ~ 4564112: 1

Далі наведено зображення введення Mathematica. Я не зрозумів, як це зробити в SE.

експоненти

Ось знімок екрана, що показує кількість цифр у висновку. IntegerDigitsперетворює вихід у список цифр. Lengthпідраховує кількість цифр.

рахувати

Клавіші для введення: 9, ctrl6, 9, ctrl6, 9, ctrl6, 9, ctrl6, 9....


1
Що? Ви можете ввести це в Mathematica?
tbodt

Так, це законний внесок у Mathematica.
DavidC

А які натискання клавіш потрібні?
tbodt

Тепер у відповіді показано натискання клавіш @tbodt.
DavidC

1
Я не знаю, чи потрібно було б вказати порядок, але ви хочете, щоб він обчислював зверху вниз: (9 ^ 9) ^ 9 - це 78-значний номер, але 9 ^ (9 ^ 9) - це цифра 369 693 100 (спасибі, wolframalpha)
SeanC

0

Befunge-93: 48 символів, про ((2 ^ 32) ^ 2) * 10 символів

Стек Befunge теоретично нескінченний, але числа, які зберігають стеки, обмежені розміром неподписаного довгого цілого числа (тут передбачається, що це 32 біти). Таким чином, для інтерпретатора Befunge (x + 1)> x хибно для правильного значення x. Цей факт ми використовуємо для того, щоб спочатку перенести всі значення від нуля до максимуму (двічі, по одному на кожне третє число), а потім для кожного значення на стеку виводимо і зменшуємо його, а потім виводимо його, коли воно досягає нуля. Врешті-решт стек спорожняється, а програма припиняється. Я, можливо, трохи відключився від розміру вихідного сигналу, але він повинен бути десь у цьому бальному парку.

>::1# + #1\`# :# _> #- #1 :# :# .# _# .# :# _@

0

C: 48 символів, прибл. (2 ^ 32 - 1) * 65090 байт

main(){for(int i=1<<31;i<~0;)puts("!");main();}

Зауважте, що 65090 не є точним і залежить від розміру стека. Програма врешті-решт зупиниться при збої. Крім того, я міг би просто поставити довший і довший рядок у put (), щоб зробити раціон наближенням до нескінченності, але це здається досить обманливим.


1
це нескінченна петля
izabera

Так, я думаю, ти маєш рацію. Я побачу, чи зможу я зрозуміти, як це виправити.
Stuntddude

0

java (131): невідома, але обмежена кількість

class A{public static void main(String[] args){while(Math.random()>0){for(long l=0;l!=-1;l++){System.out.println("1234567890");}}}}

Використовуючи низький шанс Math.random () дістатись до 0 у циклі, а потім перейти до 2 ^ 64-1 циклів через foreach з виходом 1234567890;


0

Python 3, 115 байт, працює протягом 7983 років (невідома кількість символів)

EDIT: ymbirtt побив мене до цього ._.

Я знаю, це насправді недовго, і я знаю, що інша відповідь Python набагато довша, але я вирішив дати цьому постріл.

Програма працює близько 8000 років, що, як відомо, досить тривалий час.

Те, що він робить, - це постійно отримувати поточний час за допомогою datetime.datetime.now()функції, і вона порівнює його з тим 9999-12-31 24:59:59.999999, наскільки я знаю максимальну дату в Python.

Якщо це є рівним, то програма зупиняється. Якщо це не так, він безперервно виводить a.

import datetime
while 1:
    if str(datetime.datetime.now())=="9999-12-31 24:59:59.999999":exit
    else:print("a")

1
Що робити, якщо пропустити цей момент?
C5H8NNaO4

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