-
Notifications
You must be signed in to change notification settings - Fork 14
/
070_vamos_usar_o_valor_padrao_definido_no_construtor_de_uma_hash_para_calcular_fibonacci_de_uma_forma_interessante.rb
executable file
·52 lines (38 loc) · 2.71 KB
/
070_vamos_usar_o_valor_padrao_definido_no_construtor_de_uma_hash_para_calcular_fibonacci_de_uma_forma_interessante.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# 09/06/2016 - Everaldo Gomes - [email protected]
#
# 070 - Vamos usar o valor padrão definido no construtor
# de uma hash para calcular fibonacci de uma forma interessante
#
# http://ruby-doc.org/core-2.3.0/Hash.html#method-c-new
#
#
# Hashes aceitam um valor default no construtor, onde uma cópia
# é retornada quando uma chave não é encontrada.
#
# Além de um valor, um bloco pode ser utilizado.
#
# Vamos usar essa técnica para criar uma hash que calcula a
# sequência de fibonacci
#
#
h1 = Hash.new(5) # 5 é um valor padrão
puts h1[:qualquer_chave] # 5 será impresso # =>
puts h1["outra chave"] # 5 será impresso # =>
fibonacci = Hash.new do |hash, key|
if key == 0 or key == 1
hash[key] = key
else
hash[key] = hash[key - 1] + hash[key - 2]
end
end
puts "Número de chaves=#{fibonacci.keys.count}" # Nada nesta mão
puts "Fib[100]=#{fibonacci[100]}"
p fibonacci
puts "Número de chaves=#{fibonacci.keys.count}" # 101 chaves foram criadas
# => nil
# >> 5
# >> 5
# >> Número de chaves=0
# >> Fib[100]=354224848179261915075
# >> {1=>1, 0=>0, 2=>1, 3=>2, 4=>3, 5=>5, 6=>8, 7=>13, 8=>21, 9=>34, 10=>55, 11=>89, 12=>144, 13=>233, 14=>377, 15=>610, 16=>987, 17=>1597, 18=>2584, 19=>4181, 20=>6765, 21=>10946, 22=>17711, 23=>28657, 24=>46368, 25=>75025, 26=>121393, 27=>196418, 28=>317811, 29=>514229, 30=>832040, 31=>1346269, 32=>2178309, 33=>3524578, 34=>5702887, 35=>9227465, 36=>14930352, 37=>24157817, 38=>39088169, 39=>63245986, 40=>102334155, 41=>165580141, 42=>267914296, 43=>433494437, 44=>701408733, 45=>1134903170, 46=>1836311903, 47=>2971215073, 48=>4807526976, 49=>7778742049, 50=>12586269025, 51=>20365011074, 52=>32951280099, 53=>53316291173, 54=>86267571272, 55=>139583862445, 56=>225851433717, 57=>365435296162, 58=>591286729879, 59=>956722026041, 60=>1548008755920, 61=>2504730781961, 62=>4052739537881, 63=>6557470319842, 64=>10610209857723, 65=>17167680177565, 66=>27777890035288, 67=>44945570212853, 68=>72723460248141, 69=>117669030460994, 70=>190392490709135, 71=>308061521170129, 72=>498454011879264, 73=>806515533049393, 74=>1304969544928657, 75=>2111485077978050, 76=>3416454622906707, 77=>5527939700884757, 78=>8944394323791464, 79=>14472334024676221, 80=>23416728348467685, 81=>37889062373143906, 82=>61305790721611591, 83=>99194853094755497, 84=>160500643816367088, 85=>259695496911122585, 86=>420196140727489673, 87=>679891637638612258, 88=>1100087778366101931, 89=>1779979416004714189, 90=>2880067194370816120, 91=>4660046610375530309, 92=>7540113804746346429, 93=>12200160415121876738, 94=>19740274219868223167, 95=>31940434634990099905, 96=>51680708854858323072, 97=>83621143489848422977, 98=>135301852344706746049, 99=>218922995834555169026, 100=>354224848179261915075}
# >> Número de chaves=101