packages feed

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)))