Construye un botellero

Crea un WineRack con las siguientes propiedades:

  • Tiene un inicializador predeterminado que crea un WineRack con un ancho y una altura especificados.
  • Tiene un inicializador que puede fallar que crea un WineRack con un ancho y una altura especificados, relleno con los vinos indicados. Los vinos llenan el botellero desde la esquina superior izquierda. Si hay demasiados vinos para el tamaño del botellero, el inicializador falla.
  • Cuando se imprime un objeto WineRack, muestra una representación gráfica del botellero usando el símbolo Unicode para un espacio vacío y para un espacio con vino.
  • Devuelve el vino ubicado en una posición determinada del botellero mediante un subíndice (por ejemplo, wineRack[(0,0)]).

Ejemplos

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)] ➞ nil

Notas

  • Las posiciones de un WineRack que no contienen un vino deben devolver nil.
  • Las posiciones se representan mediante una tupla con 2 valores: (row, column).
  • Al imprimir un WineRack, las filas deben estar separadas por saltos de línea (\n)