Програмуйте свою улюблену фразу


28

Виберіть цитату чи фразу, яка має довжину рівно 5 слів, наприклад Programming puzzles and code golf!.

Напишіть програму, яка, додавши до себе n разів, виводить перші n + 1 слова вашої фрази по порядку.

Наприклад, якщо ваш програмний код був, MYPROGа ваша фраза була Programming puzzles and code golf!запущена ...

  • MYPROG повинен вивести Programming
  • MYPROGMYPROG повинен вивести Programming puzzles
  • MYPROGMYPROGMYPROG повинен вивести Programming puzzles and
  • MYPROGMYPROGMYPROGMYPROG повинен вивести Programming puzzles and code
  • MYPROGMYPROGMYPROGMYPROGMYPROG повинен вивести Programming puzzles and code golf!

Збільшення кількості 4 разів не визначено, програма може робити що завгодно.

Правила

  • Ваша фраза повинна бути граматично значущою англійською мовою. В ідеалі він повинен бути з великої літери та пунктуації.
  • Ваша фраза може бути будь-якої довжини, але її ентропія, яка розрахована за http://www.shannonentropy.netmark.pl/ , не може бути меншою за 3,5 .
    (Вставте фразу, натисніть « Обчислити» та шукайте останній Н (Х) .)
  • Ваша фраза може містити лише символи для друку ASCII (шістнадцятковий від 20 до 7E). Ваш код може містити тільки друкований ASCII та вкладки та нові рядки.
  • Ваша фраза повинна містити рівно 5 унікальних слів і 4 пробіли. Усі непробіли вважаються частинами слів. Пробіли - це межі слів. Вони можуть бути не ведучими або відсталими; Адже має бути одне, але останнє слово.
  • Вихід повинен містити і один пробіл між словами. Вихід на кожному кроці, що додається, може містити пробіли, але не провідні пробіли.
  • Вихід у stdout. Введення немає.

Оцінка балів

Ваш бал - це довжина в байтах вашої початкової програми, що не додається. (наприклад, MYPROGбали 6)

Оскільки це код-гольф, виграє найнижчий бал.


21
aww, вимоги до ентропії та унікальності вбивають мою ідею "буйвола" як вступу.
Спарр

4
Я збирався так повеселитися в Piet, поки "Ваш код може містити тільки друкований ASCII та вкладки та нові рядки". :(
Sp3000

3
@ Sp3000 Ви можете поставити почесну відповідь. Я хотів би побачити рішення Піта :)
Захоплення Кальвіна

Це єдина ситуація, коли чистота Хаскелла - це саме проблема ...
Rhymoid

граматично значуща англійська Занадто незрозуміло, що таке "граматична значуща англійська" через різні тлумачення граматичного та змістовного значення.
MilkyWay90

Відповіді:


6

CJam - 24

"TheguywasnotI"Lm3<]S*:L

Спробуйте це на http://cjam.aditsu.net/

Пояснення:

Lmвилучає букви, що містяться в L (спочатку "") з "TheguywasnotI",
3<приймає перші 3 букви,
]збирає вміст стека в масив,
S*приєднується до масиву, використовуючи пробіл, оскільки роздільник
:Lпризначає отриманий рядок L (також залишаючи його в стеці )

Стара версія (28 байт):

"He is but a dog."S/W):W=]S*

Пояснення:

S/розбивається на пробіли
W):WW (спочатку W = -1)
=отримує слово W'th
]збирає вміст стека в масив
S*приєднується до масиву, використовуючи пробіл як роздільник


Ця мова справді цікава. Як кажуть, "Ви щодня дізнаєтесь про нову мову" ... або щось подібне. Хороша робота!
Бробін

Прийнявши це замість однаково короткої відповіді Денніса, як це було опубліковано першим.
Захоплення Кальвіна

28

Піт (почесна відповідь)

введіть тут опис зображення

Змії пробираються вниз, вибігаючи праворуч через синій колір і повторно входячи через зелений. Виводить «Фруктові мухи, як банан».

Для цього я використовував PietCreator , але ви можете спробувати тут . Переробляти програми "Піет" - це біль, тому я почав з 35x35 і продовжував так, це означає, що я використовував набагато більше коделів, ніж мені потрібно.

Версії фактичного розміру

введіть тут опис зображення введіть тут опис зображення введіть тут опис зображення введіть тут опис зображення введіть тут опис зображення


11

> <> (42)

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

!v'?od gub yna nac tahW;'00p!
<<|ov!
voo <

Зауважте, що у програмі відсутній новий рядок. Повний вихід реверсується в першому рядку; повна фраза "Що може зробити будь-яка помилка?" (ентропія 3,558418).

Повне пояснення:

Це одна із найвеселіших програм, які я написала, оскільки це перша, яка використовує рефлексію. Перший рядок - це місце, де м'ясо програми.

!vне працює, оскільки !спричиняє пропуск наступної інструкції.

'?od gub yna nac tahW;' зберігає повну фразу на стеку (це назад, тому що кожна буква висувається на стек у порядку, записаному в порядку, тому її потрібно перевернути, щоб красиво вискочити).

00pсаме там починається справжня магія. Зауважте, що вона не просто зберігала фразу, вона також зберігала ;. 00pвставляє верхній символ у стек в програму в положенні (0, 0), тому тепер першим символом програми є а ;.

Закінчення !пропускає крапку з комою та переміщує курсор на v, який спрямовує потік програми вниз.

З цього моменту все це лише друк рутин. Оскільки немає нового рядка, то послідовні додатки програми просто додають останні два рядки, оскільки перший рядок буде праворуч voo <, і тому ніколи не буде виконуватися.

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


Хвилину тому це було технічно недійсним, але я просто змінив специфікацію, щоб в коді були дозволені нові рядки (і вкладки) (що я хотів спочатку).
Захоплення Кальвіна

Ох, мій поганий, зовсім пропустив те, що стосується джерела, а не лише фрази. Я радий, що це було намір,> <> програми досить сильно покладаються на нові лінії.
Майк Precup

Якщо ви хочете трохи пограти вниз, ви можете використовувати фразу з 11 літерами і жодних повторюваних символів, наприклад, "It is by a rope."Ваша фраза повторює символи, тому вона має меншу ентропію, ніж могла.
isaacg

Проблема полягає в тому, що кожен вихід має бути однакової довжини, щоб добре друкувати, оскільки> <> не може легко визначити пробіли. Я не зміг знайти коротшу.
Майк Precup

2
@isaacg Особисто я віддаю перевагу фразі Майка;)
Захоплення Кальвіна

10

Пітон 66

i='i'in dir()and i+1;print("Tfpcfhaialetgny"[i::5],end=" ."[i>3]);

Ентропія: 3.61635

Вихід:

The fat pig can fly.

Дякую @JasonS та @grc за поради щодо скорочення частини змінної виявлення.

Оновлення: Чи дивіться відповідь Джейсона на хитрий фокус, який підштовхнув це до 55 байт. :)


i=locals().get('i',-1)+1;становить -5 байт
Джейсон S

Бий мене до цього! Я збирався використовувати i='i'in dir()and i+1. Редагувати: правила змінені.
grc

Ну, це ще -4
Джейсон S

60 байт з Python 2:i='i'in dir()and i+1;print"Tfpcfhaialetgny"[i::5]+" ."[i>3],
nyuszika7h

9

Python 3, 55 (бонус 67)

# 55 bytes, H(X)=3.72, Based on bitpwner's 66. "Mix dog and cat fur."
i=0;print("Mdacfionauxgdtr"[i::5],end=" ."[i>3]);i+=1;i

# 67 bytes, H(X)=4.28. "Thanks for supporting Python development."
q=b"qx!%%0077C";a,b,*q=q;print((str(credits)*2)[49:][a:b],end='');q

# 60 bytes, H(X) = 3.51. "Fix the bed old pal"
s="Fixthebedoldpal";a,b,c,*s=s;print(a+b+c,end='. '[s>[]]);s

Ви маєте на увазі, що він обертається навколо?

Гаразд, пояснення щодо №2 (спойлери)

  • creditsце вбудований пітон, який містить текст, який я хотів би використати. Це особливого типу з відформатованим, reprщоб ви могли просто ввести його в інтерактивний перекладач і побачити приємний вихід, тому я маю str()це робити . Я витратив досить багато часу на перегляд вбудованих для цього, і "Спасибі за підтримку розвитку Python", як фраза була занадто хорошою, щоб пропустити.

  • Оскільки тексту є багато, і я хочу лише свої 5 слів, я хочу зберігати початкову та кінцеву позиції кожної підрядки. Це в байтах на початку. bytesоб'єкти в python3 діють як масиви цілих чисел, коли ви використовуєте операції послідовності на них.

  • Але код може містити лише символи для друку, тому мені довелося знайти зсув (49), який би зробив усі мої значення позиції для друку як символи.

  • "Дякую" знаходиться біля початку рядка, тоді як інші слова ближче до кінця, а значить, значення моєї позиції були занадто далеко, щоб усі були в діапазоні для друку. Повторне введення рядка на 2 робить ще одну копію "Спасибі", яка наближається до інших слів.

  • Взяття [49:]фрагмента рядка - це один менший байт джерела, ніж додавання 49 до a і b.

  • Конструкція, що використовується у всіх трьох відповідях, така x=<value>;dostuff and increment;x. Заключення xнічого не робить, але в поєднанні з наступною копією коду він перетворюється на те, xx=<value>що запобігає xперезапису лічильника.

  • a,b,*q=q ідеально нормальна розпаковка послідовності Python 3.


+1. Злий фокус. :) Чи можу я оновити його у відповідь?
Векторизований

Що ж, я використав вашу серединку
Jason S

Я зараз дивуюсь вашій другій відповіді. Стільки трюків упаковано в нього.
Векторизований

2
Скажіть, будь ласка, як працює друга відповідь?
sajas

8

Пітон 2 (37)

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

i=4;print"mniIMeosQy!t"[i::5],;i-=1;i

Вихід:

My
My IQ
My IQ is
My IQ is not
My IQ is not me!

Ентропія H(x)=3.5рівно.

Заслуга Джейсону С., чию відповідь я в основному використовував оптом. iiОбгортковий трюк чудово.


Приємно! Реквізити для пошуку коротшої фрази з правою ентропією. Я здався. Також забув, що py2 printпопереджує пробіли, а не додає їх
Jason S

Це надзвичайно коротко для відповіді Python! Молодці.
isaacg

Ви можете видалити кому, що є у вас в середині програми, щоб опуститися до 36 символів.
xleviator

8

С - 65

Коментувати зловживання :)

char*z="Ah, \0the \0good \0ol' \0times!";
for(printf(z);*z++;);//

Через це нові рядки важливі, і код слід додавати так:

char *z="Ah, \0the \0good \0ol' \0times!";
for(printf(z);*z++;);//char *z="Ah, \0the \0good \0ol' \0times!";
for(printf(z);*z++;);//...

Це приємне рішення!
MilkyWay90

4

CJam, 24 байти

"LwOtmiaKoezs"W):W>5%]S*

Якщо запустити п'ять разів, він надрукує, що Ліз для мене була в порядку . Знаки пунктуації не включені, вибачте.

Як це працює

"LwOtmiaKoezs"  " Push that string. ";
W):W            " Push W (initially -1), increment and save the result in W. ";
>               " Shift that many characters from the string. ";
5%              " Select every fifth character, starting with the first. ";
]S*             " Wrap the stack in an array and join its strings using spaces. ";

Холодна ідея, хоча фраза начебто слабка: p
aditsu

Я визнаю це, але це мало бути xxx xxx xx xx xx , без повторних літер. Це єдине речення, яке я міг би придумати, що мав хоч трохи сенсу ...
Денніс

Як щодо "Сонце було в порядку"? Ви також можете замінити "Сонце" на інше слово чи ім'я.
aditsu

Краще, спасибі.
Денніс

3

Піта , 32

p?kqZ4d@P"It is by a rope."dZ~Z1

Фраза: "Це мотузкою".

Ентропія: 3,5

Як це працює:

p означає друк із заданим роздільником.

Перший аргумент ?kqZ4d, дає роздільник. ?kqZ4dзасоби k if Z==4 else d. kє '', поки dє ' '.

Другий аргумент - значення, яке слід надрукувати, генерується розщепленням ( P) на пробіл ( d) та індексацією у цьому списку ( @) на Z.

Нарешті, Zякий автоматично ініціалізується на 0, збільшується на 1 ( ~Z1).


2
Я не міг придумати контекст, де ця фаза природно впишеться в ^^
недолік

1
@flawr "Де я жив балом?" "Це мотузкою".
isaacg

3

Гольфскрипт, 53

Цей був веселим.

{'1'-print}:puts;.'You; are; not; a; duck.'';'/\,=\1+

Фраза: "Ви не качка". (що абсолютно вірно; ентропія 3,5110854081804286)

Пояснення:

Стек починається як ''при першому "запуску" (оскільки STDIN не надається). '1's додаються до цього, щоб означати, скільки разів було вставлено код.

{'1'-print}:puts;             # Hacky stuff (see below)
.                             # Stack: '' ''
'You; are; not; a; duck.'';'/ # Initialize the array of words
\,                            # Get the length of the string of '1's (0)
                              # Stack: '' [words] 0
=                             # Stack: '' 'You'
\1+                           # Stack: 'You' '1'

Тепер, що відбувається під час другого запуску:

{'1'-print}:puts;             # Hacky stuff (see below)
.                             # Stack: 'You' '1' '1'
'You; are; not; a; duck.'';'/ # Initialize the array of words
\,                            # Get the length of the string of '1's (1)
                              # Stack: 'You' '1' [words] 1
=                             # Stack: 'You' '1' ' are'
\1+                           # Stack: 'You' ' are' '11'

І так далі.

"Але", ти думаєш, "як ти змушуєш 1-го не виводити?" Ах, це весела хакітська частина. Golfscript реалізує puts(який називається, коли програма закінчується) так:

{print n print}:puts;

Я просто змінив це на

{'1'-print}:puts;

Так що 1s придушується з кінцевого виводу.


3

J - 42 char

Я міг би піти на більш коротку фразу, але чому? Це не було б моїм улюбленим.

(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '

Це спрацьовує через подвійність монади / діади J: кожне дієслово можна викликати як монаду - з одним аргументом праворуч - або як діаду - з аргументом зліва та іншим праворуч.

Розглянемо наступний сеанс роботи з J REPL:

   'You multiplied 6 by 9. '
You multiplied 6 by 9.
   'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '
You multiplied 6 by 9. You multiplied 6 by 9.
   ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '   NB. break into words
+---+----------+-+--+--+---+----------+-+--+--+
|You|multiplied|6|by|9.|You|multiplied|6|by|9.|
+---+----------+-+--+--+---+----------+-+--+--+
   (#\) ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '             NB. count off
1 2 3 4 5 6 7 8 9 10
   (6 | #\) ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '         NB. mod 6
1 2 3 4 5 0 1 2 3 4
   (1 = 6 | #\) ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '
1 0 0 0 0 0 1 0 0 0
   (#~ 1 = 6 | #\) ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '  NB. select
+---+----------+
|You|multiplied|
+---+----------+
   (#~ 1 = 6 | #\)&.;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. ' NB. undo ;:
You multiplied

Там ,трактується як діада, тому що він знаходиться між двома аргументами, і (#~1=6|#\)&.;:є монадою, оскільки не має лівого аргументу. Отже, якби у нас було дієслово, яке могло б діяти так, як ,тоді, коли діадик і (#~1=6|#\)&.;:монадик, ми були б встановлені.

Як ви вже здогадалися, така сполука існує і виглядає так :. Монадіка f :gеквівалентна f, і вона еквівалентна gдіадічній. Це вирішує проблему.

Приклади, які ви можете спробувати на веб- сайті tryj.tk :

   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You
   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You multiplied
   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You multiplied 6
   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You multiplied 6 by
   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You multiplied 6 by 9.

І так, природа оберненої форми ;:робить це таким, що немає ніяких пробілів.

Використання в It is by a rope.якості фрази дає 35 символу: (#~1=6|#\)&.;: :,'It is by a rope.'. Нам не потрібен простір, як ми робимо для мого вироку, з прихованих ;:причин.


3

BBC Basic, 40

Включає один новий рядок. Було б 30, якщо ключові слова можна вважати маркованими замість ASCII.

Я зловив свою дівчину, що спила з молочником, тому я її скинув і сплю з її сестрою з помсти. As my ex do I!(п'ять буквених "слів" з унікальними символами) виявилося недостатньо ентропією, тому я додав усміхнений язик в кінці, щоб зробити ентропію рівно 3,5. Зрештою, у мене насправді досить нормальне життя, а не якийсь дивний сюжет мильної опери.

  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P

Повторивши програму 5 разів, ми отримаємо

  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P
  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P
  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P
  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P
  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P

Виконується лише 5 READтверджень, а перші 5 елементів даних зчитуються з першого DATAтвердження. решта даних є зайвими. Вихід:

  (once)
  As 
  (5 times)
  As my ex do I:-P 

2

Рубі, 50

puts'The fat pig can fly.'[0..File.size($0)/12-1]#

Це використовує власну довжину для визначення кількості слів для друку. Його повтори в іншому випадку ігноруються , що закінчуються на коментар персонажа, #. Фраза, запозичена у bitpwner : дуже зручно мати коротку фразу з однаковою кількістю літер у кожному слові.

Оскільки кожне слово + закінчення становить 4 символи, формула була б, наприклад, для програми довжиною 56 років:, (File.size($0)/56)*4 - 1але я можу розділити достроково 56/4 = 14, так що File.size($0)/14 - 1, зберігаючи кілька символів. 50не кратна 4, але 12достатньо близька для потрібного діапазону.


2

Чіп , 165 + 3 = 168 байт

+3 для прапора -w

| ,z `Z`Z  `Z
| |ZZZ>Z>ZZZ>ZZZZ
>((((((((((((((((
|)-)))-)-)))-))))g
|)d)xx-x-)xx-))x)e
||b+))-x-x))-x)xc
|`v))xa(-x(x-((^d
|*`.))d| b | b
|Z~<b( |~Zf|
>~T| | |   |

"Я виграв червоний костюм" (3.5) (я насправді такого ще не виграв) (... поки)

Зверніть увагу на тривалість нового рядка, так що об'єднана копія з’явиться під існуючим кодом.

Спробуйте в Інтернеті! (оригінал)
Спробуйте в Інтернеті! (оригінал плюс усі чотири примірники)

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

Як це працює

Спочатку фраза:
12 унікальних символів + 4 пробіли = рівно 3,5 ентропії.

І код:
Кожна копія друкує перше слово, а потім повідомляє копію нижче, щоб надрукувати наступне слово. Якщо є лише один екземпляр, другої копії немає, тому нічого, крім першого слова, не надруковано.

Якщо є дві копії, обидва будуть друкувати перше слово одночасно (байти АБО разом, тож це добре), тоді друге слово друкуватиме лише друга копія.

Якщо є всі п’ять примірників, усі надрукують перше слово, тощо, тощо, а п'ята копія надрукує останнє слово сама.

Схема припинення припинить програму, як тільки всі копії не надрукуються активно.



1

Перл, 37

print qw(My IQ is not me!)[$i++].' ';

Схожий на те, що було у конкурентів, але скориставшись qw perl, щоб зберегти ще кілька символів.


1

Довжина повідомлення Rebmu + 27

Чи були ми з "Моїм IQ - не я!" це було б 43. Але я підтримую це повідомлення:

uV?'s[S[{The}{rebellion}{against}{software}{complexity.}]]proTKsPROsp

Еквівалентний Ребол / Червоний:

unless value? 's [
    s: [{The}{rebellion}{against}{software}{complexity.}]
]

print/only take s
print/only space

Ребол має 3 основні умови: ЯКЩО, ВСЕ і БЕЗКОШТОВНО. UNLESS еквівалентний IF AND NOT, але може бути більш зрозумілим: "Завжди виконайте наступне, UNLESS, ця умова відповідає дійсності".

У цьому випадку умовою є те, що ми перевіряємо, чи не було символу S надано значення у поточному контексті. Ми мусимо використати цитату, оскільки спроба використовувати без котирування S в умовному виразі оцінить його і, можливо, призведе до помилки. ( value?не зазначає його параметр за замовчуванням, тому що, можливо, ви хочете, щоб символ, який ви перевіряєте, був змінною, наприклад, sym: 'sтоді if value? sym [...]фактично перевірить, чи визначено S, а не SYM)

Лише перша вставка програми присвоїть ряд рядків С. Послідовні вставки дістануть рядок із заголовка серії та передадуть її в PRINT / ONLY, яка надрукує його аргумент без додавання каналу рядка.

(Примітка: PRINT / ТОЛЬКО - це запропонований спосіб заміни вимови PRIN, який розглядається в Rebol 3 та Red; заміна друку зараз тестується в Rebmu.)


1

AHK , 44 байти

i++
Send % SubStr("He is an OK ex",i*3-2,3)

Зверніть увагу на новий рядок наприкінці. Єдине розумне тут - це те, що в рядку є всі 3-літерні слова, тому нам нічого не потрібно розділяти. Натомість ми просто тягнемо підрядку на основі i. Вихід - на активний екран так, ніби він був введений на клавіатурі.


0

Javascript (53)

Я взяв текст з aditsu, оскільки я не роблю нічого фантазії з текстом, так що вибрані слова дещо не мають значення для рішення (крім кількості байтів).

var i=i|0;alert("He 0is 0but 0a 0dog".split(0)[i++]);

Чи alertвраховується в цьому випадку? Редагувати: Читання правил, мабуть, не відбувається, оскільки я не з'єдную рядки з пробілами. Додаю пробіли, щоб зробити це справедливим.

Також зауважте, що дороге varнасправді актуально в цьому випадку.


Хтось може пояснити, чому var i|=0;НЕ працює тут ???
flawr

@flawr З цим не можна робити |=чи подібне var. Без цього varви отримаєте ReferenceError: i is not defined. var i=i|0розширюється до var i=undefined|0, і undefined|0мабуть 0.
nyuszika7h

Це працює через піднімання. var i=i|0еквівалентно var i;i=i|0. Ось чому ви не отримуєте посилання на помилку. Причина, коли вперше буде встановлено 0, - це те, що сказав @ nyuszika7h.
Інго Бюрк

1
Але це буде насторожувати слова окремо.
гордий haskeller

0

Перл, 43 56

print substr'Mine was not Red 5!',4*$i++,4;

Я приймаю, що не можу перемогти цього. Моя оригінальна спроба пояснює, чому:

@a=('This',' code',' is',' too',' long.');print$a[$i++];

0

Луа, 77

Досить просте рішення:

i=(i or 0)+1;io.write((i==1 and""or" ")..("Thebigfoxwasup."):sub(3*i-2,3*i))

(H (X) = 4,23)


0

Javascript, 138

g=this;clearTimeout(g.t);g.i|=0;i++;g.t=setTimeout(
    function(){console.log(["I'll","sleep","when","I'm","dead."].slice(0,i).join(' '))},0);

(додатковий новий рядок додається лише для читабельності)

Друкує I'll sleep when I'm dead. Використовує таймер, щоб переконатися, що вихід надрукований лише один раз


0

Чистий Баш, 51 байт

a=(All you need is Love!)
printf "${i:+ }${a[i++]}"

H (X) = 3,59447

Це могло б трохи побільшити, поширюючи одну з коротших фраз, але я радий дотримуватися найвідомішої цитати Декарта Леннона. (Вибачте @Descartes, але всі слова повинні бути унікальними).

Вихід:

$ ./phrase.sh 
All$ cat phrase.sh phrase.sh phrase.sh > phrase3.sh
$ chmod +x phrase3.sh 
$ ./phrase3.sh 
All you need$ 
$ cat phrase.sh phrase.sh phrase.sh phrase.sh phrase.sh > phrase.sh
$ chmod +x phrase5.sh 
$ ./phrase5.sh 
All you need is Love!$ 

Слідкуйте за тим, щоб вставляти пробіли між словами, але пробілів чи пробілів немає.

Покладається на те, що у bash невизначені змінні, коли розширені як рядки мають значення "", а коли розширені арифметично мають значення 0.


П'ять слів повинні бути унікальними ...
trichoplax

Оскільки ваш код здається універсальним для вирішення будь-якої фрази з 5 слів, я впевнений, що ви можете придумати той, який має необхідну ентропію 3,5 (занадто багато подвійних літер у цій ...).
трихоплакс

@githubphagocyte Я сподівався, що ти даси мені доброзичливість округлення ;-) Ок, я вже виправив це з додатковим !- схоже, це зробить трюк.
Цифрова травма

0

PHP 89 78 char

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

Фраза:

code golf is pretty fun

Ентропія = 3,82791

Код:

<?
$i=(isset($i)?$i+1:0);
$w=["code","golf","is","really","fun"];
echo $w[$i].";

Гольф:

<?$i=(isset($i)?$i+1:0);$w=["code","golf","is","really","fun"];echo $w[$i].

0

Python3 - 122 байти

Відкрийте дверцята кришки [HAL]

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

Моя програма - це взяти ім’я файлу (p.py - це база) і перевіряє, скільки разів ітераційне ім'я бази. Потім він бере шматочки від струнного nрази. n- це кількість ps у імені файлу.

import sys,re
for i in range(len(re.findall(re.compile('p'),sys.argv[0]))):print('Otpbdphoaoeedyon   r    s'[i::5],end='')

~ $ python p.py
Open

~ $ python pp.py
Open the

~ $ python ppp.py
Open the pod

~ $ python pppp.py
Open the pod bay

~ $ python ppppp.py
Open the pod bay doors

Користь регулярного вираження полягає в тому, що програму можна назвати все, що завгодно, і вона все одно буде працювати (за умови зміни базового імені в коді): моя оригінальна програма називалася golfed.py.


0

05AB1E , 21 байт (неконкурентоспроможний)

“€Œ‰‹€‡Øš‹É.“ª#¾è¼?ð?

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

Використання:

This works for literally anything. 
H(x) = 4.02086

Пояснення

“€Œ‰‹€‡Øš‹É.“ª#¾è¼?ð?
“€Œ‰‹€‡Øš‹É.“ª        # Pushes "This works for literally anything."
              #       # Split on spaces
               ¾è     # get element at index of counter_variable (default 0)
                 ¼    # Increment the counter_variable
                  ?   # Print the selected element
                   ð? # Prints a space

Не бачив цього, розміщений поблизу того ж з “€í€Ü€…‚¿‹·“hehe
Magic Octopus Urn


0

SmileBASIC, 54 байти

DATA"Does"," anybody"," have"," a"," key?
READ W$?W$;

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

READКлючове слово зчитує значення з DATAі зберігає його у змінній. Використовуючи READще раз, ви отримаєте наступний елемент тощо.


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