JSFiddle - React, Tailwind, and code Playground

by jrab227

HTML

<script src="http://d3js.org/d3.v3.min.js"></script>

JavaScript

function mergeArr(arr){

    var str = ''
    
    for (position in arr){
        str = str.concat(arr[position])   
    }
    
    return str
    
}

function vec_rotate(vector, angle, debug){
 
    if (debug){
        console.log("Vector Rotation: ")
        console.log([(Math.cos(angle)*vector[0]) - (Math.sin(angle)*vector[1]) ,
                    (Math.sin(angle)*vector[0]) + (Math.cos(angle)*vector[1])])
        
    }
    
    return [(Math.cos(angle)*vector[0]) - (Math.sin(angle)*vector[1]) ,
                (Math.sin(angle)*vector[0]) + (Math.cos(angle)*vector[1])]
    
}

function turtleMapper(axiom, start_level, rules, draw, debug){
    
    var inner_rec = function(level, program){
        
        if (level == 0) {
            
            return program
            
        } else {
            
            var copy =[];
            
            for(var position=0; position < program.length; position++) {
                
                var word = program.slice(position, position+1)
                
                if (rules[word]) {
                    copy.push(rules[word])
                }
                
            }
            
            return inner_rec(level-1, mergeArr(copy))
            
        }
    }
        
        
    var finished_program = inner_rec(start_level, axiom)
    
    console.log(finished_program)
    
    var position_state = {
        direction: [1,0],
        position: [0,0]
    }
    
    var positions = [[0,0]]
    
    for(var move = 0; move<finished_program.length; move++){
        
        if (debug){
            console.log("___________________")
            console.log("On Step: " + move)
            console.log("Current symbol: " + finished_program[move])
        }
        position_state = step(finished_program[move], position_state, debug)
        
        if (position_state.last_move_step){
            positions.push(position_state.position)
        }
    }
    
    return positions
    
}
             ...