Диван 2048: Скільки ще до 2048 року?


20

Я щойно спробував гру під назвою Couch 2048 .
(Примітка. Ви повинні поглянути, щоб краще зрозуміти це питання.)
Оскільки це було для мене не дуже захоплююче, я запитав себе: "Скільки ще до 2048 року!"
Це надихнуло мене поставити виклик, адже обчислити це не так просто, як я думав.

Ваша мета:
Даючи список кульок на дивані, ви повинні вивести, скільки кульок зі значенням 2 має впасти з неба, щоб можна було виграти гру (досягнувши 2048 м'яча).

  • Припустимо, введення є дійсним.
  • Припустимо, гравець не відкине жодних кульок.
  • Припустимо, кулі, які падають з неба, завжди мають значення 2, як я вже казав.
  • Дійсні приклади виводу: 3, "4", [5], ["6"]

Редагувати:
Я мушу щось уточнити:
- Ви повинні надрукувати найменшу кількість необхідних 2 секунд.

Тестові випадки:
[2048] -> 0 Ви вже виграли
[1024,1024] -> 0Вам не потрібно більше м’ячів, щоб виграти
[1024,512,256,128,64,32,16,8,4,2] -> 1Один м'яч, необхідний для "активації ланцюжка"
[512] -> 768
[512,2] -> 767
[4,16,64] -> 982

Примітки .
Я не є носієм мови - скажіть, чи помітили ви друкарську помилку чи якийсь не граматичний текст.
Якщо щось незрозуміле, запитайте в коментарях.


чому [4,16,64] -> 22?
l4m2

3
Ласкаво просимо до PPCG. Схоже, що це завдання: додайте всі елементи в масив, відніміть 2048і діліть на 2- якщо так, ви можете подвоїти перевірку останнього тестового випадку - якщо ні, будь ласка, використовуйте його як приклад, щоб пояснити, чому вихід не є 'т 982.
Кудлатий

1
@Shaggy thx за те, що помітив дурну помилку

4
Woah, я не думав, що в моєму першому виклику буде 7 відповідей і 2 оновлення протягом першої години! І я дістався до ~ 28 чоловік!

2
Гей, downvoter: поясніть свою точку зору! Це потрібно для того, щоб виклик покращився!

Відповіді:


11

Java 8, 17 байт

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

Порт @LuisFelipeDeJesusMunoz 'відповідь JavaScript .

Спробуйте в Інтернеті.

Пояснення:

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
Таке відчуття, коли Java б'є і python (через синтаксис лямбда), і javascript (тому що сума)
Quintec

8

Мозок-Флак , 72 байти

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

Спробуйте в Інтернеті!

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

([{}]                                        ) # Subtract that from...
     ((((((((()()()()){}){}){}){}){}){}){}){}  # 1024

1
Дякую! Мені цікаво вивчити Брейн-Флак і ваше пояснення було корисним.
Гален Іванов








2

Католикон , 5 байт

-`L̇½Ṗ

Пояснення:

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

1
Це нова мова для гольфу, яку я відчуваю? :)
ETHproductions

1
+1 для нової мови. Ще один для вивчення </sigh>
ElPedro





1

perl -aE, 27 байт

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

Це читає рядок з цифрами (пробіл відокремлений) від STDINі записує відповідь на STDOUT.

Для цього потрібно відняти всі числа з вхідних даних з 2048 року, а решту поділити на 2. -aПеремикач поміщає масив @F(по одному номеру на елемент). Якщо ми інтерполюємо масив у рядок (це те, що ми робимо тут), perl ставить значення $"між елементами. За $:замовчуванням використовується мала використана змінна \n-; і оскільки пробіл між лексемами проігнорується, результат віднімає всі числа з 2048 року. evalОбчислення.







0

AWK, 26 байт

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

Вхідні номери розділяються новими рядками (тобто один на рядок)


0

Нейм, 6 байт

Досить новий для Neim, але він працював

𝐬ᚺςᚫᛦ𝕤

Пояснення:

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

Спробуйте в Інтернеті!






Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.