Vá em frente!

26

Dado um número inteiro N, execute as seguintes etapas: (usando 9 como exemplo).

  1. Receber entrada N. ( 9)
  2. Converta N da base10 para a base2. ( 1001)
  3. Aumente cada bit em 1. ( 2112)
  4. Trate o resultado como base3 e converta-o novamente em base10. ( 68)
  5. 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 é , 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
Ian H.
fonte

Respostas:

15

Python 2 , 31 bytes

f=lambda n:n and 3*f(n/2)+n%2+1

Experimente online!

Dennis
fonte
3
Você poderia explicar como isso funciona?
+n%2+1adiciona o bit mais à direita binário mais 1 para o valor de retorno, n/2direito turnos npor 1 bit binário, 3*f(n/2)recursivamente acrescenta 3 vezes este cálculo sobre os bits deslocados-direita, e n andtermina a recursão quando né 0
Noodle9
11

JavaScript (Node.js) , 23 bytes

f=x=>x&&x%2+1+3*f(x>>1)

Experimente online!

l4m2
fonte
x>>1é o mesmo que x/2não é?
mbomb007
@ mbomb007 Eu pensei e sugeri o mesmo ainda, mas aparentemente ele se torna Infinityem JS .. Experimente online. (Você pode querer adicionar um TIO-link para você responder, I4m2 )
Kevin Cruijssen
2
@ mbomb007 No. 1>>1=0while1/2=0.5
l4m2 9/04
4
@ mbomb007 ... Python?
usar o seguinte comando
2
Sim. Veja a resposta do Python. Essa é a razão pela qual n/2funciona nessa e a razão pela qual sugeri aqui.
mbomb007
9

Java (JDK 10) , 44 bytes

long n(long x){return x<1?0:x%2+1+3*n(x/2);}

Experimente online!

user202729
fonte
1
Talvez -~ajude?
usar o seguinte comando
2
Não, regras de precedência.
usar o seguinte comando
A mesma pergunta para você: por quê long? :) E aqui eu pensei que minha abordagem por sequência era inteligente. Você explodiu em menos de 5 minutos.>.>: '(
Kevin Cruijssen
@KevinCruijssen To be fair with you ...
user202729
6

Gelatina , 4 bytes

B‘ḅ3

Experimente online!

Erik, o Outgolfer
fonte
Binário, Incremento, Base, 3. Isso é realmente tudo o que precisa ser dito.
Adám
2
@ Adám Tecnicamente, isso é de base, mas sim, isso é trivial na maioria dos idiomas de golfe, se não em todos.
Erik the Outgolfer
6

J , 7 bytes

3#.1+#:

Experimente online!

Obrigado Galen Ivanov por -4 bytes! Eu realmente preciso melhorar minha habilidade de golfe J ...

user202729
fonte
1
7 bytes: 3#.1+#: TIO
Galen Ivanov
Também obrigado pelo modelo, preciso de algo para aprender : 0.
usar o seguinte comando
O modelo não é meu, esqueci quem é o autor.
Galen Ivanov
2
Isso seria me :)
Conor O'Brien
6

R , 55 43 bytes

function(n)(n%/%2^(x=0:log2(n))%%2+1)%*%3^x

Experimente online!

Usa o truque de conversão de base padrão em R, incrementa e, em seguida, usa um produto escalar com poderes de 3para converter novamente em um número inteiro.

Obrigado a @ user2390246 por deixar cair 12 bytes!

Giuseppe
fonte
Como a conversão em binário não é a saída final, a ordem dos dígitos não importa. Então, em vez de floor (log (n)): 0, você pode fazer 0: log (n) e salvar alguns bytes: 43 bytes
user2390246
@ user2390246 é claro, obrigado.
Giuseppe
6

Java 10, 81 52 bytes (conversão de base)

n->n.toString(n,2).chars().reduce(0,(r,c)->r*3+c-47)

Experimente online.

-29 bytes graças a @Holger .

Explicação:

n->{                         // Method with Long as both parameter and return-type
  n.toString(n,2)            //  Convert the input to a Base-2 String
  .chars().reduce(0,(r,c)->  //  Loop over its digits as bytes
    r*3+c-47)                //  Multiply the current result by 3, and add the digit + 1
                             //  (which is equal to increasing each digit by 1,
                             //  and then converting from Base-3 to Base-10)

Java 10, 171 167 151 150 149 bytes (Sequência)

n->{int t=31-n.numberOfLeadingZeros(n);return a(t+1)+b(n-(1<<t));};int a(int n){return--n<1?n+2:3*a(n)+1;}int b(int n){return n<1?0:n+3*b(n/=2)+n*2;}

-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))para 31-n.numberOfLeadingZeros(n).

Experimente online.

Explicação:

n->{                         // Method with Integer as both parameter and return-type
  int t=31-n.numberOfLeadingZeros(n);
                             //  2_log(n)
  return a(t+1)              //  Return A060816(2_log(n)+1)
         +b(n-(1<<t));}      //   + A005836(n-2^2_log(n))

// A060816: a(n) = 3*a(n-1) + 1; a(0)=1, a(1)=2
int a(int n){return--n<1?n+2:3*a(n)+1;}

// A005836: a(n+1) = 3*a(floor(n/2)) + n - 2*floor(n/2).
int b(int n){return n<1?0:n+3*b(n/=2)+n*2;}

Quando olhamos para a sequência:

2,  7,8,  22,23,25,26,  67,68,70,71,76,77,79,80,  202,203,205,206,211,212,214,215,229,230,232,233,238,239,241,242, ...

Podemos ver várias subsequências:

A053645(n):
0,  0,1,  0,1,2,3,  0,1,2,3,4,5,6,7,  0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,  ...

A060816(A053645(n)):
2,  7,7,  22,22,22,22,  67,67,67,67,67,67,67,67,  202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,  ...

A005836(A053645(n)+1)
0,  0,1,  0,1,3,4,  0,1,3,4,9,10,12,13,  0,1,3,4,9,10,12,13,27,28,30,31,36,37,39,40,  ...

Portanto, a sequência solicitada é:

A060816(A053645(n)) + A005836(A053645(n)+1)

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 ..: '(

Kevin Cruijssen
fonte
Re n.toString(n,2).getBytes()... Eu acho que a conversão manual pode ser mais curta.
usar o seguinte comando
1
BTW por que longe não int?
usar o seguinte comando
1
Eu acho que na versão seqüência que você pode mudar para fora (int)Math.pow(2,t)para 1<<t... e, em seguida, em linha que a expressão e soltar a variável i ( 152 bytes )
musicman523
1
Na vida real, eu usaria em 31-Integer.numberOfLeadingZeros(n)vez de (int)(Math.log(n)/Math.log(2)), mas não é mais curto. A menos que você use import staticno cabeçalho, o que pode estender muito as regras.
Holger
1
Eu apenas tentei converter ciclo do seu primeiro variante a uma solução de fluxo, com sucesso:n -> n.toString(n,2).chars().reduce(0,(r,c)->r*3+c-47)
Holger
4

Braquilog , 7 bytes

ḃ+₁ᵐ~ḃ₃

Experimente online!

Explicação

Não que você realmente precise de um, mas…

ḃ            To binary
 +₁ᵐ         Map increment
    ~ḃ₃      From ternary
Fatalizar
fonte
3

Python 2 , 56 55 bytes

lambda n:int(''.join('12'[c>'0']for c in bin(n)[2:]),3)

Experimente online!

TFeld
fonte
3

Anexo , 19 bytes

FromBase&3@1&`+@Bin

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),[]]}

Conor O'Brien
fonte
3

Retina 0.8.2 , 36 bytes

.+
$*
+`^(1+)\1
$1;1
^
1
+`1;
;111
1

Experimente online! Explicação:

.+
$*

Converta de decimal para unário.

+`^(1+)\1
$1;1

Divmod repetidamente por 2 e adicione 1 ao resultado do módulo.

^
1

Adicione 1 ao primeiro dígito também.

+`1;
;111

Converta da base 3 não codificada para unária.

1

Converta para decimal.

Neil
fonte
3

Japonês , 6 bytes

¤cÄ n3
¤      // Convert the input to a base-2 string,
 c     // then map over it as charcodes.
  Ä    // For each item, add one to its charcode
       // and when that's done,
    n3 // parse the string as a base 3 number.

Pega a entrada como um número, gera um número.

Experimente online!

Nit
fonte
Droga! Por que eu não pensei nisso? Bem feito.
Shaggy
3

MATL , 12 7 6 bytes

BQ3_ZA

Experimente online!

Economizou 5 bytes graças a Giuseppe e outro graças a Luis Mendo.

Resposta antiga de 7 bytes:

YBQc3ZA

Experimente online!

Explicação:

YB        % Convert to binary string
  Q       % Increment each element
   c      % Convert ASCII values to characters
    3     % Push 3
     ZA   % Convert from base 3 to decimal.

Antigo por 12 bytes:

BQtz:q3w^!Y*

Experimente online!

Oh meu Deus, isso foi uma bagunça ... Então é isso: `BQ3GBn: q ^! Y *.

Explicação:

               % Implicit input
B              % Convert to binary vector
 Q             % Increment all numbers
  t            % Duplicate
   z           % Number of element in vector
    :          % Range from 1 to that number
     q         % Decrement to get the range from 0 instead of 1
      3        % Push 3
       w       % Swap order of stack
        ^      % Raise 3 to the power of 0, 1, ...
         !     % Transpose
          Y*   % Matrix multiplication
               % Implicit output
Stewie Griffin
fonte
3

C # (Compilador Visual C #) , 128 bytes

using System;using System.Linq;i=>{int z=0;return Convert.ToString(i,2).Reverse().Select(a=>(a-47)*(int)Math.Pow(3,z++)).Sum();}

Experimente online!

Estou contando Systemporque eu uso Converte Math.

Hyarus
fonte
Selecionar fornece o índice como parâmetro opcional. Então você pode se livrar da sua zvariável. Também no corpo expressão que você poderia se livrar dos {, }e returndeclarações. Então, algo como iston=>Convert.ToString(n,2).Reverse().Select((x,i)=>(x-47)*Math.Pow(3,i)).Sum();
NtFreX
2

Python 2 , 56 54 bytes

lambda i:int(''.join(`int(x)+1`for x in bin(i)[2:]),3)

Experimente online!

ElPedro
fonte
2

C, 32 27 bytes

n(x){x=x?x%2+1+3*n(x/2):0;}

Com base na resposta Java do user202729 . Experimente online aqui . Agradecimentos a Kevin Cruijssen por jogar 5 bytes.

Versão não destruída:

n(x) { // recursive function; both argument and return type are implicitly int
    x = // implicit return
    x ? x % 2 + 1 + 3*n(x/2) // if x != 0 return x % 2 + 1 + 3*n(x/2) (recursive call)
    : 0; // else return 0
}
OOBalance
fonte
Você pode salvar 5 bytes, substituindo o returncom x=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;}
Kevin Cruijssen
@KevinCruijssen Nice. Obrigado!
OOBalance
2

Casca , 5 bytes

B3m→ḋ

Experimente online!

Explicação

B3m→ḋ
    ḋ  Convert to base 2
  m→   Map increment
B3     Convert from base 3
Fyr
fonte
2

Oitava com a caixa de ferramentas de comunicação, 33 32 bytes

@(x)(de2bi(x)+1)*3.^(0:log2(x))'

Experimente online!

Converte a entrada em um vetor binário usando de2bie 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 para sum.

Stewie Griffin
fonte
Embora isso seja extremamente inteligente, você também pode fazer isso por 32 bytes: Experimente online!
Sanchises
E com MATLAB você pode até fazer @(x)base2dec(de2bi(x)+49,3)para 27 (uma rara ocasião em que MATLAB é mais branda do que Octave)
Sanchises
2

PHP, 84 64 bytes

Experimente online !!

Código ORIGINAL

function f($n){$b=decbin($n);echo base_convert($b+str_repeat('1',strlen($b)),3,10);}

Experimente online !!

Graças a Cristoph , menos bytes se executados com php -R

function f($n){echo base_convert(strtr(decbin($n),10,21),3,10);}

Explicação

function f($n){
$b=decbin($n);                    #Convert the iteger to base 2
echo base_convert(                  #base conversion PHP function
    $b+str_repeat('1',strlen($b)),  #It adds to our base 2 number
    3,                              #a number of the same digits length
    10);                            #with purely '1's
}
Francisco Hahn
fonte
Aqui é quando eu vejo que tem uma maneira loooogn para ir a programação .... não tinha idéia da existência destrtr
Francisco Hahn
1
Will do !!, sorry<?="Will do!!"
Francisco Hahn
2

CJam , 8 bytes

ri2b:)3b

Experimente online!

Explicação

ri   e# Read input as an integer
2b   e# Convert to base 2. Gives a list containing 0 and 1
:)   e# Add 1 to each number in that list
3b   e# Convert list from base 3 to decimal. Implicitly display
Luis Mendo
fonte
Eu meio que como o :)..
Ian H.
2

Espaço em branco , 117 bytes

[S S S N
_Push_0][S N
S _Duplicate_0][S N
S _Duplicate_0][T   N
T   T   _Read_STDIN_as_number][T    T   T   _Retrieve][N
S S S N
_Create_Label_OUTER_LOOP][S N
S _Duplicate][S S S T   S N
_Push_2][T  S T T   _Modulo][S S S T    N
_Push_1][T  S S S _Add][S N
T   _Swap][S S S T  S N
_Push_2][T  S T S _Integer_division][S N
S _Duplicate][N
T   S N
_If_0_jump_to_Label_INNER_LOOP][N
S N
S N
_Jump_to_Label_OUTER_LOOP][N
S S N
_Create_Label_INNER_LOOP][S S S T   T   N
_Push_3][T  S S N
_Multiply][T    S S S _Add][S N
T   _Swap][S N
S _Duplicate][N
T   S T N
_If_0_jump_to_Label_PRINT_AND_EXIT][S N
T   _Swap][N
S N
N
_Jump_to_Label_INNER_LOOP][N
S S T   N
_Create_Label_PRINT_AND_EXIT][S N
T   _Swap][T    N
S T _Output_integer_to_STDOUT]

Letras S(espaço), T(tabulação) e N(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):

Integer n = STDIN as integer
Add starting_value 0 to the stack
function OUTER_LOOP:
  while(true){
    Add n%2+1 to the stack
    n = n/2
    if(n == 0):
      Jump to INNER_LOOP
    Else:
      Jump to next iteration OUTER_LOOP

function INNER_LOOP:
  while(true){
    n = 3*n
    n = n + Value at the top of the stack (the ones we calculated with n%2+1)
    Swap top two items
    Check if the top is now 0 (starting value):
      Jump to PRINT_AND_EXIT
    Else:
      Swap top two items back
      Jump to next iteration INNER_LOOP

function PRINT_AND_EXIT:
  Swap top two items back
  Print top to STDOUT as integer
  Exit program with error: Exit not defined

Em seguida, implementei essa abordagem iterativa na linguagem Whitespace baseada em pilha, usando sua pilha padrão.

Exemplo é executado:

Entrada: 1

Command    Explanation                   Stack           Heap    STDIN   STDOUT   STDERR

SSSN       Push 0                        [0]
SNS        Duplicate top (0)             [0,0]
SNS        Duplicate top (0)             [0,0,0]
TNTT       Read STDIN as integer         [0,0]           {0:1}   1
TTT        Retrieve                      [0,1]           {0:1}
NSSSN      Create Label OUTER_LOOP       [0,1]           {0:1}
 SNS       Duplicate top (1)             [0,1,1]         {0:1}
 SSSTSN    Push 2                        [0,1,1,2]       {0:1}
 TSTT      Modulo top two (1%2)          [0,1,1]         {0:1}
 SSSTN     Push 1                        [0,1,1,1]       {0:1}
 TSSS      Add top two (1+1)             [0,1,2]         {0:1}
 SNT       Swap top two                  [0,2,1]         {0:1}
 SSSTSN    Push 2                        [0,2,1,2]       {0:1}
 TSTS      Int-divide top two (1/2)      [0,2,0]         {0:1}
 SNS       Duplicate top (0)             [0,2,0,0]       {0:1}
 NTSN      If 0: Go to Label INNER_LOOP  [0,2,0]         {0:1}
 NSSN      Create Label INNER_LOOP       [0,2,0]         {0:1}
  SSSTTN   Push 3                        [0,2,0,3]       {0:1}
  TSSN     Multiply top two (0*3)        [0,2,0]         {0:1}
  TSSS     Add top two (2+0)             [0,2]           {0:1}
  SNT      Swap top two                  [2,0]           {0:1}
  SNS      Duplicate top (0)             [2,0,0]         {0:1}
  NTSTN    If 0: Jump to Label PRINT     [2,0]           {0:1}
  NSSTN    Create Label PRINT            [2,0]           {0:1}
   SNT     Swap top two                  [0,2]           {0:1}
   TNST    Print top to STDOUT           [0]             {0:1}           2
                                                                                  error

Experimente online (apenas com espaços brutos, guias e novas linhas).
Para com erro: Saída não definida.

Entrada: 4

Command    Explanation                   Stack           Heap    STDIN   STDOUT   STDERR

SSSN       Push 0                        [0]
SNS        Duplicate top (0)             [0,0]
SNS        Duplicate top (0)             [0,0,0]
TNTT       Read STDIN as integer         [0,0]           {0:4}   4
TTT        Retrieve                      [0,4]           {0:4}
NSSSN      Create Label OUTER_LOOP       [0,4]           {0:4}
 SNS       Duplicate top (4)             [0,4,4]         {0:4}
 SSSTSN    Push 2                        [0,4,4,2]       {0:4}
 TSTT      Modulo top two (4%2)          [0,4,0]         {0:4}
 SSSTN     Push 1                        [0,4,0,1]       {0:4}
 TSSS      Add top two (0+1)             [0,4,1]         {0:4}
 SNT       Swap top two                  [0,1,4]         {0:4}
 SSSTSN    Push 2                        [0,1,4,2]       {0:4}
 TSTS      Int-divide top two (4/2)      [0,1,2]         {0:4}
 SNS       Duplicate top (2)             [0,1,2,2]       {0:4}
 NTSN      If 0: Go to Label INNER_LOOP  [0,1,2]         {0:4}
 NSNSN     Jump to Label OUTER_LOOP      [0,1,2]         {0:4}
 SNS       Duplicate top (2)             [0,1,2,2]       {0:4}
 SSSTSN    Push 2                        [0,1,2,2,2]     {0:4}
 TSTT      Modulo top two (2%2)          [0,1,2,0]       {0:4}
 SSSTN     Push 1                        [0,1,2,0,1]     {0:4}
 TSSS      Add top two (0+1)             [0,1,2,1]       {0:4}
 SNT       Swap top two                  [0,1,1,2]       {0:4}
 SSSTSN    Push 2                        [0,1,1,2,2]     {0:4}
 TSTS      Int-divide top two (2/2)      [0,1,1,1]       {0:4}
 SNS       Duplicate top (1)             [0,1,1,1,1]     {0:4}
 NTSN      If 0: Go to Label INNER_LOOP  [0,1,1,1]       {0:4}
 NSNSN     Jump to Label OUTER_LOOP      [0,1,1,1]       {0:4}
 SNS       Duplicate top (1)             [0,1,1,1,1]     {0:4}
 SSSTSN    Push 2                        [0,1,1,1,1,2]   {0:4}
 TSTT      Modulo top two (1%2)          [0,1,1,1,1]     {0:4}
 SSSTN     Push 1                        [0,1,1,1,1,1]   {0:4}
 TSSS      Add top two (1+1)             [0,1,1,1,2]     {0:4}
 SNT       Swap top two                  [0,1,1,2,1]     {0:4}
 SSSTSN    Push 2                        [0,1,1,2,1,2]   {0:4}
 TSTS      Int-divide top two (1/2)      [0,1,1,2,0]     {0:4}
 SNS       Duplicate top (0)             [0,1,1,2,0,0]   {0:4}
 NTSN      If 0: Go to Label INNER_LOOP  [0,1,1,2,0]     {0:4}
 NSSN      Create Label INNER_LOOP       [0,1,1,2,0]     {0:4}
  SSSTTN   Push 3                        [0,1,1,2,0,3]   {0:4}
  TSSN     Multiply top two (0*3)        [0,1,1,2,0]     {0:4}
  TSSS     Add top two (2+0)             [0,1,1,2]       {0:4}
  SNT      Swap top two                  [0,1,2,1]       {0:4}
  SNS      Duplicate top (1)             [0,1,2,1,1]     {0:4}
  NTSTN    If 0: Jump to Label PRINT     [0,1,2,1]       {0:4}
  SNT      Swap top two                  [0,1,1,2]       {0:4}
  NSNN     Jump to Label INNER_LOOP      [0,1,1,2]       {0:4}
  SSSTTN   Push 3                        [0,1,1,2,3]     {0:4}
  TSSN     Multiply top two (2*3)        [0,1,1,6]       {0:4}
  TSSS     Add top two (1+6)             [0,1,7]         {0:4}
  SNT      Swap top two                  [0,7,1]         {0:4}
  SNS      Duplicate top (1)             [0,7,1,1]       {0:4}
  NTSTN    If 0: Jump to Label PRINT     [0,7,1]         {0:4}
  SNT      Swap top two                  [0,1,7]         {0:4}
  NSNN     Jump to Label INNER_LOOP      [0,1,7]         {0:4}
  SSSTTN   Push 3                        [0,1,7,3]       {0:4}
  TSSN     Multiply top two (7*3)        [0,1,21]        {0:4}
  TSSS     Add top two (1+21)            [0,22]          {0:4}
  SNT      Swap top two                  [22,0]          {0:4}
  SNS      Duplicate top (0)             [22,0,0]        {0:4}
  NTSTN    If 0: Jump to Label PRINT     [22,0]          {0:4}
  NSSTN    Create Label PRINT            [22,0]          {0:4}
   SNT     Swap top two                  [0,22]          {0:4}
   TNST    Print top to STDOUT           [0]             {0:4}           22
                                                                                  error

Experimente online (apenas com espaços brutos, guias e novas linhas).
Para com erro: Saída não definida.

Kevin Cruijssen
fonte
Neste ponto, por que não escrever montagem? Também tenho um método iterativo um pouco mais simples na minha resposta codegolf.stackexchange.com/a/161833/17360
QWR
Simplifiquei ainda mais meu pseudocódigo python.
QWR
1
@qwr Seu código Python é quase o mesmo que o código Java exibido. Java é apenas mais detalhado e propenso a erros. A única diferença é que meu código Java é um loop while aninhado e o seu é separado. Eu poderia fazer isso também em Java, mas como está aninhado no Whitespace, optei por escrevê-lo como tal no pseudo-código Java também. Além disso, o Whitespace não tem como saber o número de itens restantes na pilha, e é por isso que eu pressiono o 0 no início e, na parte INNER_LOOP do código, faça: swap, verifique se 0, volte. Resposta da Assembléia de Nice, no entanto. Então eu marquei isso com +1. :)
Kevin Cruijssen
Eu ainda acho que você pode se livrar da n < 1verificaçã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)
QWR
@qwr " Eu ainda acho que você pode se livrar da verificação n <1 pressionando valores até que n seja 0 " Umm .. verificando se n < 1(ou n == 0) está pressionando valores até que nseja 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 em java.util.Stackvez disso, mas apenas usei uma matriz para torná-la menos detalhada. Em espaço em branco, a pilha é de tamanho indefinido.
Kevin Cruijssen
2

Flacidez Cerebral , 74 bytes

({<>(())<>({<({}[()])><>([{}]())<>})}(<>)){{}((({})()){}{}[{}])([][()])}{}

Experimente online!

Versão "legível"

({<>(())<>
  ({
    <({}[()])>
    <>
    ([{}]())
    <>
  })
}
# At this point we have a inverted binary string on the stack
(<>)
)
{
  {}
  (
    (({})()){}{}[{}]
  )
  ([][()])
}{}
MegaTom
fonte
-2 bytes
Jo King
1

Pitão, 8

ihMjQ2 3

Como eliminar o espaço e tornar Qimplícito?

Pyth online .

Trauma Digital
fonte
Eu acredito que este é realmente 8 bytes
hakr14
@ hakr14 Sim, você está certo
Digital Trauma
Como eliminar o espaço e tornar Qimplícito? Eu não acho que você pode.
Erik the Outgolfer