Escreva um programa que inclua um bloco retangular de texto composto por X
's .
' e 's, como este A
:
......
..XX..
.X..X.
.XXXX.
.X..X.
.X..X.
Emita uma representação dessa grade girada 45 graus no sentido anti-horário, desenhando uma barra - para frente ou para trás, dependendo do contexto - em todos os lugares em que a X
borda .
ou o lado da grade (com espaços preenchendo o restante):
/\/\
/ /\ \
\/ / \
/\/ /\ \
\ / \/
\ \
\ \
\/
O número de espaços à direita e à esquerda (e novas linhas) não importa, desde que a forma dos X
na entrada seja mantida pelas barras. Não há problema em aparar linhas ou colunas extras de .
's.
Para E / S, você pode usar qualquer combinação de parâmetros de linha de comando stdin / stdout / files /. Por exemplo, seu script pode incluir um nome de arquivo do X.
padrão e reescrever o arquivo com o padrão de barra. Ou seu script pode pegar o X.
padrão de stdin linha por linha (pressionar d
ao terminar) e gerar o resultado para stdout.
A entrada pode ser arbitrariamente grande, mas você pode supor que ela esteja sempre bem formatada.
Nenhum caractere além disso / \
e novas linhas devem estar em qualquer saída.
Pontuação
O código mais curto em bytes vence. Use https://mothereff.in/byte-counter como contador de bytes, se você usar caracteres não ASCII.
Bônus: menos 50 bytes, se você puder alterar (substituir, não remover) um caractere no seu programa, para que ele produza a grade de barra girada 45 graus no sentido horário , por exemplo:
/\/\
/ /\ \
/ \ \/
/ /\ \/\
\/ \ /
/ /
/ /
\/
Amostras de entrada
XXXXXXXXX
X.......X
X.XXXXX.X
X.X...X.X
X.X.X.X.X
X.X...X.X
X.XXXXX.X
X.......X
XXXXXXXXX
XXX...XXX....XXX...XXX
X..X..X..X..X.....X...
XXX...XXX...X.....X.XX
X.....X.....X.....X..X
X.....X......XXX...XXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...X
X...X...............X...............X...........X...................X...X
X...X...XXXXXXXXX...X...XXXXX...XXXXXXXXX...XXXXX...XXXXX...XXXXX...X...X
X...............X.......X...X...........X...........X...X...X.......X...X
XXXXXXXXX...X...XXXXXXXXX...XXXXXXXXX...XXXXX...X...X...X...XXXXXXXXX...X
X.......X...X...............X...........X...X...X...X...X...........X...X
X...X...XXXXXXXXXXXXX...X...X...XXXXXXXXX...XXXXX...X...XXXXXXXXX...X...X
X...X...............X...X...X.......X...........X...........X.......X...X
X...XXXXXXXXXXXXX...XXXXX...XXXXX...X...XXXXX...XXXXXXXXX...X...XXXXX...X
X...........X.......X...X.......X...X.......X...........X...X...........X
X...XXXXX...XXXXX...X...XXXXX...X...XXXXXXXXX...X...X...X...XXXXXXXXXXXXX
X.......X.......X...X...X.......X.......X.......X...X...X.......X.......X
XXXXXXXXXXXXX...X...X...X...XXXXXXXXX...X...XXXXX...X...XXXXX...XXXXX...X
X...........X...X...........X.......X...X.......X...X.......X...........X
X...XXXXX...X...XXXXXXXXX...XXXXX...X...XXXXX...XXXXX...XXXXXXXXXXXXX...X
X...X.......X...........X...........X.......X...X...X...............X...X
X...X...XXXXXXXXX...X...XXXXX...XXXXXXXXX...X...X...XXXXXXXXXXXXX...X...X
X...X...........X...X...X...X...X...........X...............X...X.......X
X...XXXXXXXXX...X...X...X...XXXXX...XXXXXXXXX...XXXXXXXXX...X...XXXXXXXXX
X...X.......X...X...X...........X...........X...X.......X...............X
X...X...XXXXX...XXXXX...XXXXX...XXXXXXXXX...XXXXX...X...XXXXXXXXX...X...X
X...X...................X...........X...............X...............X...X
X...XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Perguntas relacionadas:
Desenhar a curva de Hilbert usando barras
Alinhe uma forma ASCII alinhada horizontalmente e em ângulo reto ao longo de uma diagonal
Respostas:
Python 2 -
236, 228, 226, 221, 250, 248246 - 50 = 196Eu adicionei o recurso de bônus opcional que muda a direção do sentido horário para o sentido anti-horário. Basicamente, a segunda linha simplesmente gira a entrada em 90 graus. Para alternar entre as duas opções, substitua
s=zip(...)
por algo comoS=zip(...)
(ou seja, atribua a uma variável que não será usada novamente).fonte
s
comB
bys=B+s+B
.MATLAB - 286 - 50 = 236
Minificado:
Expandido:
O código pode ser reduzido ainda mais em 6 caracteres (para amarrar a liderança atual), eliminando o elenco para o tipo
char
, mas isso resulta em um aviso do MATLAB, e eu não tinha certeza se isso era permitido.Pode ser reduzido em 13 caracteres adicionais se for necessário que a entrada tenha um formato "marcado", como
['X..';'.X.';'..X']
, mas também não achei que isso fosse permitido. Atualmente, o script aceita apenas dois números (dimensões de linha e coluna) e, em seguida, lê uma única sequência de caracteres de grade.Bônus
Alterando o
1
na chamadax = rot90( ..., 1 );
para a0
, a transformação muda de uma rotação de 45 ° no sentido anti-horário para uma rotação de 45 ° no sentido horário. De fato, todas as rotações possíveis de 45 ° + n · 90 ° são possíveis passando este parâmetro de0
para3
.Saídas de amostra:
fonte
Perl - 409
Lê de stdin e imprime em stdout.
Exemplo de saídas:
fonte