Skip to content

ElixirCourse/task-one-2019-tests

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

5 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ

ΠšΡ€Π°Π΅Π½ срок: 01.04.2019Π³, 23:59

Π’ΠΎΠ²Π° Π΅ ΠΏΡŠΡ€Π²Π°Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π° ΠΎΡ‚ курса Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ с Elixir. ΠΠ°Ρ‡ΠΈΠ½ΡŠΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° вашия ΠΊΠΎΠ΄ Π΅ ΠΊΠ°Ρ‚ΠΎ Π³ΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ‚Π΅ Π² Ρ‚ΠΎΠ²Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Π”ΠΎ Π½Π΅Π³ΠΎ ΠΈΠΌΠ°Ρ‚Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏ СдинствСно Π’ΠΈΠ΅ ΠΈ ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Π»ΠΈΡ‚Π΅ Π² курса. По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ Π΄Π° обновяватС вашия ΠΊΠΎΠ΄. ΠŸΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π΅ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π° Π½Π°Π²Ρ€Π΅ΠΌΠ΅ ΠΈ Π΄Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ‚Π΅ чСсто ΠΊΠΎΠ΄Π° си, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈ Π΄Π°Π²Π°ΠΌΠ΅ насоки.

ΠšΠΎΠ³Π°Ρ‚ΠΎ Π½Π°ΡΡ‚ΡŠΠΏΠΈ крайният срок, Ρ‚ΠΎ Π’ΠΈΠ΅ Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ²Π°Ρ‚Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ СдинствСно Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅, Π½ΠΎ Π½Π΅ ΠΈ Π·Π° промяна.

Изисквания

  • НС трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ
  • ΠšΠΎΠ΄ΡŠΡ‚ Π²ΠΈ трябва Π΄Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°Π½ (ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚Π΅ mix format Π² дирСкторията Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°)

Deque

Π—Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ структура, която Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π° структурата ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ Deque.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° трябва Π΄Π° Π΅ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π° Π² ΠΌΠΎΠ΄ΡƒΠ» с ΠΈΠΌΠ΅Ρ‚ΠΎ Deque (Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ създадСн Ρ‚Π°ΠΊΡŠΠ² във Ρ„Π°ΠΉΠ»Π° lib/deque.ex). Всички ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с нСя, описанин ΠΏΠΎ-Π½Π°Π΄ΠΎΠ»Ρƒ, трябва Π΄Π° сС Π½Π°ΠΌΠΈΡ€Π°Ρ‚ Π² ΡΡŠΡ‰ΠΈΡ ΠΌΠΎΠ΄ΡƒΠ». Няма изисквания Π·Π° структуриранСто Π½Π° ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚Π΅ Π½ΡƒΠΆΠ΄Π° ΠΏΡ€ΠΈ имплСмСнтацията.

Какво прСдставлява Deque?

Π”Π΅ΠΊΡŠΡ‚ Π΅ структура, ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅Π½ масив, с ΠΌΠ°Π»ΠΊΠ°Ρ‚Π° Ρ€Π°Π·Π»ΠΈΠΊΠ°, Ρ‡Π΅ освСн Π΄Π° добавямС Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π² края ѝ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠΌ ΠΈ Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° "масива". Π”Ρ€ΡƒΠ³Π° характСристика Π΅, Ρ‡Π΅ лСсно ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ²Π°ΠΌΠ΅ ΠΈ промСнямС Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π½Π° Π΄Π΅ΠΊΠ°, Ρ‡Ρ€Π΅Π· тСхния индСкс (индСксацията Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π² "Π΄Π΅ΠΊ" Π²ΠΈΠ½Π°Π³ΠΈ Π·Π°ΠΏΠΎΡ‡Π²Π° ΠΎΡ‚ 0). Всички Ρ‚Π΅Π·ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ трябва Π΄Π° са сравнитСлно "Π±ΡŠΡ€Π·ΠΈ" (Π»ΠΎΠ³Π°Ρ€ΠΈΡ‚ΠΌΠΈΡ‡Π½Π°Ρ‚Π° слоТност изпълнява Ρ‚ΠΎΠ²Π° условиС) - Π°ΠΊΠΎ Π½Π΅ спазитС Ρ‚ΠΎΠ²Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, няма Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ част ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈΡ‚Π΅.

Как трябва Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π²Π°ΡˆΠ°Ρ‚Π° имплСмСнтация?

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°Ρ‚Π°, която Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‚Π΅, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΠΊΠ°ΠΊΠ²ΠΈΡ‚ΠΎ ΠΏΡ€Π΅Ρ†Π΅Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π΅Ρ‚Π°, Π½ΠΎ трябва Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° създавамС "Π΄Π΅ΠΊ", посрСдством %Deque{}. (Π’ обяснСниСто Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π΅ Π΄Π°Π΄Π΅Π½Π° Π΅Π΄Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½Π° рСализация Π·Π° ΠΏΠΎ-лСсно ΠΈΠ»ΡŽΡΡ‚Ρ€ΠΈΡ€Π°Π½Π΅, тя ΠΎΠ±Π°Ρ‡Π΅ Π½Π°Ρ€ΠΎΡ‡Π½ΠΎ Π½Π΅ Π΅ Π΄ΠΎΠ±Ρ€Π°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ помислСтС Π·Π° Π½Π΅Ρ‰ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ)

Какви Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ трябва Π΄Π° ΠΈΠΌΠ° Π² ΠΌΠΎΠ΄ΡƒΠ»Π° Deque?

Всички ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ са описани Π² слСдващитС ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„ΠΈ. Π’ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° добавятС ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ искатС private Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (defp). Всяка ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Π° функция ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»Π° трябва Π΄Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΊΠ°Ρ‚ΠΎ ΠΏΡŠΡ€Π²ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ инстанция Π½Π° Deque.

Deque.new()

Аналогично Π½Π° %Deque{} създава ΠΏΡ€Π°Π·Π΅Π½ "Π΄Π΅ΠΊ". НапримСр, Π°ΠΊΠΎ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ рСализация Π½Π° "Π΄Π΅ΠΊ", ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰Π° Π΅Π΄Π½ΠΎ ΠΏΠΎΠ»Π΅ (:content) Π² ΠΊΠΎΠ΅Ρ‚ΠΎ Π΄ΡŠΡ€ΠΆΠΈΠΌ списък.

iex> %Deque{}
%Deque{content: []}
iex> Deque.new()
%Deque{content: []}
iex> %Deque{} == Deque.new()
true

Deque.size(deque)

Π’Ρ€ΡŠΡ‰Π° броя Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ΠΈ сС Π² deque.

iex> %Deque{content: [1, 2.0, "three"]} |> Deque.size
3

Deque.push_back(deque, element)

Π’Ρ€ΡŠΡ‰Π° Π½ΠΎΠ² "Π΄Π΅ΠΊ", ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° deque, Π½ΠΎ с Π΄ΠΎΠ±Π°Π²Π΅Π½ послСдСн Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ element.

iex> %Deque{content: [1, 2.0, "three"]} |> Deque.push_back(:four)
%Deque{content: [1, 2.0, "three", :four]}

Deque.push_front(deque, element)

Π’Ρ€ΡŠΡ‰Π° Π½ΠΎΠ² "Π΄Π΅ΠΊ", ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° deque, Π½ΠΎ с Π΄ΠΎΠ±Π°Π²Π΅Π½ ΠΏΡŠΡ€Π²ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ element.

iex> %Deque{content: [1, 2.0, "three"]} |> Deque.push_front(:zero)
%Deque{content: [:zero, 1, 2.0, "three"]}

Deque.pop_back(deque)

Π’Ρ€ΡŠΡ‰Π° Π½ΠΎΠ² "Π΄Π΅ΠΊ", ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° deque, Π½ΠΎ с ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ послСдСн Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚. Ако Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π½Π° новия "Π΄Π΅ΠΊ" са 0, Ρ‚ΠΎ Π΄Π° сС Π²ΡŠΡ€Π½Π΅ %Deque{}. Ако deque няма Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ Π΄Π° сС Π²ΡŠΡ€Π½Π΅ deque.

iex> %Deque{content: [1, 2.0, "three"]} |> Deque.pop_back
%Deque{content: [1, 2.0]}
iex> %Deque{content: []} |> Deque.pop_back
%Deque{content: []}
iex> ( %Deque{content: [1]} |> Deque.pop_back ) == %Deque{}
true

Deque.pop_front(deque)

Π’Ρ€ΡŠΡ‰Π° Π½ΠΎΠ² "Π΄Π΅ΠΊ", ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° deque, Π½ΠΎ с ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ ΠΏΡŠΡ€Π²ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚. Ако Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π½Π° новия "Π΄Π΅ΠΊ" са 0, Ρ‚ΠΎ Π΄Π° сС Π²ΡŠΡ€Π½Π΅ %Deque{}. Ако deque няма Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ Π΄Π° сС Π²ΡŠΡ€Π½Π΅ deque.

iex> %Deque{content: [1, 2.0, "three"]} |> Deque.pop_front
%Deque{content: [2.0, "three"]}
iex> %Deque{content: []} |> Deque.pop_front
%Deque{content: []}
iex> ( %Deque{content: [1]} |> Deque.pop_front ) == %Deque{}
true

Deque.last(deque)

Π’Ρ€ΡŠΡ‰Π° послСдния Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ Π² deque. Ако "Π΄Π΅ΠΊΡŠΡ‚" Π΅ ΠΏΡ€Π°Π·Π΅Π½ Π²Ρ€ΡŠΡ‰Π° nil.

iex> %Deque{content: [1, 2.0, "three"]} |> Deque.last
"three"
iex> Deque.new() |> Deque.last
nil

Deque.first(deque)

Π’Ρ€ΡŠΡ‰Π° ΠΏΡŠΡ€Π²ΠΈΡ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ Π² deque. Ако "Π΄Π΅ΠΊΡŠΡ‚" Π΅ ΠΏΡ€Π°Π·Π΅Π½ Π²Ρ€ΡŠΡ‰Π° nil.

iex> %Deque{content: [1, 2.0, "three"]} |> Deque.first
1
iex> Deque.new() |> Deque.first
nil

Deque.access_at(deque, n)

Π’Ρ€ΡŠΡ‰Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π° Π½Π° позиция n ΠΎΡ‚ deque. Ако "Π΄Π΅ΠΊΡŠΡ‚" няма позиция n функцията Π²Ρ€ΡŠΡ‰Π° nil, Π° Π°ΠΊΠΎ n Π½Π΅ Π΅ цяло число сС случва Π³Ρ€Π΅ΡˆΠΊΠ° (ΠΊΠ°ΠΊΠ²Π°Ρ‚ΠΎ ΠΈ Π΄Π° Π΅).

iex> deque = %Deque{content: [1, 2.0, "three"]}
%Deque{content: [1, 2.0, "three"]}
iex> deque |> Deque.access_at(0)
1
iex> deque |> Deque.access_at(1)
2.0
iex> deque |> Deque.access_at(2)
"three"
iex> deque |> Deque.access_at(3)
nil
iex> Deque.access_at(deque, "2")
** (FunctionClauseError) no function clause matching in ...

Deque.assign_at(deque, n, element)

Π’Ρ€ΡŠΡ‰Π° Π½ΠΎΠ² "Π΄Π΅ΠΊ", ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° deque, Π½ΠΎ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π° Π½Π° позиция n Π΅ смСнСн с element. Ако няма Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ с индСкс n ΠΈΠ»ΠΈ n Π½Π΅ Π΅ цяло число сС случва Π³Ρ€Π΅ΡˆΠΊΠ° (ΠΊΠ°ΠΊΠ²Π°Ρ‚ΠΎ ΠΈ Π΄Π° Π΅).

iex> deque = %Deque{content: [1, 2.0, "three"]}
%Deque{content: [1, 2.0, "three"]}
iex> deque |> Deque.assign_at(0, :zero)
%Deque{content: [:zero, 2.0, "three"]}
iex> deque |> Deque.assign_at(1, :one)
%Deque{content: [1, :one, "three"]}
iex> deque |> Deque.assign_at(2, :two)
%Deque{content: [1, 2.0, :two]}
iex> deque |> Deque.assign_at(3)
** (FunctionClauseError) no function clause matching in ...
iex> deque |> Deque.assign_at("2")
** (FunctionClauseError) no function clause matching in ...

Π˜ΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈ

Π—Π° структурата Deque Π΄Π° сС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈΡ‚Π΅ Collectable ΠΈ Enumerable. Π—Π° Ρ†Π΅Π»Ρ‚Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ докумСнтацията Π½Π° Π΄Π²Π°Ρ‚Π° ΠΌΠΎΠ΄ΡƒΠ»Π°.

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Ρ‚Π΅ Collectable, трябва Π΄Π° вярно слСдното ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ :

iex> deque = 0..5 |> Enum.into Deque.new
%Deque{content: [0, 1, 2, 3, 4, 5]}
iex> [:a, :b, :c] |> Enum.into deque
%Deque{content: [0, 1, 2, 3, 4, 5, :a, :b, :c]}

ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΡŠΡ‚ Enumerable Π²ΠΈ позволява Π΄Π° ΠΏΠΎΠ΄Π°Π²Π°Ρ‚Π΅ структурата ΠΊΠ°Ρ‚ΠΎ ΠΏΡŠΡ€Π²ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π° всички Π΄Ρ€ΡƒΠ³ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»Π° Enum:

iex> deque = %Deque{content: [0, 1, 2, 3, 4, 5]}
%Deque{content: [0, 1, 2, 3, 4, 5]}
iex> deque |> Enum.take 2
[0, 1]
iex> deque |> Enum.drop 3
[3, 4, 5]
iex> deque |> Enum.map &(&1*&1)
[0, 1, 4, 9, 16, 25]
iex> deque |> Enum.reverse
[5, 4, 3, 2, 1, 0]

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks