Percursos
/
JavaScript
JavaScript
/
Exercícios
/
Os Encantamentos da Elyse
Os Encantamentos da Elyse

Os Encantamentos da Elyse

Exercício de aprendizagem

Introdução

Em JavaScript, um vetor é uma estrutura semelhante a uma lista, sem comprimento fixo, que pode conter qualquer tipo de primitivos ou objetos, até tipos mistos.

Para criar um array, adiciona elementos entre parênteses retos []. Para ler a partir do array, coloca o índice entre parênteses retos [] depois do identificador. Os índices de um array começam em zero.

Por exemplo:

const numbers = [1, 'two', 3, 'four'];
numbers[2];
// => 3

Para obter o número de elementos que existem num array, usa a propriedade length:

const numbers = [1, 'two', 3, 'four'];
numbers.length;
// => 4

Para alterar um elemento do array, atribuis um valor no índice:

const numbers = [1, 'two', 3, 'four'];
numbers[0] = 'one';
numbers;
// => ['one', 'two', 3, 'four']

Métodos

Alguns dos métodos disponíveis em todos os objetos Array podem ser usados para adicionar ou remover elementos do array. Aqui ficam alguns que podes ter em conta quando trabalhas neste exercício:

push

Um value pode ser adicionado ao fim de um array usando .push(value). O método devolve o novo comprimento do array.

const numbers = [1, 'two', 3, 'four'];
numbers.push(5); // => 5
numbers;
// => [1, 'two', 3, 'four', 5]

pop

O último value pode ser removido de um array usando .pop(). O método devolve o valor removido. O comprimento do array diminui por causa desta alteração.

const numbers = [1, 'two', 3, 'four'];
numbers.pop(); // => four
numbers;
// => [1, 'two', 3]

shift

O primeiro value pode ser removido de um array usando .shift(). O método devolve o valor removido. O comprimento do array diminui por causa desta alteração.

const numbers = [1, 'two', 3, 'four'];
numbers.shift(); // => 1
numbers;
// => ['two', 3, 'four']

unshift

Um value pode ser adicionado ao início de um array usando .unshift(value). O método devolve o novo comprimento do array.

const numbers = [1, 'two', 3, 'four'];
numbers.unshift('one'); // => 5
numbers;
// => ['one', 1, 'two', 3, 'four']

splice

Um value num index específico pode ser removido de um array usando .splice(index, 1). O método devolve o(s) elemento(s) removido(s).

const numbers = [1, 'two', 3, 'four'];
numbers.splice(2, 1, 'one'); // => [3]
numbers;
// => [1, 'two', 'one', 'four']
Advanced

Estes métodos são mais poderosos do que o descrito:

  • Tanto push como unshift permitem adicionar vários valores de uma só vez, acrescentando mais argumentos. Isso não é necessário para completar este exercício.
  • O Splice pode remover vários valores aumentando o segundo argumento. Isso não é necessário para completar este exercício.
  • O Splice também pode adicionar vários valores, acrescentando-os como argumentos a seguir ao deleteCount. Isto pode ser usado para substituir valores ou inserir valores no meio de um array (por exemplo, removendo 0 elementos). Isso não é necessário para completar este exercício.

Instruções

Como futura mágica, a Elyse precisa de praticar algumas coisas básicas. Tem um baralho de cartas que quer manipular.

Para tornar as coisas um pouco mais simples, usa apenas as cartas de 1 a 10, por isso o seu baralho pode ser representado por um array de números. A posição de uma determinada carta corresponde ao índice no array. Ou seja, a posição 0 refere-se à primeira carta, a posição 1 à segunda, e assim por diante.

Note

Todas as funções, exceto duas, devem atualizar o array de cartas e depois devolver o array modificado. É uma forma de trabalhar comum, conhecida como Builder pattern, que te permite encadear funções umas nas outras de forma elegante.

As duas exceções são getItem, que deve devolver a carta na posição indicada, e checkSizeOfStack, que deve devolver true se o tamanho indicado corresponder.

1. Retira uma carta do baralho

Para escolher uma carta, devolve a carta no índice position do baralho dado.

const position = 2;
getItem([1, 2, 4, 1], position);
// => 4

2. Troca uma carta do baralho

Faz um pouco de prestidigitação e troca a carta no índice position pela carta de substituição fornecida. Devolve o baralho ajustado.

const position = 2;
const replacementCard = 6;
setItem([1, 2, 4, 1], position, replacementCard);
// => [1, 2, 6, 1]

3. Insere uma carta no topo do baralho

Faz aparecer uma carta, inserindo uma nova carta no topo do baralho. Devolve o baralho ajustado.

const newCard = 8;
insertItemAtTop([5, 9, 7, 1], newCard);
// => [5, 9, 7, 1, 8]

4. Remove uma carta do baralho

Faz desaparecer uma carta, removendo do baralho a carta na position indicada. Devolve o baralho ajustado.

const position = 2;
removeItem([3, 2, 6, 4, 8], position);
// => [3, 2, 4, 8]

5. Remove a carta do topo do baralho

Faz desaparecer uma carta, removendo a carta do topo do baralho. Devolve o baralho ajustado.

removeItemFromTop([3, 2, 6, 4, 8]);
// => [3, 2, 6, 4]

6. Insere uma carta no fundo do baralho

Faz aparecer uma carta, inserindo uma nova carta no fundo do baralho. Devolve o baralho ajustado.

const newCard = 8;
insertItemAtBottom([5, 9, 7, 1], newCard);
// => [8, 5, 9, 7, 1]

7. Remove uma carta do fundo do baralho

Faz desaparecer uma carta, removendo a carta do fundo do baralho. Devolve o baralho ajustado.

removeItemAtBottom([8, 5, 9, 7, 1]);
// => [5, 9, 7, 1]

8. Verifica o tamanho do baralho

Verifica se o tamanho do baralho é igual a stackSize ou não.

const stackSize = 4;
checkSizeOfStack([3, 2, 6, 4, 8], stackSize);
// => false
Editar via GitHub A ligação abre numa nova janela ou separador
JavaScript Exercism

Estás pronto para começar Os Encantamentos da Elyse?

Inscreve-te no Exercism para aprenderes e dominares JavaScript com 37 conceitos159 exercícios, e mentoria humana real, tudo grátis.