Mae向きなブログ

Mae向きな情報発信を続けていきたいと思います。

LIFE SHIFT(ライフ・シフト)―100年時代の人生戦略

今までは、

  • 教育のステージ
  • 仕事のステージ
  • 引退のステージ

の3つのステージを意識した人生を考えておけばよく、自分の人生も、そろそろ引退のステージかとのんびりと構えていたところに、本書に出会い、いい意味でも悪い意味でも衝撃を受けたように思います。

本書を読み始めてすぐに感じたのは、仕事のステージを終えた後に続く約40年の引退のステージをどうするのかという怖さや不安みたいなものだったのですが、読み進めていくうちに、人生が長くなることで、ほかの仕事も経験できるチャンスが出てくると思うと、それはそれで楽しみなんじゃないかと思えるようになりました。

プログラミングなどコンピュータ関連の仕事というのは若い人に適しているというイメージがありますが、現在の仕事のステージを終えた後に挑戦してみるのも面白いかもなどと思いを馳せると、人生100年、なかなか楽しめそうだなと思えるようになりますね。

Racc練習

最近、Raccに興味を持っていて、いろんなサイトの記事を読んでいるのですが、その中で、面白い記事を見つけました。

とても丁寧な解説でありがたいのですが、Racc特有の文法(header,rule,inner,footerなど)に慣れていないと、掲載されているコード片をどうやって繋げればよいのか分からない部分もありました。

試行錯誤の結果*1、以下のようになったのですが、

  • Racoonクラスはどこで定義するのか?
  • そして、どこでインスタンス化するのか?

など、自己流で書いているのでRaccの流儀に合わないところなどあれば、ご指摘いただければ幸いです。

racoon.y

実行

$ racc -g -o racoon_parser.rb racoon.y; ruby racoon_parser.rb

f:id:rahaema:20180616102908p:plain

参考

LaTeXあれこれ(スタイルファイルの生成)

以前、Twitterで、

とつぶやいたところ、Acetaminophen (@aminophen) さんが修正コードを書いてくださいました。

LaTeXについては、ただ使っているだけでスタイルファイルなどに触れたことはなかったので、勉強のために修正コードを自分の環境に取り込んでみました。

手順0(okumacro.*をホームディレクトリ下に持ってくる)

これで、okumacro.dtxとokumacro.insファイルがコピーされる。

cp /usr/local/texlive/2016/texmf-dist/source/platex/jsclasses/okumacro.* .

手順1(修正ファイルを取ってくる)

$ wget https://patch-diff.githubusercontent.com/raw/texjporg/jsclasses/pull/69.diff

手順2(パッチをあてる)

$ patch -p1 < 69.diff
patching file okumacro.dtx
Hunk #1 succeeded at 826 (offset -23 lines).
Hunk #2 succeeded at 837 (offset -23 lines).
can't find file to patch at input line 29
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff --git a/okumacro.sty b/okumacro.sty
|index 9dc2e29..47b5fbf 100644
|--- a/okumacro.sty
|+++ b/okumacro.sty
--------------------------
File to patch:
Skip this patch? [y] y
Skipping patch.
2 out of 2 hunks ignored

スタイルファイル(okumacro.sty)の生成

$ uplatex okumacro.ins

okumacro.styの修正後

f:id:rahaema:20180610095704p:plain

参考

数学ガール/ポアンカレ予想

本書を読み終えた今、「ポアンカレ予想」が理解できたか?と問われたら、間違いなくNoだと思います。 p225やp340に、

* ポアンカレ予想
Mを3次元の閉多様体とする。
Mの基本群が単位群に同型ならば、Mは3次元球面に同相である。

とありますが、この予想すら理解するのは、正直なところ難しいです。

こんな難しいことを扱っている本書ですが、楽しめたか?と問われたら、自信を持ってYesと答えたいと思います。

ポアンカレ予想を理解するという大きな流れには乗れなかったのかもしれませんが、本書を通して、その支流にある今まで高校や大学などで学んだ微分方程式三角関数テイラー展開フーリエ展開などについての理解を、楽しみながら深めることができたのは有意義な経験でした。

特に印象に残ったのは第9章で、「テトラが言葉を失って椅子から立ち上がるような事実」への導きがとても良かったですね。自分でもノートに数式を書いていくというのも楽しみの一つでした。p326を読みながら新たに問題を設定して解いてみたのですが、実際に手を動かしてみると理解が深まるような気がします。

f:id:rahaema:20180520153751p:plain

また、シリーズ6巻目と言うことで、とうとう主人公のが受験を目前に控えた受験生に成長しています(我が子もそうですが、子供の成長は早い!)。特に受験を控えている高校3年生の受験生の方々にとっては物語を追うことで、と一緒に受験勉強に取り組み、そして乗り越えていくような体験をすることができるのでないでしょうか。サザエさんちびまる子ちゃんのように登場人物が歳をとらない物語とは違った良さがありますね。

平成30年度春季応用情報午後問3

平成30年度春季 応用情報技術者試験(AP)の午後問題3は、再帰による深さ優先探索を用いたナイトの巡回問題でした。

IPA 独立行政法人 情報処理推進機構:問題冊子・配点割合・解答例・採点講評(2018、平成30年)」のページでまだ解答が示されていませんので、自分なりの解答を載せておきます。

設問1
ア:2 イ:-2
設問2
ウ:iがM・N エ:i+1 オ:v+d[j] カ:h+dh[j] キ:board[v][h] ← 0
設問3

(1)

20行目:vを3からm+2まで1ずつ増やす
21行目:hを3からn+2まで1ずつ増やす

(2)

32行目:search(1, 3, 3)

(3)

2,3,16,17行目

設問1,2(h30h_ap_pm3_1.c)

設問1,2の実行結果

$ gcc h30h_ap_pm3_1.c && ./a.out
  1  8  3
  4 11  6
  7  2  9
 10  5 12

  1 12  3
  4  9  6
  7  2 11
 10  5  8

設問3(h30h_ap_pm3_2.c)

平成30年度春季基本情報午後問12

平成30年度春季 基本情報技術者試験(FE)の午後問題12(アセンブラ言語CASL)は、

  • 数字 → 数値変換(プログラム1)
  • 文字列から数字を探索し管理テーブルに格納する(プログラム2)
  • 2つの整数の積を求める(プログラム3)

についての問題でした。

基本情報技術者試験の午後問題では、C, COBOL, Java, CASL, 表計算の問題の中から1問選択して解答することになりますが、CASLを選択するという戦略は結構いいのではと思います。今回もあまり難しくない問題だったのではないでしょうか。

いつもは紙上で解いて終わりだったのですが、以下のシミュレータで実行してみました。CASLは不慣れですので、書き方などアドバイスをいただければ助かります。

プログラム1(h30h_fe_pm12_1.casl)

設問1の実行結果

問題文中の図1の例で試してみましたが、GR0に567が格納されています。

f:id:rahaema:20180503152352p:plain

プログラム2(h30h_fe_pm12_2.casl)

設問2の実行結果

問題文中の図2の例で試してみましたが、図3のように管理デーブル(0x001C番地)に数値を切り出すことができました。

f:id:rahaema:20180503152555p:plain

プログラム3(h30h_fe_pm12_3.casl)

設問3の実行結果

24行目で以下のようにデータを設定して試してみました。

DATA    DC      '25 10.' 

実行結果を見ると、GR0に250が格納されています。

f:id:rahaema:20180503153127p:plain

平成30年度春季基本情報午後問9

平成30年度春季 基本情報技術者試験(FE)の午後問題9(C言語)は簡易集計プログラムに関する問題でした。ファイルを扱うときは、Rubyなどのスクリプト言語を用いてきたのですが、久しぶりにC言語でファイル処理を行ってみました。

プログラム1(h30h_fe_pm9_1.c)

設問1の実行結果

$ gcc h30h_fe_pm9_1.c -o prog1 -DQ1
$ ./prog1 fig1.psv fig2.tsv && cat fig2.tsv
    FE-111         2       200
    FE-222         1       400
    FE-333         3       900
    FE-444         2      1200

プログラム2(h30h_fe_pm9_2.c)

設問2の実行結果

$ gcc h30h_fe_pm9_1.c -o prog1 -DQ2
$ ./prog1 fig3.psv fig4.tsv && cat fig4.tsv
$ gcc h30h_fe_pm9_2.c -o prog2
$ ./prog2  fig4.tsv
        11         1       100 |**
        12         2       800 |******************
        13         2      1100 |*************************
        15         3       700 |***************

使用したデータファイル

fig1.psv

20180410|112610|FE-111|0001|000100
20180410|154358|FE-111|0001|000100
20180410|123820|FE-222|0002|000400
20180410|153249|FE-333|0001|000300
20180410|135044|FE-333|0001|000300
20180410|152859|FE-333|0001|000300
20180410|131923|FE-444|0002|000800
20180410|123907|FE-444|0001|000400

fig3.psv

20180410|11|2610|FE-111|0001|000100
20180410|12|3820|FE-222|0002|000400
20180410|12|3907|FE-444|0001|000400
20180410|13|1923|FE-444|0002|000800
20180410|13|5044|FE-333|0001|000300
20180410|15|2859|FE-333|0001|000300
20180410|15|3249|FE-333|0001|000300
20180410|15|4358|FE-111|0001|000100