Contribution
Votre contribution à ce défi est une liste de paires entières. Ils représentent les coins sud-ouest des carrés d'unité dans l'avion, et la liste représente leur union en tant que sous-ensemble de l'avion. Par exemple, la liste
[(0,0),(1,0),(0,1),(1,1),(2,1),(1,2),(2,2)]
représente l'ensemble de couleur rouge dans cette image:
Sortie
Votre sortie est une liste de quadruples entiers, représentant des sous-ensembles rectangulaires du plan. Plus explicitement, un quadruple (x,y,w,h)
représente un rectangle de largeurw > 0
et de hauteur h > 0
dont l'angle sud-ouest est à (x,y)
. Les rectangles doivent former une couverture exacte de la région d'entrée, dans le sens où chacun des carrés unitaires est un sous-ensemble d'un rectangle, chaque rectangle est un sous-ensemble de la région et deux rectangles peuvent se chevaucher uniquement à leurs frontières. Pour interdire les solutions triviales, le revêtement ne doit pas contenir deux rectangles qui pourraient être fusionnés en un rectangle plus grand.
Par exemple, la liste
[(0,0,2,1),(0,1,3,1),(1,2,2,1)]
représente la couverture juridique
de la région susmentionnée, alors que la couverture
[(0,0,2,2),(2,1,1,1),(1,2,1,1),(2,2,1,1)]
est illégal, car les carrés 1 par 1 voisins pourraient être fusionnés:
Règles
Vous pouvez donner un programme complet ou une fonction. Le formatage précis de l'entrée et de la sortie n'est pas important, dans des limites raisonnables. Le nombre d'octets le plus court l'emporte et les failles standard sont interdites. Nous vous encourageons à fournir une explication de votre algorithme et quelques exemples de résultats.
Cas de test
Une région en U:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(2,0),(2,1),(3,0),(3,1),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5)]
Un grand triangle:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(0,9),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),(2,0),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(3,0),(3,1),(3,2),(3,3),(3,4),(3,5),(3,6),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(5,0),(5,1),(5,2),(5,3),(5,4),(6,0),(6,1),(6,2),(6,3),(7,0),(7,1),(7,2),(8,0),(8,1),(9,0)]
Un carré avec des trous:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),(1,9),(2,0),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(2,8),(2,9),(3,0),(3,1),(3,2),(3,4),(3,5),(3,6),(3,7),(3,8),(3,9),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(4,6),(4,7),(4,8),(4,9),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5),(5,7),(5,8),(5,9),(6,1),(6,2),(6,3),(6,5),(6,6),(6,7),(6,8),(6,9),(7,0),(7,1),(7,2),(7,3),(7,4),(7,5),(7,6),(7,7),(7,8),(7,9),(8,0),(8,1),(8,2),(8,3),(8,4),(8,5),(8,6),(8,7),(8,8),(8,9),(9,0),(9,1),(9,2),(9,3),(9,4),(9,5),(9,6),(9,7),(9,8),(9,9)]
Régions déconnectées:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(1,0),(1,1),(1,2),(1,3),(1,4),(1,6),(1,7),(1,8),(1,9),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(2,8),(2,9),(4,0),(4,1),(4,2),(4,4),(4,5),(4,6),(4,7),(4,8),(4,9),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5),(5,6),(5,7),(5,8),(5,9),(6,0),(6,1),(6,2),(6,4),(6,5),(6,6),(6,7),(6,8),(6,9),(8,0),(8,1),(8,2),(8,3),(8,4),(8,5),(8,6),(8,7),(8,8),(8,9),(9,0),(9,1),(9,2),(9,3),(9,7),(9,8),(9,9),(10,0),(10,1),(10,2),(10,3),(10,4),(10,5),(10,6),(10,7),(10,8),(10,9)]
Vérifieur
Utilisez ce programme Python 2 pour vérifier votre solution. Il prend de STDIN une liste de tuples (l'entrée) et une liste de quadruples (votre sortie), séparés par une virgule.
J'ai également écrit ce programme Python 2 pour générer les images, et vous pouvez également l'utiliser. Il prend de STDIN une liste de tuples ou de quadruples et produit un fichier nommé out.png
. Il nécessite la bibliothèque PIL. Si vous le souhaitez, vous pouvez également modifier la taille des cellules de la grille et la largeur des lignes de ceinture.