Jamは何故か毎年チャレンジしている(毎回すぐ予選落ちしてるけど)ので、今年も挑戦してみた。Roundは27時間のオンライン予選。その時間中に4問のうち幾つかを解いて25pt以上獲得すれば次に進める、というもの。土曜の夜に時間を見つけて取り組んでみた。C++でやりたかったけど、色々と思い出せる気がしなかったので全部Rubyでやった。Kでたいしたことない。Numbers与えられたN以下の数のうち最大の、「数字が左から昇順に並ぶ数」を求める。datasetで詰むのは目に見えている。最初から数値だと思わずに、法則に従う数字の列だと思って操作していけばいいか、と。132は129になる。「右から降順になっているかチェックして、違反していたらその桁の値を1つ小さくしてそこから右を全部9にする」を繰り返せば解に辿り着きそう。最上位桁が0になったら削る。9回程度だから一瞬で出る。Stalls問題を理解するのに時間かかった...。4991000だったら1人目によって500と499に分割され、次は2人目によって500が分割され250と249になる、そうすると3人目は499を249と249で真っ二つに、...という感じの流れになる。分けられるけど、偶数のときはn/2とn/2-1と違う長さに分けられることに気をつけないといけない。1はどうにか通ったけど、10^6くらいのdatasetだと当然のように計算が終わらなくて死ぬ。}から始まるHashを用意。いうのを繰り返せばよい。そのときの値が答えになる。#{z}"end問題文からはこういう形になることが全然想像つかなかったので、解いていて面白かった。datasetまで正答で65ptで終了。Unmarshalちょっとやり方が分からなくて調べたのでメモ。