どう書く?

http://ja.doukaku.org/13/nested/
http://shinh.skr.jp/m/?date=20070707#p04
一番普通だと思う、%sと%cを使う方法で書いてみた。

irb(main):004:0> $><<("He"+"%s"*2+", w"+["%c"]*(6/3)*"r"+"d!")%["l"*(8/4),"o",?p-1,?g+5]
Hello, world!=> #<IO:0x294e758>

本当にできてるのか怪しいので証明。

irb(main):006:0> a='$><<("He"+"%s"*2+", w"+["%c"]*(6/3)*"r"+"d!")%["l"*(8/4),"o",?p-1,?g+5]'.scan /\w/
=> ["H", "e", "s", "2", "w", "c", "6", "3", "r", "d", "l", "8", "4", "o", "p", "1", "g", "5"]
irb(main):007:0> a.uniq == a
=> true

何使ったのかなあ。

irb(main):008:0> a.sort
=> ["1", "2", "3", "4", "5", "6", "8", "H", "c", "d", "e", "g", "l", "o", "p", "r", "s", "w"]


追記:一応解説。元になったコードはこれです。

$><<"He%s%s, w%cr%cd!"%["ll","o",111,108]

まず%sとlをString#*で。

$><<("He"+"%s"*2+", w%cr%cd!")%["l"*2,"o",111,108]

"%cr%c"はArray#*を使う。

$><<("He"+"%s"*2+", w"+["%c"]*2*"r"+"d!")%["l"*2,"o",111,108]

適当に2を複数作る。

$><<("He"+"%s"*2+", w"+["%c"]*(6/3)*"r"+"d!")%["l"*(8/4),"o",111,108]

111と108を?character+nで作る。

$><<("He"+"%s"*2+", w"+["%c"]*(6/3)*"r"+"d!")%["l"*(8/4),"o",?p-1,?g+5]

できたー。


追々記:http://ja.doukaku.org/comment/298/を勝手にパクらせてもらいました。

$><<"He"+('l'*(?B/?!)+'o, wr').gsub(/(.)(.)(.)(...)(.)/){$1+[$2]*(?a/?.)*([$3]*(?D/?")*$4+$5)}+"d!"