Construa um suporte para vinhos
Crie um WineRack com as seguintes propriedades:
- Tem um inicializador padrão que cria um WineRack com uma largura e uma altura especificadas.
- Tem um inicializador que pode falhar que cria um WineRack com uma largura e uma altura especificadas, preenchido com os vinhos indicados. Os vinhos preenchem o suporte a partir do canto superior esquerdo. Se houver vinhos demais para o tamanho do suporte, o inicializador falhará.
- Quando um objeto WineRack é impresso, ele exibe uma representação gráfica do suporte usando o símbolo Unicode
○para um espaço vazio e●para um espaço preenchido com vinho. - Retorna o vinho em uma determinada posição do suporte usando um subscrito (por exemplo,
wineRack[(0,0)]).
Exemplos
print(WineRack(height: 2, width: 3)) ➞
○○○
○○○
print(WineRack(height: 2, width: 3, wines: ["Riesling", "Syrah", "Riesling", "Syrah", "Syrah"])!) ➞
●●●
●●○
WineRack(height: 1, width: 1, wines: ["Riesling", "Syrah"]) ➞ nil
WineRack(height: 2, width: 3, wines: ["Riesling", "Syrah", "Riesling", "Syrah", "Syrah"])?[(0, 0)] ➞ "Riesling"
WineRack(height: 2, width: 3, wines: ["Riesling", "Syrah", "Riesling", "Syrah", "Syrah"])?[(1, 1)] ➞ "Syrah"
WineRack(height: 2, width: 3, wines: ["Riesling", "Syrah", "Riesling", "Syrah", "Syrah"])?[(1, 2)] ➞ nilObservações
- As posições de um WineRack que não contêm um vinho devem retornar
nil. - As posições são representadas por uma tupla com 2 valores:
(row, column). - Ao imprimir um WineRack, as linhas devem ser separadas por quebras de linha (
\n)