twisty_puzzles 0.0.20 → 0.0.24

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: b520c95ebe0051fb847be3781d6f82a6b2f41f00e006e3935157d8c6c3843726
4
- data.tar.gz: 8cfb1439b07cf4983d17198952d56ae4b903afa994c67c549ea210063bc42eb9
3
+ metadata.gz: 3890521ee97a60869d26b02813cd151f663c41c8df2be9c43f3c1feeb753da33
4
+ data.tar.gz: 62b7ce3c679d64c2540c82376ce793e858f08dbd8f36382af54919bb0f5c4887
5
5
  SHA512:
6
- metadata.gz: b841bc0e3f1de064c2bee48eaf041528abeec5b3751486b380933ead4633ea78430445793351bf3a80eff1da9d2b535ecea6dd63ace544c18f0a456b5fd348fe
7
- data.tar.gz: 8732d36c49fc52b9292401b82b1b795f6f00994bb0ab80d2cbb029555af383fd20769cb083bb7d2af3348d7fda7811d76b693764f30699a79d239bde2cf93151
6
+ metadata.gz: 76e7431b9aadae1764e84aa94163c78dbff203f80a21acfa9a4f19a03f916f899ca751d2c1c78a6b0514722bb14ee9a3e53f6fc87fd7a69c4e6b67ef301415cb
7
+ data.tar.gz: 60d7bdbb9101ca596e85fbad048eff6efc826dc03ba300006d818c5767b361d7ef7e673e48e7113a31f9cf31040adc2f47e62e4345eeaa900564570b0e19461a
@@ -672,4 +672,8 @@ module TwistyPuzzles
672
672
  [1 + incarnation_index, cube_size / 2]
673
673
  end
674
674
  end
675
+
676
+ # TODO: Add obliques
677
+
678
+ PART_TYPES = [Corner, Edge, XCenter, TCenter, Face, Midge, Wing].freeze
675
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,8 +12,13 @@ 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
+
17
+ RAW_DATA_RESERVED = [' ', '(', ')'].freeze
14
18
 
15
19
  def initialize(parts)
20
+ raise ArgumentError if parts.empty?
21
+
16
22
  check_types(parts, Part)
17
23
  check_type_consistency(parts)
18
24
 
@@ -31,6 +37,62 @@ module TwistyPuzzles
31
37
  @hash ||= ([self.class] + @parts).hash
32
38
  end
33
39
 
40
+ def part_type
41
+ @parts.first.class
42
+ end
43
+
44
+ def contains_any_part?(parts)
45
+ !(@parts & parts).empty?
46
+ end
47
+
48
+ def to_s
49
+ @parts.join(' ')
50
+ end
51
+
52
+ def to_raw_data
53
+ "#{simple_class_name(part_type)}(#{self})"
54
+ end
55
+
56
+ def length
57
+ @parts.length
58
+ end
59
+
60
+ def rotate_by(number)
61
+ self.class.new(@parts.rotate(number))
62
+ end
63
+
64
+ def map_rotate_by(number)
65
+ self.class.new(@parts.map { |p| p.rotate_by(number) })
66
+ end
67
+
68
+ def <=>(other)
69
+ @parts <=> other.parts
70
+ end
71
+
72
+ def canonicalize
73
+ @canonicalize ||=
74
+ @parts.map.with_index do |part, index|
75
+ min_part = part.rotations.min
76
+ map_rotate_by_number = part.rotations.index(min_part)
77
+ rotate_by(index).map_rotate_by(map_rotate_by_number)
78
+ end.min
79
+ end
80
+
81
+ def equivalent?(other)
82
+ self == other || canonicalize == other.canonicalize
83
+ end
84
+
85
+ def inverse
86
+ self.class.new([@parts[0]] + @parts[1..].reverse)
87
+ end
88
+
89
+ def self.from_raw_data(data)
90
+ raw_part_type, raw_parts = data.match(/(.*)\((.*)\)/).captures
91
+ part_type = PART_TYPES.find { |p| simple_class_name(p) == raw_part_type }
92
+ parts = raw_parts.split.map { |r| part_type.parse(r) }
93
+ new(parts)
94
+ end
95
+
34
96
  def check_type_consistency(parts)
35
97
  return unless parts.any? { |p| p.class != parts.first.class }
36
98
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TwistyPuzzles
4
- VERSION = '0.0.20'
4
+ VERSION = '0.0.24'
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.20
4
+ version: 0.0.24
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