#################################################################
# 1 | 0 0 0 | 1 1 | 0 0 0 | 1 1 | 0 0 0 | 1 1 #
# +---+ +---+ +---+ +---+ +---+ +---+ #
# 1 1 | 0 0 0 | 1 1 | 0 0 0 | 1 1 | 0 0 0 | 1 #
#---+ +---+ +---+ +---+ +---+ +---+ +---#
# 0 | 1 1 | 0 0 0 | 1 1 | 0 0 0 | 1 1 | 0 0 0 #
# +---+ +---+ +---+ +---+ +---+ +---+ #
# 0 0 | 1 1 | 0 0 0 | 1 1 | 0 0 0 | 1 1 | 0 0 #
# +---+ +---+ +---+ +---+ +---+ +---+ #
# 0 0 0 | 1 1 | 0 0 0 | 1 1 | 0 0 0 | 1 1 | 0 #
#################################################################
Regiões bináriasNeste exercício, iremos trabalhar com matrizes binárias implementadas por listas de listas de inteiros. Sua tarefa será produzir uma saída formatada desta matriz em que as áreas contínuas com 0s ou com 1s estarão demarcadas por bordas especiais.
A borda externa da matriz será delimitada pelo
caractere #
. Dois números diferentes na mesma linha serão
separados pelo caractere |
. Dois números diferentes na
mesma coluna serão separados por ---
. A
intersecção entre os caracteres |
e -
deve
ser marcada com um caractere +
. Para se manter o
alinhamento, quando os números forem iguais devem ser escritos espaços
em branco. Observe os padrões:
######### ######### ######### ######### ######### #########
# 0 0 # # 0 | 1 # # 0 0 # # 0 | 1 # # 0 | 1 # # 0 | 1 #
# # # | # #-------# # +---# #---+ # #---+---#
# 0 0 # # 0 | 1 # # 1 1 # # 0 0 # # 1 1 # # 1 | 0 #
######### ######### ######### ######### ######### #########
A primeira linha da entrada conterá o número de linhas da matriz e a segunda, o número de colunas. Em seguida, teremos as linhas com o conteúdo da matriz. Considere o exemplo abaixo:
4
4
0 0 0 0
0 0 1 0
0 1 1 0
0 0 0 1
Não será necessário verificar a ocorrência de erros na entrada. A entrada estará completa, com dimensões coerentes com o conteúdo apresentado.
A saída deverá conter uma matriz formatada de acordo com as regras descritas acima. Para o exemplo da seção anterior, a saída será:
#################
# 0 0 0 0 #
# +---+ #
# 0 0 | 1 | 0 #
# +---+ | #
# 0 | 1 1 | 0 #
# +-------+---#
# 0 0 0 | 1 #
#################
Devido a variedade possível de padrões que podem ser construídos a partir deste enunciado, foram disponibilizados 13 testes abertos, com níveis crescentes de complexidade. Seu programa passará também por 2 testes fechados. Releia, se necessário, as instruções para fazer os testes em Testes com o SuSy.
O comando print()
define, por padrão, um
separador e um finalizador. O separador padrão entre elementos a
serem escritos em uma mesma chamada é o espaço em branco. O
finalizador padrão de uma chamada é uma quebra de linha. Nesta
tarefa, como na tarefa de laboratório
7, pode ser interessante redefinir estes padrões. Para entender
melhor, faça testes na Python shell como o abaixo:
>>> print("a", 1, "b", 2)
a 1 b 2
>>> print("a", 1, "b", 2, sep="")
a1b2
>>> print("a", 1, "b", 2, sep=",", end="fim")
a,1,b,2fim>>>
Note que, no último exemplo acima, como o novo finalizador não contém uma quebra de linha o prompt é exibido ao usuário imediatamente após a string impressa.
Você pode criar uma string com padrões repetidos utilizando
o operador *
. Faça testes na Python shell como o abaixo:
>>> 3 * "-*-"
'-*--*--*-'
O código do seu programa pode ficar bem mais fácil de ser lido e depurado se você utilizar funções. Por exemplo, você pode escrever uma função para verificar qual caractere deve ser utilizado em um ponto da borda interna.
Veja aqui a
página de submissão da tarefa. O arquivo a ser
submetido deve se chamar lab10.py. No
link Arquivos
auxiliares há um
arquivo aux10.zip
que
contém todos os arquivos de testes abertos, seus respectivos
resultados compactados e scripts para facilitar os testes.
O limite máximo será de 20 submissões. Serão considerados os resultados da última submissão.
O peso desta tarefa é 4.
O prazo final para submissão é 30/06/2019.
A nota desta tarefa é proporcional ao número de testes que executaram corretamente, desde que o código esteja coerente com o enunciado. A submissão de um código que não implementa o algoritmo requisitado, mas que exibe as saídas esperadas dos testes abertos a partir da comparação de trechos da entrada será considerada fraude e acarretará a atribuição de nota zero à média final da disciplina.