manasimu 0.0.13 → 0.0.16

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 15aafb1d5f12798204ce6bc38d36acbc1ab98937f7ff4f25ee43eb46bfde71e9
4
- data.tar.gz: cd22e5a0e1773ae2a1d2ebdfde87665a187c57fde927cf22ef950e4888a9568b
3
+ metadata.gz: 3343e9db3fa8daa5303ccd50b555a5d5d25bd961d20c5392a8d526e8a78f425e
4
+ data.tar.gz: ddc59e45c459dfcd2cebb65d8104d0d25ac91a04bcb6ab387c0cd8bf285da24e
5
5
  SHA512:
6
- metadata.gz: c74b8a9b11f5fb2194b2338923e5b2a765f1f9e60110397ecbdd82d2f34aba61f5b8b1024ba94bdd4b3ffef66a961d179dcc458e1736bec8865aafd3cb320c86
7
- data.tar.gz: 8015c756b8f118a6df781c50239f5364efd63f026611a84621bf50f83d1fe248a0c6c2f4bce56a0f1fea58909c8f97afec3164ee75e3c99c4d1379cee1171f8f
6
+ metadata.gz: 67d7fb4abda302154d59c4de1e756c32c6b762a0d80c5fd7ce4c16fd6e3190509684796f8ee5a0c466066b1e32eba3f443366624909a2e0a2994ce4ceec9d65a
7
+ data.tar.gz: 2a8c4ec688061b5d55ae4c2d8c2832089975c55b9993b08edd1d795292e9312fba52a54232cf861291d55ccbb06c5da075217a9462d6feafeda62b998adcd959
Binary file
@@ -0,0 +1,3 @@
1
+ class BasicLandCard < Card
2
+
3
+ end
@@ -15,11 +15,12 @@ class PathwayCard < Card
15
15
  end
16
16
  end
17
17
 
18
- def color_identity
18
+ def mana_source
19
19
  if @side
20
20
  [@symbol]
21
21
  else
22
22
  @card_type.color_identity
23
23
  end
24
24
  end
25
+
25
26
  end
@@ -1,6 +1,7 @@
1
1
  class SlowLandCard < Card
2
2
 
3
- def resolve(side, hands, plays)
3
+ def resolve(side, hands, plays, deck)
4
+ super(side, hands, plays, deck)
4
5
  num = 0
5
6
  for card in plays do
6
7
  next if card == self
@@ -15,7 +16,8 @@ class SlowLandCard < Card
15
16
  end
16
17
  end
17
18
 
18
- def step(turn)
19
+ def step_in_plays(turn)
20
+ super(turn)
19
21
  @tapped = false
20
22
  end
21
23
 
@@ -24,6 +26,7 @@ class SlowLandCard < Card
24
26
  end
25
27
 
26
28
  def reset
29
+ super
27
30
  @tapped = false
28
31
  end
29
32
  end
@@ -0,0 +1,55 @@
1
+ class SncFetchLandCard < TapLandCard
2
+
3
+ def resolve(side, hands, plays, deck)
4
+ super(side, hands, plays, deck)
5
+ return @fetch_source if @fetch_source
6
+ @tapped = true
7
+ if deck
8
+ @fetches = deck
9
+ .select { |card| card.instance_of? BasicLandCard }
10
+ .select { |card| @mana_source.include? card.mana_source[0] }
11
+ .uniq { |card| card.card_type }
12
+ @deck = deck
13
+ @fetch_source = @fetches.map { |card| card.mana_source }.flatten.uniq
14
+ else
15
+ @fetches = []
16
+ @fetch_source = []
17
+ end
18
+ end
19
+
20
+ def first_produce_symbol=(color)
21
+ super(color)
22
+ basic_land = @fetches.select {|card| @mana_source.include? color}.first
23
+ if @deck and basic_land
24
+ @deck.delete basic_land
25
+ @deck.shuffle!
26
+ @fetch_source = [color]
27
+ @fetches = [basic_land]
28
+ else
29
+ []
30
+ end
31
+ @fetched = true
32
+ end
33
+
34
+ def mana_source
35
+ raise Exception.new('you should resolve first') if not @fetch_source
36
+ @fetch_source
37
+ end
38
+
39
+ def configure
40
+ mana_types = ManaType.search_text_by_land_type(card_type.text)
41
+ @mana_source = mana_types.map {|mana_type| mana_type.color}.flatten.uniq
42
+ @fetched = false
43
+ self
44
+ end
45
+
46
+ def reset
47
+ super
48
+ @fetched = false
49
+ @fetch_source = nil
50
+ end
51
+
52
+ def mana_produced?
53
+ @fetched
54
+ end
55
+ end
@@ -4,15 +4,18 @@ class TapLandCard < Card
4
4
  @tapped
5
5
  end
6
6
 
7
- def resolve(side, hands, plays)
7
+ def resolve(side, hands, plays, deck)
8
+ super(side, hands, plays, deck)
8
9
  @tapped = true
9
10
  end
10
11
 
11
- def step(turn)
12
+ def step_in_plays(turn)
13
+ super(turn)
12
14
  @tapped = false
13
15
  end
14
16
 
15
17
  def reset
18
+ super
16
19
  @tapped = false
17
20
  end
18
21
  end
data/lib/manasimu/card.rb CHANGED
@@ -6,11 +6,18 @@ class Card
6
6
  @playable = false
7
7
  end
8
8
 
9
- def step(turn)
10
- @card_type.step(turn - 1, self)
9
+ def configure
10
+ end
11
+
12
+ def step_in_hands(turn)
13
+ @card_type.step_in_hands(turn, self)
11
14
  @can_play = false
12
15
  end
13
16
 
17
+ def step_in_plays(turn)
18
+ @card_type.step_in_plays(turn, self)
19
+ end
20
+
14
21
  def drawed(turn)
15
22
  @drawed = turn
16
23
  @card_type.drawed(turn)
@@ -19,10 +26,12 @@ class Card
19
26
  def played(turn, side = "a")
20
27
  @played = turn
21
28
  @side = side
22
- @card_type.played(turn)
29
+ if not is_land? or not tapped?
30
+ @card_type.played(turn)
31
+ end
23
32
  end
24
33
 
25
- def resolve(side = "a", hands, plays)
34
+ def resolve(side = "a", hands, plays, deck)
26
35
  end
27
36
 
28
37
  def played?
@@ -33,6 +42,14 @@ class Card
33
42
  false
34
43
  end
35
44
 
45
+ def mana_source
46
+ @card_type.mana_source
47
+ end
48
+
49
+ def mana_source_size
50
+ @card_type.mana_source_size
51
+ end
52
+
36
53
  def mana_source?
37
54
  @card_type.mana_source?
38
55
  end
@@ -51,8 +68,8 @@ class Card
51
68
  @card_type.types
52
69
  end
53
70
 
54
- def mana
55
- @card_type.mana
71
+ def type
72
+ @card_type.type
56
73
  end
57
74
 
58
75
  def color_identity
@@ -77,7 +94,9 @@ class Card
77
94
 
78
95
  def reset
79
96
  @side = nil
80
- @tapped = nil
97
+ @played = nil
98
+ @drawed = nil
99
+ @can_play = false
81
100
  end
82
101
 
83
102
  def is_land?
@@ -99,13 +118,17 @@ class Card
99
118
  def first_produce_symbol=(symbol)
100
119
  end
101
120
 
121
+ def set_code
122
+ @card_type.set_code
123
+ end
124
+
102
125
  def to_s
103
126
  @card_type.to_s
104
127
  end
105
128
  end
106
129
 
107
130
  class CardType
108
- attr_accessor :contents, :played, :drawed, :name, :can_plays
131
+ attr_accessor :contents, :played, :drawed, :name, :can_plays, :mana_sources
109
132
 
110
133
  def self.create(card_type, name)
111
134
  ret = card_type.dup
@@ -113,6 +136,7 @@ class CardType
113
136
  ret.played = {}
114
137
  ret.drawed = {}
115
138
  ret.can_plays = {}
139
+ ret.mana_sources = {}
116
140
  ret.name = name
117
141
  ret
118
142
  end
@@ -122,6 +146,7 @@ class CardType
122
146
  @played = {}
123
147
  @drawed = {}
124
148
  @can_plays = {}
149
+ @mana_sources = {}
125
150
  @contents = contents.map {|c| Content.new(c)}
126
151
  end
127
152
 
@@ -129,13 +154,24 @@ class CardType
129
154
  @name ||= @contents[0].name
130
155
  end
131
156
 
132
- def step(turn, card)
133
- if turn >= 0 and card.can_play?
157
+ def step_in_hands(turn, card)
158
+ if card.can_play?
134
159
  @can_plays[turn] ||= 0
135
160
  @can_plays[turn] += 1
136
161
  end
137
162
  end
138
163
 
164
+ def step_in_plays(turn, card)
165
+ if card.mana_source? and not card.tapped?
166
+ @mana_sources[turn] ||= {}
167
+ size = card.mana_source.length
168
+ card.mana_source.each do |c|
169
+ @mana_sources[turn][c] ||= 0
170
+ @mana_sources[turn][c] += 1.0 / size
171
+ end
172
+ end
173
+ end
174
+
139
175
  def played(turn)
140
176
  @played[turn] ||= 0
141
177
  @played[turn] += 1
@@ -146,47 +182,63 @@ class CardType
146
182
  @drawed[turn] += 1
147
183
  end
148
184
 
185
+ def mana_source
186
+ @mana_source ||= @contents.map { |c|
187
+ c.color_identity ? c.color_identity.split(',') : []
188
+ }.flatten.uniq
189
+ end
190
+
191
+ def mana_source_size
192
+ (a = mana_source) ? a.size : 0
193
+ end
194
+
149
195
  def mana_source?
150
- @mana_source ||= @contents.any? {|content| content.mana_source?}
196
+ @is_mana_source ||= @contents.any? {|content| content.mana_source?}
151
197
  end
152
198
 
153
- def types
154
- @types ||= @contents.map {|c| c.types}
199
+ def mana_cost
200
+ return @mana_cost if @mana_cost
201
+ spell = @contents.select {|c| c.types != "Land"}.first
202
+ if spell
203
+ @mana_cost = spell.mana_cost
204
+ else
205
+ @mana_cost = '0'
206
+ end
155
207
  end
156
208
 
157
- def mana
158
- @mana ||= @contents.map {|content| content.color_identity }.flatten
209
+ def converted_mana_cost
210
+ @converted_mana_cost ||= @contents.map {|c| c.converted_mana_cost}.min
211
+ end
212
+
213
+ def text
214
+ @text ||= @contents.map {|c| c.text}.flatten.join('')
215
+ end
216
+
217
+ def type
218
+ @type ||= @contents.map {|c| c.type}.flatten.uniq
219
+ end
220
+
221
+ def types
222
+ @types ||= @contents.map {|c| c.types}
159
223
  end
160
224
 
161
225
  def color_identity
162
226
  return @memo_colors if @memo_colors
163
227
  @memo_colors ||= []
164
228
  @contents.each do |c|
165
- c.color_identity.split(",").each do |color|
166
- @memo_colors << color if not @memo_colors.include? color
229
+ if c.color_identity
230
+ c.color_identity.split(",").each do |color|
231
+ @memo_colors << color if not @memo_colors.include? color
232
+ end
167
233
  end
168
234
  end
169
235
  @memo_colors
170
236
  end
171
237
 
172
- def converted_mana_cost
173
- @converted_mana_cost ||= @contents.map {|c| c.converted_mana_cost}.min
174
- end
175
-
176
238
  def color_identity_size
177
239
  color_identity.length
178
240
  end
179
241
 
180
- def mana_cost
181
- return @mana_cost if @mana_cost
182
- spell = @contents.select {|c| c.types != "Land"}.first
183
- if spell
184
- @mana_cost = spell.mana_cost
185
- else
186
- @mana_cost = '0'
187
- end
188
- end
189
-
190
242
  def symbols
191
243
  return @symbols if @symbols
192
244
  @symbols = []
@@ -215,7 +267,12 @@ class CardType
215
267
  converted_mana_cost
216
268
  end
217
269
 
270
+ def set_code
271
+ @contents[0].set_code
272
+ end
273
+
218
274
  def is_land?(side = nil)
275
+ return @is_land if @is_land
219
276
  arr = if side == 'a'
220
277
  [0]
221
278
  elsif side == 'b'
@@ -223,9 +280,10 @@ class CardType
223
280
  else
224
281
  [0,1]
225
282
  end
226
- arr.select do |i|
283
+ @is_land = arr.select do |i|
227
284
  @contents[i] and @contents[i].types == "Land"
228
285
  end.length > 0
286
+ return @is_land
229
287
  end
230
288
 
231
289
  def playable?(lands, capas)
@@ -284,7 +342,7 @@ class CardType
284
342
  # lands and mana_cost connect to each symbols
285
343
  lands.each_with_index do |land, i|
286
344
  next if capas[i].to_i == 0
287
- land_colors = land.color_identity
345
+ land_colors = land.mana_source
288
346
  symbols.each_with_index do |symbol, j|
289
347
  if symbol == "1" or land_colors.include? symbol
290
348
  result << [i + 1, x + 1 + j]
@@ -305,18 +363,23 @@ class CardType
305
363
 
306
364
  def count(turn = nil)
307
365
  turn ||= converted_mana_cost
308
- played = @played [turn] || 0
309
- drawed = 0
366
+ played_count = @played[turn] || 0
367
+ drawed_count = 0
310
368
  (turn+1).times do |i|
311
- drawed += @drawed[i] || 0
369
+ drawed_count += @drawed[i] || 0
312
370
  end
313
- can_played = @can_plays[turn] || 0
314
- [played, drawed, can_played]
371
+ can_played_count = @can_plays[turn] || 0
372
+ mana_sources_count = @mana_sources[turn] || {}
373
+ [played_count, drawed_count, can_played_count, mana_sources_count]
315
374
  end
316
375
 
317
376
  def to_s
318
377
  @contents.map {|c| c.to_s}.join(",")
319
378
  end
379
+
380
+ def to_factory
381
+ @contents.map {|c| c.to_factory}
382
+ end
320
383
  end
321
384
 
322
385
  class CardTypeAggregate
@@ -344,7 +407,7 @@ class CardTypeAggregate
344
407
  end
345
408
 
346
409
  class Content
347
- attr_accessor :name, :number, :side, :set_code, :mana_cost, :types, :color_identity, :converted_mana_cost, :text
410
+ attr_accessor :name, :number, :side, :set_code, :mana_cost, :type, :types, :color_identity, :converted_mana_cost, :text
348
411
 
349
412
  def initialize(hash)
350
413
  @name = hash[:name]
@@ -353,6 +416,7 @@ class Content
353
416
  @set_code = hash[:set_code]
354
417
  @mana_cost = hash[:mana_cost]
355
418
  @types = hash[:types]
419
+ @type = hash[:type]
356
420
  @text = hash[:text]
357
421
  @color_identity = hash[:color_identity]
358
422
  @converted_mana_cost = hash[:converted_mana_cost].to_i
@@ -366,6 +430,23 @@ class Content
366
430
  "[#{@name}] [#{@types}] [#{@color_identity}] [#{@mana_cost}]"
367
431
  end
368
432
 
433
+ def to_factory
434
+ <<EOF
435
+ factory '#{@name.underscore}_content', class: Content do
436
+ name {'#{@name}'}
437
+ number {'#{@number}'}
438
+ side {'#{@side}'}
439
+ set_code { '#{@set_code}'}
440
+ mana_cost { '#{@mana_cost}'}
441
+ type { '#{@type}'}
442
+ types { '#{@types}'}
443
+ text { '#{@text}'}
444
+ color_identity { '#{@color_identity}'}
445
+ converted_mana_cost {#{@converted_mana_cost}}
446
+ end
447
+ EOF
448
+ end
449
+
369
450
  end
370
451
 
371
452
  class FordFulkersonSingleton
data/lib/manasimu/data.rb CHANGED
@@ -70,14 +70,22 @@ class Deck
70
70
  card_type = @@card_types.find(deck_item[:set], deck_item[:setnum])
71
71
  clone = CardType.create(card_type, deck_item[:name])
72
72
  card_types << clone
73
- if clone.name =~ /.*Pathway$/ and clone.mana_source?
74
- card = PathwayCard.new(clone)
75
- elsif clone.is_land? and
76
- clone.contents[0].text =~ /enters the battlefield tapped\./
77
- card = TapLandCard.new(clone)
78
- elsif clone.is_land? and
79
- clone.contents[0].text =~ /enters the battlefield tapped unless you control two or more other lands./
80
- card = SlowLandCard.new(clone)
73
+ if clone.is_land?
74
+ if clone.name =~ /.*Pathway$/
75
+ card = PathwayCard.new(clone)
76
+ elsif clone.contents[0].text =~ /enters the battlefield tapped\./
77
+ card = TapLandCard.new(clone)
78
+ elsif clone.contents[0].text =~ /enters the battlefield tapped unless you control two or more other lands./
79
+ card = SlowLandCard.new(clone)
80
+ elsif clone.set_code == 'SNC' and
81
+ clone.contents[0].text =~ /enters the battlefield, sacrifice it/
82
+ card = SncFetchLandCard.new(clone)
83
+ card.configure
84
+ elsif clone.type[0] =~ /^Basic Land — .*$/
85
+ card = BasicLandCard.new(clone)
86
+ else
87
+ card = Card.new(clone)
88
+ end
81
89
  else
82
90
  card = Card.new(clone)
83
91
  end
data/lib/manasimu/game.rb CHANGED
@@ -1,48 +1,56 @@
1
1
  class Game
2
2
  attr_accessor :hands, :plays, :deck
3
3
 
4
- def initialize(deck)
5
- @deck = deck.shuffle(random: Random.new)
4
+ def initialize(deck, shuffle = true, debugg = false)
5
+ if shuffle
6
+ @deck = deck.shuffle(random: Random.new)
7
+ else
8
+ @deck = deck
9
+ end
6
10
  @deck.each { |card| card.reset }
7
11
  @hands = []
8
12
  @plays = []
9
13
  @planner = Planner.new
14
+ @debugg = debugg
10
15
  7.times { draw(0) }
11
16
  end
12
17
 
13
18
  def step(turn)
14
- # puts "turn #{turn}"
15
- # puts "played"
16
- # @plays.each do |card| puts " #{card}" end
17
- # puts "hands"
18
- # @hands.each do |card| puts " #{card}" end
19
+ if @debugg
20
+ puts "turn #{turn}"
21
+ puts "played"
22
+ @plays.each do |card| puts " #{card}" end
23
+ puts "hands"
24
+ @hands.each do |card| puts " #{card}" end
25
+ end
19
26
 
20
- upkeep(turn)
21
27
  draw(turn)
28
+ play_cards = plan;
29
+ @hands.each { |card| card.step_in_hands(turn) }
22
30
  plan.each do |card|
23
31
  play(card, turn)
24
32
  end
25
- end
26
-
27
- def upkeep(turn)
28
- @hands.each { |card| card.step(turn) }
29
- @plays.each { |card| card.step(turn) }
33
+ @plays.each { |card| card.step_in_plays(turn) }
30
34
  end
31
35
 
32
36
  def draw(turn)
33
37
  card = @deck.pop
34
- # puts "draw #{card}"
38
+ if @debugg
39
+ puts "draw #{card}"
40
+ end
35
41
  card.drawed(turn)
36
42
  @hands << card
37
43
  end
38
44
 
39
45
  def plan
40
- @planner.plan(@hands, @plays)
46
+ @planner.plan(@hands, @plays, @deck)
41
47
  end
42
48
 
43
49
  def play(card, turn)
44
- # puts "play #{card}"
45
- card.resolve(nil, @hands, @plays)
50
+ if @debugg
51
+ puts "play #{card}"
52
+ end
53
+ card.resolve(nil, @hands, @plays, @deck)
46
54
  card.played(turn, nil)
47
55
  @plays << card
48
56
  @hands.delete card
@@ -1,7 +1,55 @@
1
1
  class ManaType
2
- class Red end;
3
- class Blue end;
4
- class Green end;
5
- class White end;
6
- class Black end;
2
+ attr_accessor :color, :land_type
3
+
4
+ def initialize(color, land_type)
5
+ @land_type = land_type
6
+ @color = color
7
+ end
8
+
9
+ def self.all
10
+ r ||= Red.new
11
+ u ||= Blue.new
12
+ g ||= Green.new
13
+ w ||= White.new
14
+ b ||= Black.new
15
+ @@all ||= [r, u, g, w, b]
16
+ end
17
+
18
+ def self.search_text_by_land_type(text)
19
+ self.all.select do |mana_type|
20
+ text.include? mana_type.land_type
21
+ end
22
+ end
23
+
24
+ def self.search_text_by_color(text)
25
+ self.all.select do |mana_type|
26
+ text.include? mana_type.color
27
+ end
28
+ end
29
+
30
+ class Red < ManaType
31
+ def initialize
32
+ super("R", "Mountain")
33
+ end
34
+ end
35
+ class Blue < ManaType
36
+ def initialize
37
+ super("U", "Island")
38
+ end
39
+ end
40
+ class Green < ManaType
41
+ def initialize
42
+ super("G", "Forest")
43
+ end
44
+ end
45
+ class White < ManaType
46
+ def initialize
47
+ super("W", "Plains")
48
+ end
49
+ end
50
+ class Black < ManaType
51
+ def initialize
52
+ super("B", "Swamp")
53
+ end
54
+ end
7
55
  end
@@ -1,6 +1,6 @@
1
1
  class Planner
2
2
 
3
- def plan(hands, fields)
3
+ def plan(hands, fields, deck)
4
4
  lands_in_hand = lands(hands)
5
5
 
6
6
  max_price = 0
@@ -14,11 +14,12 @@ class Planner
14
14
  # dup
15
15
  current_hands = hands.dup
16
16
  current_fields = fields.dup
17
+ current_deck = deck.dup
17
18
 
18
19
  # play the land
19
20
  current_hands.delete play_land
20
21
  current_fields << play_land
21
- play_land.resolve(nil, current_hands, current_fields)
22
+ play_land.resolve(nil, current_hands, current_fields, current_deck)
22
23
 
23
24
  # search_opt_spells
24
25
  price, spells, symbols, lands =
@@ -68,7 +69,7 @@ class Planner
68
69
  end
69
70
 
70
71
  lands.sort! do |a, b|
71
- b.color_identity_size <=> a.color_identity_size
72
+ b.mana_source_size <=> a.mana_source_size
72
73
  end
73
74
 
74
75
  price = 0
@@ -6,7 +6,7 @@ class Simulator
6
6
 
7
7
  def run
8
8
  @config.simulations.times do
9
- game = Game.new(@config.deck)
9
+ game = Game.new(@config.deck, true, @config.debugg)
10
10
  @config.turns.times do |i|
11
11
  turn = i + 1
12
12
  game.step turn
@@ -16,5 +16,8 @@ class Simulator
16
16
  end
17
17
 
18
18
  class SimulatorConfig
19
- attr_accessor :simulations, :turns, :deck
19
+ attr_accessor :simulations, :turns, :deck, :debugg
20
+ def initialize
21
+ @debugg = false
22
+ end
20
23
  end
data/lib/manasimu.rb CHANGED
@@ -1,10 +1,13 @@
1
1
  require 'bundler'
2
2
  Bundler.require
3
3
 
4
+ require_relative './manasimu/mana_type.rb'
4
5
  require_relative './manasimu/card.rb'
6
+ require_relative './manasimu/card/basicland.rb'
5
7
  require_relative './manasimu/card/pathway.rb'
6
8
  require_relative './manasimu/card/tapland.rb'
7
9
  require_relative './manasimu/card/slowland.rb'
10
+ require_relative './manasimu/card/snc_fetchland.rb'
8
11
  require_relative './manasimu/planner.rb'
9
12
  require_relative './manasimu/game.rb'
10
13
  require_relative './manasimu/simulator.rb'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: manasimu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.0.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - so1itaryrove
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-14 00:00:00.000000000 Z
11
+ date: 2022-05-22 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: mtg arrena mana curve simulator
14
14
  email: so1itaryrove@gmail.com
@@ -20,8 +20,10 @@ files:
20
20
  - ext/ford_fulkerson.so
21
21
  - lib/manasimu.rb
22
22
  - lib/manasimu/card.rb
23
+ - lib/manasimu/card/basicland.rb
23
24
  - lib/manasimu/card/pathway.rb
24
25
  - lib/manasimu/card/slowland.rb
26
+ - lib/manasimu/card/snc_fetchland.rb
25
27
  - lib/manasimu/card/tapland.rb
26
28
  - lib/manasimu/data.rb
27
29
  - lib/manasimu/game.rb