From 26c861e984b3ee3ca77287c2efb3dbbac2256468 Mon Sep 17 00:00:00 2001 From: DrMaxNix Date: Wed, 5 Oct 2022 20:27:07 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=85=20rule=20110=20implementation=20by=20?= =?UTF-8?q?thetek?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: thetek42 --- test/rule-110.jce | 257 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 257 insertions(+) create mode 100644 test/rule-110.jce diff --git a/test/rule-110.jce b/test/rule-110.jce new file mode 100644 index 0000000..daa6d18 --- /dev/null +++ b/test/rule-110.jce @@ -0,0 +1,257 @@ +# rule 110 implementation by thetek + + + +### config ### + +set $max_iter 32 + +### *sigh* ### + +jmp 'code' + +### utils ### + +# set utils + +:set_new + set $_set_new_var '__set_' + add $_set_new_var $set_new_id + add $_set_new_var '_len' + set ${$_set_new_var} 0 +jmp $set_new_ret + +:set_add + set $set_contains_id $set_add_id + set $set_contains_check $set_add_item + set $set_contains_ret '_set_add_set_contains_ret_a' + jmp 'set_contains' + :_set_add_set_contains_ret_a + if $ret == true + jmp '_set_add_end' + set $_set_add_len '__set_' + add $_set_add_len $set_add_id + add $_set_add_len '_len' + set $_set_add_pos '__set_' + add $_set_add_pos $set_add_id + add $_set_add_pos '_item_' + add $_set_add_pos ${$_set_add_len} + set ${$_set_add_pos} $set_add_item + add ${$_set_add_len} 1 + :_set_add_end +jmp $set_add_ret + +:set_len + set $_set_len_len '__set_' + add $_set_len_len $set_len_id + add $_set_len_len '_len' + set $ret ${$_set_len_len} +jmp $set_len_ret + +:set_get + set $_set_get_item '__set_' + add $_set_get_item $set_get_id + add $_set_get_item '_item_' + add $_set_get_item $set_get_pos + set $ret ${$_set_get_item} +jmp $set_get_ret + +:set_contains + set $_set_contains_i 0 + set $_set_contains_len '__set_' + add $_set_contains_len $set_contains_id + add $_set_contains_len '_len' + :_set_contains_loop + if $_set_contains_i >= ${$_set_contains_len} + jmp '_set_contains_loopend' + set $_set_contains_item '__set_' + add $_set_contains_item $set_contains_id + add $_set_contains_item '_item_' + add $_set_contains_item $_set_contains_i + if ${$_set_contains_item} == $set_contains_check + jmp '_set_contains_found' + add $_set_contains_i 1 + jmp '_set_contains_loop' + :_set_contains_loopend + set $ret false +jmp $set_contains_ret + :_set_contains_found + set $ret true +jmp $set_contains_ret + +:set_print + set $_set_print_i 0 + set $_set_print_len '__set_' + add $_set_print_len $set_print_id + add $_set_print_len '_len' + :_set_print_loop + if $_set_print_i >= ${$_set_print_len} + jmp '_set_print_loopend' + set $_set_print_item '__set_' + add $_set_print_item $set_print_id + add $_set_print_item '_item_' + add $_set_print_item $_set_print_i + echo ${$_set_print_item} + add $_set_print_i 1 + jmp '_set_print_loop' + :_set_print_loopend +jmp $set_print_ret + +### code ### + +:code + +# create new set 'state' with item -1 +set $set_new_id 'state' +set $set_new_ret 'set_new_ret_a' +jmp 'set_new' +:set_new_ret_a +set $set_add_id 'state' +set $set_add_item -1 +set $set_add_ret 'set_add_ret_a' +jmp 'set_add' +:set_add_ret_a + +# main loop +set $mainloop_i 0 +:mainloop + if $mainloop_i >= $max_iter + jmp 'mainloop_end' + set $display_ret 'display_ret_a' + jmp 'display' + :display_ret_a + set $generate_ret 'generate_ret_a' + jmp 'generate' + :generate_ret_a + set $swap_ret 'swap_ret_a' + jmp 'swap' + :swap_ret_a + add $mainloop_i 1 + jmp 'mainloop' +:mainloop_end +jmp 'end' + +# display subroutine +:display + set $_display_buf '' + set $_display_loop_i $max_iter + mul $_display_loop_i -1 + + #set $set_print_id 'state' + #set $set_print_ret 'set_print_ret_a' + #jmp 'set_print' + #:set_print_ret_a + + :_display_loop + set $set_contains_id 'state' + set $set_contains_check $_display_loop_i + set $set_contains_ret 'set_contains_ret_a' + jmp 'set_contains' + :set_contains_ret_a + if $ret == true + add $_display_buf '*' + if $ret == false + add $_display_buf ' ' + add $_display_loop_i 1 + if $_display_loop_i >= 0 + jmp '_display_loopend' + add $_display_buf ' ' + jmp '_display_loop' + :_display_loopend + echo $_display_buf +jmp $display_ret + +# generate subroutine +:generate + set $set_new_id 'next_state' + set $set_new_ret 'set_new_ret_b' + jmp 'set_new' + :set_new_ret_b + set $set_len_id 'state' + set $set_len_ret 'set_len_ret_a' + jmp 'set_len' + :set_len_ret_a + set $_generate_len $ret + set $_generate_i 0 + :_generate_loop + if $_generate_i >= $_generate_len + jmp '_generate_loopend' + set $set_get_id 'state' + set $set_get_pos $_generate_i + set $set_get_ret 'set_get_ret_a' + jmp 'set_get' + :set_get_ret_a + set $_generate_agent1 $ret + set $_generate_agent2 $ret + add $_generate_agent1 1 + set $set_contains_id 'state' + set $set_contains_check $_generate_agent1 + set $set_contains_ret 'set_contains_ret_b' + jmp 'set_contains' + :set_contains_ret_b + if $ret == true + jmp '_generate_cont1' + sub $_generate_agent1 1 + set $set_add_id 'next_state' + set $set_add_item $_generate_agent1 + set $set_add_ret 'set_add_ret_b' + jmp 'set_add' + :set_add_ret_b + :_generate_cont1 + sub $_generate_agent2 1 + set $set_contains_id 'state' + set $set_contains_check $_generate_agent2 + set $set_contains_ret 'set_contains_ret_c' + jmp 'set_contains' + :set_contains_ret_c + if $ret == true + jmp '_generate_cont2' + set $set_add_id 'next_state' + set $set_add_item $_generate_agent2 + set $set_add_ret 'set_add_ret_c' + jmp 'set_add' + :set_add_ret_c + add $_generate_agent2 1 + set $set_add_id 'next_state' + set $set_add_item $_generate_agent2 + set $set_add_ret 'set_add_ret_d' + jmp 'set_add' + :set_add_ret_d + :_generate_cont2 + add $_generate_i 1 + jmp '_generate_loop' + :_generate_loopend +jmp $generate_ret + +# swap subroutine +:swap + set $set_new_id 'state' + set $set_new_ret 'set_new_ret_c' + jmp 'set_new' + :set_new_ret_c + set $set_len_id 'next_state' + set $set_len_ret 'set_len_ret_b' + jmp 'set_len' + :set_len_ret_b + set $_swap_len $ret + set $_swap_i 0 + :_swap_loop + if $_swap_i >= $_swap_len + jmp '_swap_loopend' + set $set_get_id 'next_state' + set $set_get_pos $_swap_i + set $set_get_ret 'set_get_ret_b' + jmp 'set_get' + :set_get_ret_b + set $set_add_id 'state' + set $set_add_item $ret + set $set_add_ret 'set_add_ret_e' + jmp 'set_add' + :set_add_ret_e + add $_swap_i 1 + jmp '_swap_loop' + :_swap_loopend +jmp $swap_ret + +# end +:end