Poster de primeira vez de muito tempo de lurker aqui.
Escreva um programa com três entradas: X, Y e Z.
- X = do outro lado (colunas)
- Y = para baixo (linhas)
- Z = Marcador de Localização
O programa deve imprimir uma grade visual X transversalmente e Y horizontalmente. Essa grade pode ser composta de qualquer caractere, exceto "+". Cada 'local' recebe um número de índice, contando de 1 na coordenada 1, 1 e depois até o final.
X e Y sempre serão pelo menos 3 e Z nunca será maior que X * Y
.
Z representará o local impresso como "+" no local e 1 caractere à esquerda, direita, para cima e para baixo. Por exemplo:
+
+++
+
Por fim, se os caracteres + interceptarem as arestas (mais acima, mais à esquerda, mais à direita e / ou mais abaixo), então o + deve saltar ao longo do mesmo eixo e ultrapassar o outro lado.
Exemplos: Entrada = 5, 5, 13
-----
--+--
-+++-
--+--
-----
Entrada = 10, 10, 10
-------+++
---------+
---------+
----------
----------
----------
----------
----------
----------
----------
Entrada = 10, 10, 21
----------
+---------
+++-------
+---------
----------
----------
----------
----------
----------
----------
Edit: exemplo não quadrado 16,3,32
---------------+
-------------+++
---------------+
Eu acho que cobri tudo. Não deve haver limite para a entrada, mas se o seu programa exigir, limpe-o em 64 * 64.
Ponto de bônus (posso fazer isso?): A entrada Z não deve ser> X * Y, mas se for maior que Y * Z, emita o centro + no meio da grade.
EDIT: A entrada Z não pode ser maior que X * Y
Edição 2 :. Fiz algumas alterações em X e Y para, esperamos, ser mais claras
Este é o código de golfe, o código mais curto vence.
Respostas:
Python 2,
172171 bytesEditar: salvou 1 bytes convertendo para função.
Anterior (mais legível):
fonte
JavaScript (ES6), 165 bytes
fonte
Anterior, 175 bytes
Experimente online!
A primeira linha (e uma curta continuação para a segunda linha) é onde os parâmetros são lidos e algumas constantes são calculadas - as coordenadas da localização ( lx , ly ), bem como as coordenadas ajustadas que explicam o retorno da arestas:
A segunda e a terceira linhas contêm os loops principais sobre a altura e largura da grade, o caminho da execução indo da direita para a esquerda inicialmente antes de virar para a terceira linha indo da esquerda para a direita. Para cada coordenada na grade ( gx , gy ), calculamos a seguinte condição:
Se essa condição for verdadeira, colocamos a
"+"
na pilha; se falsa, colocamos a"-"
. Para evitar ramificações aqui, estamos apenas pressionando43 + 2 * !condition
(43 sendo o valor ASCII de mais e 45 sendo menos).Depois que os loops terminam, o bit final de código é apenas uma rotina de saída padrão que imprime tudo na pilha.
fonte
JavaScript (ES6), 170
Ainda jogável
Menos golfe
Teste
fonte