>>862 pattern1とpattern2をそれぞれ"**\n**\n**", "--\n--\n--"だとすると、
linesすることで["**\n", "**\n", "**"], ["--\n", "--\n", "--"]というものが作れる(実際は配列じゃないけど便宜上)
["**\n", "**\n", "**"].zip(["--\n", "--\n", "--"])で返ってくるのは
[["**\n", "--\n"], ["**\n", "--\n"], ["**", "--"]]という配列の配列。
この大きな配列全体に対してcollect{|i| ... }すると、 i には["**\n", "--\n"]こういう配列が入る。
二回目のcollectや最初のjoinはこの小さい配列に対するもので、"**\n"と"--\n"から改行を取り除いた上でjoinして
"**--"こういう文字列にする。
これを繰り返して全体のcollectが済んだ時点で
["**--", "**--", "**--"]という感じの配列が返ってくるからjoin("\n")で間に改行を挟みながら連結すると
"**--\n**--\n**--"
**--
**--
**--
つまり
"**\n**\n**"
**
**
**
と
"--\n--\n--"
--
--
--
を横に連結したものが返ってくる、って寸法。