# Translating A Pattern of Data Into Equation, and ultimately code

Discussion in 'Ruby' started by Zach Dennis, Apr 10, 2005.

1. ### Zach DennisGuest

I have the following table of data, and I am looking to create an
equation to recreate the table. If anyone finds this sort of thing fun,
or has a online resource or a good book that helps explaining these
types of math concepts, please take a stab at it or post any info that
might aide me in my discovery! I've been trying the past several hours
and this sort of thing isn't my strong suit...and i'm stuck!

I am first looking to understand how-to make the pattern of data into a
actual math equation...then from there I'd like to write ruby code for
the equation.

Here is the sample data in a table:
- rows represent a different character (as labeled)
- columns represent the position of the character
(examples represent data in decimal notation, not octal/hex)
example: "aaaa" would become 000 003 002 005
example: "zach" would become 027 003 000 012

1 2 3 4 5 6 (etc......)
----------------------------------------------------
a 1 | 0 3 2 5 4 7
b 2 | 3 0 1 6 7 4
c 3 | 2 1 0 7 6 5
d 4 | 5 6 7 0 1 2
e 5 | 4 7 6 1 0 3
f 6 | 7 4 5 2 3 0
g 7 | 6 5 4 3 2 1
h 8 | 9 10 11 12 13 14
i 9 | 8 11 10 13 12 15
j 10 | 11 8 9 14 15 12
k 11 | 10 9 8 15 14 13
l 12 | 13 14 15 8 9 10
m 13 | 12 15 14 9 8 11
n 14 | 15 12 13 10 11 8
o 15 | 14 13 12 11 10 9
p 16 | 17 18 19 20 21 22
q 17 | 16 19 18 21 20 23
r 18 | 19 16 17 22 23 20
s 19 | 18 17 16 23 22 21
t 20 | 21 22 23 16 17 18
u 21 | 20 23 22 17 16 19
v 22 | 23 20 21 18 19 16
w 23 | 22 21 20 19 18 17
x 24 | 25 26 27 28 29 30
y 25 | 24 27 26 29 28 31
z 26 | 27 24 25 30 31 28

Thanks again if you decide to attempt this...

Zach

Zach Dennis, Apr 10, 2005

2. ### Phil TomsonGuest

In article <>,
Zach Dennis <> wrote:
>I have the following table of data, and I am looking to create an
>equation to recreate the table. If anyone finds this sort of thing fun,
>or has a online resource or a good book that helps explaining these
>types of math concepts, please take a stab at it or post any info that
>might aide me in my discovery! I've been trying the past several hours
>and this sort of thing isn't my strong suit...and i'm stuck!
>
>I am first looking to understand how-to make the pattern of data into a
>actual math equation...then from there I'd like to write ruby code for
>the equation.
>
>Here is the sample data in a table:
> - rows represent a different character (as labeled)
> - columns represent the position of the character
> (examples represent data in decimal notation, not octal/hex)
> example: "aaaa" would become 000 003 002 005
> example: "zach" would become 027 003 000 012
>
> 1 2 3 4 5 6 (etc......)
>----------------------------------------------------
>a 1 |0 3 2 5 4 7
>b 2 |3 0 1 6 7 4
>c 3 |2 1 0 7 6 5
>d 4 |5 6 7 0 1 2
>e 5 |4 7 6 1 0 3
>f 6 |7 4 5 2 3 0
>g 7 |6 5 4 3 2 1
>h 8 |9 10 11 12 13 14
>i 9 |8 11 10 13 12 15
>j 10 |11 8 9 14 15 12
>k 11 |10 9 8 15 14 13
>l 12 |13 14 15 8 9 10
>m 13 |12 15 14 9 8 11
>n 14 |15 12 13 10 11 8
>o 15 |14 13 12 11 10 9
>p 16 |17 18 19 20 21 22
>q 17 |16 19 18 21 20 23
>r 18 |19 16 17 22 23 20
>s 19 |18 17 16 23 22 21
>t 20 |21 22 23 16 17 18
>u 21 |20 23 22 17 16 19
>v 22 |23 20 21 18 19 16
>w 23 |22 21 20 19 18 17
>x 24 |25 26 27 28 29 30
>y 25 |24 27 26 29 28 31
>z 26 |27 24 25 30 31 28

I think the table got a bit shifted so I shifted it back...

What's the application for this or is it just a brain teaser?

Just a few ideas:

For character 'a' it looks like the 'formula' would be something like:
if(position.odd?)
return position - 1
else
return position + 1
end

(BTW: it also looks like the numbers in column 1 follow this same
pattern)

For character 'b' it's a bit stranger, recreating that row of the table:

> 1 2 3 4 5 6 (7) (8)
>----------------------------------------------------
>b 2 |3 0 1 6 7 4 5 10

(1+2) (2-2) (3-2) (4+2) (5+2) (6-2) (7-2) (8+2)

I'm guessing the 7 and 8 columns will follow the same pattern.

Also, I'd look into the idea that maybe these are modulo-n counters (?)
However, if I look at the row numbers I can see that they directly map
onto columns as well, look at row 'c' and column 3:

1 2 3 4 5 6 (etc......)
----------------------------------------------------
2
1
c 3 |2 1 0 7 6 5
7
6
5

Phil

Phil Tomson, Apr 11, 2005

3. ### Csaba HenkGuest

On 2005-04-10, Zach Dennis <> wrote:
> I have the following table of data, and I am looking to create an
> equation to recreate the table. If anyone finds this sort of thing fun,
> or has a online resource or a good book that helps explaining these
> types of math concepts, please take a stab at it or post any info that
> might aide me in my discovery! I've been trying the past several hours
> and this sort of thing isn't my strong suit...and i'm stuck!
>
> I am first looking to understand how-to make the pattern of data into a
> actual math equation...then from there I'd like to write ruby code for
> the equation.
>
> Here is the sample data in a table:
> - rows represent a different character (as labeled)
> - columns represent the position of the character
> (examples represent data in decimal notation, not octal/hex)
> example: "aaaa" would become 000 003 002 005
> example: "zach" would become 027 003 000 012
>
> 1 2 3 4 5 6 (etc......)
> ----------------------------------------------------
> a 1 | 0 3 2 5 4 7
> b 2 | 3 0 1 6 7 4
> c 3 | 2 1 0 7 6 5

OK I see how you turn "zach" into 027 003 000 012.

But not more. Is this table filled with random/real-life data or is
there some rule I don't get? What is it exactly that you want an
equation for?

Do you really want an equation or just an expression?

FYI, "x**2 + 2" is an expression, "x**2 + 2 = 13" is an equation (ie.,
equations are predicative, like "I go fishing tomorrow", expressions are
descriptive, like "the picture on the wall".

Csaba

Csaba Henk, Apr 11, 2005
4. ### Zach DennisGuest

Phil Tomson wrote:

> I think the table got a bit shifted so I shifted it back...
>
> What's the application for this or is it just a brain teaser?

WebSTAR, is a Web/Email/Ftp/etc... server that runs on OSX. The Ftp
portion hasn't been updated in several years, and the password is
encrypted for each user. Users have to be added/removed via a GUI right
now, so I am writing a command line ruby program to add and remove
accounts from the user data file. I have everything except for the
password encryption part done. I struggled with trying to decipher it
myself, and was hoping someone better in this area of math be able to
help me out. My command line utility will be open source and donated to
everyone and especially the WebSTAR community.

> Also, I'd look into the idea that maybe these are modulo-n counters (?)

This was what I was looking into, but I couldn't find one that would
consistently work for multiple rows/columns. I am/was thinking that
there would be a expression that could be used across the board.

> However, if I look at the row numbers I can see that they directly map
> onto columns as well, look at row 'c' and column 3:
>
> 1 2 3 4 5 6 (etc......)
> ----------------------------------------------------
> 2
> 1
> c 3 |2 1 0 7 6 5
> 7
> 6
> 5
>

Thanks thus far Phil. If you have any other ideas, please feel free to
post em.

Zach

Zach Dennis, Apr 11, 2005
5. ### Zach DennisGuest

Csaba Henk wrote:

> OK I see how you turn "zach" into 027 003 000 012.
>
> But not more. Is this table filled with random/real-life data or is
> there some rule I don't get? What is it exactly that you want an
> equation for?
>

It is real life data pulled straight from a data file. See previous
response to Phil Thomson's post for what the data file is used for.

When passwords are stored the characters are stored based on their
position in the password. I was hoping there would be an expression that
could be used to create the table.

> Do you really want an equation or just an expression?
>
> FYI, "x**2 + 2" is an expression, "x**2 + 2 = 13" is an equation (ie.,
> equations are predicative, like "I go fishing tomorrow", expressions are
> descriptive, like "the picture on the wall".

I would like an expression that can be used to recreate the table i
posted before, if i have my understanding right of expression and
equation. I'd like to say:
row - col * (col-1)

so i could fill in the row/col variables and recreate my table...Thanks
for posting Csaba. Any other insight would be very appreciated.

Zach

Zach Dennis, Apr 11, 2005
6. ### Edgardo HamesGuest

On Apr 10, 2005 8:45 PM, Zach Dennis <> wrote:
> I have the following table of data, and I am looking to create an
> equation to recreate the table. If anyone finds this sort of thing fun,
> or has a online resource or a good book that helps explaining these
> types of math concepts, please take a stab at it or post any info that
> might aide me in my discovery! I've been trying the past several hours
> and this sort of thing isn't my strong suit...and i'm stuck!
>
> I am first looking to understand how-to make the pattern of data into a
> actual math equation...then from there I'd like to write ruby code for
> the equation.
>
> Here is the sample data in a table:
> - rows represent a different character (as labeled)
> - columns represent the position of the character
> (examples represent data in decimal notation, not octal/hex)
> example: "aaaa" would become 000 003 002 005
> example: "zach" would become 027 003 000 012
>
> 1 2 3 4 5 6 (etc......)
> ----------------------------------------------------
> a 1 | 0 3 2 5 4 7
> b 2 | 3 0 1 6 7 4
> c 3 | 2 1 0 7 6 5
> d 4 | 5 6 7 0 1 2
> e 5 | 4 7 6 1 0 3
> f 6 | 7 4 5 2 3 0
> g 7 | 6 5 4 3 2 1
> h 8 | 9 10 11 12 13 14
> i 9 | 8 11 10 13 12 15
> j 10 | 11 8 9 14 15 12
> k 11 | 10 9 8 15 14 13
> l 12 | 13 14 15 8 9 10
> m 13 | 12 15 14 9 8 11
> n 14 | 15 12 13 10 11 8
> o 15 | 14 13 12 11 10 9
> p 16 | 17 18 19 20 21 22
> q 17 | 16 19 18 21 20 23
> r 18 | 19 16 17 22 23 20
> s 19 | 18 17 16 23 22 21
> t 20 | 21 22 23 16 17 18
> u 21 | 20 23 22 17 16 19
> v 22 | 23 20 21 18 19 16
> w 23 | 22 21 20 19 18 17
> x 24 | 25 26 27 28 29 30
> y 25 | 24 27 26 29 28 31
> z 26 | 27 24 25 30 31 28
>

First, I transposed the table since the text editor works best across lines not
columns I looked at the deltas between the columns and the natural sequence
of numbers and I found an interesting pattern. I will attempt to give you an
explanation of what I came up with, and I hope it's in any way helpful.

For columns numbered with a power of two (1, 2, 4, 8, 16, ...) the deltas are
the power of two alternating its sign +/-.
It's rather difficult to explain, so please, take a look at the following table:

Input 1 2 3 4 5 6 7 8 9 10 11 12
-----------------------------------
Col 1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1
Col 2 +2 -2 -2 +2 +2 -2 -2 +2 -2 -2 +2 +2
Col 4 +4 +4 +4 -4 -4 -4 -4 +4 +4 +4 +4 -4
Col 8 +8 +8 +8 +8 +8 +8 +8 -8 -8 -8 -8 -8

The sign is positive until you reach the given power of two, then it changes to
negative for that power of two times and will keep changing back and forth (it
may help you trying to complete some other values on my table, since I don't
know whether I make myself clear).

The values for the deltas on the other columns is a combination of these
previous columns (just like any number can be expressed as a sum of some powers
of two) For example, on column 3, the delta equals the delta on col 1 plus the
delta on col 2. Take a look:

Col 1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1
Col 2 +2 -2 -2 +2 +2 -2 -2 +2 -2 -2 +2 +2
-----------------------------------------------
Col 3 +1 -1 -3 +3 +1 -1 -3 +3 -3 -1 +1 +3

Column 5 can be calculated based on col 1 + col 4 (5 = 0101)

Col 1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1
Col 4 +4 +4 +4 -4 -4 -4 -4 +4 +4 +4 +4 -4
-----------------------------------------------
Col 5 +3 +5 +3 -3 -5 -3 -5 +5 +3 +5 +3 -3

Column 6 can be calculated based on col 2 + col 4 (6 = 0110)

Col 2 +2 -2 -2 +2 +2 -2 -2 +2 -2 -2 +2 +2
Col 4 +4 +4 +4 -4 -4 -4 -4 +4 +4 +4 +4 -4
-----------------------------------------------
Col 6 +6 +2 +2 -2 -2 -6 -6 +6 +2 +2 +6 -2

Column 7 can be calculated based on col 1 + col 2 + col 4 (7 = 0111)

Col 1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1
Col 2 +2 -2 -2 +2 +2 -2 -2 +2 -2 -2 +2 +2
Col 4 +4 +4 +4 -4 -4 -4 -4 +4 +4 +4 +4 -4
-----------------------------------------------
Col 7 +5 +3 +1 -1 -3 -5 -7 +7 +1 +3 +5 -1

Column 9 is no exception. Take column 1 and 8 and add them (9 = 1001)

Col 1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1
Col 8 +8 +8 +8 +8 +8 +8 +8 -8 -8 -8 -8 -8
-----------------------------------------------
Col 9 +7 +9 +7 +9 +7 +9 +7 -7 -9 -7 -9 -7

I guess you can write a formula for the table based on this
explanation (which I hope was clear enough). If you need further
assistance, I'll be keeping an eye on this thread. I think it was an
interesting problem, very well suited for a Ruby Quiz

Kind regards,
Ed
--
Encontrá a "Tu psicópata favorito" http://tuxmaniac.blogspot.com

Edgardo Hames, Apr 11, 2005
7. ### linus sellbergGuest

linus sellberg, Apr 11, 2005
8. ### Martin DeMelloGuest

Edgardo Hames <> wrote:
>
> Input 1 2 3 4 5 6 7 8 9 10 11 12
> -----------------------------------
> Col 1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1
> Col 2 +2 -2 -2 +2 +2 -2 -2 +2 -2 -2 +2 +2
> Col 4 +4 +4 +4 -4 -4 -4 -4 +4 +4 +4 +4 -4
> Col 8 +8 +8 +8 +8 +8 +8 +8 -8 -8 -8 -8 -8

Note that if you read down the columns, this gives you each number in
binary, using - for 1 and + for 0

martin

Martin DeMello, Apr 11, 2005
9. ### Csaba HenkGuest

On 2005-04-11, Edgardo Hames <> wrote:
> On Apr 10, 2005 8:45 PM, Zach Dennis <> wrote:
> For columns numbered with a power of two (1, 2, 4, 8, 16, ...) the deltas are
> the power of two alternating its sign +/-.
> It's rather difficult to explain, so please, take a look at the following table:
>
> Input 1 2 3 4 5 6 7 8 9 10 11 12
> -----------------------------------
> Col 1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1
> Col 2 +2 -2 -2 +2 +2 -2 -2 +2 -2 -2 +2 +2
> Col 4 +4 +4 +4 -4 -4 -4 -4 +4 +4 +4 +4 -4
> Col 8 +8 +8 +8 +8 +8 +8 +8 -8 -8 -8 -8 -8

That's sort of cool! Congrats!

I don't think there would be a concise expression for this table. I
mean, there is no two-variable polynomial which would describe this
table.

Proof: assume there is p(x,y) s.t. the i-th element of the j-th row can
be obtained as p(i,j). Then fix j=1. Thus you get a polynomial q(x) as
well. Take the delta of it: d(x) = q(x) - q(x-1). That's a polynomial
again, and we know its values at positive integers: d(n) = 1 if n is
even and d(n) = -1 if n is odd. As you'd write in ruby, d(n).abs <= 1.
But that's a contradiction, as polynomials tend to either plus or minus
infinity at infinity.

So the best formalization is writing an algorithm which calculates table
values based on the description Edgardo gave.

Csaba

Csaba Henk, Apr 11, 2005
10. ### Martin DeMelloGuest

Zach Dennis <> wrote:
>
> 1 2 3 4 5 6 (etc......)
> ----------------------------------------------------
> a 1 | 0 3 2 5 4 7
> b 2 | 3 0 1 6 7 4
> c 3 | 2 1 0 7 6 5
> d 4 | 5 6 7 0 1 2
> e 5 | 4 7 6 1 0 3
> f 6 | 7 4 5 2 3 0
> g 7 | 6 5 4 3 2 1
> h 8 | 9 10 11 12 13 14
> i 9 | 8 11 10 13 12 15
> j 10 | 11 8 9 14 15 12
> k 11 | 10 9 8 15 14 13
> l 12 | 13 14 15 8 9 10
> m 13 | 12 15 14 9 8 11
> n 14 | 15 12 13 10 11 8
> o 15 | 14 13 12 11 10 9
> p 16 | 17 18 19 20 21 22
> q 17 | 16 19 18 21 20 23
> r 18 | 19 16 17 22 23 20
> s 19 | 18 17 16 23 22 21
> t 20 | 21 22 23 16 17 18
> u 21 | 20 23 22 17 16 19
> v 22 | 23 20 21 18 19 16
> w 23 | 22 21 20 19 18 17
> x 24 | 25 26 27 28 29 30
> y 25 | 24 27 26 29 28 31
> z 26 | 27 24 25 30 31 28

Gotit! Try letter xor column

martin

Martin DeMello, Apr 11, 2005
11. ### Martin AnkerlGuest

> Gotit! Try letter xor column

Wow, very good! I could not figure this out myself. Here is the very
simple formula:

def encode(letter, column)
(letter-?a + 1)^column
end

encode(?z, 1)
encode(?a, 2)
encode(?c, 3)
encode(?h, 4)

gives the correct result.

martinus

Martin Ankerl, Apr 11, 2005
12. ### Edgardo HamesGuest

On Apr 11, 2005 10:34 AM, Martin DeMello <> wrote:
> Zach Dennis <> wrote:
> >
> > 1 2 3 4 5 6 (etc......)
> > ----------------------------------------------------
> > a 1 | 0 3 2 5 4 7
> > b 2 | 3 0 1 6 7 4

>
> Gotit! Try letter xor column
>

Martin,

You are the man! And I'm not statying awake until 2 am anymore

Cheers,
Ed

--
Encontrá a "Tu psicópata favorito" http://tuxmaniac.blogspot.com

Edgardo Hames, Apr 11, 2005
13. ### Zach DennisGuest

Martin DeMello wrote:

>
> Gotit! Try letter xor column
>

Awesome!! Thank you very very very much Martin!!!!

Zach

Zach Dennis, Apr 11, 2005
14. ### Glenn ParkerGuest

Martin Ankerl wrote:
>
> Wow, very good! I could not figure this out myself. Here is the very
> simple formula:
>
> def encode(letter, column)
> (letter-?a + 1)^column
> end

Golf, anyone? This "encodes" the full string:

s.gsub(/./){|c|((c[0]-?`)^(\$`.size+1)).chr}

--
Glenn Parker | glenn.parker-AT-comcast.net | <http://www.tetrafoil.com/>

Glenn Parker, Apr 11, 2005
15. ### Martin DeMelloGuest

Zach Dennis <> wrote:
> Martin DeMello wrote:
>
> > Gotit! Try letter xor column

>
> Awesome!! Thank you very very very much Martin!!!!

Welcome It was Edgardo Hames's post that gave me the clue.

martin

Martin DeMello, Apr 11, 2005
16. ### Zach DennisGuest

Edgardo Hames wrote:
> On Apr 10, 2005 8:45 PM, Zach Dennis <> wrote:
>
>>I have the following table of data, and I am looking to create an
>>equation to recreate the table. If anyone finds this sort of thing fun,
>>or has a online resource or a good book that helps explaining these
>>types of math concepts, please take a stab at it or post any info that
>>might aide me in my discovery! I've been trying the past several hours
>>and this sort of thing isn't my strong suit...and i'm stuck!
>>
>>I am first looking to understand how-to make the pattern of data into a
>>actual math equation...then from there I'd like to write ruby code for
>>the equation.
>>
>>Here is the sample data in a table:
>> - rows represent a different character (as labeled)
>> - columns represent the position of the character
>> (examples represent data in decimal notation, not octal/hex)
>> example: "aaaa" would become 000 003 002 005
>> example: "zach" would become 027 003 000 012
>>
>> 1 2 3 4 5 6 (etc......)
>>----------------------------------------------------
>>a 1 | 0 3 2 5 4 7
>>b 2 | 3 0 1 6 7 4
>>c 3 | 2 1 0 7 6 5
>>d 4 | 5 6 7 0 1 2
>>e 5 | 4 7 6 1 0 3
>>f 6 | 7 4 5 2 3 0
>>g 7 | 6 5 4 3 2 1
>>h 8 | 9 10 11 12 13 14
>>i 9 | 8 11 10 13 12 15
>>j 10 | 11 8 9 14 15 12
>>k 11 | 10 9 8 15 14 13
>>l 12 | 13 14 15 8 9 10
>>m 13 | 12 15 14 9 8 11
>>n 14 | 15 12 13 10 11 8
>>o 15 | 14 13 12 11 10 9
>>p 16 | 17 18 19 20 21 22
>>q 17 | 16 19 18 21 20 23
>>r 18 | 19 16 17 22 23 20
>>s 19 | 18 17 16 23 22 21
>>t 20 | 21 22 23 16 17 18
>>u 21 | 20 23 22 17 16 19
>>v 22 | 23 20 21 18 19 16
>>w 23 | 22 21 20 19 18 17
>>x 24 | 25 26 27 28 29 30
>>y 25 | 24 27 26 29 28 31
>>z 26 | 27 24 25 30 31 28
>>

>
>
> First, I transposed the table since the text editor works best across lines not
> columns I looked at the deltas between the columns and the natural sequence
> of numbers and I found an interesting pattern. I will attempt to give you an
> explanation of what I came up with, and I hope it's in any way helpful.
>
> For columns numbered with a power of two (1, 2, 4, 8, 16, ...) the deltas are
> the power of two alternating its sign +/-.
> It's rather difficult to explain, so please, take a look at the following table:
>
> Input 1 2 3 4 5 6 7 8 9 10 11 12
> -----------------------------------
> Col 1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1
> Col 2 +2 -2 -2 +2 +2 -2 -2 +2 -2 -2 +2 +2
> Col 4 +4 +4 +4 -4 -4 -4 -4 +4 +4 +4 +4 -4
> Col 8 +8 +8 +8 +8 +8 +8 +8 -8 -8 -8 -8 -8
>
> The sign is positive until you reach the given power of two, then it changes to
> negative for that power of two times and will keep changing back and forth (it
> may help you trying to complete some other values on my table, since I don't
> know whether I make myself clear).
>
> The values for the deltas on the other columns is a combination of these
> previous columns (just like any number can be expressed as a sum of some powers
> of two) For example, on column 3, the delta equals the delta on col 1 plus the
> delta on col 2. Take a look:
>
> Col 1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1
> Col 2 +2 -2 -2 +2 +2 -2 -2 +2 -2 -2 +2 +2
> -----------------------------------------------
> Col 3 +1 -1 -3 +3 +1 -1 -3 +3 -3 -1 +1 +3
>
> Column 5 can be calculated based on col 1 + col 4 (5 = 0101)
>
> Col 1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1
> Col 4 +4 +4 +4 -4 -4 -4 -4 +4 +4 +4 +4 -4
> -----------------------------------------------
> Col 5 +3 +5 +3 -3 -5 -3 -5 +5 +3 +5 +3 -3
>
> Column 6 can be calculated based on col 2 + col 4 (6 = 0110)
>
> Col 2 +2 -2 -2 +2 +2 -2 -2 +2 -2 -2 +2 +2
> Col 4 +4 +4 +4 -4 -4 -4 -4 +4 +4 +4 +4 -4
> -----------------------------------------------
> Col 6 +6 +2 +2 -2 -2 -6 -6 +6 +2 +2 +6 -2
>
> Column 7 can be calculated based on col 1 + col 2 + col 4 (7 = 0111)
>
> Col 1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1
> Col 2 +2 -2 -2 +2 +2 -2 -2 +2 -2 -2 +2 +2
> Col 4 +4 +4 +4 -4 -4 -4 -4 +4 +4 +4 +4 -4
> -----------------------------------------------
> Col 7 +5 +3 +1 -1 -3 -5 -7 +7 +1 +3 +5 -1
>
> Column 9 is no exception. Take column 1 and 8 and add them (9 = 1001)
>
> Col 1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1
> Col 8 +8 +8 +8 +8 +8 +8 +8 -8 -8 -8 -8 -8
> -----------------------------------------------
> Col 9 +7 +9 +7 +9 +7 +9 +7 -7 -9 -7 -9 -7
>
> I guess you can write a formula for the table based on this
> explanation (which I hope was clear enough). If you need further
> assistance, I'll be keeping an eye on this thread. I think it was an
> interesting problem, very well suited for a Ruby Quiz

Edgardo...

Thank you for your reply. The patterns found in this table is really
weird. I found 2 patterns myself, and then you found a completely
different one. Now that I know that it's an xor that is causing this, I
will be able to recognize these types of patterns in the future. Thanks
for your post and for your explanation. If I come up with any other
pattern/algorithmic type of problems I will be sure to send it to James
Edward Gray for a Ruby Quiz.,

Zach

Zach Dennis, Apr 11, 2005
17. ### Martin DeMelloGuest

Glenn Parker <> wrote:
>
> Golf, anyone? This "encodes" the full string:
>
> s.gsub(/./){|c|((c[0]-?`)^(\$`.size+1)).chr}

returns a string of \000 here

irb(main):003:0> s = "abc"
=> "abc"
irb(main):004:0> s.gsub(/./){|c|((c[0]-?`)^(\$`.size+1)).chr}
=> "\000\000\000"
irb(main):005:0> VERSION
=> "1.8.2"

martin

Martin DeMello, Apr 12, 2005
18. ### Glenn ParkerGuest

Martin DeMello wrote:
>>
>>s.gsub(/./){|c|((c[0]-?`)^(\$`.size+1)).chr}

>
> returns a string of \000 here
>
> irb(main):003:0> s = "abc"
> => "abc"
> irb(main):004:0> s.gsub(/./){|c|((c[0]-?`)^(\$`.size+1)).chr}
> => "\000\000\000"

Well, that's pretty funny, but it's also correct. This particular
encoding, operating on the alphabet, i.e. "abcdefg..." produces all

--
Glenn Parker | glenn.parker-AT-comcast.net | <http://www.tetrafoil.com/>

Glenn Parker, Apr 12, 2005
19. ### Martin DeMelloGuest

Glenn Parker <> wrote:
> >
> > irb(main):003:0> s = "abc"
> > => "abc"
> > irb(main):004:0> s.gsub(/./){|c|((c[0]-?`)^(\$`.size+1)).chr}
> > => "\000\000\000"

>
> Well, that's pretty funny, but it's also correct. This particular
> encoding, operating on the alphabet, i.e. "abcdefg..." produces all

LOL! Okay, I feel silly now

martin

Martin DeMello, Apr 12, 2005
20. ### Brian CandlerGuest

On Mon, Apr 11, 2005 at 10:29:39AM +0900, Phil Tomson wrote:
> >Here is the sample data in a table:
> > - rows represent a different character (as labeled)
> > - columns represent the position of the character
> > (examples represent data in decimal notation, not octal/hex)
> > example: "aaaa" would become 000 003 002 005
> > example: "zach" would become 027 003 000 012
> >
> > 1 2 3 4 5 6 (etc......)
> >----------------------------------------------------

- 0 |1 2 3 4 5 6 <<<<<<< ADDED
> >a 1 |0 3 2 5 4 7
> >b 2 |3 0 1 6 7 4
> >c 3 |2 1 0 7 6 5
> >d 4 |5 6 7 0 1 2
> >e 5 |4 7 6 1 0 3
> >f 6 |7 4 5 2 3 0
> >g 7 |6 5 4 3 2 1
> >h 8 |9 10 11 12 13 14
> >i 9 |8 11 10 13 12 15
> >j 10 |11 8 9 14 15 12
> >k 11 |10 9 8 15 14 13
> >l 12 |13 14 15 8 9 10
> >m 13 |12 15 14 9 8 11
> >n 14 |15 12 13 10 11 8
> >o 15 |14 13 12 11 10 9
> >p 16 |17 18 19 20 21 22
> >q 17 |16 19 18 21 20 23
> >r 18 |19 16 17 22 23 20
> >s 19 |18 17 16 23 22 21
> >t 20 |21 22 23 16 17 18
> >u 21 |20 23 22 17 16 19
> >v 22 |23 20 21 18 19 16
> >w 23 |22 21 20 19 18 17
> >x 24 |25 26 27 28 29 30
> >y 25 |24 27 26 29 28 31
> >z 26 |27 24 25 30 31 28

I've added the missing row, which should make the pattern clearer.

The table value is just the binary XOR of the column number and the
character number.

The following Ruby program recreates the table:

(1..26).each do |char|
printf("%2d |", char)
(1..6).each do |col|
printf("%4d", col ^ char)
end
print "\n"
end

Regards,

Brian.

Brian Candler, Apr 14, 2005