Auf geht's!

26

Wenn eine ganze Zahl N gegeben ist, führen Sie die folgenden Schritte aus: (am Beispiel von 9).

  1. Eingang N erhalten. ( 9)
  2. Konvertiere N von base10 nach base2. ( 1001)
  3. Erhöhen Sie jedes Bit um 1. ( 2112)
  4. Behandle das Ergebnis als base3 und konvertiere es zurück in base10. ( 68)
  5. Ergebnis zurückgeben / ausgeben.

Eingang

Kann in jedem vernünftigen Zahlenformat empfangen werden.
Sie müssen nur Fälle behandeln, in denen N> 0 ist.


Ausgabe

Entweder als Zahl oder als Zeichenfolge zurückgeben oder auf drucken stdout.


Regeln

  • Dies ist , der kürzeste Code in Bytes gewinnt.
  • Standardlücken sind verboten.

Testfälle

1 -> 2
2 -> 7
5 -> 23
9 -> 68
10 -> 70
20 -> 211
1235 -> 150623
93825 -> 114252161
Ian H.
quelle

Antworten:

15

Python 2 , 31 Bytes

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

Probieren Sie es online!

Dennis
quelle
3
Können Sie erklären, wie das funktioniert?
+n%2+1Addiert das am weitesten rechts stehende Binärbit plus 1 zum Rückgabewert, n/2verschiebt es nnach rechts um 1 Binärbit, 3*f(n/2)addiert rekursiv das Dreifache dieser Berechnung für diese nach rechts verschobenen Bits und n andbeendet die Rekursion, wenn n0
Noodle9
11

JavaScript (Node.js) , 23 Byte

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

Probieren Sie es online!

l4m2
quelle
x>>1ist das gleiche wie x/2nicht?
mbomb007
@ mbomb007 Ich dachte und schlug dasselbe gerade noch vor, aber anscheinend wird es Infinityin JS .. Probiere es online aus. (Vielleicht möchten Sie Ihrer Antwort einen TIO-Link hinzufügen, I4m2 )
Kevin Cruijssen
2
@ mbomb007 Nein. 1>>1=0while1/2=0.5
l4m2
4
@ mbomb007 ... Python?
user202729
2
Ja. Schauen Sie sich die Python-Antwort an. Das ist der Grund, warum n/2das so ist, und der Grund, warum ich es hier vorgeschlagen habe.
mbomb007
9

Java (JDK 10) , 44 Byte

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

Probieren Sie es online!

user202729
quelle
1
Vielleicht -~hilft?
user202729
2
Nein, Vorrangregeln.
user202729
Gleiche Frage an Sie: Warum long? :) Und hier dachte ich, mein Sequenzansatz wäre klug. Du hast ihn in weniger als 5 Minuten aus dem Park
gesprengt
@ KevinCruijssen Um fair mit Ihnen zu sein ...
user202729
6

Gelee , 4 Bytes

B‘ḅ3

Probieren Sie es online!

Erik der Outgolfer
quelle
Binary, Increment, To-Base, 3. Das ist wirklich alles, was gesagt werden muss.
Adám
2
@Adám Technisch gesehen ist das von -base, aber ja, das ist in den meisten, wenn nicht allen, Golfsprachen trivial.
Erik der Outgolfer
6

J , 7 Bytes

3#.1+#:

Probieren Sie es online!

Danke Galen Ivanov für -4 Bytes! Ich muss wirklich meine J-Golf-Fähigkeiten verbessern ...

user202729
quelle
1
7 Bytes: 3#.1+#: TIO
Galen Ivanov
Auch danke für die Vorlage, ich brauche etwas zu lernen : 0.
user202729
Die Vorlage ist nicht meine, ich habe vergessen, wer der Autor ist.
Galen Ivanov
2
Das wäre ich :)
Conor O'Brien
6

R , 55 43 Bytes

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

Probieren Sie es online!

Verwendet den Standard-Basiskonvertierungstrick in R-Schritten und verwendet dann ein Skalarprodukt mit Potenzen von 3, um zurück in eine Ganzzahl zu konvertieren.

Vielen Dank an @ user2390246 für das Löschen von 12 Bytes!

Giuseppe
quelle
Da die Konvertierung in eine Binärdatei nicht die endgültige Ausgabe ist, spielt die Reihenfolge der Ziffern keine Rolle. Anstelle von floor (log (n)): 0 können Sie also 0: log (n)
ausführen
@ user2390246 natürlich danke.
Giuseppe
6

Java 10, 81 52 Bytes (Basisumwandlung)

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

Probieren Sie es online aus.

-29 Bytes dank @Holger .

Erläuterung:

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 (Sequenz)

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 dank @ musicman523 , wechsel(int)Math.pow(2,t) zu (1<<t).
-1 Byte dank @Holger , wechselt (int)(Math.log(n)/Math.log(2))zu 31-n.numberOfLeadingZeros(n).

Probieren Sie es online aus.

Erläuterung:

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

Wenn wir uns die Sequenz ansehen:

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

Wir können mehrere Untersequenzen sehen:

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

Die Reihenfolge, in der gefragt wird, lautet also:

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

Ich finde es nicht gut, Muster zu finden, also bin ich stolz auf das, was ich oben gefunden habe. Allerdings fand @ user202729 innerhalb weniger Minuten einen besseren und kürzeren Ansatz in Java .

Kevin Cruijssen
quelle
Re n.toString(n,2).getBytes()... Ich denke, die manuelle Konvertierung kann kürzer sein.
user202729
1
BTW warum longund nicht int?
user202729
1
Ich denke, in der Sequenz-Version kann man (int)Math.pow(2,t)für 1<<t...
auswechseln
1
Im wirklichen Leben würde ich 31-Integer.numberOfLeadingZeros(n)anstatt verwenden (int)(Math.log(n)/Math.log(2)), aber es ist nicht kürzer. Es sei denn, Sie verwenden import staticin der Kopfzeile, was die Regeln zu weit strecken könnte.
Holger
1
Ich habe gerade versucht, die Schleife Ihrer ersten Variante in eine Stream-Lösung umzuwandeln, mit Erfolg:n -> n.toString(n,2).chars().reduce(0,(r,c)->r*3+c-47)
Holger,
4

Brachylog , 7 Bytes

ḃ+₁ᵐ~ḃ₃

Probieren Sie es online!

Erläuterung

Nicht dass du wirklich einen brauchst, aber ...

ḃ            To binary
 +₁ᵐ         Map increment
    ~ḃ₃      From ternary
Tödlich
quelle
3

Attache , 19 Bytes

FromBase&3@1&`+@Bin

Probieren Sie es online!

Dies ist eine Komposition aus drei Funktionen:

  • FromBase&3
  • 1&`+
  • Bin

Dieser konvertiert zuerst nach binary ( Bin), inkrementiert es ( 1&`+) und konvertiert dann nach ternary ( FromBase&3).

Alternativen

Nicht punktfrei, 21 Bytes: {FromBase[Bin!_+1,3]}

Ohne Builtins, 57 Bytes: Sum@{_*3^(#_-Iota!_-1)}@{If[_>0,$[_/2|Floor]'(1+_%2),[]]}

Conor O'Brien
quelle
3

Retina 0,8,2 , 36 Bytes

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

Probieren Sie es online! Erläuterung:

.+
$*

Konvertiert von dezimal zu unär.

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

Wiederholt divmod durch 2 und addiere 1 zum Ergebnis des Modulos.

^
1

Addiere auch 1 zur ersten Ziffer.

+`1;
;111

Konvertiert von unärkodierter Basis 3 nach unärkodiert.

1

In Dezimalzahl konvertieren.

Neil
quelle
3

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

Nimmt Eingaben als Zahl und gibt eine Zahl aus.

Probieren Sie es online!

Nit
quelle
Verdammt! Warum habe ich nicht daran gedacht? Schön gemacht.
Shaggy
3

MATL , 12 7 6 Bytes

BQ3_ZA

Probieren Sie es online!

Gespeichert 5 Bytes dank Giuseppe und einen anderen dank Luis Mendo.

Alte 7-Byte-Antwort:

YBQc3ZA

Probieren Sie es online!

Erläuterung:

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.

Altes für 12 Bytes:

BQtz:q3w^!Y*

Probieren Sie es online!

Oh mein Gott, das war chaotisch ... Also ist dies: `BQ3GBn: q ^! Y *.

Erläuterung:

               % 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
quelle
3

C # (Visual C # -Compiler) , 128 Byte

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

Probieren Sie es online!

Ich zähle, Systemweil ich Convertund benutze Math.

Hyarus
quelle
Select gibt Ihnen den Index als optionalen Parameter. So können Sie Ihre zVariable loswerden . Auch im Ausdruck Körper könnten Sie loswerden der {, }und returnAussagen. So etwas in der Artn=>Convert.ToString(n,2).Reverse().Select((x,i)=>(x-47)*Math.Pow(3,i)).Sum();
NtFreX
2

C 32 27 Bytes

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

Basierend auf der Java- Antwort von user202729 . Probieren Sie es hier online aus . Vielen Dank an Kevin Cruijssen für das Golfen mit 5 Bytes.

Ungolfed-Version:

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
quelle
Sie können 5 Bytes speichern , indem der Austausch returnmit x=und Umkehr des ternären so das !ist nicht mehr notwendig:n(x){x=x?x%2+1+3*n(x/2):0;}
Kevin Cruijssen
@ KevinCruijssen Schön. Vielen Dank!
OOBalance
2

Schale , 5 Bytes

B3m→ḋ

Probieren Sie es online!

Erläuterung

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

Oktave mit der Kommunikations-Toolbox, 33 32 Bytes

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

Probieren Sie es online!

Konvertiert die Eingabe mit de2biund inkrementiert alle Zahlen in einen binären Vektor . Wird die Matrixmultiplikation mit einem vertikalen Vektor von 3 auf die entsprechenden Potenzen angehoben: 1, 3, 9, ...und damit die Summe ohne expliziten Aufruf von sum.

Stewie Griffin
quelle
Dies ist zwar äußerst clever, aber Sie können dies auch für 32 Bytes tun: Probieren Sie es online aus!
Sanchises
Und mit MATLAB können Sie sogar @(x)base2dec(de2bi(x)+49,3)27 machen (eine seltene Gelegenheit, in der MATLAB milder ist als Octave)
Sanchises
2

PHP, 84 64 Bytes

Probieren Sie es online!

ORIGINAL Code

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

Probieren Sie es online!

Dank Cristoph , weniger Bytes, wenn mit PHP-R ausgeführt

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

Erläuterung

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
quelle
Hier ist, wenn ich sehe, dass ich eine loooogne Art zu programmieren habe ... ich hatte keine Ahnung von der Existenz vonstrtr
Francisco Hahn
1
Will do !!, sorry<?="Will do!!"
Francisco Hahn
2

CJam , 8 Bytes

ri2b:)3b

Probieren Sie es online!

Erläuterung

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
quelle
Ich mag ein bisschen die :)..
Ian H.
2

Leerzeichen , 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]

Buchstaben S(Leerzeichen), T(Tabulator) und (Zeilenvorschub) werden Nnur als Hervorhebungen hinzugefügt.
[..._some_action]nur als Erklärung hinzugefügt.

Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).

Erklärung im Pseudocode:

Ich habe zuerst die rekursive Funktion int f(int n){return n<1?0:n%2+1+3*f(n/2);}in ihre iterative Form (in Pseudocode) konvertiert :

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

Und dann habe ich diesen iterativen Ansatz in der stapelbasierten Sprache Whitespace implementiert und dabei den Standardstapel verwendet.

Beispiel läuft:

Eingang: 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

Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).
Stopps mit Fehler: Exit nicht definiert.

Eingang: 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

Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).
Stopps mit Fehler: Exit nicht definiert.

Kevin Cruijssen
quelle
Warum schreiben Sie an dieser Stelle nicht die Assembly? Außerdem habe ich in meiner Antwort codegolf.stackexchange.com/a/161833/17360
qwr
Ich habe meinen Python-Pseudocode weiter vereinfacht.
QWR
1
@qwr Ihr Python-Code entspricht fast dem angezeigten Java-Code. Java ist nur ausführlicher und fehleranfälliger. Der einzige Unterschied ist, dass mein Java-Code eine verschachtelte while-Schleife ist und Ihre getrennt ist. Ich könnte das auch in Java tun, aber da es in Whitespace verschachtelt ist, habe ich beschlossen, es als solches auch im Java-Pseudocode zu schreiben. Außerdem hat Whitespace keine Möglichkeit, die Anzahl der auf dem Stapel verbleibenden Elemente zu ermitteln. Aus diesem Grund drücke ich am Anfang die 0, und im INNER_LOOP-Teil des Codes wird Folgendes ausgeführt: Swap, check if 0, Swap back. Eine nette Antwort der Versammlung. Ich habe es also +1 gegeben. :)
Kevin Cruijssen
Ich denke immer noch, dass Sie den n < 1Scheck loswerden können, indem Sie Werte drücken, bis n 0 ist, und sie dann platzen, bis Sie Ihren Grenzwert (0) erreichen. Die Stapeltiefe muss nicht explizit gespeichert werden, und es sollte nicht einmal ein Tausch erforderlich sein (wenn Sie die oberen beiden Werte wie in
lisp
@qwr „ Ich denke immer noch , können Sie von der n <1 check loszuwerden , indem Werte drücken , bis n = 0 “ Umm .. Prüfen , ob n < 1(oder n == 0) IS - Werte drücken , bis n0 .. Oder bin ich etwas falsch interpretiert hier ..: S " Die Stapeltiefe muss nicht explizit gespeichert werden " In Java, sonst kann ich das Array nicht erstellen. Ich hätte java.util.Stackstattdessen a verwenden können, aber ich habe nur ein Array verwendet, um es weniger ausführlich zu gestalten. In Whitespace hat der Stapel eine undefinierte Größe.
Kevin Cruijssen
2

Brain-Flak , 74 Bytes

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

Probieren Sie es online!

"Lesbare" Version

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

Pyth, 8

ihMjQ2 3

Wie man den Raum beseitigt und das Qimplizite macht?

Pyth online .

Digitales Trauma
quelle
Ich glaube, das ist eigentlich 8 Bytes
Hakr14
@ hakr14 Ja, Sie haben Recht
Digital Trauma
Wie man den Raum beseitigt und das Qimplizite macht? Ich glaube nicht, dass du kannst.
Erik der Outgolfer