mastermind-cli 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/Gemfile +4 -0
- data/Gemfile.lock +18 -0
- data/bin/mastermind +7 -0
- data/lib/mastermind.rb +9 -0
- data/lib/mastermind/code_generator.rb +10 -0
- data/lib/mastermind/console.rb +56 -0
- data/lib/mastermind/game.rb +112 -0
- data/spec/mastermind/code_generator_spec.rb +19 -0
- data/spec/mastermind/game_spec.rb +121 -0
- data/spec/mastermind_spec.rb +107 -0
- data/spec/spec_helper.rb +2 -0
- metadata +77 -0
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
GEM
|
|
2
|
+
remote: https://rubygems.org/
|
|
3
|
+
specs:
|
|
4
|
+
diff-lcs (1.1.3)
|
|
5
|
+
rspec (2.10.0)
|
|
6
|
+
rspec-core (~> 2.10.0)
|
|
7
|
+
rspec-expectations (~> 2.10.0)
|
|
8
|
+
rspec-mocks (~> 2.10.0)
|
|
9
|
+
rspec-core (2.10.1)
|
|
10
|
+
rspec-expectations (2.10.0)
|
|
11
|
+
diff-lcs (~> 1.1.3)
|
|
12
|
+
rspec-mocks (2.10.1)
|
|
13
|
+
|
|
14
|
+
PLATFORMS
|
|
15
|
+
ruby
|
|
16
|
+
|
|
17
|
+
DEPENDENCIES
|
|
18
|
+
rspec
|
data/bin/mastermind
ADDED
data/lib/mastermind.rb
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
module Mastermind
|
|
5
|
+
class ConsoleInterface
|
|
6
|
+
def initialize(input, output)
|
|
7
|
+
@input = input
|
|
8
|
+
@output = output
|
|
9
|
+
@spiel = Game.new(startup())
|
|
10
|
+
end
|
|
11
|
+
def run()
|
|
12
|
+
|
|
13
|
+
ausgabe()
|
|
14
|
+
gewonnen()
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def ausgabe
|
|
18
|
+
zaehler = 1
|
|
19
|
+
while @spiel.gewonnen? == false
|
|
20
|
+
@output.print "Versuch #{zaehler}: "
|
|
21
|
+
eingabe = @input.gets
|
|
22
|
+
begin
|
|
23
|
+
@spiel.neuer_versuch(eingabe.strip)
|
|
24
|
+
zaehler += 1
|
|
25
|
+
@output.puts "==>> #{@spiel.letzte_wertung.join(',')}"
|
|
26
|
+
rescue Exception => e
|
|
27
|
+
@output.puts e.message
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def startup
|
|
33
|
+
@output.puts "Willkommen bei Mastermind!"
|
|
34
|
+
@output.puts "---"
|
|
35
|
+
@output.puts "Wollen Sie den Lösungscode automatisch generieren? y/n"
|
|
36
|
+
if @input.gets.strip == "y"
|
|
37
|
+
b = CodeGenerator.generate
|
|
38
|
+
else
|
|
39
|
+
@output.puts "Ihre Eingabe:"
|
|
40
|
+
b = @input.gets
|
|
41
|
+
end
|
|
42
|
+
@output.puts "Versuchen Sie nun den vierstelligen Code zu erraten! abcdef steht zur Verfügung. W entspricht der Anzahl richtiger Buchstaben am falschen Ort. S entspricht der Anzahl richtiger Buchstaben"
|
|
43
|
+
b.downcase!
|
|
44
|
+
b.strip
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def gewonnen
|
|
48
|
+
@output.puts "Gratulation sie haben gewonnen!!"
|
|
49
|
+
@output.puts "Wollen sie ein neues spiel starten? y"
|
|
50
|
+
if @input.gets == "y"
|
|
51
|
+
startup()
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Mastermind
|
|
4
|
+
class Game
|
|
5
|
+
|
|
6
|
+
def initialize(loesungsfolge)
|
|
7
|
+
codefolge_laenge_pruefen(loesungsfolge)
|
|
8
|
+
codefolge_zeichen_pruefen(loesungsfolge)
|
|
9
|
+
@letzterversuch = []
|
|
10
|
+
@loesungsfolge = loesungsfolge
|
|
11
|
+
@history = []
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def neuer_versuch(codefolge)
|
|
15
|
+
codefolge_laenge_pruefen(codefolge)
|
|
16
|
+
codefolge_zeichen_pruefen(codefolge)
|
|
17
|
+
|
|
18
|
+
@letzterversuch = pruefen(codefolge)
|
|
19
|
+
@history << codefolge
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def codefolge_laenge_pruefen(codefolge)
|
|
23
|
+
if codefolge.length > 4
|
|
24
|
+
raise ArgumentError, "Der Code '#{codefolge.strip}' ist nicht 4 Zeichen lang"
|
|
25
|
+
end
|
|
26
|
+
if codefolge.length < 4
|
|
27
|
+
raise ArgumentError, "Der Code '#{codefolge.strip}' ist nicht 4 Zeichen lang"
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private :codefolge_laenge_pruefen
|
|
32
|
+
|
|
33
|
+
def codefolge_zeichen_pruefen(codefolge)
|
|
34
|
+
unless codefolge =~ /^[abcdef]+$/
|
|
35
|
+
raise ArgumentError, "Der Code '#{codefolge.strip}' enthält ungültige Zeichen"
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
private :codefolge_zeichen_pruefen
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def letzte_wertung
|
|
42
|
+
@letzterversuch
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def versuche
|
|
46
|
+
@history
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def pruefen(loesung)
|
|
50
|
+
test = CodePreufung.new(@loesungsfolge, loesung.strip)
|
|
51
|
+
test.weisseminusschwarze
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def gewonnen?
|
|
55
|
+
@letzterversuch == ['s', 's', 's', 's']
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
class CodePreufung
|
|
60
|
+
|
|
61
|
+
def initialize(loesungsfolge, testfolge)
|
|
62
|
+
@loesungsfolge = codezuarray(loesungsfolge)
|
|
63
|
+
@testfolge = codezuarray(testfolge)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def codezuarray(y)
|
|
67
|
+
y.chars.to_a
|
|
68
|
+
end
|
|
69
|
+
private :codezuarray
|
|
70
|
+
|
|
71
|
+
def weisseminusschwarze
|
|
72
|
+
resultat = []
|
|
73
|
+
weiss = falscher_ort_richtige_farbe()
|
|
74
|
+
schwarz = richtiger_ort_richtige_farbe()
|
|
75
|
+
|
|
76
|
+
resultat += ["w"] * weiss
|
|
77
|
+
resultat += ["s"] * schwarz
|
|
78
|
+
resultat
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def falscher_ort_richtige_farbe
|
|
82
|
+
richtige_farbe - richtiger_ort_richtige_farbe
|
|
83
|
+
end
|
|
84
|
+
private :falscher_ort_richtige_farbe
|
|
85
|
+
|
|
86
|
+
def richtige_farbe
|
|
87
|
+
vorhandene_zeichen = @loesungsfolge.each_with_object(Hash.new(0)) do |zeichen, hash|
|
|
88
|
+
hash[zeichen] += 1
|
|
89
|
+
end
|
|
90
|
+
anzahl = 0
|
|
91
|
+
@testfolge.each do |zeichen|
|
|
92
|
+
if vorhandene_zeichen[zeichen] > 0
|
|
93
|
+
vorhandene_zeichen[zeichen] -= 1
|
|
94
|
+
anzahl += 1
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
anzahl
|
|
98
|
+
end
|
|
99
|
+
private :richtige_farbe
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def richtiger_ort_richtige_farbe
|
|
103
|
+
result = 0
|
|
104
|
+
@testfolge.each_with_index do |b, index|
|
|
105
|
+
result += 1 if @loesungsfolge.include?(b) && @loesungsfolge[index] == b
|
|
106
|
+
end
|
|
107
|
+
result
|
|
108
|
+
end
|
|
109
|
+
private :richtiger_ort_richtige_farbe
|
|
110
|
+
|
|
111
|
+
end
|
|
112
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Mastermind::CodeGenerator do
|
|
4
|
+
|
|
5
|
+
it 'Der Code ist ein String' do
|
|
6
|
+
Mastermind::CodeGenerator.generate.should be_kind_of(String)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
it 'generiert einen 4-stelligen Code' do
|
|
11
|
+
Mastermind::CodeGenerator.generate.size.should == 4
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it 'Jeder Code ist anders' do
|
|
15
|
+
Mastermind::CodeGenerator.generate.should_not == Mastermind::CodeGenerator.generate
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'spec_helper'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
describe Mastermind::Game do
|
|
6
|
+
|
|
7
|
+
describe 'Eingabeprüfung: ' do
|
|
8
|
+
it 'der Schlüsselcode ist auf 4 Zeichen beschränk' do
|
|
9
|
+
lambda do
|
|
10
|
+
Mastermind::Game.new('aaaaa')
|
|
11
|
+
end.should raise_error(ArgumentError, "Der Code 'aaaaa' ist nicht 4 Zeichen lang")
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it 'der Schlüsselcode ist auf 4 Zeichen beschränk und nicht kürzer' do
|
|
15
|
+
lambda do
|
|
16
|
+
Mastermind::Game.new('aaa')
|
|
17
|
+
end.should raise_error(ArgumentError, "Der Code 'aaa' ist nicht 4 Zeichen lang")
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'Die Versuche des Benutzers sind 4 Zeichen lang' do
|
|
21
|
+
spiel = Mastermind::Game.new('aaaa')
|
|
22
|
+
lambda do
|
|
23
|
+
spiel.neuer_versuch('aaaaa')
|
|
24
|
+
end.should raise_error(ArgumentError, "Der Code 'aaaaa' ist nicht 4 Zeichen lang")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'Die Versuche des Benutzers sind 4 Zeichen lang und nicht kürzer' do
|
|
28
|
+
spiel = Mastermind::Game.new('aaaa')
|
|
29
|
+
lambda do
|
|
30
|
+
spiel.neuer_versuch('aaa')
|
|
31
|
+
end.should raise_error(ArgumentError, "Der Code 'aaa' ist nicht 4 Zeichen lang")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'der Schlüsselcode darf nur die Zeichen a,b,c,d und f enthalten' do
|
|
35
|
+
lambda do
|
|
36
|
+
Mastermind::Game.new('abcx')
|
|
37
|
+
end.should raise_error(ArgumentError, "Der Code 'abcx' enthält ungültige Zeichen")
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
it 'Die Versuche des Benutzers dürfen nur die Zeichen a,b,c,d und f enthalten' do
|
|
42
|
+
spiel = Mastermind::Game.new('aaaa')
|
|
43
|
+
lambda do
|
|
44
|
+
spiel.neuer_versuch('abcx')
|
|
45
|
+
end.should raise_error(ArgumentError, "Der Code 'abcx' enthält ungültige Zeichen")
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
describe 'Logik: ' do
|
|
50
|
+
it 'Ein neues Spiel ist nicht gewonnen' do
|
|
51
|
+
Mastermind::Game.new('aaaa').gewonnen?.should == false
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it 'Gibt einen weissen Pin für die Richtige Farbe am falschen Ort' do
|
|
55
|
+
spiel = Mastermind::Game.new('abcf')
|
|
56
|
+
spiel.neuer_versuch('feee')
|
|
57
|
+
spiel.letzte_wertung.should == ['w']
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it 'Gibt einen schwarzen Pin für die Richtige Farbe am richtigen Ort' do
|
|
61
|
+
spiel = Mastermind::Game.new('abcf')
|
|
62
|
+
spiel.neuer_versuch('eeef')
|
|
63
|
+
spiel.letzte_wertung.should == ['s']
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it 'Wertet Zeichen nur doppelt, wenn diese auch doppelt in der Lösung vorhanden sind' do
|
|
67
|
+
spiel = Mastermind::Game.new('abbb')
|
|
68
|
+
spiel.neuer_versuch('aaaa')
|
|
69
|
+
spiel.letzte_wertung.should == ['s']
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it 'Die Versuche werden aufgezeichnet' do
|
|
73
|
+
spiel = Mastermind::Game.new('abbb')
|
|
74
|
+
spiel.neuer_versuch('aaaa')
|
|
75
|
+
spiel.neuer_versuch('bbbb')
|
|
76
|
+
spiel.neuer_versuch('cccc')
|
|
77
|
+
spiel.neuer_versuch('dddd')
|
|
78
|
+
spiel.versuche.should == ['aaaa', 'bbbb', 'cccc', 'dddd']
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
context 'zwei richtige Farben am falschen Ort' do
|
|
82
|
+
subject { Mastermind::Game.new('abcf') }
|
|
83
|
+
before { subject.neuer_versuch('cefe') }
|
|
84
|
+
|
|
85
|
+
it 'Das Spiel ist nicht gewonnen' do
|
|
86
|
+
subject.gewonnen?.should == false
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it 'Gibt zwei weisse Pins' do
|
|
90
|
+
subject.letzte_wertung.should == ['w', 'w']
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
context 'eine richtige Farbe am falschen Ort und zwei am richtigen Ort' do
|
|
95
|
+
subject { Mastermind::Game.new('abcf') }
|
|
96
|
+
before { subject.neuer_versuch('abfd') }
|
|
97
|
+
|
|
98
|
+
it 'Das Spiel ist nicht gewonnen' do
|
|
99
|
+
subject.gewonnen?.should == false
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it 'Gibt einen weissen Pin und zwei shwarze' do
|
|
103
|
+
subject.letzte_wertung.should == ['w', 's', 's']
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
context 'alle Pins sind korrekt' do
|
|
108
|
+
subject { Mastermind::Game.new('abcf') }
|
|
109
|
+
before { subject.neuer_versuch('abcf') }
|
|
110
|
+
|
|
111
|
+
it 'Das Spiel ist gewonnen' do
|
|
112
|
+
subject.gewonnen?.should == true
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
it 'Gibt 4 schwarze Pins' do
|
|
116
|
+
subject.letzte_wertung.should == ['s', 's', 's', 's']
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
end
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'spec_helper'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
describe Mastermind::Game do
|
|
6
|
+
|
|
7
|
+
describe 'Eingabeprüfung: ' do
|
|
8
|
+
it 'der Schlüsselcode ist auf 4 Zeichen beschränk' do
|
|
9
|
+
lambda do
|
|
10
|
+
Mastermind::Game.new('aaaaa')
|
|
11
|
+
end.should raise_error(ArgumentError, "Der Code 'aaaaa' ist nicht 4 Zeichen lang")
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it 'Die Versuche des Benutzers sind 4 Zeichen lang' do
|
|
15
|
+
spiel = Mastermind::Game.new('aaaa')
|
|
16
|
+
lambda do
|
|
17
|
+
spiel.neuer_versuch('aaaaa')
|
|
18
|
+
end.should raise_error(ArgumentError, "Der Code 'aaaaa' ist nicht 4 Zeichen lang")
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'der Schlüsselcode darf nur die Zeichen a,b,c,d und f enthalten' do
|
|
22
|
+
lambda do
|
|
23
|
+
Mastermind::Game.new('abcx')
|
|
24
|
+
end.should raise_error(ArgumentError, "Der Code 'abcx' enthält ungültige Zeichen")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'Die Versuche des Benutzers dürfen nur die Zeichen a,b,c,d und f enthalten' do
|
|
28
|
+
spiel = Mastermind::Game.new('aaaa')
|
|
29
|
+
lambda do
|
|
30
|
+
spiel.neuer_versuch('abcx')
|
|
31
|
+
end.should raise_error(ArgumentError, "Der Code 'abcx' enthält ungültige Zeichen")
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe 'Logik: ' do
|
|
36
|
+
it 'Ein neues Spiel ist nicht gewonnen' do
|
|
37
|
+
Mastermind::Game.new('aaaa').gewonnen?.should == false
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'Gibt einen weissen Pin für die Richtige Farbe am falschen Ort' do
|
|
41
|
+
spiel = Mastermind::Game.new('abcf')
|
|
42
|
+
spiel.neuer_versuch('feee')
|
|
43
|
+
spiel.letzte_wertung.should == ['w']
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'Gibt einen schwarzen Pin für die Richtige Farbe am richtigen Ort' do
|
|
47
|
+
spiel = Mastermind::Game.new('abcf')
|
|
48
|
+
spiel.neuer_versuch('eeef')
|
|
49
|
+
spiel.letzte_wertung.should == ['s']
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'Wertet Zeichen nur doppelt, wenn diese auch doppelt in der Lösung vorhanden sind' do
|
|
53
|
+
spiel = Mastermind::Game.new('abbb')
|
|
54
|
+
spiel.neuer_versuch('aaaa')
|
|
55
|
+
spiel.letzte_wertung.should == ['s']
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it 'Die Versuche werden aufgezeichnet' do
|
|
59
|
+
spiel = Mastermind::Game.new('abbb')
|
|
60
|
+
spiel.neuer_versuch('aaaa')
|
|
61
|
+
spiel.neuer_versuch('bbbb')
|
|
62
|
+
spiel.neuer_versuch('cccc')
|
|
63
|
+
spiel.neuer_versuch('dddd')
|
|
64
|
+
spiel.versuche.should == ['aaaa', 'bbbb', 'cccc', 'dddd']
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
context 'zwei richtige Farben am falschen Ort' do
|
|
68
|
+
subject { Mastermind::Game.new('abcf') }
|
|
69
|
+
before { subject.neuer_versuch('cefe') }
|
|
70
|
+
|
|
71
|
+
it 'Das Spiel ist nicht gewonnen' do
|
|
72
|
+
subject.gewonnen?.should == false
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it 'Gibt zwei weisse Pins' do
|
|
76
|
+
subject.letzte_wertung.should == ['w', 'w']
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
context 'eine richtige Farbe am falschen Ort und zwei am richtigen Ort' do
|
|
81
|
+
subject { Mastermind::Game.new('abcf') }
|
|
82
|
+
before { subject.neuer_versuch('abfd') }
|
|
83
|
+
|
|
84
|
+
it 'Das Spiel ist nicht gewonnen' do
|
|
85
|
+
subject.gewonnen?.should == false
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it 'Gibt einen weissen Pin und zwei shwarze' do
|
|
89
|
+
subject.letzte_wertung.should == ['w', 's', 's']
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
context 'alle Pins sind korrekt' do
|
|
94
|
+
subject { Mastermind::Game.new('abcf') }
|
|
95
|
+
before { subject.neuer_versuch('abcf') }
|
|
96
|
+
|
|
97
|
+
it 'Das Spiel ist gewonnen' do
|
|
98
|
+
subject.gewonnen?.should == true
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it 'Gibt 4 schwarze Pins' do
|
|
102
|
+
subject.letzte_wertung.should == ['s', 's', 's', 's']
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: mastermind-cli
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Marcel Portillo
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2012-06-20 00:00:00.000000000 Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: rspec
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
17
|
+
none: false
|
|
18
|
+
requirements:
|
|
19
|
+
- - ~>
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '2.3'
|
|
22
|
+
type: :development
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
none: false
|
|
26
|
+
requirements:
|
|
27
|
+
- - ~>
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: '2.3'
|
|
30
|
+
description: Mastermind
|
|
31
|
+
email:
|
|
32
|
+
executables:
|
|
33
|
+
- mastermind
|
|
34
|
+
extensions: []
|
|
35
|
+
extra_rdoc_files: []
|
|
36
|
+
files:
|
|
37
|
+
- Gemfile
|
|
38
|
+
- Gemfile.lock
|
|
39
|
+
- bin/mastermind
|
|
40
|
+
- lib/mastermind.rb
|
|
41
|
+
- lib/mastermind/code_generator.rb
|
|
42
|
+
- lib/mastermind/console.rb
|
|
43
|
+
- lib/mastermind/game.rb
|
|
44
|
+
- spec/mastermind/code_generator_spec.rb
|
|
45
|
+
- spec/mastermind/game_spec.rb
|
|
46
|
+
- spec/mastermind_spec.rb
|
|
47
|
+
- spec/spec_helper.rb
|
|
48
|
+
homepage:
|
|
49
|
+
licenses: []
|
|
50
|
+
post_install_message:
|
|
51
|
+
rdoc_options:
|
|
52
|
+
- --charset=UTF-8
|
|
53
|
+
require_paths:
|
|
54
|
+
- lib
|
|
55
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
56
|
+
none: false
|
|
57
|
+
requirements:
|
|
58
|
+
- - ! '>='
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '0'
|
|
61
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
62
|
+
none: false
|
|
63
|
+
requirements:
|
|
64
|
+
- - ! '>='
|
|
65
|
+
- !ruby/object:Gem::Version
|
|
66
|
+
version: '0'
|
|
67
|
+
requirements: []
|
|
68
|
+
rubyforge_project:
|
|
69
|
+
rubygems_version: 1.8.24
|
|
70
|
+
signing_key:
|
|
71
|
+
specification_version: 3
|
|
72
|
+
summary: Mastermind
|
|
73
|
+
test_files:
|
|
74
|
+
- spec/mastermind/code_generator_spec.rb
|
|
75
|
+
- spec/mastermind/game_spec.rb
|
|
76
|
+
- spec/mastermind_spec.rb
|
|
77
|
+
- spec/spec_helper.rb
|