Semordnilap: Difference between revisions

Content added Content deleted
(Added Rust solution)
Line 2,700: Line 2,700:
words.take(5).each {|a,b| puts "#{a} #{b}"}</lang>
words.take(5).each {|a,b| puts "#{a} #{b}"}</lang>
output is the same above.
output is the same above.

=={{header|Rust}}==
{{trans|Java}}
<lang rust>use std::collections::HashSet;
use std::fs::File;
use std::io::{self, BufRead};
use std::iter::FromIterator;

fn semordnilap(filename: &str) -> std::io::Result<()> {
let file = File::open(filename)?;
let mut seen = HashSet::new();
let mut count = 0;
for line in io::BufReader::new(file).lines() {
let mut word = line?;
word.make_ascii_lowercase();
let rev = String::from_iter(word.chars().rev());
if seen.contains(&rev) {
if count < 5 {
println!("{}\t{}", word, rev);
}
count += 1;
} else {
seen.insert(word);
}
}
println!("\nSemordnilap pairs found: {}", count);
Ok(())
}

fn main() {
match semordnilap("unixdict.txt") {
Ok(()) => {}
Err(error) => eprintln!("{}", error)
}
}</lang>

{{out}}
<pre>
ca ac
dab bad
diva avid
dna and
drab bard

Semordnilap pairs found: 158
</pre>


=={{header|Scala}}==
=={{header|Scala}}==