2023-03-31 Hades ではじめて脱出した
Hades ではじめて脱出した (1周目) 。ネタバレする。
- 武器は双拳
- プレイ時間は 30 時間
- 試行回数は 50 回
クリアかと思ったらスタッフロールがないし周回を促されるし、展開的にも……となって困った。エンディングを見るまではやるか……。
既にめちゃくちゃ周回させられている。グラフィック・会話など世界観の作り込みが良いのかな……。何にせよ何度もプレイさせられている時点でよくできているのだと思う。全体的にゲームスピードが早くて、いまだに何が起きているのか分からないままにガチャガチャやっている。弾避けが多くてシューティングゲームっぽさを感じる。功徳次第でそのへんもごまかせるのでプレイに幅がある。そこまでクリア重視でプレイしていなくて、強いものを狙って取るとつまらなくなりそう (逆に詰まる) な気配を感じて、予言の書を埋めるつもりで周回していた。
デュオニュソスが好み。二日酔いは思っている以上にダメージが入っている (気がする) 。
すこしペースを落として続けそう。
bouzuya/tsukota 0.1.15 をつくった。
入力検証を追加している。 react-hook-form を入れて適当に。
ABC115 : AtCoder Beginner Contest 115 の A, B, C, D を解いた。
- A - Christmas Eve Eve Eve
https://atcoder.jp/contests/abc115/tasks/abc115_a- 提出: https://atcoder.jp/contests/abc115/submissions/40186231
- "Christmas"は共通で出力、- " Eve"を- d..=24で繰り返せば良い
 
- B - Christmas Eve Eve
https://atcoder.jp/contests/abc115/tasks/abc115_b- 提出: https://atcoder.jp/contests/abc115/submissions/40186251
- p の総和から最大値の半分を引けば良い
 
- C - Christmas Eve
https://atcoder.jp/contests/abc115/tasks/abc115_c- 提出: https://atcoder.jp/contests/abc115/submissions/40187038
- ソートして K 個ズレた箇所との差の最小を先頭から走査して探せば良い
 
- D - Christmas
https://atcoder.jp/contests/abc115/tasks/abc115_d- 提出: https://atcoder.jp/contests/abc115/submissions/40187591
- あらかじめ、レベル i バーガーをすべて食べたときの合計枚数とパティ枚数を計算しておく
- これは lv[0] = (1, 1); lv[i] = (3 + lv[i - 1].0 * 2, 1 + lv[i - 1].1 * 2);で求められる
- レベル i バーガーのバンかパティで終わるなら、そこまでの和と前計算の合計枚数値から求めて返す
- そうでないならレベル i バーガーの前半か後半かで、和に前計算のパティ枚数を加えつつ、 i - 1 に対して繰り返す
 
use proconio::input;
fn main() {
    input! {
        n: usize,
        x: usize,
    };
    let mut levels = vec![(0_usize, 0_usize); n + 1];
    levels[0] = (1, 1);
    for i in 1..=n {
        let (a, p) = levels[i - 1];
        levels[i] = (3 + a * 2, 1 + p * 2);
    }
    let mut level = n;
    let mut offset = 0_usize;
    let mut sum = 0_usize;
    loop {
        let (a, p) = levels[level];
        if x == offset + a {
            sum += p;
            break;
        } else if x == offset + 1 {
            assert!(level != 0);
            break;
        } else {
            let (pa, pp) = levels[level - 1];
            let mid = 1 + pa + 1;
            match x.cmp(&(offset + mid)) {
                std::cmp::Ordering::Less => {
                    offset += 1;
                    level -= 1;
                }
                std::cmp::Ordering::Equal => {
                    sum += pp + 1;
                    break;
                }
                std::cmp::Ordering::Greater => {
                    sum += pp + 1;
                    offset += mid;
                    level -= 1;
                }
            }
        }
    }
    let ans = sum;
    println!("{}", ans);
}
今日のコミット。