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.
- checksums.yaml +7 -0
- data/lib/lander.rb +23 -0
- data/lib/lander/array_with_pointers.rb +46 -0
- data/lib/lander/list_node.rb +13 -0
- data/lib/lander/tree_node.rb +74 -0
- data/lib/lander/version.rb +3 -0
- metadata +97 -0
checksums.yaml
ADDED
|
@@ -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
|
data/lib/lander.rb
ADDED
|
@@ -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>
|
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: []
|