Using a permutation table for simplex noise without storing it Generating Simplex noise requires a permutation table for randomisation (e.g. see this question or this example). In some applications, we need to persist the state of the permutation table. This can be done by creating the table, e.g. using def permutation table(seed) table size 2 10 arbitrary for this question l range(1, table size 1) random.seed(seed) ensures the same shuffle for a given seed random.shuffle(l) return l l see shared link why l l is a detail and storing it. Can we avoid storing the full table by generating the required elements every time they are required? Specifically, currently I store the table and call it using table i (table is a list). Can I avoid storing it by having a function that computes the element i, e.g. get table element(seed, i). I'm aware that cryptography already solved this problem using block cyphers, however, I found it too complex to go deep and implement a block cypher. Does anyone knows a simple implementation of a block cypher to this problem?