'''Setting and printing Write a function execute(code: str) -> str which takes a program written in your programming language as a parameter and returns the output of the program. At this point, the program must know the following commands: LET variable=value The command sets the value of the variable to the given integer. The variable is one of a, b, c or d - no other variable names are allowed. If the variable already has a value, the old value is overwritten. PRINT variable This command adds the value of the variable and the line break to the output. The value of the variable must be defined before it is printed. Three example programs for testing: LET a=10 PRINT a The program returns a printout 10 Program 2: LET a=100 LET b=200 PRINT a PRINT b The program returns the result: 100 200 Program 3: LET c=10000 LET d=-10000 PRINT c PRINT d LET c=10 LET d=-10 PRINT c PRINT d The program returns the result: 10000 -10000 10 -10 ''' # approach 1 def execute(code: str) -> str: variables = {'a': 0, 'b': 0, 'c': 0, 'd': 0} output = [] for line in code.split('\n'): line = line.strip() if line.startswith('LET'): _, assignment = line.split(' ', 1) var, value = assignment.split('=') if var in variables: variables[var] = int(value) else: raise ValueError(f"Invalid variable name: {var}") elif line.startswith('PRINT'): _, var = line.split() if var in variables: output.append(str(variables[var])) else: raise ValueError(f"Undefined variable: {var}") elif line: # Ignore empty lines raise ValueError(f"Invalid command: {line}") # approach 1A - 2/20 pts, less points, correct output BUT expected output (35 lines) vs actual output (33 lines) # return '\n'.join(output) # approach 1B - 13/20 pts # for num in output: # print(num) # approach 1C - 20/20 pts -> OK NOW. added linebreak after each return statement. Expected vs actual output (35 lines) joined_output = '\n'.join(output) joined_output+='\n' return joined_output eg1='''LET a=10 PRINT a ''' execute(eg1) '''output 10 ''' eg2='''LET a=100 LET b=200 PRINT a PRINT b ''' execute(eg2) '''output 10 100 200 ''' eg3='''LET c=10000 LET d=-10000 PRINT c PRINT d LET c=10 LET d=-10 PRINT c PRINT d ''' execute(eg3) '''output 10 100 200 10000 -10000 10 -10 ''' ################################################ # approach 1A '''autograder expected output Testing code: LET a=73 PRINT a Program outputs: 73 Testing code: LET a=1 LET b=96 PRINT a PRINT b Program outputs: 1 96 Testing code: LET c=1669 LET d=-557 PRINT c PRINT d LET c=1169 LET d=-1114 PRINT c PRINT d Program outputs: 1669 -557 1169 -1114 ''' '''autograder actual output Testing code: LET a=73 PRINT a Program outputs: 73 # ok Testing code: LET a=1 LET b=96 PRINT a PRINT b Program outputs: 1 96 # ok Testing code: LET c=1669 LET d=-557 PRINT c PRINT d LET c=1169 LET d=-1114 PRINT c PRINT d Program outputs: 1669 -557 1169 -1114 # ok ''' ################################################ # approach 1B '''autograder expected output Testing code: LET a=21 PRINT a Program outputs: 21 Testing code: LET a=32 LET b=72 PRINT a PRINT b Program outputs: 32 72 Testing code: LET c=2276 LET d=-557 PRINT c PRINT d LET c=1776 LET d=-1114 PRINT c PRINT d Program outputs: 2276 -557 1776 -1114 ''' '''autograder actual output Testing code: LET a=21 PRINT a Program outputs: 21 None Testing code: LET a=32 LET b=72 PRINT a PRINT b Program outputs: 32 72 None Testing code: LET c=2276 LET d=-557 PRINT c PRINT d LET c=1776 LET d=-1114 PRINT c PRINT d Program outputs: 2276 -557 1776 -1114 None ''' ################################################ # approach 1C '''autograder expected output Testing code: LET a=21 PRINT a Program outputs: 21 Testing code: LET a=32 LET b=72 PRINT a PRINT b Program outputs: 32 72 Testing code: LET c=2276 LET d=-557 PRINT c PRINT d LET c=1776 LET d=-1114 PRINT c PRINT d Program outputs: 2276 -557 1776 -1114 ''' '''autograder actual output Testing code: LET a=24 PRINT a Program outputs: 24 Testing code: LET a=30 LET b=40 PRINT a PRINT b Program outputs: 30 40 Testing code: LET c=2126 LET d=-477 PRINT c PRINT d LET c=1626 LET d=-954 PRINT c PRINT d Program outputs: 2126 -477 1626 -954 '''