JSFiddle - React, Tailwind, and code Playground

by samur3

JavaScript

let keyboardInput = "q,w,e,r,t,a,s,d,f,g";
const wide = 5;
let type = "q,r,f";!

function printPath(keyboardInput,wide,type){
  if(keyboardInput.length === 0 || type.length === 0) {
		return "";
  }
 	let reuslt = "";
  type = type.split(',');
  
 	let keyboardArr= InitKyboardArr(keyboardInput,wide);  
 	let arrCharToCordinations = BuildArrCharToCordinations(keyboardArr,type);

	result = BuildPathByScanMap(arrCharToCordinations);
	return result;
}

function BuildPathByScanMap(arrCharToCordinations){
	let result = "";
  let len = arrCharToCordinations.length;
 	for(let i =0; i < len; i++){
  	let cord = arrCharToCordinations[i];
  	if(cord.startX === cord.endX && cord.startY === cord.endY) {
    	result += '!';
    }
    else{
      while(cord.startX !== cord.endX || cord.startY !== cord.endY){
        if(cord.startX < cord.endX){
          result += GetDirections('x+');
          cord.startX++;
        }
        else if(cord.startX > cord.endX){
          result += GetDirections('x-');
          cord.startX--;
        }
        if(cord.startY < cord.endY){
          result += GetDirections('y+');
          cord.startY++;
        }
        else if(cord.startY > cord.endY){
          result += GetDirections('y-');
          cord.startY--;
        }
      }
      result += '!';
    }
	}
  
  return result;
}

function GetDirections(move){
	switch(move){
   case 'x+':
   	return 'R';
    case 'x-':
   	return 'L';
    case 'y+':
   	return 'D';
    case 'y-':
   	return 'U';
  }
}

function InitKyboardArr(keyboardInput,wide){
	keyboardInput = keyboardInput.split(',');
	if(wide === 0) return keyboardInput;
  
	let charsArr = []; 
  let length = Math.ceil(keyboardInput.length / wide);
  let index = 0;
  for(let i=0; i < length; i++){  	
  	let sliceInput = keyboardInput.slice(index,wide);
    wide = wide + 5;
    index = i + 5
		charsArr.push(sliceInput);
  }  
  return charsArr;
}

function BuildArrCharToCordinations(keyboarArr,type){
	let arr = [];    
  let...