Help with rather simple method

D

Deniz Dogan

Hello.

I'm trying to come up with the "best", most Ruby-ish way to write a
method such as this one:

# This method replaces randomly selected characters in 'string' with new
# randomly selected characters of [A-Za-z0-9]. However, it does not
# replace any character with the character itself, i.e., it does not
# replace any "a" with "a". Also, no position in the string will ever be
# replaced twice.
# 'string' is the String to perform the replacing on.
# 'amount' is the amount of different characters to replace.
def random_replace(string, amount)
...
end

You don't have to care about any error checking of course.

Any ideas? The solution I've come up with (but which is yet to be
implemented) does not feel Ruby-ish at all and could probably be
implemented in pretty much any other programming language.

And no, this is not school work, no matter what you think.

-Deniz Dogan
 
J

John Joyce

Hello.

I'm trying to come up with the "best", most Ruby-ish way to write a
method such as this one:

# This method replaces randomly selected characters in 'string'
with new
# randomly selected characters of [A-Za-z0-9]. However, it does not
# replace any character with the character itself, i.e., it does not
# replace any "a" with "a". Also, no position in the string will
ever be
# replaced twice.
# 'string' is the String to perform the replacing on.
# 'amount' is the amount of different characters to replace.
def random_replace(string, amount)
...
end

You don't have to care about any error checking of course.

Any ideas? The solution I've come up with (but which is yet to be
implemented) does not feel Ruby-ish at all and could probably be
implemented in pretty much any other programming language.

And no, this is not school work, no matter what you think.

-Deniz Dogan

Lets define that a little better before we get started:
'amount' means what? Number of characters to replace?
Do you chose random positions in the string to replace?
How often do you randomize?
What's the point?
Does it need to be reversible?
Perhaps what you're looking for is some of the encryption
algorithms... even very simple ones like ROT13 might give you some
ideas.
How Ruby-ish it feels is kind of subjective.
 
D

Deniz Dogan

John said:
Hello.

I'm trying to come up with the "best", most Ruby-ish way to write a
method such as this one:

# This method replaces randomly selected characters in 'string' with new
# randomly selected characters of [A-Za-z0-9]. However, it does not
# replace any character with the character itself, i.e., it does not
# replace any "a" with "a". Also, no position in the string will ever be
# replaced twice.
# 'string' is the String to perform the replacing on.
# 'amount' is the amount of different characters to replace.
def random_replace(string, amount)
...
end

You don't have to care about any error checking of course.

Any ideas? The solution I've come up with (but which is yet to be
implemented) does not feel Ruby-ish at all and could probably be
implemented in pretty much any other programming language.

And no, this is not school work, no matter what you think.

-Deniz Dogan

Lets define that a little better before we get started:
'amount' means what? Number of characters to replace?

Correctly guessed!
Do you chose random positions in the string to replace?
Yes!

How often do you randomize?

Once every program run.
What's the point?

I'm currently working on a project which is supposed to perform a rather
odd type of penetration testing on protocol implementations, using
specification files which describe attacks to perform on the host. This
method is used in trying to find very simple vulnerabilities, by
replacing some characters in strings to see what happens if we send
something unexpected to the server.
Does it need to be reversible?

Not at all!
 
W

William James

Hello.

I'm trying to come up with the "best", most Ruby-ish way to write a
method such as this one:

# This method replaces randomly selected characters in 'string' with new
# randomly selected characters of [A-Za-z0-9]. However, it does not
# replace any character with the character itself, i.e., it does not
# replace any "a" with "a". Also, no position in the string will ever be
# replaced twice.
# 'string' is the String to perform the replacing on.
# 'amount' is the amount of different characters to replace.
def random_replace(string, amount)
...
end

You don't have to care about any error checking of course.

Any ideas? The solution I've come up with (but which is yet to be
implemented) does not feel Ruby-ish at all and could probably be
implemented in pretty much any other programming language.

And no, this is not school work, no matter what you think.

-Deniz Dogan


def random_replace(string, amount)
locations = (0...string.size).to_a
amount.times{
p = locations.slice!( rand( locations.size ) )
chars = ('a'..'z').to_a + ('A'..'Z').to_a +
('0'..'9').to_a - [ string[p,1] ]
string[p] = chars[ rand( chars.size ) ]
}
end

s = 'foo bar'
random_replace( s, 3 )
puts s
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,241
Messages
2,571,222
Members
47,856
Latest member
mmorais

Latest Threads

Top