"""
All data is lists of integers.
Every builtin takes a list and returns a list.
Concatenation of builtins is function composition.
Given the following tasks:
1) Reverse the list.
2) Remove all 0s.
3) Sort the list.
4) Duplicate the list (append to itself).
5) Add 1 to every element.
6) Rotate 1 step to the left.
7) Remove all negative elements.
8) Negate every element.
We can achieve these tasks with length-4 programs using 3 different builtins, named E, 0 and 1.
"""
def interpret(prog, lst):
for char in prog:
lst = interpret_builtin(char, lst)
print(lst)
def interpret_builtin(char, lst):
# Builtin E: encode data to "special format" by adding a leading 2.
if char == 'E':
return [2] + lst
# Builtins 0 and 1: if three functions used on data (counting this one), perform task.
num_funcs_used = min(i for i in range(len(lst)) if lst[i] == 2)
if num_funcs_used == 2:
decoded_list = lst[3:]
task_num = int(char) + 2*lst[0] + 4*lst[1]
if task_num == 0:
return decoded_list[::-1]
if task_num == 1:
return [n for n in decoded_list if n != 0]
if task_num == 2:
return list(sorted(decoded_list))
if task_num == 3:
return decoded_list + decoded_list
if task_num == 4:
return [n+1 for n in decoded_list]
if task_num == 5:
return decoded_list[1:] + decoded_list[:1]
if task_num == 6:
return [n for n in decoded_list if n >= 0]
return [-n for n in decoded_list]
# Otherwise, encode self into data.
return [int(char)] + lst
interpret("E011", [8,12,-3,0,0,7])
interpret("E100", [8,12,-3,0,0,7])
interpret("E101", [8,12,-3,0,0,7])
IiIiCkFsbCBkYXRhIGlzIGxpc3RzIG9mIGludGVnZXJzLgpFdmVyeSBidWlsdGluIHRha2VzIGEgbGlzdCBhbmQgcmV0dXJucyBhIGxpc3QuCkNvbmNhdGVuYXRpb24gb2YgYnVpbHRpbnMgaXMgZnVuY3Rpb24gY29tcG9zaXRpb24uCgpHaXZlbiB0aGUgZm9sbG93aW5nIHRhc2tzOgoxKSBSZXZlcnNlIHRoZSBsaXN0LgoyKSBSZW1vdmUgYWxsIDBzLgozKSBTb3J0IHRoZSBsaXN0Lgo0KSBEdXBsaWNhdGUgdGhlIGxpc3QgKGFwcGVuZCB0byBpdHNlbGYpLgo1KSBBZGQgMSB0byBldmVyeSBlbGVtZW50Lgo2KSBSb3RhdGUgMSBzdGVwIHRvIHRoZSBsZWZ0Lgo3KSBSZW1vdmUgYWxsIG5lZ2F0aXZlIGVsZW1lbnRzLgo4KSBOZWdhdGUgZXZlcnkgZWxlbWVudC4KCldlIGNhbiBhY2hpZXZlIHRoZXNlIHRhc2tzIHdpdGggbGVuZ3RoLTQgcHJvZ3JhbXMgdXNpbmcgMyBkaWZmZXJlbnQgYnVpbHRpbnMsIG5hbWVkIEUsIDAgYW5kIDEuCiIiIgoKZGVmIGludGVycHJldChwcm9nLCBsc3QpOgogICAgZm9yIGNoYXIgaW4gcHJvZzoKICAgICAgICBsc3QgPSBpbnRlcnByZXRfYnVpbHRpbihjaGFyLCBsc3QpCiAgICBwcmludChsc3QpCgpkZWYgaW50ZXJwcmV0X2J1aWx0aW4oY2hhciwgbHN0KToKICAgICMgQnVpbHRpbiBFOiBlbmNvZGUgZGF0YSB0byAic3BlY2lhbCBmb3JtYXQiIGJ5IGFkZGluZyBhIGxlYWRpbmcgMi4KICAgIGlmIGNoYXIgPT0gJ0UnOgogICAgICAgIHJldHVybiBbMl0gKyBsc3QKICAgICMgQnVpbHRpbnMgMCBhbmQgMTogaWYgdGhyZWUgZnVuY3Rpb25zIHVzZWQgb24gZGF0YSAoY291bnRpbmcgdGhpcyBvbmUpLCBwZXJmb3JtIHRhc2suCiAgICBudW1fZnVuY3NfdXNlZCA9IG1pbihpIGZvciBpIGluIHJhbmdlKGxlbihsc3QpKSBpZiBsc3RbaV0gPT0gMikKICAgIGlmIG51bV9mdW5jc191c2VkID09IDI6CiAgICAgICAgZGVjb2RlZF9saXN0ID0gbHN0WzM6XQogICAgICAgIHRhc2tfbnVtID0gaW50KGNoYXIpICsgMipsc3RbMF0gKyA0KmxzdFsxXQogICAgICAgIGlmIHRhc2tfbnVtID09IDA6CiAgICAgICAgICAgIHJldHVybiBkZWNvZGVkX2xpc3RbOjotMV0KICAgICAgICBpZiB0YXNrX251bSA9PSAxOgogICAgICAgICAgICByZXR1cm4gW24gZm9yIG4gaW4gZGVjb2RlZF9saXN0IGlmIG4gIT0gMF0KICAgICAgICBpZiB0YXNrX251bSA9PSAyOgogICAgICAgICAgICByZXR1cm4gbGlzdChzb3J0ZWQoZGVjb2RlZF9saXN0KSkKICAgICAgICBpZiB0YXNrX251bSA9PSAzOgogICAgICAgICAgICByZXR1cm4gZGVjb2RlZF9saXN0ICsgZGVjb2RlZF9saXN0CiAgICAgICAgaWYgdGFza19udW0gPT0gNDoKICAgICAgICAgICAgcmV0dXJuIFtuKzEgZm9yIG4gaW4gZGVjb2RlZF9saXN0XQogICAgICAgIGlmIHRhc2tfbnVtID09IDU6CiAgICAgICAgICAgIHJldHVybiBkZWNvZGVkX2xpc3RbMTpdICsgZGVjb2RlZF9saXN0WzoxXQogICAgICAgIGlmIHRhc2tfbnVtID09IDY6CiAgICAgICAgICAgIHJldHVybiBbbiBmb3IgbiBpbiBkZWNvZGVkX2xpc3QgaWYgbiA+PSAwXQogICAgICAgIHJldHVybiBbLW4gZm9yIG4gaW4gZGVjb2RlZF9saXN0XQogICAgIyBPdGhlcndpc2UsIGVuY29kZSBzZWxmIGludG8gZGF0YS4KICAgIHJldHVybiBbaW50KGNoYXIpXSArIGxzdAoKaW50ZXJwcmV0KCJFMDExIiwgWzgsMTIsLTMsMCwwLDddKQppbnRlcnByZXQoIkUxMDAiLCBbOCwxMiwtMywwLDAsN10pCmludGVycHJldCgiRTEwMSIsIFs4LDEyLC0zLDAsMCw3XSk=
[8, 12, -3, 0, 0, 7, 8, 12, -3, 0, 0, 7]
[9, 13, -2, 1, 1, 8]
[12, -3, 0, 0, 7, 8]