mardi 7 août 2018

Scrambling numbers

I am trying to program an algorithm that scrambles and "unscrambles" integer numbers.

I need two functions forward and backward

  • backward(number): return a "random" number between 0 and 9
  • forward(number): return the input to backward that returns number

I managed to solve the problem like this:

from random import randint

class Scrambler:

    def __init__(self):

        self.mapping = [i for i in range(10)]

        # scramble mapping
        for i in range(1000):
            r1 = randint(0, len(self.mapping) - 1)
            r2 = randint(0, len(self.mapping) - 1)
            temp = self.mapping[r1]
            self.mapping[r1] = self.mapping[r2]
            self.mapping[r2] = temp

    def backward(self, num):
        return self.mapping[num]

    def forward(self, num):
        return self.mapping.index(num)

if __name__ == '__main__':

    s = Scrambler()
    print(s.mapping)
    for i in range(len(s.mapping)):
        print(i, s.forward(i), s.backward(i), s.forward(s.backward(i)), s.backward(s.forward(i)))

Is there a way to do this without using the mapping list? Can i calculate the return value of the functions forward and backward?

The "randomness" of the numbers does not need to be perfect.




Aucun commentaire:

Enregistrer un commentaire