Aqui está uma arte ASCII de uma interseção de quatro vias:
| | |
| |
| | |
| |
| | |
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
| | |
| |
| | |
| |
| | |
(Observe como as estradas horizontais têm 3 linhas de altura, enquanto as estradas verticais têm 5 colunas de largura. Isso ocorre por razões estéticas, devido à fonte retangular.)
Seu desafio é produzir essa arte ASCII. No entanto, como tenho certeza de que todos sabem, nem todo cruzamento tem uma estrada que sai em todas as direções. Essa interseção específica ocorre NESW
, mas algumas interseções podem ocorrer, por exemplo NW
:
| | |
| |
| | |
| |
| | |
-----+-----+
| |
- - -| |
| |
-----+-----+
Ou pode ser SWE
:
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
| | |
| |
| | |
| |
| | |
Ou pode até seguir E
, apenas uma única direção (embora você dificilmente possa chamar isso de interseção , mas tente evitar ser excessivamente pedante):
+-----+-----
| |
| |- - -
| |
+-----+-----
Você precisa escrever um programa ou função que possa gerar facilmente qualquer uma dessas combinações. Mais especificamente, seu desafio é escrever um programa ou função que siga uma sequência de instruções, consistindo em NESW
, como entrada e produza ou retorne essa arte ASCII de um cruzamento com estradas apontando nessas direções. Essas direções podem aparecer em qualquer ordem, mas a entrada não irá conter quaisquer caracteres, exceto para N
, E
, S
, ou W
. Se desejar, você pode solicitar que as entradas sejam minúsculas, mas você deve especificar isso na sua resposta. Você também pode assumir que todas as entradas conterão pelo menos uma direção.
O último exemplo tinha espaços à esquerda em cada linha, porque não há estrada indo para o oeste. Se você não tem uma estrada que vai para o oeste, esses espaços à esquerda são opcionais. Este:
+-----+-----
| |
| |- - -
| |
+-----+-----
Também seria uma saída aceitável. Da mesma forma, se N
ou S
se foi, linhas vazias no local são opcionais. Uma nova linha final é permitida e os espaços finais são permitidos desde que a saída seja visualmente a mesma.
Você pode receber entrada e saída em qualquer formato razoável, como STDIN / STDOUT, argumentos de linha de comando, arquivos, argumentos de função / valores de retorno, etc.
Como de costume, isso é código-golfe , então tente obter a resposta mais curta possível em qualquer idioma que você usar!
IO de amostra:
NESW:
| | |
| |
| | |
| |
| | |
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
| | |
| |
| | |
| |
| | |
NS:
| | |
| |
| | |
| |
| | |
+-----+
| |
| |
| |
+-----+
| | |
| |
| | |
| |
| | |
S:
+-----+
| |
| |
| |
+-----+
| | |
| |
| | |
| |
| | |
EW:
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
SE:
+-----+-----
| |
| |- - -
| |
+-----+-----
| | |
| |
| | |
| |
| | |
E
, por exemplo)? As linhas em branco à esquerda e à direita são permitidas se não houverN
ouS
?Respostas:
Javascript (ES6),
190187185 bytesEsta é uma tentativa de criar esse caractere de arte ASCII por caractere, iterando em uma matriz 17x15. Portanto, a saída é sempre composta por 15 linhas de 17 colunas com a interseção das estradas centralizadas no meio.
Ungolfed e comentou
Matriz
Abaixo está a matriz com as coordenadas usadas no código.
Demo
O seguinte snippet permite tentar qualquer configuração de estrada.
fonte
PowerShell v3 +,
226204192191 bytesRecebe a entrada como uma sequência de letras maiúsculas e a lança explicitamente como uma
char
matriz. Constrói o segmento "Norte" via loop de0
para4
. Cada loop, constrói uma sequência de 5 espaços (seW
/87
está presente na entrada), armazena isso em$x
, então| |
(armazenado em$w
) ou| | |
, dependendo se estamos par ou ímpares no momento. Essa matriz de seqüências de caracteres é armazenada$n
e multiplicada porN
/78
é-in
a entrada. Isso determinará se$n
é colocado no pipeline ou não.Então, construímos a parte do meio. A primeira linha
$z
é o "topo" da rota leste-oeste, usando a mesma lógica paraW
eE
/69
e cercada por parênteses para também colocar uma cópia no pipeline. Usamos a variável auxiliar$y
para salvar um byte nas-----
seções.A próxima linha é apenas o número apropriado de espaços (ou seja,
$x
) concatenados com os tubos de largura correta (ou seja$w
). Em seguida, a linha listrado meio, novamente comW
eE
lógica e$w
recheio no meio. Então$x+$w
e$z
novamente.Finalmente, como a estrada sul é a mesma do norte, coloque
$n
no oleoduto seS
/83
é-in
$a
.Todas essas cadeias resultantes são coletadas do pipeline e a saída é implícita no final da execução do programa. Abusa o
Write-Output
delimitador padrão para inserir uma nova linha entre elementos.Exemplos
fonte
C ++
317280276 bytesUngolfed:
fonte
strchr
porindex
irá reduzir um pouco mais. Definirx
ey
juntosfor
loops externos .Python 3, 186 bytes
Um lambda anônimo chamado com uma sequência de instruções, por exemplo, 'NWS'
Explicação a seguir
fonte
sed 234
Ele apenas cria as diferentes partes se o caractere adequado estiver em jogo.
Usa em
@
vez de\n
e\n
retorna novamente no final.As partes norte e sul são idênticas, então eu uso o que é basicamente uma função para inseri-las.
fonte
Lote,
351344341 bytesNota: A linha
set t=
termina em cinco espaços e a linhaif "%i:e=%"=="%i%" set r=
termina em um espaço. Recebe entrada sem distinção entre maiúsculas e minúsculas de STDIN. Editar: salvou 7 bytes, eliminando ad
variável. Salva 3 bytes usando umfor
loop para imprimir a seção do meio. Se eu tiver permissão para separar parâmetros de linha de comando, em seguida, para326319316 bytes:fonte
Python 2, 290 bytes
fonte
m,t,s=[],[],[]
poderia serm=t=s=[]
.range(5)
pode ser salvo em uma variável e usado duas vezes, em vez de digitarrange(5)
duas vezes.m
?t=s=[]
messes tudo para cimam=t=s=[]
, todos apontam para a mesma referência.GolfScript, 154 bytes
Experimente online!
fonte
Pitão (
385380373353 bytes)Golfe:
Ungolfed:
Claro, se houver alguma melhoria, por favor me diga.
Economizou 5 bytes graças a Maltysen
Você pode tentar aqui
fonte
K
em vez deN
e, em seguida, ao atribuir, pela primeira vez, você não tem que usar um=
, poupando-lhe um byteN[:-1]
éP
Groovy (274 bytes)
Ungolfed
Golfe
Experimente: https://groovyconsole.appspot.com/script/5082600544665600
fonte