egison-5.0.0: sample/salesman.egi
--
-- This file has been auto-generated by egison-translator.
--
def station : Matcher String := string
def price : Matcher Integer := integer
def graph : Matcher [(String, [(String, Integer)])] := multiset (station, multiset (station, price))
def graphData : [(String, [(String, Integer)])] :=
[ ( "Tokyo"
, [ ("Shinjuku", 200)
, ("Shibuya", 200)
, ("Mitaka", 390)
, ("Kinshicho", 160)
, ("Kitasenju", 220) ] )
, ( "Shinjuku"
, [ ("Tokyo", 200)
, ("Shibuya", 160)
, ("Mitaka", 220)
, ("Kinshicho", 220)
, ("Kitasenju", 310) ] )
, ( "Shibuya"
, [ ("Tokyo", 200)
, ("Shinjuku", 160)
, ("Mitaka", 310)
, ("Kinshicho", 220)
, ("Kitasenju", 310) ] )
, ( "Mitaka"
, [ ("Tokyo", 390)
, ("Shinjuku", 220)
, ("Shibuya", 310)
, ("Kinshicho", 470)
, ("Kitasenju", 550) ] )
, ( "Kinshicho"
, [ ("Tokyo", 160)
, ("Shinjuku", 220)
, ("Shibuya", 220)
, ("Mitaka", 470)
, ("Kitasenju", 220) ] )
, ( "Kitasenju"
, [ ("Tokyo", 220)
, ("Shinjuku", 310)
, ("Shibuya", 310)
, ("Mitaka", 550)
, ("Kinshicho", 220) ] ) ]
def trips :=
matchAll graphData as graph with
| (#"Tokyo", ($s_1, $p_1) :: _) :: (loop $i (2, 5, _)
(( #s_(i - 1)
, ($s_i, $p_i) :: _ ) :: ...)
(( #s_5
, ( #"Tokyo" & $s_6
, $p_6 ) :: _ ) :: _)) ->
(sum (map (\i -> p_i) (between 1 6)), s)
def main (args: [String]) : IO () :=
do print "Route list:"
each (compose show print) trips
write "Lowest price:"
print (show (min (map (\(x, y) -> x) trips)))