English cardinal anagrams: Difference between revisions
Content added Content deleted
m (→{{header|J}}: added an "I got 680 at first too" comment) |
|||
Line 62: | Line 62: | ||
6798 6879 6897 6978 7698 7869 7896 7968 8679 8697 8769 8796 8967 8976 9678 9768 9867 9876 |
6798 6879 6897 6978 7698 7869 7896 7968 8679 8697 8769 8796 8967 8976 9678 9768 9867 9876 |
||
</syntaxhighlight> |
</syntaxhighlight> |
||
=={{header|Julia}}== |
|||
<syntaxhighlight lang="julia">import SpelledOut: spelled_out |
|||
languages = Dict("English" => :en, "Spanish" => :es, "Portuguese" => :pt_BR) |
|||
""" remove diacritical marks, as anagrams use only standard alphabet """ |
|||
undiacritical(s) = replace(replace(replace(s, r"[éêé]" => "e"), "ã" => "a"), r"[óõ]" => "o") |
|||
""" get the letter frequencies as an anagram representation of string str """ |
|||
function anarep(str) |
|||
s = undiacritical(lowercase(str)) |
|||
return [count(c, s) for c in 'a':'z'] # ignores spaces, hyphens, capitalization |
|||
end |
|||
""" task at rosettacode.org/wiki/English_cardinal_anagrams """ |
|||
function process_task(maxrange, showfirst30, lang = "English") |
|||
numstrings = map(n -> spelled_out(n, lang=languages[lang]), 1:maxrange) |
|||
numreps = map(anarep, numstrings) |
|||
anadict = Dict{Vector{Int}, Set{String}}() |
|||
for i in eachindex(numstrings) |
|||
if haskey(anadict, numreps[i]) |
|||
push!(anadict[numreps[i]], numstrings[i]) |
|||
else |
|||
anadict[numreps[i]] = Set{String}([numstrings[i]]) |
|||
end |
|||
end |
|||
counts = [length(anadict[numreps[i]]) for i in 1:maxrange] |
|||
if showfirst30 |
|||
println("First 30 $lang cardinal anagrams:") |
|||
i, printed = 1, 0 |
|||
while i < maxrange && printed < 30 |
|||
if counts[i] > 1 |
|||
printed += 1 |
|||
print(rpad(i, 4), printed % 10 == 0 ? "\n" : "") |
|||
end |
|||
i += 1 |
|||
end |
|||
end |
|||
print("\nCount of $lang cardinal anagrams up to $maxrange: ") |
|||
println(count(p -> length(p[2]) > 1, anadict)) |
|||
println("\nLargest group(s) of $lang cardinal anagrams up to $maxrange:") |
|||
maxcount = maximum(counts) |
|||
for r in unique([numreps[i] for i in 1:maxrange if counts[i] == maxcount]) |
|||
println(findall(==(r), numreps)) |
|||
end |
|||
end |
|||
process_task(1000, true) |
|||
process_task(10000, false) |
|||
process_task(10000, false, "Spanish") |
|||
process_task(10000, false, "Portuguese") |
|||
</syntaxhighlight>{{out}} |
|||
<pre> |
|||
First 30 English cardinal anagrams: |
|||
67 69 76 79 96 97 102 103 104 105 |
|||
106 107 108 109 112 122 123 124 125 126 |
|||
127 128 129 132 133 134 135 136 137 138 |
|||
Count of English cardinal anagrams up to 1000: 317 |
|||
Largest group(s) of English cardinal anagrams up to 1000: |
|||
[679, 697, 769, 796, 967, 976] |
|||
Count of English cardinal anagrams up to 10000: 2534 |
|||
Largest group(s) of English cardinal anagrams up to 10000: |
|||
[1679, 1697, 1769, 1796, 1967, 1976, 6179, 6197, 6791, 6971, 7169, 7196, 7691, 7961, 9167, 9176, 9671, 9761] |
|||
[2679, 2697, 2769, 2796, 2967, 2976, 6279, 6297, 6792, 6972, 7269, 7296, 7692, 7962, 9267, 9276, 9672, 9762] |
|||
[3679, 3697, 3769, 3796, 3967, 3976, 6379, 6397, 6793, 6973, 7369, 7396, 7693, 7963, 9367, 9376, 9673, 9763] |
|||
[4679, 4697, 4769, 4796, 4967, 4976, 6479, 6497, 6794, 6974, 7469, 7496, 7694, 7964, 9467, 9476, 9674, 9764] |
|||
[5679, 5697, 5769, 5796, 5967, 5976, 6579, 6597, 6795, 6975, 7569, 7596, 7695, 7965, 9567, 9576, 9675, 9765] |
|||
[6798, 6879, 6897, 6978, 7698, 7869, 7896, 7968, 8679, 8697, 8769, 8796, 8967, 8976, 9678, 9768, 9867, 9876] |
|||
Count of Spanish cardinal anagrams up to 10000: 2635 |
|||
Largest group(s) of Spanish cardinal anagrams up to 10000: |
|||
[2304, 2403, 3204, 3402, 4203, 4302] |
|||
[2306, 2603, 3206, 3602, 6203, 6302] |
|||
[2308, 2803, 3208, 3802, 8203, 8302] |
|||
[2324, 2423, 3224, 3422, 4223, 4322] |
|||
[2326, 2623, 3226, 3622, 6223, 6322] |
|||
[2328, 2823, 3228, 3822, 8223, 8322] |
|||
[2334, 2433, 3234, 3432, 4233, 4332] |
|||
[2336, 2633, 3236, 3632, 6233, 6332] |
|||
[2338, 2833, 3238, 3832, 8233, 8332] |
|||
[2344, 2443, 3244, 3442, 4243, 4342] |
|||
[2346, 2643, 3246, 3642, 6243, 6342] |
|||
[2348, 2843, 3248, 3842, 8243, 8342] |
|||
[2354, 2453, 3254, 3452, 4253, 4352] |
|||
[2356, 2653, 3256, 3652, 6253, 6352] |
|||
[2358, 2853, 3258, 3852, 8253, 8352] |
|||
[2364, 2463, 3264, 3462, 4263, 4362] |
|||
[2366, 2663, 3266, 3662, 6263, 6362] |
|||
[2368, 2863, 3268, 3862, 8263, 8362] |
|||
[2374, 2473, 3274, 3472, 4273, 4372] |
|||
[2376, 2673, 3276, 3672, 6273, 6372] |
|||
[2378, 2873, 3278, 3872, 8273, 8372] |
|||
[2384, 2483, 3284, 3482, 4283, 4382] |
|||
[2386, 2683, 3286, 3682, 6283, 6382] |
|||
[2388, 2883, 3288, 3882, 8283, 8382] |
|||
[2394, 2493, 3294, 3492, 4293, 4392] |
|||
[2396, 2693, 3296, 3692, 6293, 6392] |
|||
[2398, 2893, 3298, 3892, 8293, 8392] |
|||
[2406, 2604, 4206, 4602, 6204, 6402] |
|||
[2408, 2804, 4208, 4802, 8204, 8402] |
|||
[2426, 2624, 4226, 4622, 6224, 6422] |
|||
[2428, 2824, 4228, 4822, 8224, 8422] |
|||
[2436, 2634, 4236, 4632, 6234, 6432] |
|||
[2438, 2834, 4238, 4832, 8234, 8432] |
|||
[2446, 2644, 4246, 4642, 6244, 6442] |
|||
[2448, 2844, 4248, 4842, 8244, 8442] |
|||
[2456, 2654, 4256, 4652, 6254, 6452] |
|||
[2458, 2854, 4258, 4852, 8254, 8452] |
|||
[2466, 2664, 4266, 4662, 6264, 6462] |
|||
[2468, 2864, 4268, 4862, 8264, 8462] |
|||
[2476, 2674, 4276, 4672, 6274, 6472] |
|||
[2478, 2874, 4278, 4872, 8274, 8472] |
|||
[2486, 2684, 4286, 4682, 6284, 6482] |
|||
[2488, 2884, 4288, 4882, 8284, 8482] |
|||
[2496, 2694, 4296, 4692, 6294, 6492] |
|||
[2498, 2894, 4298, 4892, 8294, 8492] |
|||
[2608, 2806, 6208, 6802, 8206, 8602] |
|||
[2628, 2826, 6228, 6822, 8226, 8622] |
|||
[2638, 2836, 6238, 6832, 8236, 8632] |
|||
[2648, 2846, 6248, 6842, 8246, 8642] |
|||
[2658, 2856, 6258, 6852, 8256, 8652] |
|||
[2668, 2866, 6268, 6862, 8266, 8662] |
|||
[2678, 2876, 6278, 6872, 8276, 8672] |
|||
[2688, 2886, 6288, 6882, 8286, 8682] |
|||
[2698, 2896, 6298, 6892, 8296, 8692] |
|||
[3406, 3604, 4306, 4603, 6304, 6403] |
|||
[3408, 3804, 4308, 4803, 8304, 8403] |
|||
[3426, 3624, 4326, 4623, 6324, 6423] |
|||
[3428, 3824, 4328, 4823, 8324, 8423] |
|||
[3436, 3634, 4336, 4633, 6334, 6433] |
|||
[3438, 3834, 4338, 4833, 8334, 8433] |
|||
[3446, 3644, 4346, 4643, 6344, 6443] |
|||
[3448, 3844, 4348, 4843, 8344, 8443] |
|||
[3456, 3654, 4356, 4653, 6354, 6453] |
|||
[3458, 3854, 4358, 4853, 8354, 8453] |
|||
[3466, 3664, 4366, 4663, 6364, 6463] |
|||
[3468, 3864, 4368, 4863, 8364, 8463] |
|||
[3476, 3674, 4376, 4673, 6374, 6473] |
|||
[3478, 3874, 4378, 4873, 8374, 8473] |
|||
[3486, 3684, 4386, 4683, 6384, 6483] |
|||
[3488, 3884, 4388, 4883, 8384, 8483] |
|||
[3496, 3694, 4396, 4693, 6394, 6493] |
|||
[3498, 3894, 4398, 4893, 8394, 8493] |
|||
[3608, 3806, 6308, 6803, 8306, 8603] |
|||
[3628, 3826, 6328, 6823, 8326, 8623] |
|||
[3638, 3836, 6338, 6833, 8336, 8633] |
|||
[3648, 3846, 6348, 6843, 8346, 8643] |
|||
[3658, 3856, 6358, 6853, 8356, 8653] |
|||
[3668, 3866, 6368, 6863, 8366, 8663] |
|||
[3678, 3876, 6378, 6873, 8376, 8673] |
|||
[3688, 3886, 6388, 6883, 8386, 8683] |
|||
[3698, 3896, 6398, 6893, 8396, 8693] |
|||
[4608, 4806, 6408, 6804, 8406, 8604] |
|||
[4628, 4826, 6428, 6824, 8426, 8624] |
|||
[4638, 4836, 6438, 6834, 8436, 8634] |
|||
[4648, 4846, 6448, 6844, 8446, 8644] |
|||
[4658, 4856, 6458, 6854, 8456, 8654] |
|||
[4668, 4866, 6468, 6864, 8466, 8664] |
|||
[4678, 4876, 6478, 6874, 8476, 8674] |
|||
[4688, 4886, 6488, 6884, 8486, 8684] |
|||
[4698, 4896, 6498, 6894, 8496, 8694] |
|||
Count of Portuguese cardinal anagrams up to 10000: 2505 |
|||
Largest group(s) of Portuguese cardinal anagrams up to 10000: |
|||
[4679, 4697, 4796, 4976, 6479, 6497, 6794, 6974, 7496, 7694, 9476, 9674] |
|||
[4798, 4879, 4897, 4978, 7498, 7894, 8479, 8497, 8794, 8974, 9478, 9874] |
|||
[6798, 6879, 6897, 6978, 7698, 7896, 8679, 8697, 8796, 8976, 9678, 9876] |
|||
</pre> |
|||
=={{header|Phix}}== |
=={{header|Phix}}== |