Виведіть копії рядка з googol


63

Мені цікаво побачити програми, які не запитують жодного вводу, надрукувати копії googol якоїсь непорожньої рядки, ні менше, ні більше, а потім зупинитись. Гугол визначається як 10 ^ 100, тобто 1 з наступним ста 0 'в десяткової системі .

Приклад виводу:

111111111111111111111111111111111111111111111111111111111111111111111111...

або

Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
...

Рядок також може бути повністю складений з пробілу або спеціальних символів. Єдиним винятком із однакових копій фіксованого рядка є те, якщо ваша мова прикрашає висновок якимось чином, який неможливо запобігти, але його можна тривіально скасувати в скрипті для обгортки, наприклад, попередньо додавши номер рядка до кожного рядка. Скрипт обгортки в таких випадках не потрібно надавати.

Ви можете припустити, що ваш комп’ютер ніколи не закінчиться, але крім цього, у вашій програмі повинен бути розумний попит на ресурси. Крім того, ви повинні дотримуватися будь-яких обмежень, якими задана обрана вами мова програмування, наприклад, ви не можете перевищувати максимальне значення, дозволене для його цілих типів, і ні в якому разі не потрібно більше 4 Гб пам'яті.

Іншими словами, програма в принципі повинна бути перевірена, запустивши її на своєму комп’ютері. Але через масштаб цього числа вам доведеться довести, що кількість копій рядка, який він виводить, становить рівно 10 ^ 100 і що програма зупиняється після цього. Зупинення може бути вихідним або зупиненим або навіть закінченням через помилку, але якщо так, помилка не повинна давати жодного результату, який не можна було б легко відокремити від виходу програми.

Це , тому рішення з найменшими байтами виграє.

Приклад розчину (C, неозорений, 3768 байт)

#include <stdio.h>

int main() {
  int a00, a01, a02, a03, ..., a99;
  for(a00 = 0; a00 < 10; a00++)
  for(a01 = 0; a01 < 10; a01++)
  for(a02 = 0; a02 < 10; a02++)
  for(a03 = 0; a03 < 10; a03++)
  ...
  for(a99 = 0; a99 < 10; a99++)
    puts("1");
  return 0;
}

10
Розглянемо пісочницю перший наступний раз.
кіт

9
Коли ви публікуєте нове запитання, вас просять спочатку опублікувати в пісочниці .
flawr

1
@KritixiLithos Це грало з цією ідеєю, але я не міг швидко придумати зразок рішення. Не соромтеся робити продовження :-)
The Vee

3
@closevoter Ви впевнені, що це занадто широко? Здоровий глузд автоматично звужує це з "надрукувати непорожній рядок 10 ^ 100 разів" до "надрукувати символ 10 ^ 100 разів".
снідакайхан

Відповіді:


34

Желе , 6 4 байти

³Ȯ*¡

Це ніладичне посилання (функція без аргументів), що друкує 10 200 копій рядка 100 , тобто 10 100 копій рядка, що складається з 10 100 копій рядка 100 .

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

Зауважте, що онлайн-перекладач з практичних причин скорочує вихід на 100 Кб. Код також працює як повноцінна програма, але завдяки неявному виводу ця програма надруковує одну копію занадто багато.

Як це працює

³Ȯ*¡  Niladic link. No arguments.

³     Set the left argument and initial return value to 100.
 Ȯ    Print the current return value.
  *   Compute 100 ** 100 = 1e200.
   ¡  Call Ȯ 1e200 times. 

3
Ну ... Нічого ... Друк 10^100копій оригіналу ( 10^100копії рядка) забирає це трохи далеко, навіть на два цілих байти. Чи подали ви це ще до виклику "оцінка є результатом / довжиною програми, найбільші виграші"?
wizzwizz4

1
Не впевнений, на який виклик ви звертаєтесь (у нас таких було декілька), але 3e200, мабуть, не є конкурентоспроможним.
Денніс

2
@ wizzwizz4 Якщо ви можете висловити свій номер у стандартній нотації, він, ймовірно, є занадто малим.
orlp

1
"Падіння" = провал / аварія
Лорен Печтел

4
@LorenPechtel Jelly реалізований в Python, який обробляє 665-бітні цілі числа легко.
Денніс

60

Нечітка Окто Гуакамоле, 13 12 11 10 байт

9+ddpp![g] 

Пояснення:

9+ddpp![g]
9+           # push 9 and increment, giving 10
  dd         # duplicate, twice. now you have [10,10,10]
    pp       # raise a 10 to the 10th power, then raise that to the 10th again. That ends up being 10^100.
      ![ ]   # for loop, `!` sets the counter to the top of stack
        g    # prints an ASCII art goat. 

Зразок кози, надрукований:

                  ___.
                 //  \\
                ((   ""
                 \\__,
                /6 (%)\,
               (__/:";,;\--____----_
                ;; :";,:";`;,";,;";`,`_
                  ;:,;;";";,;":,";";,-Y\
                   ;,;,;";";,;":;";"; Z/
                   / ;,";";,;";,;";;"
                  / / |";/~~~~~\";;"
                 ( K  | |      || |
                  \_\ | |      || |
                   \Z | |      || |
                      L_|      LL_|
                      LW/      LLW/

2
Мені знадобилося певний час, щоб зрозуміти голову козла. Це не легко впізнати
mbomb007

Гайт подарував мені мистецтво ASCII, запитайте його про це.
Rɪᴋᴇʀ

9
Я поняття не маю, про що ти говориш. +1.
djechlin

15
@djechlin Downgoat попросив мене додати вбудований для друку козла. Я зобов’язаний.
Rɪᴋᴇʀ

21

Пітон, 28 байт

-1 байт завдяки Джонатану Аллану!

Пітон 2:

i=10**100
while i:print;i-=1

Python 3 (30 байт):

i=10**100
while i:print();i-=1

2
i=10**100Новий рядок while i:print();i-=1зберігає байт. Збережіть ще два, використовуючи Python 2 зwhile i:print;i-=1
Джонатан Аллан

@JonathanAllan дякує за -1 байт. Щодо рішення Python 2, я залишаю це для вас:
FlipTack

Приємна перша відповідь! :)
Даніель

Чи може Python насправді зберігати від 10 до 100 в цілому?
Артуро Торрес Санчес

7
@ ArturoTorresSánchez так, немає верхньої межі розміру int у python :)
FlipTack

18

Haskell, 28 байт

main=putStr$[1..10^100]>>"1"

З'єднайте 10 ^ 100 копій рядка "1"і надрукуйте його.


Чи відбувається з'єднання рядків до початку друку? Якщо так, я думаю, що це порушує правило про «не більше 4 ГБ пам’яті» ...
daniero

8
@daniero: завдяки ліні Haskell друк починається негайно. На моєму комп’ютері програмі потрібно менше 2 Мб пам'яті (включаючи систему часу RTS).
німі

Чи s=[1..10^100]>>"1"дозволений формат відповідей?
користувач253751

Нескінченні цілі числа? В іншому випадку він падає на 10 ^ 100
Лорен Печтел

@immibis: у виклику написано "print", що зазвичай означає "print to stdout". sз вашого прикладу не друкує - або , якщо ви використовуєте реплєї оточує 1з ". Я думаю, що просто putStr$[1..10^100]>>"1"без цього main=було б добре, але я хотів подати повну програму.
німі

17

Brainfuck, 480 188 114 106 98 байт

Просто тому, що це потрібно зробити.

Передбачає 8-бітні комірки з обгортанням. Друкує 250 255 байтів NUL, що в 10 100 разів 10 155 разів 25 255 байтів NUL.

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

Пояснення:

>>>>>> потрібно, щоб залишити трохи робочого місця.

- виробляє 255.

[[->>>+<<<]------>>>-] перетворює це на 255 копій значення 250, даючи стрічку, яка виглядає так:

0 0 0 0 0 0 250 0 0 250 0 0 ... 250 0 0 [0]

<<<[<<<]+ повертає покажчик даних назад і закінчує початкові дані:

0 0 0 [1] 0 0 250 0 0 250 0 0 ...

Потім настає цикл: [+...-]спочатку встановлюється значення 1 на 2, яке встановлюється назад на 1 в кінці циклу. Цикл закінчується, коли тіло циклу вже встановлено 2 на 1.

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

  • [>>>]<<<рухається повністю вправо. Оскільки кожна цифра представлена ​​ненульовим числом, це тривіально.

  • ->+[<[+>-]>[-<<<<->+>>------>>]<<<<]>>-зменшує лічильник на 1. Починаючи з останньої цифри: цифра зменшується. Якщо вона залишається позитивною, ми закінчили. Якщо він перетвориться на нуль, встановіть його на 250 та продовжте з цифрою раніше.

  • [<<<].>>>переміщує вказівник назад перед найбільш лівою цифрою, і це приємний момент для друку байта NUL. Потім переставте позицію на найбільш ліву цифру, щоб побачити, чи ми закінчили.

Щоб перевірити правильність, змініть початковий -на +друк 250 1 байт NUL, ++на 250 2 і т.д.


16

C, 51 байт

Функція g()викликає рекурсивну функцію f()на глибину 99.

Виключає зайвий новий рядок, доданий між f()і g()для ясності.

f(n,i){for(i=10;i--;)n?f(n-1):puts("");}
g(){f(99);}

//call like this
main(){g();}

Друкує 1E100 нових рядків.

Декларація iяк другий параметр f()не гарантована для роботи у всіх версіях C. Тестована на моїй власній машині (GCC на CygWin) та на ideone.com (я вважаю, що вони також працюють із GCC), але не до f (99) для очевидних причини!


1
Чи відповідає це обмеження пам'яті 4 Гб?
Денніс

3
@Dennis Це повинно зробити, він зберігає на стеці лише 99 рекурсій f, n і i, обходячись тим, що C не може обробити 100-значний десятковий номер. Я б оцінив максимум 20 байтів для кожного примірника, f()так приблизно 1980 байт. putsСкидає новий рядок в API і API повинен виводити і очищати буфер по мірі необхідності.
Рівень річки Св.

3
Випробувано на локальному рівні та використання пам'яті навіть не перевищує 1 МіБ.
Денніс

Декларація i як другого параметра f () не гарантовано працює у всіх версіях C. Це може розірватися зі складовим аргументом, що викликає конвенцію, коли callee вискакує аргументи зі стека (або якщо fзаписує в стек простір, який викликав абонент не чекаю цього). clang попереджає про "занадто мало аргументів для виклику" f ", в -std=c89і -std=c99, тому визначення виступає як декларація з певною кількістю аргументів. Але я забуваю; Я думаю, що це може означати, що компілятор знає, що функція очікує 2 аргументи, і завжди залишить місце для другого аргументу.
Пітер Кордес

1
@FelixDombek спільнота знову вирішила, що "програма" означає, що ви можете написати програму або функцію, якщо прямо не вказано "повну програму". meta.codegolf.stackexchange.com/a/6912/15599 . Тому моє подання включає gі його допоміжну функцію f. mainбуло б довше. Тут є декілька інших функцій, якщо ви подивитесь.
Річка рівня Св.

14

Кодовий код машини Commodore VIC 20 (40 байт)

... тут показано як шістнадцятковий:

1040   A9[64]A2 00 9D 68 10 E8  E0[32]D0 F8 A9 00 9D 68
1050   10 A9[31]20 D2 FF A2 00  A9[64]DE 68 10 30 08 D0
1060   F0 9D 68 10 E8 D0 F3 60

(Початок роботи з допомогою: SYS 4160)

Значення байтів у дужках

  • 0x64 (зустрічається двічі) - основа (100); (значення від 2 до 127 повинні працювати)
  • 0x32 - це показник (50) (будь-яке ненульове значення (1-255) має працювати)
  • Зауважимо, що 100 ^ 50 = 10 ^ 100; запуск програми в 100 ^ 50 разів ефективніше оперативної пам’яті, ніж виконання 10 ^ 100 разів
  • 0x31 - символ ASCII для друку

і ні в якому разі не потрібно більше 4 G B пам'яті.

Це помилка введення тексту?

Ми маємо 1981 рік.

Типовий домашній комп'ютер має від 1 до 16 К Б оперативної пам’яті! І навряд чи ви знайдете професійні моделі, які мають 1 М Б і більше.

(Гаразд, просто жарт.)

Іншими словами, програма в принципі повинна бути перевірена, запускаючи її на своєму комп’ютері. Але через ступінь цього числа вам доведеться довести, що кількість копій рядка, який він виводить, рівно 10 ^ 100 і що програма зупиняється після цього.

Програма була протестована з іншими базами та показниками. Я не сумніваюся, він також буде працювати зі 100 та 50.

Принаймні, це не збігається з цими номерами (але і не закінчується в вимірюваний час).

Розмір пам'яті достатньо для показника 50 і 100 менше 127, тому основа 100 не повинна бути проблемою.

Основна ідея

Є 50-значний лічильник, який рахується в 100-системі. Байти 0x01-0x64 представляють цифри 0-99. Перший байт у лічильнику - найнижча цифра. Останній байт у лічильнику (найвища цифра) супроводжується байтом зі значенням 0x00.

Лічильник має початкове значення 100 ^ 50.

Зовнішній цикл записує байт на "поточний канал" ("стандартний вихід" в сучасних системах; зазвичай на екрані), а потім зменшує лічильник.

Зменшення виконується внутрішнім циклом: він зменшує цифру, а в разі підтону від 1 до 99 переходить до наступної цифри. Якщо байт 0x00 в кінці лічильника зменшено, програма зупиняється.

Код складання є

    ; Some constants
    base=10
    exponent=100
    character=0x32

    ; Initialize the content of the counter to 100^50
    ; (Fill the first 50 bytes with the value 100)
    lda  #base
    ldx  #0
initLoop:
    sta  counter,x
    inx
    cpx  #exponent
    bne  initLoop
    ; (The terminating 0 at the end of the counter)
    lda  #0
    sta  counter,x

    ; Now do the actual job
outerLoop:
    ; Output a character
    lda  #character
    jsr  (0xFFD2)
    ; Prepare for the inner loop
    ldx  #0
    lda  #base
innerLoop:
    ; Decrement one digit
    dec  counter,x
    ; Result is negative -> must have been the terminating
    ; NUL byte -> Exit
    bmi  progEnd
    ; Result is not zero -> Print the next byte
    bne  outerLoop
    ; Result is zero -> Was 0x01 before -> As 0x01 represents
    ; digit 0 this is an underflow -> set the digit to
    ; "exponent" (100) again (which represents digit 99)
    sta  counter,x
    ; Go to the next digit and...
    inx
    ; ... repeat the inner loop (decrement next digit)
    ; (Note that this conditional branch is ALWAYS taken)
    bne  innerLoop

progEnd:
    rts

counter:
    ; The memory used by the counter is here...

EDIT

Програма також працює на Commodore C64!


Я запозичив ідею рекурсії @ LevelRiverSt для моєї реалізації машинного коду x86-64 , що надходить у 30B (використовуючи putchar від libc для друку). Я розглядав лічильник циклу з розширеною точністю, і він також працюватиме в x86. (А також може бути досить дешево ініціалізовано). Можливо, я спробую коли-небудь ...
Пітер Кордес

1
LOL вау, я .... <гольф хлопок> ... Я не бачив 6502 збірки в ... ну, давно.
Олексій Хованський

12

Вузол, 89 байт

for(i="0".repeat(100)+1;+i;i=i.replace(/0*./,x=>"9".repeat(x.length-1)+~-x))console.log()

Виходить 10 100 нових рядків. (Теоретично, тобто, тест, замінивши 100з 1на виході 10 1 нового рядка замість цього.)

Це працює, встановивши iрядок

00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001

(100 нулів і 1; googol перевернуто), потім багаторазово "віднімання 1" за допомогою регексу замінюють і виводять новий рядок, поки рядок не буде рівним нулям.

Порт відповіді C ++ складе 49 байт:

(f=n=>{for(i=10;i--;)n?f(n-1):console.log()})(99)

1
Це геній! Або це, або ви експерт у Retina, що не обов'язково виключає "генія" ...
Патрік Робертс

7

05AB1E , 6 байт

Tn°F1?

Пояснення

Tn°    # push 10^100
   F   # 10^100 times do
    1? # print 1

5
@MartinRosenau: На щастя 05AB1E використовує цілі числа python 3, які не мають обмеження.
Емінья

1
@JanDvorak: Згідно з документами Python 3 , більше немає межі значення цілих чисел .
Емінья

1
@JanDvorak: Дійсно. Я використовував досить великі цифри без проблем (не дуже великі, хоча). Нам потрібно лише обробляти 1e100 тут, хоча і python точно може впоратися з цим :)
Emigna

1
@JanDvorak Максимальний розмір цілих чисел Python залежить виключно від кількості доступної пам'яті.
Mego

4
Я раніше дійшов до межі, намагаючись притупити довге число. Машина, якою я користувався, вміла обробляти числа, більші за 10 ^ 3000, перед цілим числом.
Esolanging Fruit

6

Рубін, 20 байт

(10**100).times{p 1}

Друкується 1, після чого новий рядок 1E100 разів.

1E100 не працює, оскільки воно оцінюється до плаваючого, а не довільного цілого числа точності.


Чи можете ви видалити дужки?
OldBunny2800

1
@ OldBunny2800 Ні. Методи мають пріоритет над операторами, тому це трактуватиметься як10**(100.times{p 1})
Річкова річка»

1
Для тих, хто цікаво, 1E100.to_iоцінено на 10000000000000000159028911097599180468360808563945281389781327557747838772170381060813469985856815104 на моєму комп’ютері.
Ендрю Грімм

6

/// , 36 символів ASCII (4 різних)

/t./.ttttt//.t/t\..........//t//t...

Виводить .символ 3 * 10 ^ 125 разів, це означає, що він виводить рядок, що складається з 3 * 10 ^ 25 повторів .символу, 10 ^ 100 разів.

Пояснення:

  1. /t./.ttttt/: Замініть t.на .tttttвсю решту програми, повторюючи, поки не t.залишиться жодного екземпляра . Це замінює t...з ...подальшим 125 tс.
  2. /.t/t\........../: Замініть .tна t..........всю решту програми, повторюючи, поки не .tзалишиться жодного екземпляра . Це займає наступне ...125 tс, і перетворює його на 125 tс, після чого 10 ^ 125 подій ....
  3. /t//: Видаліть усі залишки ts.
  4. t...: Це замінюється на 3 * 10 ^ 125 .с. Виведіть їх.

Тепер, вивівши 10 ^ 100 повторень 3 * 10 ^ 25 повторень чимось подібним відчуттям, як обман. Ця програма виводить .символ рівно 10 ^ 100 разів, використовуючи 45 символів ASCII:

/T/tttttttttt//.t/t..........//t//.TTTTTTTTTT

Пояснення цього:

  1. /T/tttttttttt/: Замініть Tна ttttttttttвсю решту програми. Це замінює TTTTTTTTTT100 повторень t.
  2. /.t/t........../: Замініть .tна t..........всю решту програми. Після цього .слід 100 tс, і перетворюється на 100 tс, після чого 10 ^ 100 .с.
  3. /t//: Видаліть усі залишки ts.
  4. .TTTTTTTTTT: Це замінюється на 10 ^ 100 .с. Виведіть їх.

Нарешті, ось компромісна програма, яка видає .символ 2 * 10 ^ 100 разів, використовуючи 40 символів:

/t./.tttttttttt//.t/t\..........//t//t..

6

Befunge 93, 33 байти

1>01g0`#@!# _01v
d^.1 **52p10-1g<

На жаль, у Befunge немає функції живлення, тому майже весь цей код - це моя реалізація функції живлення. Я над цим ще працюю.

Пояснення:

1 > 01g 0` #@!# _ 01g 1- 01p 25** 1. v
d ^                                  <

1: Почніть з 1верхнього лівого краю, щоб, коли ми множимось, ми не отримували 0кожного разу.

01g: отримати символ у позиції (0, 1), тобто dчий код ASCII 100.

0`: подивіться, чи значення, збережене в (0, 1), більше 0; це значення зміниться.

#@!# _: Логічно не !значення, яке ми отримуємо з останнього кроку (0 або 1), так що якщо воно було 1, то зараз у нас є 0, і ми зазначимо, що це #означає, що ви пропускаєте наступний символ у коді.

01g 1- 01p: Знову візьміть значення, збережене в (0, 1), відніміть 1 і збережіть це нове значення в (0, 1)

25**: помножте верхнє значення стека на 10

1.: друкуйте 1щоразу, коли ці петлі

1 друкується (теоретично) googol разів, але це швидко вибігає зі сторінки, на якій я тестував це.

Ви можете запустити Befunge 93 код тут . Чомусь найвище значення стека - це 1.0000000000000006e+100коли воно має бути 1.0e+100. Я не знаю, звідки це 6взялося, але я не думаю, що воно повинно бути там, і що це може бути якась помилка округлення чи щось подібне.


4

ABCR , 56 байт

++++++++++AAAAAAAAAA7a*A!(x4bBBBBBBBBBB7b+B@(xa(Ax5b(Box

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

Пояснення:

++++++++++                                             Set register to 10
          AAAAAAAAAA                                   Queue 10 to queue A 10 times
                    7a*A!(x                            Sum up all of queue A by:
                    7     x                             While the register is truthy:
                     a*                                 Dequeue two elements of A, sum them...
                       A                                ...and queue the result back to A.
                        !(                              If there's only one element left,
                                                        i.e. !(A.len - 1),
                                                        break from the loop.  A now has 100, our exponent.

                             4                        While A's front is truthy:
                              bBBBBBBBBBB              Clone the front of B 10 (our base) times.  (The first iteration fills it up with ten 1s)
                                         7b+B@(x       Sum up all of queue B like we did with A
                                                a(A    Decrement a (so that the loop actually ends. Runs 101 times like it should) x   

                                                       B now contains 10^100 only.

                                                   5b(B x   10^100 times:
                                                       o     print the front of queue A (0)

4

Пакетна, 574 242 байт

@echo off
set t=for /l %%a in (2,1,33554432)do call:
set f=for /l %%a in (2,1,9765625)do call:
%t%a
:a
%t%b
:b
%t%c
:c
%t%d
:d
%f%e
:e
%f%f
:f
%f%g
:g
%f%h
:h
%f%i
:i
%f%j
:j
%f%k
:k
%f%l
:l
%f%m
:m
%f%n
:n
echo

Кожна петля провалюється, тому виконуючи додаткову ітерацію. Цикли обмежені ~ 2³² через 32-бітове ціле обмеження. Перші чотири петлі рахують по 2² на загальну суму 2¹⁰⁰, а решта десять петель - 5¹⁰ на загальну суму 5¹⁰⁰.

Редагувати: зекономив немислимі 58% завдяки @ ConorO'Brien.



1
@ ConorO'Brien Зачекайте, ви можете це зробити? Я ніколи не знав!
Ніл

4

TI-Basic, 20 байт

Прямо. Одразу відображається лише вісім рядків, а попередні рядки не залишаються в пам'яті. Оскільки ᴇ100це не підтримується, ми мусимо -ᴇ99перейти з циклу до 9ᴇ99. Потім, якщо I!=0, виведіть рядок (який, до речі, дорівнює 3). Таким чином, ми друкуємо його точно ᴇ100раз.

For(I,-ᴇ99,9ᴇ99:If I:Disp 3:End

Ви впевнені, що змінна "Я" є достатньо точною, щоб зберігати 99 цифр?
Мартін Розенау

Гаразд, так, мені повинно вистачити цього, хоча він відображатиметься до 14 лише у випадку використання "Disp", але ми насправді не виводимо його, лише перевіряємо, чи він не дорівнює нулю. Також ти маєш рацію щодо символу, але я подумав, що ти зрозумієш, що я маю на увазі. Я скопію це в свою посаду зараз.
Timtech

Я ніколи не стикався з версією BASIC з нескінченними цілими числами, але це навіть не має значення, оскільки ваш цикл не виконується майже достатньо разів.
Лорен Печтел

1
Так, тут не існує нескінченних цілих чисел. Цілі особи повинні бути в межах + -10 ^ 100
Timtech

4

Функція машинного коду x86-64, 30 байт.

Використовує ту ж логіку рекурсії як відповідь За допомогою @Level River St . (Максимальна глибина рекурсії = 100)

Використовує puts(3)функцію від libc, з якою нормальні виконувані файли так чи інакше пов'язані. Це дзвонить за допомогою системи x86-64 System V ABI, тобто з C на Linux або OS X, і не перекриває жодних регістрів, яких не слід.


objdump -drwC -Mintel висновок, коментується поясненням

0000000000400340 <g>:  ## wrapper function
  400340:       6a 64                   push   0x64
  400342:       5f                      pop    rdi       ; mov edi, 100  in 3 bytes instead of 5
  ; tailcall f by falling into it.

0000000000400343 <f>:  ## the recursive function
  400343:       ff cf                   dec    edi
  400345:       97                      xchg   edi,eax
  400346:       6a 0a                   push   0xa
  400348:       5f                      pop    rdi       ; mov edi, 10
  400349:       0f 8c d1 ff ff ff       jl     400320 <putchar>   # conditional tailcall
; if we don't tailcall, then eax=--n = arg for next recursion depth, and edi = 10 = '\n'

  40034f:       89 f9                   mov    ecx,edi   ; loop count = the ASCII code for newline; saves us one byte


0000000000400351 <f.loop>:
  400351:       50                      push   rax       ; save local state
  400352:       51                      push   rcx
  400353:       97                      xchg   edi,eax   ; arg goes in rdi
  400354:       e8 ea ff ff ff          call   400343 <f>
  400359:       59                      pop    rcx       ; and restore it after recursing
  40035a:       58                      pop    rax
  40035b:       e2 f4                   loop   400351 <f.loop>
  40035d:       c3                      ret    
# the function ends here

000000000040035e <_start>:

0x040035e - 0x0400340 = 30 bytes

# not counted: a caller that passes argc-1 to f() instead of calling g
000000000040035e <_start>:
  40035e:       8b 3c 24                mov    edi,DWORD PTR [rsp]
  400361:       ff cf                   dec    edi
  400363:       e8 db ff ff ff          call   400343 <f>
  400368:       e8 c3 ff ff ff          call   400330 <exit@plt>    # flush I/O buffers, which the _exit system call (eax=60) doesn't do.

Побудований с yasm -felf64 -Worphan-labels -gdwarf2 golf-googol.asm && gcc -nostartfiles -o golf-googol golf-googol.o . Я можу розмістити оригінальне джерело NASM, але це виглядало як захаращення, оскільки інструкції по роботі з Asm є саме там, де розбираються.

putchar@pltменше 128 байтів від jl, тому я міг би використовувати 2-байтовий стрибок замість 6-байтового стрибка, але це справедливо лише у крихітному виконуваному файлі, а не в частині більшої програми. Тому я не думаю, що я можу виправдати не враховувати розмір реалізації libc, якщо я також скористаюся коротким кодом jcc, щоб досягти цього.

Кожен рівень рекурсії використовує 24B простору стеку (2 натискання та зворотну адресу, натиснуту CALL). Кожна інша глибина дзвонить putcharзі стеком, вирівняним лише на 8, а не на 16, тому це дійсно порушує ABI. Реалізація stdio, яка використовувала вирівняні сховища для розливу реєстрів xmm до стеку, призведе до помилки. Але glibc putcharне робить цього, записуючи в трубу з повним буферуванням або записуючи до терміналу з буферизацією рядків. Тестовано на Ubuntu 15.10. Це може бути виправлено за допомогою макетного натискання / вискоку в .loop, щоб компенсувати стек ще на 8 до рекурсивного виклику.


Доказ того, що він друкує потрібну кількість нових рядків:

   # with a version that uses argc-1  (i.e. the shell's $i)  instead of a fixed 100
$ for i in {0..8}; do echo -n "$i: "; ./golf-googol $(seq $i) |wc -c; done
0: 1
1: 10
2: 100
3: 1000
4: 10000
5: 100000
6: 1000000
7: 10000000
8: 100000000
... output = 10^n newlines every time.

Моя перша версія цього була 43B, і використовувалася puts()в буфері з 9 нових рядків (і закінчуючи 0 байтів), так що ставки додавали б 10-ту. Ця база рекурсії була ще ближче до натхнення С.

Факторинг 10 ^ 100 по-іншому, можливо, може скоротити буфер, можливо, до 4 нових рядків, заощадивши 5 байт, але використовувати putchar краще далеко. Потрібен лише цілий аргумент, а не вказівник і зовсім не буфер. Стандарт C дозволяє реалізувати, де це макрос putc(val, stdout), але в glibc він існує як реальна функція, яку можна викликати з ASM.

Друк лише однієї нової лінії за виклик замість 10 просто означає, що нам потрібно збільшити максимальну глибину рекурсії на 1, щоб отримати ще один коефіцієнт 10 нових рядків. Так як 99 і 100 можуть бути представлені знаком, розширеним 8-бітовим безпосередньо, push 100все одно лише 2 байти.

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

Ідеї ​​для збереження байтів

32-розрядна версія може зберегти байт для dec edi, але конвенція про виклик стеків (для функцій бібліотеки, таких як putchar) робить роботу хвостового виклику менш легкою, і, ймовірно, знадобиться більше байтів у більшій кількості місць. Я міг би використовувати конвенцію на регістр-аргумент для приватного f(), який викликав тільки g(), але тоді я не міг хвостового виклику putchar (тому що f () і putchar () брали б різну кількість аргументів стека).

Можна було б зберегти стан абонента f (), а не робити збереження / відновлення в абонента. Це, мабуть, відстійно, тому що, мабуть, потрібно буде потрапляти окремо в кожну сторону гілки, і це не сумісно з хвостовим звоном. Я спробував це, але не знайшов жодної економії.

Утримання лічильника циклу на стеку (замість push / popping rcx у циклі) також не допомогло. Це було на 1B гірше з використовуваною версією, і, ймовірно, ще більше втрат у цій версії, яка встановлює rcx дешевше.


2
Ура за відповіді на збірку! :)

4

PHP, 44 байти

for($i=bcpow(10,1e2);$i=bcsub($i,print 1););

Цей фрагмент виведе 1googol разів. Пам’яті не вичерпається, але вона страшенно повільна. Я використовую BCMath, щоб мати можливість обробляти довгі цілі числа.

Трохи кращі показники, але не такі маленькі (74 байти):

for($m=bcpow(10,100);$m;$m=bcsub($m,$a))echo str_repeat(a,$a=min(4e9,$m));

aВиведе букву googol разів. Він буде споживати майже 4 Гб оперативної пам’яті, виводячи одночасно близько 4е9 символів.


якщо просто "a" займає майже 4 Гб, що б "aaa" зробив? Знадобиться більше коду, але з ob_flush (); ви можете піти набагато далі
Martijn

Ум, це не одна a, це струна 4 * 10 ^ 9 aс. Ні в якому разі не переходьте на 4 Гб, якщо ви збираєтеся помістити туди 3 рази більше a. Ob_flush нічого спільного з цим не має. Суть другого прикладу полягає в тому, щоб виводити великі рядки відразу, а не виводити невеликі кількості символів кожен раз, що призводить до того, що програма запуститься трохи швидше, за рахунок більшого використання пам'яті.
chocochaos

Наскільки я знаю, що "> =" не в змозі обробити великі цілі числа, слід використовувати bccomp
Crypto

Ви правильні, це не дає правильних результатів при порівнянні рядків. Я виправлю це за хвилину.
chocochaos

Редагуйте дещо іншим, але робочим рішенням :)
chocochaos


3

Пайк, 6 5 байт

TTX^V

Спробуйте тут!

Неперевірений, оскільки він вибиває браузер. Перші 4 символи генерують 10 ^ 100 і Vдрукують багато нових рядків. Тест с 100V.


3

Ракетка 36 байт

(for((i(expt 10 100)))(display "1"))

Вихід:

1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...

3

JAISBaL , 4 байти

˖Q

Chrome не може прочитати всі символи, і я не впевнений у інших браузерах, ось ось малюнок:

Пояснення:

# \# enable verbose parsing #\
10^100       \# [0] push 10^100 onto the stack #\
for          \# [1] start for loop #\
    space    \# [2] print a space #\

Досить просто .... просто друкує пробіли googol. Три інструкції, але константа googol - два байти.

(Написано у версії 3.0.5)


Це 6 байт UTF-8. Яке кодування ви використовуєте?
Conor O'Brien

"байти" посилаються на це ...
Сократичний Фенікс

Гах, вибач. У мене є сценарій користувача, який робить посилання схожими на звичайний текст.
Conor O'Brien

О, я не знав, що це можливо, гаразд :)
Сократичний Фенікс

@ ConorO'Brien гмм, чому?
Cyoce

3

JavaScript ES6, 85 83 байти

Збережено 2 байти завдяки ETHproductions!

eval([...Array(i=100)].map(_=>`for($${--i}=0;$${i}++<10;)`).join``+"console.log()")

Це друкує 1e100 нових рядків.

Внутрішня частина формує цю програму, яка згодом оцінюється.

for($0=0;$0++<10;)for($1=0;$1++<10;)for($2=0;$2++<10;)for($3=0;$3++<10;)for($4=0;$4++<10;)for($5=0;$5++<10;)for($6=0;$6++<10;)for($7=0;$7++<10;)for($8=0;$8++<10;)for($9=0;$9++<10;)for($10=0;$10++<10;)for($11=0;$11++<10;)for($12=0;$12++<10;)for($13=0;$13++<10;)for($14=0;$14++<10;)for($15=0;$15++<10;)for($16=0;$16++<10;)for($17=0;$17++<10;)for($18=0;$18++<10;)for($19=0;$19++<10;)for($20=0;$20++<10;)for($21=0;$21++<10;)for($22=0;$22++<10;)for($23=0;$23++<10;)for($24=0;$24++<10;)for($25=0;$25++<10;)for($26=0;$26++<10;)for($27=0;$27++<10;)for($28=0;$28++<10;)for($29=0;$29++<10;)for($30=0;$30++<10;)for($31=0;$31++<10;)for($32=0;$32++<10;)for($33=0;$33++<10;)for($34=0;$34++<10;)for($35=0;$35++<10;)for($36=0;$36++<10;)for($37=0;$37++<10;)for($38=0;$38++<10;)for($39=0;$39++<10;)for($40=0;$40++<10;)for($41=0;$41++<10;)for($42=0;$42++<10;)for($43=0;$43++<10;)for($44=0;$44++<10;)for($45=0;$45++<10;)for($46=0;$46++<10;)for($47=0;$47++<10;)for($48=0;$48++<10;)for($49=0;$49++<10;)for($50=0;$50++<10;)for($51=0;$51++<10;)for($52=0;$52++<10;)for($53=0;$53++<10;)for($54=0;$54++<10;)for($55=0;$55++<10;)for($56=0;$56++<10;)for($57=0;$57++<10;)for($58=0;$58++<10;)for($59=0;$59++<10;)for($60=0;$60++<10;)for($61=0;$61++<10;)for($62=0;$62++<10;)for($63=0;$63++<10;)for($64=0;$64++<10;)for($65=0;$65++<10;)for($66=0;$66++<10;)for($67=0;$67++<10;)for($68=0;$68++<10;)for($69=0;$69++<10;)for($70=0;$70++<10;)for($71=0;$71++<10;)for($72=0;$72++<10;)for($73=0;$73++<10;)for($74=0;$74++<10;)for($75=0;$75++<10;)for($76=0;$76++<10;)for($77=0;$77++<10;)for($78=0;$78++<10;)for($79=0;$79++<10;)for($80=0;$80++<10;)for($81=0;$81++<10;)for($82=0;$82++<10;)for($83=0;$83++<10;)for($84=0;$84++<10;)for($85=0;$85++<10;)for($86=0;$86++<10;)for($87=0;$87++<10;)for($88=0;$88++<10;)for($89=0;$89++<10;)for($90=0;$90++<10;)for($91=0;$91++<10;)for($92=0;$92++<10;)for($93=0;$93++<10;)for($94=0;$94++<10;)for($95=0;$95++<10;)for($96=0;$96++<10;)for($97=0;$97++<10;)for($98=0;$98++<10;)for($99=0;$99++<10;)console.log()

Тепер для доказу правильності ми використаємо деяку індукцію. Підставами початкові 100 для інших значень, в загальному N . Я стверджую, що вставка N дасть 10 N нових рядків. Давайте передамо результат цього до wc -l, який підраховує кількість нових рядків у вхідних даних. Ми будемо використовувати цей модифікований, але еквівалентний сценарій, який бере вхід N :

eval([...Array(+process.argv[2])].map(_=>`for($${i}=0;$${i++}++<10;)`,i=0).join``+"console.log()")

Тепер ось декілька результатів:

C:\Users\Conor O'Brien\Documents\Programming
λ node googol.es6 1 | wc -l
10

C:\Users\Conor O'Brien\Documents\Programming
λ node googol.es6 2 | wc -l
100

C:\Users\Conor O'Brien\Documents\Programming
λ node googol.es6 3 | wc -l
1000

C:\Users\Conor O'Brien\Documents\Programming
λ node googol.es6 4 | wc -l
10000

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

Ось приклад виводу для N = 1:

C:\Users\Conor O'Brien\Documents\Programming
λ node googol.es6 1











C:\Users\Conor O'Brien\Documents\Programming
λ

Приємно. Збережіть пару байт за допомогоюeval([...Array(i=100)].map(_=>`for($${--i}=0;$${i}++<10;)`).join``+"console.log()")
ETHproductions

@ETHproductions спасибі! : D
Conor O'Brien

PS Я рахую 83 байти;)
ETHproductions

Ще один приклад тут . Не впевнений, чи корисно це комусь іншому, але я не був зовсім впевнений, як це працює, і написав функцію обгортки для функції eval'd, щоб грати. Ви чітко бачите, що програма нараховує до 10 ^ n, де n - кількість петель, що оцінюються. Я встановив умову повернення, щоб вона зламалася задовго до googol; змінити змінну, використовувану в цьому стані, щоб рахувати через різні рівні циклу. Крім того, нитрик: у вашому другому зразку коду показано, що зовнішній цикл становить $ 0, знижуючись до $ 99; його слід обернути назад, при цьому $ 99 буде зовнішнім циклом.
MichaelS

@MichaelS правда. Я зміню це наступним шансом, який отримаю.
Conor O'Brien

3

Математика, 48 30 25 байт

For[n=1,n++<Echo@1*^100,]

Вихід:

>> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
etc.

Не можете перевірити зараз, а як же For[n=0,n++<10^100,Echo[]]?
Мартін Ендер

Я б розглядав провідну >>частину продукції. Вони друкуються, якщо ви використовуєте Echoна консолі.
Мартін Ендер

@MartinEnder Whoops, виправлено
LegionMammal978

Як щодо Echo@0&~Array~10^100;21 байта?
Грег Мартін

3

Fortran 95, вільна форма, рекурсивна, 117 байт

Program M
Call R(99)
END
Recursive Subroutine R(L)
IF(L)3,1,1
1 DO 2 I=1,10
2 Call R(L-1)
RETURN
3 PRINT*,0
END

Друкує гугол рядків, що містять

          0

Fortran 90, рекурсивний, 149 байт

     CallR(99)
     END
     RecursiveSubroutineR(L)
     IF(L)3,1,1
   1 DO2I=1,10
   2 CallR(L-1)
     RETURN
   3 PRINT*,0
     END     

Рекурсивно викликаючи 100 вкладених циклів, кожні 10 ітерацій, робить рівно один googol. N, L і лічильники циклів всі вписуються в цілі числа байтів.

Тестується, замінивши 99 на 1, 2, 3, 4, 5 і зазначивши, що в кожному випадку підрахунок рядка від "wc" має n + 1 нулі.

Фортран II, IV, 66 або 77, 231 байт:

      N=2*10**9
      DO1I0=1,5**10
      DO1I=1,N
      DO1J=1,N
      DO1K=1,N
      DO1L=1,N
      DO1M=1,N
      DO1I1=1,N
      DO1J1=1,N
      DO1K1=1,N
      DO1L1=1,N
      DO1M1=1,N
1     PRINT2
2     FORMAT(X)
      END

Друкує гугол нових рядків.

Усі ці програми працюватимуть на 32-бітних машинах; насправді рекурсивні версії спрацювали б чудово на 16-бітній машині. Можна використовувати менше циклів у грубій версії, працюючи на старому Cray з його 60-бітовими цілими числами. Тут десять вкладених петель 2 * 10 ^ 9 всередині однієї петлі 5 ^ 10 (9765625) дорівнює 10 ^ 100 загальних ітерацій.

Жодна з версій не використовує жодної пам'яті, щоб говорити, окрім самого об'єктного коду, лічильників, однієї копії вихідного рядка та, у рекурсивній версії, повернення стека на 100 рівнів.

Перевірте фактори, порівнюючи

bc<<<2000000000\^10*5\^10
bc<<<10\^100

3

Симулятор машини Тьюрінга, 1082 байти

0 * 6 r 1
1 * E r 2
2 * C r 3
3 * 1 r 4
4 * B r 5
5 * C r 6
6 * F r 7
7 * 4 r 8
8 * 6 r 9
9 * 8 r A
A * 8 r B
B * 3 r C
C * 0 r D
D * 9 r E
E * G r F
F * H r G
G * 8 r H
H * 0 r I
I * 6 r J
J * H r K
K * 9 r L
L * 3 r M
M * 2 r N
N * A r O
O * D r P
P * C r Q
Q * C r R
R * 4 r S
S * 4 r T
T * E r U
U * E r V
V * G r W
W * 6 r X
X * D r Y
Y * E r Z
Z * 0 r a
a * F r b
b * E r c
c * 9 r d
d * F r e
e * A r f
f * H r g
g * D r h
h * E r i
i * 6 r j
j * 6 r k
k * D r l
l * G r m
m * H r n
n * 1 r o
o * 0 r p
p * 8 r q
q * C r r
r * 9 r s
s * G r t
t * 3 r u
u * 6 r v
v * 2 r w
w * 3 r x
x * E r y
y * 0 r z
z * 4 r +
+ * 5 r /
/ * A r =
= * 0 r -
- * H r \
\ * 7 r !
! * A r @
@ * 9 r #
# * 5 r $
$ * A r %
% * B r ^
^ * 5 r &
& * 9 r ?
? * 4 r (
( * C r )
) * E r `
` * 9 r ~
~ * 9 r _
_ * A * .
. 0 I l *
. 1 0 r <
. 2 1 r <
. 3 2 r <
. 4 3 r <
. 5 4 r <
. 6 5 r <
. 7 6 r <
. 8 7 r <
. 9 8 r <
. A 9 r <
. B A r <
. C B r <
. D C r <
. E D r <
. F E r <
. G F r <
. H G r <
. I H r <
. _ * r ]
< _ * r >
< * * r *
> _ = l [
> * * r *
[ _ * l .
[ * * l *
] _ * * halt
] * _ r *

Симулятор машини Тьюрінга

Я не знаю, чи вважається це правильним висновком, оскільки він має 82 провідні місця.

Я не знаю, чи дотримується це обмеження в 4 Гб, тому, якщо цього немає, то це неконкурентоспроможне і лише для вітрин. Вихід становить 1e100 байт, так що їх слід вирахувати з кількості байтів пам'яті. Кінцеве число байтів - 82 байти.

Ось пояснення:

Перші 80 рядків коду - це 80 різних станів, які генерують кількість базових 19 1 циклів 6EC1BCF4688309GH806H932ADCC44EEG6DE0FE9FAHDE66DGH108C9G3623E045A0H7A95AB594CE99A.

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

Наступні 6 рядків - це стан принтера, до якого додається =.

Нарешті, останні 2 рядки - це чистіший стан, який потрібен, щоб переконатися, що єдиний вихід =====...=====. Провідні / кінцеві простори не вважаються вихідними, оскільки вони неминучі побічні ефекти.

Потім програма зупиняється.

1 Я зробив для цього математику.


2

Піт, 7 байт

Нове (змагається)

V^T*TTG

Пояснення

G=The alphabet
Repeat 10^(10*10) times
    print(G)

Старий (не конкуруючий) 7 байт

*G^T*TT

Пояснення

G=The alphabet
G*(10^(10*10))==G*10^100

1
Це не відповідає обмеженню спогаду 4 Гб.
Денніс

@Dennis Я виправив це
Dignissimus - Спам

Не порада з гольфу, але я не думаю, що *TTвона коротша, ніж звичайна 100.
Ерік Аутгольфер

2

Python 3, 32 байти

for i in range(10**100):print()

Альтернативне рішення, 33 байти:

[print()for i in range(10**100)]

У Python 2 це особливо велика відповідь.

1
Не так вже й багато, @Lembik. У Python 2 range(10**100)створюється перелік чисел [1, 2, 3, 4, ...], в результаті якого OverflowError: range() result has too many items. Це буде працювати в Python 2 з викликом xrange()натомість, і працює в Python 3, оскільки він xrange()був перейменований на range(), а оригінал, range()який генерував список, був знятий.
Джеймс Мерфі

2
@JamesMurphyb Так, я це знаю. Я намагався бути смішним щодо нездійсненності відповідей кодегольфа.

1
Вибачте. У багатьох проблемах із читанням гумору у мене є проблеми з читанням гумору.
Джеймс Мерфі

2

Java, 198 179 155 байт

import java.math.*;class a{void A(a[]x){for(BigInteger b=BigInteger.ZERO;!(b=b.add(BigInteger.ONE)).equals(BigInteger.TEN.pow(100));)System.out.print(x);}}

Друкує ( x== null?: nullРядок, що починається [La;@або щось подібне) 10 100 разів за О (назавжди) час.


3
У вас є class, але немає public static void main(String[]a)методу. Що стосується гри в гольф поради ви можете замінити new BigInteger("0"), new BigInteger("1")і new BigInteger("10")з BigInteger.ZERO, BigInteger.ONEі BigInteger.TEN; ви можете замінити import java.math.BigInteger;на import java.math.*;.
Кевін Круїссен

1
Немає потреби в імпорті: щось подібне до цього має спрацювати:java.math.BigInteger b=null;for(b=b.ZERO;!(b=b.add(b.ONE)).equals(b.TEN.pow(100);)System.out.print(x);
Олів'є Грегоар

@ OlivierGrégoire Це дає мені NullReferenceException, можливо, тому що bце null.
Ксандерхолл

@Xanderhall ти, мабуть, спробував це в C # (тому що ти сказав NRE, а не NPE). Я не можу перевірити версію Java зараз, тому не можу сказати, що не так. У будь-якому випадку, я сказав "треба працювати", а не "буде працювати". Ідея взяти участь у тому, що ви можете мати статичні виклики методів у посиланнях екземплярів, навіть нульових.
Олів'є Грегоар

@ OlivierGrégoire Я спробував це на Java. Я не кодую в C #.
Ксандерхолл

2

Java, 153 байти

import java.math.*;interface M{static void main(String[]a){for(BigInteger i=BigInteger.ZERO;!i.add(i.ONE).equals(i.TEN.pow(100));)System.out.print(1);}}

Вихід: 1e100 1s

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

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


Це може бути гольф до 117 байт, використовуючи лямбда. Однак імпорт все ще потрібно включити. import java.math.*;()->{for(BigInteger i=BigInteger.ZERO;!i.add(i.ONE).equals(i.TEN.pow(100));)System.out.print(1);};
Shaun Wild

@BasicallyAlanTuring Насправді мій javacне дозволить мені це скласти.
Niclas M

Оновіть свою Java потім. Також це не повний комбінований код. Тільки мінімальний мінімум, дозволений для вступу.
Shaun Wild

@BasicallyAlanTuring Got Java 8. Я думаю, що функції OP заборонені.
Ніклас М

Код, який я вам надав, не є повною програмою. Це просто те, що потрібно, щоб бути правильною відповіддю CG
Shaun Wild

2

Pyth, 8 7 байт

V^T100G

Посилання

Рішення тестується з невеликим виходом, але він повинен надрукувати abcdefghijklmnopqrstuvwxyz1e100 разів.

З якої - то причини pбув НЕ потрібен, а 31343 (Maltysen) сказав .


Для чого потрібен р?
Мальтісен

@Maltysen Я думаю, через обмеження в 4 ГБ.
Ерік Аутгольфер

Чому? Тому що буфер? Це не автоматично змиває?
Мальтісен

@Maltysen Я не знаю, онлайн-перекладач не має функціоналу негайного виводу. Це може спалахнути, а може і не бути ...
Ерік Атголфер

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