twisty_puzzles 0.0.26 → 0.0.30

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: fa3e196d509ec1452a947269c43028b2ee5e3be803f4d3bf510ef5c170d01310
4
- data.tar.gz: 704d10067e79b8d78e3eb5367795200695d4445a44873d198936136568ddc3e4
3
+ metadata.gz: e0921468026dd18bfa906d172939b0856c6d98081eff7fe2013e168daa66f090
4
+ data.tar.gz: 91ef593d14bc93213d6703d508c392ba0ca24d05cd20bfc6936391f0afb7a2ad
5
5
  SHA512:
6
- metadata.gz: 197fc8e07f87b42434f8b126fa9fdcec56a5a47f883d7faf892aecf9c440e01d97c991f15734bdfdda42ee95ca78660f2da7cde1d165c37f2613218532894361
7
- data.tar.gz: 840a076a049ef64a39c82e4b8f6f9721d71be47bc8a232c278bd7f2cc67bd564e2f4dd566b59d1db14582ec6be2a6b4cc6c6001d2eafe51bcb7ce5335dda3bf9
6
+ metadata.gz: 5be09b84d72b7c36723fa4003fdb3ec7a8f068ae5c95e6e10956468f74c3730acb22de0e06b388a42b34c2b2af04bf62bf3cdedd5cf5d472fca70750f7735dd6
7
+ data.tar.gz: a842caaa9cebd5cdadc38cbf60c22439b49b1d923682fbfdd06a69ea92ccf3916c45bbe4c6c317f9fcc6b37d8d41fe81e9443717cf45c009548f474ad2c00142
@@ -4,7 +4,7 @@ module TwistyPuzzles
4
4
  # Base class for directions.
5
5
  class AbstractDirection
6
6
  include Comparable
7
- POSSIBLE_DIRECTION_NAMES = [[''], ['2', '2\''], ['\'', '3', '’']].freeze
7
+ POSSIBLE_DIRECTION_NAMES = [[''], ['2', '2\''], ['\'', '3', '’', '‘', '´', '`']].freeze
8
8
  SIMPLE_DIRECTION_NAMES = (['0'] + POSSIBLE_DIRECTION_NAMES.map(&:first)).freeze
9
9
  POSSIBLE_SKEWB_DIRECTION_NAMES = [['', '2\''], ['\'', '2']].freeze
10
10
  SIMPLE_SKEWB_DIRECTION_NAMES = (['0'] + POSSIBLE_SKEWB_DIRECTION_NAMES.map(&:first)).freeze
@@ -72,6 +72,11 @@ module TwistyPuzzles
72
72
  true
73
73
  end
74
74
 
75
+ def self.exists_on_cube_size?(cube_size)
76
+ cube_size >= min_cube_size && cube_size <= max_cube_size &&
77
+ (cube_size.even? ? exists_on_even_cube_sizes? : exists_on_odd_cube_sizes?)
78
+ end
79
+
75
80
  def num_incarnations(_cube_size)
76
81
  1
77
82
  end
@@ -478,10 +483,6 @@ module TwistyPuzzles
478
483
  4
479
484
  end
480
485
 
481
- def self.exists_on_odd_cube_sizes?
482
- false
483
- end
484
-
485
486
  def self.max_parseable_face_symbols
486
487
  FACES + 1
487
488
  end
@@ -17,16 +17,19 @@ module TwistyPuzzles
17
17
 
18
18
  RAW_DATA_RESERVED = [' ', '(', ')'].freeze
19
19
 
20
- def initialize(parts)
20
+ def initialize(parts, twist = 0)
21
21
  raise ArgumentError if parts.empty?
22
+ raise TypeError unless twist.is_a?(Integer)
23
+ raise ArgumentError if twist.negative?
22
24
 
23
25
  check_types(parts, Part)
24
26
  check_type_consistency(parts)
25
27
 
26
28
  @parts = parts
29
+ @twist = twist
27
30
  end
28
31
 
29
- attr_reader :parts
32
+ attr_reader :parts, :twist
30
33
 
31
34
  def eql?(other)
32
35
  self.class.equal?(other.class) && @parts == other.parts
@@ -79,6 +82,21 @@ module TwistyPuzzles
79
82
  end.min
80
83
  end
81
84
 
85
+ # Note that this returns the same answer for all rotations of one part.
86
+ def contains?(part)
87
+ @parts.any? { |p| p.turned_equals?(part) }
88
+ end
89
+
90
+ # Returns an equivalent cycle that starts with the given part.
91
+ # Raises an error if the cycle doesn't contain the given part.
92
+ def start_with(part)
93
+ raise ArgumentError unless contains?(part)
94
+
95
+ index = @parts.find_index { |p| p.turned_equals?(part) }
96
+ map_rotate_by_number = @parts[index].rotations.index(part)
97
+ rotate_by(@parts.length - index).map_rotate_by(map_rotate_by_number)
98
+ end
99
+
82
100
  def equivalent?(other)
83
101
  self == other || canonicalize == other.canonicalize
84
102
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TwistyPuzzles
4
- VERSION = '0.0.26'
4
+ VERSION = '0.0.30'
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.26
4
+ version: 0.0.30
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-12-06 00:00:00.000000000 Z
11
+ date: 2021-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize