Skip to content

Instantly share code, notes, and snippets.

@mame

mame/README.md Secret

Created September 6, 2023 08:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mame/17832ce5deae324b4139d4481b88a389 to your computer and use it in GitHub Desktop.
Save mame/17832ce5deae324b4139d4481b88a389 to your computer and use it in GitHub Desktop.
STORES のロゴの Quine
%;;;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/,'')))#
# 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