Pagini recente » Cod sursa (job #1257986) | Cod sursa (job #785146) | muntele_suferintei_2 | Cod sursa (job #698100) | Cod sursa (job #3129951)
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");
}
}