State name puzzle: Difference between revisions

Added Kotlin
m (added whitespace to the task's preamble.)
(Added Kotlin)
Line 1,092:
[["New Kory","York New"],["New York","Wen Kory"]]
[["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}}==
9,490

edits