number_grid 0.0.1

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.
Files changed (2) hide show
  1. data/lib/number_grid.rb +113 -0
  2. metadata +45 -0
@@ -0,0 +1,113 @@
1
+ require 'fileutils'
2
+
3
+ class Grid
4
+ def initialize(height = 20, width = 20, filename = 'number_grid.txt')
5
+ @height = height
6
+ @width = width
7
+ @filename = filename
8
+ end
9
+
10
+ def numberStringToArray(str)
11
+ list = Array.new(str.split(" "))
12
+ list.map! {|n| n = n.to_i}
13
+ end
14
+
15
+ def readGrid()
16
+ grid = []
17
+ File.open(@filename, 'r') do |f|
18
+ f.each_line do |line|
19
+ grid.push numberStringToArray(line)
20
+ end
21
+ end
22
+ grid
23
+ end
24
+
25
+ def getProduct(set)
26
+ product = 1
27
+ set.each {|int| product *= int}
28
+ product
29
+ end
30
+
31
+ def greatestProductFromLine(line)
32
+ product_list = []
33
+ i = 0
34
+ while i < line.length - 3 do
35
+ set = line[i...(i + 4)]
36
+ product_list.push getProduct(set)
37
+ i += 1
38
+ end
39
+ product_list.max
40
+ end
41
+
42
+ def greatestHorizontalProduct(grid)
43
+ i = 0
44
+ product_list = []
45
+ while i < @height do
46
+ product_list.push greatestProductFromLine(grid[i])
47
+ i += 1
48
+ end
49
+ product_list.max
50
+ end
51
+
52
+ def getVerticalLines(grid)
53
+ x = 0
54
+ verticalLines = []
55
+ while x < grid[0].length do
56
+ verticalList = []
57
+ y = 0
58
+ while y < @height do
59
+ verticalList.push grid[y][x]
60
+ y += 1
61
+ end
62
+ verticalLines.push verticalList
63
+ x += 1
64
+ end
65
+ verticalLines
66
+ end
67
+
68
+ def greatestVerticalProduct(grid)
69
+ product_list = []
70
+ verticalLines = getVerticalLines(grid)
71
+ verticalLines.each do |line|
72
+ product_list.push greatestProductFromLine(line)
73
+ end
74
+ product_list.max
75
+ end
76
+
77
+ def greatestDiagonalProductLtoR(grid)
78
+ product_list = []
79
+ y = 0
80
+ while y < (@height - 3) do
81
+ x = 0
82
+ while x < (grid[0].length - 3) do
83
+ set = [grid[y][x], grid[y + 1][x + 1], grid[y + 2][x + 2], grid[y + 3][x + 3]]
84
+ product_list.push(getProduct(set))
85
+ x += 1
86
+ end
87
+ y += 1
88
+ end
89
+ product_list.max
90
+ end
91
+
92
+ def reverseGrid(grid)
93
+ reversed_grid = []
94
+ grid.each do |line|
95
+ reversed_grid.push(line.reverse)
96
+ end
97
+ reversed_grid
98
+ end
99
+
100
+ def greatestDiagonalProductRtoL(grid)
101
+ reversed_grid = reverseGrid(grid)
102
+ greatestDiagonalProductLtoR(reversed_grid)
103
+ end
104
+
105
+ def solve()
106
+ grid = readGrid()
107
+ ans = [
108
+ greatestHorizontalProduct(grid),
109
+ greatestVerticalProduct(grid),
110
+ greatestDiagonalProductLtoR(grid),
111
+ greatestDiagonalProductRtoL(grid)].max
112
+ end
113
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: number_grid
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Adam Gibbons
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2010-04-28 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: A simple grid analyzer that solves Project Euler problem 11.
15
+ email: adam.d.gibbons@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/number_grid.rb
21
+ homepage: http://rubygems.org/gems/number_grid
22
+ licenses: []
23
+ post_install_message:
24
+ rdoc_options: []
25
+ require_paths:
26
+ - lib
27
+ required_ruby_version: !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 1.8.25
42
+ signing_key:
43
+ specification_version: 3
44
+ summary: Number grid analyzer!
45
+ test_files: []