ディスカバリーチャンネルコードコンテスト2024参加記

special.discoveryjapan.jp

DSICO presetns ディスカバリーチャンネルコードコンテスト。略称DDCC。

本戦に行ってきた。

3位まで賞金が貰えるところ、5位。惜しい。

DISCOとは?

Presented by DISCOだし、本戦はDISCOの本社。 このDISCOがどういう会社かというと、知らない人が大半だと思うし、私も過去のコンテストに出るまで知らなかった。

半導体を作っている会社……ではなく、半導体を作る機器を作っている会社。世界シェアで7割とか持っているらしい。このご時世、それは強い。

会社説明で「弊社は経常利益率がすごい!」と言っていて、「はー、株価はどんなもんなんだろうな」とググってみたらすごかった。

そういえば、AtCoder投資法というネタを聞いたことがある。AtCoderでコンテストを開いた会社の株を買うと儲かると。最近のDDCCはAtCoderが絡んでいないが、とはいえ、最初に参加した頃にでも株を買っておけば10倍になったんだな。さすがに怖くてもう買えない……。

ついでにIRを見てみたら、従業員平均年齢37.6歳で、平均年収が1,300万円以上だった。○○ホールディングスみたいな実質役員だけという会社でもないだろうに、この年収はヤバい。

https://www.disco.co.jp/jp/ir/library/doc/fs/fs84.pdf

あまり褒めてばかりだと回し者だと思われそうなので、気になりポイントも挙げておく。説明会でWillという社内通貨制度をアピールしている。「同僚へのありがとうの気持ちをポイントにしてちょっとしたボーナスに」なら他社でも聞いたことがあるけれど、ガチでこれで仕事を回しているっぽい。こういうの、好きな人はめっちゃ好きだろうけど、嫌いな人は嫌いそう。経営者目線とか持ちたくないから従業員をやっている人もいるだろうしな。

www.disco.co.jp

予選

今のDDCCにAtCoderは関わっていない。昔は関わっていて、決勝イベントにchokudaiさんがいたりしたけれど。AtCoderは好きだが、日本のプログラミングコンテストが全てAtCoderになるのはそれはそれで不健全だと思うので、自社でコンテストを開こうという企業にはがんばってほしい。

ということで、予選もAtCoderではない。事前に申込みが要るので注意。

問題もAtCoderとはちょっと毛色が違う。今年の問題は……無いな。たぶん、ここにそのうち公開されるはず。

www.disco.co.jp

問題の難易度はそんなに高くない。AtCoder ABCでD-Eくらいが解ける人なら全完を狙えると思う。非就活生枠の本戦進出は全完前提の解答時間争いになっているのではなかろうか。入力は全て与えられて、手元で実行する形式。しかし、Google Code Jamと違って使える言語に制限がある。微妙にパースしづらい入力形式はソースコードに埋め込むことを想定しているのだと思う。

過去に出たことがあるのにそれを忘れていて、もたもたしてしまった。他の人が本戦出場の連絡の話をしているのに遅れて連絡が来たので、繰り上がりだったのだと思う。

本戦

ツリーに感想を並べている。

実際に物を動かして競うのがDDCCの特徴。今回の問題はこれ。今回というか、ここ数年は毎年似たような物らしい。

奥の射出口からパチンコ玉が出てきて、それを穴に入れる。各穴は最大10個までしかカウントされないので、複数の穴を狙う必要がある。

射出口の向きと、台の傾きと、棒の回転が制御できる。良く見ると分かるように、たいていの穴は射出口との間に棒や他の穴があるので、上手いこと避ける必要がある。また、射出口と目標の穴を結んだ直線と棒の角度が大きかったり、台を大きく傾けていたりと、難しい状況で穴に入れると加点がある。

シミュレーション

最初の時間はシミュレーション。答えを提出すると、運営の用意したシミュレーターが動いてスコアが返ってくる。玉がどのよう動いたかなどは分からず、得られるのはあくまでスコアだけ。

これで正のスコアを取らないと、実機で動かすフェーズに進めないらしい。とはいえ、一番近いところは何もしなくても入るし、まあ適当に。朝早いから眠いし。

ということで、とりあえず射出口の向きだけ穴に向けた。ほとんどの穴は他の穴か棒に弾かれるけど、正の点数だけ取れば良いんでしょ……と思っていたけれど、ルールを良く読んだら、実機で動かすのはこのシミュレーションの得点順だった。早く実機で動かせればそれだけ直す時間が長くなるので、実は重要だった。

トライアル1回目

無事(?)正の点数は取れたので、実機用のコードを書く。

直接狙えない穴は、射出口の方向と台の傾きを良い感じにして狙う必要がある。実はそんなに難しくない。坂を転がるときの玉の回転モーメントを考慮した加速度は問題文で与えられていた。x軸方向とy軸方向に分離すると、等速直線運動なり等加速度直線運動なりになる。x軸方向とy軸方向それぞれについて目標の穴の位置に達するときの時刻を求め、その差が0になれば穴に入る。後は適当に。別にAtCoderのように10-6精度で求めなければいけないわけではないし、時間も厳しくないし、方向を1万通りくらい全探索することもできる。

実機用のコードも提出したときにシミュレーターによるスコアが返ってくる。……なんか一番近い穴以外を狙ったときは0点になるな。なんで……?

結局このバグが取れないまま実機でのトライアル。

www.youtube.com

邪魔にならない向きにしているはずの棒がめっちゃ邪魔をしていた。あらためてコードを読むと、1/1000度単位で指定しないといけない角度で、0を1個付け忘れ、1/10000度単位になっていた。これはひどい

持ち物には書かれていなかったけれど、カメラかスマホか様子を撮影できるようなものはほぼ必須。記憶だけだと直しようがない。

トライアル2回目

そのバグを直して2回目。いきなり現実の摩擦を考慮したりはできないので、「なお、摩擦や空気抵抗は考えないことにする」で素直に穴を狙っている。

www.youtube.com

まあ、こんなもんでしょ。

1個目と2個目の穴は障害物が無いので何も難しくない。3個目は、摩擦があってちょっと手前に落ちたが、棒に当たって良い感じに穴に入っている。ラッキー。4個目はさすがに手前過ぎてダメ。もうちょっと奥に行かせる必要がある。5個目はまあOK。6個目は、本当は反対側の奥の隅を狙いたいのだけど、バグって上手く動かない。

これが1回目のトライアルでできてりゃな……。1回目で誤差を修正して2回目のトライアルで確認だけするということがしたかった。

ファイナル用のコード

ということで、3個目はラッキーで入っているのでそのままで良いだろう。4個目は、適当に1.1倍くらい奥に穴があると思うことにした。6個目は、2次方程式を解くところで間違えていた。2次方程式だから解が2個あるところ、逆側だとどちらの解を使うのかが変わるのか。修正。それでも、6個目がシミュレーターだとなぜか点数が入らないんだよな。謎。きっと実機なら入るだろう(間違いは後で分かる)。あと、狙う穴を変える前の待ち時間をちょっと詰めた。

で、時間はまだ余っているがやることが無くなった。時間をもっと詰めるとか、今は完全に邪魔にならない向きにしている棒をもうちょっと傾けてスコアを稼ぐとかはあるのだけど、もう実機で確認はできないし、そこで無理すると大幅なスコアダウンになりかねない。どうせ入賞を狙える感じでもないだろうし、確実にいこう。

提出。

コードは上げておいた。

github.com

そう、実機で動かすからデバッグとかがまともにできなくて大変なのであって、コード自体は普段のAtCoderに比べればとても簡単。

会社見学

最終試技の前に社内見学。

社内にプールとかジムとかある。これは単なる福利厚生だけではなく、非常用水としても使えると。なるほど。そういや、地震で近くの学校に避難したときは、プールの水でトイレを流したりしたな。

普通は直線で切っているウェハもソフトを書き換えれば丸く切れるんだぞというデモを見た。そんなんソフトだけでどうにかなるのか。

うちの技術だとシリコンウェハを透けて見えるくらい薄く削ることもできるんだとか。シリコンは、赤色のように波長の長い光のほうが透過しやすいらしい。へー。1ミクロンくらいのペナペナになるけど、そのウェハ上に作る集積回路の配線は、そこからさらに3桁くらい細いとか。

ファイナル

皆で実機の周りに集まって最終試技。

なお、これまでのトライアルでは他の人の結果は見られない。実機が衝立で囲われて、そこに1人ずつ入って自分の出力が動く様子を見ていた。なので、他の人がトライアルでどんな動きをしていたのかは分からない。

ファイナルは2回目のトライアルのスコアの低い人から順に行うということで、ここでファイナルの順番&2回目のトライアルの結果発表。

なんか1位だった。え、マジで??? あとは、そこそこの順位で「楽しかったね」か、大失敗して悲しい気持ちで帰るかのどちらかだと思っていた。「入賞できるかも?」と期待が高まる。1位なら30万円、2位なら20万円、3位なら10万円。ちなみに賞状はシリコンウェハ製。これも欲しい。

結果。

www.youtube.com

最後~。あの方向だと手前の穴に落ちるのか。シミュレーターは正しかった……。あと、棒の向きも間違えてるな。邪魔にならないように90度回した向きにしているつもりだった。

とはいえ、5位となかなかの高順位。やっぱり実環境は難しいので、確実に動かせれば、それだけでそこそこの成績になる。

いや、でも、これは悔しい。次があったらもっと気合いを入れていこう。

大田BLD2024新春と3x3x3目隠しとクロックの話

speedcubing.or.jp

目隠しの競技種目を主体とした(ルービック)キューブの大会、大田BLD2024新春に行ってきた。その辺の話をつらつらと書いていく。3x3x3目隠しが1回は成功したのでまあ満足である。

3x3x3目隠し

略称3BLD。普通の3x3x3のキューブを見ずに揃える種目。

と聞くと「そんなことできるの? 人間が短期記憶できる量であるマジカルナンバーは7±2で……」とまず思うだろう。意外とできる。100人が100人できるとまでは言わないが、特に記憶力に優れているわけでもない凡人でもできる。

普通にキューブを揃えるのとは全く方法が異なる。キューブの状態を平仮名の列に変換して覚え、揃えるときにはその平仮名に対応する手順を回してく。詳細は次の動画やPDFを参照。

www.youtube.com

BLD教本2020-1-30

以前からちょこちょこ練習をしていた。1-2分くらい、成功率9割くらいで揃えられれば、一発芸として使えるし、息抜きにも良さそうだと思っていた。まあ、10分くらい掛かるし、成功率も数割だったが……。

クロック

買ってはあった。こんなの。

動かしている様子。

中にギアがあって、複数の小さな時計が連動して動く。ピンを上下すると動く組み合わせが変わる。これを使って裏表の時計を全て12時にする。

(ルービック)キューブと何の関係が……? という気がしてくる。

TORIBOではWCAの競技種目で使われるパズルを一覧にしたページがある。そこでも浮いている。

TORIBOストア / TORIBOのおすすめ

正4面体や正12面体は、正6面体からの発展としてで分かるが、時計は謎。これで、「形は全然違うけれど、本質は同じなんですよ」というなら面白い話だけれど、そこも違う。

ルービックキューブとは異なり、ルービッククロックは解く上で操作が交換可能、つまり操作の順序は関係ない点が挙げられる。これは「操作」を「ボタンを設定してダイヤルを回す」動作単位と理解した場合であって、もちろんボタンの動かし方とダイヤルの回し方は交換可能ではない。その結果、完全な解法は他のパズルに見られる群論よりも、より易しい線形代数のテクニックを用いれば得られることとなる。

ルービッククロック - Wikipedia

キューブは R U R' U' という操作で元には戻らないが、クロックは UR1+ DR1+ UR1- DR1- で元に戻る。

パズルの性質が変われば解法の性質も変わる。キューブは何十個も手順を覚えてそれらを適宜使い分けていくが、クロックは一直線。スクランブルによって時計を回す量こそ変わるものの、ピンの動かし方は一緒。回す量の計算と回す操作をいかに速くできるかという勝負になる。面白いと思う人もつまらないと思う人もいそう。

WCAの種目にあるのは良いとして、なぜBLD(目隠し)の大会の種目に選ばれたのか。最近7 simulという解法が出てきて、これはインスペクションタイムの間に状態を数字列に変換して、回している間には裏面は一切見ない。3x3x3キューブなどでもインスペクションタイムはあるけれど、数字や文字列に変換して覚えている人は(たぶん)いない。新しい解法が目隠しの種目に近いということなのだろう……と思っていたけれど、過去には同じ主催者で7x7x7キューブがあったりするな。主催者の気まぐれかもしれない。

本大会は BLD大会推進有志の会 による 3x3x3 目隠し、4x4x4 目隠し、7x7x7 キューブの大会です。

https://speedcubing.or.jp/competition/OtaBlindSummer2023/

真相。こういうことだったらしい。

告知&申込み

FMCの大会 が終わり、「最少手数も面白いけれど、やっぱり普通に速く揃えられるようになりたいよね。練習するか」と思っていたタイミングで開催が告知された。

せっかく行って「1回も成功しませんでした……」では心が折れそうで、どうするか迷ったけれど、3x3x3目隠しに申込み。

ついでにクロックも。WCAのランキングで、世界レベルとか日本1桁順位とかは端から諦めているけれど、日本2桁順位は目指したいなと思っている。日本2桁順位と聞くとすごそうだが、種目によってはそんなに難しくない。クロックもその1つで、申し込んだ時点では単発100位が15秒くらい、平均100位20秒くらい。クロックをやってみれば分かるが、わりとすぐに達成できそうなタイム。加えて、最近新しい解法が出てきたんでしょ? それを覚えればいけるのでは? と思った(フラグ)。

クロックの練習

その新しい解法がこれ。上位陣は皆使っているらしい。

note.com

……いや、これを15秒で計算するのは無理でしょ。諦め。

簡単版。これならできそう。

note.com

他。

この記事にも書かれているように、最近の速い解法の本質は、裏返さないことではなく、クロックの最少手数である14手を同時に回して7ステップにすることなのかもしれない。あとは、その7ステップを効率的にするためにインスペクションタイムに何ができるか? でバリエーションが生まれると。

インスペクションタイムに全てを詰め込むことによって、回すときに固定の角度を回すか、ある針を別の針に合わせるだけかにすると、Tommy版になる。インスペクションタイムを楽にする代わりに、ちょっと妥協して、左手の操作で動く針に対して右手で針を合わせる操作があっても良いだろでeasy(bpaul)版。下のダイヤルは回したくない、そのためにはフリップが必須で、それならついでに実行時に裏面の情報が使えるよね? で7sfndmw4lmという感じだろうか。

bpaul版をベースに、フリップはy2よりx2のほうが楽なのでそうして、数字の順番をちょっと変えればフリップ回数も減らせるだろうと変えた解法を覚える事にした。

実際にやってみて、終わった後に裏返しても全然揃っていませんが……。ということで分析の練習をするツールを作った。

7 Simul Trainer

ご活用ください。自分では最初の少しの間しか使っていないけど。結局、回すほうも合わせて練習しないとしょうがない。

これで分かったことは、分析のときに時計回りと反時計回りを間違えることが多いらしい。どうしても差分の絶対値で見てしまう。

15秒以内での分析はできるようになった。が、ついぞ同時回しはできるようにならなかった。右手と左手を同時に動かすのは無理だよ……。覚えた数字を使わずに、ある針を別の針に合わせるステップはまだしも、分析した数値分回すところは間違えるとどうしようもなくなるし。

練習の成果はこんな感じ。

10秒は切りたかったな。ま、国内2桁順位は余裕だろ(フラグ)。

クロックの調整

針が白い時計が主に回るときは軽いのに、黒だとなんか重い。分解してみると、中央の時計が白と黒で磁石の押し込み具合が違っていた。

一番細い精密ドライバーで磁石を押し込んだら良い感じになった。同じ問題で困っている人は自己責任で試してみてほしい。小さなナットが固定されているようで固定されておらず、持ち上げたときにポロっと落ちたりするので、無くさないように注意。

QiYiか他のメーカーが新しいクロックを出すときには、ツールレスで分解できるようにしてほしい。ついでに磁力調整機能もお願いしたいが……めっちゃ高くなりそうだ。

クロックのルール変更

F3) The competitor may change the state of the pins during the inspection. These changes are not counted as moves.

https://www.worldcubeassociation.org/regulations/#F3

2024年1月1日から、インスペクションタイム中にピンを操作することができるようになるという話が流れてきた。大田BLD2024新春は2024年なので対象。

できるというか、動かしてもDNFにならないというか。これはありがたい。大会で解いている動画を見ると、タイマーを開始する前にクロックを立ててそっと置いている様子がある。寝かせて置くと、ピンが動いてDNFになってしまうので。立てておくときに緊張して倒してしまいそうで怖かった。

ロゴ無しセンターキャップ

ルール上、目隠しで使うキューブにはロゴがあってはいけない。手触りで面が分かってしまうからだろう。

ロゴ無しのセンターキャップがTORIBOに売っていたなあと思ったが、完売。

store.tribox.com

そもそも、手元のGAN13とGAN14のセンターキャップを確認したら、互換性は無かった。センターキャップの発売後にGAN14が出て、商品名が更新されていないだけだと思っていたけれど、そうではなかった。

GANの公式ショップで買った。

shop.gancube.com

センターキャップ自体は0.99ドルと安いのだけど、送料が9.9ドル……。

キューブを買うと、ドライバーとか巾着袋とか手順表とか謎のカードとか色々とおまけが入っているのだから、ロゴ無しセンターキャップも入れてくれないかな。

あるいは、WCAがロゴを認めてくれれば良いのだけど。1面にロゴがあるだけで有利になることあるか? と思ったが、あらためて考えてみると使い道はあるな。M2法ではM2を多用するところ、私はこのM2がM'になるミスが多かった。これが手触りで確認できてしまう。ここをミスらない人でも、ロゴのある位置で今が偶数番目の文字なのか奇数番目なのかが確認できる。ロゴ禁止のルールが変わることは無さそう。

そもそも他社のキューブだとロゴ無しセンターキャップを売っていないだろうし、何かで削って消すのが一般的らしい。

アイマス

目隠しをするためにアイマスクが必要。持ってない。日が昇ってから寝る生活をしていたら、明るくても寝られるようになってしまった。

何でも良いのだろうけど、あまり安物だと大事なところで紐が切れたりしそうだし、そこそこのものが欲しい。でも、アイマスクのことは何も分からん。そもそも、本来は寝るときに使うもので、目隠しのために使うものではないので、高いものが目隠し用途として良いとも限らないだろう。

インストールだけはしたPokémon Sleepのアイマスクを買った。

アイマスク Pokémon Sleep カビゴン : ポケモンセンターオンライン

ちょっと小さい気がしないでもないが、それ以外に特に不満は無い。キャラクターものだし、同品質の他のものと比べれば割高かもしれないが。

コンタクトレンズ

メガネを掛けたままではアイマスクを付けられないことに気が付いた。

手はキューブを持ったままで首を振ってアイマスクを付ける「nod don」という技があるらしいが、そこまでするつもりはない。ただ、メガネを外してアイマスクを付けてと時間を掛けていると、記憶が飛びそう。「目隠しをするのだからメガネは要らないだろ」と言われそうだが、分析フェーズでは見ないといけない。私の視力だと、ギリギリ見えなくはないけれど、ちょっと厳しい。

人生で1回くらいは試してみたかったので、生まれて初めてコンタクトレンズを買った。

目にレンズを入れることはギリできるかもしれないが、正確に位置を合わせるなんてできるものなのか? と思っていた。ある程度なら瞬きなどで勝手に黒目の中心に動く。へー。むしろ、外すときにずらそうとして、瞬きをしてしまうと元に戻る。なぜずらすのかというと、黒目と白目の間には段差があり、ずらすと外しやすくなるから。段差なんてあったんだ。へー。

ということで、コンタクトレンズを手に入れたが、慣れないものだから、付けていると気になってしょうがない。コンタクトレンズは止めよう。メガネを外してアイマスクを付けたほうがマシ。大会では他にもそうしている人がいた。

メガネを掛けなくてもはっきりものが見えるというのは新鮮だった。まあ、このコンタクトレンズはそのうち何か役に立つ機会があるでしょう。

会場

会場は東京大田区の池上会館というところ。Google先生に行き方を訊いてみると、最寄り駅は西馬込か蒲田で、どちらからも徒歩20分くらい掛かるな……。でも、今あらためて検索したら、池上線を使うルートが出てきた。なぜ当日は出なかったのだろう。本数が少ないのか?

会場の建物の近くにえらく広い墓地があった。力道山もここに眠っているらしい。

会場。

部屋でdocomo回線が繋がらない。そんなことある? 駅からちょっと遠いと言ったって普通に街中だぞ。フリーWi-Fiがあったので、それで凌いだ。

5x5x5目隠し

最初の競技。ジャッジが割り当てられていた。

ジャッジは正当な理由無く拒否できない。へー。

1e2) 全ての競技者はジャッジをできるように用意をしなければならない。ジャッジをするように要請されたときには、WCA 代理人の裁量により、正当な理由(例:パズルに慣れていないため)においてのみジャッジを免除される。罰則:大会における失格(参照:規則 2k)。

https://www.worldcubeassociation.org/regulations/translations/japanese/#1e2

目隠しだと、ジャッジが板をすっと競技者の顔とキューブの間に差し挟むのは知っている。知っているが……5x5x5で目隠しって揃えるのに10分とか掛かるんじゃ……。腕が攣りそう。と不安だった。こんな感じの首に掛ける板が用意されていた。競技者がこれを使えば、ジャッジが板を持つ必要は無いと。

しかし、組み立て方が分からない。

競技者「これどうやって使うの?」

私「さあ……」

で、周囲の人に訊いたりしていた。

フレームと板が上手いこと組み合わさるはずだ……と試しても正解が分からないのはそれはそうで、これ、本来はハーモニカを固定するためのものらしい。それにプラ段ボールを貼り付けて目隠しに流用している。

しかし、5x5x5のキューブを目隠しで揃えるとかよくできるもんだな。記憶しないといけない量は平仮名で約100文字くらい。3x3x3のルービックキューブを4-5個目隠しで揃えることに相当する。記憶もそうだけど、約100文字分の手順を1回もミス無く回しきらないといけない。たとえ紙に平仮名をメモしておいたとしてもできる気がしない。

1試技目と2試技目が失敗。3試技目で成功していた。すごい。

ジャッジしていた人は、大会の最後で表彰されていた。ベトナムのNR(national record)だったらしい。NRというか、所属国ベトナムで初めての5x5x5目隠し成功らしい。ジャッジで何かやらかしてこの記録をふいにすることがなくて良かった。いや、NRでなくてもやらかしてはだめだが。

昼食

街中だし、近くにファストフード店くらいあるでしょ。無いな。こういう集会所にはちょっとした飲食店が……。小洒落たカフェしかない。ケーキとか食べても腹が膨れないなぁと思いながらメニューを見たら、なぜか担々麺があった。

美味しいのだが、いかんせん量が少ない。たしか大盛オプション的なものがあったので、付ければ良かった。

初心者レクチャー

競技者向けでもジャッジ向けでもある。ありがたい。

先述のようにクロックのピンは動かしても良くなったので、動かしたからといってDNFにするなよとか。板を顔とキューブの間に挟むのは1手目を動かした後だとか。これは、アイマスクを付けた後でも、1手目を動かす前ならアイマスクを外してキューブを確認することが許されているから。

あとは、競技者とジャッジで、ソルブ終了の合図を事前に決めておきましょうとか。ルール上、ソルブ中にキューブから手を離してはいけないことはないので、キューブを机に置いたときにストップウォッチを止めてしまうと、まずいことになる可能性がある。スタックタイマーを止めるときのように机に両手を置くのを合図にするのが一般的ですと。あれ、ルールには口頭で終了を伝えると書かれていたような……。競技者とジャッジが合意していれば良いのか……? と思った。

B5b) ストップウォッチを使用する場合、競技者はパズルを競技面に戻しジャッジに口頭で試技終了を知らせることによってソルブを終了する。その瞬間、ジャッジはストップウォッチを止める。

https://www.worldcubeassociation.org/regulations/translations/japanese/#B5b

これ、邦訳版の規則が古いらしい。最新の英語版だとこう。

B5b) When using a stopwatch as the only timer, the competitor stops the solve by releasing the puzzle and notifying the judge that they have stopped the solve. The judge stops the stopwatch as soon as the competitor does this.

B5b1) The competitor's default notification signal consists of releasing the puzzle(s) from their hands and placing their hands on the surface, with palms down. The competitor and the judge may agree on another appropriate notification before the start of the attempt.

https://www.worldcubeassociation.org/regulations/#B5b

3x3x3複数目隠し

これもジャッジ。

ジャッジをしていた人は7個揃えていた。1個を揃えられるかどうかの私には、これができることが信じられない。「場所法」と言って、例えば家から最寄りの駅までの道順を想像し、その途中に物を置いていく様子をイメージすると、100文字でも覚えられるらしい。単純に文字列を覚えるよりも情報量としては多いはずだが、人間の記憶は不思議。ヒトという生物は、文字を使うようになるはるか前から、食べられる果物がどこに生えているかとかを覚えていて……ということなのだろうか。

3x3x3目隠し

メインイベント。最近成功率が下がっていて、あまり揃う気がしなくて憂鬱だった。

1試技目。アイマスクを外したら揃っていなかった。はい……。録画をしていたので確認してみたところ、BF↔UFの U2' M' U2' M'U2'U' になっていた。どこをどう間違えたか確認するのは普段からやっておくべきだった。「あー、ダメだったか。じゃあ次」では成長が無い。

2試技目。めっちゃ時間を掛けて丁寧にやった。成功。5:47.19。タイムは遅いけれど、3x3x3目隠しの記録を残せたので満足。

3試技目。

ジャッジ「3試技目どうする?」

挑戦せずに棄権という選択肢もあると。なるほど。今回の大会では、3試技での累積時間が最大10分間という制限があった。残り1分間くらい。2試技目は「丁寧にやろう」で時間を気にしていなかったけど、この制限時間もけっこう危うかったんだな。諦めない気持ちは大切だが……どう考えても無理なので棄権。

最後のグループは、世界が違うというか、皆すごい速さで揃えている。なるほど、一番遅い人がグループの律速になるから、速いであろう人を1個のグループにまとめると全体の進行が速くなるのか。

クロック

10秒台前半の記録が残せれば満足だし、それはいつも通りにできれば達成できるはず。ということで気楽に……。

結果。

……。全然だめ。

1試技目で覆いが外されると、クロックの向きが12時が上ではなく、「え、あれ……」と混乱した。向きが違っても最後のステップを変えるだけで良いはずなのだけれど、「12時のマークが3時の位置にあったりすると混乱するだろうなぁ」とその後の試技も向きを直してからやっていた。若干時間が掛かるようになるし、なんかテンパってもうだめ。だいたい揃うようにはなったので、1~4試技目は最後に裏面を確認し、そこである程度のタイムが確定したら、最後は裏面を見ないで記録を狙おうかな~とか始まる前は思っていたが……。

いや、「3x3x3でも向きはランダムだったでしょ?」と言われればその通りなのだけど、3x3x3はcolor neutral(向きを気にしない)で揃えていて、全く意識していなかった。クロックも、最初に向きを直す練習をするのではなく、3x3x3のクロス色を選ぶように向きを選ぶ練習をするべきなのだろう。「覚える数字のうちこの数字の絶対値が小さくなる向きを選ぶのが良い」とかの記述は見ていたけれど、「コンマ数秒を争うような腕前じゃないしな」で正面向きでしか練習していなかった。次の機会があればそのときには……。

綾瀬FMC2023反省会

speedcubing.or.jp

FMC(Fewest Move Challenge)という、(ルービック)キューブを速く解くのではなく、短い手数で解くという大会に参加してきた。

それ面白いの? と思うかもしれない。 綾瀬FMC2023の開催が告知された1か月前の時点で、私はそう思っていた。 取り組んでみると、これがなかなか面白い。 運と実力のゲームバランスが良い。 当然、手法を身に付け正確に実行できるようになるにつれて記録は縮むのだけど、各ステップで数回に1回ラッキーが引ける。 射幸心が煽られる。

どのようにして短い手数で解くのか気になる人は、以下のページにまとめたので見てほしい。

FMC

CFOPでOLLもPLLも1 lookで解くと、60手くらいらしい。 ルービックキューブの各状態の真の最短手数は中央値が18手。

www.cube20.org

2023年現在の世界記録は16手。 これは、スクランブルの最短手数が16手という数%のラッキーを引いた上で、そのスクランブルに存在する唯一の最短解を1時間以内に人力で見つけ出している。

kawam1123.github.io

最短解を出せるのは、今のところは本当にトップ層の人だけ。 しかし、ここ数年でも新たな手法が生み出されている。 数年後には、誰でも最短手数が出せるような手法が開発され、ルールが変わったりするかもしれない。 FMCで遊ぶなら今のうち。

そう、最近でも新しい手法が出ている。 今の技術なら、すごく頭が良かったり、指の動きが速かったり、人生を賭けて何年も練習し続けたりしなくても、30手は目指せるラインだと思っている。 平均30手って今の日本の国内ランキングだと15位である。 「新しい手法を勉強したら、未経験からでも良い線いけるんじゃね?」というのが参加した動機の一つである。

まあ、世の中そんなに甘くはなかった。反省。

結果は、第1試技: DNF、第2試技: 39手、第3試技: 33手、平均: DNF。

DNFは、Did Not Finishの略で、要は「あなたの提出した解答は間違い。それではキューブは揃いませんよ」ということ。

まあ、でも、そんなに甘くないとはいえ、World Cube Association公式サイトに100位以内で名前を残したいというなら、普通の速解きよりははるかに狙い目だと思う。

大会の様子

実際どんな感じか分からないので、申し込むときはちょっとビビっていた。

素人お断りのような雰囲気は全く無かったので、ビビる必要は無い。 むしろ、運営の人は門戸を広げようとしている。

キューブの大会は、前回の普通の3x3x3速解きの東京チャレンジ VIII 2023が初めてだった。 今回の綾瀬FMC2023の申込みはこの大会の前。 「キューブの大会に初参加みたいだけど、これ3x3x3速解きじゃないからね? 間違ってないよね?」と心配のメールも届いた。 ありがたい気配り。

(DNFを出した自分に言い聞かせているような気がしてくるが……)実力者でもDNFを出しているので、DNFだからといって恥ずかしがることはないだろう。 ただ、解答用紙のマスは80個であり、80手より長い解答は無効となる。 80手でキューブを解けないのに参加するととても悲しいことになる。

あと、3x3x3の速解きだと、「初めての人は集まってください。タイマーの使い方を説明します。練習で1回やってみましょう」という初心者向け講習会があったが、そういうのは無かった。 そりゃ、解答の書き方とか、一から説明する時間は無いだろうしな。 解答用紙に簡易的に書いてあるとはいえ、ルールはちゃんと事前に把握しておく必要がある。

あと、持ち物に時計は必要(かもしれない)。 今回はスクリーンに残り時間が写されていたけど、競技のレギュレーションで定められいるわけではないので、大会によっては無いかもしれない。 普段はApple Watchを使っていて、スマートではない時計を引っ張り出してきたら電池が切れていた。 ソーラー式なので会場に向かう途中に空に向けていたが、今日は曇りで、バッテリーは復活しなかった。

競技中の様子。

机に向かってひたすらもくもくとキューブを回して解答を書く。 「電子機器の電源は切ってください」から始まるこんな試験らしい試験はいつ振りだろう。 10年ぶりくらいかもしれない。

事前に座席表も配られていて、会場に行ったらそのまま席に座り、時間になったらスクランブル(問題)と解答用紙が配られて解く。 でも、何回も参加していそうな人が「ペーパーテストみたいでうけるw」というようなことをツイートしていたので、同じFMCでも他の大会だと違うのかもしれない。

そういえば、紙に書かれた解答をどうやってジャッジするのかが気になっていた。 40人以上の解答を運営の人だけでチェックするとか無理では? と。 「手の空いている人は前に集まって手伝ってください」だった。

手伝ったのだけど、書かれた解答を回すのに時間が掛かったり、

私「これDNFだと思うのですが……」

他の人「どれ……。いや、ちゃんと完成しますよ」

ということがあったりで、あまり役に立てなかった。

FMCで一番重要なスキルは、手順を正確に素早く回せることだわ。 もちろん、ジャッジの手伝いだけではなく、自分で解くときにも重要。 正確に回せないと、回し方が間違っているのか、書いた手順が間違っているのかが分からなくて、どうしようもなくなる。 キューブを揃えて一通り回して確認するのに1分は掛かる。 60分の制限時間の中での1分は大きい。

自分では使わないから覚えていなかったけど、解答には書かれているので、持ち替え記号も把握しておく必要がある。

反省

詳しくは後述するが、まともに揃えられたのは最後の1回だけ。 とても悔いが残った。

家でリラックスしているときと、大会本番の緊張感の中と、どちらが記録を残せるかは人によるだろう。 東京チャレンジ VIII 2023で分かったが、私は後者である。 とはいえ、「数十秒の速解きではなく、1時間でしょ? 緊張することもないだろう」とコンテストが始まるまでは思っていた。 全然そんなことはなかった。 速解きの10秒とFMCの最後の15分間のテンパり具合は同じ。 焦っていると、キューブを普通に解いて初期状態に戻すことすらできなくなる。 (少なくとも私は)家でやったら10回中10回できる、こんなの当たり前でしょ? というくらいにならないと、本番ではできないな。

これが何とかなったとして、どうやってもっと短い手数で解けるのかというのが気になる。 私は基本的に30手前半くらいで、すごく運が良いと30手を切れる。 トリコンTwitterに上がっている解答を見ると、30手をコンスタントに切れている人がいる。 どんなテクニックがあるんだと。

席が隣だった。 普段は最終的な解答しか表に出てこないので、とても興味深い。 計算用紙の密度がすごい。 私とは桁違いの量を書いている。 まずは、手を速くして試行回数を増やすことか。 ちょっと話を聞いたけど、DRまでではなく、HTRも何個も作っているらしい。 他にも手数を縮める細かいテクニックが色々とあったりするのかもしれないけど。

私の解法

せっかくなので載せておく。

概要はこの一連のツイート。

スクランブル

第1試技

EOが2手で揃う。 これは30手切れるだろ。 幸先が良い。

DRまですんなり進んで、11手3QTのDRが得られた。 私としてはかなり良い。

欲を出してNISSで逆方向からも探し、同じく11手3QTのDRが得られた。

まあ、1個目のほうで良いかなと、HTRに進む。 ん~、エッジが上手いこといかないな。 あれ? そもそもコーナーも揃ってないのでは??? で、QT数の分析が間違っていたことに気が付いた。 本当は4QTだった。

それならもう1個のDRで……と思ったが、書いてある手順を回しても、DRにならない。 書くときにミスったのか、今回したときに間違えたのか。 終了時間が迫ってきて焦る。

この際4QTでも良いだろと最初のほうで4QTのルートを辿り始めるが、焦っていて上手くいかない。

平均の記録を残したいんですよ。 ということで、マジでCFOPを使って解き始めた。 短い手数を目指すから難しいのであって、解くだけなら普通に解けるからね……と思いきや、普通に解けない。 手順を書き留めながら解くのってこんなに難しかったのか。

さよならmean。

どうも指で覚えているところがあったらしく、途中で手を止めると次が分からなくなってしまう。 OLLで2層回しを使うものが出てきてパニくった。 1層回しに直そうとして混乱していたけど、ルール上2層回しは許されているので、2層回しで書けば良かったな。 あと、黄色クロスで解けば良かった。 FMC以外では色で操作を書くことはないので、これも混乱する。 まあ、さすがにFMCをCFOPでそのまま解くときのこの反省が生きることは無いだろう。 無いと思いたい。

第2試技

平均の記録は消えたが、せめて単発の記録は残したい。 ということで、もう色々と試行錯誤は止めて、確実に解こうと心に決めていた。

戻ったりしないで素直に進み、17手2QTのDRが出てきた。 17手かぁ……とは思ったが、2QTだしそこまで悪くはないだろ、解くことが最優先だ、とこれで行くことにした。

コーナーを揃えたらエッジも揃って22手でHTRができた。 DRの17手は完全に帳消し。

HTR以降も良い感じで、31手でM層に3Eのスケルトンができた。 上々。 スライスインサートが上手くいかなくて+2手だが……まあ良いだろ。

で、解答用紙に書いて確認したら揃わない。 ……スライスインサートを間違えていた。 最後のL2以降の手順を付け加えるのを忘れていた。

時間がギリギリだったので、解答用紙のスライスインサートの分を消して、3eのエッジ交換手順を書き足した。 スライスインサートが+0手なら少しは楽だったのに、+2手だったからずれて面倒。 3eの6手の手順も知っているのに、私はなぜ8手の手順を使ったんだろうなぁ……。 自分でも分からん。

1回も通して確認していないので、正しい自信が無くてとても不安。

提出した解答。

F  R  U  D' B  L  U  R' L2 D
L' B2 F2 L2 U  R2 U  R2 F2 R
F2 R' B2 R2 U2 B2 U2 L2 D2 U2
B2 U2 R2 F2 R2 U2 R2 F2 R2

F R U D' B // EO (F/B) (5/5)
L U R' L2 D // DR 2e4c (L/R) (5/10)
L' B2 F2 L2 U R2 U // DR (L/R, 2QT) (7/17)
R2 F2 R F2 R' // HTR (5/22)
B2 R2 U2 B2 U2 L2 // FR (L/R) (6/28)
D2 U2 B2 // 3E (3/31)
U2 R2 F2 R2 U2 R2 F2 R2 // finish (8/39)

出したかった解答。今インサートし直した。

F  R  U  D' B  L  U  R' L2 D
L' B2 F2 L2 U  R2 U  R  L  D2
L  B2 R' F2 R2 D2 F2 D2 R2 D2
U2 B2

F R U D' B // EO (F/B) (5/5)
L U R' L2 D // DR 2e4c (L/R) (5/10)
L' B2 F2 L2 U R2 U // DR (L/R, 2QT) (7/17)
R2 * F2 R * F2 R' // HTR (5/22)
B2 R2 U2 B2 U2 L2 + // FR (L/R) (6/28)
D2 U2 B2 // 3E (3/31)

* = M' // (4-3/32)
+ = M2 // finish (2-2/32)

第3試技

この時点で第2試技の結果は分からない。 第1試技はDNFだと分かっていて、第2試技もDNFの可能性がある。 これで、第3試技もDNFだと、DNF, DNF, DNFで心が折れる。 ホントのホントに解答を提出することを最優先するぞと思っていた。

いやぁ、でも、さすがに15手5QTは無いだろ。 うーん、15手4QT。 17手3QT……。 いや、解き切ることが最優先だと、17手3QTを選択して先に進む。

HTRはそこそこ、HTRより後は悪くない。 スライスインサートもすんなり+0手。

今度は計算用紙に一通り手順を書いて確認する余裕があった。 指さし確認しながら解答用紙に転記して、もう一度確認……が揃わず。 計算用紙の右上の部分が解答で、これの右端の B2 R2 のあたりにスクランブル用紙が重なり、見落としていた。

残り1分で何とか修正。 キューブを回して確認する時間が無かったので、とても不安。 「終了です。ペンとキューブを置いてください」から、解答用紙を回収に来るまでの間に、見ていたら、あれ……? まだなんか抜けている……? と焦ったが、抜けていなかったらしい。 記録を残せて良かった。 結果が出るまで、DNF×3を覚悟していた。

U  D' R  D' F2 B2 R' U2 L' B
R2 B  U2 L' D2 L  B2 U2 F2 U2
L' U2 R2 U2 B2 R2 U2 B2 U2 B'
F' R' L'

U D' R D // EO (U/D) (4/4)
(L R F B) // DR 2e4c (L/R) (4/8)
D2 F2 B2 R' U2 L' B R2 B // DR (L/R, 3QT) (9-1/16)
U2 R' * B2 R + B2 U2 F2 U2 L // HTR (9/25)
L2 U2 R2 U2 B2 R2 // FR (6-1/30)
U2 B2 U2 // 3E (3/33)

* = M // (2-2/33)
+ = M' // finish (2-2/33)

まとめ

今改めて振り返ってみると、探索はほとんどしていないな。 これで30手前半の解を出せるDR → HTRは優秀。 あと、FR(Floppy Reduction)も重要。 今までは、短いfinishまでの手順がどうしても見つからなかったときに使うステップという認識だった。 焦っているときにシステマティックに処理できるのは本当に強い。

悪魔のアルゴリズム

ルービックキューブにおいて、ある手順(アルゴリズム)を繰り返したときにどんな開始状態からでも途中に揃った状態が現れるような手順のうち、最短のものを悪魔のアルゴリズム(The Devils' Algorithm)と言い、その手数を悪魔の数字(The Devil's Number)と言うらしい。へー。

毎日ルービックキューブを練習しているが、平均20秒が切れない。

何秒が切れないとか言っていると忘れがちだけど、解法を覚えてルービックキューブを揃えるというのはそもそも難しい。時間は気にしないから、3点交換などを繰り返して揃えるのでも良いよと言ったって、何個かは手順を覚えないといけない。そこでこのような動画に需要が生まれる。

www.youtube.com

要は、逆セクシームーブ(U R U' R')とその左右対称の手順だけでF2LもLL(ラストレイヤー)のエッジもコーナーも揃えられますよという解法だった。

コーナーはなるほど感がある。3点交換の手順とか要らないのか。一方、エッジは逆セクシームーブの前後や間に FU などを挟んでいて、それは手順が1個だけと言えるのか? といういちゃもんが付けられそうな気がしなくもない。あと、理屈抜きで覚えないといけない手順が1個というだけで、分岐というか、それなりに考えないといけないことはある。

そこで、「宇宙一簡単な解法! 覚える手順は本当に1個だけ!」というネタ動画を作れないかと考えた。

逆セクシームーブは6回で元に戻る。R U という手順は64回で元に戻る。そんな感じでルービックキューブの状態数である43,252,003,274,489,856,000回で(初めて)元に戻る手順があれば、その手順を回しているだけでいつかはキューブが揃う。「ネタ動画」と言っているのは、最悪で43,252,003,274,489,855,999回手順を回す必要があり、使い物にならないからである。

で、そんな手順があるのかというと無い。どんな手順でも最大1,260回で元に戻ってしまうらしい。

Rubik's Cube group - Wikipedia

その手順の一例は R U2 D' B D' 。誰か1,260回回してみてほしいw

じゃあ無理だなぁ……とそのまま忘れていた。

最近別件でググっているときに冒頭のページが出てきて、悪魔のアルゴリズムという概念を知った。

私が考えていたことと違うのは、手順を回すごとに状態を見るのではなく、回している途中の状態も見るということ。それなら、1,260より多い状態が得られる。

最短の手順は分からないと。最短でなくても知りたいところだが、繰り返し回してどんな初期状態からでも解ける手順の長さの下界は34,326,986,725,785,600(=43,252,003,274,489,856,000/1,260)。そりゃそうか。例えば、長さが100の手順だと、その手順は1,260回以下で元に戻るので、繰り返し回しても最大でも126,000個の状態しか途中に出てこない。「宇宙一簡単な解法!」の動画は諦めるしかない。

ちなみに、そのような手順が存在することは自明で、ルービックキューブの全ての状態43,252,003,274,489,856,000個について、その状態にして戻す手順を繋げれば良い。

第10回 Asprova プログラミングコンテスト(AtCoder Heuristic Contest 023)

atcoder.jp

暫定: 40,333,000点、60位。

システムテスト: 1,602,640,025点、61位。

ソースコード

github.com

スクショ。

動画。

おおまかな方針

一毛作(1個の区画に植えて収穫するのは1回だけ)なら、話は簡単。距離が近い順にDが小さいものを並べ、最初に全て植えれば良い。空間方向に領域を区切り、その個々の領域を時分割して、作物を植える。

全域木を作る。

この中から区画(図中の赤丸)を選び、そこを根とする部分木(図中のピンク丸)を1個の領域にする。

各領域ごとに期間をどのように区切るかを焼きなます。

詳細と時系列

とりあえず、答えをそのまま焼きなましてみる。答えの一部を変更して、全部シミュレーションして、スコアを出す。

2.6M点。満点は50M点。イテレーションも全然回らないので、まあ、こんなもんだろ。これでも100倍くらい時間を掛ければ、数十M点にはなっていた覚え。

これ以上どうして良いのか分からず。週末まで放置。

途中順位表だけ眺めていると、40M点で上位にいけるっぽい。40M点って思ったより低い。50M点が満点だから80% 全期間全区画に作物があると満点になる。ということは、区画のうち10%くらいは全く作物を植えなくても良いのか。

方針に書いたようなことをしてみる。ただし、焼きなましは無しで、期間の区切りは乱数は適当に。これで34M点。意外と点数取れるな。

区切りを焼きなまして38.3M点。

作物を区画に割り振るとき、点数の高い(収穫までの期間が長い)作物から順に、なるべくぴったりな区画に割り振っていくのが良さそう。でも、焼きなましで一部の領域の一部の期間を変えたときに全部計算し直すと重いので、更新したところに合う作物を選ぶようにしていた。定期的に全部作物を割り当て直すようにした。

39.0M点。あまり変わらんな。

部分木を決めるときに、根から順番に見ていき、部分木のサイズが閾値を下回ったらそこを領域として切り出すようにしていた。

部分木のサイズだけで判断するのは良くない。左も右も部分木のサイズは同じだとして、左は上下をそれぞれ別の領域にしたほうが良い。右は、この枝の先で領域に分割すると通路の分が無駄なので、根の部分で全体を1個の領域にしてしまったほうが良い。

領域の広さと、1区画あたりに得られたスコアを出してみるとこうなった。

けっこう上手く見積もれそう。この見積もりを使って木DPで、どこの部分木を1個の領域にするのか決めるようにした。

39.5M点。

この計算は軽いので、木を作るときに4方向をどの順番に見るのかを変えて、何度か作り直すようにした。適当に10ケースくらい動かしていても差は分からんが……まあ、やって損は無いだろ。

40M点を目指したい。あと何かできることあるかな……。で、通路に何も植えないのは無駄なことに気が付いた。通路の先に要がないタイミングでは植えられる。植えるようにした。

40.3M点。

40M点を超えたので満足。

Canon EOS-RPでDM-E100は使えるのか?

A. 使えました。

「なんだこの記事」と思われそう。なぜか公式の対応リストに載っていない。でも使えたという話。私は使えたというだけなので、マイナーバージョンアップでダメになっていたとか、何らかの機能が実は動いていないとかあっても責任は負いかねます。

本体マイクとの比較。

www.youtube.com

期待していたほどの差は無いが……無いことはないので、ちゃんと動いているでしょう。人の声とかのほうが違いが分かりそうだけど、声を晒したくない。

詳細

cweb.canon.jp

Canon EOS-RP。これでちょっとした動画を撮っていた。周囲のノイズやオートフォーカスの音が入るのが気になる。外付けのマイクを付ければマシになるのでは? と考えた。純正品を使うのが無難だろう。

Canonの出している外部マイクは3個。

DM-E1。

cweb.canon.jp

最上位。金に糸目をつけないならこれだが、実売価格3万円くらい。ちょっと動画を撮りたいだけなのに3万円は出せない……。

あと、電池式で本体からの電源供給ができないのが気になる。これを買うようなガチな人にはこのほうが良いのだろうか。

ものは言いようというか、本体からの電源供給ができてもできていなくてもアピールしているのがちょっと面白い。

電源はボタン型リチウム電池を使用するため、カメラのバッテリーを気にすることなく使用可能。

電源供給ができるマイクだとこう。

マルチアクセサリーシューを介してカメラから電源を共有するため、電池が不要になりました。そのため電源スイッチも廃止し、MENUボタンひとつのシンプルな操作系を実現。撮影中の突然の電池切れなどの心配もないため、長時間の動画撮影やライブ配信も安心して行えます。

DM-E1D。

cweb.canon.jp

DM-E1よりは少しだけ安いが、それでも高い。

これはEOS-RPでは動かないはず。

マルチアクセサリーシュー専用

※ 従来のアクセサリーシューを持つカメラでは使用できません。

faq.canon.jp

古いアクセサリーシューにも一応端子は付いているけど、これはさらに追加されている。へー。EOS-RPには付いていません。

DM-E100。

cweb.canon.jp

1万円くらい。まあ、これかなぁ。多少の音質はともかく、そもそも目的からすると、指向性ではないのはどうなのという感はあるが……。

ポチろうとしたところで対応カメラを見ると、EOS-RPが載っていなかった。

EOS R3/EOS R5/EOS R5 C(VIDEOモードのみ対応)/EOS R6 Mark II/EOS R6/EOS R7/EOS R8/EOS R10/EOS R50/EOS R100/EOS 90D/EOS 80D/EOS 9000D/EOS Kiss X10/EOS Kiss X10i/EOS Kiss X9i/EOS Kiss X9/EOS Kiss M2/EOS Kiss M/EOS M6 Mark II

なぜ? 電源供給が必要だから、カメラ本体に電源を供給できる機能が無ければそりゃ動かないが、カメラのほうのQ&Aには電源供給もできると書かれている。

プラグインパワー対応(カメラからマイクへ電源を供給)のマイクが使用可能です(EOS RPは、プラグインパワーに対応しています)。

https://faq.canon.jp/app/answers/detail/a_id/95741/

ググっても情報があまり出てこない。

価格.com掲示板に使えたという書き込みはあった。

77けんけん77さん

自分はcanonRPです。 そのままDM-E100(1万円ちょいで新品購入)をつけて動画を撮ってますが、普通に使えてます。

EM-E1は高かったのでやめました。

DM-E100は対応にRPが入ってないので何かしらの制限があるのかわかりませんが、普通に動画を撮るマイクとしては使えてます。

RP本体の捨てれをマイク穴を指でふさいだりしても影響ないので、DM-E100で音を拾ってます。

https://bbs.kakaku.com/bbs/K0001129952/SortID=24442888/

まあ、使えるだろと思って買ってみたら、無事使えた。

アクセサリーシューの部分はただの固定用で、古い端子も使っていない。接続はケーブルだけ。

使えたのは良いとして、買った意味があるかというと……。音質はたいして変わらない気がする。本体のマイクは小さな穴が空いているだけだから、おまけみたいなものだと思っていたけど、けっこう性能が良かったんだなぁ。ちゃんとステレオだし。

オートフォーカスの音もたいして変わらん。レンズはRF24-105mm F4 L IS USM。今あらためて試していて気が付いたけど、大きくフォーカスを変えるときは音がしなくて、最後の微調整のところでカカッという音がする。動画を撮っていると微調整が続くので、音が気になると。なるほど……。もしかしたらフォーカス周りの設定で何とかなるかもしれない。

TOYOTA Programming Contest 2023 Summer final(トヨタコン)writeup

atcoder.jp

オンサイトに行ってきた。

287,752,665,589点で48位。

動いている様子の動画。

www.youtube.com

www.nicovideo.jp

ソースコード

https://atcoder.jp/contests/toyota2023summer-final/submissions?f.User=kusano

問題

ランダムな順番で来るコンテナを、倉庫に入れて、なるべく順番通りに出す。障害物や他のコンテナを飛び越えることはできない。転倒数がほぼそのままスコアになる。シンプル。

ただし、1個のコンテナが来るごとにどこに置くかを決めないといけない。これ、すごく上手いと思う。短時間のコンテストで高速化勝負は面白くないから、インタラクティブなのは良い。ただ、インタラクティブの問題はデバッグが面倒なので、その点は短時間コンテストに向いていない。この問題は、インタラクティブなのに、ファイルのリダイレクトで入出力ができる。テスターをダウンロードして使い方を見て、「あれ? インタラクティブ用の実行コマンドを指定する方式じゃないな。間違えたか?」と思った。インタラクティブなのにテスターはインタラクティブでなくて良い。

障害物

そんなに多くないとはいえ、障害物が邪魔。このせいで配置を決め打ちすることができない。

ネットワークの調子が悪くて、スタッフが「紙で問題を配ります?」「いや、あれは修正前だから訂正表を出さないと」みたいなことを話していた。結局紙でも問題は配られた。その紙の問題は障害物が無い版だった。後からの工夫だったのか。

全域木

とりあえず、幅優先探索で全域木を作ろう。

葉から順番に詰めて、根から順番に出せば良い。幅優先だから分岐が多くなる。その分岐によって並び替えができる。

詰めるのは適当に、出すときは今出せるコンテナのうち、最も小さいものを出すようにした。

178,278,440,895点。このスコアは300,000,000,000点が満点。

まだ提出している人が少なくて、たしか20位台だった。

搬出で全域木を無視する

この状態で5を出さないのはありえないだろ。搬出するときは全域木を無視して、今出せるもののうち最も小さいものを出すようにした。

238,846,299,605点。

搬入場所の指定

こんな感じに、入口から近い順に番号を振る。

全域木の葉から順に詰めていくのだけど、複数の葉のうち、なるべくコンテナの番号に近いところに置くようにした。

284,015,153,158点。

全域木を捨てる

搬出時は全域木を無視するようにしたわけだけど、搬入時も無視して良くない? 入口から近い順に番号を振って、ここが62だったら、いきなりここに62を置いても後が困ることはないよね。空き場所が連結という条件を満たす限り、なるべくコンテナの番号に近い場所に置くようにした。

282,829,640,701点。スコアが下がった。

最後にこういう1本道が残るのが良くない。なるほど。全域木、悪くはないアイデアだったのか?

全域木の形

幅優先探索の4近傍の順番は何も考えていなかった。

順番を変えた。全域木がこういう形になったほうが良いよね。

286,800,165,931点。

ビームサーチ

この4とか7とかは早めに掘りに行くべきだと思うが、今のコードだと堀りに行かない。貪欲に今搬出できる一番小さいものを搬出するだけなので。そこでビームサーチ。

この時点で、290G点を取れればけっこう上位にいけそうだった。搬出は貪欲なのだから、それをビームサーチに変えれば、そのくらいはスコアが伸びるだろう。勝ったな。

287,752,665,589点。

微妙……。

ビームサーチだから途中の状態を評価しないといけないのだけど、そこをどうして良いのかが分からない。コンテナを搬出するときに、(すでに搬出した自分より番号の大きなコンテナの個数) + (まだ搬出していない自分より番号の小さなコンテナの個数) を加えて評価値とすると、ダメなコンテナを搬出するときの評価値への影響が大きくて、ダメなコンテナの搬出を先送りしてしまう。(まだ搬出していない自分より番号の小さなコンテナの個数) だけを評価値にして、このスコア。ペナルティがあるのが自分より番号の小さいコンテナだけだから、番号の小さいコンテナが自然に優先される。でもあまり良い評価値な気はしない。

あと、この記事を書くためにビジュアライザを見ていて気が付いたけど、今の搬入の仕方がわりと優秀というのもあるのかもしれない。「これは掘りにいかないとダメだろ」というシーンがあまりない。

トヨタの話

www.youtube.com

トヨタの人「車が好きな人 ノシ」

トヨタの人「車を持っている人 ノシ」

で手を上げる人が少なくてかわいそうだったw まあ、でも、コンテストは採用試験ではなく、企業アピールの場だから、「車大好きです!」「トヨタで働きたいです!」という人ばかりの場だったら、意味が無いだろう。

chokudaiさんが運転席と助手席の間にあるあれのことを「カーナビ」と呼んで渋い顔をされていた。IVI(In-Vehicle Infotainment)らしい。へー。今どきはカーナビ以外の機能が大量にあると。

ソースコードの行数が数千万行規模と増えてきてソフトウエア人材が欲しいとか、車本体だけではなくて工場とかでもアルゴリズムが重要だとか。数百人規模の大会を年に2回も開くくらいだから、たしかに人は欲しがっていそう。

ITエンジニアのキャリアプランとしてどうなんだろうか。IT企業は年齢と給料にあまり差が無いイメージがあり、若い頃はIT業界で、その後JTCに行くのが勝ち組パターンの可能性ある?

懇親会

コンテストはちょっと不完全燃焼感はあるが、まあ、呑むか……と思ったら、早い時間の懇親会は酒が出ない。なるほど。

コンテストが終わった後に昼食で、懇親会が夕方で、あまりお腹が空いておらず、「お代わり要りませんか」「肉がまだまだありますよ」とアナウンスがされていたw

「ビームサーチの評価関数? 貪欲で末端まで進めたけど」という話を聞いた。たしかに。貪欲でそれなりなスコアが取れるのだから、それで良かったのか……。