June 2018 Update
This commit is contained in:
parent
ba8067c3b7
commit
22f33d4004
5278 changed files with 84726 additions and 14379 deletions
55
Task/State-name-puzzle/Julia/state-name-puzzle-1.julia
Normal file
55
Task/State-name-puzzle/Julia/state-name-puzzle-1.julia
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
module StateNamePuzzle
|
||||
|
||||
const realnames = ["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"]
|
||||
|
||||
const fictitious = ["New Kory", "Wen Kory", "York New", "Kory New", "New Kory"]
|
||||
|
||||
function combine(a::AbstractString, b::AbstractString)
|
||||
chars = vcat(collect(Char, a), collect(Char, b))
|
||||
sort!(chars)
|
||||
return join(chars)
|
||||
end
|
||||
|
||||
function solve(input::Vector{<:AbstractString})
|
||||
dict = Dict{String,String}()
|
||||
for state in input
|
||||
key = replace(state, " ", "") |> lowercase
|
||||
if !haskey(dict, key)
|
||||
dict[key] = state
|
||||
end
|
||||
end
|
||||
keyset = collect(keys(dict))
|
||||
solutions = String[]
|
||||
duplicates = String[]
|
||||
for i in eachindex(keyset), j in (i+1):endof(keyset)
|
||||
len1 = length(keyset[i]) + length(keyset[j])
|
||||
combined1 = combine(keyset[i], keyset[j])
|
||||
for k in eachindex(keyset), l in k+1:endof(keyset)
|
||||
k ∈ (i, j) && continue
|
||||
l ∈ (i, j) && continue
|
||||
len2 = length(keyset[k]) + length(keyset[l])
|
||||
len1 != len2 && continue
|
||||
combined2 = combine(keyset[k], keyset[l])
|
||||
if combined1 == combined2
|
||||
f1 = dict[keyset[i]] * " + " * dict[keyset[j]]
|
||||
f2 = dict[keyset[k]] * " + " * dict[keyset[l]]
|
||||
f3 = f1 * " = " * f2
|
||||
f3 ∈ duplicates && continue
|
||||
push!(solutions, f3)
|
||||
f4 = f2 * " = " * f1
|
||||
push!(duplicates, f4)
|
||||
end
|
||||
end
|
||||
end
|
||||
return sort!(solutions)
|
||||
end
|
||||
|
||||
end # module StateNamePuzzle
|
||||
6
Task/State-name-puzzle/Julia/state-name-puzzle-2.julia
Normal file
6
Task/State-name-puzzle/Julia/state-name-puzzle-2.julia
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
println("Real states:")
|
||||
foreach(println, StateNamePuzzle.solve(StateNamePuzzle.realnames))
|
||||
|
||||
println("\nReal + fictitious state:")
|
||||
foreach(println, StateNamePuzzle.solve(vcat(StateNamePuzzle.realnames,
|
||||
StateNamePuzzle.fictitious)))
|
||||
71
Task/State-name-puzzle/Kotlin/state-name-puzzle.kotlin
Normal file
71
Task/State-name-puzzle/Kotlin/state-name-puzzle.kotlin
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
// 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)
|
||||
}
|
||||
|
|
@ -12,10 +12,10 @@ say "50 states:";
|
|||
.say for anastates @states;
|
||||
|
||||
say "\n54 states:";
|
||||
.say for anastates @states, < New_Kory Wen_Kory York_New Kory_New New_Kory >;
|
||||
.say for sort anastates @states, < New_Kory Wen_Kory York_New Kory_New New_Kory >;
|
||||
|
||||
sub anastates (*@states) {
|
||||
my @s = @states.uniq».subst('_', ' ');
|
||||
my @s = @states.unique».subst('_', ' ');
|
||||
|
||||
my @pairs = gather for ^@s -> $i {
|
||||
for $i ^..^ @s -> $j {
|
||||
|
|
@ -29,7 +29,7 @@ sub anastates (*@states) {
|
|||
for ^@c -> $i {
|
||||
for $i ^..^ @c -> $j {
|
||||
my $set = set @c[$i].list, @c[$j].list;
|
||||
take $set.keys.join(', ') if $set == 4;
|
||||
take @c[$i].list.join(', ') ~ ' = ' ~ @c[$j].list.join(', ') if $set == 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue