Skip to content

Instantly share code, notes, and snippets.

@leobetosouza
Last active September 23, 2016 16:27
Show Gist options
  • Save leobetosouza/c1f3d6ef60caa882e53c8655522f96fe to your computer and use it in GitHub Desktop.
Save leobetosouza/c1f3d6ef60caa882e53c8655522f96fe to your computer and use it in GitHub Desktop.
Translate text to phone keys
var assert = require ('assert'),
translatePhoneLetters = require('./escrevendo-celular').translatePhoneLetters;
describe('translatePhoneLetters', function() {
it('chamada vazia', function () {
assert.equal(translatePhoneLetters(), '')
})
it('vazio', function () {
var str = ''
assert.equal(translatePhoneLetters(str), '')
})
it('A = 2', function () {
var str = 'A'
assert.equal(translatePhoneLetters(str), '2')
})
it('B = 22', function () {
var str = 'B'
assert.equal(translatePhoneLetters(str), '22')
})
it('C = 222', function () {
var str = 'C'
assert.equal(translatePhoneLetters(str), '222')
})
it('D = 3', function () {
var str = 'D'
assert.equal(translatePhoneLetters(str), '3')
})
it('AD = 23', function () {
var str = 'AD'
assert.equal(translatePhoneLetters(str), '23')
})
it('AA = 2_2', function () {
var str = 'AA'
assert.equal(translatePhoneLetters(str), '2_2')
})
it('AB = 2_22', function () {
var str = 'AB'
assert.equal(translatePhoneLetters(str), '2_22')
})
it('espaço = 0', function () {
var str = ' '
assert.equal(translatePhoneLetters(str), '0')
})
it('TESTE DO OTAVIKO!!!!', function () {
var str = 'SEMPRE ACESSO O DOJOPUZZLES'
assert.equal(translatePhoneLetters(str), '77773367_7773302_222337777_777766606660366656667889999_9999555337777')
})
})
const separator = '_'
const keyboard = [
['2', 'ABC'],
['3', 'DEF'],
['4', 'GHI'],
['5', 'JKL'],
['6', 'MNO'],
['7', 'PQRS'],
['8', 'TUV'],
['9', 'WXYZ'],
['0', ' ']
]
function appendSeparator(letters, letter) {
return letters.includes(letter) ? separator : ''
}
function getCodeFromLetter (letter, next) {
const [key, letters] = keyboard.find(keyGroup => keyGroup[1].includes(letter));
return key.repeat(letters.indexOf(letter) + 1) + appendSeparator(letters, next)
}
function translatePhoneLetters (str) {
return str && str.length ?
str.split('').reduce((acc, letter, i, arr) => acc + getCodeFromLetter(letter, arr[i+1]), '') :
''
}
exports.translatePhoneLetters = translatePhoneLetters;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment