RosettaCodeData/Task/State-name-puzzle/Phix/state-name-puzzle.phix
2017-09-25 22:28:19 +02:00

50 lines
1.9 KiB
Text

constant states = {"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"},
-- extras = {"New Kory", "Wen Kory", "York New", "Kory New", "New Kory"}
extras = {"Slender Dragon", "Abalamara"}
function no_dup(sequence s)
s = sort(s)
for i=length(s) to 2 by -1 do
if s[i]=s[i-1] then
s[i] = s[$]
s = s[1..$-1]
end if
end for
return s
end function
procedure play(sequence s)
s = no_dup(s)
destroy_dict(1) -- empty dict
for i=1 to length(s)-1 do
for j=i+1 to length(s) do
string key = trim(sort(lower(s[i]&s[j])))
object data = getd(key)
if data=0 then
putd(key,{{i,j}})
else
for k=1 to length(data) do
integer {m,n} = data[k]
if m!=i and m!=j and n!=i and n!=j then
?{s[i],s[j],"<==>",s[m],s[n]}
end if
end for
putd(key,append(data,{i,j}))
end if
end for
end for
end procedure
play(states)
?"==="
play(states&extras)