Combinatorics Ruby
I need to make a list of numbers.
Rules:
- 12 numbers in a string;
- First number its always "1";
- Numbers 2-3 its an items from array = [05..15];
- 4-5 its always "78";
- 6-7 its an items from array = [02,03,04,07,08,09,10,11,12,15..27];
- 8-12 its all options of five-digit numbers;
I wrote this code:
file = File.new('./file.txt', 'w')
one = 1
(5..15).to_a.each do |two_three|
if two_three.to_s.length == 1
two_three = "0#{two_three}"
end
four_five = 78
arr1 = (2..27).to_a
arr2 = [0,1,5,6,13,14]
arr3 = arr1-arr2
arr3.each do |six_seven|
if six_seven.to_s.length == 1
six_seven = "0#{six_seven}"
else
six_seven = "#{six_seven}"
end
Array.new(100000) do |index|
index = index + 1
if index.to_s.length == 1
eight_twelve = "0000#{index}"
elsif index.to_s.length == 2
eight_twelve = "000#{index}"
elsif index.to_s.length == 3
eight_twelve = "00#{index}"
elsif index.to_s.length == 4
eight_twelve = "0#{index}"
end
file.puts "#{one}#{two_three}#{four_five}#{six_seven}#{eight_twelve}"
end
end
end
Its working, but incorrectly.
Results
And continues to jump throughout all results (return thirteen-digit only on at string number 200000).
Thanks for your help.
ruby-on-rails ruby
add a comment |
I need to make a list of numbers.
Rules:
- 12 numbers in a string;
- First number its always "1";
- Numbers 2-3 its an items from array = [05..15];
- 4-5 its always "78";
- 6-7 its an items from array = [02,03,04,07,08,09,10,11,12,15..27];
- 8-12 its all options of five-digit numbers;
I wrote this code:
file = File.new('./file.txt', 'w')
one = 1
(5..15).to_a.each do |two_three|
if two_three.to_s.length == 1
two_three = "0#{two_three}"
end
four_five = 78
arr1 = (2..27).to_a
arr2 = [0,1,5,6,13,14]
arr3 = arr1-arr2
arr3.each do |six_seven|
if six_seven.to_s.length == 1
six_seven = "0#{six_seven}"
else
six_seven = "#{six_seven}"
end
Array.new(100000) do |index|
index = index + 1
if index.to_s.length == 1
eight_twelve = "0000#{index}"
elsif index.to_s.length == 2
eight_twelve = "000#{index}"
elsif index.to_s.length == 3
eight_twelve = "00#{index}"
elsif index.to_s.length == 4
eight_twelve = "0#{index}"
end
file.puts "#{one}#{two_three}#{four_five}#{six_seven}#{eight_twelve}"
end
end
end
Its working, but incorrectly.
Results
And continues to jump throughout all results (return thirteen-digit only on at string number 200000).
Thanks for your help.
ruby-on-rails ruby
Weird requirements. Why do you need to create such an array? Perhaps a proper class might be more better?
– spickermann
Nov 19 '18 at 13:14
@spickermann, year, i know. This is like an registration datas. About classes, i dont know. Im not an pro developer. Its just an amateur project. Could you help me?
– Da Ka
Nov 19 '18 at 13:26
Seems like you have some typos or incorrect code nearArray.new(100000) do |index| index + 1
. If your index is nileight_twelve
would be nil as well, because you are not checking for string of length 0. Moreover you can reduce many if/else conditionals in your code and improve readability by usingformat
functionformat("%01d%02d%02d%02d%05d", one, two_three, four_five, six_seven, eight_twelve)
– rubish
Nov 19 '18 at 13:29
add a comment |
I need to make a list of numbers.
Rules:
- 12 numbers in a string;
- First number its always "1";
- Numbers 2-3 its an items from array = [05..15];
- 4-5 its always "78";
- 6-7 its an items from array = [02,03,04,07,08,09,10,11,12,15..27];
- 8-12 its all options of five-digit numbers;
I wrote this code:
file = File.new('./file.txt', 'w')
one = 1
(5..15).to_a.each do |two_three|
if two_three.to_s.length == 1
two_three = "0#{two_three}"
end
four_five = 78
arr1 = (2..27).to_a
arr2 = [0,1,5,6,13,14]
arr3 = arr1-arr2
arr3.each do |six_seven|
if six_seven.to_s.length == 1
six_seven = "0#{six_seven}"
else
six_seven = "#{six_seven}"
end
Array.new(100000) do |index|
index = index + 1
if index.to_s.length == 1
eight_twelve = "0000#{index}"
elsif index.to_s.length == 2
eight_twelve = "000#{index}"
elsif index.to_s.length == 3
eight_twelve = "00#{index}"
elsif index.to_s.length == 4
eight_twelve = "0#{index}"
end
file.puts "#{one}#{two_three}#{four_five}#{six_seven}#{eight_twelve}"
end
end
end
Its working, but incorrectly.
Results
And continues to jump throughout all results (return thirteen-digit only on at string number 200000).
Thanks for your help.
ruby-on-rails ruby
I need to make a list of numbers.
Rules:
- 12 numbers in a string;
- First number its always "1";
- Numbers 2-3 its an items from array = [05..15];
- 4-5 its always "78";
- 6-7 its an items from array = [02,03,04,07,08,09,10,11,12,15..27];
- 8-12 its all options of five-digit numbers;
I wrote this code:
file = File.new('./file.txt', 'w')
one = 1
(5..15).to_a.each do |two_three|
if two_three.to_s.length == 1
two_three = "0#{two_three}"
end
four_five = 78
arr1 = (2..27).to_a
arr2 = [0,1,5,6,13,14]
arr3 = arr1-arr2
arr3.each do |six_seven|
if six_seven.to_s.length == 1
six_seven = "0#{six_seven}"
else
six_seven = "#{six_seven}"
end
Array.new(100000) do |index|
index = index + 1
if index.to_s.length == 1
eight_twelve = "0000#{index}"
elsif index.to_s.length == 2
eight_twelve = "000#{index}"
elsif index.to_s.length == 3
eight_twelve = "00#{index}"
elsif index.to_s.length == 4
eight_twelve = "0#{index}"
end
file.puts "#{one}#{two_three}#{four_five}#{six_seven}#{eight_twelve}"
end
end
end
Its working, but incorrectly.
Results
And continues to jump throughout all results (return thirteen-digit only on at string number 200000).
Thanks for your help.
ruby-on-rails ruby
ruby-on-rails ruby
edited Nov 19 '18 at 13:19
rubish
10.2k33754
10.2k33754
asked Nov 19 '18 at 13:05
Da KaDa Ka
31
31
Weird requirements. Why do you need to create such an array? Perhaps a proper class might be more better?
– spickermann
Nov 19 '18 at 13:14
@spickermann, year, i know. This is like an registration datas. About classes, i dont know. Im not an pro developer. Its just an amateur project. Could you help me?
– Da Ka
Nov 19 '18 at 13:26
Seems like you have some typos or incorrect code nearArray.new(100000) do |index| index + 1
. If your index is nileight_twelve
would be nil as well, because you are not checking for string of length 0. Moreover you can reduce many if/else conditionals in your code and improve readability by usingformat
functionformat("%01d%02d%02d%02d%05d", one, two_three, four_five, six_seven, eight_twelve)
– rubish
Nov 19 '18 at 13:29
add a comment |
Weird requirements. Why do you need to create such an array? Perhaps a proper class might be more better?
– spickermann
Nov 19 '18 at 13:14
@spickermann, year, i know. This is like an registration datas. About classes, i dont know. Im not an pro developer. Its just an amateur project. Could you help me?
– Da Ka
Nov 19 '18 at 13:26
Seems like you have some typos or incorrect code nearArray.new(100000) do |index| index + 1
. If your index is nileight_twelve
would be nil as well, because you are not checking for string of length 0. Moreover you can reduce many if/else conditionals in your code and improve readability by usingformat
functionformat("%01d%02d%02d%02d%05d", one, two_three, four_five, six_seven, eight_twelve)
– rubish
Nov 19 '18 at 13:29
Weird requirements. Why do you need to create such an array? Perhaps a proper class might be more better?
– spickermann
Nov 19 '18 at 13:14
Weird requirements. Why do you need to create such an array? Perhaps a proper class might be more better?
– spickermann
Nov 19 '18 at 13:14
@spickermann, year, i know. This is like an registration datas. About classes, i dont know. Im not an pro developer. Its just an amateur project. Could you help me?
– Da Ka
Nov 19 '18 at 13:26
@spickermann, year, i know. This is like an registration datas. About classes, i dont know. Im not an pro developer. Its just an amateur project. Could you help me?
– Da Ka
Nov 19 '18 at 13:26
Seems like you have some typos or incorrect code near
Array.new(100000) do |index| index + 1
. If your index is nil eight_twelve
would be nil as well, because you are not checking for string of length 0. Moreover you can reduce many if/else conditionals in your code and improve readability by using format
function format("%01d%02d%02d%02d%05d", one, two_three, four_five, six_seven, eight_twelve)
– rubish
Nov 19 '18 at 13:29
Seems like you have some typos or incorrect code near
Array.new(100000) do |index| index + 1
. If your index is nil eight_twelve
would be nil as well, because you are not checking for string of length 0. Moreover you can reduce many if/else conditionals in your code and improve readability by using format
function format("%01d%02d%02d%02d%05d", one, two_three, four_five, six_seven, eight_twelve)
– rubish
Nov 19 '18 at 13:29
add a comment |
1 Answer
1
active
oldest
votes
Array#product is the method of choice here.
First construct the following array.
arr = [['1'], [*'05'..'15'], ['78'], [*'02'..'04', *'07'..'12', *'15'..'27'],
[*'00000'..'99999']]
#=> [["1"], ["05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15"],
# ["78"], ["02", "03", "04", "07", "08", "09", "10", "11", "12", "15",
# "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27"],
# "00000", "00001",..., "99999"]
The sizes of each element (array) of arr
is as follows.
arr.map(&:size)
#=> [1, 11, 1, 22, 100000]
To generate all combinations of arrays obtained by selecting one element from each element (array) of arr
and then converting the resultant array to a string we write the following (which takes awhile to execute):
combos = arr.first.product(*arr.drop(1)).map(&:join)
n = combos.size
#=> 24200000
combos.first(2)
#=> ["105780200000", "105780200001"]
combos.last(2)
#=> ["115782799998", "115782799999"]
5.times do
i = rand(n)
puts "%5d -> %s" % [i, combos[i]]
end
9379583 -> 109780979583
12310295 -> 110781910295
11619403 -> 110781019403
3571703 -> 106781971703
18237011 -> 113781037011
Note:
size.reduce(:*)
#=> 24200000
"takes awhile to execute" – And that is why "combinatorial explosion" is called combinatorial explosion.
– Jörg W Mittag
Nov 20 '18 at 5:54
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53375300%2fcombinatorics-ruby%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Array#product is the method of choice here.
First construct the following array.
arr = [['1'], [*'05'..'15'], ['78'], [*'02'..'04', *'07'..'12', *'15'..'27'],
[*'00000'..'99999']]
#=> [["1"], ["05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15"],
# ["78"], ["02", "03", "04", "07", "08", "09", "10", "11", "12", "15",
# "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27"],
# "00000", "00001",..., "99999"]
The sizes of each element (array) of arr
is as follows.
arr.map(&:size)
#=> [1, 11, 1, 22, 100000]
To generate all combinations of arrays obtained by selecting one element from each element (array) of arr
and then converting the resultant array to a string we write the following (which takes awhile to execute):
combos = arr.first.product(*arr.drop(1)).map(&:join)
n = combos.size
#=> 24200000
combos.first(2)
#=> ["105780200000", "105780200001"]
combos.last(2)
#=> ["115782799998", "115782799999"]
5.times do
i = rand(n)
puts "%5d -> %s" % [i, combos[i]]
end
9379583 -> 109780979583
12310295 -> 110781910295
11619403 -> 110781019403
3571703 -> 106781971703
18237011 -> 113781037011
Note:
size.reduce(:*)
#=> 24200000
"takes awhile to execute" – And that is why "combinatorial explosion" is called combinatorial explosion.
– Jörg W Mittag
Nov 20 '18 at 5:54
add a comment |
Array#product is the method of choice here.
First construct the following array.
arr = [['1'], [*'05'..'15'], ['78'], [*'02'..'04', *'07'..'12', *'15'..'27'],
[*'00000'..'99999']]
#=> [["1"], ["05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15"],
# ["78"], ["02", "03", "04", "07", "08", "09", "10", "11", "12", "15",
# "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27"],
# "00000", "00001",..., "99999"]
The sizes of each element (array) of arr
is as follows.
arr.map(&:size)
#=> [1, 11, 1, 22, 100000]
To generate all combinations of arrays obtained by selecting one element from each element (array) of arr
and then converting the resultant array to a string we write the following (which takes awhile to execute):
combos = arr.first.product(*arr.drop(1)).map(&:join)
n = combos.size
#=> 24200000
combos.first(2)
#=> ["105780200000", "105780200001"]
combos.last(2)
#=> ["115782799998", "115782799999"]
5.times do
i = rand(n)
puts "%5d -> %s" % [i, combos[i]]
end
9379583 -> 109780979583
12310295 -> 110781910295
11619403 -> 110781019403
3571703 -> 106781971703
18237011 -> 113781037011
Note:
size.reduce(:*)
#=> 24200000
"takes awhile to execute" – And that is why "combinatorial explosion" is called combinatorial explosion.
– Jörg W Mittag
Nov 20 '18 at 5:54
add a comment |
Array#product is the method of choice here.
First construct the following array.
arr = [['1'], [*'05'..'15'], ['78'], [*'02'..'04', *'07'..'12', *'15'..'27'],
[*'00000'..'99999']]
#=> [["1"], ["05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15"],
# ["78"], ["02", "03", "04", "07", "08", "09", "10", "11", "12", "15",
# "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27"],
# "00000", "00001",..., "99999"]
The sizes of each element (array) of arr
is as follows.
arr.map(&:size)
#=> [1, 11, 1, 22, 100000]
To generate all combinations of arrays obtained by selecting one element from each element (array) of arr
and then converting the resultant array to a string we write the following (which takes awhile to execute):
combos = arr.first.product(*arr.drop(1)).map(&:join)
n = combos.size
#=> 24200000
combos.first(2)
#=> ["105780200000", "105780200001"]
combos.last(2)
#=> ["115782799998", "115782799999"]
5.times do
i = rand(n)
puts "%5d -> %s" % [i, combos[i]]
end
9379583 -> 109780979583
12310295 -> 110781910295
11619403 -> 110781019403
3571703 -> 106781971703
18237011 -> 113781037011
Note:
size.reduce(:*)
#=> 24200000
Array#product is the method of choice here.
First construct the following array.
arr = [['1'], [*'05'..'15'], ['78'], [*'02'..'04', *'07'..'12', *'15'..'27'],
[*'00000'..'99999']]
#=> [["1"], ["05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15"],
# ["78"], ["02", "03", "04", "07", "08", "09", "10", "11", "12", "15",
# "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27"],
# "00000", "00001",..., "99999"]
The sizes of each element (array) of arr
is as follows.
arr.map(&:size)
#=> [1, 11, 1, 22, 100000]
To generate all combinations of arrays obtained by selecting one element from each element (array) of arr
and then converting the resultant array to a string we write the following (which takes awhile to execute):
combos = arr.first.product(*arr.drop(1)).map(&:join)
n = combos.size
#=> 24200000
combos.first(2)
#=> ["105780200000", "105780200001"]
combos.last(2)
#=> ["115782799998", "115782799999"]
5.times do
i = rand(n)
puts "%5d -> %s" % [i, combos[i]]
end
9379583 -> 109780979583
12310295 -> 110781910295
11619403 -> 110781019403
3571703 -> 106781971703
18237011 -> 113781037011
Note:
size.reduce(:*)
#=> 24200000
edited Nov 20 '18 at 5:53
Jörg W Mittag
291k63356549
291k63356549
answered Nov 19 '18 at 19:18
Cary SwovelandCary Swoveland
69.5k54166
69.5k54166
"takes awhile to execute" – And that is why "combinatorial explosion" is called combinatorial explosion.
– Jörg W Mittag
Nov 20 '18 at 5:54
add a comment |
"takes awhile to execute" – And that is why "combinatorial explosion" is called combinatorial explosion.
– Jörg W Mittag
Nov 20 '18 at 5:54
"takes awhile to execute" – And that is why "combinatorial explosion" is called combinatorial explosion.
– Jörg W Mittag
Nov 20 '18 at 5:54
"takes awhile to execute" – And that is why "combinatorial explosion" is called combinatorial explosion.
– Jörg W Mittag
Nov 20 '18 at 5:54
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53375300%2fcombinatorics-ruby%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Weird requirements. Why do you need to create such an array? Perhaps a proper class might be more better?
– spickermann
Nov 19 '18 at 13:14
@spickermann, year, i know. This is like an registration datas. About classes, i dont know. Im not an pro developer. Its just an amateur project. Could you help me?
– Da Ka
Nov 19 '18 at 13:26
Seems like you have some typos or incorrect code near
Array.new(100000) do |index| index + 1
. If your index is nileight_twelve
would be nil as well, because you are not checking for string of length 0. Moreover you can reduce many if/else conditionals in your code and improve readability by usingformat
functionformat("%01d%02d%02d%02d%05d", one, two_three, four_five, six_seven, eight_twelve)
– rubish
Nov 19 '18 at 13:29