22 lines
808 B
Nix
22 lines
808 B
Nix
#{ lib }:
|
|
let
|
|
lib = import<nixpkgs/lib>;
|
|
filePath = ./example.txt; # Path to the file
|
|
fileContent = builtins.readFile filePath;
|
|
lines = lib.strings.splitString "\n" fileContent;
|
|
filterNonEmpty = word: word != "";
|
|
isEmptyPair = pair: (pair[0] == null || pair[0] == "") && (pair[1] == null || pair[1] == "");
|
|
processWord = word: lib.strings.toInt word;
|
|
processLine = line: map processWord (lib.lists.filter filterNonEmpty (lib.strings.splitString " " line));
|
|
calculateDistance = pairs:
|
|
let
|
|
x = builtins.elemAt pairs 0;
|
|
y = builtins.elemAt pairs 1;
|
|
in
|
|
y - x;
|
|
processedLines = lib.lists.filter (list: (builtins.length list) > 0) (map processLine lines);
|
|
distances = map calculateDistance processedLines;
|
|
sum = lib.lists.fold (a: b: a + b) 0 distances;
|
|
in
|
|
sum
|