【问题标题】:Wrong answer on kattis problem: texture analysiskattis问题的错误答案:纹理分析
【发布时间】:2021-03-28 13:29:22
【问题描述】:

我最近尝试在 open.kattis.com 上进行在线编程挑战纹理分析;然而,尽管我对样本案例的回答在我的个人测试中是正确的,但我不断得到第二个样本案例错误,提交状态显示:“错误答案”。我的代码有什么问题?

Link to the kattis problem。我的代码:

use std::io::{self, BufRead};
fn main() {
    let mut line: i8 = 0; 
    let stdin = io::stdin();
    for input in stdin.lock().lines().map(|l| l.unwrap()) {
        line += 1;
        if input == "END" {
            break;
        }
        let pattern = input
            .split("*")
            .filter(|&i| i.contains("."))
            .collect::<Vec<&str>>();
        let c = pattern
            .iter()
            .all(|j| j.len() == pattern[0].len());
        if (c && pattern.len() != 1 ) || pattern.len() == 0 {
            println!("{} EVEN", line);
        } else {
            println!("{} NOT EVEN", line);
        }
    }
}

【问题讨论】:

  • 如果你得到.**.* 作为输入怎么办?
  • 每一行都以黑色像素开始和结束
  • 同样的概念仍然适用:如果你得到**.*.*怎么办?
  • 哦,是的,我猜如果分隔符之间没有任何内容,那么它不会将其添加到模式列表中,谢谢

标签: loops rust iterator iteration kattis


【解决方案1】:

固定注释示例:

use std::io::{self, BufRead};

fn main() {
    // line needs to store values up to 2000
    // it cannot be an i8, must be an u16 at minimum
    // Rust's default for integer literals is i32 which we use here
    let mut line = 0;
    let stdin = io::stdin();
    for input in stdin.lock().lines().map(|l| l.unwrap()) {
        line += 1;
        if input == "END" {
            break;
        }
        // not possible to construct NON-EVEN input in <= 3 chars
        if input.len() <= 3 {
            println!("{} EVEN", line);
            continue;
        }
        // ignore first & last * when splitting input
        let pattern = &input[1..input.len()-1]
            .split("*")
            // do not filter out empty strings
            .collect::<Vec<&str>>();
        let space_len = pattern[0].len();
        let is_even = pattern
            .iter()
            .all(|j| j.len() == space_len);
        if is_even {
            println!("{} EVEN", line);
        } else {
            println!("{} NOT EVEN", line);
        }
    }
}

【讨论】:

  • 嗯。我仍然得到错误的答案,但这次是第一个答案。
  • 我认为问题是split函数还在向量的开头和结尾添加了“”,所以我会修复它,看看它是否有效
  • @EthanSuresh 我已经更新了我的答案以解决这种极端情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-26
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
相关资源
最近更新 更多