Introdução
Você pode conhecer e amar seu círculo unitário normal. Mas os matemáticos são loucos e, portanto, abstraíram o conceito a qualquer ponto que o satisfaça x*x+y*y=1
. Como os Criptógrafos 1 também são estranhos, eles adoram campos finitos e, às vezes, anéis finitos (não é como se eles tivessem muita escolha), então vamos combinar isso!
O desafio
Entrada
Um número inteiro positivo maior que um na sua codificação favorita. Vamos chamar esse número n.
Saída
Você exibirá a "imagem" (que consiste em n vezes n caracteres) do círculo unitário, modulando o número inteiro de entrada como ASCII-Art usando "X" (letras maiúsculas em latim X) e "" (um espaço). Espaços à direita e novas linhas são permitidos.
Mais detalhes
Você precisa abranger um sistema de coordenadas da parte inferior esquerda para a parte superior direita. Sempre que um ponto cumprir a equação do círculo, coloque um X na posição, caso contrário, coloque um espaço.
A condição para um ponto que deve ser considerado parte da fronteira círculo é:
mod(x*x+y*y,n)==1
.
Aqui está uma rápida ilustração do sistema de coordenadas:
(0,4)(1,4)(2,4)(3,4)(4,4)
(0,3)(1,3)(2,3)(3,3)(4,3)
(0,2)(1,2)(2,2)(3,2)(4,2)
(0,1)(1,1)(2,1)(3,1)(4,1)
(0,0)(1,0)(2,0)(3,0)(4,0)
Se isso lhe ajudar, você também pode inverter a direção de qualquer um dos eixos, mas os exemplos assumem essa orientação.
Quem ganha?
Isso é código-golfe, então o código mais curto em byte vence! Apenas os métodos de E / S padrão são permitidos e todas as brechas padrão são proibidas.
Exemplos
Entrada: 2
X
X
Entrada: 3
X
X
XX
Entrada: 5
X
X
X X
Entrada: 7
X
X X
X X
X
X X
Entrada: 11
X
XX
X X
X X
XX
X
X X
Entrada: 42
X
X X
X X
X X
X X
X
X X X X
X X X X
X
X X
X X
X X
X X
X
X X X X
X
X X
X X
X X
X X
X
X X X X
X X X X
X
X X
X X
X X
X X
X
X X X X
1 Eu sugiro que você dê uma olhada no meu perfil, se você está se perguntando aqui.
Respostas:
Utilitários Bash + GNU, 59
Entrada
n
fornecida como um parâmetro da linha de comandos. O eixo y está invertido.Experimente online .
fonte
Oitava ,
4544 bytesExperimente online!
fonte
@(n)[(mod((x=(0:n-1).^2)+x',n)==1)*88,'']
. Em certos sistemas caráter Octave trata0
como um espaçoHaskell , 68 bytes
Experimente online! O eixo y é invertido. Uso:
f 42
retorna uma string delimitada por nova linha.Esta é uma compreensão de lista aninhada em que ambos
x
ey
são extraídos do intervalo[0..n-1]
.last$' ':['X'|mod(x*x+y*y)n==1]
é uma forma mais curta deif mod(x*x+y*y)n==1 then 'X' else ' '
. A compreensão da lista é avaliada como uma lista de cadeias de caracteres que é transformada em uma única cadeia de nova linha separada porunlines
.fonte
Mathematica,
5648 bytesEdit: Obrigado a Greg Martin e Martin Ender por salvar 8 bytes.
Solução original:
fonte
X
:)Array
eNorm
:Grid@Array[If[Mod[Norm@{##}^2,x]==1,X]&,{x=#,#},0]&
#^2+#2^2
é o mais curto.If
for nemTrue
ouFalse
, você precisará do quarto argumento ou ele permanecerá sem avaliação, masIf[False,_]
retornaráNull
. Esquisito.Array
mas não pensei em definir o argumento para uma variável.CJam , 23 bytes
Experimente online!
fonte
JavaScript (ES6), 81 bytes
O eixo Y é o inverso do OP.
fonte
Röda , 74 bytes
Experimente online!
Ungolfed:
fonte
Python 3 ,
8783 bytesExperimente online!
O eixo y é invertido
fonte
Geléia ,
1413 bytesO eixo x está invertido.
Experimente online!
Como funciona
fonte
dc , 79 bytes
O
y
eixo está invertido, enquanto ox
eixo não é.Experimente online!
fonte
MATL , 13 bytes
A origem está no canto superior esquerdo. Portanto, a saída é invertida em comparação com os exemplos do desafio.
Experimente o MATL online!
Explicação
fonte
Python 3 , (
1029895 bytes)eixo y invertido
Experimente online!
fonte
p(end=' 'if(i*i+j*j)%n-1else'X')
para 95 bytesLit , 125 bytes
Quebra de linha para facilitar a leitura.
Experimente online!
Não é o mais curto. Eu acho que preciso de algum tipo de módulo de taquigrafia. Veja o link Try it Online para obter mais explicações, versão não destruída e alguns testes. Para obter melhores resultados, expanda a janela de saída para ver mais.
fonte
Python 3 , 82 bytes
Experimente online!
fonte
GNU APL , 41 caracteres, 59 bytes
Lê um número inteiro e exibe o círculo.
Ungolfed
fonte
Haskell, 115 bytes
O eixo y é invertido.
Experimente online!
Todos esses parênteses são meio que me irritando ...
Explicação
fonte
map
por um<$>
, certo?J , 20 bytes
Experimente online!
fonte
GolfScript , 34 bytes
Experimente online!
Eu realmente não gosto de usar variáveis ...
fonte