Skip to content

Commit

Permalink
Update chaos_machine.py
Browse files Browse the repository at this point in the history
  • Loading branch information
parkgwanjong committed Dec 7, 2018
1 parent a8bdec1 commit 45c94f6
Showing 1 changed file with 25 additions and 25 deletions.
50 changes: 25 additions & 25 deletions hashes/chaos_machine.py
Original file line number Diff line number Diff line change
@@ -1,79 +1,79 @@
"""example of simple chaos machine"""
"""간단한 카오스 머신의 예"""
from __future__ import print_function

try:
input = raw_input # Python 2
input = raw_input # 파이썬 2
except NameError:
pass # Python 3
pass # 파이썬 3

# Chaos Machine (K, t, m)
# 카오스 머신 (K, t, m)
K = [0.33, 0.44, 0.55, 0.44, 0.33]; t = 3; m = 5

# Buffer Space (with Parameters Space)
# 버퍼 공간 (매개 변수 공간 포함)
buffer_space, params_space = [], []

# Machine Time
# 머신 시간
machine_time = 0

def push(seed):
global buffer_space, params_space, machine_time, \
K, m, t

# Choosing Dynamical Systems (All)
# 동적 시스템 선택 (모두)
for key, value in enumerate(buffer_space):
# Evolution Parameter
# 진화 매개 변수
e = float(seed / value)

# Control Theory: Orbit Change
# 제어 이론 : 궤도 변경
value = (buffer_space[(key + 1) % m] + e) % 1

# Control Theory: Trajectory Change
# 제어 이론 : 탄도 변화
r = (params_space[key] + e) % 1 + 3

# Modification (Transition Function) - Jumps
# 변경 (전환 기능) - 점프
buffer_space[key] = \
round(float(r * value * (1 - value)), 10)
params_space[key] = \
r # Saving to Parameters Space
r # 매개 변수 공간에 저장

# Logistic Map
# 물류지도
assert max(buffer_space) < 1
assert max(params_space) < 4

# Machine Time
# 머신 타임
machine_time += 1

def pull():
global buffer_space, params_space, machine_time, \
K, m, t

# PRNG (Xorshift by George Marsaglia)
# PRNG (George Marsaglia의 Xorshift)
def xorshift(X, Y):
X ^= Y >> 13
Y ^= X << 17
X ^= Y >> 5
return X

# Choosing Dynamical Systems (Increment)
# 동적 시스템 선택 (증가)
key = machine_time % m

# Evolution (Time Length)
# 진화 (시간 길이)
for i in range(0, t):
# Variables (Position + Parameters)
# 변수 (위치 + 매개 변수)
r = params_space[key]
value = buffer_space[key]

# Modification (Transition Function) - Flow
# 변경 (전환 기능) - 흐름
buffer_space[key] = \
round(float(r * value * (1 - value)), 10)
params_space[key] = \
(machine_time * 0.01 + r * 1.01) % 1 + 3

# Choosing Chaotic Data
# 혼돈 데이터 선택하기
X = int(buffer_space[(key + 2) % m] * (10 ** 10))
Y = int(buffer_space[(key - 2) % m] * (10 ** 10))

# Machine Time
# 머신 타임
machine_time += 1

return xorshift(X, Y) % 0xFFFFFFFF
Expand All @@ -87,19 +87,19 @@ def reset():

#######################################

# Initialization
# 초기화
reset()

# Pushing Data (Input)
# 입력값 대입
import random
message = random.sample(range(0xFFFFFFFF), 100)
for chunk in message:
push(chunk)

# for controlling
# 제어를 위함
inp = ""

# Pulling Data (Output)
# 결과값 출력
while inp in ("e", "E"):
print("%s" % format(pull(), '#04x'))
print(buffer_space); print(params_space)
Expand Down

0 comments on commit 45c94f6

Please sign in to comment.