open TextIO
open String
val ins = TextIO.openIn "words.txt";
fun getLines s =
case (TextIO.inputLine s) of
SOME line => line :: (getLines s)
| NONE => [];
fun wv (c :: cs) = if c = #"\n" then 0
else ord(c) - 64 + wv(cs)
| wv nil = 0;
fun wordVal s = wv(explode s);
(* The String package overrides map...so here is a map function *)
fun map f (x ::xs) = (f x) :: (map f xs)
| map f nil = nil;
fun tri n = n * (n + 1) div 2
fun contains(y, (x::xs)) = if y = x then 1 else contains(y,xs)
| contains(y, nil) = 0
val tris = map tri [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
foldr op+ 0 (map (fn x => contains(wordVal x, tris)) (getLines ins));
Saturday, September 14, 2013
Problem 42 - sML
I still had sML free from a while ago, and it is a language that I like and know what I am doing in, so it was a good break from a brief attempt to learn COBOL. Below is my solution for problem 42 in sML (runs in about .1s)
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment