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


41

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

Я використовую словник Scrabble, оскільки він дає остаточну відповідь на те, що є, а що не дійсно. Занадто багато сірих областей із звичайним словником. Зауважте, що "A" та "I" (не кажучи вже про "quine") не є дійсними скребльованими словами.

Оскільки писати квінку лише за допомогою букв і пробілів майже неможливо в більшості мов програмування, у вас є можливість замінити окремі пробіли між словами на обраний вами символ. Також у вас є можливість додати символи до передньої частини першого слова та до кінця останнього слова. Ці додані символи можуть бути будь-якими (включаючи нові рядки та не-ASCII), крім букв (az, AZ) . Існує штраф за їх додавання (див. Рахунок).

Деталі

  • Як завжди, лайки можуть не читати або отримувати доступ до власного вихідного коду. (Я б сказав, що команда Q HQ9 + порушує це.)
  • Вихід повинен переходити до stdout або подібної альтернативи. Введення немає.
  • Не потрібно правильно писати великі літери. Вони можуть мати шапки та малі регістри в будь-якому місці. Послідовність слів не потребує жодного сенсу.
  • Жодне слово не може вживатися більше ніж 3 рази у вашій програмі. Слова з великої літери - це все те саме слово (наприклад, "DOG", "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- =.

Виграє найнижчий бал. Тібрейкер переходить до відповіді з найменшими штрафними балами. Якщо все-таки є нічия, виграє найвища відповідь.


1
Чи існує цей словник і як список? Це було б набагато корисніше переглядати, ніж потрібно перевіряти кожне слово окремо.
Мартін Ендер

16
Хтось Шекспір?
dwana


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

7
Мені все ще цікаво рішення Шекспіра.
Джон Дворак

Відповіді:


25

гольфскрипт, 8 слів + 8 символів = 20 16 (3?)

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

Слова є лише наповнювачем, ядро ​​- це крихітне ядро ​​квітки:

{".~"}.~

Дублює та оцінює функцію, яка просто додає інструкції для дублювання та оцінки самої себе. Коли функція надрукована, вона буде автоматизована автоматично. Це найменша квітка, яка щось робить .

Або ми можемо просто використовувати функціональний буквал, який ніколи не оцінюється. Але таке відчуття, як обман ...

{whatever}

Вам не потрібно конкатенація. {a`b"x.y~z"c}x.y~z
Денніс

@Dennis Мені навіть інспекція не потрібна. Дякую! Мені здається, мені потрібно щось запитати в ОП ...
Джон Дворак

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

1
Я думаю, що {whatever}це порушило б надто тривіальне правило ("Використання таких мов, як PHP чи HTML, які можуть просто вивести їх вміст, вважається тривіальною лазівкою і заборонено")
Клавді

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це дійсне слово Scrabble, як 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також немає-OPS, і rrз 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 "і" dOg "- це одне і те ж слово)." У будь-якому випадку ви отримаєте привід від мене, сер.
rorlork

@rcrmn Я продовжував додавати стільки слів, що повністю забув про це правило! Виправлено зараз, хоча я не хотів уникати використання i.
Sp3000

1
TIL "pa", "la" та "be" є дійсними словами у Scrabble
Джон Дворак

20
Читання вашої програми вголос змушує мене уявити, як повинні звучати комп’ютери перфокарт.
Захоплення Кальвіна

10
Я думаю, ви вкрали цю програму з джерела операційної системи R2D2.
перестала повертати зустрічну годинник,

21

Курка , 1 слово

Я зазвичай не переймаюся езолангами, але цей здався ідеальним для цього. Я думаю, що це справжня королева:

chicken

Притискаємо до купки 1 курку. Потім виводиться стек.


1
Це (і відповідь Юлії) межує з тривіально недійсним. Ви можете зберегти їх тут, але жодних обіцянок щодо прийняття.
Захоплення Кальвіна

@ Calvin'sHobbies В інтересах справедливості я з радістю видалю це, якщо ви вважаєте, що це занадто лазівка ​​- Ваш дзвінок. Я працював над рішенням яблучного сценарію, але мене розчарувало правило "Жодне слово не можна використовувати більше 3 разів", яке, здається, робить це особливо важким. Тож я замість цього пішов на дешевий трюк :-)
Digital Trauma

@ Calvin'sHobbies: Я автор подання про Джулію. Я налаштовую на думку DigitalTrauma про видалення своєї посади, якщо ви вважаєте, що це занадто обмежено. Я також зробив Р. Це теж занадто близько?
Олексій А.

@Alex та DT: Ви, хлопці, вирішуєте. Я, мабуть, не прийму жодної відповіді, але не заперечую, щоб вони були тут. Я все ще ніби розірваний на відповідь R, хоча ідея майже така ж, як і Джулія ...
Хобі Кальвіна

12

R, 2 слова + 1 заміна + 1¹ остання = 4

Об'єкти, які не призначені ні для чого, просто друкуються для stdout. Оскільки вираз є об'єктом, наступний код друкує себе:

expression(puppy)

Попереднє подання, 5 балів:

function(hello)hello

Вас надихнуло моє шахрайське 3-бальне рішення, чи не так? ;-)
Джон Дворак

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.

Помилка quine, не заборонена, здається


1
Цей код не "кодує" жодну частину коду. Дивіться наше визначення для королеви
MilkyWay90,

@ MilkyWay90 Використання визначення &кодує весь код і зупиняє виведення
l4m2

О, чи можете ви відредагувати відповідь, щоб я міг зняти свій запис
MilkyWay90,

1
Цікава відповідь лазівки ... це &все-таки слово?
Програми Redwolf

@RedwolfPrograms немає, але & це два символи. 5 (слова) + 1 (трейлінг) + 2 ^ 2 ведучий = 10.
Draco18s

3

Рунічні чари , оцінка 4 + 3 + 1 1 +1 1 = 9

"hOt3OX4NOt+kNOt@

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

Слова: hot ox not knot(4)
Заміни: 3 4 +(3)
Перед: "(1)
Після: @(1)

Усі символи GNOQWghtxzне працюють в Runic (як і простір та період, але більше пробілів не допомагає оцінювати). У тому числі 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 дає наступне квіта:

"3X4+k@

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


0

так? - 1 слово + 1 ** 1/1 ^ 1 = 1 знак після слова = 2 загальна оцінка.

Ouch!

Ouch! чи дійсна квітка в так?

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

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