【問題】年末年始シェル芸問題集

Pocket
LINEで送る

12月のシェル芸勉強会よりもひどい問題を準備しましたので、時間をかけてお楽しみください。

追記: 解答はコチラ

解答はMacで作りました。ただし、Coreutilsが必要なので、

$ brew install coreutils

をお願いします。Q1以外の解答は1/2頃に公開します(Q1は便利なので早めに公開しておきます)。解答はハッシュタグ「#シェル芸」でワイワイやっていただければと。

良いお年を。

Q1

年末年始はディレクトリの掃除をしましょう。ということで、ご自身のPCから重複しているデータを探してみてください。全てのファイルから探すのは大変なので、手始めに重複しているJPEG画像リストを作ってみてください。

解答

もし何も出てこなかったら適当なjpegファイルをコピーして検出できるか試してみてください。「sed ‘s/.*/”&”/’」はファイルに半角空白があるときのためにファイル名をダブルクォートで囲む処理です。sortのLANG=Cと-sオプションはファイル数が膨大なときに処理を速くするためにつけています。

注意: 時間がかかるかもしれません。とりあえずsortの前に一度ファイルに出した方がよいかもしれません。

###出力で1列目の数が同じものが重複の疑いのあるものです###
uedambp:~ ueda$ find ~/ -type f | grep -i '\.jpg$' | sed 's/.*/"&"/' |
xargs -n 1 gmd5sum | LANG=C sort -s -k1,1 |
awk '{if(a==$1){print b;print $0}a=$1;b=$0}'
###Linuxの場合(さらにルートから検索をかけてみる)###
ueda@remote:~$ sudo find / -type f | grep -i '\.jpg$' | sed 's/.*/"&"/' | 
sudo xargs -n 1 md5sum | LANG=C sort -s -k1,1 | 
awk '{if(a==$1){print b;print $0}a=$1;b=$0}'
...
c2979e8ed193969aa9e6c2a1438b696b  /home/ueda/var/www/bashcms/pages/whats_bashCMS/chinjyu.jpg
c2979e8ed193969aa9e6c2a1438b696b  /home/ueda/chinjyu.jpg
f1c3a09b784cc5a55bb820aaa873c79f  /var/tmp/GIT/SD_BOOK/IMAGE/noodle.jpg
f1c3a09b784cc5a55bb820aaa873c79f  /home/ueda/GIT/SD_BOOK/IMAGE/noodle.jpg
###Open usp Tukubai使用###
ueda@remote:~$ sudo find / -type f | grep -i '\.jpg$' | sed 's/.*/"&"/' | 
sudo xargs -n 1 md5sum | LANG=C sort -s -k1,1 | yarr num=1 | awk 'NF>2'

Q2

羽田空港の緯度経度を求めてください。

Q3

任意の級数からネイピア数(自然対数の底の数)を求めてください。精度が良いほど良いこととします。

こちらを参考に。

Q4

http://blog.ueda.asia/misc/message2015.txtは、あるメッセージにbase64を多重にかけたものです。解読してください。ワンライナーでなくても構いません。

Q5

円周率をなるべく精度よく求めてみてください。

Q6

集合{a,b,c,d,e}から全ての組み合わせ(部分集合)を列挙してください。(ヒント: すごく簡単です)

Q7

8128が完全数であることを確認してください。

私はギブアップしてますが、挑戦したい人は

14474011154664524427946373126085988481573677491474835889066354349131199152128

が完全数であることを確認してください。(解けても商品は出ないのでほどほどに・・・)

Q8

「シェル芸」あるいは好きなキーワードを含んだツイートをなるべく集めてリストにしてみてください。

ちなみに私は以下の解答で力尽きましたので、何か良いアイデアがあれば。

uedambp:~ ueda$ w3m -dump 'https://twitter.com/search?f=realtime&q=%E3%82%B7%E3%82%A7%E3%83%AB%E8%8A%B8&src=typd' |
sed -n '/ 1\./,$p' | sed -n '1,/^No Tweet/p'
Pocket
LINEで送る