hanoi-jane 0.2.2 → 0.2.3
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 +4 -4
- data/lib/hanoi/jane/cli.rb +6 -1
- data/lib/hanoi/jane/formatters/console.rb +41 -13
- data/lib/hanoi/jane/towers.rb +2 -0
- data/lib/hanoi/jane/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6784220653ef2903d69fca3be4290dffb8b02c10
|
4
|
+
data.tar.gz: 9da04a7d95acdd741ec597ecb7dfa49cac7dd263
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ff0d22b64d36b613ed87957586fb24a1282443787b2ea632285f46382c02984b8e18c394a9fa8570bbc03548052528821cad8f076048f003e851c5ea0c8940e
|
7
|
+
data.tar.gz: b4732d47a93152b5939490fffebddace62fd89703374f6b238465914abc581b8a05613b95710247638ff60ba5ab1efad3f930c2542ddf4be25bd58f81a5a7902
|
data/lib/hanoi/jane/cli.rb
CHANGED
@@ -29,6 +29,7 @@ module Hanoi
|
|
29
29
|
desc 'console', 'Solve the towers on the console'
|
30
30
|
option :discs, type: :numeric, default: 3, minimum: 1
|
31
31
|
option :constrained, type: :boolean
|
32
|
+
option :fancy, type: :boolean, default: false
|
32
33
|
def console
|
33
34
|
if options[:discs] < 1
|
34
35
|
puts "Solving for %d discs makes no sense" % options[:discs]
|
@@ -36,13 +37,17 @@ module Hanoi
|
|
36
37
|
end
|
37
38
|
|
38
39
|
towers = Towers.new options[:discs]
|
40
|
+
|
39
41
|
if options[:constrained]
|
40
42
|
towers = ConstrainedTowers.new options[:discs]
|
41
43
|
end
|
42
44
|
|
45
|
+
towers.fancy = options[:fancy]
|
46
|
+
|
43
47
|
towers.each do |state|
|
44
48
|
system('clear')
|
45
|
-
|
49
|
+
s = options[:fancy] ? (Formatters::Console.fancify state.rebased) : state.rebased
|
50
|
+
puts s
|
46
51
|
puts
|
47
52
|
puts state.console
|
48
53
|
sleep 0.2
|
@@ -2,41 +2,64 @@ module Hanoi
|
|
2
2
|
module Jane
|
3
3
|
module Formatters
|
4
4
|
class Console
|
5
|
+
CHARS = {
|
6
|
+
space: ' ',
|
7
|
+
disc: 'o',
|
8
|
+
pole: '|',
|
9
|
+
vert_divider: '|',
|
10
|
+
horiz_divider: '-'
|
11
|
+
}
|
12
|
+
|
13
|
+
FANCY_CHARS = {
|
14
|
+
space: ' ',
|
15
|
+
disc: '🎾',
|
16
|
+
pole: '💈',
|
17
|
+
vert_divider: '🔺',
|
18
|
+
horiz_divider: '🔻'
|
19
|
+
}
|
20
|
+
|
5
21
|
def initialize towers
|
6
22
|
@discs = towers.discs
|
7
23
|
@stacks = towers.stacks.clone.map { |s| s.clone }
|
24
|
+
@@chars = towers.fancy ? FANCY_CHARS : CHARS
|
8
25
|
end
|
9
26
|
|
10
27
|
def to_s
|
11
28
|
s = ''
|
12
|
-
|
13
|
-
|
14
|
-
|
29
|
+
joiner = @@chars[:space]
|
30
|
+
|
31
|
+
(Console.rotate @stacks.map { |s| (Console.pad s, @discs).reverse }).each_with_index do |stack, i|
|
32
|
+
joiner = @@chars[:vert_divider] if i == @discs
|
33
|
+
|
34
|
+
s += "%s%s%s\n" % [
|
35
|
+
joiner,
|
36
|
+
stack.map { |s| Console.make_disc s, (Console.scale @discs) }.join(joiner),
|
37
|
+
joiner
|
38
|
+
]
|
39
|
+
|
15
40
|
end
|
16
41
|
|
17
|
-
s
|
42
|
+
s += "%s\n" % [@@chars[:horiz_divider] * (4 + (Console.scale @discs) * 3)]
|
18
43
|
end
|
19
44
|
|
20
45
|
def Console.pad array, length
|
21
|
-
|
22
|
-
array.push nil
|
23
|
-
end
|
24
|
-
|
25
|
-
array.reverse
|
46
|
+
Array.new(length + 1 - array.length) + array.reverse
|
26
47
|
end
|
27
48
|
|
28
|
-
def Console.make_disc width, space
|
49
|
+
def Console.make_disc width, space
|
50
|
+
char = @@chars[:disc]
|
29
51
|
unless width
|
30
|
-
|
52
|
+
width = 0
|
53
|
+
char = @@chars[:pole]
|
31
54
|
end
|
32
55
|
|
33
56
|
count = Console.scale width
|
34
57
|
padding = (space - count) / 2
|
35
58
|
|
36
59
|
'%s%s%s' % [
|
37
|
-
|
60
|
+
@@chars[:space] * padding,
|
38
61
|
char * count,
|
39
|
-
|
62
|
+
@@chars[:space] * padding
|
40
63
|
]
|
41
64
|
end
|
42
65
|
|
@@ -47,6 +70,11 @@ module Hanoi
|
|
47
70
|
def Console.rotate stacks
|
48
71
|
stacks.map { |s| s.clone }.transpose.reverse
|
49
72
|
end
|
73
|
+
|
74
|
+
def Console.fancify number
|
75
|
+
fancy_digits = '012'
|
76
|
+
number.chars.map { |d| fancy_digits[d] }.join ' '
|
77
|
+
end
|
50
78
|
end
|
51
79
|
end
|
52
80
|
end
|
data/lib/hanoi/jane/towers.rb
CHANGED
@@ -4,12 +4,14 @@ module Hanoi
|
|
4
4
|
include Enumerable
|
5
5
|
|
6
6
|
attr_reader :total, :stacks, :discs
|
7
|
+
attr_accessor :fancy
|
7
8
|
|
8
9
|
def initialize discs
|
9
10
|
@discs = discs
|
10
11
|
@total = 0
|
11
12
|
@base = 2
|
12
13
|
@stacks = [(0...discs).to_a.reverse, [], []]
|
14
|
+
@fancy = false
|
13
15
|
end
|
14
16
|
|
15
17
|
def move
|
data/lib/hanoi/jane/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hanoi-jane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- pikesley
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-01-
|
11
|
+
date: 2018-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|