State name puzzle: Difference between revisions
Content added Content deleted
m (added whitespace to the task's preamble.) |
(Added Kotlin) |
||
Line 1,092: | Line 1,092: | ||
[["New Kory","York New"],["New York","Wen Kory"]] |
[["New Kory","York New"],["New York","Wen Kory"]] |
||
[["North Carolina","South Dakota"],["North Dakota","South Carolina"]]</lang> |
[["North Carolina","South Dakota"],["North Dakota","South Carolina"]]</lang> |
||
=={{header|Kotlin}}== |
|||
<lang scala>// version 1.2.10 |
|||
fun solve(states: List<String>) { |
|||
val dict = mutableMapOf<String, String>() |
|||
for (state in states) { |
|||
val key = state.toLowerCase().replace(" ", "") |
|||
if (dict[key] == null) dict.put(key, state) |
|||
} |
|||
val keys = dict.keys.toList() |
|||
val solutions = mutableListOf<String>() |
|||
val duplicates = mutableListOf<String>() |
|||
for (i in 0 until keys.size) { |
|||
for (j in i + 1 until keys.size) { |
|||
val len = keys[i].length + keys[j].length |
|||
val chars = (keys[i] + keys[j]).toCharArray() |
|||
chars.sort() |
|||
val combined = String(chars) |
|||
for (k in 0 until keys.size) { |
|||
for (l in k + 1 until keys.size) { |
|||
if (k == i || k == j || l == i || l == j) continue |
|||
val len2 = keys[k].length + keys[l].length |
|||
if (len2 != len) continue |
|||
val chars2 = (keys[k] + keys[l]).toCharArray() |
|||
chars2.sort() |
|||
val combined2 = String(chars2) |
|||
if (combined == combined2) { |
|||
val f1 = "${dict[keys[i]]} + ${dict[keys[j]]}" |
|||
val f2 = "${dict[keys[k]]} + ${dict[keys[l]]}" |
|||
val f3 = "$f1 = $f2" |
|||
if (f3 in duplicates) continue |
|||
solutions.add(f3) |
|||
val f4 = "$f2 = $f1" |
|||
duplicates.add(f4) |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
solutions.sort() |
|||
for ((i, sol) in solutions.withIndex()) { |
|||
println("%2d %s".format(i + 1, sol)) |
|||
} |
|||
} |
|||
fun main(args: Array<String>) { |
|||
val states = listOf( |
|||
"Alabama", "Alaska", "Arizona", "Arkansas", |
|||
"California", "Colorado", "Connecticut", |
|||
"Delaware", |
|||
"Florida", "Georgia", "Hawaii", |
|||
"Idaho", "Illinois", "Indiana", "Iowa", |
|||
"Kansas", "Kentucky", "Louisiana", |
|||
"Maine", "Maryland", "Massachusetts", "Michigan", |
|||
"Minnesota", "Mississippi", "Missouri", "Montana", |
|||
"Nebraska", "Nevada", "New Hampshire", "New Jersey", |
|||
"New Mexico", "New York", "North Carolina", "North Dakota", |
|||
"Ohio", "Oklahoma", "Oregon", |
|||
"Pennsylvania", "Rhode Island", |
|||
"South Carolina", "South Dakota", "Tennessee", "Texas", |
|||
"Utah", "Vermont", "Virginia", |
|||
"Washington", "West Virginia", "Wisconsin", "Wyoming" |
|||
) |
|||
println("Real states only:") |
|||
solve(states) |
|||
println() |
|||
val fictitious = listOf( |
|||
"New Kory", "Wen Kory", "York New", "Kory New", "New Kory" |
|||
) |
|||
println("Real and fictitious states:") |
|||
solve(states + fictitious) |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
Real states only: |
|||
1 North Carolina + South Dakota = North Dakota + South Carolina |
|||
Real and fictitious states: |
|||
1 New Kory + Kory New = Wen Kory + York New |
|||
2 New Kory + Wen Kory = York New + Kory New |
|||
3 New Kory + York New = Wen Kory + Kory New |
|||
4 New York + Kory New = New Kory + Wen Kory |
|||
5 New York + Kory New = New Kory + York New |
|||
6 New York + Kory New = Wen Kory + York New |
|||
7 New York + New Kory = Wen Kory + Kory New |
|||
8 New York + New Kory = Wen Kory + York New |
|||
9 New York + New Kory = York New + Kory New |
|||
10 New York + Wen Kory = New Kory + Kory New |
|||
11 New York + Wen Kory = New Kory + York New |
|||
12 New York + Wen Kory = York New + Kory New |
|||
13 New York + York New = New Kory + Kory New |
|||
14 New York + York New = New Kory + Wen Kory |
|||
15 New York + York New = Wen Kory + Kory New |
|||
16 North Carolina + South Dakota = North Dakota + South Carolina |
|||
</pre> |
|||
=={{header|LiveCode}}== |
=={{header|LiveCode}}== |