From 01aa8af42ec80111aca755828d9bccf98a150b09 Mon Sep 17 00:00:00 2001 From: thing1 Date: Tue, 18 Mar 2025 13:08:53 +0000 Subject: wow! --- comp/skeleton/__pycache__/code.cpython-313.pyc | Bin 0 -> 9836 bytes comp/skeleton/code.py | 227 ------------------------ comp/skeleton/skel.py | 236 +++++++++++++++++++++++++ comp/work/48/starter | 3 + 4 files changed, 239 insertions(+), 227 deletions(-) create mode 100644 comp/skeleton/__pycache__/code.cpython-313.pyc delete mode 100644 comp/skeleton/code.py create mode 100644 comp/skeleton/skel.py create mode 100644 comp/work/48/starter (limited to 'comp') diff --git a/comp/skeleton/__pycache__/code.cpython-313.pyc b/comp/skeleton/__pycache__/code.cpython-313.pyc new file mode 100644 index 0000000..9adf17d Binary files /dev/null and b/comp/skeleton/__pycache__/code.cpython-313.pyc differ diff --git a/comp/skeleton/code.py b/comp/skeleton/code.py deleted file mode 100644 index 495913f..0000000 --- a/comp/skeleton/code.py +++ /dev/null @@ -1,227 +0,0 @@ -#Skeleton Program code for the AQA A Level Paper 1 Summer 2025 examination -#this code should be used in conjunction with the Preliminary Material -#written by the AQA Programmer Team -#developed in the Python 3.9 programming environment - -import re -import random -import math - -def Main(): - NumbersAllowed = [] - Targets = [] - MaxNumberOfTargets = 20 - MaxTarget = 0 - MaxNumber = 0 - TrainingGame = False - Choice = input("Enter y to play the training game, anything else to play a random game: ").lower() - print() - if Choice == "y": - MaxNumber = 1000 - MaxTarget = 1000 - TrainingGame = True - Targets = [-1, -1, -1, -1, -1, 23, 9, 140, 82, 121, 34, 45, 68, 75, 34, 23, 119, 43, 23, 119] - else: - MaxNumber = 10 - MaxTarget = 50 - Targets = CreateTargets(MaxNumberOfTargets, MaxTarget) - NumbersAllowed = FillNumbers(NumbersAllowed, TrainingGame, MaxNumber) - PlayGame(Targets, NumbersAllowed, TrainingGame, MaxTarget, MaxNumber) - input() - -def PlayGame(Targets, NumbersAllowed, TrainingGame, MaxTarget, MaxNumber): - Score = 0 - GameOver = False - while not GameOver: - DisplayState(Targets, NumbersAllowed, Score) - UserInput = input("Enter an expression: ") - print() - if CheckIfUserInputValid(UserInput): - UserInputInRPN = ConvertToRPN(UserInput) - if CheckNumbersUsedAreAllInNumbersAllowed(NumbersAllowed, UserInputInRPN, MaxNumber): - IsTarget, Score = CheckIfUserInputEvaluationIsATarget(Targets, UserInputInRPN, Score) - if IsTarget: - NumbersAllowed = RemoveNumbersUsed(UserInput, MaxNumber, NumbersAllowed) - NumbersAllowed = FillNumbers(NumbersAllowed, TrainingGame, MaxNumber) - Score -= 1 - if Targets[0] != -1: - GameOver = True - else: - Targets = UpdateTargets(Targets, TrainingGame, MaxTarget) - print("Game over!") - DisplayScore(Score) - -def CheckIfUserInputEvaluationIsATarget(Targets, UserInputInRPN, Score): - UserInputEvaluation = EvaluateRPN(UserInputInRPN) - UserInputEvaluationIsATarget = False - if UserInputEvaluation != -1: - for Count in range(0, len(Targets)): - if Targets[Count] == UserInputEvaluation: - Score += 2 - Targets[Count] = -1 - UserInputEvaluationIsATarget = True - return UserInputEvaluationIsATarget, Score - -def RemoveNumbersUsed(UserInput, MaxNumber, NumbersAllowed): - UserInputInRPN = ConvertToRPN(UserInput) - for Item in UserInputInRPN: - if CheckValidNumber(Item, MaxNumber): - if int(Item) in NumbersAllowed: - NumbersAllowed.remove(int(Item)) - return NumbersAllowed - -def UpdateTargets(Targets, TrainingGame, MaxTarget): - for Count in range (0, len(Targets) - 1): - Targets[Count] = Targets[Count + 1] - Targets.pop() - if TrainingGame: - Targets.append(Targets[-1]) - else: - Targets.append(GetTarget(MaxTarget)) - return Targets - -def CheckNumbersUsedAreAllInNumbersAllowed(NumbersAllowed, UserInputInRPN, MaxNumber): - Temp = [] - for Item in NumbersAllowed: - Temp.append(Item) - for Item in UserInputInRPN: - if CheckValidNumber(Item, MaxNumber): - if int(Item) in Temp: - Temp.remove(int(Item)) - else: - return False - return True - -def CheckValidNumber(Item, MaxNumber): - if re.search("^[0-9]+$", Item) is not None: - ItemAsInteger = int(Item) - if ItemAsInteger > 0 and ItemAsInteger <= MaxNumber: - return True - return False - -def DisplayState(Targets, NumbersAllowed, Score): - DisplayTargets(Targets) - DisplayNumbersAllowed(NumbersAllowed) - DisplayScore(Score) - -def DisplayScore(Score): - print("Current score: " + str(Score)) - print() - print() - -def DisplayNumbersAllowed(NumbersAllowed): - print("Numbers available: ", end = '') - for N in NumbersAllowed: - print(str(N) + " ", end = '') - print() - print() - -def DisplayTargets(Targets): - print("|", end = '') - for T in Targets: - if T == -1: - print(" ", end = '') - else: - print(T, end = '') - print("|", end = '') - print() - print() - -def ConvertToRPN(UserInput): - Position = 0 - Precedence = {"+": 2, "-": 2, "*": 4, "/": 4} - Operators = [] - Operand, Position = GetNumberFromUserInput(UserInput, Position) - UserInputInRPN = [] - UserInputInRPN.append(str(Operand)) - Operators.append(UserInput[Position - 1]) - while Position < len(UserInput): - Operand, Position = GetNumberFromUserInput(UserInput, Position) - UserInputInRPN.append(str(Operand)) - if Position < len(UserInput): - CurrentOperator = UserInput[Position - 1] - while len(Operators) > 0 and Precedence[Operators[-1]] > Precedence[CurrentOperator]: - UserInputInRPN.append(Operators[-1]) - Operators.pop() - if len(Operators) > 0 and Precedence[Operators[-1]] == Precedence[CurrentOperator]: - UserInputInRPN.append(Operators[-1]) - Operators.pop() - Operators.append(CurrentOperator) - else: - while len(Operators) > 0: - UserInputInRPN.append(Operators[-1]) - Operators.pop() - return UserInputInRPN - -def EvaluateRPN(UserInputInRPN): - S = [] - while len(UserInputInRPN) > 0: - while UserInputInRPN[0] not in ["+", "-", "*", "/"]: - S.append(UserInputInRPN[0]) - UserInputInRPN.pop(0) - Num2 = float(S[-1]) - S.pop() - Num1 = float(S[-1]) - S.pop() - Result = 0.0 - if UserInputInRPN[0] == "+": - Result = Num1 + Num2 - elif UserInputInRPN[0] == "-": - Result = Num1 - Num2 - elif UserInputInRPN[0] == "*": - Result = Num1 * Num2 - elif UserInputInRPN[0] == "/": - Result = Num1 / Num2 - UserInputInRPN.pop(0) - S.append(str(Result)) - if float(S[0]) - math.floor(float(S[0])) == 0.0: - return math.floor(float(S[0])) - else: - return -1 - -def GetNumberFromUserInput(UserInput, Position): - Number = "" - MoreDigits = True - while MoreDigits: - if not(re.search("[0-9]", str(UserInput[Position])) is None): - Number += UserInput[Position] - else: - MoreDigits = False - Position += 1 - if Position == len(UserInput): - MoreDigits = False - if Number == "": - return -1, Position - else: - return int(Number), Position - -def CheckIfUserInputValid(UserInput): - if re.search("^([0-9]+[\\+\\-\\*\\/])+[0-9]+$", UserInput) is not None: - return True - else: - return False - -def GetTarget(MaxTarget): - return random.randint(1, MaxTarget) - -def GetNumber(MaxNumber): - return random.randint(1, MaxNumber) - -def CreateTargets(SizeOfTargets, MaxTarget): - Targets = [] - for Count in range(1, 6): - Targets.append(-1) - for Count in range(1, SizeOfTargets - 4): - Targets.append(GetTarget(MaxTarget)) - return Targets - -def FillNumbers(NumbersAllowed, TrainingGame, MaxNumber): - if TrainingGame: - return [2, 3, 2, 8, 512] - else: - while len(NumbersAllowed) < 5: - NumbersAllowed.append(GetNumber(MaxNumber)) - return NumbersAllowed - -if __name__ == "__main__": - Main() diff --git a/comp/skeleton/skel.py b/comp/skeleton/skel.py new file mode 100644 index 0000000..75c4ef9 --- /dev/null +++ b/comp/skeleton/skel.py @@ -0,0 +1,236 @@ +#Skeleton Program code for the AQA A Level Paper 1 Summer 2025 examination +#this code should be used in conjunction with the Preliminary Material +#written by the AQA Programmer Team +#developed in the Python 3.9 programming environment + +import re +import random +import math + +def Main(): + NumbersAllowed = [] + Targets = [] + MaxNumberOfTargets = 20 + MaxTarget = 0 + MaxNumber = 0 + TrainingGame = False + Choice = input("Enter y to play the training game, anything else to play a random game: ").lower() + print() + if Choice == "y": + MaxNumber = 1000 + MaxTarget = 1000 + TrainingGame = True + Targets = [-1, -1, -1, -1, -1, 23, 9, 140, 82, 121, 34, 45, 68, 75, 34, 23, 119, 43, 23, 119] + else: + MaxNumber = 10 + MaxTarget = 50 + Targets = CreateTargets(MaxNumberOfTargets, MaxTarget) + NumbersAllowed = FillNumbers(NumbersAllowed, TrainingGame, MaxNumber) + PlayGame(Targets, NumbersAllowed, TrainingGame, MaxTarget, MaxNumber) + input() + +def PlayGame(Targets, NumbersAllowed, TrainingGame, MaxTarget, MaxNumber): + Score = 0 + GameOver = False + while not GameOver: + DisplayState(Targets, NumbersAllowed, Score) + UserInput = input("Enter an expression: ").replace(' ', '') + print() + if CheckIfUserInputValid(UserInput): + UserInputInRPN = ConvertToRPN(UserInput) + if CheckNumbersUsedAreAllInNumbersAllowed(NumbersAllowed, UserInputInRPN, MaxNumber): + IsTarget, Score = CheckIfUserInputEvaluationIsATarget(Targets, UserInputInRPN, Score) + if IsTarget: + NumbersAllowed = RemoveNumbersUsed(UserInput, MaxNumber, NumbersAllowed) + NumbersAllowed = FillNumbers(NumbersAllowed, TrainingGame, MaxNumber) + else: + print("user input invalid!") + Score -= 1 + if Score < 0: + GameOver = True + if Targets[0] != -1: + GameOver = True + else: + Targets = UpdateTargets(Targets, TrainingGame, MaxTarget) + print("Game over!") + DisplayScore(Score) + +def CheckIfUserInputEvaluationIsATarget(Targets, UserInputInRPN, Score): + UserInputEvaluation = EvaluateRPN(UserInputInRPN) + UserInputEvaluationIsATarget = False + if UserInputEvaluation != -1: + Score += 2 + for Count in range(0, len(Targets)): + if Targets[Count] == UserInputEvaluation: + Targets[Count] = -1 + UserInputEvaluationIsATarget = True + return UserInputEvaluationIsATarget, Score + +def RemoveNumbersUsed(UserInput, MaxNumber, NumbersAllowed): + UserInputInRPN = ConvertToRPN(UserInput) + for Item in UserInputInRPN: + if CheckValidNumber(Item, MaxNumber): + if int(Item) in NumbersAllowed: + NumbersAllowed.remove(int(Item)) + return NumbersAllowed + +def UpdateTargets(Targets, TrainingGame, MaxTarget): + for Count in range (0, len(Targets) - 1): + Targets[Count] = Targets[Count + 1] + Targets.pop() + if TrainingGame: + Targets.append(Targets[-1]) + else: + Targets.append(GetTarget(MaxTarget)) + return Targets + +def CheckNumbersUsedAreAllInNumbersAllowed(NumbersAllowed, UserInputInRPN, MaxNumber): + Temp = [] + for Item in NumbersAllowed: + Temp.append(Item) + for Item in UserInputInRPN: + if CheckValidNumber(Item, MaxNumber): + if int(Item) in Temp: + Temp.remove(int(Item)) + else: + return False + else: + if Item.isdigit() == True: + return False + return True + +def CheckValidNumber(Item, MaxNumber): + if re.search("^[0-9]+$", Item) is not None: + ItemAsInteger = int(Item) + if ItemAsInteger > 0 and ItemAsInteger <= MaxNumber: + return True + return False + +def DisplayState(Targets, NumbersAllowed, Score): + DisplayTargets(Targets) + DisplayNumbersAllowed(NumbersAllowed) + DisplayScore(Score) + +def DisplayScore(Score): + print("Current score: " + str(Score)) + print() + print() + +def DisplayNumbersAllowed(NumbersAllowed): + print("Numbers available: ", end = '') + for N in NumbersAllowed: + print(str(N) + " ", end = '') + print() + print() + +def DisplayTargets(Targets): + print("|", end = '') + for T in Targets: + if T == -1: + print(" ", end = '') + else: + print(T, end = '') + print("|", end = '') + print() + print() + +def ConvertToRPN(UserInput): + Position = 0 + Precedence = {"+": 2, "-": 2, "*": 4, "/": 4, "^": 6} + Operators = [] + Operand, Position = GetNumberFromUserInput(UserInput, Position) + UserInputInRPN = [] + UserInputInRPN.append(str(Operand)) + Operators.append(UserInput[Position - 1]) + while Position < len(UserInput): + Operand, Position = GetNumberFromUserInput(UserInput, Position) + UserInputInRPN.append(str(Operand)) + if Position < len(UserInput): + CurrentOperator = UserInput[Position - 1] + while len(Operators) > 0 and Precedence[Operators[-1]] > Precedence[CurrentOperator]: + UserInputInRPN.append(Operators[-1]) + Operators.pop() + if len(Operators) > 0 and Precedence[Operators[-1]] == Precedence[CurrentOperator]: + UserInputInRPN.append(Operators[-1]) + Operators.pop() + Operators.append(CurrentOperator) + else: + while len(Operators) > 0: + UserInputInRPN.append(Operators[-1]) + Operators.pop() + return UserInputInRPN + +def EvaluateRPN(UserInputInRPN): + S = [] + while len(UserInputInRPN) > 0: + while UserInputInRPN[0] not in ["+", "-", "*", "/", "^"]: + S.append(UserInputInRPN[0]) + UserInputInRPN.pop(0) + Num2 = float(S[-1]) + S.pop() + Num1 = float(S[-1]) + S.pop() + Result = 0.0 + if UserInputInRPN[0] == "+": + Result = Num1 + Num2 + elif UserInputInRPN[0] == "-": + Result = Num1 - Num2 + elif UserInputInRPN[0] == "*": + Result = Num1 * Num2 + elif UserInputInRPN[0] == "/": + Result = Num1 / Num2 + elif UserInputInRPN[0] == "^": + Result = Num1 ** Num2 + UserInputInRPN.pop(0) + S.append(str(Result)) + if float(S[0]) - math.floor(float(S[0])) == 0.0: + return math.floor(float(S[0])) + else: + return -1 + +def GetNumberFromUserInput(UserInput, Position): + Number = "" + MoreDigits = True + while MoreDigits: + if not(re.search("[0-9]", str(UserInput[Position])) is None): + Number += UserInput[Position] + else: + MoreDigits = False + Position += 1 + if Position == len(UserInput): + MoreDigits = False + if Number == "": + return -1, Position + else: + return int(Number), Position + +def CheckIfUserInputValid(UserInput): + if re.search("^([0-9]+[\\+\\-\\*\\/\\^])+[0-9]+$", UserInput) is not None: + return True + else: + return False + +def GetTarget(MaxTarget): + return random.randint(1, MaxTarget) + +def GetNumber(MaxNumber): + return random.randint(1, MaxNumber) + +def CreateTargets(SizeOfTargets, MaxTarget): + Targets = [] + for Count in range(1, 6): + Targets.append(-1) + for Count in range(1, SizeOfTargets - 4): + Targets.append(GetTarget(MaxTarget)) + return Targets + +def FillNumbers(NumbersAllowed, TrainingGame, MaxNumber): + if TrainingGame: + return [2, 3, 2, 8, 512] + else: + while len(NumbersAllowed) < 5: + NumbersAllowed.append(GetNumber(MaxNumber)) + return NumbersAllowed + +if __name__ == "__main__": + Main() diff --git a/comp/work/48/starter b/comp/work/48/starter new file mode 100644 index 0000000..5e9d4d8 --- /dev/null +++ b/comp/work/48/starter @@ -0,0 +1,3 @@ +192.168.0.1 +192.168.0.42 +192.168.2.3 -- cgit v1.2.3