diff --git a/py/skewed_random_generator.py b/py/skewed_random_generator.py index 74c91be..f8d99ab 100644 --- a/py/skewed_random_generator.py +++ b/py/skewed_random_generator.py @@ -14,39 +14,42 @@ def __init__(self, N = 2, - alphabet=['A','B','C','D','E','F'], - target='A', trials = 100, + alphabet=['A','B','C','D','E','F'], T = 20, L1 = 10, L2 = 10): - self.N, self.alphabet, self.target, self.trials, self.T, self.L1, self.L2 = N, alphabet, target, trials, T, L1, L2 + self.N, self.alphabet, self.trials, self.T, self.L1, self.L2 = N, alphabet, trials, T, L1, L2 self.D = trials - T - L1 - L2 - try: - self.alphabet.remove(target) - except ValueError: - #logging.info('Nice, alphabet does not contain the target stimulus!') - pass - def generate(self): + def generate(self) -> str: + trial = 1 + self.seq = [] + while(trial <= self.trials): + self.seq += self.random_stimulus(trial) + trial += 1 + return self.seq - pass - - def random_trial(self, trial): + def random_stimulus(self, trial): rnd = random.randint(1, self.trials - trial + 1) T, L1, L2 = self.T, self.L1, self.L2 - if rnd < T: + if rnd <= T and len(self.seq) >= self.N: self.T -= 1 - return self.target - elif T <= rnd < T + L1: + return self.seq[-self.N] + elif T < rnd <= T + L1 and len(self.seq) >= self.N+1: self.L1 -= 1 return self.seq[-(self.N+1)] - elif T + L1 <= rnd < T + L1 + L2: + elif T + L1 < rnd <= T + L1 + L2 and len(self.seq) >= self.N-1: self.L2 -= 1 return self.seq[-(self.N-1)] + # distractor self.D -= 1 - return self.random_distractor() + alphabet = [item for item in self.alphabet if item not in self.seq[-self.N-1:-self.N+1]] + return random.choice(alphabet) - def random_distractor(self): - pass \ No newline at end of file + +if __name__ == '__main__': + generator = SkewedRandomGenerator() + seq = generator.generate() + print('Skewed Random Sequence: %s' % ''.join(seq)) \ No newline at end of file