Module: PrimeNumberTable
- Extended by:
- PrimeNumberTable
- Included in:
- PrimeNumberTable
- Defined in:
- lib/prime_number_table.rb,
lib/prime_number_table/version.rb
Constant Summary collapse
- VERSION =
'2.2'
Instance Method Summary collapse
- #dialog ⇒ Object
- #fibonacci_number(index) ⇒ Object
- #prime?(number) ⇒ Boolean
- #prime_number(index) ⇒ Object
- #print(table_size: nil, width: 3, height: 3, numbers: :prime, operation: :addition) ⇒ Object
Instance Method Details
#dialog ⇒ Object
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 |
# File 'lib/prime_number_table.rb', line 8 def dialog width, height = loop do printf "=> Please give matrix dimension (<width>x<height>)\n-> " dimension = gets.delete(' ').downcase break dimension if /^\d+x\d+$/ =~ dimension end.split('x').map(&:to_i) numbers = begin printf "=> Should I use (P)rime numbers or (F)ibonacci numbers?\n-> " input = gets.strip.downcase { p: :prime, f: :fibonacci }.fetch(input.to_sym, input).tap(&method(:validate_numbers!)) rescue ArgumentError retry end operation = begin printf "=> Multiplication (*) or Addition (+)\n-> " input = gets.strip.downcase { m: :multiplication, a: :addition }.fetch(input.to_sym, input).tap(&method(:validate_operation!)) rescue ArgumentError retry end puts print(width: width, height: height, numbers: numbers, operation: operation) puts end |
#fibonacci_number(index) ⇒ Object
55 56 57 58 |
# File 'lib/prime_number_table.rb', line 55 def fibonacci_number(index) @fibonacci_numbers ||= Hash.new { |hash, key| hash[key] = key < 2 ? key : hash[key - 1] + hash[key - 2] } @fibonacci_numbers[index] end |
#prime?(number) ⇒ Boolean
66 67 68 69 70 71 72 |
# File 'lib/prime_number_table.rb', line 66 def prime?(number) return false if number < 2 @prime_numbers ||= [] @prime_numbers[number] = (2..number / 2).none? { |i| (number % i).zero? } if @prime_numbers[number].nil? @prime_numbers[number] end |
#prime_number(index) ⇒ Object
60 61 62 63 64 |
# File 'lib/prime_number_table.rb', line 60 def prime_number(index) number = 0 (index -= 1 if prime?(number += 1)) while index.positive? number end |
#print(table_size: nil, width: 3, height: 3, numbers: :prime, operation: :addition) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/prime_number_table.rb', line 36 def print(table_size: nil, width: 3, height: 3, numbers: :prime, operation: :addition) validate_numbers!(numbers) validate_operation!(operation) operation = { addition: :+, multiplication: :* }.fetch(operation.to_sym, operation) (1..table_size || height).each do |row| (1..table_size || width).each do |column| y = public_send("#{numbers}_number", row) x = public_send("#{numbers}_number", column) printf('%3d ', x.public_send(operation, y)) end puts end nil end |