RosettaCodeData/Task/Hex-words/PascalABC.NET/hex-words.pas

39 lines
1.2 KiB
ObjectPascal

uses System.Net, system.Globalization;
function digroot(n: integer): integer;
begin
while n > 9 do
n := n.ToString.Select(x -> x.ToDigit).Sum;
result := n;
end;
begin
var client := new WebClient();
var text := client.DownloadString('http://wiki.puzzlers.org/pub/wordlists/unixdict.txt');
var words: sequence of string := text.ToWords(|#10, #13|);
words := words.Where(w -> w.length >= 4)
.Where(w -> w.All(c -> c in 'abcdef'));
var results := new List<(string, integer, integer)>;
foreach var w in words do
begin
var wnum := integer.Parse(w, NumberStyles.HexNumber);
results.Add((w, wnum, digroot(wnum)));
end;
println('Hex words in unixdict.txt:');
println('Root Word Base 10');
println('-' * 23);
foreach var a in results.OrderBy(t -> t[2]) do
writeln(a[2], a[0]:10, a[1]:11);
println('Total count of these words:', results.Count);
println;
println('Hex words with > 3 distinct letters:');
println('Root Word Base 10');
println('-' * 23);
results := results.Where(a -> (hset(a[0].ToCharArray).Count >= 4)).ToList;
foreach var a in results.OrderByDescending(t -> t[1]) do
writeln(a[2], a[0]:10, a[1]:11);
println('Total count of those words:', results.Count)
end.