Advertisement
lPestl

Task133.fs

Oct 21st, 2018
945
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 3.90 KB | None | 0 0
  1. //              03. Ретроспектива PacMan`а или обратный путь
  2.  
  3. // Подсчет количества шагов PacMan`a в обратном направлении
  4. let CalcPacManPath width height row column : uint64 =
  5.     let mutable i = row         // Текущая строка - строка последней точки
  6.     let mutable j = column      // Текущий столбец - столбец последней точки
  7.     let mutable direction = 0   // Направление - 0 - вверх, 1 - вправо, -1 - влево
  8.     let mutable step = 1UL      // текущее количество шагов
  9.     // Если конечная точка не на границе
  10.     if column <> width && column <> 1 then
  11.         if row % 2 = 0 then // и если строка четная
  12.             direction <- 1  // меняем направление на "вправо"
  13.         else                // если нечетная
  14.             direction <- -1 // меняем направление на "влево"
  15.     // Двигаемся до тех пор, пока не достигнем начала матрицы (пути откуда стартовал PacMan по задаче)
  16.     while i <> 1 || j <> 1 do
  17.         if j = width then               // Если мы у правой границы
  18.             direction <- direction - 1  // то меняем направление на "вверх" (или "влево", если пред. направление было "вверх")
  19.         if j = 1 then                   // Если мы у левой границы
  20.             direction <- direction + 1  // то меняем направление на "вверх" (или "вправо", если пред. направление было "вверх")
  21.         j <- j + direction              // и меняем текущий столбец в зависимости от направления
  22.         if direction = 0 then           // Если направление "вверх", то
  23.             i <- i - 1                  // меняем текущую строку
  24.         step <- step + 1UL              // и считаем шаги
  25.     step
  26.  
  27. [<EntryPoint>]
  28. let main argv =
  29.     let mutable N = 3
  30.     let mutable M = 3
  31.     let mutable row = 1
  32.     let mutable column = 1
  33.     printfn "N x M = %d x %d" N M
  34.     printfn "ROW x COLUMN = %d x %d" row column
  35.     printfn "Answer = %A\n" (CalcPacManPath N M row column)
  36.  
  37.     row <- 1; column <- 2    
  38.     printfn "N x M = %d x %d" N M
  39.     printfn "ROW x COLUMN = %d x %d" row column
  40.     printfn "Answer = %A\n" (CalcPacManPath N M row column)
  41.  
  42.     row <- 1; column <- 3    
  43.     printfn "N x M = %d x %d" N M
  44.     printfn "ROW x COLUMN = %d x %d" row column
  45.     printfn "Answer = %A\n" (CalcPacManPath N M row column)
  46.  
  47.     row <- 2; column <- 3    
  48.     printfn "N x M = %d x %d" N M
  49.     printfn "ROW x COLUMN = %d x %d" row column
  50.     printfn "Answer = %A\n" (CalcPacManPath N M row column)
  51.  
  52.     row <- 2; column <- 2    
  53.     printfn "N x M = %d x %d" N M
  54.     printfn "ROW x COLUMN = %d x %d" row column
  55.     printfn "Answer = %A\n" (CalcPacManPath N M row column)
  56.  
  57.     row <- 2; column <- 1    
  58.     printfn "N x M = %d x %d" N M
  59.     printfn "ROW x COLUMN = %d x %d" row column
  60.     printfn "Answer = %A\n" (CalcPacManPath N M row column)
  61.  
  62.     row <- 3; column <- 1    
  63.     printfn "N x M = %d x %d" N M
  64.     printfn "ROW x COLUMN = %d x %d" row column
  65.     printfn "Answer = %A\n" (CalcPacManPath N M row column)
  66.  
  67.     row <- 3; column <- 2    
  68.     printfn "N x M = %d x %d" N M
  69.     printfn "ROW x COLUMN = %d x %d" row column
  70.     printfn "Answer = %A\n" (CalcPacManPath N M row column)
  71.  
  72.     row <- 3; column <- 3    
  73.     printfn "N x M = %d x %d" N M
  74.     printfn "ROW x COLUMN = %d x %d" row column
  75.     printfn "Answer = %A\n" (CalcPacManPath N M row column)
  76.     0 // return an integer exit code
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement