Алмазні головоломки!


21

Пояснення:

Минулого року на уроці математики у домашніх завданнях ми час від часу отримували ці надзвичайно прості, хоча однаково дратівливі питання, які називали алмазними головоломок. В основному це були питання, де нам давали б суму, і тоді продукт попросили знайти два числа, які при множенні дають продукт, а коли додають - дають суму. Це зводило мене з розуму, оскільки єдиний спосіб, коли я знав, як їх вирішити (в Алгебрі I), - це просто перерахувати фактори продукту, а потім побачити, які з них додаються, щоб зробити суму. (Оскільки я тоді не знав, як користуватися квадратикою) Не кажучи вже про те, що вони не були дуже складними математикою. Однак мені просто вийшло, що я повинен був щойно написати програму. Отже, це ваше завдання сьогодні! Напишіть програму, яка може розгадати алмазну головоломку.

Приклади enter image description here вибачень за розмите зображення, найкраще, що я міг знайти. Крім того, ігноруйте цифри в бульбашках. Верхня частина діаманта - добуток, внизу - сума, праворуч і ліво - два числа. Відповіді такі: (Це також ваші тестові справи)

  1. 9, -7
  2. -2, -1
  3. 5, 8
  4. -9, -9

Правила:

  • Ви не можете використовувати будь-які заздалегідь визначені функції або класи, які виконують це для вас.
  • Ваш код повинен бути повноцінною програмою або функцією, яка або повертає, або друкує відповіді, як тільки їх знайде
  • Вхід - це сума і добуток, які вводяться як параметри функції або введення користувача

Технічні умови:

  • Припустимо, що два числа, сума і добуток завжди будуть цілим числом.
  • Обидві відповіді будуть від -127 до 127.
  • Вашим входом буде два цілих числа (сума та продукт).

Пам'ятайте, що це код-гольф, тому виграє найменший байт. Будь ласка, вкажіть свою відповідь стандартним №# Ім'я мови, кількість байтів

Edit: Також Doorknob вказував, що це по суті "коефіцієнт квадратика форми x ^ 2 + bx + c". Це ще один спосіб задуматися і вирішити цей виклик. : D


9
Це по суті "фактор квадратичної форми x^2 + bx + c", правильно?
Дверна ручка

1
b = - (x + y), c = (x * y)
TheNumberOne

Спрощення (x + n)(x + m)дає вам x^2 + (n+m)x + (n*m), тому факторинг сказаної квадратики в основному еквівалентний цьому питанню (якщо я правильно його розумію).
Дверна ручка

@Doorknob - так, ти прав. Я здогадуюсь, що я буду позначений як дублікат. :(
Ешвін Гупта

Ну, я не думаю, що у нас все ще є питання "фактор x ^ 2 + bx + c". Тільки вказуючи, що проблеми дуже схожі.
Дверна ручка

Відповіді:


18

Желе , 15 11 10 байт

Hð+,_ðH²_½

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

Наступний двійковий код працює з цією версією інтерпретатора Jelly.

0000000: 48 98 2b 2c 5f 98 48 8a 5f 90  H.+,_.H._.

Ідея

Це ґрунтується на тому, що

formula

Код

Hð+,_ðH²_½    Left input: s -- Right input: p

 ð   ð        This is a link fork. We define three links, call the left and right
              link with the input as arguments, then the middle link with the
              results as arguments.

H             Left link, dyadic. Arguments: s p

H             Halve the left input.

     ðH²_½    Right link, dyadic. Arguments: s p

      H       Halve the left input.
       ²      Square the result.
        _     Hook; subtract the right input from the result.
         ½    Apply square root to the difference.

 ð+,_         Middle link, dyadic. Arguments: (results of the previous links)

  +           Compute the sum of the results.
    _         Compute the difference of the results.
   ,          Pair.

1
Це дуже приємний онлайн-компілятор. Мені б хотілося, щоб у них був такий подібний для Java.
Ешвін Гупта

2
@AshwinGupta Денніс зробив це сам, власне;) Для Java завжди є Ideone .
Дверна ручка

@Doorknob - так, я знаю, що його онлайн-компілятор такий крутий. Я був на Ideone, її добре, і все, але у неї немає багатокласової підтримки, що є проблемою. У мене немає можливості перевірити свої більш складні програми в школі D :. Плюс, він не працює в браузері iPad, який вважає це чи не повинен бути вимогою, оскільки це обчислювальний пристрій, яким ми були забезпечені ...
Ashwin Gupta

Якщо хтось може перемогти 14, я думаю, ви перемогли.
Ешвін Гупта

3
Гаразд, Джелі зараз офіційно шалено не вистачає. Я повинен вивчити цю мову одразу після того, як закінчу обертати голову навколо Pyth ...
ETHproductions

14

Єдиноріг , 4650 2982 1874 1546

[ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 ( 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ( ) ) 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 2 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ( 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ✨✨✨✨✨✨✨ 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 4 🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ( ) ) 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤 ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ ]

Тепер з козами, веселками та блискітками!

Сподіваюсь, коротший за Яву.


Використовується спеціальне кодування, до якого можна застосуватиApplyEncoding

Пояснення

Як це працює ??? З магією єдинорогів (і трохи коду).

Єдиноріг збирається в JavaScript

Кожен розділ розділений пробілом, і кожен розділ представляє символ у коді JavaScript.

Якщо в розділі є єдинороги, символом секції є довжина розділу, перетворена в char код (наприклад, 32 єдинороги будуть пробілом)

Якщо в розділі містяться кози, довжина секції подвоюється і потім перетворюється на char код.


Якщо спеціальні характеристики програми не відображаються, ось малюнок:

enter image description here


Це не конкурує, оскільки Єдиноріг був зроблений після того, як цей виклик був опублікований.


1
Що на землі відбувається тут? Я просто бачу коробки. ; -;
Лінн

@Mauris aww :( Я опублікую зображення програми, щоб усі бачили, що це слава
Пуховик

3
LOL добре це мій улюблений, хоча я не можу його прийняти, так як це так довго.
Ешвін Гупта

4
"Сподіваюсь, коротший за Яву." Ви заслуговуєте +10 саме на це;)
ETHproductions

1
@ Doᴡɴɢᴏᴀᴛ, вибач, що розчарував. Ява приблизно в 18 разів коротший за це.
Tamoghna Chowdhury

8

JavaScript ES6, 45 39 37 * байт

(q,p)=>[x=p/2+Math.sqrt(p*p/4-q),p-x]

* Дякую Деннісу!


2
Я вас +1, тому що це перша відповідь, яку я насправді можу зрозуміти (свого роду). LOL
Ешвін Гупта

4

TeaScript, 22 байти 30 31

[d=y/2+$s(y*y/4-x),y-d

Чи не , що погано. Було б набагато коротше, якби я міг отримати деякі функції для гольфу, закінчені раніше, такі як ярлики з єдинорогом єдиноріг

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


"ярлики єдинорога" Мені подобається звук цього! ;)
ETHproductions

@ETHproductions ха-ха, це було автокорекцією: p, хоча ярлики єдинорога можуть бути цікавими ...
Downgoat

3

MATL , 33 байти

-100:100t!2$t+i=bb*i=&2#2$1fv101-

Виводить два числа у двох різних рядках. Якщо рішення не існує, воно не дає результату. Якщо існує декілька рішень, він створює лише пару чисел, що відповідають одному розв’язанню.

Приклад

Наступне було запущено в Octave із поточним компілятором GitHub .

>> matl -r '-100:100t!2$t+i=bb*i=&2#2$1fv101-'
> 2
> -63
 9
-7

Пояснення

-100:100           % row vector -100, -99, ..., 100
t!                 % duplicate and transpose into column vector
2$t                % duplicate the two vectors
+                  % sum with singleton expansion (all combinations)
i=                 % does it equal input? Produces logical matrix
bb                 % move the two vectors to top
*                  % multiply with singleton expansion (all combinations)
i=                 % does it equal input? Produces logical matrix
&                  % logical "and"
2#2$1f             % find row and column of the first "true" value in logical matrix
v101-              % concatenate vertically and subtract 101

З цікавості, чи програма в формі "пояснення" насправді працює на компіляторі MATL? Синтаксис жахливо розбитий.
Ешвін Гупта

Так, ви можете вставити програму в окремі рядки, наприклад скопіюючи список із пояснення. Ви набираєте matlта натискаєте "ввести"; потім вставити програму і закінчити порожнім рядком. Що означає, що синтаксис жахливо розбитий? MATL використовує зворотні польські (постфіксні) позначення, можливо, це вас бентежить?
Луїс Мендо

3

Юлія, 46 44 32 байт

f(b,c)=(x=b+√(b^2-4c))/2,b-x/2

Функція f, яка приймає суму, а потім добуток.

Моя перша відповідь Юлії. @AlexA., Ти повинен пишатися мною.

Дякуємо @Dennis та @Alex A. за всю допомогу. Мені довелося перекреслити 44.: P


40 байт:f(b,c)=b/2+√(b^2/4-c),b/2-√(b^2/4-c)
Алекс А.

@AlexA. - Ви збираєтеся зробити мем, запропонувавши вдосконалення цього ...
Даррел Гофман

34 байт:f(b,c)=b/2+√(x=b^2/4-c),b/2-√x
Алекс А.

32 байти:f(b,c)=(x=b+√(b^2-4c))/2,b-x/2
Денніс

2
Це як звичайна квадратична формула, яку ми б’ємо в голову з тих пір, як ми були, але вільні діти.
Олексій А.

3

постійний струм, 16

?ddd*?4*-v+2/p-p

Читає суму, а потім продукт з окремих рядків STDIN. -ve номери повинні бути введені підкресленням замість знака мінус. напр

$ { echo 2; echo _63; } | dc -e'?ddd*?4*-v+2/p-p'
9
-7
$ 

Пояснення:

Те саме базове квадратичне рішення для sum = a + bі product = a * b. Це обчислює рішення aяк:

a = [ sum + √( sum² - 4 * product ) ] / 2

І обчислює рішення bяк:

b = sum - a

Розширено:

?                   # push sum to stack
 ddd                # duplicate 3 times (total 4 copies)
    *               # sum squared
     ?              # push product to stack
      4*            # multiply by 4
        -           # subtract (4 * product) from (sum squared)
         v          # take square root of (sum squared) - (4 * product)
          +         # add sum to square root of (sum squared) - (4 * product)
           2/       # divide by 2 to give solution a
             p      # print with newline and without pop
              -     # subtract solution a from sum to give solution b
               p    # print with newline and without pop

Ділення на 2 робиться пізно, щоб запобігти точності втрат. Можна розділити на 2 раніше, але для цього потрібна дробова точність, яка потребує більше символів.


2
Чекати, що? Це закінчилося коротше, ніж APL, Pyth та CJam ??? Woohoo!
Цифрова травма

3

Pyth, 21 18 байт

Збережено 3 байти завдяки @Dennis

,J/+@-^Q2*4E2Q2-QJ

Тестовий набір

Моя друга програма Pyth коли-небудь, так що, ймовірно, можна пограти в гольф із вбудованими модулями. Пропозиції вітаються!

Як це працює

,J/+@-^Q2*4E2Q2-QJ   Implicit: Q = first line of input
,                    Create and output a list of these items:
 J                     Set variable J to the result of these operations:
      ^Q2                Square Q.
     -   *4E             Subtract 4*(next line of input).
    @       2            Take the square root.
   +         Q           Add Q.
  /           2          Divide by 2.
                       The list is currently [J].
               -QJ     Push Q-J; the list is now [J, Q-J].
                     EOF; list is sent to output.

(Це пояснення може бути не на 100% правильним; я не дуже знайомий з Pyth.)

Зауважимо, що /це ціле ділення. Замінивши його на c, ми могли б зробити цю роботу і з не цілими входами.


Бив вас одним байтом: P Ви повинні розглянути можливість перемикання; D
nicael

Це пояснення може бути не на 100% правильним ... ???
Цифрова травма

@DigitalTrauma Я не на 100% впевнений, що це працює (конкретно J), але це те, що я зібрав, читаючи документи.
ETHproductions

1
Так, Jє змінною для автоматичного присвоєння та встановлюється при першому використанні. Єдина частина, яка не здається цілком правильною, - це список [J]. ,бере рівно два аргументи та об'єднує їх у списку.
Денніс

3

Java, 82 (69 λ) байтів з квадратичною формулою (127 (114 λ) байт грубої сили)

Brute-Force: (Ваніль, Java 7)

int[] n(int s,int p){for(int a=-100;a<=100;a++)for(int b=-100;b<=100;b++) if(a+b==s&&a*b==p)return new int[]{a,b};return null;}

λ-розширений: (Java 8)

(s,p)->{for(int a=-100;a<=100;a++)for(int b=-100;b<=100;b++) if(a+b==s&&a*b==p)return new int[]{a,b};return null;}

Призначте лямбду java.util.function.BiFunction<Integer, Integer, int[]>та зателефонуйте apply().

Простий старий підхід грубої сили. Тут просто працює функція, і оскільки Java не може повернути кілька значень, ми повертаємо 2-елементний intмасив з необхідними числами.

Повну програму, засновану на грубому підході, можна знайти тут на ideone.com , з λ-версією тут.

Гольфінг цього полягав у видаленні всіх непотрібних брекетів.

Безголівки:

int[] n(int s,int p){//sum and product as function parameters,in that order
    for(int a=-100;a<=100;a++){//iterate first no. from -100 to 100
        for(int b=-100;b<=100;b++){//iterate second no. from -100 to 100
            //if the 2 nos. satisfy the diamond-puzzle condition, 
            //pack them in an int array and return them
            if(a+b==s&&a*b==p)return new int[]{a,b};}
     }//if no such pair exists, return null
return null;}

Квадратичний підхід: (Ваніль, Java 7)

int[] n(int s,int p){int x=s+(int)Math.sqrt(s*s-4*p);return new int[]{x/2,s-x/2};}

λ-розширений: (Java 8) (s, p) -> {int x = s + (int) Math.sqrt (s * s-4 * p); повернути новий int [] {x / 2, sx / 2} ;}

(Використання як для грубої сили λ вище).

Параметри та критерії повернення такі ж, як і рішення жорстокої сили вище.

Використовує стару добру квадратичну формулу, що використовується майже всіма іншими відповідями тут, і не може бути набагато далі, якщо хтось не допоможе мені тут. Це досить зрозуміло, тому я не включаю версію без вогків.

Повна програма, заснована на квадратичному підході, знаходиться тут на ideone.com , тут є λ-версія.


АХА так, дякую. Я чекав відповіді на Java. Крім того, я чекав, коли когось використовувати для циклів і грубої сили з факторами. Я здогадуюсь, я отримав двох за одну угоду. +1
Ешвін Гупта

1
Java перемогла єдиноріг :( я
поставив

2

Japt , 28 22 21 20 байт

[X=V/2+(V²/4-U ¬V-X]

Введення робиться у вигляді -63 2.

Пояснення:

  • U і V є двома входами ( -63і 2в першому випадку)
  • ² квадратів число
  • q витягує квадратний корінь

Я просто писав відповідь на це; тобто поки я не побачив твого. Хороша робота! Переставляючи першу частину та використовуючи ще кілька ярликів Unicode, ми можемо досягти 21 байта: [X=ºV²-4*U ¬+V)/2V-X]Без ярликів: [X=((V²-4*U q +V)/2V-X]я дійсно повинен зробити трейлінг ]непотрібним у наступній версії ...
ETHproductions

@Eth Ok, ¬ це чудова річ.
nicael

2

APL, 27 21 байт

h(+,-).5*⍨⊣-⍨h×h←.5×⊢

Це поїзд діадіальної функції, який приймає цілі числа праворуч і ліворуч і повертає масив. Щоб викликати його, призначте його змінній.

Безголівки:

                h←.5×⊢       ⍝ Define a train h for halving the input
              h×             ⍝ b^2/4
          ⊣-⍨                ⍝ b^2/4 - c
      .5*⍨                   ⍝ sqrt(b^2/4 - c)
h(+,-)                       ⍝ Return the halved pair

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

Збережено 6 байт завдяки Деннісу!


2

CJam, 18 байт

q~2d/_2#@-mq_2$+p-

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

Як це працює

q~                  e# Read an evaluate all input. STACK: product sum
  2d/               e# Divide the sum by 2.0.
     _              e# Push a copy of the result.
      2#            e# Square the copy.
        @-          e# Rotate the product on top and subtract it from the square.
          mq        e# Apply square root.
            _2$     e# Push copies of the root and the halved sum.
               +p   e# Add and print.
                 -  e# Subtract the originals.

2

Пітон 3, 49 44 байт

Напевно, є кілька способів розіграти це ще більше, але це виглядає досить добре.

def f(s,p):s/=2;d=(s*s-p)**.5;return s+d,s-d

Знак різниці неправильний; так і має бути s/2-d. Також d=(s*s/4-p)**.5зберігає кілька байт.
Денніс

@Dennis Oops, ти маєш рацію. Фіксований і гольф.
Шерлок9

1

MathCAD 15. 38 байт

enter image description here

За допомогою математичної формули програмування в MathCAD легко. Мова навіть призначена для легкої обробки складних цифр. Однак існують коротші мови, які можуть вирішити проблему.


1

𝔼𝕊𝕄𝕚𝕟, 21 символів / 30 байт

[x=í/2+√ í²/4-î⦆,í-x]

Try it here (Firefox only).

Мех. Це повинно бути достатньо наочним для того, щоб отримати ідею; Однак, якщо необхідно, î = input1, í = input2.


0

PHP, 62 байти

<?=($x=($p=$_GET[p])/2+sqrt($p*$p/4-$q=$_GET[q]))." ".($p-$x);

Це може бути досить довгим, але бути повнофункціональною програмою PHP в Інтернеті. Приймає аргументи через запит "отримати".

Demo .


0

TI-BASIC, 20 байт

Бере Qз Ansі Pвід Prompt. Телефонуйте як P:prgmNAME.

Prompt P
P/2+√(P²/4-Ans
{Ans,P-Ans

Дуже хороша. Шкода, що ця Promptзаява настільки довго, хаха. Я не знаю TI-BASIC, але це могло б бути коротшим, якби ви ввели код у функцію і передали P як параметр.
Ешвін Гупта

Actually, TI-BASIC is divided into "tokens"; Each of Prompt , P, /, 2, +, √(, ², 4, -, Ans, and { are one token, and each of these tokens is one byte. Also, TI-BASIC does not have functions. This is probably the shortest method.
Conor O'Brien

Oh well thats intresting, I didn't realize that. But isn't each char a byte still in a technical sense? Like if I were to copy paste this into a text doc, I get 36 bytes. Or does this use special Unicode characters?
Ashwin Gupta

TI-BASIC - мова калькулятора, тому це те, що ми бачимо. Він вводиться в калькулятор, а не в текстовий документ тощо. Ось однобайтні жетони.
Conor O'Brien

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