lander 0.1.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 394db4be293e6af984e8bbd3162d598514a2eda0
4
+ data.tar.gz: 3adafa241c787ed2d3cbc51ebde601f509816cf0
5
+ SHA512:
6
+ metadata.gz: e50e1bf6516df340a91ba0f801ebf50f56866f2d191f7e3f9bf1396671d4d475c6cb6dae91c1461ae05509b4e8a29cdfe094d690f456e50c7bcf9201e666feae
7
+ data.tar.gz: 1e231f3d8db4c1c935f455a7ec363e6563f5d72484a112f4766a86cb5584160b1b50df39e42d27bbbf3b0bc17d15a2710d8ada526acab8245980c2c3390ff3a3
@@ -0,0 +1,23 @@
1
+ require_relative 'lander/version'
2
+ require_relative 'lander/list_node'
3
+ require_relative 'lander/tree_node'
4
+ require_relative 'lander/array_with_pointers'
5
+
6
+ # module Lander
7
+ # class Error < StandardError; end
8
+ # # Your code goes here...
9
+ # end
10
+
11
+ module Lander
12
+ def self.show_array(arr, left_pointer, right_pointer)
13
+ ShowArray(arr, left_pointer, right_pointer)
14
+ end
15
+
16
+ def self.show_linked_list(arr)
17
+ puts createLinkedList(arr)
18
+ end
19
+
20
+ def self.show_tree(arr)
21
+ displayTree(arr)
22
+ end
23
+ end
@@ -0,0 +1,46 @@
1
+ def ShowArray(array, left_pointer, right_pointer)
2
+ return unless valid_pointers?(left_pointer, right_pointer)
3
+
4
+ buffer = ' ' * 3
5
+ left = find_left_position(left_pointer)
6
+ right = find_right_position(array, right_pointer)
7
+
8
+ puts "Left is #{left_pointer}, Right is #{right_pointer}"
9
+ display_array(array, left, right, buffer)
10
+ end
11
+
12
+ def valid_pointers?(left_pointer, right_pointer)
13
+ if (left_pointer < 0) || (right_pointer < -1)
14
+ puts "Please enter valid pointer values."
15
+ puts "Left pointer values should be in range 0..(array.length - 1)"
16
+ puts "Right pointer values should be in range 0..(array.length - 1) OR -1"
17
+ return false
18
+ end
19
+ true
20
+ end
21
+
22
+ def find_left_position(left_pointer)
23
+ (3 * left_pointer)
24
+ end
25
+
26
+ def find_right_position(array, right_pointer)
27
+ return (3 * (array.length - 1)) if right_pointer == -1
28
+ (3 * right_pointer)
29
+ end
30
+
31
+ def display_array(array, left, right, buffer)
32
+ if left == right
33
+ puts "#{buffer}#{array}"
34
+ puts "#{buffer}#{' ' * left} ^"
35
+ puts "#{buffer}#{' ' * left} L"
36
+ puts "#{buffer}#{' ' * right} R"
37
+ elsif left < right
38
+ puts "#{buffer}#{array}"
39
+ puts "#{buffer}#{' ' * left} ^" + "#{' ' * (right - left - 1)}^"
40
+ puts "#{buffer}#{' ' * left} L" + "#{' ' * (right - left - 1)}R"
41
+ else
42
+ puts "#{buffer}#{array}"
43
+ puts "#{buffer}#{' ' * right} ^" + "#{' ' * (left - right - 1)}^"
44
+ puts "#{buffer}#{' ' * right} R" + "#{' ' * (left - right - 1)}L"
45
+ end
46
+ end
@@ -0,0 +1,13 @@
1
+ ListNode = Struct.new :val, :next do
2
+ def to_s; self && "#{val} -> #{self.next}" end
3
+ end
4
+
5
+ def createLinkedList(arr)
6
+ arr.map { |val| ListNode.new val }
7
+ .tap { |nodes| nodes.each_with_index { |node, i| node.next = nodes[i+1] } }
8
+ .first
9
+ end
10
+
11
+ # Minified:
12
+ # ListNode=Struct.new(:val,:next){def to_s;self&&"#{val} -> #{self.next}"end}
13
+ # def nodify(a);a.map{|v|ListNode.new v}.tap{|ns|ns.each_with_index{|n,i|n.next=ns[i+1]}}.first end
@@ -0,0 +1,74 @@
1
+ TreeNode = Struct.new(:val, :left, :right) do
2
+ def height
3
+ self ? 1 + [left&.height || 0, right&.height || 0].max : 0
4
+ end
5
+
6
+ def get_levels(levels = [], depth = 0, h = height)
7
+ return levels if depth >= h
8
+ levels[depth] ||= []
9
+ levels[depth] << val
10
+ self.left = TreeNode.new('_') unless left
11
+ self.right = TreeNode.new('_') unless right
12
+ left.get_levels(levels, depth + 1, h)
13
+ right.get_levels(levels, depth + 1, h)
14
+ levels
15
+ end
16
+
17
+ def to_s
18
+ puts ""
19
+ levels = get_levels
20
+ levels.each_with_index do |level, depth|
21
+ padding = ((levels.size - depth) > 1) ? ' ' * ((levels.size - depth) * 2) : (' ' * 3)
22
+ # puts "padding is #{padding.size}"
23
+ level = level.map { |val| val.nil? ? '_' : val }
24
+ node_vals = level.join(' ' * (levels.size - depth))
25
+ puts "#{padding}#{node_vals}"
26
+ end
27
+ puts ""
28
+ end
29
+
30
+ # def self.createTree(arr)
31
+ # root = TreeNode.new(arr.shift)
32
+ # queue = [root]
33
+ # until arr.empty?
34
+ # node = queue.shift
35
+ # left = arr.shift
36
+ # right = arr.shift
37
+ # node&.left = left && TreeNode.new(left)
38
+ # node&.right = right && TreeNode.new(right)
39
+ # queue.push(node&.left, node&.right)
40
+ # end
41
+ # root
42
+ # end
43
+ end
44
+
45
+ def createTree(arr)
46
+ root = TreeNode.new(arr.shift)
47
+ queue = [root]
48
+ until arr.empty?
49
+ node = queue.shift
50
+ left = arr.shift
51
+ right = arr.shift
52
+ node&.left = left && TreeNode.new(left)
53
+ node&.right = right && TreeNode.new(right)
54
+ queue.push(node&.left, node&.right)
55
+ end
56
+ root
57
+ end
58
+
59
+ def displayTree(arr)
60
+ createTree(arr).to_s
61
+ end
62
+
63
+ # puts TreeNode.createTree([1,2,3,4,5,6,7]).height # 3
64
+ # puts TreeNode.createTree([1,2,3,4,5,6,7])
65
+ # # 1
66
+ # # 2 3
67
+ # # 4 5 6 7
68
+ # # #<TreeNode:0x000055ae4b5461a0>
69
+
70
+ # puts (TreeNode.createTree([1,2,2,nil,3,3]))
71
+ # # 1
72
+ # # 2 2
73
+ # # _ 3 3 _
74
+ # # #<TreeNode:0x000055ae4b5457c8>
@@ -0,0 +1,3 @@
1
+ module Lander
2
+ VERSION = "0.1.0"
3
+ end
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lander
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Julius Zerwick
8
+ - Ying Chyi Gooi, Nick Johnson
9
+ autorequire:
10
+ bindir: exe
11
+ cert_chain: []
12
+ date: 2019-01-20 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.17'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.17'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '10.0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '10.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: minitest
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '5.0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '5.0'
56
+ description: Visually displays data structures to make solving coding challenges easier.
57
+ email:
58
+ - jrzerwick@gmail.com
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - lib/lander.rb
64
+ - lib/lander/array_with_pointers.rb
65
+ - lib/lander/list_node.rb
66
+ - lib/lander/tree_node.rb
67
+ - lib/lander/version.rb
68
+ homepage: https://github.com/spacecraft-repl/lander
69
+ licenses:
70
+ - MIT
71
+ metadata:
72
+ allowed_push_host: https://rubygems.org
73
+ homepage_uri: https://github.com/spacecraft-repl/lander
74
+ source_code_uri: https://github.com/spacecraft-repl/lander
75
+ changelog_uri: https://github.com/spacecraft-repl/lander/blob/master/CHANGELOG.md
76
+ bug_tracker_uri: https://github.com/spacecraft-repl/lander/issues
77
+ post_install_message:
78
+ rdoc_options: []
79
+ require_paths:
80
+ - lib
81
+ required_ruby_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ requirements: []
92
+ rubyforge_project:
93
+ rubygems_version: 2.5.1
94
+ signing_key:
95
+ specification_version: 4
96
+ summary: Visually displays data structures to make solving coding challenges easier.
97
+ test_files: []