Primeiro, estude esse quebra - cabeça para ter uma ideia do que você estará produzindo.
Seu desafio é escrever um programa ou função que produza um gráfico circular como os do quebra-cabeça, considerando um número (base 10) entre 1 e 100 (inclusive). Isso é semelhante a esse desafio , exceto que você produzirá um gráfico em vez de algarismos romanos. Os seguintes círculos representam os números de 1 a 10, da esquerda para a direita:
Como diz a resposta do quebra-cabeça, seu gráfico deve ler-se como um número romano de dentro para fora, onde a espessura da linha representa os símbolos dos números romanos e o gráfico inteiro representa o número. Para sua referência, aqui estão as espessuras de linha que você precisará. Cada linha deve ter um preenchimento de 3px entre ela e a próxima.
Number Roman Numeral Line Width
1 I 1px
5 V 3px
10 X 5px
50 L 7px
100 C 9px
Poste uma amostra ou duas da sua saída. Suponha que a entrada esteja correta, brechas padrão , etc. e assim por diante. Isso é código de golfe, e o menor número de bytes vence. Em caso de empate, a maioria dos votos vence. Boa sorte!
fonte
Respostas:
Mathematica -
166181 bytesUm pouco mais conciso do que a outra resposta do Mathematica, graças em parte a um estilo sem pontos.
Todo o espaço em branco é apenas para clareza. Isso define uma função anônima que retorna o gráfico desejado.
Animação
A geração de um GIF animado dos círculos numéricos é trivial no Mathematica, que possui funções internas para animar e exportar seqüências de objetos arbitrários. Assumindo que o código acima acabou de ser executado,
Saída de exemplo
fonte
Lisp comum -
376331304 bytesExemplos
(1) (24)
(104) (1903) (3999)
Animação
Para números de 1 a 400:
NB: Para o registro, esta animação é feita da seguinte maneira:
Eu tenho uma versão modificada do código, nomeada
rings
que retorna a largura da imagem produzida. Portanto, o resultado do seguinte loop é o tamanho máximo, aqui 182 :O loop inteiro leva 9,573 segundos. Isso fornece aproximadamente 24ms para cada número inteiro. Então, em uma concha:
Ungolfed
Explicações
A função assume um número inteiro
N
entre 1 e 3999 e um nome de arquivoEu uso
(format nil "~@R" N)
para converter de decimal para romano. Por exemplo:A
~@R
cadeia de controle de formato é especificada para funcionar com números inteiros entre 1 e 3999. É por isso que há uma limitação para o intervalo de entradas permitidas.Eu itero sobre a string resultante para criar uma lista
P
contendo(radius width)
casais, para cada numeral C.A largura é um mapeamento linear simples: eu uso a cadeia constante "IVXLCDM" para calcular a posição de C nela. Multiplicando por dois e adicionando um, obtemos o valor desejado:
No entanto, isso é feito de maneira ligeiramente diferente na versão golfed:
O cálculo de cada raio leva em consideração a largura de cada anel, bem como os espaços vazios entre os anéis. Sem qualquer otimização de velocidade, os cálculos permanecem precisos porque não são baseados em flutuadores, mas em números racionais.
Editar : alterei os parâmetros para cumprir as regras de preenchimento.
Feito isso, conheço o tamanho necessário da tela resultante (duas vezes o raio computado mais recente).
P
e salve a tela.fonte
HTML + JQuery, 288
HTML
JS
Mostrar snippet de código
Violino
fonte
Java, 565
Exemplos
15
84
93
Formatado bem:
fonte
Mathematica 9 -
301249 bytes: D Parece barato usar a conversão incorporada para números romanos, mas ei.
(Quando eu fiz isso ontem à noite, não tive muito tempo, mas percebi que poderia ser muito melhor. E também peguei algumas dicas de David Zhang ...: D Obrigado!)
Um pouco mais claramente:
Esta é uma função que você pode chamar assim:
Ou, você pode mostrar os resultados de valores de um a b com:
Table[r[i],{i,a,b}]
Nota : Isso funciona apenas para valores de até 399.
fonte
Python 2,
322296O script lê o número a ser convertido do stdin e gera a imagem como marcação SVG.
.. Eu uso 'vermelho' em vez de 'preto', porque economiza 2 caracteres :)
Aqui estão alguns exemplos: para 23: http://jsfiddle.net/39xmpq49/ para 42: http://jsfiddle.net/7Ls24q9e/1/
fonte
Javascript
342334308fonte