Sofá 2048: Quanto mais até 2048?

20

Acabei de experimentar um jogo chamado Couch 2048 .
(Observação: você deve entender melhor essa pergunta.)
Como não foi muito emocionante para mim, eu me perguntei: 'Quanto mais até 2048 !?'
Isso me inspirou a postar um desafio, porque calcular isso não é tão fácil quanto eu pensava.

Seu objetivo:
Dada uma lista de bolas no sofá, você deve gerar quantas bolas com um valor de 2 cairão do céu para que se possa vencer o jogo (alcançando a bola 2048).

  • Suponha que a entrada seja válida.
  • Suponha que o jogador não deixe cair nenhuma bola.
  • Suponha que as bolas que caem do céu sempre tenham um valor 2, como eu disse.
  • Exemplos de saída válidos: 3, "4", [5], ["6"]

Editar:
devo esclarecer uma coisa:
- Você precisa imprimir a menor quantidade de 2s necessária.

Casos de teste:
[2048] -> 0 você já venceu
[1024,1024] -> 0Você não precisa de mais bolas para ganhar
[1024,512,256,128,64,32,16,8,4,2] -> 1Uma bola é necessária para 'ativar a corrente'
[512] -> 768
[512,2] -> 767
[4,16,64] -> 982

Notas :
Não sou um falante nativo - diga-me se você viu um erro de digitação ou algum texto não gramatical.
Se algo não estiver claro, pergunte nos comentários.


fonte
por que [4,16,64] -> 22?
L4m2 12/12/18
3
Bem-vindo ao PPCG. Parece que este desafio é: adicione todos os elementos da matriz, subtraia 2048e divida por 2- se assim for, você pode querer checar novamente o último caso de teste - se não, use-o como um exemplo para explicar por que a saída não é 't 982.
Shaggy
1
@Shaggy thx para perceber um erro bobo
4
Woah, eu não acho que meu primeiro desafio terá 7 respostas e 2 votos positivos na primeira hora! E cheguei a ~ 28 pessoas!
2
Ei, downvoter: explique seu ponto de vista! É necessário que o desafio melhore!

Respostas:

11

Java 8, 17 bytes

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

Porto da resposta JavaScript @LuisFelipeDeJesusMunoz ' .

Experimente online.

Explicação:

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
Kevin Cruijssen
fonte
11
Esse sentimento quando o Java está batendo tanto python (porque a sintaxe lambda) e javascript (porque sum)
Quintec
8

Flak cerebral , 72 bytes

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

Experimente online!

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

([{}]                                        ) # Subtract that from...
     ((((((((()()()()){}){}){}){}){}){}){}){}  # 1024
Riley
fonte
1
Obrigado! Estou interessado em aprender Brain-Flak e sua explicação foi útil.
Galen Ivanov #
2

Catholicon , 5 bytes

-`L̇½Ṗ

Explicação:

-      subtract
 `L̇    1024
       from
   ½   half of the
    Ṗ  sum [of the input]
Okx
fonte
1
Essa é uma nova linguagem de golfe que eu sinto? :)
ETHproductions
1
+1 para o novo idioma. Outro para aprender </ sigh>
ElPedro
2

TI-Basic, 8 bytes

4^5-.5sum(Ans
Timtech
fonte
1

JavaScript, 28 bytes

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

Experimente online

Shaggy
fonte
1

Geléia , 7 6 bytes

HSạ⁽¡ç

Experimente online!

Explicação:

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

-1 byte usando um número base-250

Camarada SparklePony
fonte
1

perl -aE, 27 bytes

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

Isso lê uma linha com números (espaços em branco separados) de STDINe grava a resposta em STDOUT.

O que ele faz é subtrair todos os números da entrada de 2048 e divide o restante por 2. O -acomutador coloca o na matriz @F(um número por elemento). Se interpolarmos uma matriz em uma string (que é o que estamos fazendo aqui), o perl coloca o valor $"entre os elementos. A variável pouco usada $:é o padrão \n-; e como o espaço em branco entre os tokens é ignorado, o resultado está subtraindo todos os números de 2048. O evalcálculo é feito.


fonte
0

Perl 6 , 12 bytes

1024-*.sum/2

Experimente online!

Anônimo Qualquer que seja a lambda que pega uma lista e retorna um número.

Brincadeira
fonte
0

AWK, 26 bytes

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

Os números de entrada são separados por novas linhas (ou seja, uma por linha)

iBug
fonte
0

Neim, 6 bytes

Muito novo para Neim, mas funcionou

𝐬ᚺςᚫᛦ𝕤

Explicação:

  𝐬         : 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

Experimente online!

LiefdeWen
fonte
0

JAVA, 30 bytes

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

F #, 24 bytes

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

1024 menos a soma dividida por 2.

Forma de Ignorância
fonte