W górę idź na kawałki!

26

Biorąc pod uwagę liczbę całkowitą N, wykonaj następujące czynności: (używając 9 jako przykładu).

  1. Odbierz wejście N. ( 9)
  2. Przelicz N z base10 na base2. ( 1001)
  3. Zwiększaj każdy bit o 1. ( 2112)
  4. Traktuj wynik jako base3 i przekonwertuj go z powrotem na base10. ( 68)
  5. Zwróć / wyślij wynik.

Wkład

Może być odbierany w dowolnym rozsądnym formacie liczbowym.
Musisz obsługiwać tylko przypadki, w których N> 0.


Wydajność

Zwróć jako liczbę lub ciąg znaków lub wydrukuj do stdout.


Zasady

  • To jest , wygrywa najkrótszy kod w bajtach.
  • Domyślne luki są zabronione.

Przypadki testowe

1 -> 2
2 -> 7
5 -> 23
9 -> 68
10 -> 70
20 -> 211
1235 -> 150623
93825 -> 114252161
Ian H.
źródło

Odpowiedzi:

15

Python 2 , 31 bajtów

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

Wypróbuj online!

Dennis
źródło
3
Czy możesz wyjaśnić, jak to działa?
+n%2+1dodaje do wartości zwracanej bit binarny najbardziej wysunięty w prawo plus 1, n/2przesuwa w prawo no 1 bit binarny, 3*f(n/2)rekurencyjnie dodaje 3-krotność tego obliczenia dla bitów przesuniętych w prawo i n andkończy rekurencję, gdy nwynosi 0
Noodle9
11

JavaScript (Node.js) , 23 bajty

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

Wypróbuj online!

l4m2
źródło
x>>1jest taki sam jak x/2nie jest?
mbomb007
@ mbomb007 Myślałem i zasugerowałem to samo, ale najwyraźniej staje się Infinityw JS .. Wypróbuj online. (Możesz dodać link TIO do swojej odpowiedzi, I4m2 )
Kevin Cruijssen
2
@ mbomb007 No. 1>>1=0while1/2=0.5
l4m2
4
@ mbomb007 ... Python?
user202729,
2
Tak. Spójrz na odpowiedź Python. To jest powód, dla którego on n/2działa i dlatego zasugerowałem to tutaj.
mbomb007
9

Java (JDK 10) , 44 bajty

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

Wypróbuj online!

użytkownik202729
źródło
1
Może -~pomoże?
user202729,
2
Nie, zasady pierwszeństwa.
user202729,
To samo pytanie: dlaczego long? :) A tutaj myślałem, że moje podejście sekwencyjne jest inteligentne ..
Wyleciałeś
@KevinCruijssen Aby być z tobą uczciwy ...
użytkownik202729
6

Galaretka , 4 bajty

B‘ḅ3

Wypróbuj online!

Erik the Outgolfer
źródło
Binarny, przyrostowy, bazowy, 3. To naprawdę wszystko, co trzeba powiedzieć.
Adám
2
@ Adám Technicznie rzecz biorąc, pochodzi z bazy, ale tak, jest to trywialne w większości, jeśli nie we wszystkich językach golfa.
Erik the Outgolfer
6

J , 7 bajtów

3#.1+#:

Wypróbuj online!

Dzięki Galen Iwanow za -4 bajty! Naprawdę muszę poprawić swoje umiejętności gry w golfa J ...

użytkownik202729
źródło
1
7 bajtów: 3#.1+#: TIO
Galen Iwanow
Dziękuję również za szablon, potrzebuję czegoś do nauczenia się : 0.
user202729,
Szablon nie jest mój, zapomniałem, kto jest jego autorem.
Galen Iwanow
2
To byłbym ja :)
Conor O'Brien
6

R , 55 43 bajtów

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

Wypróbuj online!

Używa standardowej podstawowej sztuczki konwersji w R, inkrementuje, a następnie używa iloczynu kropkowego z mocami 3konwersji z powrotem na liczbę całkowitą.

Dzięki @ user2390246 za upuszczenie 12 bajtów!

Giuseppe
źródło
Ponieważ konwersja na binarną nie jest końcowym wyjściem, kolejność cyfr nie ma znaczenia. Więc zamiast floor (log (n)): 0 możesz zrobić 0: log (n) i zapisać niektóre bajty: 43 bajty
użytkownik2390246
@ user2390246 oczywiście, dziękuję.
Giuseppe,
6

Java 10, 81 52 bajtów (konwersja podstawowa)

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

Wypróbuj online.

-29 bajtów dzięki @Holger .

Wyjaśnienie:

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 bajtów (sekwencja)

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 bajtów dzięki @ musicman523 , zmiana (int)Math.pow(2,t)na (1<<t).
-1 bajt dzięki @Holger , zmiana (int)(Math.log(n)/Math.log(2))na 31-n.numberOfLeadingZeros(n).

Wypróbuj online.

Wyjaśnienie:

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;}

Kiedy spojrzymy na sekwencję:

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, ...

Widzimy wiele podciągów:

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,  ...

Pytana sekwencja to:

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

Ssę w poszukiwaniu wzorców, więc jestem dumny z tego, co znalazłem powyżej. Powiedziawszy to, @ user202729 znalazł lepsze i krótsze podejście w Javie w ciągu kilku minut ..: '(

Kevin Cruijssen
źródło
Re n.toString(n,2).getBytes()... Myślę, że ręczna konwersja może być krótsza.
user202729,
1
BTW dlaczego longi nie int?
user202729,
1
Myślę, że w wersji sekwencyjnej można zmienić (int)Math.pow(2,t)na 1<<t..., a następnie wstawić to wyrażenie i upuścić zmienną i ( 152 bajty )
musicman523
1
W prawdziwym życiu użyłbym 31-Integer.numberOfLeadingZeros(n)zamiast tego (int)(Math.log(n)/Math.log(2)), ale nie jest on krótszy. Chyba że użyjesz import staticw nagłówku, co może zbytnio rozciągnąć reguły.
Holger
1
Właśnie próbowałem przekonwertować pętlę pierwszego wariantu na rozwiązanie strumieniowe, z sukcesem:n -> n.toString(n,2).chars().reduce(0,(r,c)->r*3+c-47)
Holger
4

Brachylog , 7 bajtów

ḃ+₁ᵐ~ḃ₃

Wypróbuj online!

Wyjaśnienie

Nie to, że naprawdę potrzebujesz, ale…

ḃ            To binary
 +₁ᵐ         Map increment
    ~ḃ₃      From ternary
Fatalizować
źródło
3

Attache , 19 bajtów

FromBase&3@1&`+@Bin

Wypróbuj online!

Jest to kompozycja trzech funkcji:

  • FromBase&3
  • 1&`+
  • Bin

Najpierw konwertuje na binary ( Bin), inkrementuje go ( 1&`+), a następnie konwertuje na ternary ( FromBase&3).

Alternatywy

Bez punktów, 21 bajtów: {FromBase[Bin!_+1,3]}

Bez wbudowanych 57 bajtów: Sum@{_*3^(#_-Iota!_-1)}@{If[_>0,$[_/2|Floor]'(1+_%2),[]]}

Conor O'Brien
źródło
3

Retina 0.8.2 , 36 bajtów

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

Wypróbuj online! Wyjaśnienie:

.+
$*

Konwertuj z dziesiętnego na jednoargumentowy.

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

Kilkakrotnie divmod o 2 i dodaj 1 do wyniku modulo.

^
1

Dodaj również 1 do pierwszej cyfry.

+`1;
;111

Konwertuj z unary-coded base 3 na unary.

1

Konwertuj na dziesiętny.

Neil
źródło
3

Japt , 6 bajtów

¤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.

Pobiera dane wejściowe jako liczbę, zwraca liczbę.

Wypróbuj online!

Gnida
źródło
Cholera! Dlaczego o tym nie pomyślałem? Ładnie wykonane.
Kudłaty
3

MATL , 12 7 6 bajtów

BQ3_ZA

Wypróbuj online!

Zaoszczędzono 5 bajtów dzięki Giuseppe i kolejny dzięki Luisowi Mendo.

Stara 7-bajtowa odpowiedź:

YBQc3ZA

Wypróbuj online!

Wyjaśnienie:

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.

Stary na 12 bajtów:

BQtz:q3w^!Y*

Wypróbuj online!

Ojej, to było niechlujne ... Tak też jest: `BQ3GBn: q ^! Y *.

Wyjaśnienie:

               % 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
źródło
3

C # (kompilator Visual C #) , 128 bajtów

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();}

Wypróbuj online!

Liczę, Systembo używam Converti Math.

Hyarus
źródło
Wybierz daje indeks jako parametr opcjonalny. Abyś mógł pozbyć się swojej zzmiennej. Również w organizmie ekspresji można pozbyć się {, }i returnsprawozdania. Więc coś takiegon=>Convert.ToString(n,2).Reverse().Select((x,i)=>(x-47)*Math.Pow(3,i)).Sum();
NtFreX
2

Python 2 , 56 54 bajtów

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

Wypróbuj online!

ElPedro
źródło
2

C, 32 27 bajtów

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

Na podstawie odpowiedzi Java użytkownika user202729 . Wypróbuj online tutaj . Dzięki Kevin Cruijssen za grę w golfa 5 bajtów.

Wersja bez golfa:

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
źródło
Możesz zapisać 5 bajtów, zastępując returnje x=i odwracając trójskładnik, aby !nie było już konieczne:n(x){x=x?x%2+1+3*n(x/2):0;}
Kevin Cruijssen
@KevinCruijssen Nice. Dzięki!
OOBalance,
2

Łuska , 5 bajtów

B3m→ḋ

Wypróbuj online!

Wyjaśnienie

B3m→ḋ
    ḋ  Convert to base 2
  m→   Map increment
B3     Convert from base 3
Fyr
źródło
2

Oktawa z zestawem narzędzi komunikacyjnych, 33 32 bajty

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

Wypróbuj online!

Konwertuje dane wejściowe na wektor binarny, używając de2bii zwiększając wszystkie liczby. Czy mnożenie macierzy z wektorem pionowym 3 podniesionym do odpowiednich mocy: 1, 3, 9, ...w ten sposób uzyskuje się sumę bez wyraźnego wezwania do sum.

Stewie Griffin
źródło
Chociaż jest to bardzo sprytne, możesz to zrobić również dla 32 bajtów: Wypróbuj online!
Sanchises
A dzięki MATLAB możesz nawet zrobić @(x)base2dec(de2bi(x)+49,3)za 27 (rzadka okazja, gdy MATLAB jest bardziej łagodny niż Octave)
Sanchises
2

PHP, 84 64 bajtów

Wypróbuj online !!

ORYGINALNY Kod

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

Wypróbuj online !!

Dzięki Cristophowi mniej bajtów, jeśli uruchomiono z php -R

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

Wyjaśnienie

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
źródło
Oto, kiedy widzę, że mam luźny sposób na programowanie .... nie miałem pojęcia o istnieniustrtr
Francisco Hahn
1
Zrobię !!, przepraszam<?="Will do!!"
Francisco Hahn
2

CJam , 8 bajtów

ri2b:)3b

Wypróbuj online!

Wyjaśnienie

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
źródło
Trochę mi się podoba :)...
Ian H.,
2

Biała spacja , 117 bajtów

[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]

Litery S(spacja), T(tab) i N(nowa linia) dodane tylko jako wyróżnienia.
[..._some_action]dodano tylko jako wyjaśnienie.

Wypróbuj online (tylko z surowymi spacjami, tabulatorami i nowymi wierszami).

Objaśnienie w pseudo-kodzie:

Najpierw przekonwertowałem funkcję rekurencyjną int f(int n){return n<1?0:n%2+1+3*f(n/2);}na jej iteracyjną formę (w pseudokodzie):

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

Następnie zaimplementowałem to iteracyjne podejście w języku Whitespace opartym na stosie, używając domyślnego stosu.

Przykładowe przebiegi:

Wkład: 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

Wypróbuj online (tylko z surowymi spacjami, tabulatorami i nowymi wierszami).
Zatrzymuje się z błędem: nie zdefiniowano wyjścia.

Wkład: 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

Wypróbuj online (tylko z surowymi spacjami, tabulatorami i nowymi wierszami).
Zatrzymuje się z błędem: nie zdefiniowano wyjścia.

Kevin Cruijssen
źródło
W tym momencie dlaczego nie napisać zestawu? Mam również nieco prostszą metodę iteracyjną w mojej odpowiedzi codegolf.stackexchange.com/a/161833/17360
qwr
Usprawniłem jeszcze mój pseudokod Pythona.
qwr
1
@qwr Kod Python jest prawie taki sam jak wyświetlany kod Java. Java jest po prostu bardziej gadatliwa i podatna na błędy. Jedyna różnica polega na tym, że mój kod Java jest zagnieżdżoną pętlą while, a twój jest oddzielony. Mógłbym to zrobić również w Javie, ale ponieważ jest zagnieżdżony w Whitespace, postanowiłem zapisać go jako taki również w pseudokodzie Java. Poza tym Whitespace nie ma możliwości sprawdzenia liczby przedmiotów pozostałych na stosie, dlatego na początku wciskam 0, aw części kodu INNER_LOOP: zamień, sprawdź, czy 0, zamień z powrotem. Jednak fajna odpowiedź Zgromadzenia. Więc dałem +1. :)
Kevin Cruijssen
Nadal uważam, że możesz pozbyć się n < 1kontroli, przesuwając wartości, aż n wyniesie 0, a następnie przesuwając je, aż osiągniesz wartość graniczną (0). Głębokość stosu nie musi być zapisywana jawnie i nie powinno nawet być potrzeby zamiany (jeśli masz na myśli zamianę dwóch najwyższych wartości jak w lisp)
qwr 10.04.18
@qwr " Nadal uważam, że możesz pozbyć się kontroli n <1, pchając wartości, aż n wyniesie 0 " Umm .. sprawdzam, czy n < 1(lub n == 0) pcha wartości, dopóki nnie wyniesie 0 .. Czy też źle coś interpretuję tutaj: S „ Głębokość stosu nie musi być zapisywana jawnie ” W Javie tak, inaczej nie mogę utworzyć tablicy. Mógłbym java.util.Stackzamiast tego użyć , ale po prostu użyłem tablicy, aby była mniej gadatliwa. W przypadku białych znaków stos ma nieokreślony rozmiar.
Kevin Cruijssen
2

Brain-Flak , 74 bajty

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

Wypróbuj online!

Wersja „czytelna”

({<>(())<>
  ({
    <({}[()])>
    <>
    ([{}]())
    <>
  })
}
# At this point we have a inverted binary string on the stack
(<>)
)
{
  {}
  (
    (({})()){}{}[{}]
  )
  ([][()])
}{}
MegaTom
źródło
-2 bajty
Jo King
1

Pyth, 8

ihMjQ2 3

Jak wyeliminować przestrzeń i zrobić coś Qniejawnego?

Pyth online .

Cyfrowa trauma
źródło
Wierzę, że jest to w rzeczywistości 8 bajtów
hakr14
@ hakr14 Tak, masz rację
Digital Trauma
Jak wyeliminować przestrzeń i zrobić coś Qniejawnego? Nie sądzę, że możesz.
Erik the Outgolfer