Pergi bit!

26

Diberikan integer N lakukan langkah-langkah berikut: (menggunakan 9 sebagai contoh).

  1. Terima input N. ( 9)
  2. Ubah N dari base10 ke base2. ( 1001)
  3. Tambah setiap bit sebanyak 1. ( 2112)
  4. Perlakukan hasilnya sebagai base3 dan ubah kembali ke base10. ( 68)
  5. Kembali / Keluarkan hasilnya.

Memasukkan

Dapat diterima dalam format angka apa pun.
Anda hanya perlu menangani case di mana N> 0.


Keluaran

Baik kembali sebagai angka atau string, atau dicetak ke stdout.


Aturan

  • Ini adalah , kode terpendek dalam byte yang menang.
  • Celah default dilarang.

Uji Kasus

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

Jawaban:

15

Python 2 , 31 byte

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

Cobalah online!

Dennis
sumber
3
Bisakah Anda menjelaskan cara kerjanya?
+n%2+1menambahkan bit biner paling kanan plus 1 ke nilai balik, n/2menggeser-kanan n1 bit biner, 3*f(n/2)secara rekursif menambahkan 3 kali perhitungan ini pada bit-bit yang bergeser kanan, dan n andmengakhiri rekursi ketika n0
Noodle9
11

JavaScript (Node.js) , 23 byte

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

Cobalah online!

l4m2
sumber
x>>1sama seperti x/2bukan?
mbomb007
@ mbomb007 Saya pikir dan menyarankan hal yang sama dulu, tetapi ternyata itu menjadi Infinitydi JS .. Coba online. (Anda mungkin ingin menambahkan tautan TIO untuk jawaban Anda, I4m2 )
Kevin Cruijssen
2
@ mbomb007 No. 1>>1=0sambil1/2=0.5
l4m2
4
@ mbomb007 ... Python?
user202729
2
Ya. Lihatlah jawaban Python. Itulah alasannya n/2, dan alasan saya menyarankannya di sini.
mbomb007
9

Java (JDK 10) , 44 byte

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

Cobalah online!

pengguna202729
sumber
1
Mungkin -~akan membantu?
user202729
2
Tidak, aturan diutamakan.
user202729
Pertanyaan yang sama bagi Anda: mengapa long? :) Dan di sini saya pikir pendekatan urutan saya cerdas .. Anda gagal keluar dari taman dalam waktu kurang dari 5 menit ..>.>: '(
Kevin Cruijssen
@KevinCruijssen Agar adil dengan Anda ...
user202729
6

Jelly , 4 byte

B‘ḅ3

Cobalah online!

Erik the Outgolfer
sumber
Biner, Penambahan, Ke-pangkalan, 3. Itu benar-benar semua yang perlu dikatakan.
Adám
2
@ Adám Secara teknis itu Dari -base, tapi ya, ini sepele di sebagian besar, jika tidak semua, bahasa golf.
Erik the Outgolfer
6

J , 7 byte

3#.1+#:

Cobalah online!

Terima kasih Galen Ivanov untuk -4 byte! Saya benar-benar perlu meningkatkan keterampilan J golf saya ...

pengguna202729
sumber
1
7 byte: 3#.1+#: TIO
Galen Ivanov
Terima kasih juga untuk templatnya, saya perlu sesuatu untuk dipelajari : 0.
user202729
Template itu bukan milik saya, saya lupa siapa pembuatnya.
Galen Ivanov
2
Itu pasti saya :)
Conor O'Brien
6

R , 55 43 byte

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

Cobalah online!

Menggunakan trik konversi basis standar di R, kenaikan, dan kemudian menggunakan produk titik dengan kekuatan 3untuk mengkonversi kembali ke integer.

Terima kasih kepada @ user2390246 karena telah menjatuhkan 12 byte!

Giuseppe
sumber
Karena konversi ke biner bukan hasil akhir, urutan digit tidak masalah. Jadi, alih-alih lantai (log (n)): 0 Anda dapat melakukan 0: log (n) dan menyimpan beberapa byte: 43 byte
user2390246
@ user2390246 tentu saja, terima kasih.
Giuseppe
6

Java 10, 81 52 byte (Konversi basis)

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

Cobalah online.

-29 byte terima kasih kepada @ Holger .

Penjelasan:

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 byte (Urutan)

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 byte terima kasih kepada @ musicman523 , ubah (int)Math.pow(2,t)menjadi (1<<t).
-1 byte terima kasih kepada @ Holger , ubah (int)(Math.log(n)/Math.log(2))ke 31-n.numberOfLeadingZeros(n).

Cobalah online.

Penjelasan:

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

Ketika kita melihat urutannya:

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

Kita dapat melihat banyak bagian:

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

Jadi urutan yang ditanyakan adalah:

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

Saya payah menemukan pola, jadi saya bangga dengan apa yang saya temukan di atas .. Karena itu, @ user202729 menemukan pendekatan yang lebih baik dan lebih pendek di Jawa dalam beberapa menit ..: '(

Kevin Cruijssen
sumber
Re n.toString(n,2).getBytes()... Saya pikir konversi manual mungkin lebih pendek.
user202729
1
BTW kenapa longdan tidak int?
user202729
1
Saya pikir dalam versi urutan Anda dapat mengubah (int)Math.pow(2,t)untuk 1<<t... dan kemudian sebariskan ekspresi itu dan drop variabel i ( 152 bytes )
musicman523
1
Dalam kehidupan nyata, saya akan menggunakan 31-Integer.numberOfLeadingZeros(n)sebagai gantinya (int)(Math.log(n)/Math.log(2)), tapi itu tidak lebih pendek. Kecuali Anda menggunakan import staticdi header, yang mungkin meregangkan aturan terlalu jauh.
Holger
1
Saya baru saja mencoba mengubah varian pertama Anda menjadi solusi aliran, dengan sukses:n -> n.toString(n,2).chars().reduce(0,(r,c)->r*3+c-47)
Holger
4

Brachylog , 7 byte

ḃ+₁ᵐ~ḃ₃

Cobalah online!

Penjelasan

Bukan berarti Anda benar-benar membutuhkannya, tapi ...

ḃ            To binary
 +₁ᵐ         Map increment
    ~ḃ₃      From ternary
Fatalisasi
sumber
3

Python 2 , 56 55 byte

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

Cobalah online!

TFeld
sumber
3

Attache , 19 byte

FromBase&3@1&`+@Bin

Cobalah online!

Ini adalah komposisi dari tiga fungsi:

  • FromBase&3
  • 1&`+
  • Bin

Ini pertama-tama mengonversi menjadi binary ( Bin), menambahkannya ( 1&`+), kemudian mengubahnya menjadi ternary (FromBase&3 ).

Alternatif

Non-pointfree, 21 byte: {FromBase[Bin!_+1,3]}

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

Conor O'Brien
sumber
3

Retina 0.8.2 , 36 byte

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

Cobalah online! Penjelasan:

.+
$*

Konversi dari desimal ke unary.

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

Divmod berulang kali dengan 2, dan tambahkan 1 ke hasil modulo.

^
1

Tambahkan 1 ke digit pertama juga.

+`1;
;111

Konversi dari basis 3 tanpa kode ke basis unary.

1

Konversikan ke desimal.

Neil
sumber
3

Japt , 6 byte

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

Mengambil input sebagai angka, menghasilkan angka.

Cobalah online!

Nit
sumber
Sial! Kenapa aku tidak memikirkan itu? Bagus sekali.
Shaggy
3

MATL , 12 7 6 byte

BQ3_ZA

Cobalah online!

Disimpan 5 byte berkat Giuseppe dan satu lagi berkat Luis Mendo.

Jawaban 7 byte lama:

YBQc3ZA

Cobalah online!

Penjelasan:

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.

Yang lama untuk 12 byte:

BQtz:q3w^!Y*

Cobalah online!

Ya ampun, itu berantakan ... Jadi ini: `BQ3GBn: q ^! Y *.

Penjelasan:

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

Cobalah online!

Saya menghitung Systemkarena saya menggunakan Convertdan Math.

Hyarus
sumber
Pilih memberi Anda indeks sebagai parameter opsional. Jadi Anda bisa menyingkirkan zvariabel Anda . Juga di tubuh ekspresi Anda bisa menghilangkan {, }dan returnpernyataan. Jadi sesuatu seperti inin=>Convert.ToString(n,2).Reverse().Select((x,i)=>(x-47)*Math.Pow(3,i)).Sum();
NtFreX
2

Python 2 , 56 54 byte

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

Cobalah online!

ElPedro
sumber
2

C, 32 27 byte

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

Berdasarkan jawaban Java user202729 . Cobalah online di sini . Terima kasih kepada Kevin Cruijssen untuk bermain golf 5 byte.

Versi tidak disatukan:

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
}
Ketidakseimbangan
sumber
Anda dapat menyimpan 5 byte dengan mengganti returndengan x=dan membalikkan terner sehingga !tidak lagi diperlukan:n(x){x=x?x%2+1+3*n(x/2):0;}
Kevin Cruijssen
@KevinCruijssen Bagus. Terima kasih!
OOBalance
2

Sekam , 5 byte

B3m→ḋ

Cobalah online!

Penjelasan

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

Oktaf dengan kotak alat komunikasi, 33 32 byte

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

Cobalah online!

Mengonversi input ke vektor biner menggunakan de2bi, dan menambah semua angka. Apakah perkalian matriks dengan vektor vertikal 3 dinaikkan ke kekuatan yang sesuai:, 1, 3, 9, ...sehingga mendapatkan jumlah tanpa panggilan eksplisit untuk sum.

Stewie Griffin
sumber
Meskipun ini sangat pintar, Anda juga dapat melakukan ini selama 32 byte: Cobalah online!
Sanchises
Dan dengan MATLAB Anda bahkan dapat melakukannya @(x)base2dec(de2bi(x)+49,3)selama 27 (kesempatan langka di mana MATLAB lebih lunak daripada Oktaf)
Sanchises
2

PHP, 84 64 Bytes

Cobalah online !!

Kode ASLI

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

Cobalah online !!

Berkat Cristoph , lebih sedikit byte jika dijalankan dengan php -R

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

Penjelasan

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
sumber
Di sinilah ketika saya melihat saya punya cara untuk pergi pada pemrograman .... tidak tahu tentang keberadaanstrtr
Francisco Hahn
1
Akan lakukan !!, maaf<?="Will do!!"
Francisco Hahn
2

CJam , 8 byte

ri2b:)3b

Cobalah online!

Penjelasan

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
sumber
Saya agak suka :)..
Ian H.
2

Ruang putih , 117 byte

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

Huruf S(spasi), T(tab), dan N(baris baru) ditambahkan hanya sebagai penyorotan.
[..._some_action]ditambahkan sebagai penjelasan saja.

Cobalah online (dengan spasi, tab, dan hanya baris baru).

Penjelasan dalam pseudo-code:

Saya pertama-tama mengonversi fungsi rekursif int f(int n){return n<1?0:n%2+1+3*f(n/2);}ke bentuk berulang (dalam pseudo-code):

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

Dan saya kemudian menerapkan pendekatan berulang ini di Whitespace bahasa berbasis stack, menggunakan stack default itu.

Contoh berjalan:

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

Cobalah online (dengan spasi, tab, dan hanya baris baru).
Berhenti dengan kesalahan: Keluar tidak ditentukan.

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

Cobalah online (dengan spasi, tab, dan hanya baris baru).
Berhenti dengan kesalahan: Keluar tidak ditentukan.

Kevin Cruijssen
sumber
Pada titik ini, mengapa tidak menulis rakitan? Saya juga memiliki metode iteratif yang sedikit lebih sederhana dalam jawaban saya codegolf.stackexchange.com/a/161833/17360
qwr
Saya telah menyederhanakan kode python saya lebih jauh.
qwr
1
@ qwr Kode Python Anda hampir sama dengan kode Java yang ditampilkan. Java hanya lebih verbose dan rawan kesalahan. Satu-satunya perbedaan adalah bahwa kode Java saya adalah loop sementara bersarang, dan kode Anda terpisah. Saya bisa melakukannya juga di Jawa, tetapi karena itu bersarang di Whitespace, saya memilih untuk menulisnya di Java pseudo-code juga. Juga, Whitespace tidak memiliki cara untuk mengetahui jumlah item yang tersisa di tumpukan, itulah sebabnya saya mendorong 0 di awal, dan di bagian INNER_LOOP kode lakukan: swap, periksa apakah 0, swap kembali. Jawaban Majelis yang bagus. Jadi saya sudah memberi +1 pada itu. :)
Kevin Cruijssen
Saya masih berpikir Anda dapat menyingkirkan n < 1cek dengan mendorong nilai sampai n adalah 0 dan kemudian muncul sampai Anda mencapai nilai batas Anda (0). Kedalaman tumpukan tidak perlu disimpan secara eksplisit dan bahkan tidak perlu bertukar (jika Anda maksud menukar dua nilai teratas seperti di
lisp
@ qwr " Saya masih berpikir Anda bisa menghilangkan n <1 cek dengan mendorong nilai sampai n adalah 0 " Umm .. memeriksa apakah n < 1(atau n == 0) IS mendorong nilai sampai n0 .. Atau saya salah mengartikan sesuatu di sini ..: S " Kedalaman tumpukan tidak perlu disimpan secara eksplisit " Di Jawa itu, jika tidak saya tidak bisa membuat array. Saya bisa menggunakan, sebagai java.util.Stackgantinya, tapi saya hanya menggunakan array untuk membuatnya kurang bertele-tele. Di Whitespace tumpukan adalah ukuran yang tidak ditentukan.
Kevin Cruijssen
2

Brain-Flak , 74 byte

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

Cobalah online!

Versi "Dapat dibaca"

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

Pyth, 8

ihMjQ2 3

Cara menghilangkan ruang dan membuat Q tersirat?

Pyth online .

Trauma Digital
sumber
Saya percaya ini sebenarnya 8 byte
hakr14
@ hakr14 Ya, Anda benar
Digital Trauma
Bagaimana cara menghilangkan ruang dan membuat yang Qtersirat? Saya pikir kamu tidak bisa.
Erik the Outgolfer