Prova Ecma

Descrição


Cada vez mais os processos seletivos estão utilizando resolução de problemas para analisar o nível de compreensão dos conceitos de programação. Para simultar esse processo será exigido a entrega de no mínimo três dos algoritmos descritos a seguir.

Detalhe, as questões já estão disponíveis no arquivo code.zip, por exemplo, a QUESTÃO 1 está relacionado ao arquivo formatDate/formatDate.js que pode ser executado via Jest pelo comando:

$ npm install
$ npx jest formatDate/formatDate.test.js

Ou usando node pelo comando:

$ cd formatDate
$ mv formatDate.js formatDate.mjs
$ node --experimental-modules formatDate.print.mjs

QUESTÕES


QUESTÃO 1 - No arquivo formatDate/formatDate.js, desenvolva a função formatDate que recebe uma data no formato “dd/mm/aaaa” e escreva a data por extenso. O separador é a barra (/) da data. Exemplo: Para a entrada “22/04/1983” deve ser escrito “22 de abril de 1983”.

console.log(formatDate("22/04/1983")) //=> "22 de abril de 1983"

QUESTÃO 2 - No arquivo grammar/grammar.js, quando escrever qualquer string, chamar o função spelling. A string deverá aparecer com suas letras separadas por hífen (-) e em maiúsculas.

Exemplo 1:

console.log(spelling('programador')) //=> 'P-R-O-G-R-A-M-A-D-O-R'

Exemplo 2:

console.log(spelling('o dia está chuvoso')) //=> 'O-D-I-A-E-S-T-Á-C-H-U-V-O-S-O'

QUESTÃO 3 - No arquivo sockMerchant/sockMerchant.js, crie a função sockMerchant que recebe um conjunto de meias identificadas por números e deve retornar quantos pares do mesmo tipo é possível montar (Fonte: Sock merchant - Hackerrank).

Exemplo 1:

console.log(sockMerchant([1, 2, 1, 2, 1, 3, 2])) //=> 2

ou seja, existem 3 tipos de meias {1, 2, 3} que ao se agrupar em pares é possível formar 1 par do tipo de meia 1, e 1 do 2, o que totaliza 2 pares. Conforme é possível ver nos elementos destacados {1, 2, 1, 2, 1, 3, 2}.

Exemplo 2:

console.log(sockMerchant([10, 20, 20, 10, 10, 30, 50, 10, 20])) //=> 3

ou seja, existem 4 tipos de meias {10, 20, 30, 50} que ao se agrupar em pares é possível formar 2 par do tipo de meia 10, e 1 do 20, o que totaliza 3 pares. Conforme é possível ver nos elementos destacados {10, 20, 20, 10, 10, 30, 50, 10, 20}.

QUESTÃO 4 - No arquivo arrayUtil/arrayUtil.js, resolva os seguintes problemas:

a) - Crie a função rotLeft(a, d) que rotaciona os elementos de um array a em d saltos. (Fonte: Arrays: Left Rotation - Hackerrank).

Exemplo 1:

let arr = [1, 2, 3, 4, 5]
console.log(rotLeft(arr, 4)) //=> [ 5, 1, 2, 3, 4 ]

ou seja, é realizado 4 rotacionamentos:

[1, 2, 3, 4, 5]  
[2, 3, 4, 5, 1] (1º salto: o elemento 1 foi para o final do array) 
[3, 4, 5, 1, 2] (2º salto: o elemento 2 foi para o final do array) 
[4, 5, 1, 2, 3] (3º salto: o elemento 3 foi para o final do array) 
[5, 1, 2, 3, 4] (4º salto: o elemento 4 foi para o final do array)

Exemplo 2:

let arr = [41, 73, 89, 7, 10, 1, 59, 58, 84, 77, 77, 97, 58, 1, 86, 58, 26, 10, 86, 51]
console.log(rotLeft(arr, 10))
//=> [ 77, 97, 58, 1, 86, 58, 26, 10, 86, 51, 41, 73, 89, 7, 10, 1, 59, 58, 84, 77 ]

b) - Crie a função stats(arr) que recebe um array arr e retorna a proporção de elementos maior, igual e menor que zero. Uma vez obtido o valor number da proporção use number.toFixed(6) para retornar uma precisão de 6 casas decimais. (Fonte: Plus Minus - Hackerrank).

Exemplo 1:

console.log(stats([-4, 3, -9, 0, 4, 1])) //=> ['0.500000', '0.333333', '0.166667']

ou seja, os elementos maior, igual e menor que zero são respectivamente {3, 4, 1}, {0} e {-4, -9}. Na proporção representam os valores 3/6, 1/6 e 2/6 que resultam, na precisão de 6, em 0.500000, 0.333333, 0.166667.

c) - Crie a função miniMaxSum(arr) que sempre recebe um array arr de tamanho 5 e retorna o valor mínimo e máximo da soma de 4 elementos de arr. (Fonte: Mini-Max Sum - Hackerrank).

Exemplo 1:

console.log(miniMaxSum([1, 2, 3, 4, 5])) //=> [ 10, 14 ]

ou seja, os 4 menores elementos de arr são [1, 2, 3, 4] e os 4 maiores são [2, 3, 4, 5], logo suas respectivas somas serão 10 e 14

d) - Crie a função highestFrequency(arr) para detectar o elemento de maior frequência de arr. (Fonte: Migratory Birds - Hackerrank).

Exemplo 1:

console.log(highestFrequency([1, 4, 4, 4, 5, 3])) //=> 4

ou seja, o array possui os elementos {1, 3, 4, 5} com as frequências de {1, 1, 3, 1}, logo percebe-se que o elemento 4 possui a maior frequência.

QUESTÃO 5 - No arquivo stringUtil/stringUtil.js, resolva os seguintes problemas:

a) - Crie a função repeatedString(s, n) que recebe a string s e tenta repeti-la várias vezes até ficar com um tamanho de n, e seu retorno deve trazer a quantidade de vezes que aparece a letra a. (Fonte: Repeated String - Hackerrank).

Exemplo 1:

console.log(repeatedString('aba', 10)) //=> 7

ou seja, se a string aba for repetida 4 vezes ela ficará abaabaabaaba, mas para ficar com um tamanho de 10 será necessário remover algumas letras no final, gerando a string abaabaabaa. Ao contabilizar a ocorrência da letra a o resultado será 7.

Exemplo 2:

console.log(repeatedString('a', 1000000000000)) //=> 1000000000000

b) - Crie a função mirrorSequence(a, b) que retorna a sequencia linear de a até b, e em seguida, a sequência será espelhada. (Fonte: Mirror Sequence - URI Online Judge).

Exemplo 1:

console.log(mirrorSequence(1, 5)) //=> '1234554321'

ou seja, a sequência de 1 até 5 é 12345, e seu reflexo é 54321, juntando os dois valores obtem-se o valor 1234554321.

Exemplo 2:

console.log(mirrorSequence(10, 13)) //=> '1011121331211101'

c) - Crie a função zeroMeansZero(a, b) que retonra a soma dos valores a e b sem o digito 0 caso exista. (Fonte: Led - URI Online Judge).

Exemplo 1:

console.log(zeroMeansZero(7, 8)) //=> 15

ou seja, a soma de 7 mais 8 é igual a 15, logo o retorno será 15 pois não existe o digito 0.

Exemplo 2:

console.log(zeroMeansZero(15, 5)) //=> 2

ou seja, a soma de 15 mais 5 é igual a 20, logo o retorno será 2 pois será removido o digito 0.

d) - Crie a função numberOfLeds(number) que recebe um número e retorno o total de LEDs necessário para exibi-lo. Lembrando que conforme a Figura 1 exibe, cada número exige uma quantidade de LEDs específica, por exemplo, o digito 1 precisa de 2 LEDs, o 2 de 5, e assim sucessivamente. (Fonte: Zero means Zero - URI Online Judge).

Figura 1 - Representação dos números em LED
Representação dos números em LED
(Fonte: Zero means Zero - URI Online Judge)

Exemplo 1:

console.log(numberOfLeds('115380')) //=> 27

ou seja, o número 115380 é formado pelos digitos {1, 1, 5, 3, 8, 0} e exige respectivamente a seguinte quantia de LEDs {2, 2, 5, 5, 7, 6}, que resulta em um total de 27 LEDs.

Exemplo 2:

console.log(numberOfLeds('2819311')) //=> 29




Alternativa de resposta: