Более простая связь означает более быстрое кодирование означает, что меньше кодировщиков означает…


28

Мой отец, который был действительно хорошим APLer и научил меня всем основам APL (и многому другому ), скончался в этот день, пять лет назад. При подготовке к 50-летию APL я нашел это патентное письмо (переведенное для удобства тех, кто не читает по-датски) для рукописного логотипа. Это объясняет основную причину того, что APL никогда не набирает большую пользовательскую базу - причина, которая, конечно, относится и ко всем удивительным языкам игры этого сообщества:


A 3497/77 Треб. 29 - го августа 1977 года на 13

ЛЕГКИЕ СРЕДСТВА СВЯЗИ БЫСТРОЕ КОДИРОВАНИЕ СРЕДСТВА МЕНЬШЕ КОДЕРОВ СРЕДСТВА…

Анри Брудзевски, инженерно-консалтинговая компания, Mindevej 28, Søborg,

класс 9 , включая компьютеры, особенно компьютеры с кодировкой APL,
класс 42: компания, предоставляющая услуги в сфере ИТ, особенно при использовании компьютеров с кодировкой APL.


задача

Произведите бесконечно повторяющийся вывод текста EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS без перевода строки. Вы можете начать текст с EASIERили FASTERили FEWER.


Я неправильно истолковал ваш вызов, и я сделал i.imgur.com/qKnTj3q.png !
sergiol

@sergiol Почти действительно здесь .
Адам

Ссылка на патентное письмо мертва.
pppery

@pppery Спасибо. Обновлено.
Адам

Ответы:


14

05AB1E , 25 байтов

[‘æƒËRSˆ¾¥ƒŽÁˆ¾¡ŸÂ ‘?

Попробуйте онлайн!

Объяснение:

[‘æƒËRSˆ¾¥ƒŽÁˆ¾¡ŸÂ ‘?
[                         Start infinite loop
 ‘æƒËRSˆ¾¥ƒŽÁˆ¾¡ŸÂ ‘   Push the compressed string in uppercase, starting from FEWER, with a trailing space
                        ?  Print without trailing newline

13
Честно говоря, я не понимаю, почему решения Python получают объяснения, а это нет. Что в мире здесь происходит?
nluigi

3
@nluigi черная магия
Ник Робертсон,

2
Физически невозможно узнать, что здесь происходит, если вы не знаете язык, не могли бы вы дать объяснение, пожалуйста.
Джордж Уиллкокс,

1
@nluigi [означает «начало бесконечного цикла», ‘æƒËRSˆ¾¥ƒŽÁˆ¾¡ŸÂ ‘является сжатой версией EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS и ?означает печать без перевода строки.
Okx

1
@Leo Это очень мало объяснено. Сначала вы идете в этот файл. Справа от некоторых расширенных символов вы можете увидеть число. Если это однозначное число, pad с начальным нулем. Два таких символа образуют четырехзначное число с возможными ведущими нулями. Затем это число используется как нулевой индекс для этого словаря. Поведение каждого слова зависит от кавычек, которые вы можете найти в первом файле, с которым я связался, выполнив поиск compressed.
Эрик Outgolfer

41

SVG (HTML5), 336 байт

<svg width=500 height=500><defs><path id=p d=M49,250a201,201,0,0,1,402,0a201,201,0,0,1,-402,0></defs><text font-size="32"><textPath xlink:href=#p>EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS</textPath><animateTransform attributeName=transform type=rotate from=360,250,250 to=0,250,250 dur=9s repeatCount=indefinite>

Изменить: Некоторые люди обнаружили, что шрифт не совсем подходит для них, поэтому вот версия, которая позволяет вам несколько пикселей регулировки:

<p><input type=number value=0 min=0 max=9 oninput=p.setAttribute('d','M250,250m20_,0a20_,20_,0,1,1,-20_,-20_a20_,20_,0,1,1,-20_,20_a20_,20_,0,1,1,20_,20_a20_,20_,0,1,1,20_,-20_'.replace(/_/g,this.value))></p>
<svg width=500 height=500><defs><path id=p d=M250,250m200,0a200,200,0,1,1,-200,-200a200,200,0,1,1,-200,200a200,200,0,1,1,200,200a200,200,0,1,1,200,-200></defs><text font-size="32"><textPath xlink:href=#p>EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS</textPath><animateTransform attributeName=transform type=rotate from=360,250,250 to=0,250,250 dur=9s repeatCount=indefinite>


Это красиво, но вы можете сделать это наизнанку (верх буквы из круга) и все в верхнем регистре?
Адам

@ Adám Как это? Мне пришлось немного подправить размеры, но это тот же счетчик байтов.
Нил

1
@ Адам, ты должен; это то, что я думал, что это вызов будет, когда я впервые прочитал его.
Лохматый

8
В MEANSEASIER отсутствует пробел, который присутствует между другими словами.
ShreevatsaR

1
@ShreevatsaR Я добавил вторую версию, которая включает в себя текстовое поле для небольших корректировок, может быть, это поможет.
Нил

13

PHP, 76 байт

for(;;)echo strtr(EASI0MMUNICATION1FAST0DING1FEW0DERS1,["ER CO"," MEANS "]);

Попробуйте онлайн!


4
Только в PHP ....
user253751

@immibis Что ты имеешь в виду?
Йорг Хюльсерманн

Я имею в виду, что вам удалось продемонстрировать как минимум 3 «причуды проектирования» PHP в одной строке кода. Эта строка кода является иллюстрацией того, почему PHP считается вредным.
user253751

1
@immibis "mimimi не нравится php" Думал, что мы прошли эту точку в течение десятилетия. :-)
Жолт Силаги

4
@ Arc676 Во-первых, имя без знака доллара считается константой. Во-вторых, неопределенная константа считается самой строкой. Так что в этом коде EASI0MMUNICATION1FAST0DING1FEW0DERS1трактуется как строка "EASI0MMUNICATION1FAST0DING1FEW0DERS1". В-третьих, strtrожидается ассоциативный массив («карта» или «словарь» на других языках), но этот код передается в обычном массиве, поэтому он обрабатывает регулярный массив как ассоциативный массив с ключами 0 и 1. Наконец, эти целые числа 0 и 1 обрабатываются как строки, "0"и, "1"как вы уже догадались, функции нужны строки.
Волновой режим

11

Vim 69 байт

qqAFEWER CODERS MEANS EASIER COMMUNICATION M<C-n> FASTER CODING M<C-n> <esc>@qq@q

Я просто обожаю, когда простая последовательность команд Vim создает достойное решение для игры в гольф. :-D
DevSolar

7

HTML, 122 байта.

Извините, не могу с собой поделать.

<marquee style="width:5em;word-spacing:5em;">EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS </marquee>


почему огромный интервал между словами?
Адам

@ Adám Потому что выделение всегда оставляет это количество ширины между итерациями (то есть свою собственную ширину). И я не мог найти способ свернуть это, поэтому мне пришлось импровизировать и помещать одинаковое количество пространства между каждым словом.
мистер Листер

Вы не можете удалить конечный тег?
NoOneIsHere

@NoOneIsHere Как это поможет? Или вы имели в виду, что это уменьшит его на 10 байтов? Я не уверен, что хочу сделать это; конечный тег на самом деле не является обязательным.
мистер Листер

@MrLister Я имел в виду это гольф. Я думал, что HTML-документам с одним тегом не нужен конечный тег.
NoOneIsHere

6

Python 2 , 82 81 байт

-1 байт благодаря Leaky Nun.

Я, наверное, что-то делаю не так, но уже очень поздно Обратите внимание на запятую.

while 1:print'FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS',

Попробуйте онлайн!

Другое решение, 85 байт

Я, вероятно, могу сыграть в гольф дальше.

while 1:print'%sER CO%s MEANS'*3%('FEW','DERS',' EASI','MMUNICATION',' FAST','DING'),

Попробуйте онлайн!


1
Вы можете удалить второй пробел.
Утренняя монахиня

@LeakyNun Как я пропустил это? o0 Спасибо!
полностью человек

Во втором вы можете переместить пробелы в строку формата.
wizzwizz4

@ wizzwizz4 Запрещены ведущие пробелы.
полностью человек

2
@totallyhuman В настоящее время у вас есть ошибка, из-за которой выводится сообщение «FEWER CODERS MEANSEASIER COMMUNICATION MEANSFASTER CODING MEANSFEWER ...». Если вы измените форматную строку на '%sER CO%s MEANS 'и удалите пробелы из элементов формата, она будет играть лучше и работать правильно.
wizzwizz4

5

Желе , 33 29 байт

4 байта благодаря Эрику Аутгольферу.

“©%5ÐƬwȮh¬Þ6.⁷ḷḊḥṫɠlḶṀġß»Œu⁶¢

Попробуйте онлайн!


1) Вы можете использовать лучше сжатую строку: “©%5ÐƬwȮh¬Þ6.⁷ḷḊḥṫɠlḶṀġß»(все еще нужно использовать Œuи ;⁶) 2) Вы можете использовать ßвместо 1¿.
Эрик Outgolfer


4

HTML / CSS (только Firefox), 179 177 183 176 173 байта

<b id=a>EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS </b>E<a><style>*{margin:0;}a{position:fixed;left:0;right:0;height:1em;background:-moz-element(#a)}

Конечно, далеко не самые низкие оценки, я просто подумал, что было бы интересно получить бесконечное повторение в HTML / CSS без участия JS :)

Changelog:

  • Удалены кавычки вокруг атрибута id
  • добавлен «круглый» фон-повтор, чтобы растянуть текст, чтобы он правильно переносился
  • изменен на однострочный вывод
  • заменить width:100%стиль, right:0чтобы сохранить 3 байта

Хорошая попытка, но она начинается с каждой строки. ОП: без перевода строки.
Адам

Любой из ответов, которые печатаются в терминале, будет перенесен в конец строки. Попробуйте уменьшить масштаб; вы также увидите, что он продолжается вечно по горизонтали, он просто «скрыт» окном браузера.
user371366

Кроме того, я потратил несколько байтов на повторяющееся изображение, чтобы оно было более убедительным, надеюсь, это поможет
user371366

Упаковка - это хорошо, а твоя - нет. Это можно рассматривать как «печать» бесконечного множества бесконечных линий. Просто ограничьте фон одной строкой.
Адам

1
да. Я думал, что я должен был бы поставить repeat no-repeatили ; background-repeat: repeat-x, но понял, как этого избежать. Оказывается, подчиняясь спецификации экономит байты!
user371366

3

Python 3 , 87 байт

while 1:print(end="FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS ")

Попробуйте онлайн!


Что делает end=?
Адам

@ Adám Позволяет печатать без завершающей строки.
Эрик Outgolfer

3
@ Adám Аргументы по умолчанию для printявляются print("",end="\n").
Утренняя монахиня

Я думал, что замена ER COи MEANS(ведущий + конечный пробел) сэкономит несколько байтов, но, видимо, нет.
Эрик Outgolfer


3

LOLCODE , 116 байтов

HAI 1
IM IN YR O
VISIBLE "FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS "!
IM OUTTA YR O
KTHXBYE

Попробуйте онлайн!


Я не знаком с LOLCODE. Как этот вывод навсегда?
Esolanging Fruit

@ Challenger5 IM IN YR ...и IM OUTTA YR ...образуют бесконечный цикл.
Дрянная Монахиня

1
Вы можете удалить HAI и KTHXBYE, поскольку компиляторы не требуют их. Кроме того, нет восклицательного знака в конце VISIBLE.
OldBunny2800

@ OldBunny2800 Какую версию LOLCODE вы используете? В этой версии задний конец !подавляет возврат каретки после печати.
Arc676

О, я забыл о правиле без разрыва строки. Я не знал, что у ЛОЛКОДА есть способ сделать это!
OldBunny2800

3

Рубин, 77 байт

присвоение " MEANS "переменной сохраняло всего 1 байт :-)

loop{$><<"EASIER COMMUNICATION#{m=" MEANS "}FASTER CODING#{m}FEWER CODERS"+m}

3

JavaScript (ES6), 90 87 байт

while(1)console.log`EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS `

Функциональная альтернатива, 100 байт

«Функционирование» здесь означает «не сломает ваш браузер» (по крайней мере, на некоторое время)!

setInterval(_=>console.log`EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS `,1)

1
Ваш код не работает: document.write`EASIER COMMUNICATION${m=" MEANS "}FASTER CODING${m}FEWER CODERS`+mэквивалентно тому document.write([ 'EASIER COMMUNICATION', 'FASTER CODING', 'FEWER CODERS' ], ' MEANS ', ' MEANS ') + ' MEANS ', который 1) преобразует все аргументы в строки и объединяет (печатает EASIER COMMUNICATION,FASTER CODING,FEWER CODERS MEANS MEANS ), и 2) не будет включать последние в ' MEANS 'любом случае, поскольку он находится вне вызова функции ...
Frxstrem


2

Октава, 86 байт

while fprintf('FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS ')end

Объяснение:

Это довольно очевидно. Единственная настоящая «хитрость» здесь заключается в использовании while fprintf. Когда fprintfзадан аргумент возврата, он вернет количество напечатанных символов, и все ненулевые числа будут учтены trueв октаве, поэтому условие цикла всегда будет истинным.


Я отчаянно пытался сделать более интересный подход более коротким, но, к сожалению, он оказался на 9 байт длиннее:

while fprintf('FEW%sDERS%sEASI%sMMUNICATION%sFAST%sDING%s',{'ER CO',' MEANS '}{'ababab'-96})end

Это пытается вставить строки 'ER CO'и ' MEANS'в строку в правильных местах, используя прямое индексирование, где 'ababab'-96более короткая версия [1 2 1 2 1 2].

Это было немного короче (93 байта), но все же дольше, чем наивный подход

while fprintf('FEWER CODERS%sEASIER COMMUNICATION%sFASTER CODING%s',{' MEANS '}{[1,1,1]})end

И еще один (89 байт), используя подход Level River St:

while fprintf(['FEWER CODERS',s=' MEANS ','EASIER COMMUNIDATION',s,'FASTER CODING',s])end

Это должно работать теоретически, на один байт меньше, чем исходное решение, но по какой-то странной причине это не получается:

while fprintf"FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS "
end

Это использует ошибочную функцию, которая fprintf('abc def')эквивалентна fprintf"abc def". endДолжно быть на следующей строке, но это еще один байт короче поскольку две скобки пропускаются.

И еще один за 87:

while fprintf('FEWER CODERS%sEASIER COMMUNICATION%sFASTER CODING%s',k=' MEANS ',k,k)end

Ну, не говори, что я не пробовал :)


Вы знаете, что fprintfперераспределяет аргументы правильно? Ваша последняя версия может быть на 6 байт меньше, попробуйте онлайн!
Санчиз

2

Алиса , 70 байт

" SNAEM "k"SREDOC REWEF"e0j"GNIDOC RETSAF"e0j"NOITACINUMMOC REISAE"d&o

Попробуйте онлайн!

объяснение

К сожалению, повторное использование MEANS(с пробелами) экономит только один байт по сравнению с простой печатью всего за один раз. Следовательно, извлечение ER COфактически будет стоить байт (или, возможно, дороже, потому что извлечение другого раздела будет немного дороже).

" SNAEM "                Push the code points of " MEANS " in reverse.
k                        If there is a return address on the return address stack (which
                         there isn't right now), pop it and jump there.
"SREDOC REWEF"           Push the code points of "FEWER CODERS" in reverse.
e0j                      Jump to the beginning of the line, pushing the location of the
                         j to the return address stack. Hence, we push the code points
                         of " MEANS " again, but then the k pops the return address and
                         jumps back here.
"GNIDOC RETSAF"          Push the code points of "FASTER CODING" in reverse.
e0j                      Jump to the beginning of the line again.
"NOITACINUMMOC REISAE"   Push the code points of "EASIER COMMUNICATION" in reverse.
d                        Push the stack depth.
&o                       Print that many bytes from the top of the stack.
                         Afterwards the IP wraps around to the first column and the
                         program starts over.

2

C #, 102 байта

_=>{for(;;)System.Console.Write("EASIER COMMUNICATION{0}FASTER CODING{0}FEWER CODERS{0}"," MEANS ");};



1

Java (OpenJDK 9) , 114 байт

static void f(){while(1>0)System.out.print("FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS ");}

Попробуйте онлайн! Остановите выполнение через несколько секунд, потому что он не знает, когда остановиться.


Материалы должны быть полными программами или функциями.
Критиси Литос

@ KritixiLithos Это может быть анонимная лямбда?
полностью человек

@totallyhuman Да. На других языках это разрешено; Я не понимаю, почему Java должна быть исключением.
wizzwizz4

Зачем останавливать казнь? Просто снимите флажок отключить кэш вывода .
Адам

3
Но вы можете сделатьfor(;;)
Брайан МакКатчон

1

C 86 байтов

f(){printf("FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS ");f();}

Посмотрите, как это работает онлайн .


Это зависит от того, выполняет ли компилятор оптимизацию хвостового вызова, но, думаю, большинство так и делает.
Уэйн Конрад

@WayneConrad Это правильный ответ без этой оптимизации. Бесконечная рекурсия удовлетворяет требованию: производить бесконечно повторяющиеся выходные данные
2501

Без оптимизации хвостового вызова стек в конечном итоге переполнится. Попробуйте скомпилировать его gcc(используйте параметры по умолчанию, так что оптимизация вызовов не требуется), и при запуске перенаправьте вывод в / dev / null, чтобы ускорить процесс. Это вызовет ошибку. С опцией '-O2', которая позволяет оптимизировать хвостовой вызов, он работает всегда, как и предполагалось.
Уэйн Конрад

@WayneConrad Бесконечная рекурсия концептуально, бесконечна. Вопрос не ограничивается практическим определением бесконечности. По общему согласию, бесконечная рекурсия бесконечно повторяется, иными словами, никакая логика в программе не остановит это ..
2501

Я не заявляю, что ваше решение недействительно. Все, что я хотел отметить, - это то, что для правильной работы требуется небольшое сотрудничество от компилятора.
Уэйн Конрад



1

MATL , 68 байт

`'EASIER COMMUNICATION*FASTER CODING*FEWER CODERS*'42' MEANS 'Zt&YDT

Попробуйте онлайн!

объяснение

`                                                     % Do...while
  'EASIER COMMUNICATION*FASTER CODING*FEWER CODERS*'  %   Push this string
  42                                                  %   Push 42 (ASCII for '*')
  ' MEANS '                                           %   Push this string  
  Zt                                                  %   String replacement
  &YD                                                 %   printf to STDOUT
  T                                                   %   Push true as loop condition
                                                      % End (implicit)

1

Аксиома, 92 89 байт

repeat fortranLiteral"EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS "

вставить в одну строку в окно Аксиома. Возможно, есть одна функция короче "fortranLiteral", которая не записывает "\ n"


1

Braingolf , 78 байт

"FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS "[!@66<1+>]

или

Braingolf , 77 байт [не конкурирует]

"FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS "[!&@<1+>]

Этот неконкурентоспособен, так как мне пришлось исправить 2 ошибки, касающиеся использования жадного модификатора ( &) с оператором char print ( @)


1

Пустой , 267 байт

[70][69][87][69][82][32][67][79][68][69][82][83][32][77][69][65][78][83][32][69][65][83][73][69][82][32][67][79][77][77][85][78][73][67][65][84][73][79][78][32][77][69][65][78][83][32][70][65][83][84][69][82][32][67][79][68][73][78][71][32][77][69][65][78][83][32]{p}

Вставляет FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANSв стек, затем печатает его. Никогда не заканчивается как нет{@}

Также забавный факт, я использовал следующий скрипт Braingolf для генерации этого кода

"FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS "l>[<$_<91+2^9-@_ 91+2^7-@l>]"{p}"@3

1

Groovy 79 байтов

m=" MEANS";for(;;)print"EASIER COMMUNICATION$m FASTER CODING$m FEWER CODERS$m "

Использует шпунтовую интерполяцию Groovy.


1

PowerShell , 100 97 байт

for(){"EASIER COMMUNICATION","FASTER CODING","FEWER CODERS"|%{Write-Host -NoNewLine "$_ MEANS "}}

Попробуйте онлайн!


Старый ответ:

PowerShell , 100 байт

while(1){"EASIER COMMUNICATION","FASTER CODING","FEWER CODERS"|%{Write-Host -NoNewLine "$_ MEANS "}}

Попробуйте онлайн!

PowerShell немного сложен для этого, потому что большинство достойных способов вывода на консоль также вставляют новую строку. Write-Hostтребуется из-за этого. Однако это все еще демонстрирует, как конвейерная обработка может сократить объем кода.

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

Изменить: сбрил 3 байта, изменив whileцикл наfor цикл.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.