最近のあなごる sed 編

sed はいいよね、と思い出した。んで主に sed でちょっと複雑なことしてるものを。最近どの問題見てもまず sed で解くには…とか考えてる気がする。なんていうかただ解くだけでそれなりにカタルシスが得られて良いです。

http://golf.shinh.org/p.rb?LCS#sed

問題文を一部流用するという話。

1h
1d
/B/s/....\(.\{32\}\)/\1/
/a/{x
s/aa/a/
s/ar/a/}
/A\|a/!s/\(.\{51\}\).*/\10100001000001010011010000101000001100000000001111110001001000010101010011001011000111101010000010001101111/
  • transpose.sed

http://golf.shinh.org/p.rb?transpose+lines#sed

行と列を入れ替える問題。 emokenさんに1B負けてる。まーちょっと冗長な気はする。

H
${:l
g
s/\n\(.\).*/\1/gm
p
x
s/^.//gm
x
tl}
d

http://golf.shinh.org/p.rb?show+the+way#sed

あまり解いた覚えがないのだけど、普通に回答埋め込みぽい。これも emoken さんに負けてるなぁ。

s/3/ABC/
s/6/BADCBA/
s/9/DABADCBAB/
s/A/right\n/g
s/B/bottom\n/g
s/C/left\n/
s/D/top\n/g
q

http://golf.shinh.org/p.rb?FizzBuzz#sed

1-100を表示するのだけど、3の倍数はFizzに、5の倍数はBuzzに、15の倍数はFizzBuzzに変える、という問題。 sed でカウンタ作るのは 昔思ってたより はるかに簡単だなぁとい話。倍数の判定はカウンタとは別に ;;;; みたいなのをどんどん増やしていって、この数で判定している。

s/$/@Z;1234566789@01/
:l

s/\(.\?\)@\(.*;.*\1\(.0*\)\)/\3\2/
tl

h

/Z\(;;;\)*1/s/../FizzZ/
s/[^z]*Z\(;;;;;\)*1/BuzzZ/
s/Z.*//

p
g
/00/d
s/Z/@Z;/
bl

http://golf.shinh.org/p.rb?judge+Janken#sed

ジャンケンの判定問題。ボロ負け。まぁこの問題は回答埋め込みだろうなぁ。

s/P[^ ]*/5/g
s/Guu\|Rock/0/g
s/[A-z]\+/2/g
s/5 2\|2 0\|0 5/</
s/\(.\) \1/=/
s/...*/>/

http://golf.shinh.org/p.rb?delete+duplicate+lines#sed

重複行を取り除く問題。最初大差ついてたのに負けてるなあ。

G
/^\(.*\)\n.*\1/d
s/\n.*//
H

http://golf.shinh.org/p.rb?palindromize

はもうちょい様子見ますか。

む、 Perl の方 ySas さんが追い付いてるってことは同じ回答かな。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h