I want to be able to test a string, to see if the second half of the
string
is a duplicate of the first part of the string, and if so I just want
the
first half (or the second for that matter). I am using ruby-1.9.2.
I can accomplish this with the following:
str = ‘Cyano The CatCyano The Cat’
str = str[0…str.size/2-1] if str[0…str.size/2-1] ==
str[str.size/2…-1]
=> “Cyano The Cat”
Is there a better way?
Joe
I think a regular expression is probably the most succinct, cleanest
approach for this:
s = “Cyano The Cat” * 2
if s =~ /^(.+)\1$/
puts $1
end
On Tue, Sep 21, 2010 at 10:55 PM, Adam P. [email protected]
wrote:
I think a regular expression is probably the most succinct, cleanest
approach for this:
s = “Cyano The Cat” * 2
if s =~ /^(.+)\1$/
 puts $1
end
Clever, but almost: “aa\n” passes and it shouldn’t.
For an arbitrary string you want \A and \z (and /m).
On Sep 21, 2010, at 4:41 PM, joe chesak wrote:
str = str[0…str.size/2-1] if str[0…str.size/2-1] == str[str.size/
2…-1]
=> “Cyano The Cat”
Is there a better way?
Joe
irb> str = ‘Cyano The CatCyano The Cat’
=> “Cyano The CatCyano The Cat”
irb> str =~ /\A(.*)\1\z/
=> 0
irb> $1
=> “Cyano The Cat”
irb> str = “I am not a twinNeither am I”
=> “I am not a twinNeither am I”
irb> str =~ /\A(.*)\1\z/
=> nil
-Rob
Rob B.
[email protected] http://AgileConsultingLLC.com/
[email protected] http://GaslightSoftware.com/
joe chesak wrote:
I want to be able to test a string, to see if the second half of the
string
is a duplicate of the first part of the string, and if so I just want
the
first half (or the second for that matter). I am using ruby-1.9.2.
I can accomplish this with the following:
str = ‘Cyano The CatCyano The Cat’
str = str[0…str.size/2-1] if str[0…str.size/2-1] ==
str[str.size/2…-1]
=> “Cyano The Cat”
Is there a better way?
Joe
str = ‘Cyano The CatCyano The Cat’
o,t=str.chars.to_a.each_slice(str.size/2).map{|x|x}
str = o if t==o
joe chesak wrote:
I want to be able to test a string, to see if the second half of the
string
is a duplicate of the first part of the string, and if so I just want
the
first half (or the second for that matter). I am using ruby-1.9.2.
I can accomplish this with the following:
str = ‘Cyano The CatCyano The Cat’
str = str[0…str.size/2-1] if str[0…str.size/2-1] ==
str[str.size/2…-1]
=> “Cyano The Cat”
Is there a better way?
Joe
str = ‘Cyano The CatCyano The Cat’
o,t=a.each_slice(a.size/2).map{|x|x}
str = o if t==o
On Tue, Sep 21, 2010 at 3:41 PM, joe chesak [email protected] wrote:
Is there a better way?
Joe
Instead of subtracting 1 from the right side of the range, you can just
use
3 dots.
str = ‘Cyano The CatCyano The Cat’
half = str.size / 2
first = str[0…half]
last = str[half…-1]
str = first if first == last
p str
On Sep 21, 11:24 pm, Josh C. [email protected] wrote:
Instead of subtracting 1 from the right side of the range, you can just use
3 dots.
str = ‘Cyano The CatCyano The Cat’
half = str.size / 2
first = str[0…half]
last = str[half…-1]
str = first if first == last
p str
x = s.size
y = x / 2
r = x % 2
puts “#{s[0…y-1]}” if ( r == 0) && (s[0…y-1] == s[y…-1])