Tulis Quine dalam Bahasa Inggris Biasa

41

Tuliskan quine yang terdiri dari kata-kata bahasa Inggris nyata yang dipisahkan oleh spasi tunggal. "Kata" didefinisikan sebagai string yang hanya berisi huruf kecil dan besar ( /[a-zA-Z]+/dalam regex). Untuk menjadi "nyata", kata Anda harus dikenali oleh kamus Scrabble resmi .

Saya menggunakan kamus Scrabble karena memberikan jawaban yang pasti tentang apa yang valid dan tidak valid. Ada terlalu banyak area abu-abu dengan kamus normal. Perhatikan bahwa "A" dan "I" (belum lagi "quine") bukan kata-kata scrabble yang valid.

Karena menulis quine hanya menggunakan huruf dan spasi hampir mustahil di sebagian besar bahasa pemrograman, Anda memiliki opsi untuk mengganti spasi tunggal antara kata dengan karakter pilihan Anda. Anda juga memiliki opsi untuk menambahkan karakter ke depan kata pertama dan akhir kata terakhir. Karakter yang ditambahkan ini bisa apa saja (termasuk baris baru dan non-ASCII) kecuali huruf (az, AZ) . Ada penalti untuk menambahkannya (lihat Mencetak.)

Detail

  • Seperti biasa, quines mungkin tidak membaca atau mengakses kode sumber mereka sendiri. (Saya akan mengatakan bahwa perintah Q HQ9 + melanggar ini.)
  • Output harus menuju stdout atau alternatif serupa. Tidak ada input.
  • Kata-kata tidak perlu ditulis dengan huruf besar dengan benar. Mereka dapat memiliki topi dan huruf kecil di mana saja. Urutan kata-kata tidak perlu masuk akal.
  • Tidak ada kata yang dapat digunakan lebih dari 3 kali dalam program Anda. Kata-kata dengan huruf kapital yang berbeda masih merupakan kata yang sama (mis. 'DOG', 'dog', dan 'dOg' semuanya adalah kata yang sama).
  • Menggunakan bahasa seperti PHP atau HTML yang dapat hanya kucing keluar isinya dianggap sebagai celah sepele dan tidak diperbolehkan.
  • Program harus mengandung setidaknya satu kata.

Mencetak gol

Skor Anda adalah jumlah "kata-kata nyata" dalam program Anda ditambah hukuman ini:

  • +1 untuk setiap ruang yang diganti dengan karakter lain
  • n n untuk setiap n karakter yang Anda tambahkan sebelum kata pertama (ya, itu n dengan kekuatan n)
  • n n untuk setiap n karakter yang Anda tambahkan setelah kata terakhir

Misalnya saja programnya

We all LIKE PROgraMmING

akan skor 4 karena mengandung 4 kata; tidak ada karakter yang ditambahkan atau diganti spasi. Outputnya tentu saja akan We all LIKE PROgraMmING.

Program

!We@all LIKE#PROgraMmING- =

akan skor 4 + 2 + 1 + 27 = 34; 4 untuk kata-kata, 2 untuk ruang diganti, 1 untuk !di depan, dan 27 untuk - =di akhir. Outputnya tentu saja akan !We@all LIKE#PROgraMmING- =.

Skor terendah menang. Tiebreaker menjawab dengan poin penalti paling sedikit. Jika masih ada ikatan, jawaban tertinggi yang terpilih akan menang.

Hobi Calvin
sumber
1
Apakah kamus itu juga ada sebagai daftar? Itu akan jauh lebih membantu untuk menelusuri daripada harus memeriksa setiap kata satu per satu.
Martin Ender
16
Shakespeare siapa pun?
dwana
1
@JanDvorak Saya rasa tidak ... Fakta bahwa saya tidak bisa menulis hal seperti ini seharusnya tidak membuat orang lain melihat ini sebagai pertanyaan yang buruk, itu adalah tantangan yang valid, meskipun cukup sulit, bukan?
rorlork
7
Saya masih tertarik dengan solusi Shakespeare.
John Dvorak

Jawaban:

25

skrip golf, 8 kata + 8 simbol = 20 16 (3?)

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

Kata-katanya hanyalah pengisi, intinya adalah inti quine kecil:

{".~"}.~

Menggandakan dan mengevaluasi suatu fungsi yang hanya menambahkan instruksi untuk menggandakan dan mengevaluasi sendiri. Ketika suatu fungsi dicetak, itu dikomplikasi secara otomatis. Ini adalah quine terkecil yang melakukan sesuatu .

Atau kita bisa menggunakan fungsi literal yang tidak pernah dievaluasi. Tapi rasanya selingkuh ...

{whatever}
John Dvorak
sumber
Anda tidak perlu penggabungan. {a`b"x.y~z"c}x.y~z
Dennis
@ Dennis Saya bahkan tidak perlu inspeksi dalam kasus itu. Terima kasih! Saya merasa saya perlu menanyakan sesuatu pada OP ...
John Dvorak
8
@ Sefalopod Saya tidak membaca kode sumber saya sendiri. Saya hanya mendorong suatu fungsi ke stack dan runtime mencetaknya untuk saya, dengan senang hati tidak menyadari fakta bahwa keseluruhan kode sumber saya adalah fungsi literal.
John Dvorak
1
Saya pikir itu {whatever}akan melanggar aturan yang terlalu sepele ("Menggunakan bahasa seperti PHP atau HTML yang hanya bisa mengecek isinya dianggap sebagai celah sepele dan tidak diizinkan.")
Claudiu
1
@Claudiu itu aturan terhadap bahasa, bukan solusi. Itulah mengapa saya bertanya.
John Dvorak
54

> <> , 25 kata + (22 + 1 1 + 1 1 ) ekstra = 57 49

Ya Tuhan, otakku.

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

Karena aturan menyatakan "Tidak ada input.", Agar program ini berfungsi, Anda perlu menyalurkan file kosong.

Oh dan ya, brradalah kata Scrabble yang valid, sebagaimana adanya tsktskdan pfft.

Penjelasan

Pertama-tama, kata-kata berikut adalah no-ops:

deep clap beep flap leap clip blip flip

Ini karena dua alasan:

  • abcdeflnomor push (10, 11, 12, 13, 14, 15 dan panjang tumpukan masing-masing). Selain itu, itekan -1 jika EOF terpenuhi, karena tidak ada input.
  • The pperintah muncul tiga karakter v,y,xdan tempat-tempat vdi posisi x,y.

Ya,> <> memungkinkan Anda mengubah kode sumber dengan cepat! Kami tidak benar-benar memanfaatkan itu, karena kami hanya perlu puntuk bermunculan.

Jika kita menyingkirkan no-op ini, kita mendapatkan:

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

Dalam cara yang sama, yang laced appbagian dari placed appledan e alpbagian dari apple alpjuga tidak ada-ops, dan rrdari brrhanya membalikkan tumpukan dua kali, yang kami juga dapat menghapus:

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

Akhirnya, sesuatu yang terlihat seperti program biasa> <>! Idenya adalah memanfaatkan standar> <> quine, yang berfungsi seperti ini:

  • Awal 'memulai string parsing, mendorong setiap karakter bertemu sampai kita menekan yang lain'
  • Kami terus mendorong karakter hingga akhir baris, saat kami membungkus pointer instruksi kembali ke awal (karena> <> adalah toroidal)
  • Kami mendarat di inisial 'lagi, dan berhenti mengurai string. Hasilnya adalah bahwa kami telah memasukkan setiap karakter dalam program (kecuali yang awal ') ke stack.

Kemudian terjadi hal berikut:

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
sumber
"Tidak ada kata yang dapat digunakan lebih dari 3 kali dalam programmu. Kata-kata dengan huruf kapital yang berbeda masih merupakan kata yang sama (mis. 'DOG', 'dog', dan 'dOg' semuanya kata yang sama)." Pokoknya Anda mendapat upvote dari saya, Pak.
rorlork
@ rrmn Saya terus menambahkan begitu banyak kata sehingga saya benar-benar lupa tentang aturan itu! Diperbaiki sekarang, walaupun saya ingin menghindari penggunaan i.
Sp3000
1
TIL "pa", "la" dan "be" adalah kata-kata yang valid dalam Scrabble
John Dvorak
20
Membaca program Anda dengan keras membuat saya membayangkan seperti apa suara komputer kartu punch.
Calvin Hobi
10
Saya pikir Anda telah mencuri program itu dari sumber sistem operasi R2D2.
Berhenti menghidupkan counterclockwis
21

Ayam , 1 kata

Saya biasanya tidak ke esolang, tetapi yang ini tampaknya sempurna untuk ini. Saya pikir ini adalah quine sejati:

chicken

Dorong 1 ayam ke tumpukan. Tumpukan kemudian ditampilkan.

Trauma Digital
sumber
1
Ini (dan jawaban Julia) berbatasan dengan trivially invalid. Anda dapat menyimpannya di sini tetapi tidak ada janji untuk menerimanya.
Calvin Hobbies
@ Calvin Hobbies Demi kepentingan keadilan, saya dengan senang hati akan menghapus ini jika Anda merasa terlalu loopholey - Panggilan Anda. Saya sedang mengerjakan solusi applescript, tetapi merasa frustrasi oleh aturan "Tidak ada kata yang boleh digunakan lebih dari 3 kali" yang sepertinya membuat ini sangat sulit. Jadi saya pergi untuk trik murah sebagai gantinya :-)
Digital Trauma
@ Calvin Hobbies: Saya penulis naskah Julia. Saya mengabaikan sentimen DigitalTrauma untuk menghapus posting saya jika Anda merasa itu terlalu terbatas. Saya juga melakukan R. Apakah itu terlalu dekat juga?
Alex A.
@Alex dan DT: Terserah kalian. Saya mungkin tidak akan menerima salah satu jawaban tetapi saya tidak keberatan mereka ada di sini. Saya masih agak bingung dengan jawaban R, meskipun idenya hampir sama dengan jawaban Julia ...
Calvin's Hobbies
12

R, 2 kata + 1 pengganti + 1¹ trailing = 4

Objek yang tidak ditugaskan untuk apa pun hanya dicetak ke stdout. Karena ekspresi adalah objek, kode berikut mencetak sendiri:

expression(puppy)

Pengajuan sebelumnya, 5 poin:

function(hello)hello
Alex A.
sumber
Anda terinspirasi oleh solusi 3 poin saya yang curang, bukan? ;-)
John Dvorak
1
@JanDvorak: Saya sebenarnya tidak melihat itu sebelum saya memposting ini, tetapi sekarang menjadi sumber inspirasi retrospektif.
Alex A.
12

Python 2, 58 = 37 kata + 21 tanda baca

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

Dengan beberapa baris baru ditambahkan:

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

Tiga penggunaan per kata pembatasan adalah apa yang membuat ini sulit untuk ditulis. Saya ingin menggunakan string dengan semua kode lebih dari 3 kali, dan setiap string harus diisolasi dengan if else and oroperator yang hanya memiliki persediaan terbatas.

feersum
sumber
@ user23013 Ups, lupa menggantinya dengan pengenal acak.
feersum
7

Julia, 1 kata + 1¹ sebelumnya = 2

Julia memiliki objek yang disebut simbol yang didefinisikan menggunakan pendahulunya :. Sama seperti solusi R saya, ini hanya dicetak saat dikirimkan.

:puppy
Alex A.
sumber
5

Baris perintah DOS, 10

& was unexpected at this time.

Kesalahan quine, sepertinya tidak dilarang

l4m2
sumber
1
Kode ini tidak "menyandikan" bagian mana pun dari kode. Lihat definisi kami untuk seekor quine
MilkyWay90
@ MilkyWay90 Menggunakan definisi ini &mengkodekan seluruh kode dan berhenti menghasilkan
l4m2
Oh, bisakah Anda mengedit jawabannya sehingga saya dapat menghapus downvote saya
MilkyWay90
1
Jawaban loopholey yang menarik ... adalah &sebuah kata?
Program Redwolf
@RedwolfPrograms tidak, tetapi & dua simbol. 5 (kata-kata) + 1 (membuntuti) + 2 ^ 2 memimpin = 10.
Draco18s
3

Pesona Rahasia , Skor 4 + 3 + 1 1 +1 1 = 9

"hOt3OX4NOt+kNOt@

Cobalah online!

Kata-kata: hot ox not knot(4)
Penggantian: 3 4 +(3)
Sebelum: "(1)
Setelah: @(1)

Semua karakter GNOQWghtxzadalah no-op dalam Runic (serta ruang dan titik, tetapi lebih banyak ruang tidak membantu mencetak gol). Termasuk Xdan kdiperlukan untuk fungsionalitas, ini memberikan daftar kata yang tersedia berikut:

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

Saya memilih cherry berdasarkan kebutuhan ruang yang dimilikinya dan membuatnya terdengar lucu.

Menghapus semua karakter NOP memberikan quine berikut:

"3X4+k@

Cobalah online!

Draco18s
sumber
0

Hah? - 1 kata + 1 ** 1/1 ^ 1 = 1 char setelah kata = 2 skor total.

Ouch!

Ouch! itu quine yang valid di dalam ya?

Jalankan seperti pythuhn.py Ouch!, dan tidak ada file yang bernama Ouch!di direktori saat ini.

MilkyWay90
sumber