Advertisement
Guest User

Untitled

a guest
Jul 24th, 2014
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. lcustos = [('A',1),('B',10),('C',18),('Ç',28),('D',38),('E',70),('F',10),('G',43),('H',15),('I',54),('J',10),('K',44),('L',81),('M',19),('N',39),('O',54),('P',91),('Q',72),('R',30),('S',84),('T',75),('U',22),('V',47),('X',66),('Y',59),('Z',32)]
  2.  
  3. cpalavras = ['F','L','O','R','E','S','T','A','R','S',
  4.          'K','J','G','D','F','T','J','J','U','V',
  5.          'C','A','P','E','L','A','P','I','S','C',
  6.          'D','T','C','A','D','W','Y','E','R','T',
  7.          'F','D','C','C','S','A','L','U','S','E',
  8.          'Q','L','K','C','A','U','E','A','I','O',
  9.          'A','A','S','A','R','P','R','D','K','A',
  10.          'N','E','N','E','F','T','E','B','A','U',
  11.          'J','K','D','D','S','H','W','L','F','L',
  12.          'I','O','T','U','G','J','J','V','A','A']
  13.  
  14.  
  15.  
  16.  
  17. inverter xs =
  18.     if null xs
  19.        then xs
  20.        else last xs: inverter (init xs)
  21.  
  22.  
  23.  
  24. prefixor xs ys =
  25.     if null xs
  26.         then True
  27.         else if null ys
  28.         then False
  29.         else if(head xs == head ys)
  30.         then prefixor (tail xs) (tail ys)
  31.     else False  
  32.  
  33.  
  34. sublista xs ys =
  35.     if null ys
  36.         then False 
  37.         else if prefixor xs ys
  38.         then True
  39.     else sublista xs (tail ys)
  40.  
  41. lista_de_linha dimensao =
  42.        if dimensao == 0
  43.        then []
  44.        else linha dimensao:lista_de_linha (dimensao-1)
  45.  
  46. f dimensao = inverter (lista_de_linha dimensao)
  47.  
  48.  
  49. lista_de_colunas dimensao =
  50.        if dimensao == 0
  51.        then []
  52.        else col dimensao:lista_de_colunas (dimensao-1)
  53.  
  54. g dimensao = inverter (lista_de_colunas dimensao)
  55.  
  56.  
  57. lista_de_linhasinversas dimensao =
  58.      if dimensao == 0
  59.          then []
  60.          else inverter (linha dimensao):lista_de_linhasinversas(dimensao-1)
  61. h = inverter
  62.  
  63. t = truncate (sqrt (fromIntegral (length cpalavras) ) )
  64. --Dado uma matriz t x t, essa função pega a partir do length da matriz o valor de t. O truncate e o fromIntegral foram utilizados para adequar os determinados tipos nas ocasiões corretas.  
  65.  
  66.  
  67. linha n = take t (drop posicaolinha cpalavras )
  68.   where
  69.     posicaolinha = t*(n - 1)
  70.  
  71. --Dado um valor de n, a função extraio vetor linha referente a n.
  72.  
  73. col n = inverter (coluna n t)
  74.     where
  75.     coluna n t  =
  76.                        if t == 0
  77.                        then []
  78.                        else head (drop (n-1) (linha t)):coluna n (t-1)
  79.  
  80. --Dado um valor de n, a função extrai o vetor coluna referente ao valor de n, é utilizado recursão, a função inverter foi utilizada para normalizar a ordem dos vetores uma vez que a recursão extrai a coluna de baixo pra cima, então é preciso inverter para normalizar.
  81. --l xs = head [x|x<-lcustos, head xs == fst x]
  82. z xs=[x|x<-lcustos, head xs == fst x]
  83. y = head lcustos     
  84. custo xs =
  85.     if xs == []
  86.       then 0
  87.       else (snd l) + custo (tail xs)
  88. --  else (-1)
  89.        
  90.         where
  91.               l = head [x|x<-lcustos, head xs == fst x]
  92.          
  93. ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
  94.  
  95. custletr k xs = snd (head [ x | x <- xs, fst x == k])
  96.  
  97. custpala palavra custos = if null palavra
  98.               then 0
  99.               else custletr (head palavra) custos + custpala ( tail palavra ) custos
  100.  
  101.  
  102.  
  103. palamencust palavra1 palavra2  = if custpala palavra1 lcustos > custpala palavra2 lcustos
  104.                         then palavra2
  105.                         else palavra1
  106.  
  107.  
  108. ordemalfa palavra1 palavra2 = if (head palavra1) < (head palavra2) || (head palavra1) == (head palavra2) && (palavra1 !! 1) < (palavra2 !! 1) || (head palavra1) == (head palavra2) && (palavra1 !! 1) == (palavra2 !! 1) && (palavra1 !! 2) < (palavra2 !! 2)
  109.                   then palavra1
  110.                   else palavra2
  111.  ----------------------------------------------------------------------------------------------------------------------------------------------------------------
  112.  
  113. esta_na_linha palavra = [x|x<-(f 10), sublista palavra x]
  114. esta_na_coluna palavra =  [x|x<-(g 10), sublista palavra x]
  115. esta_na_linhainversa palavra = [x|x<-inverter (f 10), sublista palavra x]
  116. esta_na_colunainversa palavra = [x|x<-inverter (g 10) , sublista palavra x]
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124. ocorrenciamc cpal = ( menor_custo_lista cpal ,custpala (menor_custo_lista cpal) (lcustos) )
  125.     where
  126.       menor_custo_lista cpal = foldl (palamencust ) (head cpal) cpal
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement