〜2014年12月中旬〜
Bluetoothデバイスが必要らしい。
Fitbitがあるじゃんということで試してみるも全然認識しない。
いろいろ調べてみたが、
だめっぽい。
顔認識はなんかあまり成功しないしなあ。
まずは全リストを取得。トークンは こんな感じでブラウザから。
% api0=https://reader.aol.com/reader/api/0 % curl -s -H 'Token: トークン' "$api/subscription/list" > aol.json
とりあえず誠 Biz.ID LifeHackを例に。feed idを抜き出す。
% jq -r '.subscriptions[]|select(.title=="誠 Biz.ID LifeHack 最新記事一覧").id' aol.json feed/eAT9PC
コンテンツを取ってくる。
% curl -s -H 'Token: トークン' \ "$api0/stream/contents/feed/eAT9PC?n=10000&xt=user/-/state/read" > biz.json
タイトルが"AD: "から始まってるものは広告とみなす。
% jq -r '.items[]|select(.title|startswith("AD: "))|.id' biz.json eAT9PC/1418002431931818061 eAT9PC/1417567924582392308 eAT9PC/1416522361738274492 eAT9PC/1416194912121917917 eAT9PC/1415934309109696095 eAT9PC/1415580180852723343 eAT9PC/1414452259583598087 eAT9PC/1413950802051252623 eAT9PC/1413947114822452410 eAT9PC/1413762538219094236 eAT9PC/1413592528310138989
これを既読にする。
% jq -r '.items[]|select(.title|startswith("AD: "))|.id' biz.json | \ xargs -I@ -n1 curl -s -H 'Token: トークン' \ --data-urlencode "a=user/-/state/read" --data-urlencode "i=@" --data-urlencode ac=edit "$api0/edit-tag";echo
edit-tagはPOSTじゃないとだめ。
InoreaderならGETでいいんだけど。
Google ReaderのフォロワーはAPIが互換なので楽だ。
行けなくて残念だったが、Ustで参加。一応全部解いた。
Q1 100!を計算してください。正確に。 % seq -s \* 100 | BC_LINE_LENGTH=1000 bc 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
GNU bcは途中で改行するが、BC_LINE_LENGTHで長さを指定できる。dcも同様。
Q2 次のseqからsed(と言ってもgsed)だけでfizzbuzzを完成させてください。 % seq 100 | sed '5~5s/.*/Buzz/;3~3s/[^B]*/Fizz/'
なつかしい。
% seq 100 | jq -r '. as$i|[["Fizz"][.%3],["Buzz"][.%5]]|add//$i'
ついでにjqでも解いた。
Q3 このうち素数はどれでしょうか? % echo 0xaf 0x13 0x0d 0x24 0x58 | ruby -rmathn -ane 'puts $F.select{|x|Prime.prime?(x.hex)}' 0x13 0x0d
Rubyにはいろいろあるしねえ。
% echo 0xaf 0x13 0x0d 0x24 0x58 | fmt -1 | sed s/..// | xargs -n1 openssl prime -hex | grep -v not 13 is prime D is prime
opensslにもあるが、-hexをつけても0xは受け付けてくれない。
Q4 次の16進数(UTF-8)で書かれたメッセージを復元してください。 % echo e89fb9e3818ce9a39fe381b9e3819fe38184|xxd -r -p 蟹が食べたい % echo e89fb9e3818ce9a39fe381b9e3819fe38184|ruby -e 'puts [gets.chop].pack("H*")' 蟹が食べたい % echo e89fb9e3818ce9a39fe381b9e3819fe38184 | perl -lne 'print pack("H*",$_)' 蟹が食べたい
16進ダンプを元に戻す。xxdはvimに付属するコマンド。
Q5 次のようなファイルを作ってください。 (catするとahoとだけ出て、容量は1GB。) % echo aho > hoge; truncate -s 1000000000 hoge % ls -l hoge -rw-r--r-- 1 eban eban 1000000000 2014-12-13 15:38:30 hoge
最近だとddよりもtruncateが使われる。
% du -sh hoge 4.0K hoge
sparse fileになるのでサイズも小さい。
Q6 日本の山を標高の高い順から並べていってください。順位と標高も一緒に出力してください。 % w3m -dump -cols 999 http://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E3%81%AE%E5%B1%B1%E4%B8%80%E8%A6%A7_%28%E9%AB%98%E3%81%95%E9%A0%86%29 |& \ awk '/^([0-9]{1,2}|100) /{print $1,$2,$4}'
w3mが面倒臭いことは全部やってくれるので便利。
Q7 分数で正確に答えを求めてください。できれば約分してください。 % echo '1/4 + 2/5 + 7/16 - 5/9' | ruby -e 'puts eval(gets.gsub(/\S{3,}/,"\\&r"))' 383/720
1/4r + 2/5r + 7/16r - 5/9rという文字列に変換すればRubyは解釈してくれる。ただし、Ruby 2.1以降。
Q8 *がいっぱいある文字列をポキポキ折ってください。 % printf "%65s\n" | tr ' ' '*' | fold -6 | sed '2~2s/./&\n/g;s/\n$//' | sed 'x;s/./ /g;s/.//;G;s/\n//;h'
適当に長い文字列を作って、
% printf "%65s\n" | tr ' ' '*' *****************************************************************
6文字で折り返して、
% printf "%65s\n" | tr ' ' '*' | fold -6 ****** ****** ****** ****** ****** ****** ****** ****** ****** ****** *****
偶数行目だけ縦にして、
% printf "%65s\n" | tr ' ' '*' | fold -6 | sed '2~2s/./&\n/g;s/\n$//' ****** * * * * * * ****** * * 以下略
インデントする。
% printf "%65s\n" | tr ' ' '*' | fold -6 | sed '2~2s/./&\n/g;s/\n$//' | sed 'x;s/./ /g;s/.//;G;s/\n//;h' ****** * * * * * * ****** * * 以下略
なんか流行ってるので乗ってみる。100行ほど。
まずはImageMagickのconvertだ。
% convert null: -duplicate 49 -format "\n" info:
確認はodがいいかもしれない。実は2倍になって出ることに気づいてなかった。
つまり残念ながら奇数行だと使えない。
% convert null: -duplicate 49 -format "\n" info: | od -c -Ad 0000000 \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n * 0000096 \n \n \n \n 0000100
次に最近熱いjqだ。短くて実に優秀だ。デフォルトの改行があるので99。
% jq -n -r '"\n"*99'
zshだとrepeatがあるのでforを使わなくてもいい。
% repeat 100 echo
rなんてつける必要なかった。
% echo '1/4 + 2/5 + 7/16 - 5/9' | ruby -rmathn -ne 'puts eval$_' 383/720
irb -mという話題も出てたが、こういうことだと思う。
% echo '1/4 + 2/5 + 7/16 - 5/9' | irb -m Switch to inspect mode. start math mode 1/4 + 2/5 + 7/16 - 5/9 (383/720)
あとPerlにもbigratというのがあって、分数を扱える。
% echo '1/4 + 2/5 + 7/16 - 5/9' | perl -Mbigrat -nle 'print eval' 383/720
まぜて比較するとどっちになるのか?
% mawk 'BEGIN{print "10"<2}' 1 % mawk 'BEGIN{print 10<"2"}' 1 % mawk 'BEGIN{print 10<2}' 0
どちらかが文字列なら文字列として比較される。
$1とかは数値として扱われる。
% echo 2 | mawk '{print 10<$1}' 0 % echo 2 | mawk '{print "10"<$1}' 1
メールが来るからと安心していたら、タイミングが悪かったようで。
家でしか同期しないから、そりゃそうだよな。
例によって5周させて表示を消した。
「録画リストを取得しています。」とか見慣れないメッセージが出てあれっと思ったら、
なんかいつもより動作がきびきびしてる。
お知らせを確認してみるとやはりアップデートしていた。
特に高速化については書いてない。あ、やっとオートチャプター機能が入ったか。
初期値は切と書いてあったが、10分になってた。しかし学習型リモコンのボタンが足りない。
jqじゃ無理かと思ったが、 yamayaさんのbashの解を見て、これをjqに移植してみたらいけた。
bash: read a b;seq -f"echo \$[({1..$b}+%g+1)%%2]" $a|sh jq: ./" "|map(tonumber)|range(0;.[0])as$i|[(range(0;.[1])+$i+1)%2]|@sh
最後の|@shが奇しくも似たようになっているが、全然違う意味なのが面白い。
jqゴルフを始めてから過去問を地味に解いてるわけだけど、
ランキングトップのteebeeさんに添削されまくっている。
まあ、そのおかげでぐんぐんjq力が上がってるわけで、
まったくもって頭が上がらない。
まあだいたいはStatisticsで予想はできるけど、限界があるしねえ。
splitが/でできるなんてまさかのgorubyだよ。マニュアルにはたしかに書いてあるが。