【問題のみ】第22回ゴールデンウィークの存在疑惑シェル芸勉強会

Sat Apr 30 13:56:52 JST 2016 (modified: Sun Oct 1 10:50:27 JST 2017)
views: 2577, keywords:CLI,UNIX/Linuxサーバ,シェル芸,シェル芸勉強会 この記事は最終更新日が7年以上前のものです。

イントロのプレゼン資料

問題で使うファイル等

GitHubにあります。ファイルは

https://github.com/ryuichiueda/ShellGeiData/tree/master/vol.22

にあります。

クローンは以下のようにお願いします。

$ git clone https://github.com/ryuichiueda/ShellGeiData.git

環境

今回はUbuntu Linuxで解答例を作りましたので、BSD系、Macな方は以下の表をご参考に・・・。

Mac,BSD系 Linux
gdate date
gsed sed
tail -r tac
gtr tr
gfold fold

Q1

次のファイルの中身について、「cat <ファイル名>」から初めて、同じワンライナーでそれぞれ中央値を求めてください。データの数が偶数の場合は、中央の二つの値の平均を中央値とします。

ueda@remote:~/GIT/ShellGeiData/vol.22/Q1$ cat a
   1
   3
   4
   1
   6
   6
   8
   2
   ueda@remote:~/GIT/ShellGeiData/vol.22/Q1$ cat b
   3.4
   13
   4242
   -4
   -5

Q2

次のような出力から初めて、

ueda@remote:~$ echo カレーライス 醤油ラーメン | ...

次のような出力を得てください(表示がずれてますが、「ー」のところで文字列をクロスさせています)。最初のパイプより右側はマルチバイト文字を使わないようにしてみましょう。「ー」が何文字目にあるか等の情報は何でも使って結構です。


   
   醤油ラーメン
   
   
   

Q3

次のデータについて、

ueda@remote:~/GIT/ShellGeiData/vol.22$ cat Q3
   aaabbb
   bababa
   aaabbb
   aaabbb
   bababa
   bbbbba

次のような出力を得てください。

bababa 2 5
   aaabbb 1 3 4
   bbbbba 6

次に、得られた答えから元のデータを復元してください。Q3の答えはQ3.ansにあります。

Q4

次のファイルについて、素数行目に存在するりんごとみかんをそれぞれ数えてください。できる人は素数の行を2,3,5,7と明示的に指定しないでやってみてください。

ueda@remote:~/GIT/ShellGeiData/vol.22$ cat Q4
   りんご
   りんご
   みかん
   みかん
   りんご
   みかん
   りんご
   りんご

Q5

足して10になる並びを全て見つけてみましょう。

ueda@remote:~/GIT/ShellGeiData/vol.22$ cat Q5
   1 3 4 4 2 3 5 6 7 9 1 4

Q6

次のファイルQ6_1のX,Y,Zに、

ueda@remote:~/GIT/ShellGeiData/vol.22$ cat Q6_1 
   所謂いわゆる「Z」というものにだって、
   もっと何か表情なり印象なりがあるものだろうに、
   YのからだにXでもくっつけたなら、
   こんな感じのものになるであろうか、
   とにかく、どこという事なく、見る者をして、
   ぞっとさせ、いやな気持にさせるのだ。
   私はこれまで、こんな不思議な男の顔を見た事が、
   やはり、いちども無かった。

Q6_2に書いてある文字列を当てはめてください。

ueda@remote:~/GIT/ShellGeiData/vol.22$ cat Q6_2
   X 駄馬の首
   Y 人間
   Z 死相

Q7

明示的に端末を閉じたりシェルを終わらせるためのコマンド(shutdown, reboot, exit, logout等)以外で端末を閉じてみてください。

Q8

次のC++のコードに関数プロトタイプをくっつけてください。

ueda@remote:~/GIT/ShellGeiData/vol.22$ cat Q8.cc 
   #include <iostream>
   #include <string>
   using namespace std;
   
   void aho(void)
   {
       cout << nazo() << endl;
   }
   
   string nazo(void)
   {
       return "謎";
   }
   
   int main(int argc, char const* argv[])
   {
       aho();
       return 0;
   }

つまりこういう出力を作ります。

ueda@remote:~/GIT/ShellGeiData/vol.22$ cat Q8.ans.cc 
   #include <iostream>
   #include <string>
   using namespace std;
   void aho(void);
   string nazo(void);
   
   void aho(void)
   {
       cout << nazo() << endl;
   }
   
   string nazo(void)
   {
       return "謎";
   }
   
   int main(int argc, char const* argv[])
   {
       aho();
       return 0;
   }
ノート   このエントリーをはてなブックマークに追加 
 

prev:Ubuntu 14.04 server用のROS一撃インストールシェルスクリプト next:第22回ゴールデンウィークの存在疑惑シェル芸勉強会

やり散らかし一覧

記事いろいろ