Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c61d275

Browse files
authored
Merge pull request rust-lang-ja#64 from qryxip/ja-all-enabled-add-example
Add more examples
2 parents bca080b + 01734a3 commit c61d275

File tree

4 files changed

+144
-0
lines changed

4 files changed

+144
-0
lines changed

examples/abc169-c.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// https://atcoder.jp/contests/abc169/tasks/abc169_c
2+
//
3+
// 以下のクレートを使用。
4+
// - `num`
5+
// - `num-rational`
6+
// - `proconio`
7+
8+
use num::rational::Ratio;
9+
use proconio::input;
10+
11+
// 有理数型である[`num_rational::Ratio<_>`]を使う。
12+
//
13+
// `Ratio<T>`に対する`FromStr`は`"Tの形式"`または`"Tの形式/Tの形式"`を受け付ける。
14+
// よって入力をパースするときはAはそのまま、
15+
// Bは小数点下が2桁で固定なので`(_.replace('.', "") + "/100").parse().unwrap()`とすれば良い。
16+
//
17+
// そして[`.to_integer()`]で「0方向に丸めた整数」が得られるので`(_ * _).to_integer()`を答えとすれば良い。
18+
//
19+
// [`num_rational::Ratio<_>`]: https://docs.rs/num-rational/0.2.4/num_rational/struct.Ratio.html
20+
// [`.to_integer()`]: https://docs.rs/num-rational/0.2.4/num_rational/struct.Ratio.html#method.to_integer
21+
22+
fn main() {
23+
// [`proconio::input!`]で入力を読む。
24+
//
25+
// [`proconio::input!`]: https://docs.rs/proconio/0.3.6/proconio/macro.input.html
26+
input! {
27+
a: Ratio<u64>,
28+
b: String,
29+
}
30+
31+
let b = (b.replace('.', "") + "/100").parse::<Ratio<_>>().unwrap();
32+
println!("{}", (a * b).to_integer());
33+
}

examples/tokiomarine2020-a.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// https://atcoder.jp/contests/tokiomarine2020/tasks/tokiomarine2020_a
2+
//
3+
// 以下のクレートを使用。
4+
// - `ascii`
5+
// - `proconio`
6+
7+
use ascii::AsciiString;
8+
use proconio::input;
9+
10+
fn main() {
11+
// Sを[`ascii::AsciiString`]として、[`proconio::input!`]で入力を読む。
12+
//
13+
// [`ascii::AsciiString`]: https://docs.rs/ascii/1.0.0/ascii/struct.AsciiString.html
14+
// [`proconio::input!`]: https://docs.rs/proconio/0.3.6/proconio/macro.input.html
15+
input! {
16+
s: AsciiString,
17+
}
18+
19+
// [`AsciiStr`] / `AsciiString`は
20+
//
21+
// 1. [`usize`の範囲でアクセス可能]であり**かつ**
22+
// 2. そのまま[`Display`]可能
23+
//
24+
// であることから、このような問題で変換を挟まずに簡潔に書くことができる。
25+
//
26+
// `ascii`クレートを使わずに行うなら、
27+
//
28+
// 1. Sを`String`として読み、`&s[..3]`としてスライスを取得する
29+
// 2. Sを`String`として読み、`s.chars().take(3).collect::<String>()`
30+
// 3. Sを[`proconio::marker::Bytes`]経由で`Vec<u8>`として読み(あるいは`String`から`.into_bytes()`する)、`std::str::from_utf8(&s[..3]).unwrap()`
31+
//
32+
// の2つの方法がある。
33+
//
34+
// [`AsciiStr`]: https://docs.rs/ascii/1.0.0/ascii/struct.AsciiStr.html
35+
// [`usize`の範囲でアクセス可能]: https://docs.rs/ascii/1.0.0/ascii/struct.AsciiStr.html#impl-Index%3CRangeTo%3Cusize%3E%3E
36+
// [`Display`]: https://doc.rust-lang.org/1.42.0/std/fmt/trait.Display.html
37+
// [`proconio::marker::Bytes`]: https://docs.rs/proconio/0.3.6/proconio/marker/enum.Bytes.html
38+
println!("{}", &s[..3]);
39+
}

examples/tokiomarine2020-c.rs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// https://atcoder.jp/contests/tokiomarine2020/tasks/tokiomarine2020_a
2+
//
3+
// 以下のクレートを使用。
4+
// - `itertools`
5+
// - `itertools-num`
6+
// - `proconio`
7+
8+
use itertools::Itertools as _;
9+
use itertools_num::ItertoolsNum as _;
10+
use proconio::input;
11+
use std::cmp;
12+
13+
fn main() {
14+
// [`proconio::input!`]で入力を読む。
15+
//
16+
// [`proconio::input!`]: https://docs.rs/proconio/0.3.6/proconio/macro.input.html
17+
input! {
18+
n: usize,
19+
k: usize,
20+
mut r#as: [usize; n],
21+
}
22+
23+
for _ in 0..k {
24+
// NもAも`usize`で持っておけば、numeric castは一箇所で済む。
25+
26+
let mut imos = vec![0; n + 1];
27+
28+
for (i, &a) in r#as.iter().enumerate() {
29+
let l = i.saturating_sub(a);
30+
let r = cmp::min(i + a + 1, n);
31+
imos[l] += 1;
32+
imos[r] -= 1;
33+
}
34+
35+
// [`itertools_num::ItertoolsNum::cumsom`]を使って`imos`を復元する。
36+
//
37+
// [`itertools_num::ItertoolsNum::cumsom`]: https://docs.rs/itertools-num/0.1.3/itertools_num/trait.ItertoolsNum.html#method.cumsum
38+
r#as = imos[..n].iter().map(|&x| x as usize).cumsum().collect();
39+
40+
if r#as.iter().all(|&a| a == n) {
41+
break;
42+
}
43+
}
44+
45+
// [`itertools::Itertools::format`]でスペース区切りにしたものを`println!`する。
46+
//
47+
// 注意としてこのメソッドの返り値はイテレータを`RefCell<Option<_>>`の形で保持していており、二度displayしようとするとpanicする。
48+
//
49+
// [`itertools::Itertools::format`]: https://docs.rs/itertools/0.9.0/itertools/trait.Itertools.html#method.format
50+
println!("{}", r#as.into_iter().format(" "));
51+
}

test-examples.toml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,13 @@ url = "https://atcoder.jp/contests/abc168/tasks/abc168_e"
275275
matching = "Words"
276276
meta = { using = ["maplit", "num", "proconio"] }
277277

278+
[examples.abc169-c]
279+
type = "Normal"
280+
name = "ABC169 - C - Multiplication 3"
281+
url = "https://atcoder.jp/contests/abc169/tasks/abc169_c"
282+
matching = "Words"
283+
meta = { using = ["num", "proconio"] }
284+
278285
[examples.agc020-c]
279286
type = "Normal"
280287
name = "AGC020: C - Median Sum"
@@ -468,3 +475,17 @@ name = "Sumitomo Mitsui Trust Bank Programming Contest 2019: C - 100 to 105"
468475
url = "https://atcoder.jp/contests/sumitrust2019/tasks/sumitb2019_c"
469476
matching = "Words"
470477
meta = { using = ["fixedbitset", "proconio"] }
478+
479+
[examples.tokiomarine2020-a]
480+
type = "Normal"
481+
name = "Tokio Marine & Nichido Fire Insurance Programming Contest 2020: A - Nickname"
482+
url = "https://atcoder.jp/contests/tokiomarine2020/tasks/tokiomarine2020_a"
483+
matching = "Words"
484+
meta = { using = ["ascii", "proconio"] }
485+
486+
[examples.tokiomarine2020-c]
487+
type = "Normal"
488+
name = "Tokio Marine & Nichido Fire Insurance Programming Contest 2020: C - Lamps"
489+
url = "https://atcoder.jp/contests/tokiomarine2020/tasks/tokiomarine2020_c"
490+
matching = "Words"
491+
meta = { using = ["itertools", "itertools-num", "proconio"] }

0 commit comments

Comments
 (0)