I was trying to use 2D arrays in TuringArena, so to try them out I made a sort. Since my original attempt did not work, I decided to copy and paste the sort problem from TuringArena's examples and tweak it a bit to allow it to use 2D arrays. The final code looked like this (I pointed out in a comment what I did and did not change):
interface.txt
procedure sort(n, m, a[][]); // put double index in both functions
function get_element(i, j);
main {
read n, m;
for i to n {
for j to m { // added for loop and second inxed
read a[i][j];
}
}
call sort(n, m, a);
for i to n {
for j to m { // same as before
call ans = get_element(i, j);
write ans;
}
}
}
def sort(n, m, a):
global b
b = []
for i in range(len(a)): # needed to "double sort" since this is a 2D array
b.append(sorted(a[i]))
return sorted(b)
def get_element(i, j): # second index
return b[i][j]
import random
from turingarena import *
# made this function to use in the if later instead of the sorted function
def sort_matrix(matrix_to_sort):
b = []
for i in range(len(matrix_to_sort)):
b.append(sorted(matrix_to_sort[i]))
return sorted(b)
all_passed = True
for _ in range(10):
n, m = 4, 4
a = [[random.randint(0, 9) for j in range(m)] for i in range(n)] # made a a 2D array
b = []
try:
with run_algorithm(submission.source) as process:
process.procedures.sort(n, m, a)
b = [[process.functions.get_element(i, j) for j in range(m)] for i in range(n)] # double for
except AlgorithmError as e:
print(e)
all_passed = False
if b == sort_matrix(a):
print("correct!")
else:
print("WRONG!")
all_passed = False
evaluation.data(dict(goals=dict(correct=all_passed)))
Traceback (most recent call last):
File "evaluator.py", line 19, in <module>
b = [[process.functions.get_element(i, j) for j in range(m)] for i in range(n)]
File "evaluator.py", line 19, in <listcomp>
b = [[process.functions.get_element(i, j) for j in range(m)] for i in range(n)]
File "evaluator.py", line 19, in <listcomp>
b = [[process.functions.get_element(i, j) for j in range(m)] for i in range(n)]
File "/usr/local/turingarena/libraries/python3/turingarena/driver/proxy.py", line 17, in method
return self._engine.call(request)
File "/usr/local/turingarena/libraries/python3/turingarena/driver/engine.py", line 43, in call
return self.get_response_value()
File "/usr/local/turingarena/libraries/python3/turingarena/driver/engine.py", line 55, in get_response_value
return int(self.get_response_line())
File "/usr/local/turingarena/libraries/python3/turingarena/driver/engine.py", line 50, in get_response_line
assert line
AssertionError
2018-07-14 20:34:24,261 ERROR [ 35] turingarena_impl.metaserver: Exception in child server.
Traceback (most recent call last):
File "/usr/local/turingarena/backend/turingarena_impl/metaserver.py", line 91, in child_finalizer
yield
File "/usr/lib/python3.6/contextlib.py", line 365, in __exit__
if cb(*exc_details):
File "/usr/lib/python3.6/contextlib.py", line 284, in _exit_wrapper
return cm_exit(cm, *exc_details)
File "/usr/lib/python3.6/contextlib.py", line 88, in __exit__
next(self.gen)
File "/usr/local/turingarena/backend/turingarena_impl/driver/server.py", line 41, in run_child_server
server.run()
File "/usr/local/turingarena/backend/turingarena_impl/driver/server.py", line 105, in run
self.interface.run_driver(context)
File "/usr/local/turingarena/backend/turingarena_impl/driver/interface/interface.py", line 69, in run_driver
self.main_node.driver_run(context=context)
File "/usr/local/turingarena/backend/turingarena_impl/driver/interface/nodes.py", line 53, in driver_run
result = self._driver_run(context)
File "/usr/local/turingarena/backend/turingarena_impl/driver/interface/block.py", line 103, in _driver_run
result = result.merge(n.driver_run(context.extend(result)))
File "/usr/local/turingarena/backend/turingarena_impl/driver/interface/nodes.py", line 53, in driver_run
result = self._driver_run(context)
File "/usr/local/turingarena/backend/turingarena_impl/driver/interface/step.py", line 27, in _driver_run
phase=phase,
File "/usr/local/turingarena/backend/turingarena_impl/driver/interface/step.py", line 35, in _run_children
result = result.merge(n.driver_run(context.extend(result)))
File "/usr/local/turingarena/backend/turingarena_impl/driver/interface/nodes.py", line 53, in driver_run
result = self._driver_run(context)
File "/usr/local/turingarena/backend/turingarena_impl/driver/interface/statements/for_loop.py", line 95, in _driver_run
for i in range(for_range)
File "/usr/local/turingarena/backend/turingarena_impl/driver/interface/statements/for_loop.py", line 95, in <listcomp>
for i in range(for_range)
File "/usr/local/turingarena/backend/turingarena_impl/driver/interface/nodes.py", line 53, in driver_run
result = self._driver_run(context)
File "/usr/local/turingarena/backend/turingarena_impl/driver/interface/block.py", line 103, in _driver_run
result = result.merge(n.driver_run(context.extend(result)))
File "/usr/local/turingarena/backend/turingarena_impl/driver/interface/nodes.py", line 53, in driver_run
result = self._driver_run(context)
File "/usr/local/turingarena/backend/turingarena_impl/driver/interface/statements/for_loop.py", line 95, in _driver_run
for i in range(for_range)
File "/usr/local/turingarena/backend/turingarena_impl/driver/interface/statements/for_loop.py", line 95, in <listcomp>
for i in range(for_range)
File "/usr/local/turingarena/backend/turingarena_impl/driver/interface/nodes.py", line 53, in driver_run
result = self._driver_run(context)
File "/usr/local/turingarena/backend/turingarena_impl/driver/interface/block.py", line 103, in _driver_run
result = result.merge(n.driver_run(context.extend(result)))
File "/usr/local/turingarena/backend/turingarena_impl/driver/interface/nodes.py", line 53, in driver_run
result = self._driver_run(context)
File "/usr/local/turingarena/backend/turingarena_impl/driver/interface/step.py", line 22, in _driver_run
return self._run_children(context)
File "/usr/local/turingarena/backend/turingarena_impl/driver/interface/step.py", line 35, in _run_children
result = result.merge(n.driver_run(context.extend(result)))
File "/usr/local/turingarena/backend/turingarena_impl/driver/interface/nodes.py", line 53, in driver_run
result = self._driver_run(context)
File "/usr/local/turingarena/backend/turingarena_impl/driver/interface/statements/call.py", line 208, in _driver_run
return_value = self.statement.return_value.evaluate(context.bindings)
File "/usr/local/turingarena/backend/turingarena_impl/driver/interface/expressions.py", line 120, in evaluate
return bindings[self.reference]
KeyError: Reference(variable=Variable(name='ans', dimensions=0), index_count=0)Connection to localhost closed.