mirror of
https://github.com/krahets/hello-algo.git
synced 2026-07-06 12:44:19 +00:00
build
This commit is contained in:
@@ -307,13 +307,7 @@ comments: true
|
||||
=== "Ruby"
|
||||
|
||||
```ruby title="array.rb"
|
||||
=begin
|
||||
File: array.rb
|
||||
Created Time: 2024-03-18
|
||||
Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
|
||||
=end
|
||||
|
||||
# ## Случайный доступ к элементу ###
|
||||
### Случайный доступ к элементу ###
|
||||
def random_access(nums)
|
||||
# Случайным образом выбрать число из интервала [0, nums.length)
|
||||
random_index = Random.rand(0...nums.length)
|
||||
@@ -507,39 +501,7 @@ comments: true
|
||||
=== "Ruby"
|
||||
|
||||
```ruby title="array.rb"
|
||||
=begin
|
||||
File: array.rb
|
||||
Created Time: 2024-03-18
|
||||
Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
|
||||
=end
|
||||
|
||||
# ## Случайный доступ к элементу ###
|
||||
def random_access(nums)
|
||||
# Случайным образом выбрать число из интервала [0, nums.length)
|
||||
random_index = Random.rand(0...nums.length)
|
||||
|
||||
# Получить и вернуть случайный элемент
|
||||
nums[random_index]
|
||||
end
|
||||
|
||||
|
||||
# ## Увеличить длину массива ###
|
||||
# Обратите внимание: Array в Ruby является динамическим массивом и может быть расширен напрямую
|
||||
# Для удобства обучения эта функция рассматривает Array как массив неизменяемой длины
|
||||
def extend(nums, enlarge)
|
||||
# Инициализировать массив увеличенной длины
|
||||
res = Array.new(nums.length + enlarge, 0)
|
||||
|
||||
# Скопировать все элементы исходного массива в новый массив
|
||||
for i in 0...nums.length
|
||||
res[i] = nums[i]
|
||||
end
|
||||
|
||||
# Вернуть новый массив после расширения
|
||||
res
|
||||
end
|
||||
|
||||
# ## Вставка элемента num по индексу index в массив ###
|
||||
### Вставка элемента num по индексу index в массив ###
|
||||
def insert(nums, num, index)
|
||||
# Сдвинуть элемент с индексом index и все последующие элементы на одну позицию назад
|
||||
for i in (nums.length - 1).downto(index + 1)
|
||||
@@ -712,51 +674,7 @@ comments: true
|
||||
=== "Ruby"
|
||||
|
||||
```ruby title="array.rb"
|
||||
=begin
|
||||
File: array.rb
|
||||
Created Time: 2024-03-18
|
||||
Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
|
||||
=end
|
||||
|
||||
# ## Случайный доступ к элементу ###
|
||||
def random_access(nums)
|
||||
# Случайным образом выбрать число из интервала [0, nums.length)
|
||||
random_index = Random.rand(0...nums.length)
|
||||
|
||||
# Получить и вернуть случайный элемент
|
||||
nums[random_index]
|
||||
end
|
||||
|
||||
|
||||
# ## Увеличить длину массива ###
|
||||
# Обратите внимание: Array в Ruby является динамическим массивом и может быть расширен напрямую
|
||||
# Для удобства обучения эта функция рассматривает Array как массив неизменяемой длины
|
||||
def extend(nums, enlarge)
|
||||
# Инициализировать массив увеличенной длины
|
||||
res = Array.new(nums.length + enlarge, 0)
|
||||
|
||||
# Скопировать все элементы исходного массива в новый массив
|
||||
for i in 0...nums.length
|
||||
res[i] = nums[i]
|
||||
end
|
||||
|
||||
# Вернуть новый массив после расширения
|
||||
res
|
||||
end
|
||||
|
||||
# ## Вставка элемента num по индексу index в массив ###
|
||||
def insert(nums, num, index)
|
||||
# Сдвинуть элемент с индексом index и все последующие элементы на одну позицию назад
|
||||
for i in (nums.length - 1).downto(index + 1)
|
||||
nums[i] = nums[i - 1]
|
||||
end
|
||||
|
||||
# Присвоить num элементу по индексу index
|
||||
nums[index] = num
|
||||
end
|
||||
|
||||
|
||||
# ## Удаление элемента по индексу index ###
|
||||
### Удаление элемента по индексу index ###
|
||||
def remove(nums, index)
|
||||
# Сдвинуть все элементы после индекса index на одну позицию вперед
|
||||
for i in index...(nums.length - 1)
|
||||
@@ -996,59 +914,7 @@ comments: true
|
||||
=== "Ruby"
|
||||
|
||||
```ruby title="array.rb"
|
||||
=begin
|
||||
File: array.rb
|
||||
Created Time: 2024-03-18
|
||||
Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
|
||||
=end
|
||||
|
||||
# ## Случайный доступ к элементу ###
|
||||
def random_access(nums)
|
||||
# Случайным образом выбрать число из интервала [0, nums.length)
|
||||
random_index = Random.rand(0...nums.length)
|
||||
|
||||
# Получить и вернуть случайный элемент
|
||||
nums[random_index]
|
||||
end
|
||||
|
||||
|
||||
# ## Увеличить длину массива ###
|
||||
# Обратите внимание: Array в Ruby является динамическим массивом и может быть расширен напрямую
|
||||
# Для удобства обучения эта функция рассматривает Array как массив неизменяемой длины
|
||||
def extend(nums, enlarge)
|
||||
# Инициализировать массив увеличенной длины
|
||||
res = Array.new(nums.length + enlarge, 0)
|
||||
|
||||
# Скопировать все элементы исходного массива в новый массив
|
||||
for i in 0...nums.length
|
||||
res[i] = nums[i]
|
||||
end
|
||||
|
||||
# Вернуть новый массив после расширения
|
||||
res
|
||||
end
|
||||
|
||||
# ## Вставка элемента num по индексу index в массив ###
|
||||
def insert(nums, num, index)
|
||||
# Сдвинуть элемент с индексом index и все последующие элементы на одну позицию назад
|
||||
for i in (nums.length - 1).downto(index + 1)
|
||||
nums[i] = nums[i - 1]
|
||||
end
|
||||
|
||||
# Присвоить num элементу по индексу index
|
||||
nums[index] = num
|
||||
end
|
||||
|
||||
|
||||
# ## Удаление элемента по индексу index ###
|
||||
def remove(nums, index)
|
||||
# Сдвинуть все элементы после индекса index на одну позицию вперед
|
||||
for i in index...(nums.length - 1)
|
||||
nums[i] = nums[i + 1]
|
||||
end
|
||||
end
|
||||
|
||||
# ## Обход массива ###
|
||||
### Обход массива ###
|
||||
def traverse(nums)
|
||||
count = 0
|
||||
|
||||
@@ -1236,74 +1102,7 @@ comments: true
|
||||
=== "Ruby"
|
||||
|
||||
```ruby title="array.rb"
|
||||
=begin
|
||||
File: array.rb
|
||||
Created Time: 2024-03-18
|
||||
Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
|
||||
=end
|
||||
|
||||
# ## Случайный доступ к элементу ###
|
||||
def random_access(nums)
|
||||
# Случайным образом выбрать число из интервала [0, nums.length)
|
||||
random_index = Random.rand(0...nums.length)
|
||||
|
||||
# Получить и вернуть случайный элемент
|
||||
nums[random_index]
|
||||
end
|
||||
|
||||
|
||||
# ## Увеличить длину массива ###
|
||||
# Обратите внимание: Array в Ruby является динамическим массивом и может быть расширен напрямую
|
||||
# Для удобства обучения эта функция рассматривает Array как массив неизменяемой длины
|
||||
def extend(nums, enlarge)
|
||||
# Инициализировать массив увеличенной длины
|
||||
res = Array.new(nums.length + enlarge, 0)
|
||||
|
||||
# Скопировать все элементы исходного массива в новый массив
|
||||
for i in 0...nums.length
|
||||
res[i] = nums[i]
|
||||
end
|
||||
|
||||
# Вернуть новый массив после расширения
|
||||
res
|
||||
end
|
||||
|
||||
# ## Вставка элемента num по индексу index в массив ###
|
||||
def insert(nums, num, index)
|
||||
# Сдвинуть элемент с индексом index и все последующие элементы на одну позицию назад
|
||||
for i in (nums.length - 1).downto(index + 1)
|
||||
nums[i] = nums[i - 1]
|
||||
end
|
||||
|
||||
# Присвоить num элементу по индексу index
|
||||
nums[index] = num
|
||||
end
|
||||
|
||||
|
||||
# ## Удаление элемента по индексу index ###
|
||||
def remove(nums, index)
|
||||
# Сдвинуть все элементы после индекса index на одну позицию вперед
|
||||
for i in index...(nums.length - 1)
|
||||
nums[i] = nums[i + 1]
|
||||
end
|
||||
end
|
||||
|
||||
# ## Обход массива ###
|
||||
def traverse(nums)
|
||||
count = 0
|
||||
|
||||
# Обход массива по индексам
|
||||
for i in 0...nums.length
|
||||
count += nums[i]
|
||||
end
|
||||
|
||||
# Непосредственно обходить элементы массива
|
||||
for num in nums
|
||||
count += num
|
||||
end
|
||||
end
|
||||
|
||||
# ## Поиск заданного элемента в массиве ###
|
||||
### Поиск заданного элемента в массиве ###
|
||||
def find(nums, target)
|
||||
for i in 0...nums.length
|
||||
return i if nums[i] == target
|
||||
@@ -1526,23 +1325,7 @@ comments: true
|
||||
=== "Ruby"
|
||||
|
||||
```ruby title="array.rb"
|
||||
=begin
|
||||
File: array.rb
|
||||
Created Time: 2024-03-18
|
||||
Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
|
||||
=end
|
||||
|
||||
# ## Случайный доступ к элементу ###
|
||||
def random_access(nums)
|
||||
# Случайным образом выбрать число из интервала [0, nums.length)
|
||||
random_index = Random.rand(0...nums.length)
|
||||
|
||||
# Получить и вернуть случайный элемент
|
||||
nums[random_index]
|
||||
end
|
||||
|
||||
|
||||
# ## Увеличить длину массива ###
|
||||
### Увеличить длину массива ###
|
||||
# Обратите внимание: Array в Ruby является динамическим массивом и может быть расширен напрямую
|
||||
# Для удобства обучения эта функция рассматривает Array как массив неизменяемой длины
|
||||
def extend(nums, enlarge)
|
||||
|
||||
@@ -570,16 +570,7 @@ comments: true
|
||||
=== "Ruby"
|
||||
|
||||
```ruby title="linked_list.rb"
|
||||
=begin
|
||||
File: linked_list.rb
|
||||
Created Time: 2024-03-18
|
||||
Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
|
||||
=end
|
||||
|
||||
require_relative '../utils/list_node'
|
||||
require_relative '../utils/print_util'
|
||||
|
||||
# ## Вставка узла _p после узла n0 в связном списке ###
|
||||
### Вставка узла _p после узла n0 в связном списке ###
|
||||
# В Ruby `p` — встроенная функция, а `P` — константа, поэтому вместо этого можно использовать `_p`
|
||||
def insert(n0, _p)
|
||||
n1 = n0.next
|
||||
@@ -780,24 +771,7 @@ comments: true
|
||||
=== "Ruby"
|
||||
|
||||
```ruby title="linked_list.rb"
|
||||
=begin
|
||||
File: linked_list.rb
|
||||
Created Time: 2024-03-18
|
||||
Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
|
||||
=end
|
||||
|
||||
require_relative '../utils/list_node'
|
||||
require_relative '../utils/print_util'
|
||||
|
||||
# ## Вставка узла _p после узла n0 в связном списке ###
|
||||
# В Ruby `p` — встроенная функция, а `P` — константа, поэтому вместо этого можно использовать `_p`
|
||||
def insert(n0, _p)
|
||||
n1 = n0.next
|
||||
_p.next = n1
|
||||
n0.next = _p
|
||||
end
|
||||
|
||||
# ## Удаление первого узла после узла n0 в связном списке ###
|
||||
### Удаление первого узла после узла n0 в связном списке ###
|
||||
def remove(n0)
|
||||
return if n0.next.nil?
|
||||
|
||||
@@ -1001,34 +975,7 @@ comments: true
|
||||
=== "Ruby"
|
||||
|
||||
```ruby title="linked_list.rb"
|
||||
=begin
|
||||
File: linked_list.rb
|
||||
Created Time: 2024-03-18
|
||||
Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
|
||||
=end
|
||||
|
||||
require_relative '../utils/list_node'
|
||||
require_relative '../utils/print_util'
|
||||
|
||||
# ## Вставка узла _p после узла n0 в связном списке ###
|
||||
# В Ruby `p` — встроенная функция, а `P` — константа, поэтому вместо этого можно использовать `_p`
|
||||
def insert(n0, _p)
|
||||
n1 = n0.next
|
||||
_p.next = n1
|
||||
n0.next = _p
|
||||
end
|
||||
|
||||
# ## Удаление первого узла после узла n0 в связном списке ###
|
||||
def remove(n0)
|
||||
return if n0.next.nil?
|
||||
|
||||
# n0 -> remove_node -> n1
|
||||
remove_node = n0.next
|
||||
n1 = remove_node.next
|
||||
n0.next = n1
|
||||
end
|
||||
|
||||
# ## Доступ к узлу связного списка по индексу index ###
|
||||
### Доступ к узлу связного списка по индексу index ###
|
||||
def access(head, index)
|
||||
for i in 0...index
|
||||
return nil if head.nil?
|
||||
@@ -1252,44 +1199,7 @@ comments: true
|
||||
=== "Ruby"
|
||||
|
||||
```ruby title="linked_list.rb"
|
||||
=begin
|
||||
File: linked_list.rb
|
||||
Created Time: 2024-03-18
|
||||
Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
|
||||
=end
|
||||
|
||||
require_relative '../utils/list_node'
|
||||
require_relative '../utils/print_util'
|
||||
|
||||
# ## Вставка узла _p после узла n0 в связном списке ###
|
||||
# В Ruby `p` — встроенная функция, а `P` — константа, поэтому вместо этого можно использовать `_p`
|
||||
def insert(n0, _p)
|
||||
n1 = n0.next
|
||||
_p.next = n1
|
||||
n0.next = _p
|
||||
end
|
||||
|
||||
# ## Удаление первого узла после узла n0 в связном списке ###
|
||||
def remove(n0)
|
||||
return if n0.next.nil?
|
||||
|
||||
# n0 -> remove_node -> n1
|
||||
remove_node = n0.next
|
||||
n1 = remove_node.next
|
||||
n0.next = n1
|
||||
end
|
||||
|
||||
# ## Доступ к узлу связного списка по индексу index ###
|
||||
def access(head, index)
|
||||
for i in 0...index
|
||||
return nil if head.nil?
|
||||
head = head.next
|
||||
end
|
||||
|
||||
head
|
||||
end
|
||||
|
||||
# ## Поиск первого узла со значением target в связном списке ###
|
||||
### Поиск первого узла со значением target в связном списке ###
|
||||
def find(head, target)
|
||||
index = 0
|
||||
while head
|
||||
|
||||
@@ -2198,18 +2198,12 @@ comments: true
|
||||
=== "Ruby"
|
||||
|
||||
```ruby title="my_list.rb"
|
||||
=begin
|
||||
File: my_list.rb
|
||||
Created Time: 2024-03-18
|
||||
Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
|
||||
=end
|
||||
|
||||
# ## Класс списка ###
|
||||
### Класс списка ###
|
||||
class MyList
|
||||
attr_reader :size # Получить длину списка (текущее число элементов)
|
||||
attr_reader :capacity # Получить вместимость списка
|
||||
|
||||
# ## Конструктор ###
|
||||
### Конструктор ###
|
||||
def initialize
|
||||
@capacity = 10
|
||||
@size = 0
|
||||
@@ -2217,20 +2211,20 @@ comments: true
|
||||
@arr = Array.new(capacity)
|
||||
end
|
||||
|
||||
# ## Доступ к элементу ###
|
||||
### Доступ к элементу ###
|
||||
def get(index)
|
||||
# Если индекс выходит за границы, выбрасывается исключение; далее аналогично
|
||||
raise IndexError, "индекс выходит за границы" if index < 0 || index >= size
|
||||
@arr[index]
|
||||
end
|
||||
|
||||
# ## Доступ к элементу ###
|
||||
### Доступ к элементу ###
|
||||
def set(index, num)
|
||||
raise IndexError, "индекс выходит за границы" if index < 0 || index >= size
|
||||
@arr[index] = num
|
||||
end
|
||||
|
||||
# ## Добавление элемента в конец ###
|
||||
### Добавление элемента в конец ###
|
||||
def add(num)
|
||||
# При превышении вместимости по числу элементов запускается расширение
|
||||
extend_capacity if size == capacity
|
||||
@@ -2240,7 +2234,7 @@ comments: true
|
||||
@size += 1
|
||||
end
|
||||
|
||||
# ## Вставка элемента в середину ###
|
||||
### Вставка элемента в середину ###
|
||||
def insert(index, num)
|
||||
raise IndexError, "индекс выходит за границы" if index < 0 || index >= size
|
||||
|
||||
@@ -2257,7 +2251,7 @@ comments: true
|
||||
@size += 1
|
||||
end
|
||||
|
||||
# ## Удаление элемента ###
|
||||
### Удаление элемента ###
|
||||
def remove(index)
|
||||
raise IndexError, "индекс выходит за границы" if index < 0 || index >= size
|
||||
num = @arr[index]
|
||||
@@ -2274,7 +2268,7 @@ comments: true
|
||||
num
|
||||
end
|
||||
|
||||
# ## Расширение списка ###
|
||||
### Расширение списка ###
|
||||
def extend_capacity
|
||||
# Создать новый массив длиной в extend_ratio раз больше исходного и скопировать в него исходный массив
|
||||
arr = @arr.dup + Array.new(capacity * (@extend_ratio - 1))
|
||||
@@ -2282,7 +2276,7 @@ comments: true
|
||||
@capacity = arr.length
|
||||
end
|
||||
|
||||
# ## Преобразование списка в массив ###
|
||||
### Преобразование списка в массив ###
|
||||
def to_array
|
||||
sz = size
|
||||
# Преобразовывать только элементы списка в пределах фактической длины
|
||||
|
||||
Reference in New Issue
Block a user