twisty_puzzles 0.0.22 → 0.0.23

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b027980f0003ca98c1c331bf442b3ac511a0e3bdc6bf68df6a1cb863b7a7d0a1
4
- data.tar.gz: c1ad15aef159ebe5fb99dd0a7fc299d88fd88ecdc0418a7e730150a3d5dc8448
3
+ metadata.gz: 38464f2fe484f8bf9336b02fd487750afd507060ad308f43fc7f6f77d4fdd009
4
+ data.tar.gz: 7934ea73bdbc8aa54bbc342693ab2118ca927f5ac5f4e4af2e63d0f1669c7eda
5
5
  SHA512:
6
- metadata.gz: 10035a7afbb795b610d2e6c9408d86a13606327ba934c9a0e044a10fe316efa32eb25da74a3244d4762e8083aa0334b5e40f19cc6bbed9b1f0660b70e1df9122
7
- data.tar.gz: 67434787b689f5466a66ff202d5a0da06c7d92c051f836ef3c09e638e9d82d9475b4e2f79089062561508da9dcc3f2025fcab1818aab5f891a7416e43ac2c56d
6
+ metadata.gz: 84c639c1b0d861543494f12256212a17d758e37fc2ef4099dd894a50d545c566d5c172ee839bcbb25ad1d5a76911003e93c4aaf7f1180ca4d61497ecd546c46e
7
+ data.tar.gz: 21eccbfb1040243dddaf036fa43d2b8ef54a020a23df3470dc7c18bc7ee44f404fe8df633293c80445d377db13e62d12b60305184a5b985b0e691b17d0f6da05
@@ -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
@@ -39,6 +39,10 @@ module TwistyPuzzles
39
39
  @parts.first.class
40
40
  end
41
41
 
42
+ def contains_any_part?(parts)
43
+ !(@parts & parts).empty?
44
+ end
45
+
42
46
  def to_s
43
47
  @parts.join(' ')
44
48
  end
@@ -51,6 +55,35 @@ module TwistyPuzzles
51
55
  @parts.length
52
56
  end
53
57
 
58
+ def rotate_by(number)
59
+ self.class.new(@parts.rotate(number))
60
+ end
61
+
62
+ def map_rotate_by(number)
63
+ self.class.new(@parts.map { |p| p.rotate_by(number) })
64
+ end
65
+
66
+ def <=>(other)
67
+ @parts <=> other.parts
68
+ end
69
+
70
+ def canonicalize
71
+ @canonicalize ||=
72
+ @parts.map.with_index do |part, index|
73
+ min_part = part.rotations.min
74
+ map_rotate_by_number = part.rotations.index(min_part)
75
+ rotate_by(index).map_rotate_by(map_rotate_by_number)
76
+ end.min
77
+ end
78
+
79
+ def equivalent?(other)
80
+ self == other || canonicalize == other.canonicalize
81
+ end
82
+
83
+ def inverse
84
+ self.class.new([@parts[0]] + @parts[1..].reverse)
85
+ end
86
+
54
87
  def self.from_raw_data(data)
55
88
  raw_part_type, raw_parts = data.match(/(.*)\((.*)\)/).captures
56
89
  part_type = PART_TYPES.find { |p| p.name == raw_part_type }
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TwistyPuzzles
4
- VERSION = '0.0.22'
4
+ VERSION = '0.0.23'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twisty_puzzles
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.22
4
+ version: 0.0.23
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bernhard F. Brodowsky