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.
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ä
PHP:llä onnistuu myös kun ei laita mihinkään kohtaan <? -merkkiä :D
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.
Tuosta sun q.lua ohjelmasta tuli väkisin mieleen tämä klassikko vuodelta 1994 (smr ohjelma).
http://www.de.ioccc.org/years.html#1994
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
Aihe on jo aika vanha, joten et voi enää vastata siihen.