読者です 読者をやめる 読者になる 読者になる

私が歌川です

@utgwkk が書いている

2017年にやりたいこと

日記

今週のお題「2017年にやりたいこと」

印税生活を送る

風邪

日記

風邪をひきました.11月も風邪をひいていたらしい.

utgwkk.hateblo.jp

具体的には,咳,喉の痛み,鼻水,痰,微熱,そういった……. 病院で検査してもらったところインフルではなかったが,喉が腫れていたのでそういうことです.

ツイッターを見返すと,月1ぐらいで風邪をひいている様子が観測されて興味深い.

風邪 from:utgwkk - Twitter Search

体調管理には気をつけよう!

インスタントコーヒーの代わりに水

日記

インスタントコーヒーをカップ2杯ぐらい一気に飲んで作業する,ということをやっていたけど,効き目が切れると異常な脱力感に襲われたり,体調がなんとなく悪化したりする.

カジュアルに体調が悪化するのは困るので,最近はインスタントコーヒーの代わりに水を飲むようにしている.体調は悪くならないんだけど,眠たいし,甘味とか苦味とかは特にない.

Happy Belly Dash Button

Happy Belly Dash Button

押すと水が24L届いて便利なボタンです.

アッシュヒョーク

アドベントカレンダー

宇宙とは,どこにあるのでしょうか?

gyazo.com

人はなぜ,食べるのでしょうか?

gyazo.com

そこに食べ物があり,そこに食べなければ生きられない自分がいるため?

gyazo.com

ある時は冷徹に,ある時は暖かく,そういうふうにやるしかありません.

gyazo.com

そうして,人は生きていくのですから.

gyazo.com

ごちそうさまでした.

gyazo.com

www.adventar.org

ボタンを押すとそのボタンと周囲4近傍のボタンの ON/OFF が反転して,全てのボタンを ON にすればクリアのパズルゲームを解くやつ(5x5はライツアウトと言うらしい)の3x3の場合のソルバを書いて,考察してみる

技術

記事タイトルが長すぎる.

はじめに

みなさんは,ボタンを押すとそのボタンと周囲4近傍のボタンの ON/OFF が反転して,全てのボタンを ON にすればクリアのパズルゲーム(5x5はライツアウトと言うらしい)をやったことがありますか? 私はああいったパズルが苦手で,なかなか解くことができません.

したがって,機械に頼ることになります.

ソースコード

gist.github.com

解説

C++11 以降を使わないとコンパイルできません.

場の状態は,下の表の対応するビット(下から数えたビットの位置,1-index)が立っているかどうかで表されています.

0 1 2
0 9 8 7
1 6 5 4
2 3 2 1

したがって,例えば 0b010001110 は,次のような場の状態を表しています.

0 1 2
0 OFF ON OFF
1 OFF OFF ON
2 ON ON OFF

ボタンを押すと ON/OFF が反転する,という操作は排他的論理和によって表されるので,これによって次に遷移するべき状態を網羅することができます. そして,場の状態を頂点,ボタンの押し方を辺とすると,これは初期状態から目的状態への最短経路問題を解くことに帰着されます.

私はダイクストラ法を実装しました*1

startgoal を適宜変更して実行すると,最短手数とその解き方が表示されます.

解の存在性

さて,全ての問題(初期状態と目的状態の組)に対して解が存在するのか,という疑問が生じてきます.

まず,初期状態として 0b000000000 を考えることにします.

次に,目的状態として 0b1000000000b0100000000b000010000 の3つの状態を考えます. それぞれ,「左上のみON」「真ん中上のみON」「真ん中のみON」を表しています.

この3つの組に対して,上記のプログラムに入力として与えて(goal を書き換えて)実行したところ,結果は以下の通りになりました.

0b0000000000b100000000

5
0,0
2,0
2,1
0,2
1,2

0b0000000000b010000000

4
1,1
0,2
1,2
2,2

0b0000000000b000010000

5
1,2
2,1
1,1
1,0
0,1

どうやらこの3つの組に対しては解が存在します. そして,「全てのボタンがOFFの状態から始めて,9つのボタンのうちどれか1つだけをONにする」という場合は,先述した3つの操作をそれぞれ線対称/(1,1)に対して90度回転,などしてやれば網羅することができます.

これらの解は,どれも「最終的には,目的とするボタン以外のボタンのON/OFFは変化させずに,目的のボタンのみをONにする」という操作になっています.

さらに,あらゆる初期状態とあらゆる目的状態に対して,いま生成された9つの操作を組み合せて所望の状態にし,奇数回行った操作は1回分だけ残し,偶数回行った操作は除外してやれば,最短解を生成することができます.

こうして,全ての組合せに対して最短解が存在することが分かりました.

5x5 の場合

5x5 の場合は実装していないのですが,興味深い考察をしているサイトがありました.

場合によっては解が存在せず,パズルの解の存在条件は連立合同方程式を解くことによって導出することができる,とのことです.

おまけ

ボタン(略)ゲームの体感ができるページをだいぶ前に作ってました.

初期状態を与えることができない仕様になっている…….

*1:最短経路となる押し方を記録したかったんだけど,幅優先探索でもできそう??

『プリンシプル オブ プログラミング 3年目までに身につけたい一生役立つ101の原理原則』を読んだ

読書

私は-3年目です.

コードをただ漠然と書いているとそのうち破綻する. したがって先人の知恵とか,有益な慣習とか,そういったものに従ってうまくやっていくしかない. それらのことが101個も掲載され,詳細に説明されている本です.

具体的なコードの書き方よりは,コードを書く際のベターな思考法を述べた本であるといえましょう. こういうことを知っておくと,将来,とくに多人数で協調するときに大いに役に立つかと思われます.

ところで私は,最初からこうできないと失格である,とは思っていなくて,泥臭いところから始めてどれだけ洗練されていくかが重要だと考えています. 手を動かすところまでが一セットです. そしてこれは自戒でもあります.

カワイイボクと生活の質

アドベントカレンダー

はじめに

これは アイドルマスター Advent Calendar 2016 12/12分の記事です。

www.adventar.org

@utgwkk です。知り合いにデレステを勧められたところ、瞬く間にハマってしまいました。したがって新人です。

カワイイボク

みなさんは、カワイイですか? カワイイボクも、そうでないと思っているボクも、生きているといろいろなことがあります。 ここでは、カワイイボクになりきって生活をうまくやっていく方法を伝授していこうと思います。

苦しいとき

苦しいのは、神様がボクの余りのカワイさに嫉妬していて、ボクに試練を与えているためです。

楽しいとき

楽しいのは、ボクが余りにカワイイので世界が平和になっているからです。

勉強をしているとき

カワイイボクの書くノートは当然カワイイので、ノートも分かりやすくなります。これをカワイさの継承と言います。

運動をしているとき

カワイイボクはカンペキなので、運動も人一倍できるんですよ! フフーン!

それに、運動は健康にとても良いですからね!

カワイイ人を見つけたとき

ボクほどではないけどカワイイ人も、きっといろいろなことを乗り越えてきたのでしょうね。話を聞いてみると、何か学びがあるかもしれませんよ!

カワイイコミュニティーの中ではボクが一番かもしれませんが、他の人の話を聞くともっとカワイくなれるかもしれません。

おわりに

いかがでしょうか? カワイイボクの方は、もっとカワイくなっていきましょう。 そうでもないボクの方は、これを機に、自分に自信が持てるようになっていきましょう。

次回予告

次回は @raka3456 さんで「ゲッサンミリオン完結に寄せて」です。楽しみですね。