Skip to content

Instantly share code, notes, and snippets.

@edueo
Last active March 16, 2021 15:40
Show Gist options
  • Select an option

  • Save edueo/640b9994039ddedfcee9a19fcc1daec3 to your computer and use it in GitHub Desktop.

Select an option

Save edueo/640b9994039ddedfcee9a19fcc1daec3 to your computer and use it in GitHub Desktop.
Resolução live coding
const assert = require('assert');
const numerosPorExtenso = {
0: 'zero',
1: 'um',
2: 'dois',
3: 'três',
4: 'quatro',
5: 'cinco',
6: 'seis',
7: 'sete',
8: 'oito',
9: 'nove',
10: 'dez',
11: 'onze',
12: 'doze',
13: 'treze',
14: 'quatorze',
15: 'quinze',
16: 'dezesseis',
17: 'dezessete',
18: 'dezoito',
19: 'dezenove',
20: 'vinte',
30: 'trinta',
40: 'quarenta',
50: 'cinquenta',
60: 'sessenta',
70: 'setenta',
80: 'oitenta',
90: 'noventa',
100: 'cem',
200: 'duzentos',
300: 'trezentos',
400: 'quatrocentos',
500: 'quinhentos',
600: 'seiscentos',
700: 'setecentos',
800: 'oitocentos',
900: 'novecentos',
}
function obterCentena(num) {
if (num >= 100) {
return num - num % 100;
}
return 0
}
function obterDezena(num) {
if (num >= 10) {
const result = num % 100;
if (result >= 10)
return result - (result % 10) ;
return 0;
}
}
function obterUnidade(num) {
if (num < 10) {
return num;
}
return num - (obterCentena(num) + obterDezena(num));
}
function escrevePorExtenso(numero) {
if (numero > 999) {
return 'Entrada fora do range 0-999';
}
if (numero < 10) {
return numerosPorExtenso[obterUnidade(numero)];
}
if (numero >= 10 && numero <= 99) {
const unidade = obterUnidade(numero);
if (unidade === 0) {
return numerosPorExtenso[obterDezena(numero)];
}
return `${numerosPorExtenso[obterDezena(numero)]} e ${numerosPorExtenso[unidade]}`;
}
if (numero >= 100) {
let centena = obterCentena(numero);
let dezena = obterDezena(numero);
let unidade = obterUnidade(numero);
let centenaPorExtenso = numerosPorExtenso[centena];
if (centena === 100) {
centenaPorExtenso = 'cento';
}
let unidadePorExtenso = ` e ${numerosPorExtenso[unidade]}`;
if (unidade === 0) {
unidadePorExtenso = '';
}
return `${centenaPorExtenso} e ${numerosPorExtenso[dezena]}${unidadePorExtenso}`;
}
}
function main() {
// Testa decomposição de centena
assert.strictEqual(obterCentena(100), 100);
assert.strictEqual(obterCentena(150), 100);
assert.strictEqual(obterCentena(151), 100);
// Testa decomposição de dezena
assert.strictEqual(obterDezena(11), 10);
assert.strictEqual(obterDezena(100), 0);
assert.strictEqual(obterDezena(101), 0);
assert.strictEqual(obterDezena(109), 0);
assert.strictEqual(obterDezena(119), 10);
assert.strictEqual(obterDezena(150), 50);
assert.strictEqual(obterDezena(151), 50);
assert.strictEqual(obterDezena(349), 40);
// Testa decomposição de unidade
assert.strictEqual(obterUnidade(9), 9);
assert.strictEqual(obterUnidade(19), 9);
assert.strictEqual(obterUnidade(29), 9);
assert.strictEqual(obterUnidade(447), 7);
// Testa se dado um numero o mesmo é escrito corretamente por extenso
assert.strictEqual(escrevePorExtenso(0), 'zero');
assert.strictEqual(escrevePorExtenso(1), 'um');
assert.strictEqual(escrevePorExtenso(2), 'dois');
assert.strictEqual(escrevePorExtenso(50), 'cinquenta');
assert.strictEqual(escrevePorExtenso(51), 'cinquenta e um');
assert.strictEqual(escrevePorExtenso(91), 'noventa e um');
assert.strictEqual(escrevePorExtenso(23), 'vinte e três');
assert.strictEqual(escrevePorExtenso(45), 'quarenta e cinco');
assert.strictEqual(escrevePorExtenso(150), 'cento e cinquenta');
assert.strictEqual(escrevePorExtenso(151), 'cento e cinquenta e um');
// Testa entrada fora do range
assert.strictEqual(escrevePorExtenso(1004), 'Entrada fora do range 0-999');
}
main();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment