Cod sursa(job #3129951)

Utilizator CostyRoCostin Ionescu CostyRo Data 16 mai 2023 14:28:23
Problema Loto Scor 10
Compilator rs Status done
Runda Arhiva de probleme Marime 1.5 kb
use std::fs;

trait PrintVec{
  fn write_solution(&self,file_path: &str);
}

impl PrintVec for Vec<i64>{
  fn write_solution(&self,file_path: &str){
    fs::write(file_path,self.iter().map(|num| num.to_string()).collect::<Vec<String>>().join(" "))
      .expect("Unable to write file");
  }
}

fn find_combination_with_repetition(numbers: &[i64],sum: i64,combination: &mut Vec<i64>) -> bool{
  if sum==0 && combination.len()==6{
    return true;
  }

  if sum<0 || combination.len()==6{
    return false;
  }

  for &number in numbers{
    combination.push(number);
    let found_combination=find_combination_with_repetition(numbers,sum-number,combination);
    if found_combination{
      return true;
    }
    combination.pop();
  }

  false
}
fn main(){
  let content=
    fs::read_to_string("loto.in")
      .expect("Should have been able to read the file");
  let mut parts=content.split("\n");
  let sum: i64=
    parts
      .next().unwrap()
      .trim()
      .split_whitespace()
      .nth(1).unwrap()
      .parse().unwrap();
  let numbers: Vec<i64>=
    parts
      .next().unwrap()
      .trim()
      .split_whitespace()
      .collect::<Vec<&str>>()
      .iter()
      .map(|&x| x.parse::<i64>().unwrap())
      .collect();
  let mut solution = Vec::new();
  if find_combination_with_repetition(&numbers,sum,&mut solution){
    solution.write_solution("loto.out");
  }
  else{
    fs::write("loto.out","-1")
      .expect("Unable to write file");
  }
}