constsendMessage=message=>{constkeys=['0','1','2','3','4','5','6','7','8','9','*','#'];constkeyCharacterMap=['','.,?!','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz','\'-+='];letresult=[];letcaseToggle=false;letpreviousKey=null;letcaseToggleKey=keys[11];for(constcharacterofmessage.split('')){if(keys.indexOf(character)>-1){result.push(character+'-');previousKey=null}else{for(constcharacterSetofkeyCharacterMap){letindex=characterSet.indexOf(character.toLowerCase());letkey=keys[keyCharacterMap.indexOf(characterSet)];letisUpperCase=character!==character.toLowerCase();if(index>-1){letcaseToggleResult='';if((isUpperCase&&!caseToggle)||(!isUpperCase&&caseToggle)){caseToggle=!caseToggle;caseToggleResult=caseToggleKey;previousKey=null;}result.push((key==previousKey?'':'')+caseToggleResult+key.repeat(index+1));previousKey=key;break;}}}}returnresult.join('');};["Def Con 1!","hey","one two three","Hello World!",].forEach(s=>console.log(`"${s}" => "${sendMessage(s)}"`));
JS Solution
output: