aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-322/adam-russell/blog1.txt1
-rw-r--r--challenge-322/adam-russell/prolog/ch-1.p33
-rw-r--r--challenge-322/adam-russell/prolog/ch-2.p10
3 files changed, 44 insertions, 0 deletions
diff --git a/challenge-322/adam-russell/blog1.txt b/challenge-322/adam-russell/blog1.txt
new file mode 100644
index 0000000000..d08d510660
--- /dev/null
+++ b/challenge-322/adam-russell/blog1.txt
@@ -0,0 +1 @@
+http://rabbitfarm.com/cgi-bin/blosxom/prolog/2025/05/26
diff --git a/challenge-322/adam-russell/prolog/ch-1.p b/challenge-322/adam-russell/prolog/ch-1.p
new file mode 100644
index 0000000000..6fb87491fd
--- /dev/null
+++ b/challenge-322/adam-russell/prolog/ch-1.p
@@ -0,0 +1,33 @@
+
+
+ format_(Format), [Format] --> [Format].
+ format_(F, Format), [Format] --> [F].
+
+
+ process(String, I, J) --> {String = [Code | Codes],
+ Code == 45},
+ process(Codes, I, J).
+ process(String, I, J) --> format_(F, Format),
+ {String = [Code | Codes],
+ \+ Code == 45,
+ succ(J, I),
+ char_code(C, Code),
+ length(Codes, L),
+ ((L > 0, Format = ['-', C|F]);
+ (Format = [C|F]))},
+ process(Codes, I, 0).
+ process(String, I, J) --> format_(F, Format),
+ {String = [Code | Codes],
+ \+ Code == 45,
+ succ(J, J1),
+ char_code(C, Code),
+ Format = [C|F]},
+ process(Codes, I, J1).
+ process([], _, _) --> [].
+
+
+ string_format(String, I, FormattedString):-
+ reverse(String, R),
+ phrase(process(R, I, 0), [[]], [F]), !,
+ atom_chars(FormattedString, F).
+
diff --git a/challenge-322/adam-russell/prolog/ch-2.p b/challenge-322/adam-russell/prolog/ch-2.p
new file mode 100644
index 0000000000..a9c8377265
--- /dev/null
+++ b/challenge-322/adam-russell/prolog/ch-2.p
@@ -0,0 +1,10 @@
+
+
+ rank(SortedList, X, Rank):-
+ nth(Rank, SortedList, X).
+
+
+ rank_list(L, Ranks):-
+ sort(L, Sorted),
+ maplist(rank(Sorted), L, Ranks).
+