Um número demoníaco é um número inteiro positivo cuja representação decimal consiste em apenas 6. A lista de números demoníacos começa com 6, 66, 666, 6666.
Dado um número inteiro positivo, imprima o número demoníaco mais próximo. Se houver dois, produza o maior.
Casos de teste:
n output
1 6
2 6
3 6
6 6
35 6
36 66
37 66
100 66
365 66
366 666
666 666
999 666
Isso é código-golfe . A resposta mais curta em bytes vence.
code-golf
number
arithmetic
Freira Furada
fonte
fonte
Respostas:
Python 2, 28 bytes
fonte
x=>'6'.repeat((''+-~(x*3/11)).length)
3.6666... = 11/3
..JavaScript (ES6),
3129 bytesMostrar snippet de código
"É por isso que me deleito com as fraquezas [...] pois quando sou fraco, sou forte."
fonte
Braquilog , 8 bytes
Experimente online!
Explicação
fonte
Java 7,
969366 bytesPorto do @orlp incrível resposta em Python 2 .
Experimente aqui.
Acho que minha contagem de 66 bytes também é um demônio. ;)
(Não é a resposta Java mais curta, veja a resposta de @JollyJoker para isso .
fonte
"6"
deveria ter sido""
.Geléia , 9 bytes
Um link monádico.
Experimente online! - Quase nenhum ponto neste link (veja abaixo)!
Quão?
No verdadeiro estilo de golfista, isso é realmente ineficiente - chega aos 60 anos no TIO para o caso de teste 365 ! Localmente, isso termina em 37s.
Um patch para executar o mesmo algoritmo dentro do limite dos anos 60 para 365 e 366 no TIO é evitar a vetorização implícita de
Ḍ
withẆa6Ḍ€ạÐṂ⁸Ṫ
( tente isso ), no entanto, isso agora causará uma falha seg para uma entrada de 999 ( Triangle (999) é apenas 499.500, mas cada um é uma lista de números inteiros, perfazendo um total de Tetraédrico (999) = 166.666.500 números inteiros, sem economia de memória, pelo menos em Python).fonte
Gelatina , 10 bytes
Experimente online!
fonte
‘×3:11Ṿ”6ṁ
para saída de string,‘×3:11D6ṁḌ
para inteiro.C, 118 bytes
Experimente on-line
fonte
JavaScript (ES6), 41 bytes
Casos de teste
Mostrar snippet de código
fonte
Mathematica, 36 bytes
Função pura:
Explicação:
Iterativa Crie uma lista de comprimento igual à entrada usando
NestList
o padrão6+10x(previous_value)
a partir do valor de6
.Em seguida, encontre o valor nesta lista mais próximo da entrada.
Por fim, pegue o valor máximo da lista de valores mais próximos.
Embora o tamanho da lista seja super ineficiente, pois o mathematica pode trabalhar com números arbitrários de comprimento de precisão, este programa é limitado apenas pela memória física.
fonte
Modelos considerados nocivos , 118 bytes
Experimente online!
Ungolfed:
fonte
05AB1E ,
109 bytes- 1 byte graças a Riley
Experimente online!
O código acima pode ter problemas de desempenho, eis uma versão um pouco mais eficiente com 10 bytes: alternativa TIO
Explicação
fonte
Mathematica, 76 bytes
fonte
Neim ,
1210 bytes (não concorrente)-1 byte graças a steenbergh
Explicação:
Infelizmente,
𝕔
retornará o valor mais baixo em uma lista se dois números tiverem a mesma diferença; portanto, tivemos que adicionar 2 bytes para explicar isso.Não concorrentes como
>
,<
eℝ
foram adicionados após esta pergunta foi feita (e𝐥
foi fixado para trabalhar com números, e não apenas listas)Nota: Não funcionará para números com um comprimento igual a 19 ou mais - pois eles ficam grandes demais para os comprimentos de Java. (mas esse é um valor bastante grande e deve ficar bom)
Tente
fonte
Γ6Θℝ)
porΓΘ𝐈Γ6)𝐣)
?Java 8, 37 bytes
Seguindo o exemplo de Kevin Cruijssen e retornando uma String.
Faça o truque * 3/11 para obter o comprimento certo e substitua todos por seis.
fonte
-~
vezes dez que eu deveria ter visto nesta página se eu tivesse prestado atenção ...QBIC ,
3727 bytesEm vez de usar o Maths ™, agora ele usa manipulação de strings para encontrar as quebras nos domínios demoníacos (36, 366, ...). Inspirado na resposta JS de @ eush77.
Explicação
fonte
dc , 46 bytes
Experimente online!
fonte
C #, 142 bytes
Ele usa o fato de que precisamos pular para o próximo número deamônico a cada 36666 ... De uma forma mais legível:
fonte
braingasm , 15 bytes
Usando a aritmética da solução Python da orlp :
fonte
Não vi essa pergunta no feed e só a tropecei por acidente. Aqui está a minha resposta de qualquer maneira:
JavaScript (ES6), 34 bytes
Adicione 1 byte para uma resposta numérica. Originalmente, com base nesta resposta ES7 não destruída (37 bytes, já numérica):
Irritantemente, o OP quer que 36 estejam mais próximos de 66 que 6. Explicação: 11/3 = 3.666 ..., então dividir por isso escala os intervalos 7..36, 37..366 etc. aos intervalos 1..9.9, 10 ..99.9 etc. Isso pode ser resolvido puramente numericamente, usando 2/3 de um a menos que a próxima potência mais alta de 10, embora seja mais complicado truncar, converter em sequência e alterar todos os caracteres para o dígito 6. (Embora ainda não tão golfista quanto a resposta recursiva realmente inteligente.)
fonte
CJam, 25 bytes
Não é tão lento quanto o envio de Jonathan Alan's Jelly, mas requer memória O (n²) , onde n é o número de entrada. Sim.
Isso é equivalente ao seguinte Python:
Solução alternativa, 12 bytes
Esta é uma tradução do algoritmo do orlp para CJam.
Explicação:
fonte
PHP, 49 bytes
aparar o personagem 6
Experimente online!
Em vez de
trim($x=$argn+$i,6)>""
você pode usar uma solução Regex!preg_match("#^6+$#",$x=$argn+$i)
+11 Bytes ou um comprimento da corda igualar a contagem6
comparaçãostrlen($x=$argn+$i)-strspn($x,6)
+10 Bytesfonte
LOLCODE 1.4, 471 bytes
Uau. Aqui está o Ungolfed and Explained:
Ainda uau. Aqui está um pseudojavascrython para você.
Ainda não entendeu? Este programa basicamente apenas (excluindo as entradas 1 a 3) compara a entrada com 3,6 * 10 ^ n, sendo n o comprimento da entrada. Se for menor que esse número, imprime o número de 6s um a menos que o comprimento. Se for maior ou igual a esse número, o número de seis é o comprimento atual.
Adoraria alguma ajuda no golfe!
fonte
Haxe, 70 bytes
A entrada deve ser passada como tipo
Float
apesar de ser um número inteiro; caso contrário, o Haxe se queixará de tentar dividir um número inteiro (sim, o haxe se recusará a compilar se você dividir um número inteiro por qualquer coisa)O mesmo que todas as outras respostas. Multiplique por 3, divida por 11, imprima 1
6
para cada dígito.fonte
Brainfuck, 315 bytes
Execute-o aqui . Selecione um tamanho de célula que possa manipular valores de 3 * (n + 1), para que todos os casos de teste funcionem, selecione 16. A memória dinâmica (infinita) deve estar ativada para que isso funcione. Isso permite que a fita se expanda para a esquerda. Para inserir um número inteiro, digite a entrada como
\366
para n = 366.Ungolfed:
Usa o mesmo algoritmo que esta solução . Os algoritmos usados para cada etapa individual são obtidos nesta página . Todos os algoritmos usados são não empacotáveis, para que o programa não seja interrompido por entradas maiores.
fonte
n=n*3
pode ser jogado para algo como[->+++<]
? E o algoritmo divmod para dividir por 10?05AB1E , 7 bytes
Experimente online!
fonte
Japonês , 9 bytes
Tente
fonte
C #, 102 bytes
Meio decepcionado com a extensão disso, poderia fazer exatamente o mesmo que a resposta mais curta em Java, mas eu realmente não entendi porque sou um desenvolvedor .NET preguiçoso e estúpido :)
fonte