Advertisement
ihecse

Untitled

Sep 30th, 2023
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Erlang 3.99 KB | Source Code | 0 0
  1. defmodule Khf2 do
  2.   @moduledoc """
  3.  Kemping térképe
  4.  @author "Istvánfi Csenge <istvanfi.csenge@edu.bme.hu>"
  5.  @date   "2023-09-28"
  6.  ...
  7.  
  8.  EZ HELYES MOST!!!! (vagyis a legonkabb)
  9.  """
  10.  
  11.   # sor száma (1-től n-ig)
  12.   @type row :: integer
  13.   # oszlop száma (1-től m-ig)
  14.   @type col :: integer
  15.   # egy parcella koordinátái
  16.   @type field :: {row, col}
  17.  
  18.   # a sátrak száma soronként
  19.   @type tents_count_rows :: [integer]
  20.   # a sátrak száma oszloponként
  21.   @type tents_count_cols :: [integer]
  22.  
  23.   # a fákat tartalmazó parcellák koordinátái lexikálisan rendezve
  24.   @type trees :: [field]
  25.   # a feladványleíró hármas
  26.   @type puzzle_desc :: {tents_count_rows, tents_count_cols, trees}
  27.  
  28.   # a sátorpozíciók iránya: north, east, south, west
  29.   @type dir :: :n | :e | :s | :w
  30.   # a sátorpozíciók irányának listája a fákhoz képest
  31.   @type tent_dirs :: [dir]
  32.  
  33.   @type matrix :: [[char()]]
  34.  
  35.   @spec make_empty_matrix(rows :: integer(), cols :: integer()) :: :matrix
  36.   @spec to_external(pd :: puzzle_desc, ds :: tent_dirs) :: :ok
  37.   # A pd = {rs, cs, ts} feladványleíró és a ds sátorirány-lista alapján
  38.   # a feladvány szöveges ábrázolását írja ki a file fájlba, ahol
  39.   #   rs a sátrak soronkénti számának a listája,
  40.   #   cs a sátrak oszloponkénti számának a listája,
  41.   #   ts a fákat tartalmazó parcellák koordinátájának listája
  42.   @type all_coords :: [[]]
  43.  
  44.  
  45.   def make_empty_matrix(rows, cols)
  46.       when is_integer(rows) and is_integer(cols) and rows > 0 and cols > 0 do
  47.     Enum.map(1..rows, fn _ ->
  48.       Enum.map(1..cols, fn _ -> "-" end)
  49.     end)
  50.   end
  51.  
  52.   def fill_mx(matrix, tents_count_rows, tents_count_cols, trees, tent_dirs) do
  53.     fill_matrix(matrix, tents_count_rows, tents_count_cols, trees, tent_dirs)
  54.   end
  55.  
  56.   def fill_matrix(matrix, tents_count_rows, tents_count_cols, [], _tent_dirs)
  57.       when is_list(matrix) do
  58.     matrix
  59.   end
  60.  
  61.   def fill_matrix(
  62.         acc_matrix,
  63.         tents_count_rows,
  64.         tents_count_cols,
  65.         [{row, col} | rest_trees],
  66.         [dir | rest_dirs]
  67.       ) do
  68.   matrix_size = min(length(tents_count_rows), length(tents_count_cols)) # Minimumot veszünk a sorok és oszlopok között
  69.  
  70.     updated_mx =
  71.       case dir do
  72.         :e when col < matrix_size ->
  73.           update_matrix(acc_matrix, row, col + 1, "E")
  74.  
  75.         :s when row < matrix_size ->
  76.           update_matrix(acc_matrix, row + 1, col, "S")
  77.  
  78.         :n when row > 1 ->
  79.           update_matrix(acc_matrix, row - 1, col, "N")
  80.  
  81.         :w when col > 1 ->
  82.           update_matrix(acc_matrix, row, col - 1, "W")
  83.  
  84.         _ ->
  85.           acc_matrix
  86.       end
  87.  
  88.     matrix_with_tents_with_star = update_matrix(updated_mx, row, col, "*")
  89.    
  90.  
  91.     fill_matrix(
  92.       matrix_with_tents_with_star,
  93.       tents_count_rows,
  94.       tents_count_cols,
  95.       rest_trees,
  96.       rest_dirs
  97.     )
  98.   end
  99.  
  100.   def update_matrix(matrix, row, col, value) do
  101.     Enum.with_index(matrix, fn r, i ->
  102.       if i == row - 1 do
  103.         Enum.with_index(r, fn cell, j ->
  104.           if j == col - 1 do
  105.             value
  106.           else
  107.             cell
  108.           end
  109.         end)
  110.       else
  111.         r
  112.       end
  113.     end)
  114.   end
  115.  
  116.   def to_external({tents_count_rows, tents_count_cols, trees}, tent_dirs) do
  117.     matrix = make_empty_matrix(length(tents_count_rows), length(tents_count_cols))
  118.     matrix_with_tents = fill_mx(matrix, tents_count_rows, tents_count_cols, trees, tent_dirs)
  119.     IO.inspect(matrix_with_tents)
  120.   end
  121. end
  122.  
  123. puzzle0 = {[-1, 0, 0, -3, 0], [0, 0, -2, 0, 0], []}
  124. puzzle1 = {[1, 1, 0, 3, 0], [1, 0, 2, 0, 2], [{1, 2}, {3, 3}, {3, 5}, {5, 1}, {5, 5}]}
  125. puzzle2 = {[1, 1, -1, 3, 0], [1, 0, -2, 0, 2], [{1, 2}, {3, 3}, {3, 5}, {5, 1}, {5, 5}]}
  126. puzzle3 = {[2], [0, 1, -1, 0, -1], [{1, 1}, {1, 4}]}
  127. puzzle4 = {[0, -1, 0, 1, 1, 0], [3], [{1, 1}, {3, 1}, {6, 1}]}
  128.  Khf2.to_external(puzzle3, [:e, :e])
  129.  
  130.  Khf2.to_external(puzzle2,  [:e,:s,:n,:n,:w])
  131.  
  132.  Khf2.to_external(puzzle4,  [:s,:s,:n])
  133.  Khf2.to_external(puzzle3, [:e,:e])
  134.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement