「第14回東京居残りシェル芸勉強会&第32回蟹ではなくピザが出るUSP友の会定例会」の問題をなるべく解きました
当日は用事があり参戦できなかったので、ブログ参戦です!
TLをネタバレしない程度に覗いてみましたが、今回の問題はいつもにも増して頭がおかしいとレベルだとの評判で、なかなか楽しみであります!
各種リンク
- 公式:https://www.usptomo.com/PAGE=20141214USPSTUDY
- togetter:http://togetter.com/li/701509
- 問題:【問題のみ】第14回東京居残りシェル芸勉強会 – 上田ブログ
- 解答付き:【問題と解答例】第14回東京居残りシェル芸勉強会 – 上田ブログ
参加環境
Jail on FreeBSD 10.1 amd64 on VMWare Player on WIndows7 64bit
ではではスタート!
Q1 100!を計算してください。正確に。
jotとbcを使って
|
|
もしくは
|
|
こんな感じでしょうか。
Q2 次のseqからsed(と言ってもgsed)だけでfizzbuzzを完成させてください。
なんぞこの問題www
|
|
※TLカンニングしました><
sedコマンド、s以外にもあって興味深い・・・
Q3 このうち素数はどれでしょうか?
0xaf 0x13 0x0d 0x24 0x58
どうもpkgngにfactorコマンドが見つからなかったので、awkで無理やり計算しました。
|
|
「何かで割れたら素数じゃない」っていう考え方で、力技です。
Q4 次の16進数(UTF-8)で書かれたメッセージを復元してください。
e89fb9e3818ce9a39fe381b9e3819fe38184
|
|
※TLカンニングしました><
なんぞこれwwwwこれならperlでもいけそう。
|
|
なるほどー。
Q5 次のようなファイルを作ってください。
(catするとahoとだけ出て、容量は1GB。)
>
ueda@remote:~$ cat hoge
aho ueda@remote:~$ ls -l hoge
rw-r–r– 1 ueda ueda 1000000000 12月 7 14:53 hoge
ナニソレイミワカンナイですよもう!!
TLコッソリ見てみると、ddでNULLぶっこんだらいけるみたい???
|
|
(1GBはきついので、1000バイトにしときました)
……文字列終端だから大丈夫ってわけね!ちなみにxxdしてみると
|
|
こうなっていて、なるほどって感じです。
Q6 日本の山を標高の高い順から並べていってください。順位と標高も一緒に出力してください。
(こちら(日本の山一覧 (高さ順) - Wikipedia)からcurlで持ってきて加工してください)→ ただの作業になってきたので省略。
Q7 分数で正確に答えを求めてください。できれば約分してください。
echo '1/4 + 2/5 + 7/16 - 5/9'
とりあえずbcに
|
|
% echo '1/4 + 2/5 + 7/16 - 5/9' | gsed 's%^%+,%' | gsed 's/ [+-]/\n&,/g' | tr -d ' ' | awk -F”[/,]” 'BEGIN{n=1}{n=n$3;a[NR]=$0}END{for(i=1;i<=NR;i++){print a[i] “,” n}}' | awk -F”[/,]” '{if($1=="+”){n=n+$NF/$3$2}else{n=n-$NF/$3*$2}}END{print n “/” $NF}' | awk -F”/” 'END{for(i=$2;i>1;i–){if($1%i==0 && $2%i==0){$1=$1/i;$2=$2/i}};print $1”/“$2}' 383/720
|
|
% echo '1/4 + 2/5 + 7/16 - 5/9' | gsed 's%^%+,%' | gsed 's/ [+-]/\n&,/g' | tr -d ' ' | awk -F”[/,]” 'BEGIN{n=1}{n=n*$3;a[NR]=$0}END{for(i=1;i<=NR;i++){print a[i] “,” n}}' +,1/4,2880 +,2/5,2880 +,7/16,2880 -,5/9,2880
|
|
(前略) | awk -F”[/,]” '{if($1=="+”){n=n+$NF/$3$2}else{n=n-$NF/$3$2}}END{print n “/” $NF}' 1532/2880
|
|
(前略) | awk -F”/” 'END{for(i=$2;i>1;i–){if($1%i==0 && $2%i==0){$1=$1/i;$2=$2/i}};print $1”/“$2}' 383/720
|
|
% echo '*****************************************************************' | grep -o . | awk '{b=int(rand()*10>7);if(b==0){printf}else{print}}' | awk 'BEGIN{sum=0}{print sum,$0;sum=sum+length-1}' | awk 'NR==1{print $2}NR>1{printf “%“$1"c”, " “;print $2}'
*
********
**
***
*****
**
********
*
**
******
**
**
***
**
*
*
**
****
|
|
% echo '*****************************************************************' | grep -o . | awk '{b=int(rand()*10>7);if(b==0){printf}else{print}}'
**
**
**
** **
** * * **
|
|
(前略) | awk 'BEGIN{sum=0}{print sum,$0;sum=sum+length-1}' 0 **** 3 ****** 8 * 8 ******** 15 ** 16 *** 18 ***** 22 ** 23 ******** 30 * 30 ** 31 ****** 36 ** 37 ** 38 *** 40 ** 41 * 41 * 41 ** 42 ****
|
|
(前略) | awk 'NR==1{print $2}NR>1{printf “%“$1"c”, " “;print $2}'
*
********
**
***
*****
**
********
*
**
******
**
**
***
**
*
*
**
****
|
|