rubiks-cli 1.0.0
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 +7 -0
- data/.gitignore +1 -0
- data/Rakefile +22 -0
- data/bin/rubiks +25 -0
- data/lib/rubiks_cli/scrambler.rb +31 -0
- data/lib/rubiks_cli/timer.rb +31 -0
- data/lib/rubiks_cli/version.rb +3 -0
- data/lib/rubiks_cli.rb +6 -0
- data/rubiks-cli.gemspec +26 -0
- metadata +50 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 197c7fa7147a8f3fb0227d127d6d64d6338729d0377c0355382a0a66b6bcc995
|
|
4
|
+
data.tar.gz: 9a3ffff2994525091121016c68aff0ff6a3be0ca6dae41152e4408e7e732830c
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 9d3d468c20efceddf69dae6ebe9fe8441e072ddede45e6fe598643018173c4a96c4dba51c0de218e3df9015607c2e0b9b5f4faa8992a765e1a639a01484a2a19
|
|
7
|
+
data.tar.gz: 5e986f12bb70365f6d00ddc8c892059e3bfe983bb173733aafcedfe5937953939155734c1aa41f2466d9307295ecbb27afb811a7e41a76b05c59e99d18b13992
|
data/.gitignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*.gem
|
data/Rakefile
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require "bundler/gem_tasks"
|
|
2
|
+
require "rake/clean"
|
|
3
|
+
|
|
4
|
+
task :build do
|
|
5
|
+
puts "Building gem..."
|
|
6
|
+
system "gem build rubiks-cli.gemspec"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
task :install => :build do
|
|
10
|
+
puts "Installing gem..."
|
|
11
|
+
system "gem install rubiks-cli-*.gem"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
task :clean do
|
|
15
|
+
puts "Cleaning up built gems..."
|
|
16
|
+
system "rm -f *.gem"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
task :release => [:clean, :build] do
|
|
20
|
+
puts "Pushing to RubyGems..."
|
|
21
|
+
system "gem push rubiks-cli-*.gem"
|
|
22
|
+
end
|
data/bin/rubiks
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'rubiks_cli'
|
|
4
|
+
|
|
5
|
+
HELP = "Press Enter to start\nType 'q' to quit\nType 'n' for a new scramble"
|
|
6
|
+
|
|
7
|
+
cmd = 'n'
|
|
8
|
+
|
|
9
|
+
while true
|
|
10
|
+
RubiksCli::Timer.clear_screen
|
|
11
|
+
if cmd == ''
|
|
12
|
+
RubiksCli::Timer.start
|
|
13
|
+
cmd = 'n'
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
if cmd == 'n'
|
|
17
|
+
puts RubiksCli::Scrambler.get_scramble
|
|
18
|
+
elsif cmd.downcase == 'q'
|
|
19
|
+
break
|
|
20
|
+
else
|
|
21
|
+
puts HELP
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
cmd = gets.chomp
|
|
25
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module RubiksCli
|
|
2
|
+
class Scrambler
|
|
3
|
+
LENGTH = 20
|
|
4
|
+
FACES = ['U', 'D', 'F', 'B', 'L', 'R']
|
|
5
|
+
SUFFIXES = [ '', '\'', '2' ]
|
|
6
|
+
|
|
7
|
+
def self.get_scramble
|
|
8
|
+
moves = []
|
|
9
|
+
second_to_last_face = ''
|
|
10
|
+
last_face = ''
|
|
11
|
+
|
|
12
|
+
LENGTH.times do |i|
|
|
13
|
+
next_move = ""
|
|
14
|
+
next_face = ''
|
|
15
|
+
begin
|
|
16
|
+
next_move = self.get_move
|
|
17
|
+
next_face = next_move[0]
|
|
18
|
+
end while next_face == second_to_last_face || next_face == last_face
|
|
19
|
+
|
|
20
|
+
moves[i] = next_move
|
|
21
|
+
second_to_last_face = last_face
|
|
22
|
+
last_face = next_face
|
|
23
|
+
end
|
|
24
|
+
moves.join(", ")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.get_move
|
|
28
|
+
FACES.sample + SUFFIXES.sample
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'io/console'
|
|
2
|
+
|
|
3
|
+
module RubiksCli
|
|
4
|
+
class Timer
|
|
5
|
+
|
|
6
|
+
def self.clear_screen
|
|
7
|
+
system("clear") || system("cls")
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.time
|
|
11
|
+
start = Time.now
|
|
12
|
+
|
|
13
|
+
STDIN.raw do
|
|
14
|
+
loop do
|
|
15
|
+
print "\r#{(Time.now - start).round(1)}"
|
|
16
|
+
break if STDIN.wait_readable(0.01)
|
|
17
|
+
end
|
|
18
|
+
STDIN.read_nonblock(1) rescue nil
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
return Time.now - start
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.start
|
|
25
|
+
clear_screen
|
|
26
|
+
time = Timer.time
|
|
27
|
+
clear_screen
|
|
28
|
+
puts time.round(3)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
data/lib/rubiks_cli.rb
ADDED
data/rubiks-cli.gemspec
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require_relative "lib/rubiks_cli/version"
|
|
2
|
+
|
|
3
|
+
Gem::Specification.new do |spec|
|
|
4
|
+
spec.name = "rubiks-cli"
|
|
5
|
+
spec.version = RubiksCli::VERSION
|
|
6
|
+
spec.authors = ["Noah Scott"]
|
|
7
|
+
spec.email = ["noah.scott.24@ucl.ac.uk"]
|
|
8
|
+
|
|
9
|
+
spec.summary = "A command-line Rubik's Cube timer"
|
|
10
|
+
spec.description = "A simple CLI tool for timing Rubik's Cube solves"
|
|
11
|
+
spec.homepage = "https://github.com/noahsc0tt/rubiks-cli"
|
|
12
|
+
spec.license = "MIT"
|
|
13
|
+
spec.required_ruby_version = ">= 2.7.0"
|
|
14
|
+
|
|
15
|
+
spec.metadata["source_code_uri"] = spec.homepage
|
|
16
|
+
|
|
17
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
18
|
+
`git ls-files -z 2>/dev/null`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
spec.bindir = "bin"
|
|
22
|
+
spec.executables = ["rubiks"]
|
|
23
|
+
spec.require_paths = ["lib"]
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: rubiks-cli
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Noah Scott
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies: []
|
|
12
|
+
description: A simple CLI tool for timing Rubik's Cube solves
|
|
13
|
+
email:
|
|
14
|
+
- noah.scott.24@ucl.ac.uk
|
|
15
|
+
executables:
|
|
16
|
+
- rubiks
|
|
17
|
+
extensions: []
|
|
18
|
+
extra_rdoc_files: []
|
|
19
|
+
files:
|
|
20
|
+
- ".gitignore"
|
|
21
|
+
- Rakefile
|
|
22
|
+
- bin/rubiks
|
|
23
|
+
- lib/rubiks_cli.rb
|
|
24
|
+
- lib/rubiks_cli/scrambler.rb
|
|
25
|
+
- lib/rubiks_cli/timer.rb
|
|
26
|
+
- lib/rubiks_cli/version.rb
|
|
27
|
+
- rubiks-cli.gemspec
|
|
28
|
+
homepage: https://github.com/noahsc0tt/rubiks-cli
|
|
29
|
+
licenses:
|
|
30
|
+
- MIT
|
|
31
|
+
metadata:
|
|
32
|
+
source_code_uri: https://github.com/noahsc0tt/rubiks-cli
|
|
33
|
+
rdoc_options: []
|
|
34
|
+
require_paths:
|
|
35
|
+
- lib
|
|
36
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: 2.7.0
|
|
41
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
42
|
+
requirements:
|
|
43
|
+
- - ">="
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: '0'
|
|
46
|
+
requirements: []
|
|
47
|
+
rubygems_version: 3.7.2
|
|
48
|
+
specification_version: 4
|
|
49
|
+
summary: A command-line Rubik's Cube timer
|
|
50
|
+
test_files: []
|