Cartesian product of two or more lists: Difference between revisions

Content deleted Content added
Galileo (talk | contribs)
No edit summary
Line 2,917:
 
=={{header|Rust}}==
<lang rust>typefn Listcartesian_product(lists: =&Vec<Vec<u32>>) -> Vec<Vec<u32>>; {
let mut res: List = vec![];
 
fn cartesian_product(lists: &List) -> List {
let mut res: List = vec![];
if lists.len() < 2 || lists.iter().any(|x| x.len() == 0) {
return res
}
 
let mut list_iter = lists.iter();
Line 2,932 ⟶ 2,927:
}
for l in list_iter {
let mut tmp: List = List::new()vec![];
for r in res {
for &el in l {
Line 2,944 ⟶ 2,939:
res
}
 
fn print_listmain(list: &List) {
let cases = vec![
print!("{{ ");
print_list(&cartesian_product(& vec![vec![1, 2], vec![3, 4]]));,
for inner_list in list {
printvec!("([vec![3, 4], vec![1, ");2]],
forvec![vec![1, el2], in inner_list {vec![]],
printvec!("{}[vec![], "vec![1, el);2]],
print_list(&cartesian_product(& vec![vec![1776, 1789], vec![7, 12], vec![4, 14, 23], vec![0, 1]]));,
}
print_list(&cartesian_product(& vec![vec![1, 2, 3], vec![30], vec![500, 100]]));,
print!(") ");
print_list(&cartesian_product(& vec![vec![1, 2, 3], vec![], vec![500, 100]]));,
}];
for inner_listcase in listcases {
return resprintln!(
"{}\n{:?}\n",
case.iter().map(|c| format!("{:?}", c)).collect::<Vec<_>>().join(" × "),
cartesian_product(&case)
})
}
println!("}}");
}
 
fn main() {
println!("{{1, 2}} x {{3, 4}}");
print_list(&cartesian_product(&vec![vec![1, 2], vec![3, 4]]));
println!("\n{{3, 4}} x {{1, 2}}");
print_list(&cartesian_product(&vec![vec![3, 4], vec![1, 2]]));
println!("\n{{1, 2}} x {{}}");
print_list(&cartesian_product(&vec![vec![1, 2], vec![]]));
println!("\n{{}} x {{1, 2}}");
print_list(&cartesian_product(&vec![vec![], vec![1, 2]]));
println!("\n{{1776, 1789}} × {{7, 12}} × {{4, 14, 23}} × {{0, 1}}");
print_list(&cartesian_product(&vec![vec![1776, 1789], vec![7, 12], vec![4, 14, 23], vec![0, 1]]));
println!("\n{{1, 2, 3}} × {{30}} × {{500, 100}}");
print_list(&cartesian_product(&vec![vec![1, 2, 3], vec![30], vec![500, 100]]));
println!("\n{{1, 2, 3}} × {{}} × {{500, 100}}");
print_list(&cartesian_product(&vec![vec![1, 2, 3], vec![], vec![500, 100]]));
}
</lang>
{{out}}<pre>{[1, 2}] x× {[3, 4}]
{ ( [[1, 3], ) ( [1, 4], ) ( [2, 3], ) ( [2, 4 ) }]]
 
{[3, 4}] x× {[1, 2}]
{ ( [[3, 1], ) ( [3, 2], ) ( [4, 1], ) ( [4, 2 ) }]]
 
{[1, 2}] x× {}[]
[]
{ }
 
{}[] x× {[1, 2}]
[]
{ }
 
{[1776, 1789}] × {[7, 12}] × {[4, 14, 23}] × {[0, 1}]
{ ( [[1776, 7, 4, 0], ) ( [1776, 7, 4, 1], ) ( [1776, 7, 14, 0], ) ( [1776, 7, 14, 1], ) ( [1776, 7, 23, 0], ) ( [1776, 7, 23, 1], ) ( [1776, 12, 4, 0], ) ( [1776, 12, 4, 1], ) ( [1776, 12, 14, 0], ) ( [1776, 12, 14, 1], ) ( [1776, 12, 23, 0], ) ( [1776, 12, 23, 1], ) ( [1789, 7, 4, 0], ) ( [1789, 7, 4, 1], ) ( [1789, 7, 14, 0], ) ( [1789, 7, 14, 1], ) ( [1789, 7, 23, 0], ) ( [1789, 7, 23, 1], ) ( [1789, 12, 4, 0], ) ( [1789, 12, 4, 1], ) ( [1789, 12, 14, 0], ) ( [1789, 12, 14, 1], ) ( [1789, 12, 23, 0], ) ( [1789, 12, 23, 1 ) }]]
 
{[1, 2, 3}] × {[30}] × {[500, 100}]
{ ( [[1, 30, 500], ) ( [1, 30, 100], ) ( [2, 30, 500], ) ( [2, 30, 100], ) ( [3, 30, 500], ) ( [3, 30, 100 ) }]]
 
{[1, 2, 3}] × {}[] × {[500, 100}]
[]
{ }
</pre>