twisty_puzzles 0.0.21 → 0.0.25

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: be82a2641267d469bc68c47799c03783467777a5b8279e5d9dcf7341de653ed6
4
- data.tar.gz: '048163ad5b5711cbfa50e6a5a63157938f5fe77cf4185e069d0093d29faf2159'
3
+ metadata.gz: 2bdb18c89f68fabb32390a700b044586d879472b35a120fa953daf9dd8fe92c6
4
+ data.tar.gz: 59033222dd6581dc53383e05a2f5886aee43beeb93578d2db8a7b455133ad07a
5
5
  SHA512:
6
- metadata.gz: 3fb21ebf301992496ae43c9c7139bd518db0d7973020b78a8151fce1799e406eae182e0585d862493a22c6ae6d6168d17e9be81cda858fbca261f50651a803ea
7
- data.tar.gz: 526eba7127c4c83a9f3c1b1a8c6addb270a678e37311bada9418cfd74455590753f2ae756a9b0454008d9965cac563dd30fd6d1929e1935969fd0c3e643a5ec4
6
+ metadata.gz: 0aabba50c1c8d8a5edec9359a06be002fc13bf9a9171578920357eafbbb90d96e82fe8c3f3455e95c70080e1e86d974a9ab260fbc0d7e6827c5c1cd2d9c13086
7
+ data.tar.gz: 8c9004e6132a9174c5f1e92c8b116bd3d7cc6158e858bcff762f8b7d42a1656795af73243664b0e4186c212536ac43628820e37a8b9ae9b61f5b4db9d9a2af16
@@ -675,5 +675,5 @@ module TwistyPuzzles
675
675
 
676
676
  # TODO: Add obliques
677
677
 
678
- PART_TYPES = [Corner, Edge, XCenter, TCenter, Face, Edge, Midge, Wing].freeze
678
+ PART_TYPES = [Corner, Edge, XCenter, TCenter, Face, Midge, Wing].freeze
679
679
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'twisty_puzzles/utils/array_helper'
4
+ require 'twisty_puzzles/utils/string_helper'
4
5
  require 'twisty_puzzles/sticker_cycle_factory'
5
6
  require 'twisty_puzzles/cube'
6
7
 
@@ -11,6 +12,10 @@ module TwistyPuzzles
11
12
  # Check StickerCycleFactory for making it concrete and applyable.
12
13
  class PartCycle
13
14
  include Utils::ArrayHelper
15
+ include Utils::StringHelper
16
+ extend Utils::StringHelper
17
+
18
+ RAW_DATA_RESERVED = [' ', '(', ')'].freeze
14
19
 
15
20
  def initialize(parts)
16
21
  raise ArgumentError if parts.empty?
@@ -37,21 +42,54 @@ module TwistyPuzzles
37
42
  @parts.first.class
38
43
  end
39
44
 
45
+ def contains_any_part?(parts)
46
+ !(@parts & parts).empty?
47
+ end
48
+
40
49
  def to_s
41
50
  @parts.join(' ')
42
51
  end
43
52
 
44
53
  def to_raw_data
45
- "#{part_type}(#{self})"
54
+ "#{simple_class_name(part_type)}(#{self})"
46
55
  end
47
56
 
48
57
  def length
49
58
  @parts.length
50
59
  end
51
60
 
61
+ def rotate_by(number)
62
+ self.class.new(@parts.rotate(number))
63
+ end
64
+
65
+ def map_rotate_by(number)
66
+ self.class.new(@parts.map { |p| p.rotate_by(number) })
67
+ end
68
+
69
+ def <=>(other)
70
+ @parts <=> other.parts
71
+ end
72
+
73
+ def canonicalize
74
+ @canonicalize ||=
75
+ @parts.map.with_index do |part, index|
76
+ min_part = part.rotations.min
77
+ map_rotate_by_number = part.rotations.index(min_part)
78
+ rotate_by(index).map_rotate_by(map_rotate_by_number)
79
+ end.min
80
+ end
81
+
82
+ def equivalent?(other)
83
+ self == other || canonicalize == other.canonicalize
84
+ end
85
+
86
+ def inverse
87
+ self.class.new([@parts[0]] + @parts[1..].reverse)
88
+ end
89
+
52
90
  def self.from_raw_data(data)
53
91
  raw_part_type, raw_parts = data.match(/(.*)\((.*)\)/).captures
54
- part_type = PART_TYPES.find { |p| p.name == raw_part_type }
92
+ part_type = PART_TYPES.find { |p| simple_class_name(p) == raw_part_type }
55
93
  parts = raw_parts.split.map { |r| part_type.parse(r) }
56
94
  new(parts)
57
95
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TwistyPuzzles
4
- VERSION = '0.0.21'
4
+ VERSION = '0.0.25'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twisty_puzzles
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.21
4
+ version: 0.0.25
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bernhard F. Brodowsky
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-09 00:00:00.000000000 Z
11
+ date: 2021-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize