Cafeで始まったシェル芸勉強会の福岡サテライト会場。Cafeでの開催だった。5人の予定だったが、2人の方がキャンセルになって3人だった。1人は初参加で、1人は長崎サテライト会場に参加の経験がある方が福岡へやってこられた。2人とも会場の場所が分かりづらかったとのこと。Cafeは場所が初見殺しだったことを忘れていた、アカン。午前中はぷるさんの自宅から配信されたJavaScript入門を自宅で見た。www.pscp.tvJavaScript初心者が呟いた小並感溢れるツイート。そもそも非同期処理とかやる機会が最近は全然無い。そもそも最近お仕事でコードを書いていない。2019年12月28日twitter.comああ条件分岐とかをメソッドチェーンで繋ぐことが出来るのか。Cafeに向かって移動を開始。www.youtube.com問題と解答はこちら。上田ブログ今回の問題はこんな感じらしい。上田会長、毎回の事ながら問題作成と運営ありがたや。シェル芸勉強会の問題できました。2019年12月27日twitter.com参加者の方へサポートをしながら考える。毎度の事ながら結構頭を使う。自分なりの解答例がこちら。個人的にはQ6の上田会長による解答例が印象に残った、は〜なるほどと関心。Q1データを並べ替え、指定したキーの中で最後の行のみを抽出する問題。sortコマンドには-Vというバージョン名で並べ替えるというオプションがあるので利用する。ちなみに-Vオプションを使うと数字以外は全部区切りになるようだ。2019年12月28日twitter.com最後の行のみを抽出する関係で-rオプションもつけて逆順に並べ替え。次に2行目の野菜をキーにして、1行目の日付が最も新しい(つまり最初の行)のみを抽出する。uniqコマンドを使う手があるが、awkの連想配列を使った解答がこちら。'!a[$2]++'2019/12/30,トマト,4個2019/12/21,バナナ,5個2019/11/21,ピーマン,32個なぜ最初の行のみが抽出出来るのか、以下に解説してみる。2列目をキーにした配列aの値を確認。1次に配列aの値に対して論理否定を指定する。awkでは0は偽で0以外は真なので、値が0の時(つまり最初の行)のみ1(真)になる。この真偽値をパターンで利用すれば、2列目をキーにして最初の行のみ抽出出来る。0キーにする列を使った連想配列を使ってuniqコマンドのような動きをさせる。AWKユーザー会の会長である斉藤博文さんの著書に記載されていた。www.shoeisha.co.jpユニケージ開発で利用されるTukubaiコマンドで、キーの列を指定して最初もしくは最後を抽出するコマンド(getfirst、getlast)があるのでこれを利用する手もある。32個uec.usp-lab.comQ2問題の意図を完全に見誤っていた、落ち着けオレ。データの2列目に記載された日毎の株価終値について、月毎に最大値と最小値を出そうという問題。最大値と最小値を同時に処理するため、moreutils付属のpeeを使った解答例が出ていた。peeコマンドについて解説をした。peeはパイプに流れてきたデータを、2つのコマンドでそれぞれ処理させたい時に使う。#【中身は消えない】1どすえ2どすえ3どすえ僕はawkで頑張る解答を考えていたが、時間内で完成出来ず。勉強会終了後下記の解答例を考えた。最大値や最小値を地道に選び出しているだけだ。2次元配列を使う意味はあまり無い、使ってみたかっただけだ。awkの新しいバージョンのみサポート。NFQ3何行目が違うかではなくて、最初の文字から通算して数えるとな。バイナリデータを比較するcmpコマンドで出来るか?と思ったが時間内に出来ず。後ほど書きの解答を考えてみた。各文字は8バイトなのを利用。少数の切り上げ処理はRubyが楽だったので利用。少数を切り上げているのは、8バイト中いずれかのバイトに差異があった場合でも対応するため。2019年12月31日twitter.comQ4結合文字が混じっているのが意地悪な要因。.とかだと結合文字がバラされて失敗する。16進数で1バイト毎にダンプすると、文字はe8またはe9で始まっていることを利用。e8やe9の直前に改行文字0aを挿入している。邊(以下略)Q5地道に文字を全パターン切り出し、それぞれが回文になっているか確認する。確認する文字の全パターン切り出しをawkで頑張る。substr($0,i,j)}}'ききつきつつきつつき(略)つつつつつきつつきと(略)すすがすがしすがしかががしがしか後はそれぞれの行が回文になっているかを確認する。確認方法は下記で考えた。-d上記の確認方法を使った解答例がこちら。ループを使って上記コマンドを何度も呼び出しているのでとても遅い。'length>1'かしがすきすきすがしかがすきすきすが(略)ゆんゆんゆんQ6最初問題の意図が理解出来ず。参加者の方に意味を教えていただいた、ありがたや。頭を捻ったが上手く行かず。上田会長の解答例を見て、発想がスゴイなあと思った。-oで検索して切り出す。複数行表示される場合は部分的な回文なので、1行のみ表示される物だけを選ぶ。Q7無限に出力する解答は出来ず。小数点以下10万桁まで限定のイカサマ的解答がこちら。scale=で指定する桁数が大きすぎると、危険なので注意。Cafeで福岡サテライトを開催した。会場の広さ的にはこのくらいの方が参加者のサポートがやりやすいかもと思った。Cafe設置のコンポを活用するか。僕以外の参加者は2人だった。1人は長崎サテライトで参加していただいている学生さんだった。実家に帰ってきてるので福岡サテライトへ参加いただいたようだ。Linuxサーバ管理とかをやっているが、コマンドの使い方を勉強したいというのがキッカケとのこと。自分なりにサポートや解説を頑張ってみたのだが、どうだったかしら??問題の難易度的にはやや落ち着いた?感じではあるが、慣れない方にとっては果てしなく高難度に感じると思う。今後もサポートや解説は大事だと思った次第。梅雨なのにあんまり雨が降らずこれはアカンと思う今日この頃。世間はゴールデンウィークですがいかがお過ごしだろうか?そん...2015-10-23【続】拡張FizzBuzz問題をシェルプログラミングで先日拡張FizzBuzz問題をシェルプログラミングで解いた。はてなブログPro情報処理ってもっとシンプルにならないだろうか?PKI関連、RubyやPHP等のLL、シェルスクリプト、シェル芸、ユニケージ見習い未満。シェルスクリプトとシェル芸はきっと違うんですよ。JPはてなブログをはじめよう!papiroさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。