kaki-utils 0.0.10 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +5 -0
- data/lib/kaki/utils.rb +71 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 72bacd04bc1372b116ebe8ace9f7f0a32fdcf935c689cf29ed853f0c0e5561f0
|
4
|
+
data.tar.gz: 34cb58e25174a33c63831bf2757eb16db2633fde79d0b123ae063ebbae0598eb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7bc4cbb3ad13c05971dd09aa0d10bb2a5f538c8128bc016ee4b6f0736f926cc8da4b6ee8c56f0e7ebeed8b78634a6b982f0be792d26e7c264214d51fe8c01056
|
7
|
+
data.tar.gz: e2fedbbb7b6078f96e912a26a9dae50f36c22b756940c530cf6398de2b10e3fa516051638dd29660338f7b2f6a21200524f75d103d27882f73c8a8802b9b5bdc
|
data/README.md
CHANGED
@@ -14,6 +14,11 @@ methods
|
|
14
14
|
* Utils.delete\_empty\_folder(folder_name = './')
|
15
15
|
* Utils.bell (only Ubuntu)
|
16
16
|
* Utils.factorial(n)
|
17
|
+
* Utils.permutation(a, b)
|
18
|
+
* Utils.combination(a, b)
|
19
|
+
* Utils.repeated_permutation(a, b)
|
20
|
+
* Utils.repeated_combination(a, b)
|
21
|
+
* Utils.generate_random_strings(num, string_length = nil)
|
17
22
|
|
18
23
|
## Recurring decimal
|
19
24
|
|
data/lib/kaki/utils.rb
CHANGED
@@ -3,6 +3,7 @@ require 'fileutils'
|
|
3
3
|
require 'fastimage'
|
4
4
|
require "io/console"
|
5
5
|
require 'gtk2'
|
6
|
+
require 'set'
|
6
7
|
|
7
8
|
module Utils
|
8
9
|
#画像か?
|
@@ -103,4 +104,74 @@ module Utils
|
|
103
104
|
result
|
104
105
|
end
|
105
106
|
module_function :factorial
|
107
|
+
|
108
|
+
|
109
|
+
#a個の中からb個選ぶ順列の数
|
110
|
+
# @return [Integer]
|
111
|
+
def permutation(a, b)
|
112
|
+
[*1..a].last(b).inject(1, &:*)
|
113
|
+
end
|
114
|
+
|
115
|
+
#aの中からb個選ぶ組み合わせの数
|
116
|
+
# @return [Integer]
|
117
|
+
def combination(a, b)
|
118
|
+
Utils.permutation(a, b) / Utils.factorial(b)
|
119
|
+
end
|
120
|
+
|
121
|
+
#a個の中から重複を許してb個選ぶ順列の数
|
122
|
+
# @return [Integer]
|
123
|
+
def repeated_permutation(a, b)
|
124
|
+
a ** b
|
125
|
+
end
|
126
|
+
|
127
|
+
#a個の中から重複を許してb個選ぶ組み合わせの数
|
128
|
+
# @return [Integer]
|
129
|
+
def repeated_combination(a, b)
|
130
|
+
Utils.combination(a + b - 1, b)
|
131
|
+
end
|
132
|
+
module_function :permutation, :combination, :repeated_permutation, :repeated_combination
|
133
|
+
|
134
|
+
|
135
|
+
#アルファベット小文字を使った長さ string_length の文字列を、重複しないようにランダムに num 個生成する。string_length が指定されないときは最短の文字列を使う
|
136
|
+
# @return [Array]
|
137
|
+
def generate_random_strings(num, string_length = nil)
|
138
|
+
table = [*"a".."z"]
|
139
|
+
limit = [0, 26, 702, 18278, 475254, 12356630]
|
140
|
+
result = []
|
141
|
+
generate_string1 = ->(n, l) {
|
142
|
+
st = ""
|
143
|
+
l.times do
|
144
|
+
a, n = n % 26, n / 26
|
145
|
+
st = table[a] + st
|
146
|
+
end
|
147
|
+
st
|
148
|
+
}
|
149
|
+
generate_string2 = ->(n) {
|
150
|
+
idx = limit.find_index {|i| i > n}
|
151
|
+
generate_string1.(n - limit[idx - 1], idx)
|
152
|
+
}
|
153
|
+
|
154
|
+
if string_length and 26 < string_length
|
155
|
+
raise "Given length of strings too big."
|
156
|
+
end
|
157
|
+
|
158
|
+
num_table = Set.new
|
159
|
+
if string_length
|
160
|
+
n = Utils.repeated_permutation(26, string_length)
|
161
|
+
raise "Given length of strings too small." if n < num
|
162
|
+
while num_table.size < num
|
163
|
+
num_table << rand(n)
|
164
|
+
end
|
165
|
+
num_table.each {|i| result << generate_string1.(i, string_length)}
|
166
|
+
else
|
167
|
+
idx = limit.find_index {|i| i >= num}
|
168
|
+
raise "Result Array too big." unless idx
|
169
|
+
while num_table.size < num
|
170
|
+
num_table << rand(limit[idx])
|
171
|
+
end
|
172
|
+
num_table.each {|i| result << generate_string2.(i)}
|
173
|
+
end
|
174
|
+
result
|
175
|
+
end
|
176
|
+
module_function :generate_random_strings
|
106
177
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kaki-utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- obelisk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-09-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gtk2
|
@@ -72,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
72
72
|
version: '0'
|
73
73
|
requirements: []
|
74
74
|
rubyforge_project:
|
75
|
-
rubygems_version: 2.
|
75
|
+
rubygems_version: 2.7.6
|
76
76
|
signing_key:
|
77
77
|
specification_version: 4
|
78
78
|
summary: My trivial utilities.
|