Wir spielen: name that function.

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

Wie heisst diese Funktion?

Code: Alles auswählen

#!/usr/bin/env python

def comprfunc(i, b=None):
    c = 0
    j = i
    if b is None:
        b = 8
    lim = 2**b
    for x in xrange(b):
        c  =  (c+i) % lim
        i  = (i<<1) % lim
        c ^=  (j+i) % lim
    return c
Ich habe sie frei erfunden.

Allerdings glaube ich, ich war nicht der erste.

UPDATE:

Ach ja, nochwas:

Code: Alles auswählen

Python 2.5.2 (r252:60911, Dec  2 2008, 09:26:14)
[GCC 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from pycf import *
>>> [comprfunc(i,8) for i in xrange(256)]
[0, 85, 170, 171, 84, 49, 86, 95, 168, 237, 98, 19, 172, 185, 190, 183,
80, 197, 218, 251, 196, 65, 38, 47, 88, 61, 114, 3, 124, 105, 110, 103,
160, 181, 138, 75, 180, 81, 246, 63, 136, 77, 130, 179, 76, 153, 94, 151,
176, 229, 122, 91, 228, 161, 6, 79, 248, 221, 210, 227, 220, 9, 206, 7, 64,
21, 106, 235, 20, 113, 150, 31, 104, 45, 162, 83, 236, 249, 126, 119, 16,
5, 154, 187, 4, 1, 102, 111, 152, 253, 50, 67, 188, 169, 46, 39, 96, 245,
202, 11, 244, 17, 182, 127, 200, 13, 66, 115, 12, 89, 158, 215, 240, 165,
186, 155, 164, 225, 198, 15, 184, 29, 18, 163, 156, 201, 14, 71, 128, 213,
42, 43, 212, 177, 214, 223, 40, 109, 226, 147, 44, 57, 62, 55, 208, 69, 90,
123, 68, 193, 166, 175, 216, 189, 242, 131, 252, 233, 238, 231, 32, 53, 10,
203, 52, 209, 118, 191, 8, 205, 2, 51, 204, 25, 222, 23, 48, 101, 250, 219,
100, 33, 134, 207, 120, 93, 82, 99, 92, 137, 78, 135, 192, 149, 234, 107,
148, 241, 22, 159, 232, 173, 34, 211, 108, 121, 254, 247, 144, 133, 26, 59,
132, 129, 230, 239, 24, 125, 178, 195, 60, 41, 174, 167, 224, 117, 74, 139,
116, 145, 54, 255, 72, 141, 194, 243, 140, 217, 30, 87, 112, 37, 58, 27,
36, 97, 70, 143, 56, 157, 146, 35, 28, 73, 142, 199]
>>>
Vielleicht hilft das ja...
Zuletzt geändert von akis.kapo am Dienstag 6. April 2010, 13:23, insgesamt 1-mal geändert.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Ich rate mal ins Blaue und sage "comprfunc"...

Edit: Und wie heißt diese Funktion?

Code: Alles auswählen

foo=lambda:None;foo.__name__*=2
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

Das muss doch irgendeine bekannte Hash- oder PRNG-Funktion sein.
Kann doch kein Zufall sein, dass sie sowohl "pseudo-zufällig" scheint, als auch bijektiv ist und zudem relativ trivial aufgebaut ist.
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

was bringt denn eigentlich der << operator?
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

INFACT hat geschrieben:was bringt denn eigentlich der << operator?
Linksverschiebung um eine Stelle (ein Bit). Kommt einer Verdoppelung / Multiplikation mal 2 gleich.
Allerdings nehme ich das dann anschliessend modulo lim und "cappe/truncate" des Wert somit.
Antworten