RosettaCodeData/Task/Isograms-and-heterograms/PascalABC.NET/isograms-and-heterograms.pas
2025-02-27 18:35:13 -05:00

28 lines
845 B
ObjectPascal

uses System.Net;
function isogram(word: string): integer;
begin
result := 0;
var letters := new Dictionary<char, integer>;
foreach var c in word do
letters[c] := letters.Get(c) + 1;
var counts: set of integer;
foreach var letter in letters do
counts += [letter.value];
if counts.Count = 1 then
result := letters.Get(word[1]);
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.Where(w -> isogram(w) > 1)
.OrderByDescending(w -> isogram(w))
.ThenByDescending(w -> w.Length)
.ThenBy(w -> w).println;
println;
words.where(w -> (isogram(w) = 1) and (w.Length > 10))
.OrderByDescending(w -> w.Length)
.ThenBy(w -> w).println;
end.