Простіше спілкування означає швидше кодування означає менше кодерів означає…


28

Мій батько, який був справді хорошим APLer і навчив мене всім основ APL (та багато іншого), помер у цей день, п'ять років тому. Готуючись до 50 років APL , я знайшов цей патентний лист (перекладений для зручності тих, хто не читає датську мову) для рукописного логотипу. Це пояснює головну причину того, що APL ніколи не отримує велику базу користувачів - причина, яка, звичайно, стосується і всіх дивовижних мов для гри в гольф цієї громади:


А 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 Майже діє тут .
Adám

Посилання на патентний лист мертве.
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 black magic
Нік Робертсон

2
Фізично неможливо дізнатися, що відбувається тут, якщо ви не знаєте мови, ви б не могли дати пояснення, будь ласка.
Джордж Віллок

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

1
@Leo Це недостатньо пояснено. Спочатку ви переходите до цього файлу. Праворуч від деяких розширених символів ви можете побачити число. Якщо це однозначна цифра, накладіть провідний нуль. Дві такі символи утворюють чотиризначне число з можливими провідними нулями. Потім це число використовується як нульовий індекс цього словника. Потім поведінка кожного слова залежить від лапок, які ви можете знайти в першому файлі, який я пов’язав, шукаючи compressed.
Ерік Атголфер

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
@ Adám, ти повинен; ось що я вважав, що це виклик буде, коли я вперше прочитав його.
Кудлатий

8
У "MEANSEASIER" відсутній пробіл, який присутній між іншими словами.
ShreevatsaR

1
@ShreevatsaR Я додав другу версію, яка включає текстове поле для невеликих коригувань, можливо, це допомагає.
Ніл

13

PHP, 76 байт

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

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


4
Тільки в PHP ....
користувач253751

@immibis Що ти маєш на увазі?
Йорг Гюльсерманн

Я маю на увазі, що вам вдалося продемонструвати принаймні 3 PHP "дизайнерські вигадки" в одному рядку коду. Цей рядок коду є ілюстрацією того, чому PHP вважається шкідливим.
користувач253751

1
@immibis "mimimi не любить php" Думав, що ми минули цю точку, як декада. :-)
Zsolt Szilagy

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

@ 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
Ви можете видалити другий пробіл.
Leaky Nun

@LeakyNun Як я це пропустив? o0 Дякую!
повністюлюдсько

У другому можна перемістити пробіли у рядку формату.
wizzwizz4

@ wizzwizz4 Провідна пробіл заборонена.
повністюлюдсько

2
@totallyhuman На даний момент у вас є помилка, де вона видаватиме "РІШКІ КОДИ ОЗНАЧЕННЯ ЗНАЧЕННЯ, ЗНАЧЕННЯ КОМАНІКАЦІЙНОГО МАНСФЕСТЕРУ ...". Якщо ви зміните рядок формату на '%sER CO%s MEANS 'та вилучите пробіли з елементів формату, він буде гольфіст і працювати належним чином.
wizzwizz4

5

Желе , 33 29 байт

4 байти завдяки Еріку Переможнику.

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

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


1) Ви можете використовувати кращу стиснуту рядок: “©%5ÐƬwȮh¬Þ6.⁷ḷḊḥṫɠlḶṀġß»(все-таки потрібно використовувати Œuі ;⁶) 2) Ви можете використовувати ßзамість 1¿.
Ерік Аутгольфер


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 :)

Журнал змін:

  • Видалені лапки навколо атрибута id
  • додано "круглий" фон - повторіть, щоб розтягнути текст, щоб він правильно перегортався
  • змінено на однолінійний вихід
  • замініть width:100%стиль, right:0щоб зберегти 3 байти

Приємна спроба, але це починається на кожному рядку. ОП: без нових рядків.
Адам

Будь-яка відповідь, яка надрукується до терміналу, буде завершена в кінці рядка. Спробуйте зменшити масштаб; ви побачите, що це продовжується і назавжди горизонтально, він просто "схований" у вікні браузера.
користувач371366

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

Обертання добре, але ваше - ні. Це можна було розглядати як "друк" нескінченно багатьох нескінченних ліній. Просто обмежте фон однією лінією.
Адам

1
так. я думав, що мені доведеться поставити repeat no-repeatабо ; background-repeat: repeat-x, але придумав, як цього уникнути. Виявляється, підкоряючись специфікації, економить байти!
користувач371366

3

Python 3 , 87 байт

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

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


Що робить end=?
Адам

@ Adám Це дозволяє друкувати без зворотного нового рядка.
Ерік Аутгольфер

3
@ Adám Типовими аргументами printє print("",end="\n").
Leaky Nun

Я думав, що заміна ER COта MEANS(провідний + простір) врятують деякі байти, але, мабуть, ні.
Ерік Аутгольфер


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

О, я забув про правило без перерви. Я не розумів, що LOLCODE має спосіб це зробити!
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 '
одно


2

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

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

Пояснення:

Це досить зрозуміло. Єдиний справжній "трюк" тут - використовувати while fprintf. Коли йому fprintfбуде надано аргумент повернення, він поверне кількість друкованих символів, і всі ненульові числа будуть врахованіtrue в Octave, тому умова циклу завжди буде істинною.


Я відчайдушно намагався зробити цікавіший підхід коротшим, але, на жаль, виявилося на 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". TheendПовинно бути на наступному рядку, але це ще один байт коротше оскільки дві дужки пропускаються.

І ще один на 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 ");}

Спробуйте в Інтернеті! Припиніть виконання через кілька секунд, оскільки він не знає, коли його зупинити.


Подання повинні бути повноцінними програмами або функціями.
Kritixi Lithos

@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.