【問題のみ】jus共催 第44回シェル芸7周年で変態化が進みすぎなので実用的な問題しか出さないぞと宣言しておく勉強会(無保証)
Sat Oct 26 13:00:22 JST 2019 (modified: Sat Oct 26 19:00:46 JST 2019)
views: 3855, keywords:プログラミング,勉強会,シェル芸,シェル芸勉強会 この記事は最終更新日が5年以上前のものです。
- 問題で使われているデータファイルはGitHubにあります。クローンは以下のようにお願いします。
git clone https://github.com/ryuichiueda/ShellGeiData.git $
- 環境: 解答例はUbuntu Linux 18.04 で作成。Macの場合はcoreutilsをインストールすると、GNUのコマンドが使えます。BSD系の人は玄人なので各自対応のこと。
Q1
次のようなナンバープレースの問題があります。(出典: https://commons.wikimedia.org/wiki/File:Sudoku-by-L2G-20050714.svg )
$ cat sudoku
53**7****
6**195***
*98****6*
8***6***3
4**8*3**1
7***2***6
*6****28*
***419**5
****8**79
このファイルを、次のように、第一フィールドが行番号、第二フィールドが列番号、第三フィールドが区画(3x3のグリッドに適当に番号をつけたもの)、第四フィールドが値のファイルa
に変換してください。
$ head a
0 0 0 5
0 1 0 3
0 2 0 *
0 3 1 *
0 4 1 7
0 5 1 *
0 6 2 *
0 7 2 *
0 8 2 *
1 0 0 6
Q2
前の問題で作ったa
から、次のように5列目以降に入らない数字を書き込んだファイルb
を作ってください。入らない数字は重複を除去しなくて構いません。
$ head b
0 0 0 5
0 1 0 3
0 2 0 * 5 3 7 6 9 8
0 3 1 * 5 3 7 1 9 5 8 4
0 4 1 7
0 5 1 * 5 3 7 1 9 5 3 9
0 6 2 * 5 3 7 6 2
0 7 2 * 5 3 7 6 8 7
0 8 2 * 5 3 7 6 3 1 6 5 9
1 0 0 6
Q3
前の問題で作ったb
から、次のように、入る数字の候補を5列目以降に書き込んだファイルc
を作ってください。
$ head c
0 0 0 5
0 1 0 3
0 2 0 * 1 2 4
0 3 1 * 2 6
0 4 1 7
0 5 1 * 2 4 6 8
0 6 2 * 1 4 8 9
0 7 2 * 1 2 4 9
0 8 2 * 2 4 8
1 0 0 6
Q4
c
から元のsudoku
のフォーマットでsudoku_1
を作ってください。また、これまでの解答から、ナンバープレースの問題を解いてください。
$ cat sudoku_1
53**7****
6**195***
*98****6*
8***6***3
4**853**1
7***2***6
*6***7284
***419*35
****8**79
Q5
積分$$\int_0^{0.5} \log_e(\cos x) dx$$を計算してください。数値計算でかまいません。
Q6
次のspeech
の空行に、speech2
から順番に行を拾って埋め込んで、結婚式のスピーチを完成させてください。
$ cat speech
このうんこを作った
のは誰だあっ!!う
夜。秋は夕暮れ。冬
はうんこハァ テレ
無ェ、生まれてこの
やつはとんでもない
ものを盗んでいきま
の?疲れからか、
$ cat speech2
んこも休み休み言え
春はあけぼの。夏は
ビも無ェ、うんこも
かた見だごとア無ェ
した。あなたのうん
こですお前それうん
こでも同じ事言えん
Q7
次のファイルはあるメッセージが暗号化されたものです。ASCIIコードの文字一つ一つを5乗して437で割った余りを10進数で記述しています。各十進数を何乗かして437で割った余りをASCIIコードとして解釈するとメッセージが読めますが、これを解読しようとしています。
$ cat message
262 325 122 80 266 406 163 89 325 89 326
小問1
まず、各数字を200乗して437で割った余りを出力してください。正解はこうなります。
35 308 26 282 399 87 349 55 308 55 85
小問2
指数乗する数を変えて力づくで暗号を解いてください。
小問3
もっと合理的に解いてください。