テトラションを印刷する


16

として表されるテトレーションは、a^^b累乗の繰り返しです。たとえば、2^^3is 2^2^2は16です。

2つの数値abが与えられると、printしますa^^b

テストケース

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

科学表記法は受け入れられます。

これはであるため、バイト数が最小のコードが優先されます。


2
どんな数字?正の整数?
xnor


9
べき乗は非関連です。b> 2のテストcadeを少なくとも1つ含める必要があります。
デニス

@デニス3 3 -> 7625597484987
ガブリエルベナミー

1
@RosLuPいいえ、3^3^3自動的にを意味し3^(3^(3))ます。en.wikipedia.org/wiki/Order_of_operationsを参照してください。「スタックされた指数は上から下、つまり右から左に適用されます」と書かれています。
オリバー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

[OK]を^^ bは反転し、Bの上にある^^ ...
RosLuP

@RosLuPはい、JおよびAPLは、右から左から評価し、その2 ^ 2 ^ 2ように評価される2 ^ (2 ^ 2)というように
マイル

9

Haskell、19バイト

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

1リストを作成するためにから始まるべき乗を繰り返し[1,a,a^a,a^a^a,...]、次にb'番目の要素を取得します。

直接同じ長さ:

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

ポイントフリーはより長いです:

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


8

Python、30バイト

f=lambda a,b:b<1or a**f(a,b-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


3

Perl、19バイト

+1を含む -p

STDINの個別の行に番号を付けます

tetration.pl
2
3
^D

tetration.pl

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


2

要素、11バイト

__2:':1[^]`

オンラインでお試しください!

これは、ループ内の単なる「単純な」べき乗です。

__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

JavaScript(ES7)、24バイト

f=(a,b)=>b?a**f(a,b-1):1

ES6バージョンは33バイトです。

f=(a,b)=>b?Math.pow(a,f(a,b-1)):1

1バイトを節約:f=a=>b=>b?a**f(a,b-1):1
Programmer5000

2

dc、35 29バイト:

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

これが私の最初の完全なプログラムですdc


1

Perl、40バイト

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

関数への入力として2つの整数を受け入れ、結果を出力します


1
を使用popして取得し$ARGV[1]、次にを使用"@ARGV"して取得し$ARGV[0]ます。(オプションまたは無料)のsay代わりに使用しprintます。しかし、それでもひどく長いです。プログラムは、ほとんど常に勝利-M5.010-EARGV-p
トンHospel

1

実は、6バイト

n`ⁿ)`Y

オンラインでお試しください!

入力は次のように解釈されますb\na\n改行です)

説明:

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

GameMaker言語、52 50バイト

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

これは私の300回目の回答です
。o– Timtech

GameMaker wtf?lol
単に美しいアート

@SimplyBeautifulArtはい、そして私がそれにいる間、私はあなたのために2バイトを外します。
ティムテック

いいね =)私の+1を持っていることは十分に単純なようであり、私はそれを理解しています。
単に美しいアート

@SimplyBeautifulArt感謝
ティムテック



0

ラケット51バイト

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

ゴルフをしていない:

(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

Scala、45バイト

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

ゴルフをしていない:

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

未ゴルフ&テストコード:

ここで試してみてください。

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=2出力する必要があります3125。あなたが入力をどの順序で取っているのかわかりませんが、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 ")

これは私が試した3つのアプローチの中で最も短く、全体としてはそれほど素晴らしいものではありませんが、より短いアプローチがあることは100%確信していますが、私が試したいくつかのことはややバイト数が増えました。

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

悲しいことにPowerShellは何を内蔵していない^か、**オペレータ、またはそれは、つまりクリーン32/33バイトの答えだろう

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)

これは少ないゴルフ

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.