algorithms_basic 0.1.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/Algoritimos_fase1/Exercise.rb +43 -0
- data/lib/Algoritimos_fase1/array_reversal.rb +20 -0
- data/lib/Algoritimos_fase1/binary_search.rb +15 -0
- data/lib/Algoritimos_fase1/bubble_sort.rb +21 -0
- data/lib/Algoritimos_fase1/counting_sort.rb +33 -0
- data/lib/Algoritimos_fase1/debug_codigos.rb +19 -0
- data/lib/Algoritimos_fase1/exemplo_maximum.rb +17 -0
- data/lib/Algoritimos_fase1/greedy_algorithm.rb +22 -0
- data/lib/Algoritimos_fase1/linear_search.rb +16 -0
- data/lib/Algoritimos_fase1/maximiu_array.rb +23 -0
- data/lib/Algoritimos_fase1/minimum_spanning.rb +0 -0
- data/lib/Algoritimos_fase1/ordanition_name.rb +8 -0
- data/lib/Algoritimos_fase1/search_binary_teste.rb +35 -0
- data/lib/ruby_version/version.rb +4 -0
- data/lib/ruby_version.rb +12 -0
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 401c6eb7a5467ce6ee82504d635a5fd47a28a87283237b61e9957134ebf6f4c4
|
4
|
+
data.tar.gz: ecf39c29e86a529bef2e2a0129977dc0ec181310c5882366f58988371befcc97
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1b978f4e929db60b1a519724bc958a0b7eaa88ffb9c984302f8db3cb7ba778fcba86bcbf0d34ec16c9dee0c3483f7856be0b1009aba711302e78566eaca4536
|
7
|
+
data.tar.gz: 3ad6dc8f636bbae1d16b062b627c1205b572ea0bea4816965fa48830aa748ef2a423004262134254b81fbbe333dafd1e582150813c614f4cead5807c976d8e4d
|
@@ -0,0 +1,43 @@
|
|
1
|
+
def search (arr)
|
2
|
+
arr.min
|
3
|
+
end
|
4
|
+
|
5
|
+
def ordenation (list)
|
6
|
+
list.count
|
7
|
+
end
|
8
|
+
|
9
|
+
def negativos (num)
|
10
|
+
new_array = []
|
11
|
+
num.each_with_index do |_, i | #Negativando os numeros de um array, os que são positivos viram negativos e vice versa
|
12
|
+
new_array << num[i] * -1
|
13
|
+
end
|
14
|
+
new_array
|
15
|
+
end
|
16
|
+
|
17
|
+
def verificar_list (numb) # Essa função verifica se todos os elementos da lista são pares se for imprimi true senão false
|
18
|
+
numb.none? do |element|
|
19
|
+
element.even?
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def deletado (enum)
|
24
|
+
numeros = enum.dup #Usado o (.dup) para fazer uma cópia do array original
|
25
|
+
numeros.delete_at(2) # Utilizamos o delete_at() para deletar um elemento com base no seu indice
|
26
|
+
numeros
|
27
|
+
end
|
28
|
+
# lista = [31, 49, 1, 2, 7, 9]
|
29
|
+
|
30
|
+
# menor = search(lista)
|
31
|
+
# puts menor
|
32
|
+
#
|
33
|
+
# contador = ordenation(lista)
|
34
|
+
# puts contador
|
35
|
+
#
|
36
|
+
# negativo = negativos(lista)
|
37
|
+
# print negativo
|
38
|
+
|
39
|
+
# resultado = verificar_list(lista)
|
40
|
+
# puts resultado
|
41
|
+
|
42
|
+
# new_result = deletado(lista)
|
43
|
+
# print new_result
|
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
def reversal(arr, start, fim)
|
4
|
+
while start < fim
|
5
|
+
arr[start],arr[fim] = arr[fim], arr[start]
|
6
|
+
start += 1
|
7
|
+
fim -= 1
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def rothate(arr ,d, n)
|
12
|
+
reversal(arr, 0, n - 1)
|
13
|
+
reversal(arr, 0, d - 1)
|
14
|
+
reversal(arr, d, n - 1)
|
15
|
+
end
|
16
|
+
array = [1,2,3,4,5,6,7,8,9,10]
|
17
|
+
array.length
|
18
|
+
k = 3
|
19
|
+
rothate(array, k, array.length)
|
20
|
+
print array.inspect
|
@@ -0,0 +1,15 @@
|
|
1
|
+
def binary_search (arr,target)
|
2
|
+
arr.bsearch { |x| x >= target} #Essa função faz a pesquisa binária
|
3
|
+
end
|
4
|
+
|
5
|
+
|
6
|
+
arr = (10..100).to_a
|
7
|
+
print "Insira um valor para saber se está na lista: "
|
8
|
+
target = 99
|
9
|
+
result = binary_search(arr,target)
|
10
|
+
|
11
|
+
if result
|
12
|
+
puts "valor encontrado: #{}"
|
13
|
+
else
|
14
|
+
puts "Valor não encontrado!"
|
15
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Bublle_sort
|
2
|
+
attr_accessor :arr
|
3
|
+
def initialize
|
4
|
+
@arr = arr
|
5
|
+
end
|
6
|
+
|
7
|
+
def bubble_sort(arr)
|
8
|
+
arr.each_index do |i|
|
9
|
+
max_index = arr[i..-1].each_with_index.min_by { |num, _| num }[1] + i
|
10
|
+
arr[i], arr[max_index] = arr[max_index], arr[i]
|
11
|
+
true
|
12
|
+
end
|
13
|
+
arr
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
lista = [9,2,6,3,7,1,-3,-8]
|
18
|
+
result = Bublle_sort.new
|
19
|
+
print result.bubble_sort(lista)
|
20
|
+
|
21
|
+
# puts "Minha lista ficou ordenada da seguinte forma: #{result.inspect}"
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# O algoritimo counting sort é baseado em três arrays
|
2
|
+
|
3
|
+
def counting_sort(arr)
|
4
|
+
|
5
|
+
max_value = 7 #Essa linha indica que meu array deve ter no máximo 7 indices(0 a 6)
|
6
|
+
count = Array.new(max_value, 0)
|
7
|
+
|
8
|
+
# O loop abaixo calcula a frequência de repetição dos arrays em um novo array(count) que armazena a repetição de cada número em seu indice
|
9
|
+
arr.each do |element|
|
10
|
+
count[element - 1] += 1 #Está linha verifica cada elemento e se houver uma repetição incrementa mais 1 ao indice do elemento
|
11
|
+
end
|
12
|
+
|
13
|
+
# As linhas abaixo faz uma soma de acumulativo a partir do primeiro indice
|
14
|
+
count.each_with_index do |_, i|
|
15
|
+
next if i == 0 #condição para iniciar a partir do primeiro indice
|
16
|
+
count[i] += count[i - 1] #Calculo para calcular o indice atual mais o indice anterior
|
17
|
+
end
|
18
|
+
|
19
|
+
array_b = Array.new(0) #Inicia o terceiro array
|
20
|
+
|
21
|
+
(arr.length - 1).downto(0) do |i| #Loop para percorrer o array de trás para frente
|
22
|
+
array_b[count[arr[i] - 1] - 1] = arr[i] # Essa linha está pedindo para poder ir no array principal(arr) pegar o ultimo numero desse array e comparar com o array(count)
|
23
|
+
# armazenar o numero correspondente do array(arr) baseado no numero do array(count) decrementado em menos 1 e armazenar no indice correspondente do array_b
|
24
|
+
count[arr[i]-1] -= 1 # <= E a linha ao lado decrementa o número do indice usado na operação anterior em menos 1 par que se array(arr) tiver um numero repetido ele é armazenado no indice anterior
|
25
|
+
end
|
26
|
+
array_b
|
27
|
+
end
|
28
|
+
|
29
|
+
lista = [3,2,4,7,4,7,1,2,3]
|
30
|
+
|
31
|
+
result = counting_sort(lista)
|
32
|
+
|
33
|
+
puts "O resultado do coutintg sort é #{result}"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
pasta_codigo = "/home/victoroliveira59/Documentos/Github/Ruby/Desenvolvendo_me_/Algoritimos_fase1"
|
4
|
+
|
5
|
+
# Percorre todos os arquivos da pasta "Código"
|
6
|
+
Dir.foreach(pasta_codigo) do |nome_arquivo|
|
7
|
+
caminho_arquivo = File.join(pasta_codigo, nome_arquivo)
|
8
|
+
|
9
|
+
# Verifica se é um arquivo JSON
|
10
|
+
if File.file?(caminho_arquivo) && nome_arquivo.end_with?('.json')
|
11
|
+
# Realize o debug com o arquivo JSON
|
12
|
+
json_data = File.read(caminho_arquivo)
|
13
|
+
dados = JSON.parse(json_data)
|
14
|
+
|
15
|
+
# Faça o que precisar com os dados do arquivo JSON
|
16
|
+
# Por exemplo, imprimir na tela:
|
17
|
+
puts dados
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#noinspection RubyScope
|
2
|
+
def greedy (recebido, valor)
|
3
|
+
|
4
|
+
moeda = [1, 5, 10, 25, 50]
|
5
|
+
|
6
|
+
troco = Array.new(0)
|
7
|
+
troco_total = recebido - valor
|
8
|
+
|
9
|
+
while troco_total > 0
|
10
|
+
maior_moeda = moeda.select { |moeda| moeda <= troco_total}.max
|
11
|
+
troco << maior_moeda
|
12
|
+
troco_total -= maior_moeda
|
13
|
+
end
|
14
|
+
troco
|
15
|
+
end
|
16
|
+
|
17
|
+
recebido = gets.chomp.to_i
|
18
|
+
valor = gets.chomp.to_i
|
19
|
+
|
20
|
+
result = greedy(recebido, valor)
|
21
|
+
|
22
|
+
print result
|
@@ -0,0 +1,16 @@
|
|
1
|
+
array = (10..100).to_a
|
2
|
+
|
3
|
+
print "Insira um número: "
|
4
|
+
number = gets.chomp.to_i
|
5
|
+
|
6
|
+
found = false
|
7
|
+
|
8
|
+
array.each do |element|
|
9
|
+
if element == number
|
10
|
+
puts "Valor encontrado #{element}"
|
11
|
+
found = true
|
12
|
+
break
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
puts "Valor não encontrado" unless found
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# O
|
2
|
+
arr = [9,-8,8,3]
|
3
|
+
|
4
|
+
a = arr.sort #essa função ordena o array em ordem crescente
|
5
|
+
k = 3
|
6
|
+
|
7
|
+
a.each_with_index do |value, i|
|
8
|
+
if k > 0
|
9
|
+
if value < 0 #Condição do valor menor que 0, multiplica por -1 e vira positivo decrementando o meu valor de K
|
10
|
+
a[i] *= - 1
|
11
|
+
k -= 1
|
12
|
+
elsif value == 0
|
13
|
+
k = 0
|
14
|
+
break
|
15
|
+
elsif value > 0 #Quando o menor valor do array e maior que zero ele é multiplicado por menos 1 e o codigo é parado
|
16
|
+
a[i] *= - 1
|
17
|
+
break
|
18
|
+
else
|
19
|
+
break
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
puts a.sum # Todos os elementos são somados e retornando o resultado
|
File without changes
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# Este código representa a pesquisa binaria essa pesquisa só funciona quando a lista é ordenada a sua notação é log2n
|
2
|
+
|
3
|
+
def search(arr, target)
|
4
|
+
arr_init = 0
|
5
|
+
arr_fim = arr.length - 1 #Lê a quantidade de elementos decrementando
|
6
|
+
|
7
|
+
#Esse loop inicia com o inicio verificando se é menor que o fim
|
8
|
+
while arr_init <= arr_fim
|
9
|
+
mid = (arr_init + arr_fim) / 2 #Ele divide o a soma do inicio e o fim por 2
|
10
|
+
chute = arr[mid] # O resultado de mid é comparado pelo indice no array original e (chute passa a valer o numero indicado pelo indice)
|
11
|
+
|
12
|
+
if chute == target # Aqui e colocado uma condição para o valor obtido pela pesquisa comparando com o do usuario
|
13
|
+
return mid
|
14
|
+
elsif
|
15
|
+
chute > target
|
16
|
+
arr_fim = mid - 1 #Essa operação respresenta se o valor estiver acima, decrementa o valor obtido em mid e o arr_fim passa a ter o valor
|
17
|
+
else #Como a condição não foi solucionada volta ao inicio do loop
|
18
|
+
arr_init = mid + 1 # Nesta linha acontece que se o numero estiver a abaixo do chute e incrementado +1 a o arr_init
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
26
|
+
target = 11
|
27
|
+
|
28
|
+
result = search(array, target)
|
29
|
+
|
30
|
+
#Condição para saber se o valor foi enccontrado na lista ou não
|
31
|
+
if result
|
32
|
+
puts "valor encontrado na posição: #{result}"
|
33
|
+
else
|
34
|
+
puts "Valor não encontrado!"
|
35
|
+
end
|
data/lib/ruby_version.rb
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: algorithms_basic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Victor Oliveira
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-08-
|
11
|
+
date: 2023-08-20 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: This gem was created with the intention of developing my skills as a
|
14
14
|
programmer and also provides help for beginners and precisely improve their logic.
|
@@ -18,7 +18,22 @@ executables: []
|
|
18
18
|
extensions: []
|
19
19
|
extra_rdoc_files: []
|
20
20
|
files:
|
21
|
+
- lib/Algoritimos_fase1/Exercise.rb
|
22
|
+
- lib/Algoritimos_fase1/array_reversal.rb
|
23
|
+
- lib/Algoritimos_fase1/binary_search.rb
|
24
|
+
- lib/Algoritimos_fase1/bubble_sort.rb
|
25
|
+
- lib/Algoritimos_fase1/counting_sort.rb
|
26
|
+
- lib/Algoritimos_fase1/debug_codigos.rb
|
27
|
+
- lib/Algoritimos_fase1/exemplo_maximum.rb
|
28
|
+
- lib/Algoritimos_fase1/greedy_algorithm.rb
|
29
|
+
- lib/Algoritimos_fase1/linear_search.rb
|
30
|
+
- lib/Algoritimos_fase1/maximiu_array.rb
|
31
|
+
- lib/Algoritimos_fase1/minimum_spanning.rb
|
32
|
+
- lib/Algoritimos_fase1/ordanition_name.rb
|
33
|
+
- lib/Algoritimos_fase1/search_binary_teste.rb
|
21
34
|
- lib/algorithms_basic.rb
|
35
|
+
- lib/ruby_version.rb
|
36
|
+
- lib/ruby_version/version.rb
|
22
37
|
homepage: https://github.com/victoroliveira59/gem_algorithms_criation
|
23
38
|
licenses:
|
24
39
|
- MIT
|