Given an input, print all exponents where the base and power sum to the input

20

2

So this is my first challenge on this site.

The challenge is to take in an input integer \$n\$, which will be positive, and print, in ascending order (\$1\$ to \$n\$, including n), the output of \$i^{(n-i)}\$ (where \$i\$ is the current integer).

Example

Given the input 5, the program will print:

1  
8  
9  
4  
1  

\$1^4\$ is 1 and \$1+4=5\$
\$2^3\$ is 8 and \$2+3=5\$
\$3^2\$ is 9 and \$3+2=5\$
\$4^1\$ is 4 and \$4+1=5\$
\$5^0\$ is 1 and \$5+0=5\$

Input and Output

Input will be in the form of a positive integer. Output will be a list of numbers, delimited by either commas or new lines.

This is , so shortest code wins.

Embodiment of Ignorance

Posted 2018-11-28T04:00:27.633

Reputation: 7 014

5the comma/newline detail should be omitted, it is normal practice around here to let output of lists be in any convenient format, including as a list/array object being returned by a function – Sparr – 2018-11-28T04:20:16.577

3Is the input always greater than 0 or do we have to deal with 0 and negatives? – Veskah – 2018-11-28T04:21:00.550

Inputs will always be positive – Embodiment of Ignorance – 2018-11-28T05:01:12.800

6Two equally short answers doesn't matter. If you feel like accepting an answer, choose the earliest posted one. However I strongly recommend waiting at least a few days, and would suggest never accepting an answer (to encourage more submissions). – Οurous – 2018-11-28T05:21:58.843

Are we allowed to start with 0^n or must we start at 1? – JDL – 2018-11-28T10:58:52.207

2Shouldn't the title be "Given an integer, print all the powers obtained with a base and an exponent that sum to the input"? – Nicola Sap – 2018-11-28T14:12:35.363

is a trailing comma at the end of the output allowed? – bznein – 2018-11-29T13:09:28.547

You can have a trailing comma, since it doesn't interfere with the primary objective – Embodiment of Ignorance – 2018-11-29T16:19:41.383

@NicolaSap Should probably also be a positive integer. – None – 2018-11-30T08:06:43.847

Answers

6

APL (Dyalog Unicode), 8 5 bytes

⍳*⊢-⍳

Try it online!

Anonymous prefix tacit function. TIO tests for the range [1..10].

Thanks @lirtosiast for 3 bytes.

How:

⍳*⊢-⍳ ⍝ Tacit function
    ⍳ ⍝ Range. ⍳n generates the vector [1..n].
  ⊢- ⍝ Subtracted from the argument. The vector is now [n-1,n-2,...,0]
⍳*    ⍝ Exponentiate using the range [1..n] as base. The result is the vector
      ⍝ [1^(n-1), 2^(n-2), 3^(n-3),...]

J. Sallé

Posted 2018-11-28T04:00:27.633

Reputation: 3 233

2⍳*⊢-⍳ is 5 bytes, using ⎕IO←1. – lirtosiast – 2018-11-28T18:43:35.403

@lirtosiast took me a while to figure out why does that work, but I got it. Thanks. – J. Sallé – 2018-11-29T12:20:41.140

5

Perl 6, 19 bytes

{^$_+1 Z**[R,] ^$_}

Try it online!

Anonymous code block that takes a number and returns a list. Zip exponents the range 1 to input and the range input-1 to 0

Jo King

Posted 2018-11-28T04:00:27.633

Reputation: 38 234

5

Haskell, 23 bytes

f i=[x^(i-x)|x<-[1..i]]

Try it online!

Alternative version, also 23 bytes:

f i=(^)<*>(i-)<$>[1..i]

nimi

Posted 2018-11-28T04:00:27.633

Reputation: 34 639

5

Aheui (esotope), 193 164 bytes (56 chars)

방빠싹받분샥퍼붇바파쟈뿌차샦히망맣여
타빠바푸투반또분뽀뿌서썪삯타삯받반타
석차샦져쌲볼어타토싻삭빠쏛ㅇ또섞썪뻐

Try it online!

Try it on AVIS(Korean); just copy and paste code above, press start button, input a number, see how it moves. To see output, press the >_ icon on left side.


It's not golfed much, but I give it a shot.

cobaltp

Posted 2018-11-28T04:00:27.633

Reputation: 401

Is it possible to chose a character set, so that each character is stored in 2 bytes? – tsh – 2018-11-29T02:52:35.190

@tsh According to Aheui specification, an Aheui code consists of only UTF-8 characters.

– cobaltp – 2018-11-29T05:07:38.527

5

Japt, 5 bytes

õ_p´U

Try it

õ         :Range [1,input]
 _        :Map
  p       :  Raise to the power of
   ´U     :  Input decremented

Shaggy

Posted 2018-11-28T04:00:27.633

Reputation: 24 623

4

Pyth, 5 bytes

_m^-Q

Try it online!

Optimally encoded this would be 4.106 bytes.

_                reverse of the following list:
 m               map the following lambda d:
  ^                (N-d)**d
   -Qd             
      d
       Q         over [0,...,N-1]

lirtosiast

Posted 2018-11-28T04:00:27.633

Reputation: 20 331

4

J, 10 bytes

(>:^|.)@i.

Try it online!

If we really need to separate the numbers by a newline:

J, 13 bytes

,.@(>:^|.)@i.

Try it online!

Galen Ivanov

Posted 2018-11-28T04:00:27.633

Reputation: 13 815

3

Jelly, 5 bytes

R*ḶU$

Try it online!

R                [1,...,n]
 *               to the power of
  ḶU$            [0,...,n-1] reversed

lirtosiast

Posted 2018-11-28T04:00:27.633

Reputation: 20 331

3

Octave, 18 bytes

@(n)(t=1:n).^(n-t)

Try it online!

Thanks Luis Mendo, using internal variable saves 3 bytes.

tsh

Posted 2018-11-28T04:00:27.633

Reputation: 13 072

3

PHP, 32 bytes

while($argn)echo++$i**--$argn,_;

Run as pipe with -nR or try it online.

Titus

Posted 2018-11-28T04:00:27.633

Reputation: 13 814

3

Jelly, 4 bytes

*ạ¥€

Try it online!

Erik the Outgolfer

Posted 2018-11-28T04:00:27.633

Reputation: 38 134

2

JavaScript (Node.js), 33 32 bytes

n=>(g=i=>--n?++i**n+[,g(i)]:1)``

Try it online!

-3 bytes with credits to @Shaggy, and -1 byte by @l4m2!

JavaScript (Node.js), 36 bytes

f=(n,i=1)=>n--?[i++**n,...f(n,i)]:[]

Try it online!

JavaScript (Node.js), 37 bytes

n=>[...Array(n)].map(x=>++i**--n,i=0)

Try it online!

Shieru Asakoto

Posted 2018-11-28T04:00:27.633

Reputation: 4 445

33 bytes – Shaggy – 2018-11-28T08:03:00.037

32 – l4m2 – 2018-11-28T14:25:32.797

2

Wolfram Language (Mathematica), 24 20 18 bytes

(x=Range@#)^(#-x)&

Try it online!

-4 thanks @lirtosiast.

Shieru Asakoto

Posted 2018-11-28T04:00:27.633

Reputation: 4 445

2

MathGolf, 6 bytes

rx\╒m#

Try it online!

Jo King

Posted 2018-11-28T04:00:27.633

Reputation: 38 234

I have implemented reverse subtraction, multiplication and division, but it looks like a reverse power operator could come in handy? – maxb – 2018-11-28T07:33:04.767

2

Python 2, 40 bytes

lambda n:[i**(n-i)for i in range(1,n+1)]   #Outputs a list

Try it online!

Python 2, 41 bytes

n,i=input(),0
exec"print(n-i)**i;i+=1;"*n   #Prints in reversed order

Try it online!

Vedant Kandoi

Posted 2018-11-28T04:00:27.633

Reputation: 1 955

2

Ruby, 27 bytes

->n{(1..n).map{|r|r**n-=1}}

Try it online!

G B

Posted 2018-11-28T04:00:27.633

Reputation: 11 099

2

QBasic, 3533 bytes

Thank you @Neil for 2 bytes!

INPUT a
FOR b=1TO a
?b^(a-b)
NEXT

Slightly expanded version on REPL.IT because the interpreter in't entirely up-to-spec.

Output

QBasic (qb.js)
Copyright (c) 2010 Steve Hanov

   5
1
8
9
4
1

steenbergh

Posted 2018-11-28T04:00:27.633

Reputation: 7 772

Save 2 bytes by outputting the list in the correct order! (b^(a-b) for b=1..a) – Neil – 2018-11-28T12:14:57.693

@Neil Thanks, I've worked it in! – steenbergh – 2018-11-28T13:26:50.210

2

Retina, 35 bytes

.+
*
_
$$.($.'*$($.>`$*)_¶
%~`^
.+¶

Try it online! Explanation:

.+
*

Convert the input to unary.

_

Match each position. This then sets several replacement variables. $` becomes the left of the match; $>` modifies this to be the left and match; $.>` modifies this to take the length, i.e. the current index. $' meanwhile is the right of the match, so $.' is the length i.e. the current exponent.

$$.($.'*$($.>`$*)_¶

Create a string $.( plus $.' repetitions of $.>`* plus _. For an example, for an index of 2 in an original input of 5, $.' is 3 and $.>` is 2 so the resulting string is $.(2*2*2*_. This conveniently is a Retina replacement expression that caluclates 2³. Each string is output on its own line.

%~`^
.+¶

For each line generated by the previous stage, prefix a line .+ to it, turning it into a replacement stage, and evaluate that stage, thereby calculating the expression.

Neil

Posted 2018-11-28T04:00:27.633

Reputation: 95 035

2

F# (.NET Core), 42 bytes

let f x=Seq.map(fun y->pown y (x-y))[1..x]

Try it online!

dana

Posted 2018-11-28T04:00:27.633

Reputation: 2 541

2

Java, 59 Bytes

for(int i=1;a+1>i;i++)System.out.println(Math.pow(i,a-i));

isaace

Posted 2018-11-28T04:00:27.633

Reputation: 171

1Welcome to PPCG. It looks like this requires "input" be assigned to the predefined variable a, which we don't allow. – Shaggy – 2018-11-29T21:01:32.173

2

Hello, here's a fix for you: n->{for(int i=0;i++<n;)System.out.println(Math.pow(i,n-i));} 60 bytes (code and test cases in the link)

– Olivier Grégoire – 2018-11-30T09:20:44.837

2

C# (Visual C# Interactive Compiler), 46 bytes

x=>new int[x].Select((_,i)=>Math.Pow(i+1,--x))

Try it online!

dana

Posted 2018-11-28T04:00:27.633

Reputation: 2 541

2

MATL, 5 bytes

:Gy-^

Try it online!

Explanation

Consider input 5 as an example.

:     % Implicit input. Range
      % STACK: [1 2 3 4 5]
G     % Push input again
      % STACK: [1 2 3 4 5], 5
y     % Duplicate from below
      % STACK: [1 2 3 4 5], 5, [1 2 3 4 5]
-     % Subtract, element-wise
      % STACK: [1 2 3 4 5], [4 3 2 1 0]
^     % Power, element-wise. Implicit display
      % STACK: [1 8 9 4 1]

Luis Mendo

Posted 2018-11-28T04:00:27.633

Reputation: 87 464

1

Clean, 37 bytes

import StdEnv
$n=[i^(n-i)\\i<-[1..n]]

Try it online!

Defines $ :: Int -> [Int] taking an integer and returning the list of results.

$ n                // function $ of n
 = [i ^ (n-i)      // i to the power of n minus i
    \\ i <- [1..n] // for each i in 1 to n
   ]

Οurous

Posted 2018-11-28T04:00:27.633

Reputation: 7 916

1

R, 34 bytes

x=1:scan();cat(x^rev(x-1),sep=',')

Try it online!

Giuseppe

Posted 2018-11-28T04:00:27.633

Reputation: 21 077

Is the default "sep" not a space? Would that not work? – stuart stevenson – 2018-11-29T15:51:31.123

1@stuartstevenson "Output will be a list of numbers, delimited by either commas or new lines." – Giuseppe – 2018-11-29T15:53:59.603

1

Lua, 43 41 bytes

-2 bytes thanks to @Shaggy

s=io.read()for i=1,s do print(i^(s-i))end

Try it online!

ouflak

Posted 2018-11-28T04:00:27.633

Reputation: 925

1I don't think you need the +0; seems to work without it. – Shaggy – 2018-11-28T10:06:09.100

1

05AB1E, 5 bytes

LD<Rm

Port of @lirtosiast's Jelly answer.

Try it online.

Explanation:

L      # List in the range [1, (implicit) input integer]
       #  i.e. 5 → [1,2,3,4,5]
 D<    # Duplicate this list, and subtract 1 to make the range [0, input)
       #  i.e. [1,2,3,4,5] → [0,1,2,3,4]
   R   # Reverse it to make the range (input, 0]
       #  i.e. [0,1,2,3,4] → [4,3,2,1,0]
    m  # Take the power of the numbers in the lists (at the same indices)
       # (and output implicitly)
       #  i.e. [1,2,3,4,5] and [4,3,2,1,0] → [1,8,9,4,1]

Kevin Cruijssen

Posted 2018-11-28T04:00:27.633

Reputation: 67 575

1

R, 22 bytes

n=scan();(1:n)^(n:1-1)

Fairly self-explanatory; note that the : operator is higher precendence than the - operator so that n:1-1 is shorter than (n-1):0

If we are allowed to start at 0, then we can lose two bytes by using (0:n)^(n:0) avoiding the need for a -1.

JDL

Posted 2018-11-28T04:00:27.633

Reputation: 1 135

1

Charcoal, 9 bytes

I⮌ENX⁻θιι

Try it online! Link is to verbose version of code. Explanation:

   N        Input as a number
  E         Map over implicit range
       ι    Current value
     ⁻      Subtracted from
      θ     First input
    X       Raised to power
        ι   Current value
 ⮌          Reverse list
I           Cast to string
             Implicitly print on separate lines

Neil

Posted 2018-11-28T04:00:27.633

Reputation: 95 035

1

C# (Visual C# Interactive Compiler), 55 bytes

v=>Enumerable.Range(0,v--).Select(i=>Math.Pow(i+1,v--))

Try it online!

auhmaan

Posted 2018-11-28T04:00:27.633

Reputation: 906

1

C++ (clang), 80 bytes, 71 bytes, 63 bytes, 59 bytes, 56 bytes

int n,c=1;cin>>n;for(;c<=n;++c){cout<<pow(c,n-c)<<endl;}

Try it online!

ARandomGuest

Posted 2018-11-28T04:00:27.633

Reputation: 11

1

Perl 5 -n, 21 bytes

say++$\**--$_ while$_

Try it online!

Xcali

Posted 2018-11-28T04:00:27.633

Reputation: 7 671

1

Pari/GP, 22 bytes

n->[i^(n-i)|i<-[1..n]]

Try it online!

alephalpha

Posted 2018-11-28T04:00:27.633

Reputation: 23 988

1

PowerShell, 39 bytes

param($n)1..$n|%{"1"+"*$_"*($n-$_)|iex}

Try it online!

Because exponents are expensive in Powershell, this works by using invoke-expression to parse and calculate the string "1*n*n...*n" Works because the first and last entry are always 1.

Veskah

Posted 2018-11-28T04:00:27.633

Reputation: 3 580

Nice. The length of param($n)1..$n|%{[Math]::Pow($_,$n-$_)} is 39 bytes too :) – mazzy – 2018-12-07T09:10:55.227

@mazzy I actually did check that after posting this and chuckled at finding out. – Veskah – 2018-12-07T20:59:01.953

1

Gambit Scheme (gsi), 52 bytes

(lambda(x)(map(lambda(y)(expt y(-x y)))(iota x 1)))

For some reason this code does not appear to work on TIO. It works fine on my machine.

Explanation:

(lambda(x)(map(lambda(y)(expt y(- x y)))(iota x 1)))    Full program
(lambda(x)                                        )    Anonymous function with arg x
          (map(lambda(y)              )(iota x 1))     Map over the range 1 to input
                        (expt y                        Raises the mapped value to...
                               (- x y)                 The input value minus the mapped value (this powers the list by the reverse)

Comrade SparklePony

Posted 2018-11-28T04:00:27.633

Reputation: 5 784

0

C (gcc) (-lm), 52 bytes

f(n,i){for(i=n;i--;printf("%.0f\n",pow(n-i,i)));}

Try it online!

ErikF

Posted 2018-11-28T04:00:27.633

Reputation: 2 149

Can't you just use %.f withouth the 0? Also, in a trailing comma is allowed, youcan replace \n with , – bznein – 2018-11-29T13:11:52.113

0

APL(NARS), 11 chars, 22 bytes

{⍪⍵*⌽⍵-1}∘⍳

test:

  f←{⍪⍵*⌽⍵-1}∘⍳
  f 5
1
8
9
4
1

RosLuP

Posted 2018-11-28T04:00:27.633

Reputation: 3 036

0

SAS, 71 bytes

data a;input n;o=cat(1);do x=1 to n-1;o=catx(',',(n-x)**x,o);end;cards;

Input goes after the cards; statement, separated by newlines, like so:

data a;input n;o=cat(1);do x=1 to n-1;o=catx(',',(n-x)**x,o);end;cards;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

Outputs a dataset containing the input n, and comma-separated output string o (and also helper variable x)

+----+------------------------------------------------------------------------------------------+----+
| n  |                                            o                                             | x  |
+----+------------------------------------------------------------------------------------------+----+
¦ 1  ¦ 1                                                                                        ¦ 1  ¦
¦ 2  ¦ 1,1                                                                                      ¦ 2  ¦
¦ 3  ¦ 1,2,1                                                                                    ¦ 3  ¦
¦ 4  ¦ 1,4,3,1                                                                                  ¦ 4  ¦
¦ 5  ¦ 1,8,9,4,1                                                                                ¦ 5  ¦
¦ 6  ¦ 1,16,27,16,5,1                                                                           ¦ 6  ¦
¦ 7  ¦ 1,32,81,64,25,6,1                                                                        ¦ 7  ¦
¦ 8  ¦ 1,64,243,256,125,36,7,1                                                                  ¦ 8  ¦
¦ 9  ¦ 1,128,729,1024,625,216,49,8,1                                                            ¦ 9  ¦
¦ 10 ¦ 1,256,2187,4096,3125,1296,343,64,9,1                                                     ¦ 10 ¦
¦ 11 ¦ 1,512,6561,16384,15625,7776,2401,512,81,10,1                                             ¦ 11 ¦
¦ 12 ¦ 1,1024,19683,65536,78125,46656,16807,4096,729,100,11,1                                   ¦ 12 ¦
¦ 13 ¦ 1,2048,59049,262144,390625,279936,117649,32768,6561,1000,121,12,1                        ¦ 13 ¦
¦ 14 ¦ 1,4096,177147,1048576,1953125,1679616,823543,262144,59049,10000,1331,144,13,1            ¦ 14 ¦
¦ 15 ¦ 1,8192,531441,4194304,9765625,10077696,5764801,2097152,531441,100000,14641,1728,169,14,1 ¦ 15 ¦
+----------------------------------------------------------------------------------------------------+

Josh Eller

Posted 2018-11-28T04:00:27.633

Reputation: 241

0

C (clang), 47 bytes

i;f(a){for(i=a;i;printf("%.f,",pow(i,a-i--)));}

Try it online!

Prints in reverse order, delimited with commas.

Logern

Posted 2018-11-28T04:00:27.633

Reputation: 845