# String parity module

**URL:** <https://www.ruby-forum.com/t/string-parity-module/102455>\
**Category:** Ruby\
**Created:** [August 15, 2006, 2:17pm UTC](https://www.ruby-forum.com/t/string-parity-module/102455 "2006-08-15T14:17:46Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![snacktime](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/7feea3/32.png) [@snacktime](https://www.ruby-forum.com/u/snacktime)\
**Post date:** [August 15, 2006, 2:17pm UTC](https://www.ruby-forum.com/t/string-parity-module/102455/1 "2006-08-15T14:17:46Z")

</div>

Anyone know of an existing module for settings odd/even/space parity on  
strings?

---

<div class="post-metadata">

**Author:** ![snacktime](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/7feea3/32.png) [@snacktime](https://www.ruby-forum.com/u/snacktime)\
**Post date:** [August 15, 2006, 2:18pm UTC](https://www.ruby-forum.com/t/string-parity-module/102455/2 "2006-08-15T14:18:45Z")

</div>

If anyone has any input on how to write this better or a better way to  
implement it let me know. In any case here is a class for setting  
odd/even/space parity on strings.

class StringParity

def initialize  
even\_bits = “\0”  
odd\_bits = “\200”  
codes = “”  
ascii = []

```
@even_parity = []
@odd_parity = []
@space_parity = []

8.times do
  even_bits << odd_bits
  odd_bits = even_bits.clone
  odd_bits.tr!("\0\200","\200\0")
end

(0..255).collect {|i| ascii << i}
codes = ascii.pack('C*')
(0..127).collect { |i| @space_parity[i + 128] = codes[i] }
@even_parity = (0..codes.length-1).collect { |i| codes[i] ^ 

```

even\_bits[i] }  
@odd\_parity = (0…codes.length-1).collect { |i| codes[i] ^  
odd\_bits[i] }  
end

def setEvenParity(str)  
new = []  
str.each\_byte {|b| new \<\< @even\_parity[b]}  
new.pack(“C\*”)  
end

def setOddParity(str)  
new = []  
str.each\_byte {|b| new \<\< @odd\_parity[b]}  
new.pack(“C\*”)  
end

def setSpaceParity(str)  
new = []  
str = str.unpack(“C\*”)  
str.collect {|b| new \<\< (@space\_parity[b] || b)}  
new.pack(“C\*”)  
end

end

s = StringParity.new  
str = “testing12345678910()\*&^%@!~”

str = s.setEvenParity(str)  
print “#{str}\n”

str = s.setSpaceParity(str)  
print “#{str}\n”

str = s.setOddParity(str)  
print “#{str}\n”

str = s.setSpaceParity(str)  
print “#{str}\n”
