Quine Scarf
A “quine” is a program that outputs its own source code, without using any form of external input. This is a program that is not a quine (see below), but looks pretty when knitted into a scarf:
This is not a traditional quine because:
- It doesn’t print its own source code in text form, but as an image. That was the whole idea behind the quine scarf contest where this was handed in!
- It cheats by reading its own source file – a no-go for proper quines!
However, it does avoid using image libraries and font files as external input. It comes with its own font and sets every pixel by hand. When run, the output looks like this:
Thanks a million to fbz for trying to send me a scarfed version of this, and no thanks to German customs who got suspicious about the package being a gift and sent it back to the US before I could resolve things… :(
To run it yourself, take the code and run:
perl quine.pl > quine.ppm
The .ppm
can then be opened in Photoshop or Gimp. Contents of quine.pl
:
$/ = ""; $P= "P". "1 "; open F,$0; $P.= "100". " 12". "00 "; $P.= "0 " x 120000; @C=qw/ 0000000000 0000fa0000 20c020c000 28fe28fe28 2454d65448 c4c8102646 6c92720c12 0020c00000 007c828200 0082827c00 1054385410 10107c1010 00020c0000 1010101010 0006060000 0408102040 7c8a92a27c 0242fe0202 468a929262 448292926c 182848fe08 e4a2a2a29c 3c5292920c 80808eb0c0 6c9292926c 6092929478 006c6c0000 006a6c0000 0010284400 2828282828 0044281000 40809a9060 7c829aaa78 0e34c4340e fe9292926c 7c82828244 fe82824438 fe92928282 fe90908080 7c8292945e fe101010fe 0082fe8200 0c020202fc fe10284482 fe02020202 fe403040fe fe201008fe 7c8282827c fe90909060 7c828a847a fe90989462 649292924c 8080fe8080 fc020202fc e0180618e0 f8061806f8 c6281028c6 c0201e20c0 868a92a2c2 00fe828200 4020100804 008282fe00 2040804020 0202020202 0000c02000 042a2a2a1e fe2222221c 1c22222222 1c222222fe 1c2a2a2a18 107e909040 102a2a2a3c fe1020201e 0020be0000 040222bc00 fe08081422 00fc020200 3e2018201e 3e1020201e 1c2222221c 3f24242418 182424243f 3e10202018 122a2a2a24 20fc222200 3c0202043e 300c020c30 3c020c023c 2214081422 300a0a0a3c 22262a3222 10106c8282 0000fe0000 82826c1010 1020100810 54aa54aa54 /;$x=2;$y= 2; while() {for (split //) { next if /\n/;$J=ord ($_)-32;$D= $C[$J];for( unpack("(A". "2)*",$D)){ $T=1<<8;for ($Z=0;$Z<8; $Z++){$Q= 14+($x+($y + $Z)*100) *2;substr ($P,$Q,1)= "1" if(hex $_)&$T;$T >>=1;} $x++;} $x++; if($x> 95){$x =2;$y +=8;}} print $P ; }
Computer Stuff
- Knob-Out
- The Wonders of Virtual Reality
- Quine Scarf
- Warum PHP Scheiße ist
- Proper PNG support even with MSIE
- Tiny Speech Synth in JavaScript
- „Anführungszeichen“
- IE crash in 11 bytes
- Abschied von MySQL
- More…
Blog
- Unit Arrr
- I just favican’t
- I consider myself more of a Renaissance man
- Zerosphere on Analogue Pocket
- Amiga Topaz 1.4, part 2
- Masto-DDoS
- Elementary, dear Teletext
- Amiga Topaz 1.4
- “UI” as in “utterly idiotic”
- new art: final and write-up
- More…