【問題のみ】jus共催 第44回シェル芸7周年で変態化が進みすぎなので実用的な問題しか出さないぞと宣言しておく勉強会(無保証)

Sat Oct 26 13:00:22 JST 2019 (modified: Sat Oct 26 19:00:46 JST 2019)
views: 3236, keywords:プログラミング,勉強会,シェル芸,シェル芸勉強会 この記事は最終更新日が4年以上前のものです。

  • 問題で使われているデータファイルは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

 もっと合理的に解いてください。

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

prev:宣伝(おまけ問題つき): SoftwareDesign 11月号 next:【問題と解答】jus共催 第44回シェル芸7周年で変態化が進みすぎなので実用的な問題しか出さないぞと宣言しておく勉強会(無保証)

やり散らかし一覧

記事いろいろ