Mở rộng lũy ​​thừa


31

Cho hai số nguyên lớn hơn một, A và B, xuất ra bốn biểu thức toán học theo thứ tự này:

  1. Biểu thức đơn giản A ^ B (A với lũy thừa B). ví dụ: nếu A = 2 và B = 3 , 2^3.

  2. Sự mở rộng của A ^ B về các phép nhân lặp lại của A. ví dụ 2*2*2.

  3. Sự mở rộng của A ^ B về mặt bổ sung lặp lại của A. ví dụ 2+2+2+2.

  4. Việc mở rộng A ^ B về mặt bổ sung lặp lại của 1. ví dụ 1+1+1+1+1+1+1+1.

Bốn biểu thức có thể là đầu ra theo bất kỳ cách hợp lý nào miễn là chúng theo thứ tự và rõ ràng khác biệt. Ví dụ: bạn có thể đặt chúng vào danh sách hoặc in chúng trên các dòng riêng biệt

2^3
2*2*2
2+2+2+2
1+1+1+1+1+1+1+1

hoặc có lẽ trên một dòng cách nhau bởi các dấu bằng:

2^3=2*2*2=2+2+2+2=1+1+1+1+1+1+1+1

Dấu cách có thể được chèn bên cạnh toán tử toán học

2^3 = 2 * 2 * 2 = 2 + 2 + 2 + 2 = 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1

sẽ có đầu ra hợp lệ như nhau khi A = 2 và B = 3.

Bạn có thể sử dụng các ký hiệu thay thế cho ^, *+, nhưng chỉ khi các ký hiệu mới có nhiều thành ngữ hơn cho ngôn ngữ của bạn (ví dụ **thay vì ^trong Python).

Bạn có thể giả sử rằng A và B đủ nhỏ để A ^ B sẽ không vượt quá loại số nguyên mặc định của ngôn ngữ của bạn (với điều kiện loại đó có mức tối đa hợp lý, ít nhất là 255).

Mã ngắn nhất tính bằng byte thắng.

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

Một đầu ra trên mỗi dòng. Đầu vào có thể được suy ra vì biểu thức đầu tiên luôn là A ^ B.

2^2 = 2*2 = 2+2 = 1+1+1+1
2^3 = 2*2*2 = 2+2+2+2 = 1+1+1+1+1+1+1+1
2^4 = 2*2*2*2 = 2+2+2+2+2+2+2+2 = 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
2^5 = 2*2*2*2*2 = 2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2 = 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
3^2 = 3*3 = 3+3+3 = 1+1+1+1+1+1+1+1+1
3^3 = 3*3*3 = 3+3+3+3+3+3+3+3+3 = 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
3^4 = 3*3*3*3 = 3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3 = 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
3^5 = 3*3*3*3*3 = 3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3 = 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
4^2 = 4*4 = 4+4+4+4 = 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
4^3 = 4*4*4 = 4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4 = 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
10^2 = 10*10 = 10+10+10+10+10+10+10+10+10+10 = 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
13^2 = 13*13 = 13+13+13+13+13+13+13+13+13+13+13+13+13 = 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1

@Jonathan ALLan Vâng, bạn có tất cả các lỗi chính tả mà tôi đã thấy. Công việc tốt! Bạn không nhận được gì.
R. Kap

2
Bạn nhận được lời cảm ơn từ tôi @Jonathan ALLan. R. Kap khiến tôi lo lắng về tất cả 3 của tôi
Sở thích của Calvin

Chà, (may mắn thay) không có chỗ nào bị đặt sai =ở bên trái của bất kỳ 3.
R. Kap

5
Vui lòng không thực hiện "mở rộng ký hiệu mũi tên lên" vào lần tới
Matthew Roh

1
Nếu chúng ta đọc đầu vào từ STDIN dưới dạng một chuỗi, 2^3định dạng đầu vào có hợp lệ không? Hoặc nó phải được phân tách bằng dấu cách / dấu phẩy / linefeed hoặc một cái gì đó?
Martin Ender

Câu trả lời:


11

Python 3.6 , 88 74 byte

-2 byte nhờ Dada (sử dụng ~)
-5 byte nhờ Erwan (sử dụng chuỗi f từ Python 3.6)

lambda a,b:f"{a}^{b}={a}{f'*{a}'*~-b}={a}{f'+{a}'*~-a**~-b}=1"+"+1"*~-a**b

ide ai trực tuyến?

Làm sao?

Đây là một hàm không tên lấy hai đầu vào số nguyên abmỗi đầu vào lớn hơn 0(mặc dù thông số kỹ thuật chỉ dành cho những đầu vào lớn hơn 1).

Trong Python 3.6, một tính năng mới khả dụng, cụ thể là chuỗi ký tự được định dạng hoặc "chuỗi f". Chúng cho phép xây dựng chuỗi đánh giá thời gian chạy. Một đầu f(hoặc F) tạo ra một cấu trúc như vậy, ví dụ f"blah"hoặc f'blah'. Bên trong một chuỗi f bất cứ thứ gì giữa một cặp dấu ngoặc nhọn {...}, là một biểu thức được đánh giá.

Như vậy f"{a}^{b}={a}{f'*{a}'*~-b}={a}{f'+{a}'*~-a**~-b}=1"đánh giá lại mỗi a, b, a, f'*{a}'*~-b, a, và f'+{a}'*~-a**~-b}là biểu thức, giữ ^, =, =, và =1như dây đàn, tất cả đều được nối với nhau.

Các biểu thức abbiểu thức đánh giá các đại diện abtương ứng.

Các f'*{a}'f'+{a}'đến lượt nó cũng là f-chuỗi bên trong các biểu thức, trong đó đánh giá để acó một hàng đầu '*'và một lãnh đạo '+'tương ứng

Để tạo số as và thao tác cần thiết cho *+các phần lưu ý rằng sẽ có b as được nhân với nhau và a**(b-1) as được cộng lại với nhau. Mỗi trường hợp sau đó yêu cầu một ký hiệu toán tử ít hơn số as. Vì vậy, chúng ta có thể lặp lại chuỗi f f'*{a}f'+{a}'(sử dụng *) nhiều lần như có các toán tử và trả trước mỗi chuỗi với một chuỗi a. (b-1)~-b(a**(b-1))-1~-a**~-b.

Điều tương tự cũng được thực hiện cho các 1s sử dụng (a**b)-1con người ~-**b, nhưng chúng ta không cần các chi phí của f-chuỗi từ 1là không đổi, do đó, một chuỗi tiêu chuẩn lặp lại được nối với +.


Các phiên bản Python trước, 81:

lambda a,b:'%s^%s=%s=%s=1'%(a,b,('*%s'%a*b)[1:],('+%s'%a*a**~-b)[1:])+'+1'*~-a**b

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


Bạn không thể thay thế (b-1)bằng ~-b?
Dada

Có bạn đúng, tôi đã bỏ lỡ điều đó.
Jonathan Allan

1
bạn có thể giành được 5 byte, nếu bạn sử dụng chuỗi f từ python 3.6:lambda a,b:f"{a}^{b}={(f'*{a}'*b)[1:]}={(f'+{a}'*a**~-b)[1:]}=1"+'+1'*~-a**b
Erwan

@Erwan vâng, tôi đã dự định sử dụng chuỗi f khi tôi trở lại (bây giờ). Tôi có thể tiết kiệm một vài quá.
Jonathan Allan

1
Luôn luôn tốt để xem các nhà khai thác nòng nọc.
Jack Brounstein

11

Cubix, 238 234 217 151 110 100 byte

Đã lưu 14 byte nhờ vào ETH Productstions

u'^.:s+.;;;\-?W?rsos\(rrOIO:ur>'=o;^u.;;.>$.vUo^'rsu1;;@!\q?s*su;;IOu*+qU../;(*\(s.;<..r:''uq....qu\

Mở rộng:

          u ' ^ . :
          s + . ; ;
          ; \ - ? W
          ? r s o s
          \ ( r r O
I O : u r > ' = o ; ^ u . ; ; . > $ . v
U o ^ ' r s u 1 ; ; @ ! \ q ? s * s u ;
; I O u * + q U . . / ; ( * \ ( s . ; <
. . r : ' ' u q . . . . q u \ . . . . .
. . . . . . . . . . . . . . . . . . . .
          . . . . .
          . . . . .
          . . . . .
          . . . . .
          . . . . .

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

Hãy thử nó ở đây

Giải trình

Mã bao gồm 8 bước, với hai vòng lặp. Tôi sẽ đi qua phần mã một phần.

Bước 1 (A ^ B)

          . . . . .
          . . . . .
          . . . . .
          . . . . .
          . . . . .
I O : u . . . . . . . . . . . . . . . .
U o ^ ' . . . . . . . . . . . . . . . .
; I O u . . . . . . / ; ( * \ . . . . .
? ? r : . . . . . . ? . . . \ ? ? ? ? ?
. . . . ? . . . . . ? . . . . . . . . .
          ? ? ? ? ?
          . . . . .
          . . . . .
          . . . . .
          . . . . .

Đây là khối lập phương với các phần không liên quan đến bước đầu tiên bị loại bỏ. Dấu hỏi cho thấy các IP không truy cập sẽ làm cho đường dẫn của nó rõ ràng hơn.

IO:'^o;IO:r*(; # Explanation
I              # Push the first input (A)
 O             #   output that
  :            #   duplicate it
   '^          # Push the character "^"
     o         #   output that
      ;        #   pop it from the stack
       I       # Push the second input (B)
        O      #   output that 
         :     #   duplicate
          r    #   rotate top 3 elements
           *   # Push the product of the top two elements
            (  #   decrease it by one
             ; #   pop it from the stack (making the last
               #   two operations useless, but doing it
               #   this way saves 10B)

Bây giờ, ngăn xếp trông như thế này: A, B, A, B

Bước 2 (chuẩn bị cho vòng lặp in)

Vòng lặp in mất 3 đối số (3 yếu tố hàng đầu trên stack): P, QR. Plà số lần lặp lại, Qlà dấu phân cách (mã ký tự) và Rlà số cần lặp lại. May mắn thay, vòng lặp cũng quan tâm đến yêu cầu mà chuỗi kết quả phải kết thúc R, không phải Q.

Chúng tôi muốn lặp lại A*chính xác Bthời gian, vì vậy dấu phân cách là *. Lưu ý rằng ngăn xếp bắt đầu như A, B, A, B. Một lần nữa, tôi loại bỏ tất cả các hướng dẫn không liên quan. IP bắt đầu tại Sđiểm phía bắc.

          . . . . .
          . . . . .
          . . . . .
          . . . . .
          . . . . .
. . . . r . . . . . . . . . . . . . . .
. . . . r . . . . . . . . . . . . . . .
. . . . * . . . . . . . . . . . . . . .
. . . . ' . . . . . . . . . . . . . . .
. . . . S . . . . . . . . . . . . . . .
          . . . . .
          . . . . .
          . . . . .
          . . . . .
          . . . . .

'*rr # Explanation
'*   # Push * (Stack: A, B, A, B, *)
  rr # Rotate top three elements twice

Bây giờ là ngăn xếp A, B, B, *, A.

Bước 3/6/8 (vòng lặp in)

Khái niệm

E . . . . .
? r s o s u 
\ ( r r O <
. . . . . S

IP đi vào vòng lặp thông qua S, chỉ về hướng bắc và thoát khỏi vòng lặp tại E, chỉ về hướng bắc một lần nữa. Đối với lời giải thích này, ngăn xếp được đặt thành [..., A, B, C]. Các hướng dẫn sau đây được thực hiện. Lưu ý rằng IP không thể rời khỏi vòng lặp trước dấu chấm hỏi, vì vậy bốn hướng dẫn đầu tiên sẽ luôn được thực thi.

Orr(?rsos # Explanation
O         # Output `C`
 rr       # Rotate top three elements twice (Stack: [..., B, C, A])
   (      # Decrease A by one (Stack: [..., B, C, A-1])
    ?     # If top of stack (A) > 0:
     r    #    Rotate top of stack (Stack: [..., A-1, B, C])
      s   #    Swap top elements (Stack: [..., A-1, C, B])
       o  #    Output top of stack (B) as character code
        s #    Swap top elements (Stack: [..., A-1, B, C]
          #
          # ... and repeat ...

Thực hiện

Đây là khối lập phương một lần nữa, với các phần không liên quan được loại bỏ. IP bắt đầu tại S, chỉ về phía đông.

          . . . . .
          . . . . .
          . . . . .
          ? r s o s
          \ ( r r O
. . . . . S ' = o ; ^ u . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
          . . . . .
          . . . . .
          . . . . .
          . . . . .
          . . . . .

Như bạn có thể thấy, IP đi qua bốn hướng dẫn trước khi vào vòng lặp. Vì mã ký tự được loại bỏ một lần nữa, chúng tôi tiếp cận vòng lặp với cùng ngăn xếp chính xác khi chúng tôi nhập phần này.

'=o; # Explanation
'=   # Push =
  o  #     Output
   ; #     Pop from stack

Bên trong vòng lặp, lời giải thích ở trên giữ.

Bước 4 (phân biệt IP)

Vì chúng tôi sử dụng vòng lặp trên nhiều lần và tất cả đều khiến IP kết thúc ở cùng một điểm, chúng tôi phải phân biệt giữa nhiều lần chạy. Đầu tiên, chúng ta có thể phân biệt giữa dấu phân cách (lần chạy đầu tiên có a *, trong khi chạy hai và ba có +dấu phân cách). Chúng ta có thể phân biệt giữa chạy 2 và 3 bằng cách kiểm tra giá trị của số được lặp lại. Nếu đó là một, chương trình nên chấm dứt.

So sánh đầu tiên

Đây là những gì nó trông giống như trên khối lập phương. IP bắt đầu tại S và chỉ về phía bắc. Các ngăn chứa [..., * or +, A or 1, 0]. Số 1 hiển thị nơi IP sẽ kết thúc nếu đây là vòng lặp đầu tiên (chỉ về hướng bắc) và số 2 cho thấy IP sẽ kết thúc nếu đây là vòng lặp thứ hai (hoặc thứ ba) (chỉ về hướng đông).

          u ' . . .
          s + . 1 .
          ; \ - ? 2
          S . . . .
          . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
          . . . . .
          . . . . .
          . . . . .
          . . . . .
          . . . . .

;s'+-? # Explanation
;      # Delete top element (0)
 s     # Swap the top two elements (Stack: 1/A, */+)
  '+   # Push the character code of + 
    -  # Subtract the top two elements and push
       #  that to the stack (Stack: 1/A, */+, +, (*/+)-+)
     ? # Changes the direction based on the top
       # item on the stack. If it's 0 (if (*/+) == +)
       # the IP continues going right, otherwise, it
       # turns and continues going north.

Nếu IP bây giờ là tại 1, ngăn xếp là [A, *, +, -1]. Nếu không, ngăn xếp là [A or 1, +, +, 0]. Như bạn có thể thấy, vẫn còn một ẩn số trong trường hợp thứ hai, vì vậy chúng ta phải thực hiện một so sánh khác.

So sánh thứ hai

Vì IP đã đi qua bước 5, nên ngăn xếp trông như thế này : [A^(B-1) or nothing, A or 1, +, +, 0]. Nếu phần tử đầu tiên là nothing, phần tử thứ hai là 1và phần tử ngược cũng vậy. Khối lập phương trông như thế này, với IP bắt đầu từ S và chỉ về hướng đông. Nếu đây là vòng lặp thứ hai, IP kết thúc tại E, chỉ về phía tây. Nếu không, chương trình nhấn @và chấm dứt.

          . . . . .
          . . . . ;
          . . . S W
          . . . . .
          . . . . .
. . . . . . . . . . . . . ; . . . . . .
. . . . . . . . . E @ ! \ q . . . . . .
. . . . . . . . . . . . ( * . . . . . .
. . . . . . . . . . . . q u . . . . . .
. . . . . . . . . . . . . . . . . . . .
          . . . . .
          . . . . .
          . . . . .
          . . . . .
          . . . . .

Các hướng dẫn được thực hiện mà không làm gì với luồng điều khiển được liệt kê bên dưới.

;;q*q(!@
;;       # Delete top two elements (Stack [A^(B-1)/null, A/1, +])
  q      # Send top element to the bottom (Stack [+, A^(B-1)/0, A/1])
   *     # Push product of top two elements 
         #    (Stack [+, A^(B-1)/0, A/1, A^B/0])
    q    # Send top element to the bottom 
         #    (Stack [A^B/0, +, A^(B-1)/0, A/1])
     (   # Decrease the top element by 1 
         #    (Stack [A^B/0, +, A^(B-1)/0, (A-1)/0])
      !  # If (top element == 0):
       @ #  Stop program

Bây giờ ngăn xếp [A^B, +, A^(B-1), A-1], miễn là chương trình không kết thúc.

Bước 5 (chuẩn bị cho "A +" (lặp lại A ^ (B-1)))

Đáng buồn thay, Cubix không có nhà điều hành điện, vì vậy chúng tôi cần một vòng lặp khác. Tuy nhiên, chúng ta cần dọn sạch ngăn xếp trước, hiện có chứa [B, A, *, +, -1].

Dọn dẹp

Đây là khối lập phương một lần nữa. Như thường lệ, IP bắt đầu tại S (chỉ về hướng bắc) và kết thúc tại E, chỉ về phía tây.

          . . . ? .
          . . . ; .
          . . . S .
          . . . . .
          . . . . .
. . . . . . . . . . . . . . . . > $ . v
. . . . . . . . . . . . . . . . . . . ;
. . . . . . . . . . . . . . . . . . E <
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
          . . . . .
          . . . . .
          . . . . .
          . . . . .
          . . . . .

;; # Explanation
;; # Remove top 2 elements (Stack: [B, A, *])

Tính A ^ (B-1)

Một vòng lặp khác hoạt động gần giống như vòng lặp in, nhưng nó nhỏ gọn hơn một chút. IP bắt đầu tại S, chỉ về phía tây, với ngăn xếp [B, A, *]. IP thoát ra ở Ehướng bắc.

          . . . . .
          . . . . .
          . . . . .
          . . . . .
          . . . . .
. . . . . . . . . . . . . . E . . . . .
. . . . . . . . . . . . . . ? s * s u .
. . . . . . . . . . . . . . \ ( s . ; S
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
          . . . . .
          . . . . .
          . . . . .
          . . . . .
          . . . . .

Cơ thể vòng lặp là như sau.

;s(?s*s # Explanation
;       # Pop top element.
 s      # Shift top elements.
  (     # Decrease top element by one
   ?    # If not 0:
    s   #    Shift top elements again
     *  #    Multiply
      s #    Shift back
        #
        # ... and repeat ...

Ngăn xếp kết quả là [A, A^(B-1), 0].

Dọn dẹp ngăn xếp (một lần nữa)

Bây giờ chúng ta cần phải quay lại vòng in, với đỉnh ngăn xếp chứa [..., A^(B-1), +, A]. Để làm điều này, chúng tôi thực hiện như sau. Đây là khối lập phương một lần nữa,

          . . ^ ? :
          . . . . .
          . . . . .
          . . . . .
          E . . . .
. . . . . s . . . . . . . . ; . . $ . .
. . . . . + q U . . . . . . S . . s . .
. . . . . ' u q . . . . . . . . . ? . .
. . . . . . . ? . . . . . . . . . ? . .
. . . . . . . ? . . . . . . . . . ? . .
          . . ? . .
          . . ? . .
          . . ? . .
          . . ? . .
          . . ? . .

;:$sqq'+s # Explanation
;         # Delete top element (Stack: [A, A^(B-1)])
 :        # Copy top element
  $s      # No-op
    qq    # Send top two elements to the bottom
          #   (Stack: [A^(B-1), A^(B-1), A])
      '+  # Push +
          #   (Stack: [A^(B-1), A^(B-1), A, +])
        s # Swap top two elements
          #   (Stack: [A^(B-1), A^(B-1), +, A])

Bước 7 (chuẩn bị cho vòng lặp cuối cùng)

Bây giờ [A^B, +, A^(B-1), A-1], ngăn xếp , IP bắt đầu S, đi về phía tây và kết thúc tại E, đi bên phải.

          . . . . .
          . . . . .
          . . . . .
          . . . . .
          . . . . .
. . . . . E . . . . . . . . . . . . . .
. . . . . . u 1 ; ; S . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
          . . . . .
          . . . . .
          . . . . .
          . . . . .
          . . . . .

Các hướng dẫn thực hiện:

;;1 # Explanation
;;  # Delete top two elements
  1 # Push 1

Bây giờ ngăn xếp trông như thế [A^B, +, 1]và IP sắp vào vòng in, vậy là xong.


2
Có xin vui lòng thực hiện một lời giải thích, ít nhất là thực hiện một phiên bản thuần khối ungolfed
phá hủy Lemon

Tôi đã hoàn thành lời giải thích
Luke

Ai tạo ra ngôn ngữ này ... Nó giống như hex-agony nhưng cube-agony. Ai đó tạo ra một hình lục giác 3D.
Bạch tuộc ma thuật Urn

1
@carusocomputing Và khối đa diện nào sẽ là hình lục giác 3D, hm?
mbomb007

1
Bạn có thể tạo ra một ngôn ngữ chạy trên cấu trúc 3D của các tứ diện được sắp xếp.
mbomb007

7

MATL , 46 byte

XH'^'i'='XJ2G:"H'*']xJ&Gq^:"H'+']xJ&G^:"1'+']x

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

Kéo dài giới hạn của "cách hợp lý" ở đây, nhưng các biểu thức được tách ra.

Giải trình

Biểu thức đầu tiên:

XH'^'i'='XJ

XH         % implicitly take input A, save it to clipboard H
'^'        % push literal '^'
i          % take input B
'='        % push literal '='
XJ         % copy '=' to clipboard J, we'll use this twice more so it's worth it

Biểu thức thứ hai:

2G:"H'*']xJ

2G         % paste the second input (B) again
:"         % do the following B times
  H        % paste A from clipboard H
  '*'      % push literal '*'
]          % end loop
x          % delete the final element (at the moment we have a trailing *)
J          % paste '=' from clipboard J

Biểu thức thứ ba:

&Gq^:"H'+']xJ

&G         % paste all of the input, ie push A and B
q          % decrement B
^          % power, giving A^(B-1)
:"         % do the following A^(B-1) times 
  H        % paste A from clipboard H
  '+'      % push literal '+'
]          % end loop
x          % delete the final element (at the moment we have a trailing +)
J          % paste '=' from clipboard J

Biểu thức thứ tư:

&G^:"1'+']x

&G         % paste all of the input, ie push A and B
^          % power, giving A^B
:"         % do the following A^B times 
  1        % push 1
  '+'      % push '+'
]          % end loop
x          % delete the final element (at the moment we have a trailing +)
           % (implicit) convert all to string and display

6

JavaScript (ES7), 78 byte

Đưa đầu vào theo cú pháp currying (a)(b). Xuất ra một chuỗi.

a=>b=>a+'^'+b+(g=o=>'='+a+('+*'[+!o]+a).repeat(b-1))()+g(b=a**~-b)+g(b*=a,a=1)

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


3

Ruby, 52 byte

->a,b{[[a,b]*?^,[a]*b*?*,[a]*a**~-b*?+,[1]*a**b*?+]}

3

05AB1E , 30 byte

mUð¹'^²J'*¹«²×'+¹«X¹÷ׄ+1X×)€¦

Giải trình:

mU                               # Store a^b in variable X
  ð                              # Push a space character to the stack (will be deleted at the end, but this is needed to keep the character count low)
   ¹'^²J                         # Push the string "a^b" to the stack
        '*¹«                     # Push the string "*a" to the stack
            ²×                   # Repeat b times
              '+¹«               # Push the string "+a" to the stack
                  «X¹÷×          # Repeat a^b / a times
                       „+1       # Push the string "+1" to the stack
                          X×     # Repeat a^b times
                            )    # Wrap stack to array
                             €¦  # Remove the first character from each element in the array

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


¹²'^ý ¹'*¹«²<׫¹²m¹÷¹s×S'+ý 1¹²m×S'+ý», tại sao bạn đánh bại tôi 5 byte :(?
Magic Octopus Urn

1
Bởi vì tôi là. : P
Okx

Vì một số lý do, tôi đã thấy câu trả lời của bạn và đọc "80 byte" và tự nghĩ, "dễ đánh bại", sau đó tôi đã tạo ra mục tiêu của mình với mục tiêu 80 trong tâm trí ... Sau đó, một lần nữa, tôi nghĩ rằng tôi rút ngắn một số thứ và vì vậy là của bạn haha.
Bạch tuộc ma thuật Urn

¹²«¹²×¹¹²m©¹÷×1®×)vySN"^*++"èý,gần hơn;). Bây giờ bạn chỉ thắng được 1;).
Bạch tuộc ma thuật Urn

2

C (gcc) , 156 149 byte

#define q for(x=0;x
x,y;p(a,b,c){printf("%c%d",x?b:61,c),x+=a;}e(n,i){x=1;p(0,0,n);p(0,94,i);y=!!i;q<i;y*=n)p(1,42,n);q<y;)p(n,43,n);q<y;)p(1,43,1);}

-2 byte nếu chúng ta có thể bỏ qua 0 lũy thừa; y=!!icó thể trở thànhy=1

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


2

Java 7, 170 byte

String c(int a,int b){String s="=",r=a+"^"+b+s+a;double i=0,x=Math.pow(a,b);for(;++i<b;r+="*"+a);r+=s+a;for(i=0;++i<x/a;r+="+"+a);r+=s+1;for(i=0;++i<x;r+="+1");return r;}

Ung dung:

String c(int a, int b){
  String s = "=",
         r = a+"^"+b+s+a;
  double i = 0,
         x = Math.pow(a,b);
  for(; ++i < b; r += "*"+a);
  r += s+a;
  for(i = 0; ++i < x/a; r += "+"+a);
  r += s+1;
  for(i = 0; ++i < x; r += "+1");
  return r;
}

Mã kiểm tra:

Hãy thử nó ở đây.

class M{
  static String c(int a,int b){String s="=",r=a+"^"+b+s+a;double i=0,x=Math.pow(a,b);for(;++i<b;r+="*"+a);r+=s+a;for(i=0;++i<x/a;r+="+"+a);r+=s+1;for(i=0;++i<x;r+="+1");return r;}

  public static void main(String[] a){
    System.out.println(c(2,2));
    System.out.println(c(2,3));
    System.out.println(c(2,4));
    System.out.println(c(2,5));
    System.out.println(c(3,2));
    System.out.println(c(3,3));
    System.out.println(c(3,4));
    System.out.println(c(3,5));
    System.out.println(c(4,2));
    System.out.println(c(4,3));
    System.out.println(c(10,2));
    System.out.println(c(13,2));
  }
}

Đầu ra:

2^2=2*2=2+2=1+1+1+1
2^3=2*2*2=2+2+2+2=1+1+1+1+1+1+1+1
2^4=2*2*2*2=2+2+2+2+2+2+2+2=1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
2^5=2*2*2*2*2=2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2=1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
3^2=3*3=3+3+3=1+1+1+1+1+1+1+1+1
3^3=3*3*3=3+3+3+3+3+3+3+3+3=1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
3^4=3*3*3*3=3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3=1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
3^5=3*3*3*3*3=3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3=1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
4^2=4*4=4+4+4+4=1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
4^3=4*4*4=4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4=1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
10^2=10*10=10+10+10+10+10+10+10+10+10+10=1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
13^2=13*13=13+13+13+13+13+13+13+13+13+13+13+13+13=1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1

1

Pip , 38 35 34 byte

33 byte mã, +1 cho -ncờ.

Ya**b[gJ'^aRLbJ'*aRLy/aJ'+1XyJ'+]

Lấy A và B làm đối số dòng lệnh; in một biểu thức trên mỗi dòng. Hãy thử trực tuyến!

Giải trình

Ya**blà mã thiết lập: yank a**bvào ybiến. Sau đó, chúng tôi có một danh sách (trong []) chứa bốn biểu thức:

  • gJ'^: lấy gdanh sách ar đầy đủ (ở đây, một danh sách chứa ab) và Join nó trên^
  • aRLbJ'*: sử dụng Repeat List để tạo danh sách với các bbản sao của a, sau Jđó nhập vào*
  • aRLy/aJ'+: sử dụng RLđể tạo danh sách với y/a(tức là a**(b-1)) bản sao của a, sau đóJ đó nhập vào+
  • 1XyJ'+: 1, chuỗi nhân với y, Joined trên+

Danh sách được in với dòng mới là dấu phân cách nhờ -ncờ.


1

Javascript 115 113 104 byte

Cảm ơn @Neil và @TuukkaX vì đã chơi golf mỗi byte một và @ETHproductions và Luke đã chơi golf 9 byte

a=>b=>[a+'^'+b,(a+'*').repeat(b-1)+a,(a+'+').repeat(Math.pow(a,b-1)-1)+a,1+'+1'.repeat(Math.pow(a,b)-1)]

Dùng thử trực tuyến


Bạn có thể sử dụng cú pháp currying : a=>b=>.
Yytsi

Tại sao không '=1'+'+1'.repeat?
Neil

Bạn có thể lưu thêm một byte với .join:a=>b=>[a+'^'+b,(a+'*').repeat(b-1)+a,(a+'+').repeat(Math.pow(a,b-1)-1)+a,1+'+1'.repeat(Math.pow(a,b)-1)].join`=`
Sản phẩm ETH

Nếu bạn diễn giải "Bốn biểu thức có thể là đầu ra theo bất kỳ cách hợp lý nào miễn là chúng theo thứ tự và rõ ràng khác biệt." cũng bao gồm trả về một mảng với bốn yếu tố khác nhau, bạn thậm chí không cần .join()...
Luke

1

Thạch , 29 byte

*⁹’,¤;@
,`;1ẋ"ç
,W;çj"“^*++”Y

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

Làm sao?

*⁹’,¤;@ - Link 1, get list lengths: a, b
    ¤   - nilad followed by link(s) as a nilad
 ⁹      - right: b
  ’     - decrement: b-1
   ,    - pair with right: [b-1, b]
*       - exponentiate: [a^(b-1), a^b]
     ;@ - concatenate with reversed arguments: [b, a^(b-1), a^b]

,`;1ẋ"ç - Link 2, create lists: a, b
 `      - monad from dyad by repeating argument
,       - pair: [a, a]
  ;1    - concatenate 1: [a, a, 1]
      ç - last link (1) as a dyad: [b, a^(b-1), a^b]
     "  - zip with the dyad...
    ẋ   -     repeat list:  [[a, a, ..., a], [a, a, ..., a], [1, 1, ..., 1]]
                                <- b ->       <- a^(b-1) ->     <- a^b ->

,W;çj"“^*++”Y - Main link: a, b
,             - pair: [a, b]
 W            - wrap: [[a, b]]
   ç          - last link (2) as a dyad: [[a, a, ..., a], [a, a, ..., a], [1, 1, ..., 1]]
  ;           - concatenate [[a, b], [a, a, ..., a], [a, a, ..., a], [1, 1, ..., 1]]
      “^*++”  - list of characters: ['^', '*', '+', '+']
     "        - zip with the dyad...
    j         -     join: ["a^b", "a*a*...*a", "a+a+...+a", "1+1+...+1"]
            Y - join with line feeds
              - implicit print

1

tinylisp thay thế , 178 186 byte

(load library
(d W(q((_ N S #)(i(e # 1)(c N _)(W(c S(c N _))N S(s # 1
(d ^(q((x y)(i y(*(^ x(s y 1))x)1
(d X(q((A B)(list(list A(q ^)B)(W()A(q *)B)(W()A(q +)(^ A(s B 1)))(W()1(q +)(^ A B

Sử dụng thay thế tiết kiệm 8 byte trong dấu ngoặc đơn đóng ngụ ý ở cuối dòng. Xác định hàm Xcó hai số và trả về danh sách các biểu thức. Mỗi biểu thức được ngoặc đơn, với khoảng trắng xung quanh toán tử (thực ra, đó là danh sách các số và ký hiệu toán tử):

((2 ^ 3) (2 * 2 * 2) (2 + 2 + 2 + 2) (1 + 1 + 1 + 1 + 1 + 1 + 1 + 1))

Hy vọng định dạng đầu ra này là chấp nhận được. Hãy thử trực tuyến! (với một số trường hợp thử nghiệm).

Giải trình

(load library)

Chúng ta cần hai chức năng từ thư viện chuẩn: list*.

(d W(q((_ N S #)(i(e # 1)(c N _)(W(c S(c N _))N S(s # 1))))))

Xác định một hàm W(viết tắt của "dệt") lấy một bộ tích lũy _, một số N, một ký hiệu Svà một số đếm #. Chúng tôi sẽ sử dụng chức năng này để tạo hầu hết các biểu thức của chúng tôi: ví dụ:(W () 2 (q +) 3) sẽ dẫn đến (2 + 2 + 2).

Nếu số đếm là 1 (e # 1), thì đặt số đó vào phía trước của bộ tích lũy (c N _)và trả lại số đó. Nếu không, tái diễn:

  • Bộ tích lũy mới là (c S(c N _)): ký hiệu và số được đặt ở phía trước của bộ tích lũy trước đó;
  • NSgiống nhau;
  • Số mới là (s # 1): đếm - 1.

Thành ngữ tích lũy là cần thiết để đạt được đệ quy đuôi thích hợp , ngăn ngừa lỗi độ sâu đệ quy. (Thay đổi này chịu trách nhiệm cho +8 đến số byte. 13^2Trường hợp này không hoạt động trong phiên bản trước.)

(d ^(q((x y)(i y(*(^ x(s y 1))x)1))))

Thật không may, thư viện không có chức năng lũy ​​thừa tại thời điểm này, vì vậy chúng tôi phải xác định một. ^mất xy. Nếu ylà sự thật (khác không), chúng ta lặp lại với y-1( (s y 1)) và nhân kết quả với x. Nếu không, ybằng không và chúng tôi trở lại1 .

(Lưu ý: Chức năng này không không sử dụng đệ quy đuôi thích hợp. Tôi cho rằng số mũ sẽ đủ nhỏ để nó không thành vấn đề. Một số thử nghiệm trên TIO chỉ ra số mũ tối đa là 325, mà tôi cho rằng sẽ đủ cho câu hỏi này. Nếu OP không đồng ý, tôi sẽ thay đổi.)

(d X(q((A B)(list(list A(q ^)B)(W()A(q *)B)(W()A(q +)(^ A(s B 1)))(W()1(q +)(^ A B))))))

Cuối cùng, chức năng chúng tôi quan tâm, X , mất ABvà trả về một danh sách bốn mục:

  • (list A(q ^)B): một danh sách chứa A , một nghĩa đen ^, và B;
  • (W()A(q *)B): gọi điện W để có được một danh sách các Bbản sao A, đan xen với nghĩa đen *;
  • (W()A(q +)(^ A(s B 1))): gọi điện W để có được một danh sách các A^(B-1)bản sao A, đan xen với nghĩa đen +;
  • (W()1(q +)(^ A B)): gọi Wđể nhận danh sách các A^Bbản sao 1, đan xen với nghĩa đen +.

1

Brainfuck , 372 byte

,.>++++++++[>++++++++++++>++++++++>+++++<<<-]>--.<,.>>---.>++>++++++++[<<<<------>>>>-]<<<<-[<.>>>>.>>+<<<<<-]<.>>>.<<++++++++[<------>-]<[>+>>>>+<<<<<-]>>>>>>>+<[->[-<<[->>>+>+<<<<]>>>>[-<<<<+>>>>]<<]>[-<+>]<<]>[<+>>+<-]>[<+>-]<<<<<<<<++++++++[>++++++<-]>>>>+>>-[<<<<<.>>>.>>-]<<<<<.>>.>>>>[<+>-]<<[->[->+>+<<]>>[-<<+>>]<<<]>>>++++++++[<<<++++++>>>-]<<<+>>-[<<.<.>>>-]<<.

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

Ghi chú

  1. Hai đầu vào phải được chọn theo cách như vậy, A**Bkhông vượt quá255 . Điều này là do brainfuck chỉ có thể lưu trữ các giá trị của một byte.
  2. Nếu một đầu vào lớn hơn 9, hãy sử dụng ký tự ASCII tiếp theo. 10trở thành :, 11trở thành ;vv Điều này là bởi vì Brainfuck chỉ có thể đưa đầu vào của một byte.

Giải trình

Đây là phần mã nhận xét của tôi. Tôi sẽ mở rộng về điều này sau.

,.                      print A
> +++++ +++
[
    > +++++ +++++ ++    set up 96 (for ^ sign)
    > +++++ +++         set up 64 (for = sign)
    > +++++             set up 40 (for plus and * sign)
    <<< -
]
> --.                   print ^
< ,.                    print B
>
> ---.                  print =
> ++                    prepare *

> +++++ +++             convert B from char code
[
    <<<< ----- -
    >>>> -
]

<<<< -                  print loop "A*"
[
    < .
    >>>> .
    >> +
    <<<<< -
]
< .                     print final A
>>> .                   print =


<< +++++ +++            convert A from char code
[
    < ----- -
    > -
]

<
[                       duplicate A
    > +
    >>>> +
    <<<<< -
]

>>>>>                   exponentiation (A**(B minus 1))
>>+<[->[-<<[->>>+>+<<<<]>>>>[-<<<<+>>>>]<<]>[-<+>]<<]<

>>
[                       duplicate
    < +
    >> +
    < -
]

>[<+>-]                 move

<<<<< <<< +++++ +++     convert A to char code
[
    > +++++ +
    < -
]

>>>> +                  convert * to plus sign
>> -                    print loop "A plus"
[
    <<<< < .
    >>> .
    >> -
]
<<<<< .                 print final A
>> .                    print =

>>>>                    move
[
    < +
    > -
]

                        multiply A**(B minus 1) by A
<<[->[->+>+<<]>>[-<<+>>]<<<]        

>>> +++++ +++           generate the char code for 1 (49)
[                           generate 8*6 = 48
    <<< +++++ +
    >>> -
]
<<< +                       add one

>> -                    print loop "1 plus"
[
    << .
    < .
    >>> -
]
<< .                    print final 1

0

Bình thường, 32 31 byte

AQjMC,"^*++"[Q*]GH*^GtH]G*]1^GH

Đưa đầu vào là [2,10], đầu ra là["2^10", "2*2*2*2*2*2*2*2*2*2", "2+2+...

Giải trình:

Q = eval(input())                     #  
G, H = Q                              #  AQ
operators = "^*++"                    #        "^*++"
operands = [Q,                        #              [Q
  [G]*H,                              #                *]GH
  G**(H-1)*[G]                        #                    *^GtH]G
  [1]*G**H                            #                           *]1^GH
]                                     #
map( lambda d: join(*d),              #    jM
     zip(operators, operands)         #      C,...
)                                     #

Hãy thử nó ở đây.


0

Perl , 81 byte

78 byte mã + -ncờ (được tính là 3 byte kể từ khi mã chứa $').

$,=$/;print s/ /^/r,map{/\D/;join$&,($`)x$'}"$`*$'","$`+".$`**~-$',"1+".$`**$'

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


0

R, 147 byte

w=switch;function(A,B)for(s in letters[1:4]){cat(rep(w(s,d=1,a=c(A,B),b=,c=A),w(s,a=1,b=B,c=A^B/A,d=A^B)),sep=w(s,a="^",b="*",d=,c="+"));cat("\n")}

Hàm ẩn danh đầu ra bắt buộc, tốt, đầu ra, từng dòng một. Giải pháp này sử dụng rộng rãiswitch chức năng.

Các switchchức năng phải mất một biểu thức (ở đây, s) mà đánh giá lại đối với một số hoặc một chuỗi ký tự (xem ?switch), tiếp theo là alernatives tương ứng với s. Nếu một sự thay thế bị thiếu (ví dụ switch(s, a=, b= "PPCG"), sự thay thế không thiếu tiếp theo được đánh giá (trong ví dụ, các s="a"kết quả đầu ra"PPCG" ).

Các rephàm lặp lại (lặp lại, thực tế) đối số đầu tiên của nó số lần được chỉ định trong đối số thứ hai.

cat, để kết thúc, nối và in các đối tượng, với một dấu phân cách có thể được chọn với sep = đối số. Hàm thứ hai catlà ở đây để ngắt dòng.

Ung dung:

f=function(A,B)
    for(s in letters[1:4]){
        cat(
            rep(switch(s, d = 1, a = c(A,B), b =, c = A),
            switch(s, a = 1, b = B, c = A^B/A, d = A^B)),
        sep=switch(s,a = "^", b = "*", d =, c = "+"))
    cat("\n")
}



0

Hồng y 202 byte

%:.~:#"^"."=">v
x            "~
             *.
     >~=088v "~
     v88+88< ?
     8       -
     8      x#<
     v     < 0
     >   t / <
v~.~ <#"="?<
-
#?"+"^t
0
V
#?"="  >"1"-v
/ {   <^"+"?<
>     ^

Sẽ chỉ hoạt động đối với các số có giá trị được tính toán <256 do các giới hạn trong các giá trị có thể được giữ bởi các con trỏ trong Hồng y

Dùng thử trực tuyến

Giải trình:

Bước 1

%:.~:#"^"."="

Nhận hai số a và b làm đầu vào và đầu ra là "a ^ b ="
Truyền một con trỏ có giá trị hoạt động a và giá trị không hoạt động b

Bước 2

        >v
        "~
        *.
>~=088v "~
v88+88< ?
8       -
8      x#<
v     < 0
>   t / <

Nhận một con trỏ có giá trị hoạt động a và giá trị không hoạt động b in "a" + ("* a") (b-1) lần
Truyền một con trỏ có giá trị hoạt động a ^ (b-1) cho phần tiếp theo

Bước 3

v~.~ <#"="?<
-
#?"+"^t
0
V
#?"="  
/ {   <
>     ^ 

Nhận một con trỏ có giá trị a ^ (b-1) và đầu ra "= a" + ("+ a") được lặp lại (a ^ (b-1) -1) lần + "="
Truyền con trỏ có giá trị a ^ b đến phần tiếp theo

Bước 4

>"1"-v
^"+"?<

Nhận một con trỏ có giá trị a ^ b và in ra "1" + ("+ 1") lặp lại a ^ b-1 lần


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.