Napisz Quine w zwykłym angielskim

41

Napisz quine, które składa się z prawdziwych angielskich słów oddzielonych pojedynczymi spacjami. „Słowo” jest zdefiniowane jako ciąg znaków zawierający tylko małe i wielkie litery ( /[a-zA-Z]+/w wyrażeniu regularnym). Aby być „prawdziwym”, twoje słowo musi zostać rozpoznane przez oficjalny słownik Scrabble .

Korzystam ze słownika Scrabble, ponieważ daje on ostateczną odpowiedź na to, co jest i nie jest ważne. Istnieje zbyt wiele szarych obszarów ze zwykłym słownikiem. Zauważ, że „A” i „I” (nie wspominając o „quine”) nie są poprawnymi słowami scrabble.

Ponieważ pisanie Quine'a tylko za pomocą liter i spacji jest prawie niemożliwe w większości języków programowania, masz możliwość wymiany pojedynczych spacji między słowami z charakterem swojego wyboru. Możesz także dołączyć znaki na początku pierwszego słowa i na końcu ostatniego słowa. Te dodane znaki mogą być dowolne (w tym znaki nowej linii i nie-ASCII) oprócz liter (az, AZ) . Istnieje jednak kara za ich dodanie (patrz punktacja).

Detale

  • Jak zwykle, quines nie może czytać ani uzyskiwać dostępu do własnego kodu źródłowego. (Powiedziałbym, że polecenie Q HQ9 + narusza to.)
  • Dane wyjściowe powinny przejść do standardowego wyjścia lub podobnej alternatywy. Brak danych wejściowych.
  • Słowa nie muszą być pisane dużymi literami. Mogą mieć wszędzie czapki i małe litery. Ciąg słów nie musi mieć żadnego sensu.
  • Żadne słowo nie może być użyte więcej niż 3 razy w twoim programie. Różne litery pisane wielkimi literami to wciąż to samo słowo (np. „DOG”, „pies” i „dOg” są tym samym słowem).
  • Używanie języków takich jak PHP czy HTML, który można po prostu kot się ich zawartości jest uważany za trywialne luka i jest niedozwolone.
  • Program musi zawierać co najmniej jedno słowo.

Punktacja

Twój wynik to liczba „prawdziwych słów” w twoim programie plus następujące kary:

  • +1 za każde pole, które zostało zastąpione inną postacią
  • n n na każde n znaków dodanych przed pierwszym słowem (tak, to jest n potęgi n)
  • n n na każde n znaków dodanych po ostatnim słowie

Na przykład program

We all LIKE PROgraMmING

uzyska 4, ponieważ zawiera 4 słowa; żadne znaki nie zostały dodane ani zastąpione żadnymi spacjami. Oczywiście wynik byłby We all LIKE PROgraMmING.

Program

!We@all LIKE#PROgraMmING- =

uzyskałby 4 + 2 + 1 + 27 = 34; 4 dla słów, 2 dla zastąpionych spacji, 1 dla !przodu i 27 dla - =końca. Oczywiście wynik byłby !We@all LIKE#PROgraMmING- =.

Najniższy wynik wygrywa. Tiebreaker podchodzi do odpowiedzi z najmniejszą liczbą punktów karnych. Jeśli nadal jest remis, wygrywa najwyższa głosowana odpowiedź.

Hobby Calvina
źródło
1
Czy ten słownik istnieje również jako lista? Byłoby to o wiele bardziej pomocne przy przeglądaniu niż sprawdzanie każdego słowa osobno.
Martin Ender
16
Szekspir ktoś?
dwana
1
@JanDvorak Nie sądzę ... Fakt, że nie mogę napisać czegoś takiego, nie powinien powodować, że inni uważają to za złe pytanie, jest to ważne, choć dość trudne wyzwanie, prawda?
rorlork
7
Nadal jestem zainteresowany rozwiązaniem Szekspira.
John Dvorak

Odpowiedzi:

25

skrypt golfowy, 8 słów + 8 symboli = 20 16 (3?)

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

Słowa są tylko wypełniaczem, rdzeń to mały rdzeń quine:

{".~"}.~

Duplikuje i ocenia funkcję, która po prostu dołącza instrukcje do duplikowania i oceny. Kiedy funkcja jest drukowana, jest ona automatycznie rygoryzowana. To najmniejszy quine, który coś robi .

Lub możemy po prostu użyć literału funkcji, który nigdy nie zostanie oceniony. Ale to jest jak oszustwo ...

{whatever}
John Dvorak
źródło
Nie potrzebujesz konkatenacji. {a`b"x.y~z"c}x.y~z
Dennis
@Dennis W tym przypadku nawet nie potrzebuję kontroli. Dzięki! Czuję, że muszę zapytać OP o coś ...
John Dvorak
8
@ Głowonogi Nie czytam własnego kodu źródłowego. Po prostu wrzucam funkcję na stos, a środowisko wykonawcze wypisuje ją dla mnie, błogo nieświadomy faktu, że cały mój kod źródłowy jest dosłowny.
John Dvorak
1
Myślę, że {whatever}naruszałoby zasadę zbyt banalne ( „przy użyciu języków takich jak PHP czy HTML, który można po prostu kot się ich zawartości jest uważane za błahe luka i nie jest dozwolony.”)
Claudiu
1
@Claudiu to zasada przeciwko językom, a nie rozwiązania. Dlatego spytałem.
John Dvorak,
54

> <> , 25 słów + (22 + 1 1 + 1 1 ) extra = 57 49

Boże, mój mózg.

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

Ponieważ reguły mówią „Nie ma danych wejściowych”, aby ten program działał, musisz umieścić w pustym pliku potok.

No i tak, brrjest ważnym słowem Scrabble, podobnie jak tsktski pfft.

Wyjaśnienie

Przede wszystkim następujące słowa to brak operacji:

deep clap beep flap leap clip blip flip

Wynika to z dwóch powodów:

  • abcdeflnumery push (odpowiednio 10, 11, 12, 13, 14, 15 i długość stosu). Ponadto inaciska -1, jeśli EOF jest spełniony, ponieważ nie ma danych wejściowych.
  • pPoleceń wyskakuje trzy znaki v,y,xi miejsca vna położenie x,y.

Tak,> <> pozwala modyfikować kod źródłowy w locie! Jednak tak naprawdę nie korzystamy z tego, ponieważ potrzebujemy tylko pdo strzelania.

Jeśli pozbędziemy się tych braków, otrzymamy:

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

W podobny sposób laced appczęść placed applei e alpczęść apple alpsą również „no-ops”, a „ rrof” brrpo prostu odwraca stos dwa razy, co możemy również usunąć:

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

Wreszcie coś, co wygląda jak zwykły program> <>! Chodzi o to, aby użyć standardowego quine> <>, który działa tak:

  • Inicjał 'rozpoczyna parsowanie ciągów, wypychając każdy napotkany znak, aż trafimy na kolejny'
  • Ciągle wypychamy znaki do końca linii, w którym to momencie zawijamy wskaźnik instrukcji z powrotem na początek (ponieważ> <> jest toroidalne)
  • 'Ponownie lądujemy na inicjale i zatrzymujemy parsowanie łańcucha. W rezultacie umieściliśmy każdy znak w programie (oprócz początkowego ') na stos.

Potem dzieje się:

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
Sp3000
źródło
„Żadne słowo nie może być użyte więcej niż 3 razy w twoim programie. Różne słowa pisane wielkimi literami są wciąż tym samym słowem (np.„ DOG ”,„ pies ”i„ dOg ”są tym samym słowem).” W każdym razie dostaniesz ode mnie głos, proszę pana.
rorlork
@rcrmn Dodałem tyle słów, że zupełnie zapomniałem o tej zasadzie! Naprawiono teraz, chociaż nie chciałem używać i.
Sp3000,
1
TIL „pa”, „la” i „be” są poprawnymi słowami w języku scrabble
John Dvorak
20
Czytanie programu na głos sprawia, że ​​wyobrażam sobie, jak brzmiały komputery z kartami dziurkowanymi.
Calvin's Hobbies
10
Myślę, że ukradłeś ten program ze źródła systemu operacyjnego R2D2.
przestał obracać przeciwnie do zegara
21

Kurczak , 1 słowo

Zwykle nie przepadam za esolangami, ale ten wydawał się do tego idealny. Myślę, że to prawdziwy quine:

chicken

Pcha 1 kurczaka na stos. Stos zostanie następnie wyświetlony.

Cyfrowa trauma
źródło
1
Ta granica (i odpowiedź Julii) jest nieważna. Możesz zatrzymać je tutaj, ale nie obiecuj przyjęcia.
Calvin's Hobbies
@ Calvin'sHobbies W trosce o sprawiedliwość z przyjemnością usunę to, jeśli uważasz, że jest to zbyt luka - Twoje wezwanie. Pracowałem nad rozwiązaniem AppleScript, ale frustrowało mnie zasada „Żadnego słowa nie można używać więcej niż 3 razy”, co wydaje się szczególnie utrudniać. Zamiast tego wybrałem tani trick :-)
Digital Trauma
@ Calvin'sHobbies: Jestem autorem zgłoszenia Julii. Podobnie jest z sentymentem DigitalTrauma w sprawie usunięcia mojego postu, jeśli uważasz, że jest to zbyt granica. Ja też zrobiłem R. Czy to też jest zbyt blisko?
Alex A.,
@Alex i DT: To zależy od was. Prawdopodobnie nie przyjmuję żadnej odpowiedzi, ale nie mam nic przeciwko, że tu są. Nadal jestem trochę rozdarty na odpowiedź R, chociaż pomysł jest prawie taki sam jak Julii ...
Calvin's Hobbies
12

R, 2 słowa + 1 zamiana + 1¹ trailing = 4

Obiekty, które nie są przypisane do niczego, są po prostu drukowane na standardowe wyjście. Ponieważ wyrażenie jest obiektem, drukuje się następujący kod:

expression(puppy)

Poprzednie zgłoszenie, 5 punktów:

function(hello)hello
Alex A.
źródło
Zainspirowałeś się moim podstępnym 3-punktowym rozwiązaniem, prawda? ;-)
John Dvorak
1
@ JanDvorak: Właściwie nie widziałem tego przed opublikowaniem tego, ale teraz jest to retrospektywne źródło inspiracji.
Alex A.
12

Python 2, 58 = 37 słów + 21 znaków interpunkcyjnych

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

Z dodanymi nowymi liniami:

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

Trzy zastosowania na słowo ograniczały to, co utrudniało pisanie. Chciałem użyć ciągu z całym kodem więcej niż 3 razy, a każdy ciąg musiał być zaizolowany if else and oroperatorami, których miałem tylko ograniczony zapas.

feersum
źródło
@ user23013 Ups, zapomniałem zastąpić go losowym identyfikatorem.
feersum
7

Julia, 1 słowo + 1¹ poprzedzające = 2

Julia ma obiekty zwane symbolami, które są zdefiniowane za pomocą poprzedzającego :. Podobnie jak moje rozwiązanie R, drukuje się ono po przesłaniu.

:puppy
Alex A.
źródło
5

Wiersz poleceń DOS, 10

& was unexpected at this time.

Błąd quine, wydaje się, że nie zbanowany

l4m2
źródło
1
Ten kod nie „koduje” żadnej części kodu. Zobacz naszą definicję quine
MilkyWay90
@ MilkyWay90 Użycie definicji &koduje cały kod i przestaje się wyświetlać
l4m2
Och, czy możesz edytować odpowiedź, abym mógł usunąć moją opinię
MilkyWay90
1
Interesująca luka w odpowiedzi ... to &jednak słowo?
Programy Redwolf
@ RedwolfPrograms nie, ale & to dwa symbole. 5 (słowa) + 1 (końcowe) + 2 ^ 2 wiodące = 10.
Draco18s
3

Zaklęcia Runiczne , wynik 4 + 3 + 1 1 +1 1 = 9

"hOt3OX4NOt+kNOt@

Wypróbuj online!

Słowa: hot ox not knot(4)
Zamienniki: 3 4 +(3)
Przed: "(1)
Po: @(1)

Wszystkie postacie GNOQWghtxznie mają opozycji w Runicznej (podobnie jak spacja i kropka, ale więcej spacji nie pomaga w zdobywaniu punktów). Uwzględniając Xi kwymagane dla funkcjonalności, daje to następującą dostępną listę słów:

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

Wybrałem wiśni w zależności od potrzeb przestrzeni, w którą się znajdowała, i zabrzmiało to zabawnie.

Usunięcie wszystkich znaków NOP daje następujący quine:

"3X4+k@

Wypróbuj online!

Draco18s
źródło
0

co? - 1 słowo + 1 ** 1/1 ^ 1 = 1 znak po słowie = 2 łączny wynik.

Ouch!

Ouch! czy ważna jest quine?

Uruchom go jak pythuhn.py Ouch!, a Ouch!w bieżącym katalogu nie może być pliku o nazwie .

MilkyWay90
źródło