diff --git a/programs/fibonacci.json b/programs/fibonacci.json new file mode 100644 index 0000000..b12653e --- /dev/null +++ b/programs/fibonacci.json @@ -0,0 +1,3111 @@ +{ + "states": [ + "init", + "s1", + "s2", + "s3", + "s4", + "s5", + "s6", + "s7", + "s8", + "s9", + "s10", + "s11", + "s12", + "s13", + "s14", + "s15", + "s16", + "s17", + "s18", + "s19", + "s20", + "s21", + "s22", + "s23", + "s24", + "s25", + "s26", + "s27", + "s28", + "s29", + "s30", + "s31", + "s32", + "s33", + "s34", + "s35", + "s36", + "s37", + "s38", + "s39", + "s40", + "s41", + "s42", + "s43", + "s44", + "s45", + "s46", + "s47", + "s48", + "s49", + "s50", + "s51", + "s52", + "s53", + "s54", + "s55", + "s56", + "s57", + "s58", + "s59", + "s60", + "s61", + "s62", + "s63", + "s64", + "s65", + "s66", + "s67", + "s68", + "s69", + "s70", + "s71", + "s72", + "s73", + "s74", + "s75", + "s76", + "s77", + "s78", + "s79", + "s80", + "s81", + "s82", + "s83", + "s84", + "s85", + "s86", + "s87", + "s88", + "s89", + "s90", + "s91", + "s92", + "s93", + "s94", + "s95", + "s96", + "s97", + "s98", + "s99", + "s100", + "s101", + "s102", + "s103", + "s104", + "s105", + "s106", + "s107", + "s108", + "s109", + "s110", + "s111", + "s112", + "s113", + "s114", + "s115", + "s116", + "s117", + "s118", + "s119", + "s120", + "s121", + "s122", + "s123", + "s124", + "s125", + "s126", + "s127", + "s128", + "s129", + "s130", + "s131", + "s132", + "s133", + "s134", + "s135", + "s136", + "s137", + "s138", + "s139", + "s140", + "s141", + "s142", + "s143", + "s144", + "s145", + "s146", + "s147", + "s148", + "s149", + "s150", + "s151", + "s152", + "s153", + "s154", + "s155", + "s156", + "s157", + "s158", + "s159", + "s160", + "s161", + "s162", + "s163", + "s164", + "s165", + "s166", + "s167", + "s168", + "s169", + "s170", + "s171", + "s172", + "s173", + "s174", + "s175", + "s176", + "s177", + "s178", + "s179", + "s180", + "s181", + "s182", + "s183", + "s184", + "s185", + "s186", + "s187", + "s188", + "s189", + "s190", + "s191", + "s192", + "s193", + "s194", + "s195", + "s196", + "s197", + "s198", + "s199", + "s200", + "s201", + "s202", + "s203", + "s204", + "s205", + "s206", + "s207", + "s208", + "s209", + "s210", + "s211", + "s212", + "s213", + "s214", + "s215", + "s216", + "s217", + "s218", + "s219", + "s220", + "s221", + "s222", + "s223", + "s224", + "s225", + "s226", + "s227", + "s228", + "s229", + "s230", + "s231", + "s232", + "s233", + "s234", + "s235", + "s236", + "s237", + "s238", + "s239", + "s240", + "s241", + "s242", + "s243", + "s244", + "s245", + "s246", + "s247", + "s248", + "s249", + "s250", + "s251", + "s252", + "s253", + "s254", + "s255", + "s256", + "s257", + "s258", + "s259", + "s260", + "s261", + "s262", + "s263", + "s264", + "s265", + "s266", + "s267", + "s268", + "s269", + "s270", + "s271", + "s272", + "s273", + "s274", + "s275", + "s276", + "s277", + "s278", + "s279", + "s280", + "s281", + "s282", + "s283", + "s284", + "s285", + "s286", + "s287", + "s288", + "s289", + "s290", + "s291", + "s292", + "s293", + "s294", + "s295", + "s296", + "s297", + "s298", + "s299", + "s300", + "s301", + "s302", + "s303", + "s304", + "s305", + "s306", + "s307", + "s308", + "s309", + "s310", + "s311", + "s312", + "s313", + "s314", + "s315", + "s316", + "s317", + "s318", + "s319", + "s320", + "s321", + "s322", + "s323", + "s324", + "s325", + "s326", + "s327", + "s328", + "s329", + "s330", + "s331", + "s332", + "s333", + "s334", + "s335", + "s336", + "s337", + "s338", + "s339", + "s340", + "s341", + "s342", + "s343", + "s344", + "s345", + "s346", + "s347", + "s348", + "s349", + "s350", + "s351", + "s352", + "s353", + "s354", + "s355", + "s356", + "s357", + "s358", + "s359", + "s360", + "s361", + "s362", + "s363", + "s364", + "s365", + "s366", + "s367", + "s368", + "s369", + "s370", + "s371", + "s372", + "s373", + "s374", + "s375", + "s376", + "s377", + "s378", + "s379", + "s380", + "s381", + "s382", + "s383", + "s384", + "s385", + "s386", + "s387", + "HALT" + ], + "initialState": "init", + "transitions": { + "init": { + "_": { + "next": "s1", + "write": "1", + "move": "R" + } + }, + "s1": { + "_": { + "next": "s2", + "write": "_", + "move": "R" + } + }, + "s2": { + "_": { + "next": "s3", + "write": "1", + "move": "R" + } + }, + "s3": { + "_": { + "next": "s4", + "write": "_", + "move": "R" + } + }, + "s4": { + "_": { + "next": "s5", + "write": "1", + "move": "R" + } + }, + "s5": { + "_": { + "next": "s6", + "write": "1", + "move": "R" + } + }, + "s6": { + "_": { + "next": "s7", + "write": "_", + "move": "R" + } + }, + "s7": { + "_": { + "next": "s8", + "write": "1", + "move": "R" + } + }, + "s8": { + "_": { + "next": "s9", + "write": "1", + "move": "R" + } + }, + "s9": { + "_": { + "next": "s10", + "write": "1", + "move": "R" + } + }, + "s10": { + "_": { + "next": "s11", + "write": "_", + "move": "R" + } + }, + "s11": { + "_": { + "next": "s12", + "write": "1", + "move": "R" + } + }, + "s12": { + "_": { + "next": "s13", + "write": "1", + "move": "R" + } + }, + "s13": { + "_": { + "next": "s14", + "write": "1", + "move": "R" + } + }, + "s14": { + "_": { + "next": "s15", + "write": "1", + "move": "R" + } + }, + "s15": { + "_": { + "next": "s16", + "write": "1", + "move": "R" + } + }, + "s16": { + "_": { + "next": "s17", + "write": "_", + "move": "R" + } + }, + "s17": { + "_": { + "next": "s18", + "write": "1", + "move": "R" + } + }, + "s18": { + "_": { + "next": "s19", + "write": "1", + "move": "R" + } + }, + "s19": { + "_": { + "next": "s20", + "write": "1", + "move": "R" + } + }, + "s20": { + "_": { + "next": "s21", + "write": "1", + "move": "R" + } + }, + "s21": { + "_": { + "next": "s22", + "write": "1", + "move": "R" + } + }, + "s22": { + "_": { + "next": "s23", + "write": "1", + "move": "R" + } + }, + "s23": { + "_": { + "next": "s24", + "write": "1", + "move": "R" + } + }, + "s24": { + "_": { + "next": "s25", + "write": "1", + "move": "R" + } + }, + "s25": { + "_": { + "next": "s26", + "write": "_", + "move": "R" + } + }, + "s26": { + "_": { + "next": "s27", + "write": "1", + "move": "R" + } + }, + "s27": { + "_": { + "next": "s28", + "write": "1", + "move": "R" + } + }, + "s28": { + "_": { + "next": "s29", + "write": "1", + "move": "R" + } + }, + "s29": { + "_": { + "next": "s30", + "write": "1", + "move": "R" + } + }, + "s30": { + "_": { + "next": "s31", + "write": "1", + "move": "R" + } + }, + "s31": { + "_": { + "next": "s32", + "write": "1", + "move": "R" + } + }, + "s32": { + "_": { + "next": "s33", + "write": "1", + "move": "R" + } + }, + "s33": { + "_": { + "next": "s34", + "write": "1", + "move": "R" + } + }, + "s34": { + "_": { + "next": "s35", + "write": "1", + "move": "R" + } + }, + "s35": { + "_": { + "next": "s36", + "write": "1", + "move": "R" + } + }, + "s36": { + "_": { + "next": "s37", + "write": "1", + "move": "R" + } + }, + "s37": { + "_": { + "next": "s38", + "write": "1", + "move": "R" + } + }, + "s38": { + "_": { + "next": "s39", + "write": "1", + "move": "R" + } + }, + "s39": { + "_": { + "next": "s40", + "write": "_", + "move": "R" + } + }, + "s40": { + "_": { + "next": "s41", + "write": "1", + "move": "R" + } + }, + "s41": { + "_": { + "next": "s42", + "write": "1", + "move": "R" + } + }, + "s42": { + "_": { + "next": "s43", + "write": "1", + "move": "R" + } + }, + "s43": { + "_": { + "next": "s44", + "write": "1", + "move": "R" + } + }, + "s44": { + "_": { + "next": "s45", + "write": "1", + "move": "R" + } + }, + "s45": { + "_": { + "next": "s46", + "write": "1", + "move": "R" + } + }, + "s46": { + "_": { + "next": "s47", + "write": "1", + "move": "R" + } + }, + "s47": { + "_": { + "next": "s48", + "write": "1", + "move": "R" + } + }, + "s48": { + "_": { + "next": "s49", + "write": "1", + "move": "R" + } + }, + "s49": { + "_": { + "next": "s50", + "write": "1", + "move": "R" + } + }, + "s50": { + "_": { + "next": "s51", + "write": "1", + "move": "R" + } + }, + "s51": { + "_": { + "next": "s52", + "write": "1", + "move": "R" + } + }, + "s52": { + "_": { + "next": "s53", + "write": "1", + "move": "R" + } + }, + "s53": { + "_": { + "next": "s54", + "write": "1", + "move": "R" + } + }, + "s54": { + "_": { + "next": "s55", + "write": "1", + "move": "R" + } + }, + "s55": { + "_": { + "next": "s56", + "write": "1", + "move": "R" + } + }, + "s56": { + "_": { + "next": "s57", + "write": "1", + "move": "R" + } + }, + "s57": { + "_": { + "next": "s58", + "write": "1", + "move": "R" + } + }, + "s58": { + "_": { + "next": "s59", + "write": "1", + "move": "R" + } + }, + "s59": { + "_": { + "next": "s60", + "write": "1", + "move": "R" + } + }, + "s60": { + "_": { + "next": "s61", + "write": "1", + "move": "R" + } + }, + "s61": { + "_": { + "next": "s62", + "write": "_", + "move": "R" + } + }, + "s62": { + "_": { + "next": "s63", + "write": "1", + "move": "R" + } + }, + "s63": { + "_": { + "next": "s64", + "write": "1", + "move": "R" + } + }, + "s64": { + "_": { + "next": "s65", + "write": "1", + "move": "R" + } + }, + "s65": { + "_": { + "next": "s66", + "write": "1", + "move": "R" + } + }, + "s66": { + "_": { + "next": "s67", + "write": "1", + "move": "R" + } + }, + "s67": { + "_": { + "next": "s68", + "write": "1", + "move": "R" + } + }, + "s68": { + "_": { + "next": "s69", + "write": "1", + "move": "R" + } + }, + "s69": { + "_": { + "next": "s70", + "write": "1", + "move": "R" + } + }, + "s70": { + "_": { + "next": "s71", + "write": "1", + "move": "R" + } + }, + "s71": { + "_": { + "next": "s72", + "write": "1", + "move": "R" + } + }, + "s72": { + "_": { + "next": "s73", + "write": "1", + "move": "R" + } + }, + "s73": { + "_": { + "next": "s74", + "write": "1", + "move": "R" + } + }, + "s74": { + "_": { + "next": "s75", + "write": "1", + "move": "R" + } + }, + "s75": { + "_": { + "next": "s76", + "write": "1", + "move": "R" + } + }, + "s76": { + "_": { + "next": "s77", + "write": "1", + "move": "R" + } + }, + "s77": { + "_": { + "next": "s78", + "write": "1", + "move": "R" + } + }, + "s78": { + "_": { + "next": "s79", + "write": "1", + "move": "R" + } + }, + "s79": { + "_": { + "next": "s80", + "write": "1", + "move": "R" + } + }, + "s80": { + "_": { + "next": "s81", + "write": "1", + "move": "R" + } + }, + "s81": { + "_": { + "next": "s82", + "write": "1", + "move": "R" + } + }, + "s82": { + "_": { + "next": "s83", + "write": "1", + "move": "R" + } + }, + "s83": { + "_": { + "next": "s84", + "write": "1", + "move": "R" + } + }, + "s84": { + "_": { + "next": "s85", + "write": "1", + "move": "R" + } + }, + "s85": { + "_": { + "next": "s86", + "write": "1", + "move": "R" + } + }, + "s86": { + "_": { + "next": "s87", + "write": "1", + "move": "R" + } + }, + "s87": { + "_": { + "next": "s88", + "write": "1", + "move": "R" + } + }, + "s88": { + "_": { + "next": "s89", + "write": "1", + "move": "R" + } + }, + "s89": { + "_": { + "next": "s90", + "write": "1", + "move": "R" + } + }, + "s90": { + "_": { + "next": "s91", + "write": "1", + "move": "R" + } + }, + "s91": { + "_": { + "next": "s92", + "write": "1", + "move": "R" + } + }, + "s92": { + "_": { + "next": "s93", + "write": "1", + "move": "R" + } + }, + "s93": { + "_": { + "next": "s94", + "write": "1", + "move": "R" + } + }, + "s94": { + "_": { + "next": "s95", + "write": "1", + "move": "R" + } + }, + "s95": { + "_": { + "next": "s96", + "write": "1", + "move": "R" + } + }, + "s96": { + "_": { + "next": "s97", + "write": "_", + "move": "R" + } + }, + "s97": { + "_": { + "next": "s98", + "write": "1", + "move": "R" + } + }, + "s98": { + "_": { + "next": "s99", + "write": "1", + "move": "R" + } + }, + "s99": { + "_": { + "next": "s100", + "write": "1", + "move": "R" + } + }, + "s100": { + "_": { + "next": "s101", + "write": "1", + "move": "R" + } + }, + "s101": { + "_": { + "next": "s102", + "write": "1", + "move": "R" + } + }, + "s102": { + "_": { + "next": "s103", + "write": "1", + "move": "R" + } + }, + "s103": { + "_": { + "next": "s104", + "write": "1", + "move": "R" + } + }, + "s104": { + "_": { + "next": "s105", + "write": "1", + "move": "R" + } + }, + "s105": { + "_": { + "next": "s106", + "write": "1", + "move": "R" + } + }, + "s106": { + "_": { + "next": "s107", + "write": "1", + "move": "R" + } + }, + "s107": { + "_": { + "next": "s108", + "write": "1", + "move": "R" + } + }, + "s108": { + "_": { + "next": "s109", + "write": "1", + "move": "R" + } + }, + "s109": { + "_": { + "next": "s110", + "write": "1", + "move": "R" + } + }, + "s110": { + "_": { + "next": "s111", + "write": "1", + "move": "R" + } + }, + "s111": { + "_": { + "next": "s112", + "write": "1", + "move": "R" + } + }, + "s112": { + "_": { + "next": "s113", + "write": "1", + "move": "R" + } + }, + "s113": { + "_": { + "next": "s114", + "write": "1", + "move": "R" + } + }, + "s114": { + "_": { + "next": "s115", + "write": "1", + "move": "R" + } + }, + "s115": { + "_": { + "next": "s116", + "write": "1", + "move": "R" + } + }, + "s116": { + "_": { + "next": "s117", + "write": "1", + "move": "R" + } + }, + "s117": { + "_": { + "next": "s118", + "write": "1", + "move": "R" + } + }, + "s118": { + "_": { + "next": "s119", + "write": "1", + "move": "R" + } + }, + "s119": { + "_": { + "next": "s120", + "write": "1", + "move": "R" + } + }, + "s120": { + "_": { + "next": "s121", + "write": "1", + "move": "R" + } + }, + "s121": { + "_": { + "next": "s122", + "write": "1", + "move": "R" + } + }, + "s122": { + "_": { + "next": "s123", + "write": "1", + "move": "R" + } + }, + "s123": { + "_": { + "next": "s124", + "write": "1", + "move": "R" + } + }, + "s124": { + "_": { + "next": "s125", + "write": "1", + "move": "R" + } + }, + "s125": { + "_": { + "next": "s126", + "write": "1", + "move": "R" + } + }, + "s126": { + "_": { + "next": "s127", + "write": "1", + "move": "R" + } + }, + "s127": { + "_": { + "next": "s128", + "write": "1", + "move": "R" + } + }, + "s128": { + "_": { + "next": "s129", + "write": "1", + "move": "R" + } + }, + "s129": { + "_": { + "next": "s130", + "write": "1", + "move": "R" + } + }, + "s130": { + "_": { + "next": "s131", + "write": "1", + "move": "R" + } + }, + "s131": { + "_": { + "next": "s132", + "write": "1", + "move": "R" + } + }, + "s132": { + "_": { + "next": "s133", + "write": "1", + "move": "R" + } + }, + "s133": { + "_": { + "next": "s134", + "write": "1", + "move": "R" + } + }, + "s134": { + "_": { + "next": "s135", + "write": "1", + "move": "R" + } + }, + "s135": { + "_": { + "next": "s136", + "write": "1", + "move": "R" + } + }, + "s136": { + "_": { + "next": "s137", + "write": "1", + "move": "R" + } + }, + "s137": { + "_": { + "next": "s138", + "write": "1", + "move": "R" + } + }, + "s138": { + "_": { + "next": "s139", + "write": "1", + "move": "R" + } + }, + "s139": { + "_": { + "next": "s140", + "write": "1", + "move": "R" + } + }, + "s140": { + "_": { + "next": "s141", + "write": "1", + "move": "R" + } + }, + "s141": { + "_": { + "next": "s142", + "write": "1", + "move": "R" + } + }, + "s142": { + "_": { + "next": "s143", + "write": "1", + "move": "R" + } + }, + "s143": { + "_": { + "next": "s144", + "write": "1", + "move": "R" + } + }, + "s144": { + "_": { + "next": "s145", + "write": "1", + "move": "R" + } + }, + "s145": { + "_": { + "next": "s146", + "write": "1", + "move": "R" + } + }, + "s146": { + "_": { + "next": "s147", + "write": "1", + "move": "R" + } + }, + "s147": { + "_": { + "next": "s148", + "write": "1", + "move": "R" + } + }, + "s148": { + "_": { + "next": "s149", + "write": "1", + "move": "R" + } + }, + "s149": { + "_": { + "next": "s150", + "write": "1", + "move": "R" + } + }, + "s150": { + "_": { + "next": "s151", + "write": "1", + "move": "R" + } + }, + "s151": { + "_": { + "next": "s152", + "write": "1", + "move": "R" + } + }, + "s152": { + "_": { + "next": "s153", + "write": "_", + "move": "R" + } + }, + "s153": { + "_": { + "next": "s154", + "write": "1", + "move": "R" + } + }, + "s154": { + "_": { + "next": "s155", + "write": "1", + "move": "R" + } + }, + "s155": { + "_": { + "next": "s156", + "write": "1", + "move": "R" + } + }, + "s156": { + "_": { + "next": "s157", + "write": "1", + "move": "R" + } + }, + "s157": { + "_": { + "next": "s158", + "write": "1", + "move": "R" + } + }, + "s158": { + "_": { + "next": "s159", + "write": "1", + "move": "R" + } + }, + "s159": { + "_": { + "next": "s160", + "write": "1", + "move": "R" + } + }, + "s160": { + "_": { + "next": "s161", + "write": "1", + "move": "R" + } + }, + "s161": { + "_": { + "next": "s162", + "write": "1", + "move": "R" + } + }, + "s162": { + "_": { + "next": "s163", + "write": "1", + "move": "R" + } + }, + "s163": { + "_": { + "next": "s164", + "write": "1", + "move": "R" + } + }, + "s164": { + "_": { + "next": "s165", + "write": "1", + "move": "R" + } + }, + "s165": { + "_": { + "next": "s166", + "write": "1", + "move": "R" + } + }, + "s166": { + "_": { + "next": "s167", + "write": "1", + "move": "R" + } + }, + "s167": { + "_": { + "next": "s168", + "write": "1", + "move": "R" + } + }, + "s168": { + "_": { + "next": "s169", + "write": "1", + "move": "R" + } + }, + "s169": { + "_": { + "next": "s170", + "write": "1", + "move": "R" + } + }, + "s170": { + "_": { + "next": "s171", + "write": "1", + "move": "R" + } + }, + "s171": { + "_": { + "next": "s172", + "write": "1", + "move": "R" + } + }, + "s172": { + "_": { + "next": "s173", + "write": "1", + "move": "R" + } + }, + "s173": { + "_": { + "next": "s174", + "write": "1", + "move": "R" + } + }, + "s174": { + "_": { + "next": "s175", + "write": "1", + "move": "R" + } + }, + "s175": { + "_": { + "next": "s176", + "write": "1", + "move": "R" + } + }, + "s176": { + "_": { + "next": "s177", + "write": "1", + "move": "R" + } + }, + "s177": { + "_": { + "next": "s178", + "write": "1", + "move": "R" + } + }, + "s178": { + "_": { + "next": "s179", + "write": "1", + "move": "R" + } + }, + "s179": { + "_": { + "next": "s180", + "write": "1", + "move": "R" + } + }, + "s180": { + "_": { + "next": "s181", + "write": "1", + "move": "R" + } + }, + "s181": { + "_": { + "next": "s182", + "write": "1", + "move": "R" + } + }, + "s182": { + "_": { + "next": "s183", + "write": "1", + "move": "R" + } + }, + "s183": { + "_": { + "next": "s184", + "write": "1", + "move": "R" + } + }, + "s184": { + "_": { + "next": "s185", + "write": "1", + "move": "R" + } + }, + "s185": { + "_": { + "next": "s186", + "write": "1", + "move": "R" + } + }, + "s186": { + "_": { + "next": "s187", + "write": "1", + "move": "R" + } + }, + "s187": { + "_": { + "next": "s188", + "write": "1", + "move": "R" + } + }, + "s188": { + "_": { + "next": "s189", + "write": "1", + "move": "R" + } + }, + "s189": { + "_": { + "next": "s190", + "write": "1", + "move": "R" + } + }, + "s190": { + "_": { + "next": "s191", + "write": "1", + "move": "R" + } + }, + "s191": { + "_": { + "next": "s192", + "write": "1", + "move": "R" + } + }, + "s192": { + "_": { + "next": "s193", + "write": "1", + "move": "R" + } + }, + "s193": { + "_": { + "next": "s194", + "write": "1", + "move": "R" + } + }, + "s194": { + "_": { + "next": "s195", + "write": "1", + "move": "R" + } + }, + "s195": { + "_": { + "next": "s196", + "write": "1", + "move": "R" + } + }, + "s196": { + "_": { + "next": "s197", + "write": "1", + "move": "R" + } + }, + "s197": { + "_": { + "next": "s198", + "write": "1", + "move": "R" + } + }, + "s198": { + "_": { + "next": "s199", + "write": "1", + "move": "R" + } + }, + "s199": { + "_": { + "next": "s200", + "write": "1", + "move": "R" + } + }, + "s200": { + "_": { + "next": "s201", + "write": "1", + "move": "R" + } + }, + "s201": { + "_": { + "next": "s202", + "write": "1", + "move": "R" + } + }, + "s202": { + "_": { + "next": "s203", + "write": "1", + "move": "R" + } + }, + "s203": { + "_": { + "next": "s204", + "write": "1", + "move": "R" + } + }, + "s204": { + "_": { + "next": "s205", + "write": "1", + "move": "R" + } + }, + "s205": { + "_": { + "next": "s206", + "write": "1", + "move": "R" + } + }, + "s206": { + "_": { + "next": "s207", + "write": "1", + "move": "R" + } + }, + "s207": { + "_": { + "next": "s208", + "write": "1", + "move": "R" + } + }, + "s208": { + "_": { + "next": "s209", + "write": "1", + "move": "R" + } + }, + "s209": { + "_": { + "next": "s210", + "write": "1", + "move": "R" + } + }, + "s210": { + "_": { + "next": "s211", + "write": "1", + "move": "R" + } + }, + "s211": { + "_": { + "next": "s212", + "write": "1", + "move": "R" + } + }, + "s212": { + "_": { + "next": "s213", + "write": "1", + "move": "R" + } + }, + "s213": { + "_": { + "next": "s214", + "write": "1", + "move": "R" + } + }, + "s214": { + "_": { + "next": "s215", + "write": "1", + "move": "R" + } + }, + "s215": { + "_": { + "next": "s216", + "write": "1", + "move": "R" + } + }, + "s216": { + "_": { + "next": "s217", + "write": "1", + "move": "R" + } + }, + "s217": { + "_": { + "next": "s218", + "write": "1", + "move": "R" + } + }, + "s218": { + "_": { + "next": "s219", + "write": "1", + "move": "R" + } + }, + "s219": { + "_": { + "next": "s220", + "write": "1", + "move": "R" + } + }, + "s220": { + "_": { + "next": "s221", + "write": "1", + "move": "R" + } + }, + "s221": { + "_": { + "next": "s222", + "write": "1", + "move": "R" + } + }, + "s222": { + "_": { + "next": "s223", + "write": "1", + "move": "R" + } + }, + "s223": { + "_": { + "next": "s224", + "write": "1", + "move": "R" + } + }, + "s224": { + "_": { + "next": "s225", + "write": "1", + "move": "R" + } + }, + "s225": { + "_": { + "next": "s226", + "write": "1", + "move": "R" + } + }, + "s226": { + "_": { + "next": "s227", + "write": "1", + "move": "R" + } + }, + "s227": { + "_": { + "next": "s228", + "write": "1", + "move": "R" + } + }, + "s228": { + "_": { + "next": "s229", + "write": "1", + "move": "R" + } + }, + "s229": { + "_": { + "next": "s230", + "write": "1", + "move": "R" + } + }, + "s230": { + "_": { + "next": "s231", + "write": "1", + "move": "R" + } + }, + "s231": { + "_": { + "next": "s232", + "write": "1", + "move": "R" + } + }, + "s232": { + "_": { + "next": "s233", + "write": "1", + "move": "R" + } + }, + "s233": { + "_": { + "next": "s234", + "write": "1", + "move": "R" + } + }, + "s234": { + "_": { + "next": "s235", + "write": "1", + "move": "R" + } + }, + "s235": { + "_": { + "next": "s236", + "write": "1", + "move": "R" + } + }, + "s236": { + "_": { + "next": "s237", + "write": "1", + "move": "R" + } + }, + "s237": { + "_": { + "next": "s238", + "write": "1", + "move": "R" + } + }, + "s238": { + "_": { + "next": "s239", + "write": "1", + "move": "R" + } + }, + "s239": { + "_": { + "next": "s240", + "write": "1", + "move": "R" + } + }, + "s240": { + "_": { + "next": "s241", + "write": "1", + "move": "R" + } + }, + "s241": { + "_": { + "next": "s242", + "write": "1", + "move": "R" + } + }, + "s242": { + "_": { + "next": "s243", + "write": "_", + "move": "R" + } + }, + "s243": { + "_": { + "next": "s244", + "write": "1", + "move": "R" + } + }, + "s244": { + "_": { + "next": "s245", + "write": "1", + "move": "R" + } + }, + "s245": { + "_": { + "next": "s246", + "write": "1", + "move": "R" + } + }, + "s246": { + "_": { + "next": "s247", + "write": "1", + "move": "R" + } + }, + "s247": { + "_": { + "next": "s248", + "write": "1", + "move": "R" + } + }, + "s248": { + "_": { + "next": "s249", + "write": "1", + "move": "R" + } + }, + "s249": { + "_": { + "next": "s250", + "write": "1", + "move": "R" + } + }, + "s250": { + "_": { + "next": "s251", + "write": "1", + "move": "R" + } + }, + "s251": { + "_": { + "next": "s252", + "write": "1", + "move": "R" + } + }, + "s252": { + "_": { + "next": "s253", + "write": "1", + "move": "R" + } + }, + "s253": { + "_": { + "next": "s254", + "write": "1", + "move": "R" + } + }, + "s254": { + "_": { + "next": "s255", + "write": "1", + "move": "R" + } + }, + "s255": { + "_": { + "next": "s256", + "write": "1", + "move": "R" + } + }, + "s256": { + "_": { + "next": "s257", + "write": "1", + "move": "R" + } + }, + "s257": { + "_": { + "next": "s258", + "write": "1", + "move": "R" + } + }, + "s258": { + "_": { + "next": "s259", + "write": "1", + "move": "R" + } + }, + "s259": { + "_": { + "next": "s260", + "write": "1", + "move": "R" + } + }, + "s260": { + "_": { + "next": "s261", + "write": "1", + "move": "R" + } + }, + "s261": { + "_": { + "next": "s262", + "write": "1", + "move": "R" + } + }, + "s262": { + "_": { + "next": "s263", + "write": "1", + "move": "R" + } + }, + "s263": { + "_": { + "next": "s264", + "write": "1", + "move": "R" + } + }, + "s264": { + "_": { + "next": "s265", + "write": "1", + "move": "R" + } + }, + "s265": { + "_": { + "next": "s266", + "write": "1", + "move": "R" + } + }, + "s266": { + "_": { + "next": "s267", + "write": "1", + "move": "R" + } + }, + "s267": { + "_": { + "next": "s268", + "write": "1", + "move": "R" + } + }, + "s268": { + "_": { + "next": "s269", + "write": "1", + "move": "R" + } + }, + "s269": { + "_": { + "next": "s270", + "write": "1", + "move": "R" + } + }, + "s270": { + "_": { + "next": "s271", + "write": "1", + "move": "R" + } + }, + "s271": { + "_": { + "next": "s272", + "write": "1", + "move": "R" + } + }, + "s272": { + "_": { + "next": "s273", + "write": "1", + "move": "R" + } + }, + "s273": { + "_": { + "next": "s274", + "write": "1", + "move": "R" + } + }, + "s274": { + "_": { + "next": "s275", + "write": "1", + "move": "R" + } + }, + "s275": { + "_": { + "next": "s276", + "write": "1", + "move": "R" + } + }, + "s276": { + "_": { + "next": "s277", + "write": "1", + "move": "R" + } + }, + "s277": { + "_": { + "next": "s278", + "write": "1", + "move": "R" + } + }, + "s278": { + "_": { + "next": "s279", + "write": "1", + "move": "R" + } + }, + "s279": { + "_": { + "next": "s280", + "write": "1", + "move": "R" + } + }, + "s280": { + "_": { + "next": "s281", + "write": "1", + "move": "R" + } + }, + "s281": { + "_": { + "next": "s282", + "write": "1", + "move": "R" + } + }, + "s282": { + "_": { + "next": "s283", + "write": "1", + "move": "R" + } + }, + "s283": { + "_": { + "next": "s284", + "write": "1", + "move": "R" + } + }, + "s284": { + "_": { + "next": "s285", + "write": "1", + "move": "R" + } + }, + "s285": { + "_": { + "next": "s286", + "write": "1", + "move": "R" + } + }, + "s286": { + "_": { + "next": "s287", + "write": "1", + "move": "R" + } + }, + "s287": { + "_": { + "next": "s288", + "write": "1", + "move": "R" + } + }, + "s288": { + "_": { + "next": "s289", + "write": "1", + "move": "R" + } + }, + "s289": { + "_": { + "next": "s290", + "write": "1", + "move": "R" + } + }, + "s290": { + "_": { + "next": "s291", + "write": "1", + "move": "R" + } + }, + "s291": { + "_": { + "next": "s292", + "write": "1", + "move": "R" + } + }, + "s292": { + "_": { + "next": "s293", + "write": "1", + "move": "R" + } + }, + "s293": { + "_": { + "next": "s294", + "write": "1", + "move": "R" + } + }, + "s294": { + "_": { + "next": "s295", + "write": "1", + "move": "R" + } + }, + "s295": { + "_": { + "next": "s296", + "write": "1", + "move": "R" + } + }, + "s296": { + "_": { + "next": "s297", + "write": "1", + "move": "R" + } + }, + "s297": { + "_": { + "next": "s298", + "write": "1", + "move": "R" + } + }, + "s298": { + "_": { + "next": "s299", + "write": "1", + "move": "R" + } + }, + "s299": { + "_": { + "next": "s300", + "write": "1", + "move": "R" + } + }, + "s300": { + "_": { + "next": "s301", + "write": "1", + "move": "R" + } + }, + "s301": { + "_": { + "next": "s302", + "write": "1", + "move": "R" + } + }, + "s302": { + "_": { + "next": "s303", + "write": "1", + "move": "R" + } + }, + "s303": { + "_": { + "next": "s304", + "write": "1", + "move": "R" + } + }, + "s304": { + "_": { + "next": "s305", + "write": "1", + "move": "R" + } + }, + "s305": { + "_": { + "next": "s306", + "write": "1", + "move": "R" + } + }, + "s306": { + "_": { + "next": "s307", + "write": "1", + "move": "R" + } + }, + "s307": { + "_": { + "next": "s308", + "write": "1", + "move": "R" + } + }, + "s308": { + "_": { + "next": "s309", + "write": "1", + "move": "R" + } + }, + "s309": { + "_": { + "next": "s310", + "write": "1", + "move": "R" + } + }, + "s310": { + "_": { + "next": "s311", + "write": "1", + "move": "R" + } + }, + "s311": { + "_": { + "next": "s312", + "write": "1", + "move": "R" + } + }, + "s312": { + "_": { + "next": "s313", + "write": "1", + "move": "R" + } + }, + "s313": { + "_": { + "next": "s314", + "write": "1", + "move": "R" + } + }, + "s314": { + "_": { + "next": "s315", + "write": "1", + "move": "R" + } + }, + "s315": { + "_": { + "next": "s316", + "write": "1", + "move": "R" + } + }, + "s316": { + "_": { + "next": "s317", + "write": "1", + "move": "R" + } + }, + "s317": { + "_": { + "next": "s318", + "write": "1", + "move": "R" + } + }, + "s318": { + "_": { + "next": "s319", + "write": "1", + "move": "R" + } + }, + "s319": { + "_": { + "next": "s320", + "write": "1", + "move": "R" + } + }, + "s320": { + "_": { + "next": "s321", + "write": "1", + "move": "R" + } + }, + "s321": { + "_": { + "next": "s322", + "write": "1", + "move": "R" + } + }, + "s322": { + "_": { + "next": "s323", + "write": "1", + "move": "R" + } + }, + "s323": { + "_": { + "next": "s324", + "write": "1", + "move": "R" + } + }, + "s324": { + "_": { + "next": "s325", + "write": "1", + "move": "R" + } + }, + "s325": { + "_": { + "next": "s326", + "write": "1", + "move": "R" + } + }, + "s326": { + "_": { + "next": "s327", + "write": "1", + "move": "R" + } + }, + "s327": { + "_": { + "next": "s328", + "write": "1", + "move": "R" + } + }, + "s328": { + "_": { + "next": "s329", + "write": "1", + "move": "R" + } + }, + "s329": { + "_": { + "next": "s330", + "write": "1", + "move": "R" + } + }, + "s330": { + "_": { + "next": "s331", + "write": "1", + "move": "R" + } + }, + "s331": { + "_": { + "next": "s332", + "write": "1", + "move": "R" + } + }, + "s332": { + "_": { + "next": "s333", + "write": "1", + "move": "R" + } + }, + "s333": { + "_": { + "next": "s334", + "write": "1", + "move": "R" + } + }, + "s334": { + "_": { + "next": "s335", + "write": "1", + "move": "R" + } + }, + "s335": { + "_": { + "next": "s336", + "write": "1", + "move": "R" + } + }, + "s336": { + "_": { + "next": "s337", + "write": "1", + "move": "R" + } + }, + "s337": { + "_": { + "next": "s338", + "write": "1", + "move": "R" + } + }, + "s338": { + "_": { + "next": "s339", + "write": "1", + "move": "R" + } + }, + "s339": { + "_": { + "next": "s340", + "write": "1", + "move": "R" + } + }, + "s340": { + "_": { + "next": "s341", + "write": "1", + "move": "R" + } + }, + "s341": { + "_": { + "next": "s342", + "write": "1", + "move": "R" + } + }, + "s342": { + "_": { + "next": "s343", + "write": "1", + "move": "R" + } + }, + "s343": { + "_": { + "next": "s344", + "write": "1", + "move": "R" + } + }, + "s344": { + "_": { + "next": "s345", + "write": "1", + "move": "R" + } + }, + "s345": { + "_": { + "next": "s346", + "write": "1", + "move": "R" + } + }, + "s346": { + "_": { + "next": "s347", + "write": "1", + "move": "R" + } + }, + "s347": { + "_": { + "next": "s348", + "write": "1", + "move": "R" + } + }, + "s348": { + "_": { + "next": "s349", + "write": "1", + "move": "R" + } + }, + "s349": { + "_": { + "next": "s350", + "write": "1", + "move": "R" + } + }, + "s350": { + "_": { + "next": "s351", + "write": "1", + "move": "R" + } + }, + "s351": { + "_": { + "next": "s352", + "write": "1", + "move": "R" + } + }, + "s352": { + "_": { + "next": "s353", + "write": "1", + "move": "R" + } + }, + "s353": { + "_": { + "next": "s354", + "write": "1", + "move": "R" + } + }, + "s354": { + "_": { + "next": "s355", + "write": "1", + "move": "R" + } + }, + "s355": { + "_": { + "next": "s356", + "write": "1", + "move": "R" + } + }, + "s356": { + "_": { + "next": "s357", + "write": "1", + "move": "R" + } + }, + "s357": { + "_": { + "next": "s358", + "write": "1", + "move": "R" + } + }, + "s358": { + "_": { + "next": "s359", + "write": "1", + "move": "R" + } + }, + "s359": { + "_": { + "next": "s360", + "write": "1", + "move": "R" + } + }, + "s360": { + "_": { + "next": "s361", + "write": "1", + "move": "R" + } + }, + "s361": { + "_": { + "next": "s362", + "write": "1", + "move": "R" + } + }, + "s362": { + "_": { + "next": "s363", + "write": "1", + "move": "R" + } + }, + "s363": { + "_": { + "next": "s364", + "write": "1", + "move": "R" + } + }, + "s364": { + "_": { + "next": "s365", + "write": "1", + "move": "R" + } + }, + "s365": { + "_": { + "next": "s366", + "write": "1", + "move": "R" + } + }, + "s366": { + "_": { + "next": "s367", + "write": "1", + "move": "R" + } + }, + "s367": { + "_": { + "next": "s368", + "write": "1", + "move": "R" + } + }, + "s368": { + "_": { + "next": "s369", + "write": "1", + "move": "R" + } + }, + "s369": { + "_": { + "next": "s370", + "write": "1", + "move": "R" + } + }, + "s370": { + "_": { + "next": "s371", + "write": "1", + "move": "R" + } + }, + "s371": { + "_": { + "next": "s372", + "write": "1", + "move": "R" + } + }, + "s372": { + "_": { + "next": "s373", + "write": "1", + "move": "R" + } + }, + "s373": { + "_": { + "next": "s374", + "write": "1", + "move": "R" + } + }, + "s374": { + "_": { + "next": "s375", + "write": "1", + "move": "R" + } + }, + "s375": { + "_": { + "next": "s376", + "write": "1", + "move": "R" + } + }, + "s376": { + "_": { + "next": "s377", + "write": "1", + "move": "R" + } + }, + "s377": { + "_": { + "next": "s378", + "write": "1", + "move": "R" + } + }, + "s378": { + "_": { + "next": "s379", + "write": "1", + "move": "R" + } + }, + "s379": { + "_": { + "next": "s380", + "write": "1", + "move": "R" + } + }, + "s380": { + "_": { + "next": "s381", + "write": "1", + "move": "R" + } + }, + "s381": { + "_": { + "next": "s382", + "write": "1", + "move": "R" + } + }, + "s382": { + "_": { + "next": "s383", + "write": "1", + "move": "R" + } + }, + "s383": { + "_": { + "next": "s384", + "write": "1", + "move": "R" + } + }, + "s384": { + "_": { + "next": "s385", + "write": "1", + "move": "R" + } + }, + "s385": { + "_": { + "next": "s386", + "write": "1", + "move": "R" + } + }, + "s386": { + "_": { + "next": "s387", + "write": "1", + "move": "R" + } + }, + "s387": { + "_": { + "next": "HALT", + "write": "_" + } + } + } +} \ No newline at end of file diff --git a/tests/IntegrationTest.php b/tests/IntegrationTest.php index f456cb8..1891f37 100644 --- a/tests/IntegrationTest.php +++ b/tests/IntegrationTest.php @@ -44,4 +44,25 @@ public function _readCode($filename): array $code = file_get_contents($filename); return json_decode($code, TRUE); } + + public function testFibonacci(): void + { + $code = $this->_readCode('programs/fibonacci.json'); + + $machine = new Machine(new Head(new Tape())); + $machine->load(new Program($code)); + $machine->run(); + + $result = (string) $machine->getTape(); + $numbers = explode('_', $result); + + # Should generate 12 Fibonacci numbers + $this->assertCount(12, $numbers); + + # Verify the sequence: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144 + $expected = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]; + foreach ($numbers as $i => $num) { + $this->assertEquals($expected[$i], strlen($num)); + } + } }