syuntoku14の進捗

進捗を書きなぐります

進捗: 2018-10-07

 

8:00~ 起床
10:00~ 散髪
12:00~ Japaneseサークルで焼き肉
15:00~ Rustいじいじ&課題

アメリカの床屋、全てをバリカンで解決しようとしてくるので嫌い。ちょっとだけ切ってくれって言ったのにバリカンを出してきて話が通じねえ。

UCDavisのJapaneseサークルで焼き肉をしたりちょっとしたゲームをしたりした。人間の顔と名前を覚えるのが非常に苦手なので、すでに誰も思い出せない。本当にゴミ。

昨日の夜はルームメイトの友人の誕生日会に誘われたので行ったが、正直赤の他人なので非常にアウェイだった。すぐ帰宅して課題やってた。社交性のNASA

今日はRustをいじっていた。vscodeデバッグ環境と競プロ用のスニペットの登録などをした後、二問くらい解いた。別に何か目標があるわけではないが、何もしないと本当に何もしない人間なので、何もしないよりはマシ。

そろそろ強化学習のコンペ用の申し込みプログラムを書かないといけないし、Samurai用のコードもいじっていかないといけない。あとマイクロマウスもやりたいので、割と死期が近い。

あれだけCourseraやっていて、今日Courseraに英会話を学ぼうみたいなコースがあることに気がついた。アメリカに来る前にやれってn回言ってる。

use std::io;

fn read<T: std::str::FromStr>() -> T {
    let mut s = String::new();
    io::stdin().read_line(&mut s).ok();
    s.trim().parse().ok().unwrap()
}

fn read_vec<T: std::str::FromStr>() -> Vec<T> {
    read::<String>()
        .split_whitespace()
        .map(|e| e.parse().ok().unwrap())
        .collect()
}

fn read_vec2<T: std::str::FromStr>(n: u32) -> Vec<Vec<T>> {
    (0..n).map(|_| read_vec()).collect()
}

fn str_cmp(str1: &str, str2: &str) {
    let vec1: Vec<char> = str1.chars().collect();
    let vec2: Vec<char> = str2.chars().collect();

    let l1 = vec1.len() as usize + 1;
    let l2 = vec2.len() as usize + 1;

    let mut length = vec![vec![0; l1]; l2];

    for j in 1..l2 {
        for i in 1..l1 {
            if vec1[i - 1] == vec2[j - 1] {
                length[j][i] = length[j - 1][i - 1] + 1;
            } else {
                length[j][i] = std::cmp::max(length[j][i - 1], length[j - 1][i]);
            }
        }
    }
    println!("{:?}", length[l2 - 1][l1 - 1]);
}

fn main() {
    let n: i32 = read();
    for i in 0..n as usize {
        let str1: String = read();
        let str2: String = read();

        let str1 = str1.as_str();
        let str2 = str2.as_str();
        str_cmp(&str1, &str2);
    }
}
  • Heiankyo Walking:
use std::cmp;
use std::io;

fn read() -> Vec<i32> {
    let mut string = String::new();
    io::stdin().read_line(&mut string).unwrap();
    string
        .trim()
        .split_whitespace()
        .map(|word| word.parse().unwrap())
        .collect()
}

fn change_matatabi(matatabi: Vec<Vec<i32>>) -> Vec<(i32, i32, i32)> {
    let mut vec = Vec::new();
    for m in matatabi {
        if m[0] == m[2] {
            vec.push((m[0], cmp::max(m[1], m[3]), 1));
        } else if m[1] == m[3] {
            vec.push((cmp::max(m[0], m[2]), m[1], -1));
        }
    }
    vec
}

fn calc_map(matatabi: Vec<(i32, i32, i32)>, map: &mut Vec<Vec<i32>>) {
    for y in 0..map.len() as usize {
        for x in 0..map[y].len() as usize {
            //println!("xy: {}, {}", x, y);
            let mut iter = matatabi
                .iter()
                .filter(|m| m.0 == x as i32 && m.1 == y as i32);

            let mut direction = -2;

            if x == 0 {
                direction = -1;
            } else if y == 0 {
                direction = 1;
            }

            loop {
                match iter.next() {
                    Some(m) => {
                        if direction == -2 {
                            direction = m.2;
                        } else {
                            direction = 0;
                        }
                    }
                    None => {
                        break;
                    }
                }
            }
            //println!("direction, {}", direction);

            if x == y && x == 0 {
                map[0][0] = 1;
            } else if direction == -2 {
                map[y][x] = map[y - 1][x] + map[y][x - 1];
            } else if direction == -1 {
                map[y][x] = map[y - 1][x];
            } else if direction == 1 {
                map[y][x] = map[y][x - 1];
            }
        }
    }
}

fn main() {
    let N = read();
    let n = N[0];

    for i in 0..n {
        let XY = read();
        let M = read();
        let gx = XY[0] as usize;
        let gy = XY[1] as usize;
        let m = M[0];
        let mut matatabi = Vec::new();
        for i in 0..m as usize {
            matatabi.push(read());
        }
        let matatabi = change_matatabi(matatabi);
        //println!("matatabi");
        //println!("{:?}", matatabi);
        let mut map = vec![vec![0 as i32; gx + 1]; gy + 1];
        calc_map(matatabi, &mut map);
        if map[gy][gx] == 0 {
            println!("Miserable Hokusai!");
        } else {
            println!("{:?}", map[gy][gx]);
        }
    }
}

日課

  • [ ] Control Systems の予習と復習
  • [ ] Probabilistic Analysis の予習と復習
  • [x] Lang-8に日記を投稿
  • [x] Rustで競プロ
  • [ ] Algorithms at Coursera