Объяснение:
В прошлом году на уроке математики на домашнем задании мы иногда получали эти чрезвычайно простые, хотя и не менее раздражающие вопросы, называемые алмазными головоломками. В основном это были вопросы, в которых нам давали бы сумму, а затем продукт просили найти два числа, которые при умножении дают продукт, а при добавлении дают сумму. Это сводило меня с ума, поскольку единственный способ, которым я знал, как их решить (в алгебре I), это просто перечислить факторы продукта, а затем посмотреть, какие из них добавлены к сумме. (Так как я не знал, как использовать Quadratics в то время) Не говоря уже о том, что они не были достаточно сложной математикой. Однако мне пришло в голову, что я должен был просто написать программу. Так что это ваш вызов сегодня! Напишите программу, которая может решить алмазную головоломку.
Примеры Извинения за размытое изображение, это лучшее, что я смог найти. Кроме того, игнорируйте числа в пузырьках. Верхняя часть ромба - это произведение, нижняя часть - сумма, правая и левая - две цифры. Ответы таковы: (Это также ваши тесты)
- 9, -7
- -2, -1
- 5, 8
- -9, -9
Правила:
- Вы не можете использовать какие-либо предварительно определенные функции или классы, которые выполняют это для вас.
- Ваш код должен быть законченной программой или функцией, которая либо возвращает, либо печатает ответы, как только находит их
- Входными данными являются сумма и произведение, которые вводятся в виде параметров функции или пользовательского ввода.
Характеристики:
- Предположим, что два числа, сумма и произведение всегда будут целыми числами.
- Оба ответа будут между -127 и 127.
- Ваш ввод будет состоять из двух целых чисел (сумма и произведение).
Помните, что это код-гольф, поэтому выигрывает самый короткий счетчик байтов. Пожалуйста, назовите ваш ответ стандартным ## Language Name, Byte Count
Редактировать: Кроме того, Doorknob указал, что это по существу "фактор квадратичной формы x ^ 2 + bx + c,". Это еще один способ думать и подходить к решению этой проблемы. : D
x^2 + bx + c
», верно?(x + n)(x + m)
дает вамx^2 + (n+m)x + (n*m)
, поэтому факторинг упомянутого квадратичного в основном эквивалентен этому вопросу (если я правильно понимаю).Ответы:
Желе ,
151110 байтПопробуйте онлайн!
Следующий двоичный код работает с этой версией интерпретатора Jelly.
идея
Это основано на том факте, что
Код
источник
Единорог ,
4650298218741546Теперь с козами, радугами и блестками!
Надеюсь, короче, чем Java.
Использует пользовательскую кодировку, которая может быть применена с
ApplyEncoding
объяснение
Как это работает??? С магией единорогов (и небольшим кодом).
Единорог скомпилирован в JavaScript
Каждый раздел разделен пробелом, и каждый раздел представляет символ в коде JavaScript.
Если в разделе содержатся единороги, символом раздела является длина раздела, преобразованная в код символа (например, 32 единорога будут пробелом)
Если раздел содержит коз, длина раздела удваивается, а затем преобразуется в код символа.
Если специальные символы программы не отображаются, вот изображение:
Это не соревнование, потому что Единорог был сделан после того, как этот вызов был опубликован.
источник
JavaScript ES6,
453937 * байт* Спасибо Деннису!
источник
TeaScript, 22 байта
30 31Не , что плохо. Было бы намного короче, если бы я мог закончить некоторые функции игры в гольф, такие как
единорогUnicode ShortcutsПопробуйте онлайн
источник
MATL , 33 байта
Выводит два числа в две разные строки. Если решения не существует, оно не выдает результатов. Если существует несколько решений, то получается только пара чисел, соответствующих одному решению.
пример
Следующее было выполнено в Octave с текущей фиксацией компилятора GitHub .
объяснение
источник
matl
и нажимаете «ввод»; затем вставьте программу и закончите с пустой строкой. Что вы имеете в виду, синтаксис ужасно разделен? MATL использует обратную польскую (постфиксную) нотацию, может быть, это вас смущает?Юлия,
464432 байтаФункция f, которая берет сумму, а затем произведение.
Мой первый ответ Юлии. @AlexA., Ты должен гордиться мной.
Спасибо @Dennis и @Alex A. за всю помощь. Я должен вычеркнуть 44.: P
источник
f(b,c)=b/2+√(b^2/4-c),b/2-√(b^2/4-c)
f(b,c)=b/2+√(x=b^2/4-c),b/2-√x
f(b,c)=(x=b+√(b^2-4c))/2,b-x/2
DC, 16
Читает сумму, затем продукт из отдельных строк STDIN. -во числа должны быть введены с подчеркиванием вместо знака минус. например
Объяснение:
То же самое основное квадратичное решение для
sum = a + b
иproduct = a * b
. Это рассчитывает решениеa
как:И рассчитывает решение
b
как:Expanded:
Деление на 2 выполняется поздно, чтобы предотвратить потерю точности. Можно делить на 2 раньше, но это требует дробной точности, которая требует большего количества символов.
источник
Pyth,
2118 байтСохранено 3 байта благодаря @Dennis
Тестирование
Моя вторая программа Pyth когда-либо, так что она, вероятно, может быть дополнена встроенными играми. Предложения приветствуются!
Как это устроено
(Это объяснение может быть не на 100% правильным; я не очень знаком с Пифом.)
Обратите внимание, что
/
это целочисленное деление. Заменив его наc
, мы могли бы также сделать это с нецелыми входами.источник
J
это автоматически присваиваемая переменная, которая устанавливается при первом использовании. Единственная часть, которая кажется не совсем правильной, это список в настоящее время [J].,
принимает ровно два аргумента и объединяет их в список.Java, 82 (69 λ) байтов с квадратной формулой (127 (114 λ) байтов)
Грубая сила: (Ваниль, Ява 7)
λ-расширенный: (Java 8)
Назначить лямбду
java.util.function.BiFunction<Integer, Integer, int[]>
и позвонитьapply()
.Простой старый подход грубой силы. Здесь есть только рабочая функция, и поскольку Java не может возвращать несколько значений, мы возвращаем 2-элемент
int
массив с необходимыми числами.Полная программа, основанная на грубой силе, может быть найдена здесь на ideone.com. , с λ-версией здесь.
Игра в гольф включала удаление всех ненужных скобок.
Ungolfed:
Квадратичный подход: (Ваниль, Java 7)
λ-расширенный: (Java 8) (s, p) -> {int x = s + (int) Math.sqrt (s * s-4 * p); вернуть новый int [] {x / 2, sx / 2} ;}
(Использование для грубой силы λ выше).
Параметры и критерии возврата совпадают с приведенным выше решением о грубой силе.
Использует старую добрую квадратичную формулу, которая используется здесь почти во всех других ответах, и не может быть продолжена, если кто-то не поможет мне здесь. Это довольно ясно, так что я не включаю версию без гольфа.
Полная программа, основанная на квадратичном подходе, находится здесь на ideone.com , с λ-версией здесь.
источник
Japt ,
28222120 байтВвод производится в виде
-63 2
.Объяснение:
U
иV
два входа (-63
и2
в первом случае)²
квадраты числоq
извлекает квадратный кореньисточник
[X=ºV²-4*U ¬+V)/2V-X]
без ярлыков:[X=((V²-4*U q +V)/2V-X]
я действительно должен сделать трейлинг]
ненужным в следующей версии ...APL,
2721 байтЭто последовательность диадических функций, которая принимает целые числа справа и слева и возвращает массив. Чтобы вызвать его, присвойте его переменной.
Ungolfed:
Попробуйте онлайн
Сэкономили 6 байтов благодаря Денису!
источник
CJam, 18 байт
Попробуйте онлайн!
Как это устроено
источник
Python 3,
4944 байтаВероятно, есть еще несколько способов сыграть в эту игру еще дальше, но это выглядит довольно неплохо.
источник
s/2-d
. Такжеd=(s*s/4-p)**.5
экономит несколько байтов.MathCAD 15. 38 байт
С математической формулой программирование в MathCAD легко. Язык даже предназначен для обработки сложных чисел с легкостью. Однако есть более короткие языки, которые могут решить проблему.
источник
𝔼𝕊𝕄𝕚𝕟 21 символ / 30 байт
Try it here (Firefox only).
Мех. Это должно быть достаточно наглядно, чтобы вы все поняли; Однако, если вы должны
î = input1, í = input2
.источник
PHP, 62 байта
Это может быть довольно долго, но быть полнофункциональной веб-программой PHP. Принимает аргументы через запрос "get".
Demo .
источник
TI-BASIC, 20 байтов
Принимает
Q
отAns
иP
отPrompt
. Звоните какP:prgmNAME
.источник
Prompt
заявление так долго лол. Я не знаю TI-BASIC, но это может быть короче, если вы поместите код в функцию и передадите P в качестве параметра.Prompt
,P
,/
,2
,+
,√(
,²
,4
,-
,Ans
, и{
один маркер, и каждый из этих маркеров составляет один байт. Также TI-BASIC не имеет функций. Это, наверное, самый короткий метод.