Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Quine

Pekka Karjalainen [15.05.2007 14:12:16]

#

Quine on ohjelma, joka tulostaa oman lähdekoodinsa. Sellaisella on vähän käytännön merkitystä, mutta harjoituksena se on ihan hauska.

Tässäpä yksi Lua-kielellä.

s="print(string.format('s=%q%s',s,s))"print(string.format('s=%q%s',s,s))

Luassa voi jättää ;-merkit pois lausekkeiden välistä. Yleensä se ei ole hyvää tyyliä, mutta tässä säästi ohjelman pituutta kokonaiset kaksi merkkiä.

Luaa tuntemattomille pikku pulma. Mitä arvelet, että %q-direktiivi tekee?

Nyt saa jokainen esitellä quinenväsäystaitojaan ihan vapaasti.

Grez [15.05.2007 16:55:22]

#

Sub Main(): s = "Sub Main(): s = ""@"": MsgBox Replace(s, Chr(64), Replace(s, Chr(34), String(2, 34))): End Sub": MsgBox Replace(s, Chr(64), Replace(s, Chr(34), String(2, 34))): End Sub

Koko roskan pitäisi olla yhdellä rivillä

ajv [15.05.2007 18:21:59]

#

PHP:

:)

Grez [15.05.2007 18:39:04]

#

PHP:llä onnistuu myös kun ei laita mihinkään kohtaan <? -merkkiä :D

Pekka Karjalainen [15.05.2007 20:54:22]

#

Kiitoksia quineista. Sellaista quinea, joka käyttää jotain lähdekoodinkäsittelyominaisuutta voisi pitää jonkin asteisena vilunkiquinena, mutta nekin ansaitsevat huomiota. Tässä on oma vilunkiquineni, joka toimii useilla kielillä. TArkasti ottaen tämä on sarja komentorivikäskyjä, joilla luon ja testaan tämän ohjelman.

D:\temp>touch q.lua

D:\temp>lua q.lua

D:\temp>cat q.lua

Kyseessä on siis tyhjä tiedosto, joka on laillinen Lua-ohjelma. Se ei tee mitään, joten sen tulostuskin on tyhjä. Touch luo tyhjän tiedoston, jos tiedostoa ei ole ennestään olemassa. Cat on taas cygwinin komento, samantapainen kuin dos-maailman type. Se siis näyttää, että tiedoston sisältö on sama kuin sen ajamisesta seuraava tulostus :-)

Tämä kikka onnistuu ainakin Pythonilla. Luultavasti hyvin monella muullakin skriptikielellä.

Tulkatussa[1] kielessä onnistuu toisenlainenkin vilunki. Tässäpä virhequine:

lua: error.lua:1: function arguments expected near '.'

Senkin ajaminen tuottaa saman tekstin. Varsinaisesti se ei ole kuitenkaan Lua-koodia, mutta mitä pienistä :-)

[1] Itse asiassa Luakin on käännetty kieli, mutta koska kääntäjä on aina saatavilla ajon aikana ja se tuottaa tulkattua tavukoodia, on tarkan termin valitseminen hieman hankalaa. Onpa kyllä LuaJIT-kääntäjäkin netissä tarjolla, vaan sitä en ole vielä kokeillut.

FooBat [15.05.2007 23:08:19]

#

Tuosta sun q.lua ohjelmasta tuli väkisin mieleen tämä klassikko vuodelta 1994 (smr ohjelma).
http://www.de.ioccc.org/years.html#1994

Grez [16.05.2007 01:01:55]

#

Joo, ihan ton quine:n wikipediasivuillakin sanotaan että tyhjä koodi on monilla kielillä lyhin mahdollinen quine mutta se katsotaan liian triviaaliksi, jotta sitä voisi pitää oikeana quinena. Lisäksi mainitaan, että se olisi voittanut jonkun kilpailun "paras sääntöjen väärinkäyttö" -kategorian :D

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta