nervの模様のコードを作ったよ！

# TL;DR
quine作った！
ちなみにこのコードは動きます、試してみてね！
```ruby
                           eval(
                      (%w(1.upto
                    (18)do|i|s=i
           ;if      (i==1);s="A  DAM"elsi
             f(     i==2);s="LILITH"elsif(i
               ==3);s="SACHIEL"elsif(i==4);s=
                 "SHAMSHEL"elsif(i==5);s="RAMIE
                  L"elsif(i==6);s="GAGHIEL"els
      if(i    == 7);s="ISRAFIL"elsif(i==8);
       s="SA  N  DAL  PHON"elsif(i==9);
       s ="MATA  RAEL"elsif(i==10);s="SA
       H   AQUI  EL"   e  lsif(i==11);s="
       I     RE  UL"e   ls  if(i==12);s="L
  EL             IEL"elsif(i==13);s="BARDI
  EL"            els   if(i==14 );s="ZERUEL
                 "els if(   i==15 );s="ARAE
    L"           elsif(i=     =16); s="ALMIS
     AE          L"e   lsif     (i=   =17);
       s         ="TA   BLIS           "els
       e;s                               ="
          LI                         LIN
              "                  e nd
                 ; pu t   s (s)en
                    d)*"" ))
```


## なぜ作ったか
https://amzn.to/3adgnaF の本を読んで、自分でも作れるかなと思い、ちょうどハマっていたエヴァのnervマークがピッタリだとビビっときたので本書の演習を真似て作ってみた。


## 仕組み
quineという実行すると自身のソースコードを出力するプログラムを書いたものです。
```ruby
art = <<END
                           #####
                      ##########
                    ############
           ###      ###########  ########
             ##     #######################
               ##############################
                 ##############################
                  ############################
      ####    ## ##########################
       #####  #  ###  #################
       # ######  #######################
       #   ####  ###   #  ###############
       #     ##  ####   ##  ##############
  ##             #########################
  ###            ###   ######## ###########
                 #### ###   ##### #########
    ##           ########     ##### ########
     ##          ###   ####     ###   #####
       #         ####   ####           ####
       ###                               ##
          ##                         ###
              #                  # ##
                 # ## #   # #####
                    ##### ##
END

main = <<END
eval((%w(
  1.upto(18) do |i|
    s = i;
    if (i == 1);
      s = "ADAM"
    elsif (i == 2);
      s = "LILITH"
    elsif (i == 3);
      s = "SACHIEL"
    elsif (i == 4);
      s = "SHAMSHEL"
    elsif (i == 5);
      s = "RAMIEL"
    elsif (i == 6);
      s = "GAGHIEL"
    elsif (i == 7);
      s = "ISRAFIL"
    elsif (i == 8);
      s = "SANDALPHON"
    elsif (i == 9);
      s = "MATARAEL"
    elsif (i == 10);
      s = "SAHAQUIEL"
    elsif (i == 11);
      s = "IREUL"
    elsif (i == 12);
      s = "LELIEL"
    elsif (i == 13);
      s = "BARDIEL"
    elsif (i == 14);
      s = "ZERUEL"
    elsif (i == 15);
      s = "ARAEL"
    elsif (i == 16);
      s = "ALMISAEL"
    elsif (i == 17);
      s = "TABLIS"
    else;
      s = "LILIN"
    end;
    puts(s)
  end
  )*""))
END

main = main.split.join

main = art.gsub("#") { main.slice!(0, 1) }

puts main
```
画像をビットマップに変換するライブラリ（名前をど忘れした）を使って変換した後に、文字列を＃に置換して、その部分に動作するコード（文字数を合わせる必要があったような...１年位前に作ったので覚えていませんが）を置換していきます。

このquineを生成するコードを実行すると冒頭のアレができるというわけです。もっとくわしく知りたかったら著者の遠藤さんの解説ページがあるので見てみてください。

## すごいquineたち
- 50言語リレーquine
![blogNewImage110.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648231/7d34e884-e99e-0bc4-5f26-68eb0a189457.png)

- 山手線quine
実行すると、東京からスタートして、次の駅に表示が変わっていきます。
https://github.com/mame/yamanote-quine
```ruby
n=0;eval$S=%w!d="2-,<'%*+D-)+4?>F*(>,%'&<9M&(%-9)%},;'+'E}
,'-BB+(1+9,JJS.;z,33&/&)HH,,&dys%3}5,),(+@@&*&5&}2%&6(*81(
(&,&m-4477%+=*0)0,'*$,0}++$)&-/.+*$}&.&E%$($$$*$'}#}|%$%|,
$-$+0<}|+?)'lQ(Rr%XWD&l>`4.&;k5;d6qU-L;J8-*qjU1x11.&^1.B7/
?L.7/6/%98}1r//?L[4[;S8C?,/~d.dz~A(AAmzAm.+-,ED}ND5;+DI}%Q
%>RR**c)S+HL5(<</4(&G<<d}5+I@=AV%Py/+%~-/T-/*wi,v/R(1I==j+
V~c'18(&A%8P/s=@[)N}1s1~x/*J  *@)Lh18&;vL,'r.^W/h'>k'X<)'g
_l.^ER3W<)8h<)3F,l_b.b8+U*XU  )l;/=2'^K~(:2(:2,*}+2()F,*}+
Kw+Kw+Kw+2                                      ,*F%#DN-})
Z*/,(R^*^Q5<5%,1;)/7(&yN+#&G  *O@*#OOO#h3W.j);~#U6U6j);]3?
?YYHL?3r[Chz&2+/2+j%z22.K.%,  p2WK9kKx2:(2T(2}L(.B#&Q^rG^*
i'/-#1.-'#/61x/x                          ~11%;ZCC5&9]9S*~
#h*aJZLNC4[CZM3G  (_GyGGG+3)  `4F&9E4ZMO  @oOo3?)&1C(b*I1^
%/71<S*'49&?Wupn  u&;W4>;W'?  )'l.v}8g(Y  YY>)1b%,9R(1YYY;
?i/R+/+qTIT&A&'3                          Z~MOoWu`4ErP1'I1
x14[/61I'i'/%3<M  W#6/+',9+1  ':H87.EC?,  1_q@*1G.:8+%W2Wm
#ND&l>`CC]&1#3-3  -[gN//71.1  8'F>#[4]3#  n5)ET8P..7/YHE~y
/f.f}N,8b8@''IrU                          J9L#6/6/+<L#6/+2
/+-)L+-.b._//5Z%[(nQ&>3,.C      &'7/6*%G(6:V2*~1D'>)1)M2'~
/-1r5?R(#1I1Ic9?+4(&b%&Q  *8  //  8h*&PN+&f1/-'8h'8#h*JZ;[
C8Hi1*P6-2G{*PDs5)i'c,  ?:~'  c,&>  *WP.d.69Q?Q.^E4r&1(WP#
.:+)k%::2:(KQ5Lma)Z+  49_;6*  @9;*@9  ;*3_&T.P2::%:dAA4&?p
aJ;Za;ZaJo3l&T~&y5  ;#TIT5;T  &',&>]>?  YL?39`C3Zp*#aJW<p*
#aJW#<n4[43pFe    7tete7t3^M  )Q>)/5+}H.    -',):<)R*Q&T;`
u)'GX../HF    'gLlsR1P8+%;?1  ~%/h*#/6RA#I:I    :gcQ.+Xsv}
sX+'v}+1%:N#:8d..F,&1E'R'(Q/  T&A-QQ%Q+Q*%:-*2'(wQ%(-%XP{i
A1i1)Fz&1~%&A,M+4X&b%&IE1..1E*&PN+&f&1-[C?`CC4F,8*.U*ATwG%
wGn5?*%.,_>K.K);#K6j);#K6K);K15;'43(?,19Q,*R_+X&{Ng>`4ZMOo
@o8[A8:.x/i)F1Fv&f%N(E-*.qc~1s#/6.-95f&1-[41H8/?<*3^b/11%=
2'DD%1DDUDw%,(}82}>+~2*A2*A2  j+,5*AcA'};6*%);*%.*%/,>/Mk2
#.K1-K^22GKX*KD*2A-)L+-/i'c}  W}#+N9?8:}/}+#6P673<&>%&y&^%
n-k51{6+m+#GU#6U6,&>/~#+N+;S  ],`C4F&9ECZMO@oO@o]?F7tR%.}Q
p_1E*9SE[Z                                      ~F7t8*9S=J
3FFeB7teB7t]3FFe7R,FX%&IE1..1E*n6%fs='8//8'3?,KT*2AN)p4;Zu
L./?L./?L(._/>3,::1-*-'K-+A-K:-K_?)*;)/5+}.B5>'B/1-5>+%P2+
PkF+qPq5>*gA%V+Ac%                      ,/>])`#CCF>#CCM,[C
&G<?~#I:#I:(<?#I:I  +)Z:8:L?]z/->)T.-A  .m+.m+~.d59+T'd-cR
//)M%.1H+'8,F(/B1H  /E'>k'b+'v}+X#k~AA  (AA}5AA(Agd9k+V%)L
2+#I:P-X+T(-+};+z'  (&PN+L).'bm**:G(RA  (.d./<L#6/q/%9L~q/
%9L%JE'H)&;3n?,19Q  ,*R_+X&{Ng>`4Lp4>9  (/G5SG(/G8*9S=J'&2
(.61(O%PyP#fT-fT-f                      *Dc))f+R*2*x%jA#UG
U.>5'_.^]?&9~#V'#V'V'5&9~#V'  #V'5&9]eB5?K-:{%:+g:+RP65?I~
:+':%;?j*.B7M)/1b+==(/PL,AN4  MFet]9`Cu,1;X,*^'G.:&KnD&lF~
MOoWu`u2}+,12}v%<X:D  {)%5A-  %X<)    %D,QR)*j+-+<5U::,Rm;
5)Q1%6(A";88.times{|  i|d=i=  =31?d.gs  ub(?~){$'[0,3]}.gs
ub(?#){$'[0,2]}:d.  gsub(""<  <123-i,d[0  ,z=i/82+2])[z..-
1]};i=j=-k=b=1;d  .bytes{|c|  d=b+=b+k^=c&  1};c=33.chr;n=
($*[0]?n-1:n    +1)%30;n==25  &&ENV["NO_TGW"  ]&&n=($*[0]?
n-1:n+1)%30;0.upto(n%30)      {k=(c*58<<10)*m=b%4*23+30;b/
=4;9.step(m,23){|m|i+=v=b%2;760.times{|p|k[p%38+(p/38+m)*5
9-226]=""<<d[249+(v<1?b/2%64:i)*380+p/2]+32};b>>=7-v*6}};p
uts((c*58<<10<<k<<c*54).gsub(c){"n=#{n};eval$S=%w#{c+$S[0,
2680]*9}"[j+=1]}+c+"*''")#d="2-,<'%*+D-)+4?>F*(>,%'&<9M&(%
-9)%},;'+'E},'-BB+(1+9,JJS.;z,33&/&)HH,,&dys%3}5,),(+@@&*&
5&}2%&6(*81((&,&m-4477%+=*0)0,'*$,0}++$)&-/.+*$}&.&E%$!*''
```

## 最後に
最後まで読んでくれてありがとうございます！
quineに少しでも興味を持っていただけたら嬉しいです。

## 参考にした文献
- 「あなたの知らない超絶技巧プログラミングの世界」 遠藤 侑介著　　https://amzn.to/3bPfK7t
- 上の本のオンラインソースコード（著者公開のもの）https://github.com/mame/trance-book/