上田ブログ

生きるフリー素材化への厳しい修行(生きるフリー素材だとは言っていない)

お知らせ: 本買ってくださーい / 

  このエントリーをはてなブックマークに追加 
   

【問題と解答】jus共催 第36回七夕・・・7は素数じゃないですか(しかも2つ)シェル芸勉強会

問題のみのページ

当日の様子はこちら

  • 問題で使われているデータファイルはGitHubにあります。クローンは以下のようにお願いします。
$ git clone https://github.com/ryuichiueda/ShellGeiData.git
  • 環境: 解答例はUbuntu Linux 18.04 で作成。Macの場合はcoreutilsをインストールすると、GNUのコマンドが使えます。BSD系の人は玄人なので各自対応のこと。
  • もっと良い別解がたくさんありますので、 https://togetter.com/li/1244481 も参考に。

Q1

welcome.txtに隠されたメッセージを読み取ってください。また、welcome.txtをワンライナーで作ってみてください。

解答

解読は次の通り。

$ cat welcome.txt | tr '\0' @ | fold -b70
________________________________________________@__@_@________________
_@@___________________________@@@@@@_______@@____@@@@@__@_____________
__@______________@______________@@_________@@_@@@@@______@____@@@_____
__@_____________@@@@@_________@@@@@@@______@______@______@__@____@____
__@_____@________@@@_________@__@@__@______@@@___@@______@@@____@@____
___@@@@@_______@@__@@@_________@@@@@________@___@@_________@__________
______________________________________________________________________
______________________________________________________________________
_________________________________@__________________________@@@_______
_______@_@________@@__________@@@@@@________________________@@@@______
__@@@@____________@@__________@@@@@@@__________@__________@@____@_____
@@____@@_________@@@____________@@@@@__________@@@______________@_____
________@@@_____@@__@___@_____@@___@@________@@@@______________@______
_______________@@___@@@@_______@@@@@________@@@@_@@__________@@_______
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
___@@___@_____@_______________________________________________________
_@@@@@@@_@@____@____@@@_______________________________________________
____@__@_@@____@__@____@______________________________________________
___@___@_______@@@____@@______________________________________________
__@__@@@_________@____________________________________________________
______________________________________________________________________
______________________________________________________________________

このように作りました。

$ figlet しぇるげいべんきょうかい | sed 's/[^ ]/@/g' |
tr ' ' _ | tr @ '\0' | tr -d '\n' > welcome.txt

Q2

次のファイル群について、全てファイル名をN年M組.docNは半角数字、Mは半角大文字)に揃えて徳を積んでください。

$ ls
1-B.doc     3年C組.doc  3年A組.doc  1ーC.doc    4年C組.doc
1A.doc      4年a組.doc   3年B組.doc  1ーD.doc
3年D組.doc  5年A組.doc   4年B組.doc  1年E組.doc

出典

解答

$ ls | nkf -Z4 | tr a A | sed 's/[-ー]/年/' |
sed 's/\([A-E]\)\./\1組./' | sed 's/1A/1年A/' |
paste <(ls) - | sed 's/^/mv /' | sh
mv: '3年D組.doc' と '3年D組.doc' は同じファイルです
mv: '5年A組.doc' と '5年A組.doc' は同じファイルです
$ ls
1年A組.doc  1年C組.doc  1年E組.doc  3年B組.doc  3年D組.doc  4年B組.doc  5年A組.doc
1年B組.doc  1年D組.doc  3年A組.doc  3年C組.doc  4年A組.doc  4年C組.doc

Q3

2018年のすべての日付について、2,3,5,7が4つ含まれる日付を列挙してください(例: 2018年3月22日など)。

解答

$ dateutils.dseq 2018-01-01 2018-12-31 | tr -d - |
awk '{printf $0" ";print gsub(/[2357]/,"")}' | awk '$2==4'

Q4

俳句を考え、次の短冊に縦書きで入れてください。

$ cat tanzaku
┏ ーー-┷-ーー┓
┃       ┃
┃       ┃
┃       ┃
┃       ┃
┃       ┃
┃       ┃
┃       ┃
┗ーーーーーー┛

解答

俳句でないですが・・・

$ echo あついなつ   へんたいぜんら なつまつり   | xargs -n 1 | sed 's/./& /g' |
datamash transpose -t ' ' | sed '1i\ ' | paste <(cat tanzaku) - |
awk -F '' -v OFS='' 'NF<15;NF>14{$3=$15;$5=$13;$7=$11;$15=$13=$11="";print}'
┏ ーー-┷-ーー┓
┃ な へ あ ┃
┃ つ ん つ ┃
┃ ま た い ┃
┃ つ い な ┃
┃ り ぜ つ ┃
┃   ん   ┃
┃   ら   ┃
┗ーーーーーー┛

Q5

cowsayの牛を右向きにして吹き出しの位置を調整して下さい。(万が一右向きオプションがあったら、それは使わずにお願いします。)

              ________________________________
             < あなたとJava今すぐダウンロード >
              --------------------------------
               ^__^   /
       _______/(oo)  /
   /\/(       /(__)
      | w----||
      ||     ||

解答

$ cowsay あなたとJava今すぐダウンロード |
awk '{printf $0;for(i=length;i<=30;i++)printf "@";print ""}' |
pee cat rev | awk 'NR<4||NR>11' | tr @ ' ' |
tr '\\' @ | tr '/' '\\' | tr @ / | tr '()' ')(' |
awk 'NR<4{printf "             "}{print}'
              ________________________________
             < あなたとJava今すぐダウンロード >
              --------------------------------
               ^__^   /
       _______/(oo)  /
   /\/(       /(__)
      | w----||
      ||     ||

Q6

seq 20の出力について、次のように素数を丸囲みしてください。

1
②
③
4
⑤
6
⑦
8
9
10
⑪
12
⑬
14
15
16
⑰
18
⑲
20

解答

$ seq 20 | factor | awk 'NF==2{print $2}NF!=2{print $1}' |
mawk '!/:/{printf("&#x%x;\n",$1+"0x245f")}/:/' |
nkf --numchar-input | tr -d :
1
②
③
4
⑤
6
⑦
8
9
10
⑪
12
⑬
14
15
16
⑰
18
⑲
20

Q7

textには、文字や空白、改行として認識されないバイナリが含まれています。どの行にどんなものがあるか調査してください。

解答

$ xxd -p text | tr -d '\n' | sed 's/e.....//g' | sed 's/0a/\n/g' | nl -ba
     1  00
     2
     3
     4
     5  02
     6
     7
     8  06
     9
    10  16
    11
    12
    13
    14
    15
    16
    17

Q8

$ echo 嘘は嘘であると見抜ける人でないと(掲示板を使うのは)難しい

から始めて、出力で次のようにルビを打ってください。多少ずれたりスペースが入っても構いません。

ウソ  ウソ        ミヌ      ヒト          ケイジバン  ツカ        ムズカ
嘘は嘘であると見抜ける人でないと(掲示板 を使うのは)難しい

解答

$ echo 嘘は嘘であると見抜ける人でないと(掲示板を使うのは)難しい |
mecab -E '' | awk -F"[\t,]" '{print $1,$(NF-1)}' | nkf -h |
sed -r 's/(.*) (.*)\1/\1 \2/' | awk 'NF==1{print $1,"*"}NF==2' |
datamash transpose -t ' ' | pee 'nkf --katakana | nkf -Z4' cat |
sed -n '2,3p' | column -t | sed 's/\([^ ]\)  /\1/g' | tr '*' ' '
ウソ  ウソ        ミヌ      ヒト          ケイジバン  ツカ        ムズカ
嘘は嘘であると見抜ける人でないと(掲示板 を使うのは)難しい


Article Info

created: 2018年 7月 7日 土曜日 16:27:54 JST
modified: 2018年 7月 12日 木曜日 22:40:58 JST
views: 379
keywords: プログラミング,勉強会,シェル芸,シェル芸勉強会
prev:【問題のみ】jus共催 第36回七夕・・・7は素数じゃないですか(しかも2つ)シェル芸勉強会 next:jus共催 第36回シェル芸勉強会を開催しました