Last letter-first letter: Difference between revisions

Content deleted Content added
Hout (talk | contribs)
→‎{{header|JavaScript}}: Added a {{works with}} tag to identify the source of the `process` object as Node.js
Added Rust
Line 3,996:
22 emolga
23 audino</pre>
=={{header|Rust}}==
<lang Rust>struct Pokemon {
name: &'static str,
first: char,
last: char
}
 
impl Pokemon {
fn new(name: &'static str) -> Pokemon {
let mut chars = name.chars();
return Pokemon {
name,
first: chars.next().unwrap(),
last: chars.last().unwrap()
}
}
}
 
#[derive(Default)]
struct App {
max_path_length: usize,
max_path_length_count: usize,
max_path_example: String,
pokemon: Vec<Pokemon>
}
 
impl App {
fn search(&mut self, offset: usize) {
if offset > self.max_path_length {
self.max_path_length = offset;
self.max_path_length_count = 1;
} else if offset == self.max_path_length {
self.max_path_length_count += 1;
self.max_path_example = String::new();
for i in 0..offset {
self.max_path_example.push_str(self.pokemon[i].name);
self.max_path_example.push_str(" ");
}
}
let last_char = self.pokemon[offset - 1].last;
for i in offset..self.pokemon.len() {
if self.pokemon[i].first == last_char {
self.pokemon.swap(offset, i);
self.search(offset + 1);
self.pokemon.swap(offset, i);
}
}
}
}
 
fn main() {
let pokemon_names = ["audino", "bagon", "baltoy", "banette", "bidoof",
"braviary", "bronzor", "carracosta", "charmeleon", "cresselia",
"croagunk", "darmanitan", "deino", "emboar", "emolga",
"exeggcute", "gabite", "girafarig", "gulpin", "haxorus",
"heatmor", "heatran", "ivysaur", "jellicent", "jumpluff",
"kangaskhan", "kricketune", "landorus", "ledyba", "loudred",
"lumineon", "lunatone", "machamp", "magnezone", "mamoswine",
"nosepass", "petilil", "pidgeotto", "pikachu", "pinsir",
"poliwrath", "poochyena", "porygon2", "porygonz", "registeel",
"relicanth", "remoraid", "rufflet", "sableye", "scolipede",
"scrafty", "seaking", "sealeo", "silcoon", "simisear",
"snivy", "snorlax", "spoink", "starly", "tirtouga",
"trapinch", "treecko", "tyrogue", "vigoroth", "vulpix",
"wailord", "wartortle", "whismur", "wingull", "yamask"];
 
let mut app = App {
pokemon: pokemon_names.iter().map(|name| Pokemon::new(name)).collect(),
..App::default()
};
 
for i in 0..app.pokemon.len() {
app.pokemon.swap(0, i);
app.search(1);
app.pokemon.swap(0, i);
}
 
println!("Maximum path length: {}", app.max_path_length);
println!("Paths of that length: {}", app.max_path_length_count);
println!("Example path of that length: {}", app.max_path_example);
}</lang>
Recommend you run as `release` or at least with `opt-level=1`
{{out}}
<pre>
Maximum path length: 23
Paths of that length: 1248
Example path of that length: machamp pinsir rufflet trapinch heatmor remoraid darmanitan nosepass starly yamask kricketune exeggcute emboar relicanth haxorus simisear registeel landorus seaking girafarig gabite emolga audino
</pre>
=={{header|Scala}}==
===Naive===