Last active
January 2, 2021 10:00
-
-
Save tompng/fc18db09114f4e3ba52de593303b8580 to your computer and use it in GitHub Desktop.
s1: png viewer
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
out.rb | |
tmp.rb | |
*.png |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
HEADER | |
X=%( | |
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | |
aaaaaaa------------aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | |
aaaaaaa--------------aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | |
aaaaaaa---aaaaaaaa----aaaaaaaaa---aaaaaaaaaa---aaaaaaaaaaaaaaaaaa | |
aaaaaaa---aaaaaaaaa---aaaaaaaaa---aaaaaaaaaa---aaaaaaaaaaaaaaaaaa | |
aaaaaaa---aaaaaaaa----aaaaaaaaa---aaaaaaaaaa---aaaaaaaaaaaaaaaaaa | |
aaaaaaa--------------aaaaaaaaaa---aaaaaaaaaa---aaaaaaaaaaaaaaaaaa | |
aaaaaaa------------aaaaaaaaaaaa---aaaaaaaaaa---aaaaaaaaaaaaaaaaaa | |
aaaaaaa---aaaaaaa---aaaaaaaaaaa---aaaaaaaaaa---aaaaaaaaaaaaaaaaaa | |
aaaaaaa---aaaaaaaa---aaaaaaaaaa---aaaaaaaaaa---aaaaaaaaaaaaaaaaaa | |
aaaaaaa---aaaaaaaaa---aaaaaaaaa---aaaaaaaaaa---aaaaaaaaaaaaaaaaaa | |
aaaaaaa---aaaaaaaaaa---aaaaaaaa----aaaaaaaa----aaaaaaaaaaaaaaaaaa | |
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa--------------aaaaaaaaaaaaaaaaaaa | |
aaaaaaaaaaaaaaaa------------aaaaa------------aaaaaaaaaaaaaaaaaaaa | |
aaaaaaaaaaaaaaaa-------------aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | |
aaaaaaaaaaaaaaaa---aaaaaaa---aaaaaaaaa---aaaaaaaaaaaaa---aaaaaaaa | |
aaaaaaaaaaaaaaaa---aaaaaaaa---aaaaaaaaa---aaaaaaaaaaa---aaaaaaaaa | |
aaaaaaaaaaaaaaaa---aaaaaaa---aaaaaaaaaaa---aaaaaaaaa---aaaaaaaaaa | |
aaaaaaaaaaaaaaaa------------aaaaaaaaaaaaaa---aaaaa---aaaaaaaaaaaa | |
aaaaaaaaaaaaaaaa---aaaaaaa---aaaaaaaaaaaaaa----a----aaaaaaaaaaaaa | |
aaaaaaaaaaaaaaaa---aaaaaaaa---aaaaaaaaaaaaaaa-----aaaaaaaaaaaaaaa | |
aaaaaaaaaaaaaaaa---aaaaaaa----aaaaaaaaaaaaaaaa---aaaaaaaaaaaaaaaa | |
aaaaaaaaaaaaaaaa-------------aaaaaaaaaaaaaaaaa---aaaaaaaaaaaaaaaa | |
aaaaaaaaaaaaaaaa------------aaaaaaaaaaaaaaaaaa---aaaaaaaaaaaaaaaa | |
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa---aaaaaaaaaaaaaaaa | |
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa---aaaaaaaaaaaaaaaa | |
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | |
) | |
puts %(HEADER) | |
deflated = Zlib.deflate(C) | |
unpacked = deflated.unpack('C*') | |
num = unpacked.reverse.reduce{|a,b|a*256+b} | |
target_size = X.join.size-X.join.count('-') | |
padnummax = ((26**target_size-num) / 256**unpacked.size).floor | |
padnummin = ((26**(target_size-1)-num) / 256**unpacked.size).ceil | |
paddednum = num+rand(padnummin+1..padnummax)*256**unpacked.size | |
encoded = paddednum.to_s(26).tr('0-9','q-z') | |
raise if encoded.size != target_size | |
i=0 | |
puts X.map{|s|s.gsub(/\s/){encoded[(i+=1)-1]}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
X=[];class String def-@;replace ?-+self end;def-a;X.reject!{|x|x. | |
__id__==__id__};a.replace(self+?-+a) end end;at_exit{eval C=(Zlib | |
.inflate((X*?-).tr(?-,'').tr('q-z','0-9').to_i(26).digits(0x100). | |
pack'C*'))};require'zlib';def method_missing n;(X<<n.to_s)[-1]end | |
ztwzbagvtbsbyojmttiafafbdjmkdbygfohttafurguizydrgifwdbsoulxomgvea | |
hndkgdtkdgeuryfkvwjfnvrechepnknxnzwcbddllroogkvvzifqdfllcfmhrlvkt | |
bvcx------------fwrmfv----nzbmudfizwwa---vzykbye-----------achbde | |
whtb--------------zfng------sahhldmxio---jsvut--------------mmxdd | |
hjdp---mchojmkf----xvs-------tdndgtmgq---noju----grranlops---qcjo | |
eaku---bynpxutou---pfh---w-----olzctgm---ojsm---mzhhsepzpqkgpymse | |
helk---tclimsho----zli---pqz----cifbcy---hsji---syxjpvdqfacwhduct | |
gkfl--------------hvon---rvdm-----figb---zhmo---ixogggkw-----juzk | |
vvxk------------wqnkek---gszpkc----mtj---icyq---dzsjabuj-----fopt | |
gprb---aekauqcyecbhjgv---nacrxaz-----v---kust---sgsubiedvne--qhbu | |
ynmc---jlwguemimbiuobo---xvbsddmmq-------aukk----bgplfmqjzu--jufj | |
hpkp---ndxaxvinviafkqp---lonuvusvlg------bjgkr---------------fbrn | |
khax---itlqdqnhjdycesq---vupvffojgjnr----dwekldy------------lhmfs | |
laaplmfnexdlhpotbkwsbzmstjdhpsrbddoagwbhbrwrxvlivdfhsbvfbqrgvcknv | |
bhenfjikzxurfogsejmdfyyctsxcfpgqegkhbnqxlwuwsohbqqvgdobnfxnukzmbz | |
uwnkiudkyxsijnaniagrlgheleosnxaoguxqczdjplugydbshancwimrxwqgkpkdj | |
mrm--whmznb--noi----cts------uf--chbp-slth--ph------boz------iakk | |
mdv--ycwdqi--mrqe--ucwm--fpuqqg--wtx---onu--hs--etpwcpx--kac--vzm | |
xhgn--avaq--awwel--kmvi--lyurxb--xlf---wyp--jo--srydkbf--ncd--xxd | |
nond--ozsw--qmiyw--qzcu--dogqebb--c--f--n--sot--kvxzrbx--gox--bsz | |
fzepq--qr--fqlsuw--ctwt------ktu--v--a--z--lsb------znt------bpks | |
ebjov--ky--ktdphl--ujxl--zdecfed--h--t--b--idp--johnxab--hl--gnig | |
rrrhfb----oxvmhho--wmpk--bdinczqe---qsh---chrr--jdypqpk--kse--zph | |
umiaek----tkkcnlg--bigy--coragcyk---uup---bizr--dqednzj--csqq--kg | |
neexssf--hgdywbe----bcf------gjgvb-ohuii-iwoyl------mgn--xbix--nf | |
fcefcbvhtqyscbujahldyaqzvhhhbhorytwogyawucgwozordzerntkcuvjmlffwx | |
asusogwlffjpmxhjiafqvsoccbxwoiqtjpwbvvxyxozihakazgmzwnklbunuzxeqo |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'zlib' | |
HEADER=<<-CODE | |
X=[];class String def-@;replace ?-+self end;def-a;X.reject!{|x|x. | |
__id__==__id__};a.replace(self+?-+a) end end;at_exit{eval C=(Zlib | |
.inflate((X*?-).tr(?-,'').tr('q-z','0-9').to_i(26).digits(0x100). | |
pack'C*'))};require'zlib';def method_missing n;(X<<n.to_s)[-1]end | |
CODE | |
raise 'argv[0] should be an existing filename' unless ARGV[0] && File.exist?(ARGV[0]) | |
type, *shape_and_codes = File.read(ARGV[0]).lines | |
shape_and_code = shape_and_codes.join | |
SHAPE = shape_and_code.match(/X=%\(([^)]+)\)/)[1].strip | |
CODE = shape_and_code.gsub(/X=%\([^)]+\)/,'').gsub(/HEADER/,HEADER) | |
deflated = Zlib.deflate(CODE) | |
unpacked = deflated.unpack('C*') | |
num = unpacked.reverse.reduce{|a,b|a*256+b} | |
target_size = SHAPE.count('a') | |
raise "overflow #{num.to_s(26).size} > #{target_size}" if target_size < num.to_s(26).size | |
padnummax = ((26**target_size-num) / 256**unpacked.size).floor | |
padnummin = ((26**(target_size-1)-num) / 256**unpacked.size).ceil | |
srand 0 | |
10.times{ | |
paddednum = num+rand(padnummin+1..padnummax)*256**unpacked.size | |
encoded = paddednum.to_s(26).tr('0-9','q-z') | |
i=0 | |
output = Object.const_get(type.scan(/[A-Z0-9]+/)[0])+SHAPE.gsub(/a/){encoded[(i+=1)-1]} | |
p num.to_s(26).size.fdiv target_size | |
p [output.delete(' ').size, output.size, output.lines.size] | |
next if output =~ /-pp?-/ | |
File.write('out.rb',output+"\n") | |
exit if `ruby -c out.rb` =~ /Syntax OK/ | |
} | |
raise 'failed' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
HEADER | |
X=%( | |
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | |
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | |
aaaa------------aaaaaa----aaaaaaaaaaaa---aaaaaaa-----------aaaaaa | |
aaaa--------------aaaa------aaaaaaaaaa---aaaaa--------------aaaaa | |
aaaa---aaaaaaaa----aaa-------aaaaaaaaa---aaaa----aaaaaaaaa---aaaa | |
aaaa---aaaaaaaaa---aaa---a-----aaaaaaa---aaaa---aaaaaaaaaaaaaaaaa | |
aaaa---aaaaaaaa----aaa---aaa----aaaaaa---aaaa---aaaaaaaaaaaaaaaaa | |
aaaa--------------aaaa---aaaa-----aaaa---aaaa---aaaaaaaa-----aaaa | |
aaaa------------aaaaaa---aaaaaa----aaa---aaaa---aaaaaaaa-----aaaa | |
aaaa---aaaaaaaaaaaaaaa---aaaaaaa-----a---aaaa---aaaaaaaaaaa--aaaa | |
aaaa---aaaaaaaaaaaaaaa---aaaaaaaaa-------aaaa----aaaaaaaaaa--aaaa | |
aaaa---aaaaaaaaaaaaaaa---aaaaaaaaaa------aaaaa---------------aaaa | |
aaaa---aaaaaaaaaaaaaaa---aaaaaaaaaaaa----aaaaaaa------------aaaaa | |
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | |
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | |
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | |
aaa--aaaaaa--aaa----aaa------aa--aaaa-aaaa--aa------aaa------aaaa | |
aaa--aaaaaa--aaaa--aaaa--aaaaaa--aaa---aaa--aa--aaaaaaa--aaa--aaa | |
aaaa--aaaa--aaaaa--aaaa--aaaaaa--aaa---aaa--aa--aaaaaaa--aaa--aaa | |
aaaa--aaaa--aaaaa--aaaa--aaaaaaa--a--a--a--aaa--aaaaaaa--aaa--aaa | |
aaaaa--aa--aaaaaa--aaaa------aaa--a--a--a--aaa------aaa------aaaa | |
aaaaa--aa--aaaaaa--aaaa--aaaaaaa--a--a--a--aaa--aaaaaaa--aa--aaaa | |
aaaaaa----aaaaaaa--aaaa--aaaaaaaa---aaa---aaaa--aaaaaaa--aaa--aaa | |
aaaaaa----aaaaaaa--aaaa--aaaaaaaa---aaa---aaaa--aaaaaaa--aaaa--aa | |
aaaaaaa--aaaaaaa----aaa------aaaaa-aaaaa-aaaaa------aaa--aaaa--aa | |
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | |
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | |
) | |
def method_missing*;super end | |
require'chunky_png' | |
raise'ARGV[0]: no file'if !File.exist?(i=ARGV[0].to_s) | |
i=ChunkyPNG::Image.from_file i | |
w,h=i.width,i.height | |
s=[h/42.0,w/65.0].max | |
x=42.times.map{|y|132.times.map{|x|x=i[(x-66+w/s)*s/2,((y-21+h/s/2)*s).to_i]rescue nil | |
x ?((x/256).digits(256).sum/3)*(a=(x&0xff)/256.0)+256*(1-a)+rand*rand*100:0}} | |
z=x.flatten-[0] | |
z=[x.flatten.sort[2000],z.sum/z.size].max | |
s=x.map{|s|s.map{|s|z>=s ? ?a: ?-}*''} | |
z=Zlib.deflate(C).unpack('C*') | |
n=z.reverse.reduce{|s,n|s*256+n} | |
loop{e=(n+rand(((26**((t=s.join.count ?a)-1)-n)/256**z.size).ceil+1..((26**t-n)/256**z.size).floor)*256**z.size).to_s(26).tr('0-9','q-z').chars | |
c=(s.map{|s|s.gsub(?a){e.shift}}*$/).gsub(/pp/,'pP').gsub(/in/,'iN').gsub(/if/,'iF') | |
next if (e=c.scan /\w+/).any?{|c|method c rescue nil}||(e&%w|self true false nil|)[0] | |
begin | |
eval c | |
rescue SyntaxError | |
rescue | |
puts %(undef p;X=[];class String def-@;replace ?-+dup end;def-a;X.reject!{|x|x.__id__==__id__};a.replace(self+?-+a) end end;at_exit{eval C= | |
(Zlib.inflate (X*?-).tr(?-,'').tr('q-z','0-9').to_i(26).digits(256).pack'C*')};require'zlib';def method_missing n;(X<<n.to_s)[-1]end),c | |
exit | |
end} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment