AtCoder Beginner Contest 253 A

https://atcoder.jp/contests/abc253/tasks/abc253_a

Pythonでこんな風に書いてみました。

def median(v):
    w = sorted(v)
    if len(w) % 2 == 1:
        return w[len(w)/2]
    else:
        return (w[len(w)/2-1] + w[len(w)/2]) * 0.5

def F(a, b, c):
    return YesNo(median((a, b, c)) == b)

Rustでも似た感じに書いてみます。
この書き方だと、medianは整数になるとは限らないので、f64を返すことにします。
引数のvをソートしますが、vを直接ソートするのは気持ちが悪いので、vのクローンを作ってそれをソートすることにします。

    let mut w = v.clone();
    w.sort();

Rustではifは式らしいので、こういう書き方ができます。

    return if w.len() % 2 == 1 { w[w.len()/2] as f64 }
            else { ((w[w.len()/2-1] + w[w.len()/2]) as f64) * 2.0 }

else以下で、asの前に括弧が必要です。無いと

no implementation for `i32 + f64`

と怒られます。asの優先順位は+より高いようです。
Rustでは単に2.0と書くとf32のようですが、f64とf32の積はf64になるようです。
"Yes"や"No"は&strというプリミティブな文字列型で、それとは別にStringといういろいろメソッドが使える型があって、これに変更しないといけないようです。

#![allow(non_snake_case)]

fn read<T: std::str::FromStr>() -> T {
    let mut line = String::new();
    std::io::stdin().read_line(&mut line).ok();
    line.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 YesNo(b: bool) -> String {
    return (if b { "Yes" } else { "No" }).to_string()
}

fn median(v: &Vec<i32>) -> f64 {
    let mut w = v.clone();
    w.sort();
    return if w.len() % 2 == 1 { w[w.len()/2] as f64 }
            else { ((w[w.len()/2-1] + w[w.len()/2]) as f64) * 2.0 }
}

fn main() {
    let v: Vec<i32> = read_vec();
    let m = median(&v);
    println!("{}", YesNo((v[1] as f64) == m))
}