I have just tried a game called Couch 2048.
(Note: You should have a look to better understand this question.)
Since it wasn't very exciting for me, I've been asking myself 'How much more till 2048!?'
That inspired me to post a challenge, because calculating this in not as easy as I thought.

Your goal:
Given a list of balls on the sofa, you have to output how many balls with a value of 2 have to fall from the sky so that one can win the game (by reaching the 2048 ball).

  • Assume the input is valid.
  • Assume the player won't drop any balls.
  • Assume the balls which fall from the sky always have a value of 2, as I've said.
  • Valid output examples: 3, "4", [5], ["6"]

Edit:
I should clarify something:
- You have to print the smallest amount of 2s needed.

Test cases:
[2048] -> 0 You've already won
[1024,1024] -> 0 You don't need any more balls to win
[1024,512,256,128,64,32,16,8,4,2] -> 1 One ball required to 'activate the chain'
[512] -> 768
[512,2] -> 767
[4,16,64] -> 982

Notes:
I'm not a native speaker - Tell me if you spotted a typo or some non-grammatical text.
If something's unclear, ask in comments.

  • why [4,16,64] -> 22? – l4m2 Nov 12 at 12:43
  • 3
    Welcome to PPCG. It looks like this challenge is: add all the elements in the array, subtract from 2048 and divide by 2 - if so, you might want to double check the last test case - if not, please use it as an example to explain why the output isn't 982. – Shaggy Nov 12 at 12:45
  • 1
    @Shaggy thx for noticing a silly mistake – micnap Nov 12 at 12:47
  • 4
    Woah, I haven't thought my first challenge will have 7 answers and 2 upvotes in the first hour! And I reached to ~28 people! – micnap Nov 12 at 13:31
  • 2
    Hey, downvoter: explain your point of view! It's necessary for the challenge to improve! – micnap Nov 13 at 15:41

27 Answers 27

Java 8, 17 bytes

s->1024-s.sum()/2

Port of @LuisFelipeDeJesusMunoz' JavaScript answer.

Try it online.

Explanation:

s->           // Method with IntStream parameter and int return-type
  1024-       //  Return 1024, minus:
   s.sum()    //   The sum of the input-IntStream
          /2  //   Divided by 2
  • 11
    That feeling when Java is beating both python(because lambda syntax) and javascript(because sum) – Quintec Nov 12 at 14:06

Brain-Flak, 72 bytes

({{}})({<({}[()()])>()}{})([{}]((((((((()()()()){}){}){}){}){}){}){}){})

Try it online!

({{}})                     # Sum entire stack
      (                  ) # Push:
       {<          >()}{}  #   The number of times you can...
         ({}[()()])        #   Subtract 2 before reaching 0

([{}]                                        ) # Subtract that from...
     ((((((((()()()()){}){}){}){}){}){}){}){}  # 1024
  • Thank you! I'm interested in learning Brain-Flak and your explanation was useful. – Galen Ivanov Nov 13 at 7:49

Python 2, 22 bytes

lambda x:4**5-sum(x)/2

Y'know, I just realized that 4**5 is the same length as 1024.

Try it online!

MathGolf, 6 5 bytes

Σc/◘+

First MathGolf answer. :)

Try it online or verify all test cases.

Explanation:

Σ         # Sum of the (implicit) input-list
 c/       # Divide it by -2
   ◘+     # Add 1024 to it (and output implicitly)

05AB1E, 5 bytes

O;žBα

Port of @LuisFelipeDeJesusMunoz' JavaScript answer.

Try it online or verify all test cases.

Explanation:

O        # Sum of the (implicit) input-list
 ;       # Halved
  žB     # Push 1024
    α    # Absolute difference between the two (and output implicitly)

APL (Dyalog Unicode), 10 bytes

2÷⍨2048-+/

Try it online!

JavaScript (Node.js), 25 bytes

Based on @Shaggys' comment and answer

-3 bytes from @Arnauld =D

_=>1024-eval(_.join`+`)/2

Try it online!

J, 10 bytes

2048-:@-+/

Try it online!

Alternative:

J, 10 bytes

1024-1#.-:

Try it online!

Ruby, 17 bytes

->l{1024-l.sum/2}

Try it online!

TI-Basic, 8 bytes

4^5-.5sum(Ans

JavaScript, 28 bytes

a=>a.map(n=>x-=n/2,x=1024)|x

Try it online

Jelly, 7 6 bytes

HSạ⁽¡ç

Try it online!

Explanation:

HSạ⁽¡ç    Example input: [4,16,64]
H         Halve input. [2, 8, 32]
 S        Sum. 42
   ⁽¡ç    Number 1024.
  ạ       Difference. 982

-1 byte by using a base-250 number

Catholicon, 5 bytes

-`L̇½Ṗ

Explanation:

-      subtract
 `L̇    1024
       from
   ½   half of the
    Ṗ  sum [of the input]
  • 1
    Is that a new golfing language I smell? :) – ETHproductions Nov 12 at 21:37
  • 1
    +1 for the new language. Another one to learn </sigh> – ElPedro Nov 12 at 22:10

Japt, 7 6 bytes

xz nH²

Try it or verify all test cases

 z         :(Floor) divide each by 2
x          :Reduce by addition
   n       :Subtract from
    H      : 32
     ²     : Squared

JavaScript (Node.js), 33 bytes

a=>!a.map(n=>x-=n/2,x=1024)>x?0:x

Try it online!

Why you don't do on [1024,1024,1024]?

R, 17 bytes

4^5-sum(scan())/2

Try it online!

TeaScript, 11 bytes

4p5)-(xx)/2

Try it online!

Stax, 6 bytes

ë3i─♠÷

Run and debug it

perl -aE, 27 bytes

$"=$:;say eval"(2048-@F)/2"

This reads a line with numbers (whitespace separated) from STDIN, and writes the answer to STDOUT.

What it does is subtract all the numbers from the input from 2048, and it divides the remainder by 2. The -a switch puts the in the array @F (one number per element). If we interpolate an array into a string (which is what we are doing here), perl puts the value of $" between the elements. The little used variable $: is be default \n-; and since white space between tokens is ignored, the result is subtracting all the numbers from 2048. The eval does the calculation.

Perl 6, 12 bytes

1024-*.sum/2

Try it online!

Anonymous Whatever lambda that takes a list and returns a number.

AWK, 26 bytes

{s+=$1}END{print 1024-s/2}

Input numbers are separated by newlines (i.e. one per line)

Neim, 6 bytes

Pretty new to Neim but got it working

𝐬ᚺςᚫᛦ𝕤

Explanation:

  𝐬         : Sum input
   ᚺ        : Divide by 2 (stack now [input summed and divided by 2])
    ς       : Variable set to 16 pushed to stack
     ᚫ      : Multiply by 2
      ᛦ     : Square (stack now [input summed and divided by 2, 1024])
       𝕤    : Subtract then absolute

Try it online!

JAVA, 30 bytes

2048-IntStream.of(a).sum()/2;

RAD, 10 bytes

1024-+/ω÷2

Try it online!

Clojure, 24 bytes

#(- 1024(/(apply + %)2))

Try it online!

Haskell, 16 bytes

(1024-).(/2).sum

An anonymous function, takes a list and returns a float.

Try it online!

F#, 24 bytes

fun f->1024-List.sum f/2

1024 minus the sum divided by 2.

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.