rosetta code: first_letter_last_letter
authorJean Privat <jean@pryen.org>
Wed, 10 Jun 2015 16:51:03 +0000 (12:51 -0400)
committerJean Privat <jean@pryen.org>
Wed, 10 Jun 2015 16:51:03 +0000 (12:51 -0400)
Signed-off-by: Jean Privat <jean@pryen.org>

examples/rosettacode/first_letter_last_letter.nit [new file with mode: 0644]
tests/sav/first_letter_last_letter.res [new file with mode: 0644]

diff --git a/examples/rosettacode/first_letter_last_letter.nit b/examples/rosettacode/first_letter_last_letter.nit
new file mode 100644 (file)
index 0000000..dcbcd24
--- /dev/null
@@ -0,0 +1,46 @@
+#!/usr/bin/env nit
+#
+# This file is part of NIT ( http://www.nitlanguage.org ).
+# This program is public domain
+
+# Task: Last letter-first letter
+# SEE: <http://rosettacode.org/wiki/Last letter-first letter>
+module first_letter_last_letter
+
+fun search(words: String): Array[String]
+do
+       var list = words.split("[ \n]".to_re)
+       var res = search_2(new Array[String], list)
+       return res
+end
+
+fun search_2(state, remain: Array[String]): Array[String]
+do
+       if remain.is_empty then return state
+       var last
+       var res = state
+       if state.is_empty then last = null else last = state.last.chars.last
+       for word in remain do
+               if last != null and word.chars.first != last then continue
+               var new_state = state + [word]
+               var new_remain = remain.clone
+               new_remain.remove(word)
+               var sub_res = search_2(new_state, new_remain)
+               if sub_res.length > res.length then
+                       res = sub_res
+               end
+       end
+       return res
+end
+
+var words = """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"""
+print search(words).join("\n")
diff --git a/tests/sav/first_letter_last_letter.res b/tests/sav/first_letter_last_letter.res
new file mode 100644 (file)
index 0000000..4fef812
--- /dev/null
@@ -0,0 +1,23 @@
+machamp
+petilil
+landorus
+scrafty
+yamask
+kricketune
+emboar
+registeel
+loudred
+darmanitan
+nosepass
+simisear
+relicanth
+heatmor
+rufflet
+trapinch
+haxorus
+seaking
+girafarig
+gabite
+exeggcute
+emolga
+audino