Plain English'de bir Quine yaz


41

Tek boşluklarla ayrılmış gerçek İngilizce kelimelerden oluşan bir yazı yazın . Bir "kelime", yalnızca küçük ve büyük harfleri içeren ( /[a-zA-Z]+/dizge içindeki) bir dize olarak tanımlanır . "Gerçek" olmak için kelimenizin resmi Scrabble sözlüğü tarafından tanınması gerekir .

Scrabble sözlüğünü kullanıyorum çünkü neyin geçerli olup neyin olmadığı konusunda kesin bir cevap veriyor. Normal bir sözlüğü olan çok fazla gri alan var. "A" ve "I" nin ("quine" demediğiniz) geçerli scrabble kelimeleri olmadığını unutmayın.

Çoğu programlama dilinde sadece harfler ve boşluklar kullanarak bir yazı yazmak imkansız olduğundan, kelimeler arasındaki tek boşlukları istediğiniz karaktere sahip olarak değiştirme seçeneğiniz vardır. Ayrıca, ilk kelimenin önüne ve son kelimenin sonuna karakter ekleme seçeneğiniz de vardır. Bu eklenen karakterler, harfler (az, AZ) hariç herhangi bir şey (yeni satırlar ve ASCII olmayanlar dahil ) olabilir . Bunları eklemek için bir ceza var (Puanlamaya bakınız.)

ayrıntılar

  • Her zaman olduğu gibi, sınavlar kendi kaynak kodlarını okuyamayabilir veya erişemez. ( HQ9 + 'nın Q komutunun bunu ihlal ettiğini söyleyebilirim .)
  • Çıktı stdout'a veya benzer bir alternatife gitmelidir. Giriş yok.
  • Kelimelerin doğru bir şekilde büyük harfle yazılması gerekmez. Her yerde büyük harfleri ve küçük harfleri olabilir. Kelimelerin dizisinin bir anlam ifade etmesi gerekmez.
  • Programınızda hiçbir kelime 3 defadan fazla kullanılamaz. Farklı olarak büyük harfle yazılmış kelimeler hala aynı kelimedir (örneğin 'DOG', 'dog' ve 'dOg' hepsi aynı kelimedir).
  • Sadece yapabilirsiniz PHP veya HTML gibi dilleri kullanarak kedi içerikleriyle dışarı önemsiz bir kaçamak olarak kabul edilir ve izin verilmez.
  • Program en az bir kelime içermelidir.

puanlama

Puanınız, programınızdaki "gerçek kelimeler" sayısı ve bu cezalar:

  • Başka bir karakterle değiştirilen her alan için +1
  • İlk kelimeden önce eklediğiniz her n karakter için n n (evet, güç n)
  • n n her n karakterler için son sözcükten sonra eklenen

Örneğin, program

We all LIKE PROgraMmING

4 kelime içerdiğinden 4 puan alır; karakter eklenmemiş veya boşluk bırakılmamıştır. Çıktı elbette olur We all LIKE PROgraMmING.

Program

!We@all LIKE#PROgraMmING- =

4 + 2 + 1 + 27 = 34; Sözcükler için 4, değiştirilen boşluklar için 2 !, öndeki için 1 - =ve sondaki için 27 . Çıktı elbette olur !We@all LIKE#PROgraMmING- =.

En düşük puan kazanır. Tiebreaker en az ceza puanı ile cevaba gider. Hala bir kravat varsa en yüksek oyu alan cevap kazanır.


1
Bu sözlük bir liste olarak da mevcut mu? Göz atmak, her bir sözcüğü ayrı ayrı kontrol etmek zorunda kalmaktan çok daha yararlı olacaktır.
Martin Ender

16
Shakespeare biri mi?
dwana


1
@JanDvorak Öyle sanmıyorum ... Böyle bir şey yazamayacağım gerçeği, başkalarının bunu kötü bir soru olarak görmemesini sağlamalıdır, bu zor olsa da, zor olsa da, geçerli değil mi?
rorlork

7
Hala Shakespeare çözümüyle ilgileniyorum.
John Dvorak

Yanıtlar:


25

golfscript, 8 kelime + 8 sembol = 20 16 (3?)

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

Kelimeler sadece bir dolgu maddesidir, çekirdek küçük bir çekirdek çekirdektir:

{".~"}.~

Yalnızca kendisini çoğaltmak ve değerlendirmek için talimatları ekleyen bir işlevi çoğaltır ve değerlendirir. Bir işlev yazdırıldığında, otomatik olarak dizilir. Bu bir şeyler yapan en küçük quine .

Ya da sadece asla değerlendirilemeyen bir işlevi kullanabiliriz. Ama hile yapmak gibi geliyor ...

{whatever}

Birleştirme işlemine gerek yok. {a`b"x.y~z"c}x.y~z
Dennis,

@Dennis Bu durumda incelemeye bile ihtiyacım yok. Teşekkürler! OP'ye bir şey sormam gerektiğini hissediyorum ...
John Dvorak

8
@Cephalopod Kendi kaynak kodumu okumam. Yığına bir işlevi zorluyorum ve çalışma zamanı benim için yazdırıyor, kaynak kodumun bütününün bir fonksiyon değişmezliği olduğunun farkında değil.
John Dvorak

1
Çok {whatever}önemsiz bir kuralı ihlal edeceğini düşünüyorum ("PHP veya HTML gibi dillerini sadece içeriğini çözebilecek dilleri kullanmak önemsiz bir boşluk olarak kabul edilir ve buna izin verilmez.")
Claudiu

1
@ Claudiu, çözümlere değil, dillere karşı bir kuraldır. Bu yüzden sordum.
John Dvorak

54

> <> , 25 kelime + (22 + 1 1 + 1 1 ) extra = 57 49

Aman Tanrım, beynim.

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

Kurallar "Girdi yok" yazdığından, bu programın çalışması için boş bir dosyaya geçmeniz gerekir.

Oh ve evet, brrgibidir, geçerli bir Scrabble kelime tsktskve pfft.

açıklama

Her şeyden önce, aşağıdaki kelimeler no-ops:

deep clap beep flap leap clip blip flip

Bunun iki nedeni var:

  • abcdeflİtme numaraları (sırasıyla 10, 11, 12, 13, 14, 15 ve istifin uzunluğu). Buna ek olarak, ieğer EOF karşılanırsa -1, giriş olmadığını görmek için basar.
  • pKomut üç karakter çıkar v,y,xve yerler vkonumunda x,y.

Evet,> <> anında kaynak kodunu değiştirmenize izin verir! Ancak bunu yapmak için gerçekten faydalanmıyoruz, çünkü sadece ppatlamaya ihtiyacımız var .

Eğer bu no-op'lardan kurtulursak:

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

Benzer bir şekilde, laced appbir kısmı placed appleve e alpbir kısmı apple alpda no-op, ve rriçinde brrsadece biz de kaldırabilirsiniz, hangi iki kez yığını tersine çevirir:

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

Sonunda, normal bir programa benzeyen bir şey var. Buradaki fikir şunun gibi çalışan standart> <> quine değerinden faydalanmaktır:

  • İlk 'karakter dizisi ayrıştırmaya başlar, diğer karakterleri vuruncaya kadar her karakter bir araya geldi'
  • Satır sonuna kadar karakterleri itmeye devam ediyoruz, bu noktada komut göstergesini başa döndürüyoruz (> <> toroidal olduğu için)
  • Biz ilk iniş 'tekrar ve durdurma dize ayrıştırma. Sonuç olarak programdaki her bir karakteri (ilk hariç ') yığına ittik.

Ardından aşağıdakiler olur:

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

“Programınızda hiçbir kelime 3 defadan fazla kullanılamaz. Farklı büyük harflerle yazılmış kelimeler hala aynı kelimedir (örneğin 'DOG', 'dog' ve 'dOg' hepsi aynı kelimedir). Her neyse, benden bir abartı alıyorsunuz efendim.
rorlork

@rcrmn Bu kuralı tamamen unuttuğum o kadar çok kelime eklemeye devam ettim! Sabit şimdi, kullanmak zorunda kalmaktan kaçınmak istememe rağmen i.
Sp3000

1
TIL "pa", "la" ve "be", Scrabble'da geçerli kelimelerdir
John Dvorak

20
Programınızı yüksek sesle okumak, hangi delikli kart bilgisayarlarının ses çıkardığını hayal etmemi sağlıyor.
Calvin'in Hobileri

10
Sanırım bu programı R2D2'nin işletim sisteminin kaynağından çaldın.
counterclockwis

21

Tavuk , 1 kelime

Normalde eşanlamlılara girmiyorum, ama bu bunun için mükemmel görünüyordu. Ben düşünüyorum bu gerçek quine geçerli:

chicken

1 tavuğu yığına iter. Yığın daha sonra görüntülenir.


1
Bu (ve Julia cevabı) sınırını aşırı derecede geçersiz. Onları burada tutabilirsin ama kabul edeceğin söz yok.
Calvin'in Hobileri

@ Calvin's Hobbies Adaletin çıkarlarına göre, bunun çok fazla boşluk olduğunu düşünüyorsanız mutlu bir şekilde silerim - Sizin çağrınız. Bir el yazısı çözümü üzerinde çalışıyordum, ancak bunu özellikle zorlaştıran görünen "Hiçbir kelime 3 defadan fazla kullanılamaz" kuralı yüzünden hayal kırıklığına uğradım. Bu yüzden ben ucuz hile için gittim :-)
Digital Trauma,

@ Calvin's Hobbies: Julia'nın gönderiminin yazarıyım. Ben sınırsız olduğunu düşünüyorsanız DigitalTrauma'nın görevimi kaldırması konusundaki hissini veriyorum. Ben de R yaptım. Bu da çok yakın mı?
Alex A.,

@Alex ve DT: Size kalmış çocuklar. Muhtemelen her iki cevabı da kabul etmem ama burada olmalarını umursamıyorum. Hâlâ R cevabını yitirmiştim, fikir Julia ile aynı olsa da ...
Calvin'in Hobileri

12

R, 2 kelime + 1 değiştirme + 1¹ iz = 4

Hiçbir şeye atanmamış nesneler sadece stdout'a yazdırılır. Bir ifade bir nesne olduğundan, aşağıdaki kod kendisini yazdırır:

expression(puppy)

Önceki sunum, 5 puan:

function(hello)hello

Benim aldatıcı 3 puanlı çözümümden ilham alıyordun, değil mi? ;-)
John Dvorak

1
@JanDvorak: Bunu göndermeden önce bunu gerçekten görmedim, ama şimdi geriye dönük bir ilham kaynağı.
Alex A.

12

Python 2, 58 = 37 kelime + 21 noktalama işaretleri

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

Bazı yeni satırlar eklenmiş olarak:

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

Kelime kısıtlaması başına üç kullanım, bunu yazmakta zorlandı. Dizeyi tüm kodlarla 3 kereden fazla kullanmak istedim ve her dizginin if else and oryalnızca sınırlı bir tedarikim olan operatörlerle yalıtılması gerekiyordu.


@ user23013 Hata! Rasgele bir tanımlayıcıyla değiştirmeyi unuttum.
feersum

7

Julia, 1 kelime + 1¹ den önce = 2

Julia, önceleri kullanılarak tanımlanmış semboller denilen nesnelere sahiptir :. Benim R çözümü gibi, bu sadece gönderildiğinde yazdırır.

:puppy

5

DOS komut satırı, 10

& was unexpected at this time.

Hata quine, yasaklanmadı gibi görünüyor


1
Bu kod, kodun hiçbir bölümünü "kodlamaz". Bir quine tanımımızı görün
MilkyWay90 3

@ MilkyWay90 Tanımı kullanmak &kodun tamamını kodlar ve çıktısını durdurur
l4m2

Oh, cevabı düzenleyebilir miyim, böylece olumsuz oyumu kaldırabilirim
MilkyWay90

1
İlginç bir loopholey cevabı ... yine de &bir kelime mi?
Redwolf Programları,

@RedwolfPrograms hayır, ancak & iki sembol. 5 (kelime) + 1 (izleyen) + 2 ^ 2 önde = 10
Draco18s

3

Runik Efsunları , Skoru 4 + 3 + 1 1 +1 1 = 9

"hOt3OX4NOt+kNOt@

Çevrimiçi deneyin!

Kelime: hot ox not knot(4)
Yerine: 3 4 +(3)
Önce: "(1)
Sonra: @(1)

GNOQWghtxzRunic'de karakterlerin tümü kullanılmaz (hem boşluk hem de periyot, ancak daha fazla boşluk puanlamaya yardımcı olmaz). Dahil Xve kişlevsellik için gerekli bu şu mevcut kelime listesini verir:

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

Vişnenin içine girdiği mekanın ihtiyaçlarına göre seçildim ve komik hale getirdim.

Tüm NOP karakterlerini kaldırmak, aşağıdaki sırayı verir:

"3X4+k@

Çevrimiçi deneyin!


0

ha? - 1 kelime + 1 ** 1/1 ^ 1 = kelime = 2 toplam puandan sonra 1 karakter.

Ouch!

Ouch! geçerli bir balina mı?

Gibi çalıştırın ve geçerli dizinde pythuhn.py Ouch!adlandırılmış bir dosya olamaz Ouch!.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.