พิมพ์ tetration


16

การเตตเตจ, แทนด้วยa^^b, เป็นการยกกำลังซ้ำ ตัวอย่างเช่น2^^3คือ2^2^2ซึ่งคือ 16

ได้รับตัวเลขสองและพิมพ์a^^b

กรณีทดสอบ

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

สัญลักษณ์ทางวิทยาศาสตร์เป็นที่ยอมรับ

จำไว้ว่านี่คือดังนั้นโค้ดที่มีจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ


2
ตัวเลขประเภทใด จำนวนเต็มบวก?
xnor


9
การยกกำลังนั้นไม่เชื่อมโยงกัน คุณควรจะรวมถึงเคดทดสอบอย่างน้อยหนึ่งกับb> 2
เดนนิส

@Dennis3 3 -> 7625597484987
Gabriel Benamy

1
@RosLuP ไม่มีหมายถึงโดยอัตโนมัติ3^3^3 3^(3^(3))ดูen.wikipedia.org/wiki/Order_of_operationsซึ่งมีข้อความว่า "มีการใช้เลขชี้กำลังแบบซ้อนกันจากบนลงล่างเช่นจากขวาไปซ้าย"
Oliver Ni

คำตอบ:


14

Dyalog APL ขนาด 3 ไบต์

*/⍴

TryAPL

คำอธิบาย

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

1
เฮ้คนที่เต้น @Dennis! ตอนนี้หายากแล้ว! (;: P
HyperNeutrino

10

J, 5 4 ไบต์

^/@#

นี่คือความหมายของคำบรรยาย

การใช้

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

คำอธิบาย

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

ตกลง ^^ b กลับด้านบนข ^^ ก ...
RosLuP

@RosLuP ใช่ J และ APL ประเมินจากขวาไปซ้ายเพื่อให้2 ^ 2 ^ 2ได้รับการประเมินเป็น2 ^ (2 ^ 2)และอื่น ๆ
ไมล์

9

Haskell, 19 ไบต์

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

วนซ้ำ exponentiating เริ่มต้นที่1จะสร้างรายการ[1,a,a^a,a^a^a,...]แล้วใช้bองค์ประกอบ '

ความยาวเท่ากันโดยตรง:

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

จุดฟรียาวกว่า:

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



5

Python ขนาด 33 ไบต์

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

สิ่งนี้ประเมินว่าเป็นฟังก์ชั่นที่ไม่มีชื่อซึ่งใช้การแทนค่าสตริงของตัวเลขและตัวเลข ตัวอย่างเช่น:

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

หากรูปแบบอินพุตผสมเช่นนี้จะไม่นับรวมถึงรุ่น 38 ไบต์นี้ด้วย:

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

2
ช่างเป็นวิธีที่ยอดเยี่ยม!
xnor






2

dc, 35 29 ไบต์:

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

dcนี่คือโปรแกรมที่สมบูรณ์ครั้งแรกของฉันใน


1

Perl, 40 ไบต์

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

ยอมรับจำนวนเต็มสองจำนวนเป็นอินพุตเข้าสู่ฟังก์ชันและแสดงผลลัพธ์


1
ใช้popที่จะได้รับ$ARGV[1]แล้วใช้จะได้รับ"@ARGV" $ARGV[0]ใช้sayแทนprint(ตัวเลือก-M5.010หรือ-Eฟรี) แต่ถึงกระนั้นก็ARGVมีความยาวชะมัด -pโปรแกรมเกือบเสมอชนะ
Ton Hospel




1

GameMaker Language, 52 50 ไบต์

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

นี่คือคำตอบที่ 300 ของฉัน: o
Timtech


@SimplyBeautifulArt ใช่และในขณะที่ฉันอยู่ที่นี่ฉันจะถอด 2 ไบต์ให้คุณ
Timtech

ฮ่า ๆ ดี =) ให้ +1 ของฉันดูง่ายพอและฉันเข้าใจ
ศิลปะที่สวยงามเรียบง่าย

@SimplyBeautifulArt ชื่นชม
Timtech



0

แร็กเก็ต 51 ไบต์

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

Ungolfed:

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

การทดสอบ:

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

เอาท์พุท:

1
4
3125
7625597484987

0

สกาลา 45 ไบต์

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

Ungolfed:

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

สร้างลำดับของas ด้วยbองค์ประกอบและใช้math.powจากขวาไปซ้าย



0

Java 7, 71 57 ไบต์

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

Ungolfed & รหัสการทดสอบ:

ลองที่นี่

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

เอาท์พุท:

1.0
4.0
3125.0
7.625597484987E12


0

05AB1E , 4 ไบต์

sF¹m

ลองออนไลน์!

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

3 ไบต์หากสามารถสลับอาร์กิวเมนต์ได้:

F¹m

2 2 ผล 16 ไม่ใช่ 4 = 2 ^ 2
RosLuP

a=5, b=23125เอาท์พุทควร ฉันไม่แน่ใจว่าคุณกำลังป้อนคำสั่งซื้ออะไร แต่ฉันใส่ใน 5 และ 2 ฉันได้รับผลที่ผิด
FlipTack

0

Bash ขนาด 50 ไบต์

(ภายในขอบเขตของชนิดข้อมูลจำนวนเต็ม bash)

แข็งแรงเล่นกอล์ฟ

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

คำอธิบาย

สร้างนิพจน์ด้วย printf เช่น E 2 5:

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

จากนั้นใช้ส่วนขยายเลขคณิตของ bash ในตัวเพื่อคำนวณผลลัพธ์

ทดสอบ

E 1 2
1

E 2 2
4

E 5 2
3125

E 3 3
7625597484987

0

Powershell, 68 ไบต์

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

นี่เป็นวิธีที่สั้นที่สุดในสามวิธีที่ฉันพยายามไม่ใช่แบบโดยรวมที่ยอดเยี่ยม แต่ฉันแน่ใจว่า 100% มีวิธีที่สั้นกว่า

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

Sadly Powershell ไม่มี built-in ^หรือ**โอเปอเรเตอร์หรือจะเป็นคำตอบแบบ 32/33 byte ที่สะอาด

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


0

ความจริง 70 ไบต์

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

นี้น้อย golfed

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

สงสัย 21 ไบต์

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

ใช้วิธีเรียกซ้ำ การใช้งาน:

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

โบนัสโซลูชั่น 22 ไบต์

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

วิธีการที่แปลกใหม่เล็กน้อย การใช้งาน:

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

อ่านเพิ่มเติมได้:

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

สมมติว่าa^^b:

สร้างรายการที่ไม่มีที่สิ้นสุดของ tetrated a; สำหรับรายการนี้จะมีลักษณะดังนี้a=2 [2 4 16 65536...]จากนั้นจัดทำดัชนีที่b-1เพราะ Wonder มีดัชนีเป็นศูนย์


0

Clojure 56 ไบต์

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

อาจจะมีวิธีที่สั้นกว่าผ่านapply comp?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.