# Couch 2048: How much more till 2048?

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.

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", , ["6"]

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

Test cases:
 -> 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'
 -> 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.

• why [4,16,64] -> 22?
– l4m2
Nov 12, 2018 at 12:43
• 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. Nov 12, 2018 at 12:45
• @Shaggy thx for noticing a silly mistake
– user83982
Nov 12, 2018 at 12:47
• 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!
– user83982
Nov 12, 2018 at 13:31
• Hey, downvoter: explain your point of view! It's necessary for the challenge to improve!
– user83982
Nov 13, 2018 at 15:41

# Java 8, 17 bytes

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


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

• That feeling when Java is beating both python(because lambda syntax) and javascript(because sum) Nov 12, 2018 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. Nov 13, 2018 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/◘+


Explanation:

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


# 05AB1E, 5 bytes

O;žBα


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!

# J, 10 bytes

1024-1#.-:


Try it online!

# Ruby, 17 bytes

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


Try it online!

# Catholicon, 5 bytes

-L̇½Ṗ


Explanation:

-      subtract
L̇    1024
from
½   half of the
Ṗ  sum [of the input]

• Is that a new golfing language I smell? :) Nov 12, 2018 at 21:37
• +1 for the new language. Another one to learn </sigh> Nov 12, 2018 at 22:10

# 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

# Japt, 7 6 bytes

xz nH²

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


# 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.

# Vyxal, 5 bytes

∑k¦ε½


Try it Online!

∑     # Sum
k¦   # 2048
ε  # Abs. diff.
½ # halved


# 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 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;


1024-+/ω÷2


Try it online!

# Clojure, 24 bytes

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


Try it online!

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