heh
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs118
1 files changed, 24 insertions, 94 deletions
diff --git a/src/main.rs b/src/main.rs
index 8bfa5dd..04689a9 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -5,103 +5,33 @@ mod util;
pub use explicit_cast::prelude::*;
pub use util::prelude::*;
-fn 力(手札: &str) -> u8 {
- let mut 品: HashMap<_, u8> = HashMap::new();
- for &文字 in 手札.as_bytes() {
- *品.entry(文字).or_default() += 1;
- }
-
- if 品.values().any(|v| *v == 5) {
- return 7;
- }
-
- if 品.values().any(|v| *v == 4) {
- return 6;
- }
-
- {
- let mut 数字 = 品.values();
- match 数字.by_ref().next().α() {
- 2 => match 数字.by_ref().next().α() {
- 3 => return 5,
- _ => {}
- },
- 3 => match 数字.by_ref().next().α() {
- 2 => return 5,
- _ => {}
- },
- _ => {}
- }
- }
-
- if 品.values().any(|v| *v == 3) {
- return 4;
- }
-
- {
- let mut 二人一組 = false;
- for &v in 品.values() {
- if v == 2 {
- if !二人一組 {
- 二人一組 = true
- } else {
- return 3;
- }
- }
- }
- }
-
- if 品.values().count() == 4 {
- return 2; // one pair
- }
-
- if 品.values().count() == 5 {
- return 1; // high card
- }
-
- dang!();
-}
-
-#[test]
-fn strengths() {
- assert_eq!(力("AAAAA"), 7);
- assert_eq!(力("AAAAQ"), 6);
- assert_eq!(力("AAAQQ"), 5);
- assert_eq!(力("AAA12"), 4);
- assert_eq!(力("AA110"), 3);
- assert_eq!(力("AA140"), 2);
- assert_eq!(力("A124Q"), 1);
-}
-
fn solve(i: &str) -> impl Display {
- fn карта(x: u8) -> u8 {
- match x {
- b'0'..=b'9' => x - b'0',
- b'T' => 10,
- b'J' => 11,
- b'Q' => 12,
- b'K' => 13,
- b'A' => 14,
- _ => unreachable!(),
+ let mut lines = i.lines();
+ let line = lines.by_ref().Δ().as_bytes();
+ let map = lines
+ .skip(1)
+ .map(|x| {
+ x.μ('=')
+ .mr(|x| x.trim()[1..x.len() - 2].μ(',').ml(str::trim).mr(str::trim))
+ .ml(str::trim)
+ })
+ .collect::<HashMap<_, _>>();
+ let mut position = "AAA";
+ let mut steps = 1;
+ for &instruction in line.iter().cycle() {
+ println!("{position}");
+ let at = map[position];
+ position = match instruction {
+ b'L' => at.0,
+ b'R' => at.1,
+ _ => dang!(),
+ };
+ if position == "ZZZ" {
+ return steps;
}
+ steps += 1;
}
- i.lines()
- .map(|x| x.μ(' ').mr(|x| x.λ::<u64>()))
- .sorted_by(|(a, _), (b, _)| match 力(a).cmp(&力(b)) {
- x if matches!(x, Less | Greater) => x,
- _ => {
- for (a, b) in izip!(a.bytes().map(карта), b.bytes().map(карта)) {
- match a.cmp(&b) {
- x if matches!(x, Less | Greater) => return x,
- _ => continue,
- }
- }
- dang!();
- }
- })
- .rml()
- .ι1()
- .πολλαπλασιάζω_και_αθροίζω()
+ dang!();
}
fn main() {