helix/1
függvény megírása. A
formális specifikációt lejjebb találja.
A függvény egyetlen paramétere a feladványt írja le,
visszatérési értéke pedig a feladvány összes megoldásának a
listája, tetszőleges sorrendben. Ha egy feladványnak nincs
megoldása, a visszatérési érték az üres lista. Egy-egy megoldás a
kitöltött táblát írja egész számokból álló listák
listájaként. Minden szám a tábla egy mezőjének értéket adja meg:
ha 0, a mező üres, egyébként pedig az i
értek,
ahol 1<=i<=m
.
Megoldásának nem kell nagyon hatékonynak lennie, azaz
alkalmazhatja a generate-and-test módszert: állítsa elő az
összes lehetséges elrendezést, és gyűjtse össze közülük azokat,
amelyeket egy ugyancsak megírandó ellenőrző segédfüggvény helyesnek
talál. Programját csak nem túl nagy méretű feladványokkal fogjuk
tesztelni. De ha jó vagy jeles megajánlott jegyet szeretne kapni
a létraversenybe való bejutással, és jó helyezést elérni a
létraversenyen (lásd: Egyéb
tudnivalók), akkor ügyeljen a hatékonyságra.
Teljesítménymérésre használhatja
a
Benchee
modult.
Az 1. ábrán bemutatott feladvány esetén például
a helix/1
függvény paramétere:
{6, 3, [{{1,5},2},{{2,2},1},{{4,6},1}]}
A 2. ábrán látható megoldást írja le például az alábbi (egyelemű) megoldás-lista:
[[[1,0,0,0,2,3], [0,1,2,3,0,0], [0,3,1,2,0,0], [0,2,3,0,0,1], [3,0,0,0,1,2], [2,0,0,1,3,0]] ]
@type size() :: integer() # tábla mérete (0 < n) @type cycle() :: integer() # ciklus hossza (0 < m <= n) @type value() :: integer() # mező értéke (0 < v <= m)
@type row() :: integer() # sor száma (1-től n-ig) @type col() :: integer() # oszlop száma (1-től n-ig) @type field() :: {row(), col()} # mező koordinátái
@type field_value() :: {field(), value()} # mező és értéke @type puzzle_desc() :: {size(), cycle(), [field_value()]} # feladvány
@type retval() :: integer() # eredménymező értéke (0 <= rv <= m) @type solution() :: [[retval()]] # egy megoldás @type solutions() :: [solution()] # összes megoldás
helix/1
függvény specifikációja@spec helix(sd::puzzle_desc()) :: ss::solutions() # ss az sd feladványleíróval megadott feladvány összes megoldásának listája
Az 1. ábrán látható feladvány a 2. ábrán látható megoldással:
iex> Nhf1.helix({6, 3, [{{1,5},2},{{2,2},1},{{4,6},1}]}) [[[1,0,0,0,2,3],[0,1,2,3,0,0],[0,3,1,2,0,0],[0,2,3,0,0,1],[3,0,0,0,1,2],[2,0,0,1,3,0]]
Nhf1
legyen, a @moduldoc
szakasz pedig legalább a szerző nevét, email-címét és a dátumot
tartalmazza.
defmodule Nhf1 do @moduledoc """ Számtekercs @author "Egyetemi Hallgató <egy.hallg@dp.vik.bme.hu>" @date "2024-10-14" ... """ ... endA segédfüggvények legyenek lokálisak (
defp
), írjon
hozzájuk típusspecifikációt és fejkommentként tömör leírást is.
A beadott programokat Linux környezetben Elixir 1.17 (Erlang/OTP 27) rendszerrel teszteljük.
DP Admin: dvacakrobotjaitoknakp@iit.bme.hu | Vissza az elejére / Back to the top |