Language detail: sed
Coverage: 14.29%
|
number of '+' ratings |
contribution for coverage |
Unsolved challenges
- タブ区切りデータの処理 (Nested Flatten)
- LL Golf Hole 9 - トラックバックを打つ (Nested Flatten)
- 起動オプションの解析 (Nested Flatten)
- 文字列型日時ののN秒後時間取得 (Nested Flatten)
- echoクライアント (Nested Flatten)
codes
LL Golf Hole 8 - 横向きのピラミッドを作る
(Nested
Flatten)
1桁限定で72B。
1 2 3 4 5 6 7 8 9 10 11 | s/^/\n/
:a
y/987654321/876543210/
s/^/*/
P
/0/!ba
s/\n0//
:b
s/.//
p
tb
|
LL Golf Hole 5 - 最上位の桁を数え上げる
(Nested
Flatten)
Count down していく方が短くなりそう。 55B 。
1 2 3 4 5 6 7 8 | h
:
s/\n.*//
y/987654321/876543210/
s/^00/9/
G
h
/^0/!b
|
LL Golf Hole 7 - バイト数を読みやすくする
(Nested
Flatten)
81B。
1 2 3 4 5 6 | /^..\?.\?$/b
s/$/.0kMGT/
:a
s/\(.\)\(.\)..\...\(.\)/\1.\2\3/
ta
s/\(\...\).*/\1/
|
LL Golf Hole 6 - 10進数を2進数に基数変換する
(Nested
Flatten)
こっちのほうが短いですね。
1 2 3 | s/\(.*\) \+\(.*\)/echo "obase=\2;\1"|bc/e
t
s/.*/echo "obase=2;&"|bc/e
|
外部コマンドを使って楽するとこんな感じ。ほとんど単なるsh。
標準入力に「10」とか食わせると2進変換、「10 8」のように空白で区切って基数を付けるとその基数で変換。
1 2 | /\(.*\) \+\(.*\)/{s//echo "obase=\2;\1"|bc/e;b}
s/.*/echo "obase=2;&"|bc/e
|
無駄にsedで実装してみます。標準入力。2進のみ。
かなりダサいので誰か短くしてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #!/bin/sed -f
s/^/@/
:a
/@0\?$/{s///;b}
/[02468]$/s/.*@/0&/
/[13579]$/s/.*@/1&/
s/@/&#/
:b
/#1$/{
s///
ba
}
/#10/{s//5#/;bb}
/#11/{s//5#1/;bb}
/#12/{s//6#/;bb}
/#13/{s//6#1/;bb}
/#14/{s//7#/;bb}
/#15/{s//7#1/;bb}
/#16/{s//8#/;bb}
/#17/{s//8#1/;bb}
/#18/{s//9#/;bb}
/#19/{s//9#1/;bb}
/#[3579]/{
h
s/.*#\(.\)*/\1/
y/3579/1234/
G
/#.$/{s/\(.\)\n\(.*\)#./\2\1/;ba}
s/\(.\)\n\(.*\)#./\2\1#1/
bb
}
/#[02468]/{
h
s/.*#\(.\).*/\1/
y/02468/01234/
G
s/\(.\)\n\(.*\)#./\2\1#/
}
/#./bb
s/#//
ba
|
文字列の反転(括弧の対応を保存)
(Nested
Flatten)
文字列にコントロールコードが入っていないこと前提。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #!/bin/sed -f
:paren
s/(\([^][(){}]*\))/\x01\1\x02/g;
t paren
s/{\([^][(){}]*\)}/\x03\1\x04/g;
t paren
s/\[\([^][(){}]*\)\]/\x05\1\x06/g;
t paren
s/\x01/)/g;
s/\x02/(/g;
s/\x03/}/g;
s/\x04/{/g;
s/\x05/]/g;
s/\x06/[/g;
s/$/\n/
:reverse
s/^\(.\)\(.*\n\)\(.*\)$/\2\1\3/
t reverse
s/\n//
|
仲間はずれの判定
(Nested
Flatten)
「echo '111111' | sed -f nakama.sed 」や「echo '111211' | sed -f nakama.sed」のように使います。
1 2 3 4 5 6 7 | s/^\(.\)\1*$/homo \1/
t
s/^\(.\)\1*\(.\)\1*$/quasi-homo \1 \2/
t
s/^\(.\)\(.\)\2*$/quasi-homo \2 \1/
t
c hetero
|
ファイル内の重複行削除(後優先)
(Nested
Flatten)
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/sed -nf
H
x
s/\n\([^\n]*\)\n\1$/\n\1/
s/\n\([^\n]*\)\n\(.*\)\n\1$/\n\2\n\1/
x
${
g
s/^\n//
p
}
|
重複する要素を取り除く
(Nested
Flatten)
echo '314159265' | sed -f onlyunique.sed のように使います。
1 2 3 4 5 | s/$/#/
:loop
s/\(.\)\(.*\)\1\(.*\)$/\2\3\1/
t loop
s/#.*//
|
LL Golf Hole 5 - 最上位の桁を数え上げる
(Nested
Flatten)
標準入力。
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/bin/sed -nf
x
:a
s/$/0/
:b
p
G
/^\(.*\)\n\1$/b
s/\n.*//
/^9/{s//1/;ba}
y/12345678/23456789/
s/^0/1/
bb
|
LL Golf Hole 2 - 文字列に含まれる単語の最初の文字を大文字にする
(Nested
Flatten)
GNU sed版
1 | sed 's/\b./\U&/g'
|
GNU sedで確認しました。
1 2 3 4 5 6 7 8 9 10 11 | :a
/\<[a-z].*/{
s//\n&/
h
s/.*\n\(.\).*/\1/
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
H
g
s/\n.\(.*\)\n\(.\)$/\2\1/
b a
}
|
コマンドライン引数の取得
(Nested
Flatten)
最初の直感でsedでは絶対無理だと思ったのですが、卑怯な技を思いついたので書いて見ました。 GNU拡張とシェル、procファイルシステムの力で無理やり実現しています(互換性の保証無し)。 自己参照するので、ファイル名を固定する必要があります。 このソースではカレントディレクトリにshowargs.sedという名前で保存して ./showargs.sed a b c d などと実行します。 カレントディレクトリ以外から実行できるようにするためには--file=の部分を絶対パスに直してください。
1 2 3 4 5 6 7 | #!/bin/sed --file=showargs.sed
s%^.*$%sed -e 's/[[:cntrl:]]/ /g' /proc/$PPID/cmdline%
e
s/^.*sed --file=showargs\.sed .*showargs\.sed *//
s/ *$//
q
|
ポーカーの役判定
(Nested
Flatten)
その後、まじめにsedで書いてみました。こっちのほうがきれいかも。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #!/bin/sed -f
/^\([CDHS][A2-9TJQK]\)\{5\}$/!b
/\([CDHS][A2-9TJQK]\).*\1/b
/\(.\).\(\1.\)\{4\}/{
s/^/X/
}
s/[CDHS]//g
s/\([2468TQK]\+\)\([A3579J]\+\)/\2\1/g
s/\([2468TQK]\+\)\([A3579J]\+\)/\2\1/
s/\([3478JQK]\+\)\([A2569T]\+\)/\2\1/g
s/\([3478JQK]\+\)\([A2569T]\+\)/\2\1/
s/\([5-8K]\+\)\([A2349TJQ]\+\)/\2\1/g
s/\([5-8K]\+\)\([A2349TJQ]\+\)/\2\1/
s/\([9TJQK]\+\)\([A2-8]\+\)/\2\1/g
s/\([9TJQK]\+\)\([A2-8]\+\)/\2\1/
/[2-5]$/y/A2345/9TJQK/
/[6-9]$/y/A23456789/56789TJQK/
/[TJ]$/y/A23456789TJ/3456789TJQK/
/Q$/y/A23456789TJQ/23456789TJQK/
s/^\(.\)\1\1\1K$\|^.KKKK$/Four of a kind/
s/\(.\)\1\+//g
s/^$/Full house/
s/^.$/Two pair/
s/^..$/Three of a kind/
s/^...$/One pair/
s/^[A9]TJQK$/Straight/
s/^.....$/No pair/
s/^XATJQK$/Royal flush/
s/^X9TJQK$/Straight flush/
s/^X.....$/Flush/
|
アルファベットの繰り上がり
(Nested
Flatten)
codegolfに慣れている人はもっと格好良く書けるんだろうな、と思いつつ sed で succ 実装したよ記念。 sedは入力無いと動き始めないので、適当に改行でも叩いて下さい。 $ echo |./succ.sed 辺りでも可。 行の中身を捨てて「A」入れる :loop CV(=100)が終端なら抜ける。 終端を複製 終端にsucc loopに戻る
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #!/bin/sed -f
s/^.*$/A/
:loop
/CV$/q
s/[A-Z]*$/&,&/
:succ
:carry
s/Z\(_*\)$/_\1/
t carry
s/Y\(_*\)$/Z\1/
s/X\(_*\)$/Y\1/
s/W\(_*\)$/X\1/
s/V\(_*\)$/W\1/
s/U\(_*\)$/V\1/
s/T\(_*\)$/U\1/
s/S\(_*\)$/T\1/
s/R\(_*\)$/S\1/
s/Q\(_*\)$/R\1/
s/P\(_*\)$/Q\1/
s/O\(_*\)$/P\1/
s/N\(_*\)$/O\1/
s/M\(_*\)$/N\1/
s/L\(_*\)$/M\1/
s/K\(_*\)$/L\1/
s/J\(_*\)$/K\1/
s/I\(_*\)$/J\1/
s/H\(_*\)$/I\1/
s/G\(_*\)$/H\1/
s/F\(_*\)$/G\1/
s/E\(_*\)$/F\1/
s/D\(_*\)$/E\1/
s/C\(_*\)$/D\1/
s/B\(_*\)$/C\1/
s/A\(_*\)$/B\1/
s/,_/,A_/
y/_/A/
b loop
|
与えられた文字列でピラミッド
(Nested
Flatten)
\nをデリミタにしています。(\nh o g e) 1.1番目の項目を手前にコピー 2.ピラミッド一段上の形に合わせる 3.合わせたものが空白で埋まっていなければループ 最後に先頭の無駄な改行消してドン。
1 2 3 4 5 6 7 8 9 10 11 12 | #!/bin/sed -f
s/ //g
s/./ &/g
s/^ /\n/
:loop
s/^\n[^\n]*/&&/
s/^\(\n *\)[^ ] /\1 /
s/\n/ \n/2
/^\n *\n/!b loop
s/^\n *\n//
|
与えられた数字のケタ数
(Nested
Flatten)
sed でカウントアップ初挑戦。(ついでにラベル":"も初) 桁上がりまで実装できずに9桁止まりになってしまい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #!/bin/sed -nf
/^[1-9][0-9]*$/!d
h
s/$/@0123456789/
:counter
s/^[^@]\(.*\)@.\(.*\)$/\1@\2/
t counter
s/@\(.\).*$/\1/
G
s/^\([0-9]\)\n\([0-9]*\)$/\2は\1桁で、/p
x
y/123456789/000000000/
s/^0/1/
s/^.*$/最大桁は&の位です。/p
|
整数の漢数字表記
(Nested
Flatten)
next >>
一兆一あたりでNG。億と万を取り除かないと。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/bin/sed -f
s/$/@/
s/\([0-9]\)\([0-9]\{12\}@\)/\1兆\2/
s/\([0-9]\)\([0-9]\{8\}@\)/\1億\2/
s/\([0-9]\)\([0-9]\{4\}@\)/\1万\2/
s/\([1-9]\)\([0-9][0-9][0-9][兆億万@]\)/\1千\2/g
s/\([1-9]\)\([0-9][0-9][兆億万@]\)/\1百\2/g
s/\([1-9]\)\([0-9][兆億万@]\)/\1十\2/g
s/1\([兆億万@]\)/一\1/g
s/[01]//g
y/23456789/二三四五六七八九/
s/億万/億/
s/兆億/兆/
s/@$//
|




GEOJ #7699() [ sed ] Rating0/0=0.00
#!/bin/sed s/.*/lol/ : loop s/^\([^l]*\)l*o\([lo]*\)\(\n.*\)\?$/\1a\2\3\nx\2o\nx\2o+\2=\nx\2oo+\2=/ : 2->10 s/[f-j]/#&/g s/[a-j][#l]/\U&/g y/AbBcCdDeEfFgGhHiIjJ/bcdefghijabcdefghij/ s/^#/b/m s/#//g s/\([a-j]\)[Lo]/\1/ /[a-j][lo]/ b 2->10 y/abcdefghij/0123456789/ : add s/\([xo]l*\)l+\([lo]*\)l=/\U\1\E+\2=o/g s/X/xl/g y/LO/ol/ s/l+\([lo]*\)o=/+\1=l/g s/o+\([lo]*\)\([lo]\)=/+\1=\2/g s/+=//g t add s/^x\([lo]*\)$/\U\1\Eo\1/gm y/LO/ll/ : sort s/^\([lo]*\)\n\1$/\1/gm s/^\(\([lo]*\)l[lo]*\)\n\(\2o[lo]*\)$/\3\n\1/gm t sort s/^\(\(\w*\n\)\{99\}\w*\)\n.*$/\1/ /[lo]/ b loopRating0/0=0.00-0+
[ reply ]