Написать Quine на простом английском


41

Напишите квинну , состоящую из настоящих английских слов, разделенных пробелами. «Слово» определяется как строка, содержащая только строчные и прописные буквы ( /[a-zA-Z]+/в регулярном выражении). Чтобы быть «реальным», ваше слово должно быть признано официальным словарем Scrabble .

Я использую словарь Эрудит, так как он дает четкий ответ о том, что является, а что нет. Слишком много серых областей с обычным словарем. Обратите внимание, что «A» и «I» (не говоря уже о «quine») не являются допустимыми словами скрэббл.

Поскольку написание квинны только с использованием букв и пробелов практически невозможно в большинстве языков программирования, у вас есть возможность заменить одиночные пробелы между словами выбранным вами символом. У вас также есть возможность добавить символы в начале первого слова и в конце последнего слова. Эти добавленные символы могут быть чем угодно (включая символы новой строки и не-ASCII), кроме букв (az, AZ) . Существует штраф за их добавление (см. Оценка).

Детали

  • Как обычно, квины не могут читать или получать доступ к своему исходному коду. (Я бы сказал, что команда Q HQ9 + нарушает это.)
  • Вывод должен идти в стандартный вывод или аналогичную альтернативу. Там нет ввода.
  • Слова не должны быть написаны с заглавной буквы правильно. Они могут иметь заглавные и строчные буквы где угодно. Последовательность слов не должна иметь никакого смысла.
  • Ни одно слово не может быть использовано более 3 раз в вашей программе. Слова с разной заглавной буквой - это одно и то же слово (например, «DOG», «собака» и «dOg» - это одно и то же слово).
  • Использование таких языков, как PHP или HTML, которые могут просто отследить их содержимое, считается тривиальной лазейкой и недопустимо.
  • Программа должна содержать хотя бы одно слово.

счет

Ваша оценка - это количество "реальных слов" в вашей программе плюс эти штрафы:

  • +1 за каждый пробел, который был заменен другим персонажем
  • n n для каждых n символов, которые вы добавили перед первым словом (да, это n в степени n)
  • n n для каждого n символов, которые вы добавили после последнего слова

Например, программа

We all LIKE PROgraMmING

набрал бы 4, потому что он содержит 4 слова; никакие символы не были добавлены или заменены пробелами. Это вывод, конечно, будет We all LIKE PROgraMmING.

Программа

!We@all LIKE#PROgraMmING- =

набрал бы 4 + 2 + 1 + 27 = 34; 4 для слов, 2 для замененных пробелов, 1 для !спереди и 27 для - =в конце. Это вывод, конечно, будет !We@all LIKE#PROgraMmING- =.

Самый низкий балл побеждает. Tiebreaker идет к ответу с наименьшим количеством штрафных очков. Если еще есть ничья, победит ответ с наибольшим количеством голосов.


1
Этот словарь также существует как список? Это было бы гораздо полезнее для просмотра, чем проверка каждого слова в отдельности.
Мартин Эндер

16
Кто-нибудь Шекспир?
Двана


1
@JanDvorak Я так не думаю ... Тот факт, что я не могу написать что-то подобное, не должен заставлять других людей воспринимать это как плохой вопрос, это серьезный, хотя и довольно сложный вызов, не так ли?
rorlork

7
Я все еще заинтересован в решении Шекспира.
Джон Дворак

Ответы:


25

golfscript, 8 слов + 8 символов = 20 16 (3?)

{four"words.written~twice"four}words.written~twice

Слова - просто наполнитель, ядро ​​- крошечное ядро:

{".~"}.~

Дублирует и оценивает функцию, которая просто добавляет инструкции для дублирования и оценивает себя. Когда функция печатается, она автоматически выравнивается. Это самая маленькая сосна, которая что- то делает .

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

{whatever}

Вам не нужно объединение. {a`b"x.y~z"c}x.y~z
Деннис

@ Денис Я даже не нуждаюсь в проверке в этом случае. Благодарность! Я чувствую, что мне нужно что-то спросить у ОП ...
Джон Дворак

8
@Cephalopod Я не читаю свой исходный код. Я просто помещаю функцию в стек, и среда выполнения выводит ее для меня, блаженно не зная о том, что весь мой исходный код является литералом функции.
Джон Дворжак

1
Я думаю, что {whatever}это нарушило бы слишком тривиальное правило («Использование языков, таких как PHP или HTML, которые могут просто отследить их содержимое, считается тривиальной лазейкой и недопустимо».)
Claudiu

1
@Claudiu - это правило против языков, а не решений. Вот почему я спросил.
Джон Дворак

54

> <> , 25 слов + (22 + 1 1 + 1 1 ) дополнительно = 57 49

О боже, мой мозг

'brr3deep*clap6beep+orb5flap*leap4deep+clap5beep5flap*leap9deep9clap*beep+flap0placed apple alp0leap=clip?lob8blip*flip0clip.

Так как в правилах указано «Нет ввода.», Чтобы эта программа работала, вам нужно передать в пустой файл.

Ах да, brrэто правильное слово Эрудит, как tsktskи pfft.

объяснение

Прежде всего, следующие слова не имеют отношения к делу:

deep clap beep flap leap clip blip flip

Это из-за двух причин:

  • abcdeflнажмите цифры (10, 11, 12, 13, 14, 15 и длину стека соответственно). Кроме того, iнажимает -1, если EOF встречается, видя, что нет ввода.
  • Команда pвыскакивает три символа v,y,xи места vна позиции x,y.

Да,> <> позволяет изменять исходный код на лету! Мы на самом деле не используем это, так как нам нужно только pдля сования.

Если мы избавимся от этих запретов, мы получим:

'brr3*6+orb5*4+55*99*+0placed apple alp0=?lob8*0.

Аналогичным образом, laced appчасть placed appleи e alpчасть apple alpтакже являются no-ops, а the rrof brrпросто дважды обращает стек, который мы также можем удалить:

'b3*6+orb5*4+55*99*+0pl0=?lob8*0.

Наконец, что-то похожее на обычную> <> программу! Идея состоит в том, чтобы использовать стандартную> <> quine, которая работает так:

  • Начальная 'строка запускает разбор строки, толкая каждый встреченный символ, пока мы не нажмем'
  • Мы продолжаем толкать символы до конца строки, после чего мы переносим указатель инструкций обратно на начало (так как> <> является тороидальным)
  • Мы 'снова приземляемся на начальное и прекращаем разбор строки. В результате мы поместили каждый символ в программе (кроме начального ') в стек.

Затем происходит следующее:

b3*6+o                Print the initial ' quote (ASCII 39)
r                     Reverse the stack
b5*4+                 Push a ';' (ASCII 59)
55*99*+0p             Replace the 'l' of 'lob' with ';'

(print loop)
l0=?;                 If the stack is empty, terminate. Otherwise...
o                     Print the top of the stack
b8*0.                 Jump back to the beginning of the loop

«Ни одно слово не может использоваться более 3 раз в вашей программе. Слова с разной заглавной буквой - это одно и то же слово (например,« DOG »,« собака »и« dOg »- это одно и то же слово).» В любом случае, вы получите от меня возражение, сэр.
rorlork

@rcrmn Я продолжал добавлять так много слов, что полностью забыл об этом правиле! Исправлено сейчас, хотя я хотел избежать использования i.
Sp3000

1
TIL «pa», «la» и «be» являются допустимыми словами в «Эрудит»
Джон Дворак

20
Чтение вашей программы вслух заставляет меня представить, как должны звучать компьютеры с перфокартами.
Увлечения Кэлвина

10
Я думаю, что вы украли эту программу из источника операционной системы R2D2.
перестал поворачиваться против часовой стрелки с

21

Цыпленок , 1 слово

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

chicken

Толкает 1 курицу в стек. Стек затем отображается.


1
Эта (и юлийский ответ) граница тривиально недействительна. Вы можете оставить их здесь, но без обещаний принять.
Увлечения Кэлвина

@ Calvin'sHobbies В интересах справедливости я с удовольствием удалю это, если вы считаете, что это слишком лазейка - Ваш звонок. Я работал над решением appleScript, но был разочарован правилом «Ни одно слово не может быть использовано более 3 раз», которое, кажется, делает это особенно трудным. Так что вместо этого я выбрал дешевый трюк :-)
Digital Trauma

@ Calvin'sHobbies: я автор представления Юлии. Я так же настроен на DigitalTrauma по удалению моего поста, если вы чувствуете, что он слишком пограничный. Я тоже сделал R. Это тоже слишком близко?
Алекс А.

@ Алекс и ДТ: Вам решать, ребята. Я, вероятно, не приму ни одного ответа, но я не против, чтобы они были здесь. Я все еще немного разочарован в ответе R, хотя идея почти такая же, как и у Юлии ...
Увлечения Келвина

12

R, 2 слова + 1 замена + 1¹ трейлинг = 4

Объекты, которые ни к чему не привязаны, просто выводятся на стандартный вывод. Поскольку выражение является объектом, следующий код печатает сам себя:

expression(puppy)

Предыдущее представление, 5 баллов:

function(hello)hello

Вы были вдохновлены моим обманчивым решением из трех пунктов, не так ли? ;-)
Джон Дворак

1
@JanDvorak: Я действительно не видел этого, прежде чем опубликовать это, но теперь это ретроспективный источник вдохновения.
Алекс А.

12

Python 2, 58 = 37 слов + 21 знак препинания

programming=puzzle=hash and'fear=coerce and"programming=puzzle=hash and%rif reload else fire;exec prog"or English;ramming=None or"ramming"if license else pirate;print fear%puzzle+ramming'if reload else fire;exec programming

Добавлены некоторые новые строки:

programming=puzzle=hash and'fear=coerce and"programming=puzzle=hash
and%rif reload else fire;exec prog"or English;ramming=None or
"ramming"if license else pirate;print fear%puzzle+ramming'
if reload else fire;exec programming

Три варианта использования для каждого слова сделали его трудным для написания. Я хотел использовать строку со всем кодом более 3 раз, и каждая строка должна была быть изолирована if else and orоператорами, которых у меня было только ограниченное количество.


@ user23013 Ой, забыл заменить его случайным идентификатором.
Feersum

7

Юлия, 1 слово + 1¹ перед = 2

У Юлии есть объекты, называемые символами, которые определены с помощью предыдущего :. Как и мое решение R, оно просто печатается при отправке.

:puppy

5

Командная строка DOS, 10

& was unexpected at this time.

Ошибка квин, не забанят похоже


1
Этот код не «кодирует» какую-либо часть кода. Смотрите наше определение для Quine
MilkyWay90

@ MilkyWay90 Использование определения &кодирует весь код и прекращает вывод
l4m2

О, вы можете отредактировать ответ, чтобы я мог удалить свое пониженное голосование
MilkyWay90

1
Интересный лазейка, ответ ... &это слово, правда?
Программы Redwolf

@RedwolfПрограммы нет, но & это два символа. 5 (слова) + 1 (трейлинг) + 2 ^ 2 в
начале

3

Рунические чары , счет 4 + 3 + 1 1 +1 1 = 9

"hOt3OX4NOt+kNOt@

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

Слова: hot ox not knot(4)
Замены: 3 4 +(3)
До: "(1)
После: @(1)

Все символы GNOQWghtxzв руническом режиме недоступны (а также пробел и точка, но больше пробелов не помогает в оценке). Включая Xи kнеобходимые для функциональности, это дает следующий доступный список слов:

5 Letter Word(s)
  thong
4 Letter Word(s)
  gong goth gowk gown hogg hong honk howk knot know nogg nowt tong town wonk wont zonk
3 Letter Word(s)
  got gox hog hon hot how nog noh not now nth own tho tog ton tow two who wok won wot
2 Letter Word(s)
  go ho no oh on ow ox to wo

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

Удаление всех символов NOP дает следующий quine:

"3X4+k@

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


0

да? - 1 слово + 1 ** 1/1 ^ 1 = 1 символ после слова = 2 общего балла.

Ouch!

Ouch! является действительным Quine в да?

Запустите его как pythuhn.py Ouch!, и Ouch!в текущем каталоге не может быть файла с именем .

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