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 +4 -4
- data/lib/twisty_puzzles/cube.rb +4 -0
- data/lib/twisty_puzzles/part_cycle.rb +62 -0
- data/lib/twisty_puzzles/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 3890521ee97a60869d26b02813cd151f663c41c8df2be9c43f3c1feeb753da33
         | 
| 4 | 
            +
              data.tar.gz: 62b7ce3c679d64c2540c82376ce793e858f08dbd8f36382af54919bb0f5c4887
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 76e7431b9aadae1764e84aa94163c78dbff203f80a21acfa9a4f19a03f916f899ca751d2c1c78a6b0514722bb14ee9a3e53f6fc87fd7a69c4e6b67ef301415cb
         | 
| 7 | 
            +
              data.tar.gz: 60d7bdbb9101ca596e85fbad048eff6efc826dc03ba300006d818c5767b361d7ef7e673e48e7113a31f9cf31040adc2f47e62e4345eeaa900564570b0e19461a
         | 
    
        data/lib/twisty_puzzles/cube.rb
    CHANGED
    
    
| @@ -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 |  | 
    
        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. | 
| 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- | 
| 11 | 
            +
            date: 2021-11-10 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: colorize
         |