Compare commits
2 commits
47c2d6a63b
...
3799bcb0fb
Author | SHA1 | Date | |
---|---|---|---|
|
3799bcb0fb | ||
|
fdd5db23bf |
2 changed files with 128 additions and 0 deletions
58
MonteCarlo.c
Normal file
58
MonteCarlo.c
Normal file
|
@ -0,0 +1,58 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
struct Simulation {
|
||||
double betsize;
|
||||
double STARTING_BANKROLL;
|
||||
double bankroll;
|
||||
int attempts;
|
||||
};
|
||||
|
||||
int roll() {
|
||||
return (random() % 7) + 1;
|
||||
}
|
||||
|
||||
double handle(int player, int house) {
|
||||
int diff = house - player;
|
||||
if (diff >= 1) {return 0;}
|
||||
else if (diff == -6) {return 2;}
|
||||
else if (diff == 0) {return 0;}
|
||||
else {return 1.5;}
|
||||
}
|
||||
|
||||
bool calculate(struct Simulation* simulation) {
|
||||
if (simulation->bankroll >= simulation->betsize) {
|
||||
simulation->bankroll -= simulation->betsize;
|
||||
int player_roll = roll();
|
||||
int house_roll = roll();
|
||||
double modifier = handle(player_roll, house_roll);
|
||||
simulation->bankroll += (modifier * simulation->betsize);
|
||||
simulation->attempts++;
|
||||
return false;
|
||||
} else {return true;}
|
||||
}
|
||||
|
||||
void run(struct Simulation* simulation, int attempts) {
|
||||
for (int i = 0; i < attempts; i++) {
|
||||
bool bankrupt = calculate(simulation);
|
||||
if (bankrupt) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
srandom(time(NULL));
|
||||
struct Simulation new_simulation;
|
||||
new_simulation.betsize = 20;
|
||||
new_simulation.STARTING_BANKROLL = 5000000000;
|
||||
new_simulation.bankroll = new_simulation.STARTING_BANKROLL;
|
||||
new_simulation.attempts = 0;
|
||||
run(&new_simulation, 2147483647);
|
||||
printf("Starting Bankroll: %f\n", new_simulation.STARTING_BANKROLL);
|
||||
printf("Current Bankroll: %f\n", new_simulation.bankroll);
|
||||
printf("Finished after %d attempts and with a betsize of: %f\n", new_simulation.attempts, new_simulation.betsize);
|
||||
return 0;
|
||||
}
|
70
vigenere.py
Normal file
70
vigenere.py
Normal file
|
@ -0,0 +1,70 @@
|
|||
#!/usr/bin/env python3
|
||||
import argparse
|
||||
import string
|
||||
|
||||
parser: argparse.ArgumentParser = argparse.ArgumentParser(
|
||||
prog='Basic Vigenère Cypher',
|
||||
description='A quick and dirty implementation of the Vigenére Cypher. Accepts any key as the key.',
|
||||
epilog='Enter the message first and the key second.'
|
||||
)
|
||||
|
||||
group = parser.add_mutually_exclusive_group(required=True)
|
||||
group.add_argument('-e', '--encrypt', nargs=2, help="Message to be decrypted or encrypted and the key used")
|
||||
group.add_argument('-d', '--decrypt', nargs=2, help="Message to be decrypted or encrypted and the key used")
|
||||
|
||||
class Vigenere:
|
||||
def __init__(self) -> None:
|
||||
self.args = parser.parse_args()
|
||||
self.chars: str = ''.join(c for c in string.printable if c.isprintable()) + ''.join(chr(c) for c in range(128, 256) if not chr(c).isspace or c in (160,)) # All Characters from extended ASCII, excluding control codes
|
||||
if self.args.encrypt:
|
||||
self.msg: str = self.args.encrypt[0]
|
||||
self.key: str = self._generate_key(self.args.encrypt[1])
|
||||
else:
|
||||
self.msg: str = self.args.decrypt[0]
|
||||
self.key: str = self._generate_key(self.args.decrypt[1])
|
||||
|
||||
def _generate_key(self, key: str) -> str:
|
||||
if len(key) < len(self.msg):
|
||||
key = (key * (len(self.msg) // len(key) + 1))[:len(self.msg)]
|
||||
else:
|
||||
key = key[:len(self.msg)]
|
||||
return key
|
||||
|
||||
def _create_alphabet(self, shift: int) -> str:
|
||||
alphabet: str = self.chars
|
||||
shift = (shift % len(alphabet))
|
||||
return alphabet[shift:] + alphabet[:shift]
|
||||
|
||||
def _find_index(self, index: int) -> int:
|
||||
return self.chars.index(self.key[index])
|
||||
|
||||
def encrypt(self) -> str:
|
||||
encrypted_msg: str = ""
|
||||
for index in range(len(self.msg)):
|
||||
char: str = self.msg[index]
|
||||
lookup_alphabet: str = self._create_alphabet(self._find_index(index))
|
||||
original_index: int = self.chars.index(char)
|
||||
encrypted_msg += lookup_alphabet[original_index]
|
||||
|
||||
return encrypted_msg
|
||||
|
||||
def decrypt(self) -> str:
|
||||
decrypted_msg: str = ""
|
||||
for index in range(len(self.msg)):
|
||||
lookup_alphabet: str = self._create_alphabet(self._find_index(index))
|
||||
location_index: int = lookup_alphabet.index(self.msg[index])
|
||||
decrypted_msg += self.chars[location_index]
|
||||
|
||||
return decrypted_msg
|
||||
|
||||
def output(self) -> None:
|
||||
if self.args.encrypt:
|
||||
ciphertext = self.encrypt()
|
||||
print(ciphertext)
|
||||
else:
|
||||
plaintext = self.decrypt()
|
||||
print(plaintext)
|
||||
|
||||
if __name__ == "__main__":
|
||||
vigenere_cipher = Vigenere()
|
||||
vigenere_cipher.output()
|
Loading…
Reference in a new issue