Запрограммируйте свою любимую фразу


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 .
    (Вставьте фразу, нажмите « Рассчитать» и найдите последнюю букву H (X) .)
  • Ваша фраза может содержать только печатные символы ASCII (шестнадцатеричные от 20 до 7E). Ваш код может содержать только печатные ASCII и вкладки и новые строки.
  • Ваша фраза должна содержать ровно 5 уникальных слов и 4 пробела. Все не пробелы считаются частями слов. Пробелы - это границы слова. Они могут не быть ведущими или отставать; должно быть одно, кроме последнего слова.
  • Вывод также должен содержать один пробел между словами. Выходные данные на каждом добавляемом шаге могут содержать конечные пробелы, но не начальные пробелы.
  • Вывод на стандартный вывод. Там нет ввода.

счет

Ваша оценка - это длина в байтах вашей исходной незаписанной программы. (например, MYPROGбаллы 6)

Поскольку это код-гольф, выигрывает самая низкая оценка.


21
Ой, требования к энтропии и уникальности убивают мою идею «буйвола» как записи.
Спарр

4
Я собирался повеселиться в Piet до тех пор, пока «Ваш код не может содержать только печатный ASCII, а также табуляции и перевода строки» :(
Sp3000

3
@ Sp3000 Вы можете поставить почетный ответ. Я хотел бы видеть решение Piet :)
Увлечения Кэлвина

Это единственная ситуация, когда чистота Хаскелла как раз и является проблемой ...
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):Wинтервалы пробела W (изначально W = -1)
=получает слово W
]собирает содержимое стека в массив,
S*присоединяется к массиву, используя пробел в качестве разделителя


Этот язык действительно интересный. Как говорят: «Вы узнаете о новом языке каждый день» ... или что-то в этом роде. Хорошая работа!
Бробин

Принятие этого вместо столь же короткого ответа Денниса, поскольку это было отправлено сначала.
Увлечения Кэлвина

28

Пит (почетный ответ)

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

Змеи пробиваются вниз, выбегая сквозь синий цвет и возвращаясь через зеленый. Распечатывает «Фруктовые мухи как бананы».

Я использовал PietCreator, чтобы сделать это, но вы можете попробовать это здесь . Переработка программ Piet - это боль, поэтому я начал с размера 35x35 и продолжил в том же духе, то есть я использовал гораздо больше кодеков, чем мне было нужно.

Версии фактического размера

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


11

> <> (42)

Рыба действительно величайший питомец. Некоторые люди держат жуков в качестве домашних животных из-за непонятного недостатка логики. Эта программа делает все возможное, чтобы рассуждать с такими людьми.

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

Обратите внимание, что в программе нет завершающего символа новой строки. Полный вывод инвертируется в первой строке; полная фраза "Что может сделать любая ошибка?" (энтропия 3.58418).

Полное объяснение:

Это одна из самых забавных> <> программ, которые я написал, так как это первая, которая использует рефлексию. Первая строка - это то, где находится программа.

!vне работает, поскольку !пропускает следующую инструкцию.

'?od gub yna nac tahW;' хранит полную фразу в стеке (она задом наперед, потому что каждая буква помещается в стек в том порядке, в котором она написана, поэтому ее нужно перевернуть, чтобы она удалялась).

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

Конец !пропускает эту точку с запятой и перемещает курсор на него v, который направляет поток программы вниз.

Начиная с этого момента, это всего лишь процедуры печати. Поскольку нет завершающего символа новой строки, последовательные добавления программы просто добавляют последние две строки, так как первая строка будет справа от voo <и, следовательно, никогда не будет выполнена.

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


Минуту назад это было технически неверно, но я просто изменил спецификацию, чтобы в коде были разрешены переводы строки (и табуляции) (что я и хотел изначально).
Увлечения Кэлвина

О, мой плохой, полностью пропустил то, что относится к источнику, а не только к фразе. Я рад, что это было намерением,> <> программы полагаются на новые строки довольно сильно.
Майк Прекуп

Если вы хотите немного поиграть в эту игру, вы можете использовать фразу с 11 буквами и без повторяющихся символов, например, "It is by a rope."Ваша фраза повторяет символы, поэтому она имеет меньшую энтропию, чем могла бы.
Исаак

Проблема в том, что каждый вывод должен иметь одинаковую длину для правильной печати, так как> <> не может легко обнаружить пробелы. Я не смог найти более короткий.
Майк Прекуп

2
@isaacg Лично я предпочитаю фразу Майка;)
Увлечения Келвина

10

Python 66

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

Энтропия: 3.61635

Ouput:

The fat pig can fly.

Спасибо @JasonS и @grc за советы по сокращению части обнаружения переменных.

Обновление: посмотрите ответ Джейсона за злой трюк с циклическим переворотом, который уменьшил его до 55 байт. :)


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

Обыграй меня! Я собирался использовать i='i'in dir()and i+1. Изменить: правила изменены.
grc

Ну, это еще один -4
Джейсон С

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

9

Питон 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это встроенный Python, который содержит текст, который я хотел бы использовать. Это специальный тип с форматированием, 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. Злой трюк. :) Могу ли я обновить его до моего ответа?
Векторизация

Ну, я использовал вашу середину
Джейсон С

Я сейчас поражаюсь твоему второму ответу. В нем так много трюков.
Векторизация

2
Подскажите, пожалуйста, как работает второй ответ?
Саджас

8

Python 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! Отлично сработано.
Исаак

Вы можете удалить запятую, которая находится в середине вашей программы, чтобы опуститься до 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

Я признаю это, но это должно было быть ххх ххх хх хх хх , без повторяющихся букв. Это единственное предложение, которое я мог придумать, что имело хоть какой-то смысл ...
Деннис

Как насчет "Солнца было хорошо для меня"? Вы также можете заменить «Солнце» другим словом или именем.
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есть' ' .

Второй аргумент, значение, которое должно быть напечатано, генерируется с помощью функции split ( P) для space ( d) и индексации в этот список ( @) в Z.

И, наконец, значение Z, которое автоматически устанавливается в 0, увеличивается на 1 ( ~Z1).


2
Я не мог придумать контекст, в котором эта фаза естественно вписалась бы в ^^
flawr

1
@flawr "Где я жил мяч?" «Это веревкой».
Исаак

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 символа

Я мог бы пойти на более короткую фразу, но почему? Это не будет моим любимым.

(#~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|#\)&.;:когда монадическом, мы были бы установлены

Как вы уже могли догадаться, такое соединение существует и выглядит так :. Monadic 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

Perl, 37

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

Подобно тому, что было у конкурирующих, но с использованием qw в perl, чтобы сохранить еще несколько символов.


1

Длина сообщения Ребму + 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

У Rebol есть 3 основных условия: IF, EITHER и UNLESS. UNLESS эквивалентно IF NOT, но может быть более ясным: «Всегда делайте следующее, ЕСЛИ БЫ это условие не выполняется».

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

Только первая вставка программы назначит последовательность строк S. Последовательные вставки возьмут строку из заголовка серии и передадут ее в PRINT / ONLY, которая напечатает аргумент без добавления перевода строки.

(Примечание: PRINT / ONLY - это рекомендуемый способ замены PRIN, который рассматривается в Rebol 3 и Red; замена печати в настоящее время тестируется в Rebmu.)


1

AHK , 44 байта

i++
Send % SubStr("He is an OK ex",i*3-2,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

Perl, 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))

(Н (Х) = 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.


5 слов должны быть уникальными ...
trichoplax

Поскольку ваш код кажется достаточно универсальным, чтобы иметь дело с любой фразой из 5 слов, я уверен, что вы можете подумать о той, которая имеет требуемую энтропию 3,5 (слишком много двойных букв в этой ...).
Трихоплакс

@githubphagocyte Я надеялся, что вы дадите мне выгоду от округления ;-) Хорошо, !теперь я исправил это с дополнительным - кажется, делает свое дело.
Цифровая травма

0

PHP 89 78 символов

Это немного многословно, и определенно не победит, но все равно было весело. Вот что я придумала

Фраза:

code golf is pretty fun

Энтропия = 3.82791

Код:

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

Golfed:

<?$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

Не видел этого, выложил примерно то же самое с “€í€Ü€…‚¿‹·“хе-хе
Волшебный осьминог Урна


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.