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.
- data/lib/number_grid.rb +113 -0
- metadata +45 -0
data/lib/number_grid.rb
ADDED
@@ -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: []
|