Dado um número inteiro N, execute as seguintes etapas: (usando 9 como exemplo).
- Receber entrada N. (
9
) - Converta N da base10 para a base2. (
1001
) - Aumente cada bit em 1. (
2112
) - Trate o resultado como base3 e converta-o novamente em base10. (
68
) - Retornar / Imprimir o resultado.
Entrada
Pode ser recebido em qualquer formato de número razoável.
Você só precisa lidar com casos em que N> 0.
Saída
Retorne como um número ou sequência ou imprima para stdout
.
Regras
- Isso é código-golfe , o código mais curto em bytes vence.
- As brechas padrão são proibidas.
Casos de teste
1 -> 2
2 -> 7
5 -> 23
9 -> 68
10 -> 70
20 -> 211
1235 -> 150623
93825 -> 114252161
code-golf
number
base-conversion
Ian H.
fonte
fonte
+n%2+1
adiciona o bit mais à direita binário mais 1 para o valor de retorno,n/2
direito turnosn
por 1 bit binário,3*f(n/2)
recursivamente acrescenta 3 vezes este cálculo sobre os bits deslocados-direita, en and
termina a recursão quandon
é 0JavaScript (Node.js) , 23 bytes
Experimente online!
fonte
x>>1
é o mesmo quex/2
não é?Infinity
em JS .. Experimente online. (Você pode querer adicionar um TIO-link para você responder, I4m2 )1>>1=0
while1/2=0.5
n/2
funciona nessa e a razão pela qual sugeri aqui.Java (JDK 10) , 44 bytes
Experimente online!
fonte
-~
ajude?long
? :) E aqui eu pensei que minha abordagem por sequência era inteligente. Você explodiu em menos de 5 minutos.>.>: '(Gelatina , 4 bytes
Experimente online!
fonte
J , 7 bytes
Experimente online!
Obrigado Galen Ivanov por -4 bytes! Eu realmente preciso melhorar minha habilidade de golfe J ...
fonte
3#.1+#:
TIO: 0
.R ,
5543 bytesExperimente online!
Usa o truque de conversão de base padrão em R, incrementa e, em seguida, usa um produto escalar com poderes de
3
para converter novamente em um número inteiro.Obrigado a @ user2390246 por deixar cair 12 bytes!
fonte
05AB1E , 5 bytes
Experimente online!
05AB1E , 5 bytes
Experimente online!
fonte
S
trabalha para€
também.Java 10,
8152 bytes (conversão de base)Experimente online.
-29 bytes graças a @Holger .
Explicação:
Java 10,
171167151150149 bytes (Sequência)-16 bytes graças a @ musicman523 , alterando
(int)Math.pow(2,t)
para(1<<t)
.-1 byte graças a @Holger , alterando
(int)(Math.log(n)/Math.log(2))
para31-n.numberOfLeadingZeros(n)
.Experimente online.
Explicação:
Quando olhamos para a sequência:
Podemos ver várias subsequências:
Portanto, a sequência solicitada é:
Sou péssimo em encontrar padrões, por isso estou orgulhoso do que encontrei acima .. Tendo dito isso, o @ user202729 encontrou uma abordagem melhor e mais curta em Java em poucos minutos ..: '(
fonte
n.toString(n,2).getBytes()
... Eu acho que a conversão manual pode ser mais curta.long
e nãoint
?(int)Math.pow(2,t)
para1<<t
... e, em seguida, em linha que a expressão e soltar a variável i ( 152 bytes )31-Integer.numberOfLeadingZeros(n)
vez de(int)(Math.log(n)/Math.log(2))
, mas não é mais curto. A menos que você useimport static
no cabeçalho, o que pode estender muito as regras.n -> n.toString(n,2).chars().reduce(0,(r,c)->r*3+c-47)
APL (Dyalog) , 10 bytes
Experimente online!
fonte
Braquilog , 7 bytes
Experimente online!
Explicação
Não que você realmente precise de um, mas…
fonte
Ruby , 27 bytes
Experimente online!
fonte
Python 2 ,
5655 bytesExperimente online!
fonte
Anexo , 19 bytes
Experimente online!
Esta é uma composição de três funções:
FromBase&3
1&`+
Bin
Isso primeiro converte em binário (
Bin
), incrementa (1&`+
) e depois converte em ternário (FromBase&3
).Alternativas
Sem ponto, 21 bytes:
{FromBase[Bin!_+1,3]}
Sem builtins, 57 bytes:
Sum@{_*3^(#_-Iota!_-1)}@{If[_>0,$[_/2|Floor]'(1+_%2),[]]}
fonte
Retina 0.8.2 , 36 bytes
Experimente online! Explicação:
Converta de decimal para unário.
Divmod repetidamente por 2 e adicione 1 ao resultado do módulo.
Adicione 1 ao primeiro dígito também.
Converta da base 3 não codificada para unária.
Converta para decimal.
fonte
Japonês , 6 bytes
Pega a entrada como um número, gera um número.
Experimente online!
fonte
MATL ,
1276 bytesExperimente online!
Economizou 5 bytes graças a Giuseppe e outro graças a Luis Mendo.
Resposta antiga de 7 bytes:
Experimente online!
Explicação:
Antigo por 12 bytes:
Experimente online!
Oh meu Deus, isso foi uma bagunça ... Então é isso: `BQ3GBn: q ^! Y *.
Explicação:
fonte
C # (Compilador Visual C #) , 128 bytes
Experimente online!
Estou contando
System
porque eu usoConvert
eMath
.fonte
z
variável. Também no corpo expressão que você poderia se livrar dos{
,}
ereturn
declarações. Então, algo como iston=>Convert.ToString(n,2).Reverse().Select((x,i)=>(x-47)*Math.Pow(3,i)).Sum();
Python 2 ,
5654 bytesExperimente online!
fonte
C,
3227 bytesCom base na resposta Java do user202729 . Experimente online aqui . Agradecimentos a Kevin Cruijssen por jogar 5 bytes.
Versão não destruída:
fonte
return
comx=
e reverter o ternário de modo a!
não é mais necessário:n(x){x=x?x%2+1+3*n(x/2):0;}
Casca , 5 bytes
Experimente online!
Explicação
fonte
Oitava com a caixa de ferramentas de comunicação,
3332 bytesExperimente online!
Converte a entrada em um vetor binário usando
de2bi
e incrementando todos os números. Faz multiplicação de matrizes com um vetor vertical de 3 elevado às potências apropriadas:,1, 3, 9, ...
obtendo assim a soma sem uma chamada explícita parasum
.fonte
@(x)base2dec(de2bi(x)+49,3)
para 27 (uma rara ocasião em que MATLAB é mais branda do que Octave)PHP,
8464 bytesExperimente online !!
Código ORIGINAL
Experimente online !!
Graças a Cristoph , menos bytes se executados com php -R
Explicação
fonte
strtr
<?="Will do!!"
CJam , 8 bytes
Experimente online!
Explicação
fonte
:)
..Espaço em branco , 117 bytes
Letras
S
(espaço),T
(tabulação) eN
(nova linha) adicionadas apenas como destaque.[..._some_action]
adicionado apenas como explicação.Experimente online (apenas com espaços brutos, guias e novas linhas).
Explicação em pseudo-código:
Primeiro converti a função recursiva
int f(int n){return n<1?0:n%2+1+3*f(n/2);}
para sua forma iterativa (em pseudo-código):Em seguida, implementei essa abordagem iterativa na linguagem Whitespace baseada em pilha, usando sua pilha padrão.
Exemplo é executado:
Entrada:
1
Experimente online (apenas com espaços brutos, guias e novas linhas).
Para com erro: Saída não definida.
Entrada:
4
Experimente online (apenas com espaços brutos, guias e novas linhas).
Para com erro: Saída não definida.
fonte
n < 1
verificação pressionando valores até n ser 0 e, em seguida, exibindo-os até atingir seu valor limite (0). A profundidade da pilha não precisam ser armazenados de forma explícita e não deve sequer precisam ser trocando (se você quer dizer trocando o topo dois valores como em Lisp)n < 1
(oun == 0
) está pressionando valores até quen
seja 0 .. Ou estou interpretando mal algo aqui ..: S " A profundidade da pilha não precisa ser armazenada explicitamente " Em Java, caso contrário, não posso criar a matriz. Eu poderia ter usado um emjava.util.Stack
vez disso, mas apenas usei uma matriz para torná-la menos detalhada. Em espaço em branco, a pilha é de tamanho indefinido.Flacidez Cerebral , 74 bytes
Experimente online!
Versão "legível"
fonte
Adicionar ++ , 14 bytes
Experimente online!
fonte
Japonês , 7 bytes
Experimente aqui
fonte
Haskell , 32 bytes
Experimente online!
fonte
Perl 5 , 36 bytes
Experimente online!
fonte
Pitão, 8
Como eliminar o espaço e tornar
Q
implícito?Pyth online .
fonte
Q
implícito? Eu não acho que você pode.