骰子涂色(Cube painting, UVa 253)rust解法

输入两个骰子,判断二者是否等价。每个骰子用6个字母表示,如图4-7所示。
例如rbgggr和rggbgr分别表示如图4-8所示的两个骰子。二者是等价的,因为图4-8(a)所示的骰子沿着竖直轴旋转90°之后就可以得到图4-8(b)所示的骰子。

样例:

复制代码
rggbgr
rbgggr
same

解法:

rust 复制代码
use std::io;

/*
  1
3 2 4 5         1在顶上
  6

  2
3 6 4 1         2在顶上
  5

  3
5 6 2 1			3在顶上
  4

  4
2 6 5 1			4在顶上
  3

  5
4 6 3 1			5在顶上
  2

  6
3 5 4 2			6在顶上
  1

上面每种,都要沿竖轴旋转4次,所以一共24种情况
*/
fn main() {
    let mut buf = String::new();
    io::stdin().read_line(&mut buf).unwrap();
    let s = buf.trim().to_string();
    let mut buf = String::new();
    io::stdin().read_line(&mut buf).unwrap();
    let t = buf.trim().to_string();
    let orders = [
        [1, 2, 3, 4, 5, 6],
        [2, 6, 3, 4, 1, 5],
        [3, 6, 5, 2, 1, 4],
        [4, 6, 2, 5, 1, 3],
        [5, 6, 4, 3, 1, 2],
        [6, 5, 3, 4, 2, 1],
    ];
    for i in 0..6 {
        let mut order = orders[i];
        for _ in 0..4 {
            let mut newt = String::new();
            order = rotate(order);
            for j in 0..6 {
                let c = t.chars().nth(order[j] - 1).unwrap();
                newt.push(c);
            }
            if s == newt {
                println!("same");
                return;
            }
        }
    }
    println!("not same");
}
//沿着竖轴旋转
fn rotate(order: [usize; 6]) -> [usize; 6] {
    let mut neworder = order;
    neworder[2 - 1] = order[3 - 1];
    neworder[3 - 1] = order[5 - 1];
    neworder[4 - 1] = order[2 - 1];
    neworder[5 - 1] = order[4 - 1];
    return neworder;
}
相关推荐
全栈派森6 分钟前
机器学习第五课: 深度神经网络
后端·神经网络·机器学习
freyazzr12 分钟前
TCP/IP 网络编程 | Reactor事件处理模式
开发语言·网络·c++·网络协议·tcp/ip
电院工程师19 分钟前
SM3算法Python实现(无第三方库)
开发语言·python·算法·安全·密码学
YuTaoShao27 分钟前
Java八股文——MySQL「存储引擎篇」
java·开发语言·mysql
AI风老师29 分钟前
通信网络基础概念
开发语言·网络·php
白露与泡影29 分钟前
springboot + nacos + k8s 优雅停机
spring boot·后端·kubernetes
王德博客38 分钟前
【Java课堂笔记】Java 入门基础语法与面向对象三大特性详解
java·开发语言
菜鸟谢1 小时前
windows xp 下载 sp0 sp1 sp2 sp3 sp4
后端
AirMan1 小时前
你真的懂 MySQL 的一致性读和当前读的区别吗?
后端·面试
David爱编程1 小时前
容器性能优化实战指南——防止“吃爆”服务器就靠这些招!
后端·docker·容器