In hình ghép


16

Tetration, đại diện như a^^b, được lặp lại lũy thừa. Ví dụ, 2^^32^2^2, mà là 16.

Cho hai số ab , in a^^b.

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

1 2 -> 1
2 2 -> 4
5 2 -> 3125
3 3 -> 7625597484987
etc.

Ký hiệu khoa học là chấp nhận được.

Hãy nhớ rằng, đây là , vì vậy mã có số byte nhỏ nhất sẽ thắng.


2
Những loại số nào? Những số nguyên dương?
xnor


9
Lũy thừa là không liên kết. Bạn nên bao gồm ít nhất một cade thử nghiệm với b> 2 .
Dennis

@Dennis3 3 -> 7625597484987
Gabriel Benamy

1
@RosLuP Không, 3^3^3có nghĩa là tự động 3^(3^(3)). Xem en.wikipedia.org/wiki/Order_of_operations , trong đó ghi "Số mũ được xếp chồng được áp dụng từ trên xuống, tức là từ phải sang trái."
Oliver Ni

Câu trả lời:


14

APL Dyalog, 3 byte

*/⍴

Hãy thử.

Giải trình

*/⍴  Input: b (LHS), a (RHS)
  ⍴  Create b copies of a
*/   Reduce from right-to-left using exponentation

1
Này, ai đó đang đánh @Dennis! Bây giờ thì hiếm quá! (;: P
HyperNeutrino

10

J, 5 4 byte

^/@#

Đây là nghĩa đen của định nghĩa.

Sử dụng

   f =: ^/@#
   3 f 2
16
   2 f 1
1
   2 f 2
4
   2 f 5
3125
   4 f 2
65536

Giải trình

^/@#  Input: b (LHS), a (RHS)
   #  Make b copies of a
^/@   Reduce from right-to-left using exponentation

Ok a ^^ b ở trên đảo ngược b ^^ a ...
RosLuP

@RosLuP Vâng, J và APL đánh giá từ phải sang trái, vì vậy 2 ^ 2 ^ 2được đánh giá là 2 ^ (2 ^ 2)và vân vân
dặm

9

Haskell, 19 byte

a%b=iterate(a^)1!!b

Lặp lại lũy thừa bắt đầu từ 1để tạo danh sách [1,a,a^a,a^a^a,...], sau đó lấyb phần tử thứ.

Cùng chiều dài trực tiếp:

a%0=1;a%b=a^a%(b-1)

Điểm miễn phí dài hơn:

(!!).(`iterate`1).(^)

9

Toán học, 16 byte

Power@@Table@##&

Giải trình

Table@##

Tạo b bản sao của a.

Power@@...

Lũy thừa.


8

Python, 30 byte

f=lambda a,b:b<1or a**f(a,b-1)

Sử dụng định nghĩa đệ quy.


5

Python, 33 byte

lambda a,b:eval('**'.join([a]*b))

Điều này đánh giá một hàm không tên, lấy biểu diễn chuỗi của một số và một số. Ví dụ:

>>> f=lambda a,b:eval('**'.join([a]*b))
>>> f('5',2)
3125
>>>

Nếu không trộn các định dạng đầu vào như thế này, thì cũng có phiên bản 38 byte này:

lambda a,b:eval('**'.join([str(a)]*b))

2
Thật là một phương pháp tuyệt vời!
xnor


3

Perl, 19 byte

Bao gồm +1 cho -p

Cho số trên các dòng riêng biệt trên STDIN

tetration.pl
2
3
^D

tetration.pl

#!/usr/bin/perl -p
$_=eval"$_**"x<>.1

3

R, 39 byte

Hàm đệ quy:

f=function(a,b)ifelse(b>0,a^f(a,b-1),1)

2

Phần tử , 11 byte

__2:':1[^]`

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

Đây chỉ là phép lũy thừa "đơn giản" trong một vòng lặp.

__2:':1[^]`
__              take two values as input (x and y)
  2:'           duplicate y and send one copy to the control stack
     :          make y copies of x
      1         push 1 as the initial value
       [ ]      loop y times
        ^       exponentiate
          `     print result


2

dc, 35 29 byte:

?dsdsa?[ldla^sa1-d1<b]dsbxlap

Đây là chương trình hoàn chỉnh đầu tiên của tôi trong dc.


1

Perl, 40 byte

map{$a=$ARGV[0]**$a}0..$ARGV[1];print$a;

Chấp nhận hai số nguyên làm đầu vào cho hàm và đưa ra kết quả


1
Sử dụng popđể có được $ARGV[1], sau đó sử dụng "@ARGV"để có được $ARGV[0]. Sử dụng saythay vì print(tùy chọn -M5.010hoặc -Elà miễn phí). Nhưng vẫn còn, ARGVlà rất dài. Một -pchương trình hầu như luôn luôn thắng
Tôn Hospel

1

Trên thực tế , 6 byte

n`ⁿ)`Y

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

Đầu vào được lấy là b\na(\n là một dòng mới)

Giải trình:

n`ⁿ)`Y
n       a copies of b
 `ⁿ)`Y  while stack changes between each call (fixed-point combinator):
  ⁿ       pow
   )      move top of stack to bottom (for right-associativity)

1

CJam , 9 byte

q~)*{\#}*

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

Giải trình

q~          e# Take input (array) and evaluate
  )         e# Pull off last element
   *        e# Array with the first element repeated as many times as the second
    {  }*   e# Reduce array by this function
     \#     e# Swap, power


1

Ngôn ngữ GameMaker, 52 50 byte

d=a=argument0;for(c=1;c<b;c++)d=power(a,d)return d

Đây là câu trả lời thứ 300 của tôi: o
Timtech


@SimplyBeautitableArt Có, và trong khi tôi ở đó, tôi sẽ lấy ra 2 byte cho bạn.
TimTech

Lol, tốt đẹp. =) Có +1 của tôi, có vẻ đơn giản và tôi hiểu nó.
Đơn giản là nghệ thuật đẹp

@SimplyBeautitableArt Đánh giá cao
Timtech


0

Chồn 0,15 , 12 11 byte

nnDI1-[;]N.

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

Giải trình

nn             Read two integers from input
  D            Pop top of stack and duplicate next element that many times
   I1-         Push length of stack, minus 1
      [        Pop top of stack and repeat for loop that many times
       ;       Pop b, a and push a^b
        ]      Close for loop
         N.    Output as number and stop.

0

Vợt 51 byte

(define ans 1)(for((i b))(set! ans(expt a ans)))ans

Ung dung:

(define (f a b)
  (define ans 1)
  (for((i b))
    (set! ans
          (expt a ans)))
  ans)

Kiểm tra:

(f 1 2)
(f 2 2)
(f 5 2)
(f 3 3)

Đầu ra:

1
4
3125
7625597484987

0

Scala, 45 byte

Seq.fill(_:Int)(_:Double)reduceRight math.pow

Ung dung:

(a:Int,b:Double)=>Seq.fill(a)(b).reduceRight(math.pow)

Xây dựng một chuỗi các as với bcác phần tử và áp dụng math.powtừ phải sang trái.



0

Java 7, 71 57 byte

double c(int a,int b){return b>0?Math.pow(a,c(a,b-1)):1;}

Mã thử nghiệm & mã hóa:

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

class M{
  static double c(int a, int b){
    return b > 0
            ? Math.pow(a, c(a, b-1))
            :1;
  }

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

Đầu ra:

1.0
4.0
3125.0
7.625597484987E12

0

C, 50 byte

double t(int x,int n){return n?pow(x,t(x,n-1)):1;}

Nói thẳng từ định nghĩa của Tetration .


0

05AB1E , 4 byte

sF¹m

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

s     # Swap input arguments.
 F    # N times...
  ¹m  # Top of the stack ^ the first argument.

3 byte nếu các đối số có thể được hoán đổi:

F¹m

2 2 kết quả 16 chứ không phải 4 = 2 ^ 2
RosLuP

a=5, b=2nên đầu ra 3125. Tôi không chắc thứ tự bạn đang nhận đầu vào, nhưng tôi đặt 5 và 2 thì tôi nhận được kết quả sai.
FlipTack

0

Bash, 50 byte

(trong giới hạn của kiểu dữ liệu số nguyên bash)

Chơi gôn

E() { echo $(($(printf "$1**%.0s" `seq 1 $2`)1));}

Giải trình

Xây dựng biểu thức với printf, ví dụ E 2 5:

  2**2**2**2**2**1

sau đó sử dụng bash mở rộng số học tích hợp để tính kết quả

Kiểm tra

E 1 2
1

E 2 2
4

E 5 2
3125

E 3 3
7625597484987

0

Powershell, 68 byte

filter p ($a){[math]::Pow($a,$_)};iex (,$args[0]*$args[1]-join"|p ")

Đây là cách tiếp cận ngắn nhất trong ba cách tôi đã thử, tuy nhiên không phải là tổng thể tuyệt vời, tôi chắc chắn 100% có cách tiếp cận ngắn hơn nhưng một vài điều tôi đã thử bằng cách nào đó đã kết thúc với nhiều byte hơn một chút.

PS C:\++\golf> (1,2),(2,2),(5,2),(3,3) | % {.\sqsq $_[0] $_[1]}
1
4
3125
7625597484987

Đáng buồn thay, Powershell không có toán tử ^hoặc **toán tử tích hợp, hoặc đó sẽ là một câu trả lời rõ ràng 32/33 byte, tức là

iex (,$args[0]*$args[1]-join"^")


0

Tiên đề 70 byte

l(a,b)==(local i;i:=1;r:=a;repeat(if i>=b then break;r:=a^r;i:=i+1);r)

cái này ít chơi gôn

l(a,b)==
  local i
  i:=1;r:=a;repeat(if i>=b then break;r:=a^r;i:=i+1)
  r


(3) ->  [l(1,2),l(2,2),l(5,2),l(3,3),l(4,3)]

     (3)
     [1, 4, 3125, 7625597484987,
      13407807929942597099574024998205846127479365820592393377723561443721764030_
       0735469768018742981669034276900318581864860508537538828119465699464336490_
       06084096
       ]
                                                   Type: List PositiveInteger

0

Kỳ quan , 21 byte

f\@@[#0?^#1f#1-#0 1?1

Sử dụng phương pháp đệ quy. Sử dụng:

f\@@[#0?^#1f#1-#0 1?1];f 2 3

Giải pháp thưởng, 22 byte

@@:^ -#0 1(genc ^#1)#1

Một cách tiếp cận hơi độc đáo. Sử dụng:

t\@@+>#[^;#1]tk -#0 1rpt#1;t 2 3

Dễ đọc hơn:

@@
  iget
    - #0 1
    (genc ^#1) #1

Giả sử a^^b:

Tạo một danh sách vô hạn của tetrated a; cho a=2, danh sách này sẽ trông giống như [2 4 16 65536...]. Sau đó lập chỉ mục tại b-1vì Wonder không có chỉ mục.


0

Clojure, 56 byte

(fn[a b](last(take a(iterate #(apply *(repeat % b))b))))

Có lẽ có một cách ngắn hơn thông qua apply comp?

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.