Lên đi các bit!


26

Cho một số nguyên N thực hiện các bước sau: (sử dụng 9 làm ví dụ).

  1. Nhận đầu vào N. ( 9)
  2. Chuyển đổi N từ cơ sở 10 sang cơ sở2. ( 1001)
  3. Tăng mỗi bit lên 1. ( 2112)
  4. Coi kết quả là base3 và chuyển nó trở lại base10. ( 68)
  5. Trả về / Xuất kết quả.

Đầu vào

Có thể được nhận trong bất kỳ định dạng số hợp lý.
Bạn chỉ cần xử lý các trường hợp N> 0.


Đầu ra

Hoặc trả về dưới dạng số hoặc chuỗi hoặc in ra stdout.


Quy tắc

  • Đây là , mã ngắn nhất tính bằng byte thắng.
  • Lỗ hổng mặc định bị cấm.

Các trường hợp thử nghiệm

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

Câu trả lời:


15

Python 2 , 31 byte

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

Hãy thử trực tuyến!


3
Bạn có thể giải thích làm thế nào điều này hoạt động?

+n%2+1thêm bit nhị phân ngoài cùng bên phải cộng 1 vào giá trị trả về, n/2dịch chuyển sang nphải 1 bit nhị phân, 3*f(n/2)đệ quy thêm 3 lần tính toán này trên các bit dịch chuyển phải và n andkết thúc đệ quy khi n0
Noodle9

11

JavaScript (Node.js) , 23 byte

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

Hãy thử trực tuyến!


x>>1Có giống như x/2không?
mbomb007

@ mbomb007 Tôi đã nghĩ và đề nghị tương tự như vậy, nhưng dường như nó trở thành Infinitytrong JS .. Hãy thử trực tuyến. (Bạn có thể muốn thêm liên kết TIO cho câu trả lời của mình, I4m2 )
Kevin Cruijssen

2
@ mbomb007 Số 1>>1=0trong khi1/2=0.5
l4m2

4
@ mbomb007 ... Con trăn?
dùng202729

2
Vâng. Nhìn vào câu trả lời của Python. Đó là lý do n/2hoạt động trong đó, và lý do tôi đề nghị nó ở đây.
mbomb007

9

Java (JDK 10) , 44 byte

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

Hãy thử trực tuyến!


1
Có lẽ -~sẽ giúp?
dùng202729

2
Không, quy tắc ưu tiên.
dùng202729

Câu hỏi tương tự với bạn: tại sao long? :) Và ở đây tôi nghĩ cách tiếp cận trình tự của tôi là thông minh .. Bạn đã thổi nó ra khỏi công viên trong vòng chưa đầy 5 phút ..>.>: '(
Kevin Cruijssen

@KevinCruijssen Công bằng với bạn ...
user202729



6

R , 55 43 byte

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

Hãy thử trực tuyến!

Sử dụng thủ thuật chuyển đổi cơ sở tiêu chuẩn theo R, gia số và sau đó sử dụng một sản phẩm chấm có quyền hạn 3để chuyển đổi trở lại thành một số nguyên.

Cảm ơn @ user2390246 vì đã giảm 12 byte!


Bởi vì việc chuyển đổi thành nhị phân không phải là đầu ra cuối cùng, nên thứ tự của các chữ số không thành vấn đề. Vì vậy, thay vì sàn (log (n)): 0 bạn có thể thực hiện 0: log (n) và lưu một số byte: 43 byte
user2390246

@ user2390246 tất nhiên, cảm ơn bạn.
Giuseppe


6

Java 10, 81 52 byte (Chuyển đổi cơ sở)

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

Hãy thử trực tuyến.

-29 byte nhờ @Holger .

Giải trình:

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 (Trình tự)

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 nhờ @ musicman523 , đổi (int)Math.pow(2,t)thành (1<<t).
-1 byte nhờ @Holger , đổi (int)(Math.log(n)/Math.log(2))thành 31-n.numberOfLeadingZeros(n).

Hãy thử trực tuyến.

Giải trình:

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

Khi chúng ta nhìn vào chuỗi:

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

Chúng ta có thể thấy nhiều phần sau:

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

Vì vậy, chuỗi được hỏi là:

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

Tôi rất thích tìm kiếm các mẫu, vì vậy tôi tự hào về những gì tôi đã tìm thấy ở trên .. Phải nói rằng, @ user202729 đã tìm thấy một cách tiếp cận tốt hơn và ngắn hơn trong Java trong vài phút ..: '(


Re n.toString(n,2).getBytes()... Tôi nghĩ chuyển đổi thủ công có thể ngắn hơn.
dùng202729

1
BTW tại sao longvà không int?
dùng202729

1
Tôi nghĩ rằng trong phiên bản trình tự, bạn có thể thay đổi ra (int)Math.pow(2,t)cho 1<<t... và sau đó inline rằng biểu hiện và thả các biến i ( 152 byte )
musicman523

1
Trong cuộc sống thực, tôi sẽ sử dụng 31-Integer.numberOfLeadingZeros(n)thay vì (int)(Math.log(n)/Math.log(2)), nhưng nó không ngắn hơn. Trừ khi bạn sử dụng import statictrong tiêu đề, có thể kéo dài các quy tắc quá xa.
Holger

1
Tôi vừa thử chuyển đổi vòng lặp biến thể đầu tiên của bạn thành giải pháp truyền phát, với thành công:n -> n.toString(n,2).chars().reduce(0,(r,c)->r*3+c-47)
Holger





3

Tùy viên , 19 byte

FromBase&3@1&`+@Bin

Hãy thử trực tuyến!

Đây là một thành phần của ba chức năng:

  • FromBase&3
  • 1&`+
  • Bin

Điều này đầu tiên chuyển đổi thành nhị phân ( Bin), tăng nó ( 1&`+), sau đó chuyển đổi thành ternary (FromBase&3 ).

Lựa chọn thay thế

Không có điểm, 21 byte: {FromBase[Bin!_+1,3]}

Không có nội dung, 57 byte: Sum@{_*3^(#_-Iota!_-1)}@{If[_>0,$[_/2|Floor]'(1+_%2),[]]}


3

Võng mạc 0.8.2 , 36 byte

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

Hãy thử trực tuyến! Giải trình:

.+
$*

Chuyển đổi từ số thập phân sang đơn nguyên.

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

Lặp lại divmod bằng 2 và thêm 1 vào kết quả của modulo.

^
1

Thêm 1 vào chữ số đầu tiên.

+`1;
;111

Chuyển đổi từ cơ sở 3 được mã hóa thành unary.

1

Chuyển đổi thành số thập phân.


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.

Lấy đầu vào là một số, xuất ra một số.

Hãy thử trực tuyến!


Chết tiệt! Tại sao tôi không nghĩ về điều đó? Hoàn thành tốt
Shaggy

3

MATL , 12 7 6 byte

BQ3_ZA

Hãy thử trực tuyến!

Đã lưu 5 byte nhờ Giuseppe và một byte khác nhờ Luis Mendo.

Câu trả lời cũ 7 byte:

YBQc3ZA

Hãy thử trực tuyến!

Giải trình:

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.

Một cái cũ cho 12 byte:

BQtz:q3w^!Y*

Hãy thử trực tuyến!

Ôi trời, thật là bừa bộn ... Đây là: `BQ3GBn: q ^! Y *.

Giải trình:

               % 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

3

C # (Trình biên dịch C # trực quan) , 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();}

Hãy thử trực tuyến!

Tôi đang đếm Systemvì tôi sử dụng ConvertMath.


Chọn cung cấp cho bạn chỉ mục là tham số tùy chọn. Vì vậy, bạn có thể thoát khỏi zbiến của bạn . Cũng trong cơ thể biểu hiện bạn có thể thoát khỏi sự {, }returnbáo cáo. Vì vậy, một cái gì đó như thế nàyn=>Convert.ToString(n,2).Reverse().Select((x,i)=>(x-47)*Math.Pow(3,i)).Sum();
NtFreX


2

C, 32 27 byte

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

Dựa trên câu trả lời Java của người dùng202729 . Hãy thử trực tuyến tại đây . Cảm ơn Kevin Cruijssen vì đã chơi golf 5 byte.

Phiên bản bị đánh cắp:

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
}

Bạn có thể lưu 5 byte bằng cách thay thế returnbằng x=và đảo ngược ternary để !không còn cần thiết:n(x){x=x?x%2+1+3*n(x/2):0;}
Kevin Cruijssen

@KevinCruijssen Đẹp. Cảm ơn!
OOBalance


2

Octave với hộp công cụ truyền thông, 33 32 byte

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

Hãy thử trực tuyến!

Chuyển đổi đầu vào thành một vectơ nhị phân bằng cách sử dụng de2bivà tăng tất cả các số. Liệu phép nhân ma trận với một vectơ dọc gồm 3 được nâng lên các lũy thừa thích hợp: 1, 3, 9, ...do đó nhận được tổng mà không có lệnh gọi rõ ràng sum.


Trong khi điều này cực kỳ thông minh, bạn cũng có thể làm điều này trong 32 byte: Hãy thử trực tuyến!
Sanchise

Và với MATLAB, bạn thậm chí có thể làm @(x)base2dec(de2bi(x)+49,3)trong 27 (một dịp hiếm hoi mà MATLAB nhẹ nhàng hơn Octave)
Sanchises

2

PHP, 84 64 byte

Hãy thử trực tuyến !!

Mã nguồn gốc

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

Hãy thử trực tuyến !!

Nhờ Cristoph , ít byte hơn nếu chạy bằng php -R

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

Giải trình

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
}

Đây là khi tôi thấy tôi có một cách loooogn để lập trình .... không biết gì về sự tồn tại củastrtr
Francisco Hahn

1
Sẽ làm !!, xin lỗi<?="Will do!!"
Francisco Hahn

2

CJam , 8 byte

ri2b:)3b

Hãy thử trực tuyến!

Giải trình

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

Tôi giống như :)..
Ian H.

2

Khoảng trắng , 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]

Chữ cái S(dấu cách), T(tab) và N(dòng mới) được thêm vào dưới dạng chỉ tô sáng.
[..._some_action]chỉ thêm vào giải thích.

Dùng thử trực tuyến (chỉ với không gian thô, tab và dòng mới).

Giải thích bằng mã giả:

Lần đầu tiên tôi đã chuyển đổi hàm đệ quy int f(int n){return n<1?0:n%2+1+3*f(n/2);}thành dạng lặp (ở mã giả):

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

Và sau đó tôi đã thực hiện phương pháp lặp này trong khoảng trắng ngôn ngữ dựa trên ngăn xếp, sử dụng ngăn xếp mặc định của nó.

Ví dụ chạy:

Đầu vào: 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

Hãy thử trực tuyến (chỉ với không gian thô, tab và dòng mới).
Dừng với lỗi: Thoát không được xác định.

Đầu vào: 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

Hãy thử trực tuyến (chỉ với không gian thô, tab và dòng mới).
Dừng với lỗi: Thoát không được xác định.


Tại thời điểm này, tại sao không viết lắp ráp? Ngoài ra, tôi có một phương pháp lặp đơn giản hơn một chút trong câu trả lời của mình codegolf.stackexchange.com/a/161833/17360
qwr

Tôi đã đơn giản hóa mã giả python của tôi hơn nữa.
qwr

1
@qwr Mã Python của bạn gần giống với mã Java được hiển thị. Java chỉ dài dòng và dễ bị lỗi hơn. Sự khác biệt duy nhất là mã Java của tôi là một vòng lặp while lồng nhau và mã của bạn được tách riêng. Tôi cũng có thể làm điều đó bằng Java, nhưng vì nó được lồng trong Whitespace nên tôi đã chọn viết nó như vậy trong mã giả Java. Ngoài ra, Whitespace không có cách nào để biết số lượng vật phẩm còn lại trên ngăn xếp, đó là lý do tại sao tôi đẩy 0 khi bắt đầu và trong phần INNER_LOOP của mã làm: hoán đổi, kiểm tra nếu 0, hoán đổi lại. Câu trả lời tốt đẹp hội, mặc dù. Vì vậy, tôi đã + 1-ed nó. :)
Kevin Cruijssen

Tôi vẫn nghĩ rằng bạn có thể thoát khỏi n < 1kiểm tra bằng cách đẩy các giá trị cho đến n bằng 0 và sau đó bật chúng cho đến khi bạn đạt giá trị biên của bạn (0). Độ sâu ngăn xếp không cần phải được lưu trữ rõ ràng và thậm chí không cần phải hoán đổi (nếu bạn muốn hoán đổi hai giá trị hàng đầu như trong lisp)
qwr

@qwr " Tôi vẫn nghĩ rằng bạn có thể thoát khỏi kiểm tra n <1 bằng cách đẩy các giá trị cho đến khi n bằng 0 " Umm .. kiểm tra xem n < 1(hoặc n == 0) IS đẩy các giá trị cho đến khi n0 .. Hoặc tôi đang hiểu sai điều gì ở đây ..: S " Độ sâu ngăn xếp không cần phải được lưu trữ rõ ràng " Trong Java, nếu không tôi không thể tạo mảng. Tôi có thể đã sử dụng một java.util.Stackthay thế, nhưng tôi chỉ sử dụng một mảng để làm cho nó ít dài dòng hơn. Trong khoảng trắng, ngăn xếp có kích thước không xác định.
Kevin Cruijssen

2

Brain-Flak , 74 byte

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

Hãy thử trực tuyến!

Phiên bản "có thể đọc"

({<>(())<>
  ({
    <({}[()])>
    <>
    ([{}]())
    <>
  })
}
# At this point we have a inverted binary string on the stack
(<>)
)
{
  {}
  (
    (({})()){}{}[{}]
  )
  ([][()])
}{}






Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.