%;;;eval$s=%q(eval((%w(m="npuj{1}g{~k01ghz}0x|jjY
Y1zupasuzwc1;~40l0m1Uezlz1ssf f30z2z0kkt|^uusunt
thobbyw2omwiiqqy1rr~0u02 wyy012T32~y3zzvvw
w20xx2J;3||3322}}1Kg 0dq<4v2=4Uv>L4~V[[nLn
?LL42=W>5nk}KT80w ~k77W>8{8M8@6~8nk~8lk}?8u
Wddd;v}Xv0|{g]x JAx<]X=B }]|?B1<tK]{tgXKt
xJA]1AXvgXJ0B d{CCoN`0yu` 0eluyNm|MeYlw0e
DD^E3wOOPZ1 0FppVZzTG2je2` N`1auaiOOPEksZu
~ZHm0ZhMQ n[[3[yQRoVaVGlN ysy___b0|T`zwQs
@s@sznyP mzTGaSSf 1yowHul1jpVn0
p2`ciRR PIF0s3 s3MypzIi~
91:Q[n zIi~9` E3w 1p}sp: wHul1jpF
";69. times{m= m[2..].gsub ((57+_1
+_1/3 5).chr,m[0, 2])};e="\e[";f= ->i{e+"
48;2; #{i<1?"0;46;79 ":i<24?[ [320,71
9,255, 75],[92,97 ,- 13,165 ],[73,6
6,11,21 8]].m ap{ |s|s.i nject{_2
-_1*i/15}} *?;:"24 7;251;252
"}m"};g=->i{e+[ 38,2,i,i,i]*?;+ ?m};S=->n{
sleep(n/1e2)}; 50.times{|i|t =i<1?"%%\b\b
"+g[255]:e+"9F ";441.time s{|x|t<<f[x%49
<i&&m[441+x]>?0 ?x/49 *20/9+2:0]+m[x].t
r("0-8","\s|_/.( )"<<92<<?-<<92);x%4
9>47&&t<<?\n};$><< t;S[i%49<1?150:6]};([e+?
A]*9+(s="%;;;eval$s=%q(#$s)#").lines).map{$><<_1;
S[5]};S[100];60.times{;$><<e+"31F"+f[0]+g[255-_1*
3]+s . gs ub (? \n ,e+
"E" );S[1]} ;S[ 100 ] ;x= 1 599;m [882..]
.byt es{| b|$ ><< e + (b+ 17).
chr;S[2 ];s [x+ =[- 5 0, 50 ,1,-1][b% 4]]
==? \s&& $><< f[ x/5 0 ] +"\s
\b"};S[100];puts(e+?m)#)*'').gsub(/\e.*?m/,'')))#
-
-
Save mame/17832ce5deae324b4139d4481b88a389 to your computer and use it in GitHub Desktop.
STORES のロゴの Quine
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
# STORESのロゴのグラデーションを出すコード(RGBを3次関数で近似した) | |
#23.times do |i| | |
# puts "\e[48;2;%d;%d;%dm \e[m" % [[324,664,170,61],[92,79,-25,166],[73,52,3,218]].map{|s|a=0;s.map{|c|a=c-a*i/15};a} | |
#end | |
# カーソルの動き | |
move = "k" * 29 + "h" * 18 + | |
# logo | |
"h.khj.hh.jhk.hhljh.hjhk.hhjlh.ljhhkhjk.hjjlhkh.hjljkh.hhljlh.jhkh.hjljkh." + | |
"hhljljkh.hhljljkh.hhljljkh.hhljljkh.hhjllh.jhlllhh.jlllhh.jlllh.ljlkj.kljll." + | |
"lll.lll.lll.lll.kljl.kllhk.lhhhl.klhh.hhh.hjlhh.jhkh.jhh.jh.jlhhhl.jlhhhl." + | |
"jhlllhh.jlllhh.jlllh.jllkj.lklj.lklj.kkljl.kljl.lkhkljl.kljkl.hklljl.kkljl." + | |
"kkljl.kkhljl.kkhhlljl.klkh.hhllklh.hhllklh.hhlklh.khjhhlk.hhkhj.hkhj.hkhj." + | |
"hkhj.hkhj.hkhj.hkhj.hkjjhk.hhjhll.jhll.jlkl.jkll.lklj.kll.lkll.lk.khhlllh." + | |
"khllh.klhhhl.klhh...." + | |
"hj" * 21 + "h" + | |
# S | |
"hhh.hjh.ljl.llj.lhj.hhh.h" + | |
"llllllklkkk" + | |
# T | |
"lll.llh.hjh.ljh.ljh.ljh" + | |
"lklklklklll" + | |
# O | |
"hjh.ljh.ljh.ljl.lll.klk.hlk.hlh.khh" + | |
"lllll" + | |
# R | |
"ljh.ljh.ljh.ljh.kk.lkk.lll.ljl.jhh.hhl.ljl.jl" + | |
"kklkkl" + | |
# E | |
"ljh.ljh.ljh.ljh.kk.lkk.ll.ll.hhj.hj.ll.hj.hj.ll.l" + | |
"lkkkklklllllj" + | |
# S | |
"hhh.hjh.ljl.llj.lhj.hhh.h" + | |
"llllljllll.............." | |
# BPEで圧縮 | |
move = move.tr(".kjlh", "@ABCD").gsub("@", "") | |
a = <<'END' | |
. _ .___ | |
| . . __ _|_ _|_ _ . _ | . . ._ | |
| | | (_ | | / \ |/ |-- | | | \ | |
\_/ \_| __) \_ | \_/ | | \_| | | | |
END | |
b = <<'END' | |
# | |
########## ## | |
##################### #### | |
########################## ###### | |
################### ####### ######### | |
################ ######## ########### | |
############# ################# | |
########## ########### | |
###### | |
END | |
def compress(s) | |
126.downto(57) do |c| | |
next if c == 92 | |
h = Hash.new(0) | |
(s.size - 1).times do |i| | |
h[s[i, 2]] += 1 | |
end | |
h = h.invert | |
k = h[h.keys.max] | |
s = k + s.gsub(k) { c.chr } | |
#p [c, s.size, move.size] | |
end | |
s | |
end | |
# データ全部 | |
s = a.tr(" |_/.()\\-"<<92, "012345678").split.join + b.tr(" #", "01").split.join + move.tr("ABCD", "0123") | |
s_orig = s | |
s = compress(s) | |
# 展開のテスト | |
s_tmp = s | |
69.times{|i| | |
s_tmp = s_tmp[2..].gsub((57+i+i/35).chr){s_tmp[0,2]} | |
} | |
raise unless s_tmp == s_orig | |
# コード本体 | |
code = <<'END'.split.join.gsub("MOVE") { s } | |
m="MOVE"; | |
69.times{ | |
m=m[2..].gsub((57+_1+_1/35).chr,m[0,2]) | |
}; | |
e="\e["; | |
f=->i{e+"48;2;#{i<1?"0;46;79":i<24?[[320,719,255,75],[92,97,-13,165],[73,66,11,218]].map{|s|s.inject{_2-_1*i/15}}*?;:"247;251;252"}m"}; | |
g=->i{e+[38,2,i,i,i]*?;+?m}; | |
S=->n{sleep(n/1e2)}; | |
50.times{|i| | |
t=i<1?"%%\b\b"+g[255]:e+"9F"; | |
441.times{|x| | |
t<<f[x%49<i&&m[441+x]>?0?x/49*20/9+2:0]+m[x].tr("0-8","\s|_/.()"<<92<<?-<<92); | |
x%49>47&&t<<?\n | |
}; | |
$><< t; | |
S[i%49<1?150:6] | |
}; | |
([e+?A]*9+(s="%;;;eval$s=%q(#$s)#").lines).map{$><< _1;S[5]}; | |
S[100]; | |
60.times{ | |
; | |
$><< e+"31F"+f[0]+g[255-_1*3]+s.gsub(?\n,e+"E"); | |
S[1] | |
}; | |
S[100]; | |
x=1599; | |
m[882..].bytes{|b| | |
$><< e+(b+17).chr; | |
S[2]; | |
s[x+=[-50,50,1,-1][b%4]]==?\s&&$><< f[x/50]+"\s\b" | |
}; | |
S[100]; | |
puts(e+?m) | |
END | |
# コードのテンプレート | |
tmpl = <<'END' | |
%;;;eval$s=%q(eval((%w(########################## | |
############################# ################## | |
######################## ################# | |
#################### ##################### | |
################# ######################### | |
############### ######## ################ | |
############# ########### ############### | |
########### ############## ############### | |
######### ############### ############### | |
######## ######## ############# | |
####### ###### ######### | |
###### ###### ### ###### ######## | |
##### ######## ########### ####### | |
##### ########### ############### ####### | |
##### ############## ######## ####### | |
###### ########## ## ###### ####### | |
####### ##### ### ###### ######## | |
########## ####### ######### | |
############### ############### ########## | |
############## ############# ############ | |
############## ########## ############## | |
############### ##### ################# | |
################ ################### | |
################## ######################## | |
################################################# | |
################################################# | |
#### # ## ## ## ## ### | |
### ####### ### ### # ### # ##### ####### | |
#### #### ### ### # # ### #### | |
####### ### ### ### # ## ## ######### ### | |
### #### #### ## ### # # #### | |
#######################)*'').gsub(/\e.*?m/,'')))# | |
END | |
# 出力 | |
puts tmpl.gsub!("#") { code << "#"; code.slice!(0, 1) || "#" } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment