Task: | Arpakuutiot |
Sender: | antti_p |
Submission time: | 2020-10-09 10:58:32 +0300 |
Language: | Rust |
Status: | READY |
Result: | 100 |
group | verdict | score |
---|---|---|
#1 | ACCEPTED | 35 |
#2 | ACCEPTED | 65 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | ACCEPTED | 0.01 s | 1, 2 | details |
#2 | ACCEPTED | 0.01 s | 1, 2 | details |
#3 | ACCEPTED | 0.01 s | 1, 2 | details |
#4 | ACCEPTED | 0.01 s | 1, 2 | details |
#5 | ACCEPTED | 0.01 s | 1, 2 | details |
#6 | ACCEPTED | 0.01 s | 1, 2 | details |
#7 | ACCEPTED | 0.01 s | 1, 2 | details |
#8 | ACCEPTED | 0.01 s | 1, 2 | details |
#9 | ACCEPTED | 0.01 s | 1, 2 | details |
#10 | ACCEPTED | 0.01 s | 1, 2 | details |
#11 | ACCEPTED | 0.01 s | 2 | details |
#12 | ACCEPTED | 0.01 s | 2 | details |
#13 | ACCEPTED | 0.01 s | 2 | details |
#14 | ACCEPTED | 0.01 s | 2 | details |
#15 | ACCEPTED | 0.01 s | 2 | details |
#16 | ACCEPTED | 0.01 s | 2 | details |
#17 | ACCEPTED | 0.01 s | 2 | details |
#18 | ACCEPTED | 0.01 s | 2 | details |
#19 | ACCEPTED | 0.01 s | 2 | details |
#20 | ACCEPTED | 0.01 s | 2 | details |
#21 | ACCEPTED | 0.01 s | 2 | details |
#22 | ACCEPTED | 0.01 s | 2 | details |
#23 | ACCEPTED | 0.01 s | 2 | details |
#24 | ACCEPTED | 0.01 s | 2 | details |
#25 | ACCEPTED | 0.01 s | 2 | details |
#26 | ACCEPTED | 0.01 s | 2 | details |
#27 | ACCEPTED | 0.01 s | 2 | details |
#28 | ACCEPTED | 0.01 s | 2 | details |
#29 | ACCEPTED | 0.01 s | 2 | details |
#30 | ACCEPTED | 0.01 s | 2 | details |
#31 | ACCEPTED | 0.01 s | 1, 2 | details |
Compiler report
warning: unused variable: `f` --> input/code.rs:102:33 | 102 | fn arrow_left(o: Orientation3D, f: Orientation3D) -> Orientation3D { | ^ help: consider prefixing with an underscore: `_f` | = note: `#[warn(unused_variables)]` on by default warning: unused variable: `f` --> input/code.rs:106:34 | 106 | fn arrow_right(o: Orientation3D, f: Orientation3D) -> Orientation3D { | ^ help: consider prefixing with an underscore: `_f`
Code
use std::io;use std::io::prelude::*;// Arpakuutioiden luoktus:// 1. Mikä sivu 1:stä vastapäätä// 2. Mikä seuraavista permutaatioista// 1234// 1324// 2134// 2314// 3124// 3214#[derive(Debug, Clone, Copy)]enum Orientation3D {PX,NX,PY,NY,PZ,NZ,}// On flat surface always points left#[derive(Debug, Clone, Copy)]enum Orientation2D {Left,Right,Top,Bottom,}// Cube faces:// +X = 0// -X = 1// +Y = 2// -Y = 3// +Z = 4// -Z = 5fn rotate(face: Orientation3D, rot: Orientation3D) -> Orientation3D {use Orientation3D::*;match (rot, face) {(PX, PX) => PX,(PX, NX) => NX,(PX, PY) => PZ,(PX, NY) => NZ,(PX, PZ) => NY,(PX, NZ) => PY,(NX, PX) => PX,(NX, NX) => NX,(NX, PY) => NZ,(NX, NY) => PZ,(NX, PZ) => PY,(NX, NZ) => NY,(PY, PX) => NZ,(PY, NX) => PZ,(PY, PY) => PY,(PY, NY) => NY,(PY, PZ) => PX,(PY, NZ) => NX,(NY, PX) => PZ,(NY, NX) => NZ,(NY, PY) => PY,(NY, NY) => NY,(NY, PZ) => NX,(NY, NZ) => PX,(PZ, PX) => PY,(PZ, NX) => NY,(PZ, PY) => NX,(PZ, NY) => PX,(PZ, PZ) => PZ,(PZ, NZ) => NZ,(NZ, PX) => NY,(NZ, NX) => PY,(NZ, PY) => PX,(NZ, NY) => NX,(NZ, PZ) => PZ,(NZ, NZ) => NZ,}}fn negate(o: Orientation3D) -> Orientation3D {use Orientation3D::*;match o {PX => NX,NX => PX,PY => NY,NY => PY,PZ => NZ,NZ => PZ,}}fn arrow_left(o: Orientation3D, f: Orientation3D) -> Orientation3D {o}fn arrow_right(o: Orientation3D, f: Orientation3D) -> Orientation3D {negate(o)}fn arrow_top(o: Orientation3D, f: Orientation3D) -> Orientation3D {negate(arrow_bottom(o, f))}fn arrow_bottom(o: Orientation3D, f: Orientation3D) -> Orientation3D {rotate(o, f)}// Return first orientation then positionfn apply_orientation(o: Orientation3D, f: Orientation3D, d: Orientation2D) -> (Orientation3D, Orientation3D) {use Orientation2D::*;match d {Left => (rotate(o, arrow_bottom(o, f)), rotate(f, arrow_bottom(o, f))),Right => (rotate(o, arrow_top(o, f)), rotate(f, arrow_top(o, f))),Top => (o, rotate(f, arrow_left(o, f))),Bottom => (o, rotate(f, arrow_right(o, f))),}}fn cp(f: Orientation3D) -> usize {use Orientation3D::*;match f {PX => 0,NX => 1,PY => 2,NY => 3,PZ => 4,NZ => 5,}}fn pc(u: usize) -> Orientation3D {use Orientation3D::*;match u {0 => PX,1 => NX,2 => PY,3 => NY,4 => PZ,5 => NZ,_ => panic!(),}}fn read_and_classify(data: &mut [Option<u32>]) -> u32 {let mut cube = [u32::MAX; 6];for y in 0..5 {for x in 0..5 {if data[y*5 + x].is_some() {read_cube(&mut cube, data, x, y, Orientation3D::PY, Orientation3D::PX);break;}}}classify_cube(&mut cube)}fn read_cube(cube: &mut [u32], data: &mut [Option<u32>], x: usize, y: usize, o: Orientation3D, f: Orientation3D) {//println!("Called read_cube with x: {}, y: {}, o: {:?}, f: {:?}", x, y, o, f);use Orientation2D::*;if cube[cp(f)] != u32::MAX {//println!("Returning read_cube (early)");return}if let Some(n) = data[y*5 + x] {//println!("read_cube: is_some");cube[cp(f)] = n;if y > 0 {let (no, nf) = apply_orientation(o, f, Top);read_cube(cube, data, x, y - 1, no, nf);}if y < 5 {let (no, nf) = apply_orientation(o, f, Bottom);read_cube(cube, data, x, y + 1, no, nf);}if x > 0 {let (no, nf) = apply_orientation(o, f, Left);read_cube(cube, data, x - 1, y, no, nf);}if x < 5 {let (no, nf) = apply_orientation(o, f, Right);read_cube(cube, data, x + 1, y, no, nf);}}//println!("Returning read_cube (end)");}fn classify_cube(cube: &[u32]) -> u32 {//println!("Called classify_cube with cube: {:?}", cube);use Orientation3D::*;let mut j = 6;for i in 0..6 {if cube[i] == 1 {j = i;break}}let one = pc(j);let oppi = cp(negate(one));let opp = cube[oppi];let mut round =match one {PX | NX => {[cube[cp(PY)], cube[cp(PZ)], cube[cp(NY)], cube[cp(NZ)]]}PY | NY => {[cube[cp(PZ)], cube[cp(PX)], cube[cp(NZ)], cube[cp(NX)]]}PZ | NZ => {[cube[cp(PX)], cube[cp(PY)], cube[cp(NX)], cube[cp(NY)]]}};match one {NX | NY | NZ => {round.reverse()}_ => {}};(opp - 1)*6 + classify_cyclic_permutation(&round)}// 1234// 1324// 2134// 2314// 3124// 3214fn classify_cyclic_permutation(round: &[u32]) -> u32 {let mi = round.iter().enumerate().max_by_key(|(_, vx)| *vx).unwrap().0;let v : Vec<_> = round.iter().cycle().skip(mi + 1).take(3).collect();match (v[0] < v[1], v[1] < v[2]) {(true, true) => 0,(true, false) => if v[0] < v[2] {1} else {3},(false, true) => if v[0] < v[2] {2} else {4}(false, false) => 5}}fn main() {let stdin = io::stdin();let mut lines = stdin.lock().lines();let num = lines.next().unwrap().unwrap().parse::<usize>().unwrap();let mut cubes = Vec::new();for k in 0..num {if k != 0 {lines.next();}let mut dat = Vec::new();for _ in 0..5 {for c in lines.next().unwrap().unwrap().chars() {dat.push(c.to_string().parse::<u32>().ok());}}//println!("Dat: {:?}", dat);cubes.push(read_and_classify(&mut dat));}//println!("Cubes: {:?}", cubes);//println!();//println!();for i in 0..cubes.len() {let mut some = false;for j in 0..cubes.len() {if i == j {continue}if cubes[i] == cubes[j] {print!("{} ", j + 1);some = true;}}if !some {print!("-");}println!();}}
Test details
Test 1
Group: 1, 2
Verdict: ACCEPTED
input |
---|
3 165.. .4... .3... .2... ... |
correct output |
---|
3 - 1 |
user output |
---|
3 - 1 |
Test 2
Group: 1, 2
Verdict: ACCEPTED
input |
---|
5 264.. .5... .3... .1... ... |
correct output |
---|
3 4 5 1 2 5 2 4 |
user output |
---|
3 4 5 1 2 5 2 4 |
Test 3
Group: 1, 2
Verdict: ACCEPTED
input |
---|
5 152.. .4... .3... .6... ... |
correct output |
---|
3 5 4 1 5 2 1 3 |
user output |
---|
3 5 4 1 5 2 1 3 |
Test 4
Group: 1, 2
Verdict: ACCEPTED
input |
---|
5 142.. .6... .3... .5... ... |
correct output |
---|
4 5 3 2 1 5 1 4 |
user output |
---|
4 5 3 2 1 5 1 4 |
Test 5
Group: 1, 2
Verdict: ACCEPTED
input |
---|
5 123.. .4... .6... .5... ... |
correct output |
---|
3 4 5 1 2 5 2 4 |
user output |
---|
3 4 5 1 2 5 2 4 |
Test 6
Group: 1, 2
Verdict: ACCEPTED
input |
---|
5 213.. .6... .4... .5... ... |
correct output |
---|
4 5 3 2 1 5 1 4 |
user output |
---|
4 5 3 2 1 5 1 4 |
Test 7
Group: 1, 2
Verdict: ACCEPTED
input |
---|
5 314.. .5... .2... .6... ... |
correct output |
---|
3 4 5 1 2 5 2 4 |
user output |
---|
3 4 5 1 2 5 2 4 |
Test 8
Group: 1, 2
Verdict: ACCEPTED
input |
---|
5 163.. .2... .5... .4... ... |
correct output |
---|
4 5 3 2 1 5 1 4 |
user output |
---|
4 5 3 2 1 5 1 4 |
Test 9
Group: 1, 2
Verdict: ACCEPTED
input |
---|
5 264.. .1... .3... .5... ... |
correct output |
---|
2 3 1 3 1 2 5 4 |
user output |
---|
2 3 1 3 1 2 5 4 |
Test 10
Group: 1, 2
Verdict: ACCEPTED
input |
---|
5 214.. .3... .5... .6... ... |
correct output |
---|
5 3 4 2 4 2 3 1 |
user output |
---|
5 3 4 2 4 2 3 1 |
Test 11
Group: 2
Verdict: ACCEPTED
input |
---|
10 .41.. .5... .2... 36... ... |
correct output |
---|
9 4 6 8 7 10 2 6 8 - ... |
user output |
---|
9 4 6 8 7 10 2 6 8 - ... |
Test 12
Group: 2
Verdict: ACCEPTED
input |
---|
10 5.... 1436. .2... ..... ... |
correct output |
---|
5 8 6 10 4 7 9 3 7 9 1 8 ... |
user output |
---|
5 8 6 10 4 7 9 3 7 9 1 8 ... |
Test 13
Group: 2
Verdict: ACCEPTED
input |
---|
10 2.... 41... .63.. .5... ... |
correct output |
---|
4 9 10 5 6 7 8 - 1 9 10 2 6 7 8 ... |
user output |
---|
4 9 10 5 6 7 8 - 1 9 10 2 6 7 8 ... |
Test 14
Group: 2
Verdict: ACCEPTED
input |
---|
10 1.... 634.. ..52. ..... ... |
correct output |
---|
2 3 4 5 6 9 10 1 3 4 5 6 9 10 1 2 4 5 6 9 10 1 2 3 5 6 9 10 1 2 3 4 6 9 10 ... |
user output |
---|
2 3 4 5 6 9 10 1 3 4 5 6 9 10 1 2 4 5 6 9 10 1 2 3 5 6 9 10 1 2 3 4 6 9 10 ... Truncated |
Test 15
Group: 2
Verdict: ACCEPTED
input |
---|
10 .2... 4516. 3.... ..... ... |
correct output |
---|
5 7 9 10 8 4 6 3 6 1 7 9 10 ... |
user output |
---|
5 7 9 10 8 4 6 3 6 1 7 9 10 ... |
Test 16
Group: 2
Verdict: ACCEPTED
input |
---|
10 .56.. .2... .4... 31... ... |
correct output |
---|
4 9 3 5 10 2 5 10 1 9 2 3 10 ... |
user output |
---|
4 9 3 5 10 2 5 10 1 9 2 3 10 ... |
Test 17
Group: 2
Verdict: ACCEPTED
input |
---|
10 ..62. .31.. 45... ..... ... |
correct output |
---|
2 3 4 8 1 3 4 8 1 2 4 8 1 2 3 8 6 7 9 10 ... |
user output |
---|
2 3 4 8 1 3 4 8 1 2 4 8 1 2 3 8 6 7 9 10 ... Truncated |
Test 18
Group: 2
Verdict: ACCEPTED
input |
---|
10 532.. .4... .1... .6... ... |
correct output |
---|
3 8 9 5 6 1 8 9 7 10 2 6 ... |
user output |
---|
3 8 9 5 6 1 8 9 7 10 2 6 ... |
Test 19
Group: 2
Verdict: ACCEPTED
input |
---|
10 .64.. .1... .3... 52... ... |
correct output |
---|
2 5 6 7 8 9 1 5 6 7 8 9 4 10 3 10 1 2 6 7 8 9 ... |
user output |
---|
2 5 6 7 8 9 1 5 6 7 8 9 4 10 3 10 1 2 6 7 8 9 ... Truncated |
Test 20
Group: 2
Verdict: ACCEPTED
input |
---|
10 .4... 326.. .1... .5... ... |
correct output |
---|
4 7 8 6 9 10 5 1 7 8 3 ... |
user output |
---|
4 7 8 6 9 10 5 1 7 8 3 ... |
Test 21
Group: 2
Verdict: ACCEPTED
input |
---|
20 .6... .4... 31... .25.. ... |
correct output |
---|
3 7 11 16 6 1 7 11 16 5 19 4 19 ... |
user output |
---|
3 7 11 16 6 1 7 11 16 5 19 4 19 ... Truncated |
Test 22
Group: 2
Verdict: ACCEPTED
input |
---|
20 3.... 5614. ..2.. ..... ... |
correct output |
---|
7 10 11 17 20 12 4 9 13 15 18 3 9 13 15 18 8 14 16 ... |
user output |
---|
7 10 11 17 20 12 4 9 13 15 18 3 9 13 15 18 8 14 16 ... Truncated |
Test 23
Group: 2
Verdict: ACCEPTED
input |
---|
20 42... .316. .5... ..... ... |
correct output |
---|
5 12 13 15 18 16 20 6 8 14 9 19 1 12 13 15 18 ... |
user output |
---|
5 12 13 15 18 16 20 6 8 14 9 19 1 12 13 15 18 ... Truncated |
Test 24
Group: 2
Verdict: ACCEPTED
input |
---|
20 ..5.. .623. 41... ..... ... |
correct output |
---|
2 6 11 12 13 1 6 11 12 13 5 16 18 7 14 3 16 18 ... |
user output |
---|
2 6 11 12 13 1 6 11 12 13 5 16 18 7 14 3 16 18 ... Truncated |
Test 25
Group: 2
Verdict: ACCEPTED
input |
---|
20 .46.. 53... .1... .2... ... |
correct output |
---|
2 3 5 7 15 17 19 1 3 5 7 15 17 19 1 2 5 7 15 17 19 8 10 11 14 1 2 3 7 15 17 19 ... |
user output |
---|
2 3 5 7 15 17 19 1 3 5 7 15 17 19 1 2 5 7 15 17 19 8 10 11 14 1 2 3 7 15 17 19 ... Truncated |
Test 26
Group: 2
Verdict: ACCEPTED
input |
---|
20 .61.. .4... 35... .2... ... |
correct output |
---|
8 10 20 3 17 18 19 2 17 18 19 14 15 6 7 9 13 ... |
user output |
---|
8 10 20 3 17 18 19 2 17 18 19 14 15 6 7 9 13 ... Truncated |
Test 27
Group: 2
Verdict: ACCEPTED
input |
---|
20 ..2.. 1463. .5... ..... ... |
correct output |
---|
2 3 5 6 9 20 1 3 5 6 9 20 1 2 5 6 9 20 11 19 1 2 3 6 9 20 ... |
user output |
---|
2 3 5 6 9 20 1 3 5 6 9 20 1 2 5 6 9 20 11 19 1 2 3 6 9 20 ... Truncated |
Test 28
Group: 2
Verdict: ACCEPTED
input |
---|
20 ...4. 5132. 6.... ..... ... |
correct output |
---|
2 8 10 12 13 19 1 8 10 12 13 19 4 5 15 16 17 3 5 15 16 17 3 4 15 16 17 ... |
user output |
---|
2 8 10 12 13 19 1 8 10 12 13 19 4 5 15 16 17 3 5 15 16 17 3 4 15 16 17 ... Truncated |
Test 29
Group: 2
Verdict: ACCEPTED
input |
---|
20 .2... .31.. 45... 6.... ... |
correct output |
---|
5 8 9 14 17 3 10 16 2 10 16 13 15 19 1 8 9 14 17 ... |
user output |
---|
5 8 9 14 17 3 10 16 2 10 16 13 15 19 1 8 9 14 17 ... Truncated |
Test 30
Group: 2
Verdict: ACCEPTED
input |
---|
20 3.... 452.. .1... .6... ... |
correct output |
---|
3 7 8 9 14 15 16 19 4 12 13 17 1 7 8 9 14 15 16 19 2 12 13 17 11 20 ... |
user output |
---|
3 7 8 9 14 15 16 19 4 12 13 17 1 7 8 9 14 15 16 19 2 12 13 17 11 20 ... Truncated |
Test 31
Group: 1, 2
Verdict: ACCEPTED
input |
---|
2 546.. .3... .2... .1... ... |
correct output |
---|
- - |
user output |
---|
- - |