Алмазные Пазлы!


21

Объяснение:

В прошлом году на уроке математики на домашнем задании мы иногда получали эти чрезвычайно простые, хотя и не менее раздражающие вопросы, называемые алмазными головоломками. В основном это были вопросы, в которых нам давали бы сумму, а затем продукт просили найти два числа, которые при умножении дают продукт, а при добавлении дают сумму. Это сводило меня с ума, поскольку единственный способ, которым я знал, как их решить (в алгебре I), это просто перечислить факторы продукта, а затем посмотреть, какие из них добавлены к сумме. (Так как я не знал, как использовать Quadratics в то время) Не говоря уже о том, что они не были достаточно сложной математикой. Однако мне пришло в голову, что я должен был просто написать программу. Так что это ваш вызов сегодня! Напишите программу, которая может решить алмазную головоломку.

Примеры введите описание изображения здесь Извинения за размытое изображение, это лучшее, что я смог найти. Кроме того, игнорируйте числа в пузырьках. Верхняя часть ромба - это произведение, нижняя часть - сумма, правая и левая - две цифры. Ответы таковы: (Это также ваши тесты)

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

Правила:

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

Характеристики:

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

Помните, что это код-гольф, поэтому выигрывает самый короткий счетчик байтов. Пожалуйста, назовите ваш ответ стандартным ## Language Name, Byte Count

Редактировать: Кроме того, 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._.

идея

Это основано на том факте, что

формула

Код

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, который считает это обязательным требованием или нет, поскольку это компьютерное устройство, которое нам было предоставлено ...
Эшвин Гупта,

Если кто-то не может победить 14, я думаю, что вы выиграли.
Эшвин Гупта

3
Хорошо, теперь Желе официально безумно мало. Я должен выучить этот язык сразу после того, как закончу оборачивать голову
Питом

14

Единорог , 4650 2982 1874 1546

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

Теперь с козами, радугами и блестками!

Надеюсь, короче, чем Java.


Использует пользовательскую кодировку, которая может быть применена сApplyEncoding

объяснение

Как это работает??? С магией единорогов (и небольшим кодом).

Единорог скомпилирован в JavaScript

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

Если в разделе содержатся единороги, символом раздела является длина раздела, преобразованная в код символа (например, 32 единорога будут пробелом)

Если раздел содержит коз, длина раздела удваивается, а затем преобразуется в код символа.


Если специальные символы программы не отображаются, вот изображение:

введите описание изображения здесь


Это не соревнование, потому что Единорог был сделан после того, как этот вызов был опубликован.


1
Что здесь происходит? Я просто вижу коробки. ; -;
Линн

@Mauris aww :( Я опубликую изображение программы, чтобы все могли видеть ее славу
Downgoat

3
LOL хорошо, это мой любимый, хотя я не могу принять это, так как это чертовски долго.
Эшвин Гупта

4
«Надеюсь, короче, чем Java.» Вы заслуживаете +10 только за это;)
ETHproductions

1
@ Doᴡɴɢᴏᴀᴛ, извините, что разочаровал вас. Ява примерно в 18 раз короче этого.
Тамогна Чоудхури

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

Не , что плохо. Было бы намного короче, если бы я мог закончить некоторые функции игры в гольф, такие как единорог Unicode Shortcuts

Попробуйте онлайн


"ярлыки единорога" мне нравится, как это звучит! ;)
ETHproductions

@ETHproductions ха-ха, это было автозаменой: р, хотя ярлыки единорога могут быть интересными ...
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

DC, 16

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

Читает сумму, затем продукт из отдельных строк STDIN. -во числа должны быть введены с подчеркиванием вместо знака минус. например

$ { 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

Expanded:

?                   # 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% правильным; я не очень знаком с Пифом.)

Обратите внимание, что /это целочисленное деление. Заменив его на c, мы могли бы также сделать это с нецелыми входами.


Побил вас одним байтом: P Вы должны рассмотреть возможность переключения; D
nicael

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

@DigitalTrauma Я не уверен на 100%, как это работает (особенно J), но это то, что я собрал, прочитав документы.
ETHproductions

1
Да, Jэто автоматически присваиваемая переменная, которая устанавливается при первом использовании. Единственная часть, которая кажется не совсем правильной, это список в настоящее время [J]. ,принимает ровно два аргумента и объединяет их в список.
Деннис

3

Java, 82 (69 λ) байтов с квадратной формулой (127 (114 λ) байтов)

Грубая сила: (Ваниль, Ява 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. , с λ-версией здесь.

Игра в гольф включала удаление всех ненужных скобок.

Ungolfed:

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
Ява победила единорога :( Я бы +1, но я использовал свой дневной лимит голосов
Downgoat

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 Хорошо, ¬ это отличная вещь.
Никель

2

APL, 27 21 байт

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

Это последовательность диадических функций, которая принимает целые числа справа и слева и возвращает массив. Чтобы вызвать его, присвойте его переменной.

Ungolfed:

                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

Python 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экономит несколько байтов.
Деннис

@ Денис Ой, ты прав. Исправлена ​​и игра в гольф.
Sherlock9

1

MathCAD 15. 38 байт

введите описание изображения здесь

С математической формулой программирование в 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. Принимает аргументы через запрос "get".

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 в качестве параметра.
Эшвин Гупта

На самом деле, TI-BASIC делится на «токены»; Каждый из Prompt , P, /,2 , +, √(, ², 4, -, Ans, и {один маркер, и каждый из этих маркеров составляет один байт. Также TI-BASIC не имеет функций. Это, наверное, самый короткий метод.
Конор О'Брайен

О, это интересно, я этого не осознавал. Но разве каждый символ не является байтом в техническом смысле? Например, если я скопирую и вставлю это в текстовый документ, я получу 36 байтов. Или для этого используются специальные символы Юникода?
Эшвин Гупта

TI-BASIC - это язык калькулятора, так что это то, что он видит. Он вводится в калькулятор, а не в текстовый документ или тому подобное. Вот однобайтовые токены.
Конор О'Брайен

Ах, хорошо, я тебя понял. Круто. Мне просто было любопытно.
Эшвин Гупта
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.