Imprimir a tetração

16

A tetração, representada como a^^b, é repetida exponenciação. Por exemplo, 2^^3é 2^2^2, o que é 16.

Dados dois números um e b , de impressão a^^b.

Casos de teste

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

Notação científica é aceitável.

Lembre-se de que isso é , portanto o código com o menor número de bytes vence.

Oliver Ni
fonte
2
Que tipo de números? Inteiros positivos?
Xnor
Relacionado
acrolith 22/10
9
A exponenciação não é associativa. Você deve incluir pelo menos um cade de teste com b> 2 .
Dennis
@ Dennis3 3 -> 7625597484987
Gabriel Benamy
1
@RosLuP Não, 3^3^3significa automaticamente 3^(3^(3)). Veja en.wikipedia.org/wiki/Order_of_operations , onde diz "Expoentes empilhados são aplicados de cima para baixo, ou seja, da direita para a esquerda".
Oliver Ni

Respostas:

14

Dyalog APL, 3 bytes

*/⍴

TryAPL.

Explicação

*/⍴  Input: b (LHS), a (RHS)
  ⍴  Create b copies of a
*/   Reduce from right-to-left using exponentation
milhas
fonte
1
Ei, alguém que está batendo no @Dennis! Agora isso é raro! (;: P
HyperNeutrino
10

J, 5 4 bytes

^/@#

Esta é literalmente a definição de tetração.

Uso

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

Explicação

^/@#  Input: b (LHS), a (RHS)
   #  Make b copies of a
^/@   Reduce from right-to-left using exponentation
milhas
fonte
Ok a ^^ b está acima invertida b ^^ um ...
RosLuP
@RosLuP Sim, J e APL avaliar a partir da direita para a esquerda, então 2 ^ 2 ^ 2é avaliada como 2 ^ (2 ^ 2)e assim por diante
milhas
9

Haskell, 19 bytes

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

Repete o exponenciamento começando em 1para produzir a lista e [1,a,a^a,a^a^a,...], em seguida, pegue o b'th th elemento.

Mesmo comprimento diretamente:

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

O ponto livre é mais longo:

(!!).(`iterate`1).(^)
xnor
fonte
9

Mathematica, 16 bytes

Power@@Table@##&

Explicação

Table@##

Faça b cópias de a.

Power@@...

Exponenciação.

JungHwan Min
fonte
8

Python, 30 bytes

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

Usa a definição recursiva.

xnor
fonte
5

Python, 33 bytes

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

Isso avalia uma função sem nome, que leva a representação de seqüência de caracteres de um número e um número. Por exemplo:

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

Se misturar formatos de entrada como esse não for contabilizado, também haverá esta versão de 38 bytes:

lambda a,b:eval('**'.join([str(a)]*b))
DJMcMayhem
fonte
2
Que método legal!
Xnor
3

Perl, 19 bytes

Inclui +1 para -p

Dê números em linhas separadas no STDIN

tetration.pl
2
3
^D

tetration.pl

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

R, 39 bytes

Função recursiva:

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

Elemento , 11 bytes

__2:':1[^]`

Experimente online!

Isso é apenas exponenciação "direta" em um loop.

__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
PhiNotPi
fonte
2

JavaScript (ES7), 24 bytes

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

A versão do ES6 é de 33 bytes:

f=(a,b)=>b?Math.pow(a,f(a,b-1)):1
ETHproductions
fonte
Salve 1 byte:f=a=>b=>b?a**f(a,b-1):1
programmer5000
2

dc, 35 29 bytes:

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

Aqui está o meu primeiro programa completo em dc.

R. Kap
fonte
1

Perl, 40 bytes

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

Aceita dois números inteiros como entrada para a função e gera o resultado

Gabriel Benamy
fonte
1
Use poppara obter $ARGV[1], então use "@ARGV"para obter $ARGV[0]. Use em sayvez de print(opção -M5.010ou -Eé grátis). Mas ainda assim, ARGVé terrivelmente longo. Um -pprograma quase sempre vence
Ton Hospel
1

Na verdade , 6 bytes

n`ⁿ)`Y

Experimente online!

A entrada é tomada como b\na ( \né uma nova linha)

Explicação:

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)
Mego
fonte
1

CJam , 9 bytes

q~)*{\#}*

Experimente online!

Explicação

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
Luis Mendo
fonte
1

PHP, 51 bytes

for($b=$p=$argv[1];++$i<$argv[2];)$p=$b**$p;echo$p;
Jörg Hülsermann
fonte
1

Idioma do GameMaker, 52 50 bytes

d=a=argument0;for(c=1;c<b;c++)d=power(a,d)return d
Timtech
fonte
Esta é a minha resposta 300: o
Timtech
GameMaker wtf? lol
Arte simplesmente linda
@SimplyBeautifulArt Sim, e enquanto estiver nisso, tirarei 2 bytes para você.
Timtech 28/10
Lol agradável. =) Tenho o meu +1, parece bastante simples e eu entendo.
Simply Beautiful Art
@SimplyBeautifulArt Appreciated
Timtech
0

Pitão, 6 bytes

u^QGE1

Experimente online.

Explicação

          (implicit: input a to Q)
     1    Start from 1.
u   E     b times,
 ^GQ      raise the previous number to power a.
PurkkaKoodari
fonte
0

Tamanho 0.15 , 12 11 bytes

nnDI1-[;]N.

Experimente aqui!

Explicação

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.
El'endia Starman
fonte
0

Raquete 51 bytes

(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)

Teste:

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

Resultado:

1
4
3125
7625597484987
rnso
fonte
0

Scala, 45 bytes

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

Ungolfed:

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

Crie uma sequência de as com belementos e aplique math.powda direita para a esquerda.

corvus_192
fonte
0

TI-Basic, 19 bytes

Prompt A,B
A
For(C,2,B
A^Ans
End
Timtech
fonte
0

Java 7, 71 57 bytes

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

Ungolfed & código de teste:

Experimente aqui.

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

Resultado:

1.0
4.0
3125.0
7.625597484987E12
Kevin Cruijssen
fonte
0

C, 50 bytes

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

Direto da definição de Tetração .

Karl Napf
fonte
0

05AB1E , 4 bytes

sF¹m

Experimente online!

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

3 bytes se os argumentos puderem ser trocados:

F¹m
Urna de polvo mágico
fonte
2 2 resultado 16 não 4 = 2 ^ 2
RosLuP 17/11
a=5, b=2deve produzir 3125. Não sei em que ordem você está recebendo a entrada, mas, no entanto, coloquei 5 e 2 e obtive o resultado errado.
FlipTack
0

Bash, 50 bytes

(dentro dos limites do tipo de dados inteiro bash)

Golfe

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

Explicação

Crie expressão com printf, por exemplo, E 2 5:

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

use a expansão aritmética integrada do bash para calcular o resultado

Teste

E 1 2
1

E 2 2
4

E 5 2
3125

E 3 3
7625597484987
zepelim
fonte
0

Powershell, 68 bytes

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

Esta é a mais curta das três abordagens que tentei, no geral, não tão boa assim, tenho 100% de certeza de que há uma abordagem mais curta, mas as poucas coisas que tentei de alguma forma acabaram com um pouco mais de bytes.

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

Infelizmente, o Powershell não possui um operador ^ou **operador embutido , ou seria uma resposta limpa de 32/33 bytes, ou seja,

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

colsw
fonte
0

Axioma 70 bytes

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

isso menos jogado

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
RosLuP
fonte
0

Maravilha , 21 bytes

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

Usa a abordagem recursiva. Uso:

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

Solução de bônus, 22 bytes

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

Uma abordagem levemente não convencional. Uso:

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

Mais legível:

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

Assumindo a^^b :

Gera uma lista infinita de titulado a; pois a=2, essa lista seria algo parecido [2 4 16 65536...]. Então indexa em b-1porque Wonder é zero-indexado.

Mama Fun Roll
fonte
0

Clojure, 56 bytes

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

Talvez haja uma maneira mais curta via apply comp?

NikoNyrh
fonte