As coisas legais
O rosace a seguir pode ajudar a calcular os números do módulo 7.
Para fazer isso, você deve começar em 0 e girar no sentido horário uma série de etapas fornecidas pelo primeiro dígito. Em seguida, para cada dígito sucessivo, siga a seta e gire no sentido horário o número de etapas fornecidas por esse dígito.
Aqui está como você prossegue para o número 294:
- Você começa no círculo 0.
- Você gira no sentido horário o número de etapas fornecidas pelo primeiro dígito (que é um 2, você termina em 2).
- Você segue a seta lá (você termina às 6).
- Você gira no sentido horário o número de etapas fornecidas pelo segundo dígito (que é um 9, você termina em 1).
- Você segue a seta lá (você termina em 3).
- Você gira no sentido horário o número de etapas fornecidas pelo terceiro número (que é 4, você termina em 0).
- 294 mod 7 = 0 (o que significa 294 é múltiplo de 7).
( Explicação em vídeo, se você ainda não conseguiu )
O objetivo
Descobrir como isso funciona (eu sei, mas não vou lhe contar).
Crie um programa que n
use um número no parâmetro e que gere um valor paramod n
.
O rosace pode ser exibido da forma que você desejar (ASCII, gerar PNG, gerar SVG, ...) desde que possa ser usado por uma criança de 8 anos ( portanto, não há lista de regras, quero uma foto )!
Você pode usar linhas retas, mesmo que seja um pouco menos claro do que o que fiz no exemplo, mas você deve mostrar claramente os números que apontam para si mesmos com algum tipo de flecha de morder a cauda.
Casos de teste
(Apenas forneço os links entre os números, fique à vontade para editar minha pergunta quando o programa os gerar com êxito)
mod 2:
0 -> 0
1 -> 0
mod 3:
0 -> 0
1 -> 1
2 -> 2
mod 4:
0 -> 0
1 -> 2
2 -> 0
3 -> 2
mod 5:
0 -> 0
1 -> 0
2 -> 0
3 -> 0
4 -> 0
mod 6:
0 -> 0
1 -> 4
2 -> 2
3 -> 0
4 -> 4
5 -> 2
mod 7:
0 -> 0
1 -> 3
2 -> 6
3 -> 2
4 -> 5
5 -> 1
6 -> 4
mod 8:
0 -> 0
1 -> 2
2 -> 4
3 -> 6
4 -> 0
5 -> 2
6 -> 4
7 -> 6
mod 9:
0 -> 0
1 -> 1
2 -> 2
3 -> 3
4 -> 4
5 -> 5
6 -> 6
7 -> 7
8 -> 8
mod 10:
0 -> 0
1 -> 0
2 -> 0
3 -> 0
4 -> 0
5 -> 0
6 -> 0
7 -> 0
8 -> 0
9 -> 0
Regras
Este é o código-golfe , o código mais curto em bytes vence.
Como sempre, brechas e truques são proibidos.
fonte
Respostas:
Mathematica, 192 bytes
Esse tipo de desafio (computação matemática não trivial juntamente com saída de gráficos de alto nível) é para o que o Mathematica é feito!
Expandido e explicado:
As linhas 1 e 8 delimitam uma função sem nome de um argumento. As linhas 3 e 7 delimitam vários comandos que produzem gráficos.
As linhas 2 armazenam a entrada como
d
; define uma função binária quet
fornece as coordenadas de um ponton/d
ao redor do círculo do raior
, no sentido horário a partir do topo (no espírito deste site, salvei um byte arredondando 2π para6.3
!); e define uma função unáriam
calculando o destino da seta iniciando em seu argumento.Linha 4 torna os números
0
parad–1
igualmente espaçados em torno da circunferência de raio 9 (a exacta insignificante raio, escolhidos para maximizar a estética sujeita a encaixe em um byte).A linha 5 renderiza as setas retas no sentido horário ao redor da circunferência do círculo. O
1/7
e6/7
deixar espaço suficiente para ler os números.A linha 6 renderiza as setas curvas de cada número para (10 vezes o módulo numérico
d
).BezierCurve
desenha automaticamente uma curva de Bézier usando os pontos de controle fornecidos. Felizmente, usar a origem como um único ponto de controle interno produz uma produção razoável.Saída de amostra (observe que os casos 9, 10 e 11 são triviais de maneiras diferentes):
d = 7
d = 8
d = 9
d = 10
d = 11
d = 12
d = 13
d = 37
Essa última entrada foi escolhida porque 37 divide 10 ^ 3–1 e, portanto, as setas internas (sem contar a auto-seta obrigatória de 0 a 0) formam muitos ciclos triangulares.
fonte
Python 2, 294 bytes
Imprime o diagrama neste formato:
Não sei se esse formato está correto, portanto deixarei esta resposta inválida por enquanto.Sim, é válido!Experimente em repl.it!
fonte
n
números de dígitos. Não tenho certeza se o desafio exige que você faça isso por isson>9
.PHP + SVG, 500 bytes
pequena seta para conexões entre os mesmos valores
para ver as setas com os mesmos valores, eu uso esse valor de cor
rgba(255,0,0,0.3)
. é uma possibilidade abreviá-lo.expandido
saída para n = 45
320 bytes trabalhando com rect
expandido
saída para n = 72
fonte
Python 2,
540464431 bytesAlguns jogadores de golfe gostam de usar nomes de variáveis mais curtos, substituição de variáveis, compreensão de listas e alterar tudo para branco (exceto o texto). A maior economia foi a alteração dinâmica das posições pré-computadas (consulte
L
).L
calcula as posições dos círculos por distância até a origem para os grandes que contêm os números e os pequenos externos que indicam o auto-apontador.O primeiro loop desenha as conexões: a 1ª linha é o círculo ao redor e a 2ª linha está no interior, um pequeno círculo é adicionado para mostrar a direção ou apontar automaticamente.
O segundo loop coloca um grande círculo e número.
Obviamente, não é tão bom quanto o Mathematica responde, mas tudo feito do zero.
fonte
Mathematica,
124121 bytesCria uma figura como um gráfico com arestas direcionadas. A saída do gráfico agora segue o mesmo padrão, exceto no sentido anti-horário. Prefiro muito mais a solução de Greg Martin, já que o resultado é muito mais esteticamente agradável.
Um gráfico menos visualmente agradável pode ser gerado para 82 bytes usando
Para d = 8,
fonte
Graph
mas tive a mesma reação negativa. Além disso, para o algoritmo, é importante distinguir entre as arestas "no sentido horário" e as arestas "vezes 10". Estou certo de que há opções paraGraph
que pega isso, mas, em seguida, aqui vem mais bytes ....Graph
recursos e encontrei truques como usar em->
vez deDirectedEdge
. Reduzi a versão inicial de 100 bytes para 82 bytes, mas, corrigindo-a para o formato correto, adicionei outros 42 bytes.CircularEmbedding
, mas não colocou os vértices no sentido horárion=7
(admito que não tentei outras entradas). Isso funciona para vocên=7
?Join
eTranspose
para que as bordas externas fossem listadas primeiro antes das bordas internas. Os vértices são ordenados corretamente ao longo de um caminho circular, mas como as arestas preferem ser retas, elas se assemelham a um n -gon.Python 2 + graphviz, 147 bytes
Nem sempre desenha um círculo, gera um arquivo pdf chamado
o
fonte
Haskell, 350 bytes
Inspirado por @Loovjo, eu também uso arte ASCII. Isso funciona para números abaixo de 100000 (ou algo assim).
Basicamente, você aponta de x a (x * 10)% n.
Você pode tentar isso aqui . Mas como o codepad não suporta entrada, altere q para o valor de n desejado e reenvie. (Observe que a bifurcação não funciona, copie e reenvie da página principal). O código enviado lá é um pouco diferente, porque a versão acima recebe informações do console.
Espero que a saída seja intuitiva. Sugestões de compactação são bem-vindas (principalmente se isso for superior a 294 ;)).
fonte
foldl (++) ""$map (\...
Lote, 394 bytes
Escapar em lote é feio na melhor das hipóteses. Exemplo de saída para 7:
fonte
>0<
mostra que0
mapeia para si mesmo, enquanto>2<<<3<
mostra que3
mapeia para2
.