A turma do jardim de infância está aprendendo sobre o cultivo de plantas. A professora achou que seria uma boa ideia dar sementes para a turma plantar e cultivar na terra. Para isso, as crianças colocaram copinhos ao longo dos parapeitos das janelas e plantaram um tipo de planta em cada copo. As crianças puderam escolher suas favoritas entre quatro tipos de sementes disponíveis: grass, clover, radishes e violets.
Sua tarefa é, dado um diagrama, determinar de quais plantas cada criança da turma do jardim de infância é responsável.
A turma tem 12 crianças:
São plantados quatro tipos diferentes de sementes:
| Planta | Representação no diagrama |
|---|---|
| Grass | G |
| Clover | C |
| Radish | R |
| Violet | V |
Cada criança recebe quatro copos, dois em cada linha:
[window][window][window]
........................ # each dot represents a cup
........................
O professor distribui os copos para as crianças em ordem alfabética pelos nomes, o que significa que Alice vem primeiro e Larry vem por último.
Veja um diagrama de exemplo que representa as plantas da Alice:
[window][window][window]
VR......................
RG......................
Na primeira linha, mais perto das janelas, ela tem uma violet e um radish. Na segunda linha, ela tem um radish e um pouco de grass.
Seu programa vai receber as plantas da esquerda para a direita, começando pela linha mais próxima das janelas. A partir disso, ele deve conseguir determinar quais plantas pertencem a cada estudante.
Por exemplo, se for dito que o jardim está assim:
[window][window][window]
VRCGVVRVCGGCCGVRGCVCGCGV
VRCCCGCRRGVCGCRVVCVGCGCV
Então, se pedirem as plantas da Alice, ele deve fornecer:
Já se pedirem as plantas do Bob, o resultado seria:
O exercício pede que você escreva uma classe que forneça um método para cada criança do jardim de infância.
Você pode deixar seu trabalho menos repetitivo (e mais divertido!) se, em vez de definir 12 métodos manualmente, usar um pouco de metaprogramação.
Se você não sabe por onde começar, explore os métodos method_missing ou define_method.
Crie sua conta no Exercism para aprender e dominar Ruby com 21 conceitos121 exercícios e mentoria humana de verdade, tudo de graça.