第64回シェル芸勉強会メモ

はじめに 2023年4月22日に開催された第64回シェル芸勉強会にオンラインで参加しました。 そのときの記録をメモとして記事にしておこうと思います。 あと、解けそうな問題はChatGPT(GPT-4)にも解いていただこうと思います。 公式配信 ## 問1 : メール解析 問題内容 メールの内容から必要な情報だけ抜き出します。 私の回答 cat S*/*64/*.txt|sed 's/-/ /g'|sed 's/:/ /g'|sed 's/:>//g'|sed 's/Re //g'|sort -k9|awk '{c[NR]=$3;d[NR]=$4;g[NR]=$7;h[NR]=$8;i[NR]=$9}END{for(j=1;j<length(i);j++){if(i[j]==i[j-1]){printf("%s %s %s %d\n",i[j],g[j-1]"->"h[j-1],g[j]"->"h[j],(c[j]-c[j-1])*24+d[j]-d[j-1])}}}' 私の感想 awkでごり押ししました。 まずsedでメール内容を整形して、時刻を比較したいメール同士が並ぶようにsortで並べ替えを行います。 それからawkでメール内容をすべて配列に入れて、時刻の差分を計算して必要な情報だけ出力しました。 ちなみに、私の回答は不完全なので分と秒を考慮できていません。 まだまだ勉強が足りていない気がしますね。 精進します。 問2 : 乱数生成 問題内容 正規分布に従う乱数を生成します。 私の回答 echo | awk 'BEGIN{srand();a=0}{for(i=0;i<12;i++)a+=rand()}END{printf("%lf\n",a-6)}' 私の感想 私は正規分布が分からないので0~1の乱数を12個足して6を引いた値を出力しました。 解説で紹介されていた「cat /dev/urandom」から乱数を生成する方法が勉強になりました。 これから乱数を生成するときは使ってみようと思います。 数値だけではなくアルファベットの文字列もランダムに生成できるとのこと。 便利ですね。ありがとうございます。 ChatGPT(GPT-4)の回答 awk 'BEGIN {srand(); u1=rand(); u2=rand(); z0=sqrt(-2*log(u1))*cos(2*3.14159265359*u2); print z0}' Box-Muller変換を使っているらしいです。 問3 : 行列の転置 問題内容 与えられた行列が対称行列か判定します。 私の回答 cat S*/*64/mat | python3 -c 'import numpy as np;A=[input().split() for _ in range(5)];A=np.array(A);AT=A.T;r="YES" if np.array_equal(A,AT) else "NO";print(r)' 私の感想 awkで行列を扱うのは地獄になりそうだったのでPythonのNumpyを使って解きました。 解説ではdatamashコマンドが紹介されていて勉強になりました。 まだまだ知らないコマンドがたくさんありますね。 便利なコマンドは少しずつ覚えておきたい所存です。 また、二次元配列の入力に関しては以下の記事を参考にさせていただきました。 ...

作成日: 2023年4月23日 · 最終更新日: 2024年3月30日 · Yusuke Kato

YusukeKatoBlog

私について 自己紹介 ロボットやシェル芸、ゲーム、ゲーム製作、小説執筆などで日々遊んでいます。 大学ではロボットについて勉強していました。 現在もロボット開発に携わらせていただいてます。 備忘録的な記事をまとめていくのでよろしくお願いします。 最近はペットの日記も始めました。 開発したサービス シェル芸オンラインジャッジ SNSアカウント GitHub : YusukeKato X/Twitter : yusukekato_sub X/Twitter : yusukekato_main 昔のブログ Zenn : yusukekato Qiita : ykpages HatenaBlog : YKpages 趣味の小説 カクヨム : yusuke_kato 本ブログについて 免責事項 本ブログを利用する上で生じる損害等の一切の責任を負いかねますのでご了承ください。 ライセンス 本ブログにおける全ての著作物の権利はYusukeKatoが所有します。 本ブログのソースコードは Apache License 2.0 で公開されています。 本ブログに存在する文章や画像、動画などの全ての著作物は CC BY-NC-ND 4.0 で公開されています。 プライバシーポリシー 本ブログではGoogle Search ConsoleとGoogle Analyticsでアクセス解析等を行っているため、 あらかじめ了承ください。 GitHubリポジトリ 本ブログはGitHubで公開されています。 本ブログのGitHubリポジトリ

作成日: 2023年4月14日 · 最終更新日: 2026年3月5日 · Yusuke Kato

ChatGPTでシェル芸勉強会の問題が解きたい

はじめに 月額20ドルを支払ってGPT-4が利用できるようになったので、 ChatGPTにシェル芸勉強会の問題を解いていただこうと思います。 シェル芸勉強会の問題をお借りします(すみません)。 今回は第63回シェル芸勉強会の問1と問2に挑戦してもらいます。 リンク 利用モデル:GPT-4 https://engineers.ntt.com/entry/2023/03/09/091735 第63回ビッグハンドタウンシェル芸勉強会の問題と解説 実行環境:websh 問1 : 九九の合計 私が入力した文章 ワンライナーのBashスクリプトで九九の掛け算(1×1~9×9まで)の答えの合計を求めてください。 ChatGPTが書いたBashスクリプト sum=0; for i in {1..9}; do for j in {1..9}; do sum=$((sum + i * j)); done; done; echo $sum 実行結果 2025 私の感想 ワンライナーと言えるかは怪しいですが、普通に解いていただけてとても嬉しいです。 デバッグをする必要もなく、一発で実行可能なスクリプトを出力してもらえました。 「GPT-4が凄い!」という噂は間違いではないのかもしれません。 この調子でもう一問、解いていただきましょう。 問2 : おつりの出し方 私が入力した文章 ワンライナーのBashスクリプトで9132円の支払いに10000円札で払ったときのおつりの出し方を求めてください。 ChatGPTが書いたBashスクリプト change=$((10000 - 9132)); echo "おつり: ${change}円"; echo "5000円札: $((change / 5000))"; change=$((change % 5000)); echo "1000円札: $((change / 1000))"; change=$((change % 1000)); echo "500円硬貨: $((change / 500))"; change=$((change % 500)); echo "100円硬貨: $((change / 100))"; change=$((change % 100)); echo "50円硬貨: $((change / 50))"; change=$((change % 50)); echo "10円硬貨: $((change / 10))"; change=$((change % 10)); echo "5円硬貨: $((change / 5))"; change=$((change % 5)); echo "1円硬貨: $((change))" 実行結果 おつり: 868円 5000円札: 0 1000円札: 0 500円硬貨: 1 100円硬貨: 3 50円硬貨: 1 10円硬貨: 1 5円硬貨: 1 1円硬貨: 3 私の感想 かなりの力技で問題を解いてもらいました。 ワンライナーと言えるかは分かりませんが、普通に解いていただけてとても嬉しい気持ちです。 今回もエラーが出ることはなく、すんなり実行できました。 もっといろんな問題で試してみたいですね。 ...

作成日: 2023年4月12日 · 最終更新日: 2024年3月30日 · Yusuke Kato

シェル芸botで遊びたい(Bash)

はじめに Twitterのシェル芸botで遊ばせていただく方法を紹介します。 遊び方 シェル芸botはハッシュタグ「シェル芸」をつけてシェル芸をツイートすると、 自動で実行して出力結果を教えてくれます。 たとえば、以下のようなツイートをすると出力結果「テスト」を引用リツイートで返してくれます (ただし、自分のアカウントがシェル芸botアカウントにフォローされている必要があります)。 echo テスト 画像生成 シェル芸botは画像生成もできます。 imagesディレクトリの中にpngやjpg、gifの画像を配置すると、 その画像を添付してツイートしてくれます。 たとえば、以下のようなツイートをすると「テスト」と書かれた画像を引用リツイートで返してくれます。 textimg "テスト" -o images/a.png Python シェル芸botではPythonスクリプトも実行できます。 たとえば、以下のようなツイートをすると出力結果「テスト」を引用リツイートで返してくれます。 Pythonの豊富なライブラリも利用できるので遊び方は無限大です。 python3 -c "print('テスト')" C/C++ シェル芸botではC言語やC++言語も実行できます。 たとえば、以下のようなツイートをすると出力結果「テスト」を引用リツイートで返してくれます。 高速に処理したいときなどに役立ちます。 cat<<EOF>a.cpp #include <bits/stdc++.h> int main() { printf("テスト\n"); } EOF g++ a.cpp ./a.out おわりに シェル芸botの遊び方を紹介しました。

作成日: 2023年4月11日 · 最終更新日: 2024年3月30日 · Yusuke Kato

HTML数式表示テスト

はじめに HTMLで数式を書こうと思います。 数式表示テスト 数式を表示するテストです。 HTMLのheadタグ内に以下を記述します。 <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js> </script> TeXの要領で数式を記述します。 \[ x=\frac{-b\pm\sqrt{b^2-4ac}}{2a} \] 以下のように表示されます。 [ x=\frac{-b\pm\sqrt{b^2-4ac}}{2a} ] 本文中に( E = mc^2 )のように数式を書くこともできます。 参考 : MathJaxによる数式表現 おわりに いい感じに表示されました。 今日も満足度は高いです。 HTMLを直書きするのはどうなんだろうと思いつつも、 いい感じに表示はされているので、 問題はなさそうだと思っております。 このブログで数式を記述することがあるのかどうか。 時代に逆行している気もしています。 そんな感じです。 それでは、また。

作成日: 2023年4月10日 · 最終更新日: 2024年3月30日 · Yusuke Kato

自作ブログ開始

はじめに いろんなところにブログ記事を書いてしまったがために、 自分自身でもどこに何を書いたのかよく分からない状態になってしまいました。 はてなブログもQiitaもZennも素晴らしいサービスではあるのですが、 やっぱりブログは一本に絞りたい気持ちもあります。 ということで、自作ブログを始めます。 自作と言ってもHTMLとCSSを頑張って書くだけです。 どこまで自作できるものなのかもよく分かっていません。 それでも自分で書いてみるというのは勉強になりそうなので良いと思います (学生の頃にも同じことを思ってブログを作った気がします……)。 2024年3月30日に追記:markdownをHTMLに変換するスクリプトを作成しました。 ブログの特徴 気をつけたいポイントは以下の三つです。 運用しやすいこと 執筆しやすいこと できるだけシンプルにすること ブログは細く長く続けていきたいので、 できるだけシンプルに保ちつつ、 楽に執筆できるようにしていきたい所存です (HTMLを直に書いている時点でもうダメかもしれませんが……)。 あとはGitHubにもファイルを置いて管理しやすくします。 コード表示テスト このブログでは、シェル芸の記事やロボット関係の記事も書いていきたいと思ってます。 ということでちょっとテストします。 以下のシェル芸は長い猫を時計の針のように回転させるものです。 p=.png;c=convert;longcat -o a$p;$c xc:[500x500] b$p;for((i=360;i<720;i+=10));do $c a$p -rotate +$i c$p;t=$(echo "($i-540)*3.14/180"|bc -l);$c b$p c$p -gravity center -geometry +$(echo "-99*s($t)"|bc -l)+$(echo "99*c($t)"|bc -l) -composite i$i$p;done; $c i*$p images/a.gif このシェル芸を実行して生成したGIF画像が以下のものです。 回る猫のGIF画像 おわりに いい感じに表示できましたね。 今日の満足度は高めです。 できれば一週間に一度くらいのペースで記事を更新できたら良いな~と思っておりますので、 今後も何卒よろしくお願いします。 それでは、また。

作成日: 2023年4月8日 · 最終更新日: 2024年3月30日 · Yusuke Kato