Задача
По заданному списку ввода 6
различных цифр найдите 3 числа a
, b
и, c
таким образом a × b = c
, a
имея 2 цифры, b
1 цифру и c
3 цифры. Для наглядности ваша программа должна расположить эти 6 цифр в полях этого изображения:
Если существует более одного решения, вы можете вывести любое из них.
вход
6 разных цифр. Вы можете принять их любым приемлемым для вашего языка способом.
Выход
В 3 числа a
, b
и c
. Выходной формат является относительно свободным, если 3 числа разделены и всегда печатаются в одном и том же порядке (но не обязательно в порядке a, b, c
).
Тестовые случаи
1, 2, 3, 4, 5, 6 -> 54,3,162
2, 3, 4, 5, 6, 7 -> 57,6,342 or 52,7,364
счет
Самый короткий код в байтах побеждает.
0,1,2,3,4,5
результата в13,4,052
; нет решения; или все в порядке?Ответы:
Брахилог (2), 10 байт
Попробуйте онлайн!
Слишком медленный, чтобы работать в течение разумного промежутка времени (интерпретатор брахилога тратит много времени на умножение на пустые строки, 4-значные числа, отрицательные числа и т. Д. С использованием очень медленного решателя ограничений). Ссылка TIO использует ввод только с 3 цифрами (эта программа может обрабатывать ввод с любым количеством цифр). Это функция, чьим входным значением является число, содержащее все требуемые цифры (например
234567
) - отсутствие дубликатов на входе означает, что вы всегда можете просто поставить любое число0
в конце, чтобы избежать начального нуля, - и чей выходной результат представляет собой список в заказ[b, a, c]
(например[6, 57, 342]
).объяснение
Так куда же делось требование к группам из 2, 1 и 3 цифр? Ну, мы знаем, что на входе 6 цифр, и группы расположены в отсортированном порядке. Следовательно, они могут иметь только возможные размеры: [1, 1, 4], [1, 2, 3] или [2, 2, 2]. Первый случай невозможен (вы не можете умножить два 1-значных числа для получения 4-значного числа, так как 9 × 9 - это только 81), как и последний случай (вы не можете умножить два 2-значных числа на произвести двузначное число, так как даже 10 × 10 дает 100). Таким образом, возвращаемые значения
[b, a, c]
должны иметь длину 1, 2 и 3 цифры в этом порядке, тоa
есть 2 цифры,b
1 цифра иc
3 цифры в соответствии с запросом.источник
JavaScript (ES6),
9088 байтВводит в виде массива из 6 цифр. Возвращает строку, описывающую возможное решение (например,
'54*3==162'
) или завершается с ошибкой «слишком много рекурсии», если (и только если) нет решения.Как это работает
Это детерминированный алгоритм.
Штрихи
P=2
иQ=3779
были выбраны таким образом , что сортировка обратного вызова(k = k * P % Q) & 2
гарантированно генерировать все 720 возможных перестановок входного массива с течением времени. Точнее, все перестановки охватываются после 2798 сортировок, что должно быть в пределах рекурсии всех браузеров.Мы вводим каждую перестановку в выражение
01*2==345
, сопоставляя цифры с соответствующими записями в массиве.Мы оцениваем это выражение и делаем рекурсивные вызовы, пока оно не станет истинным.
Тест
Показать фрагмент кода
источник
-
вместо==
(и переверните?:
), чтобы сохранить байт.Брахилог , 17 байт
Попробуйте онлайн!
объяснение
источник
05AB1E ,
1513 байтСохранено два байта благодаря Emigna !
Использует кодировку CP-1252 . Попробуйте онлайн!
Объяснение:
источник
213S
на, так3L
как заказ не должен быть в2,1,3
соответствии со спецификациями.£
совокупности векторизация ... Если это правильный способ сказать это.Баш + кореутилс, 70
Нет особенно простого способа генерировать все перестановки. Вместо этого случайным образом генерируйте перестановки и вычисляйте, пока мы не найдем хорошую.
Вывод в форме
A*B-C
- то есть выражение, которое будет оцениваться в ноль, когда мы имеем правильную перестановку.Попробуйте онлайн .
источник
CJam , 23 байта
Попробуйте онлайн!
источник
Python 2 , 105 байт
Попробуйте онлайн!
88-байтовое решение с более гибким выводом
Попробуйте онлайн!
где результат будет ['6', '5', '7', '3', '4', '2'] вместо '6', '57', '342'
источник
import
вершину ... качает головойf=
в заголовок. Это не имеет большого значения.PHP, 110 байт
Это будет там ... в конце концов ...
Ungolfed:
источник
PHP, 77 байт
Принимает ввод в виде строки.
источник
ES6 (Javascript),
85,8279 байтовПринимает массив цифр (строк), возвращает массив из 3 элементов
[A,B,C]
=>C=A*B
Golfed
правок:
d
иa
, и избавлении от==
(спасибо @Arnauld!)Попытайся !
источник
Пип , 18 байт
17 байт кода, +1 за
-S
флаг.Принимает ввод в виде строки цифр через аргумент командной строки. Выход в порядке c, b, a. Попробуйте онлайн!
Этот код выводит все решения, если существует несколько. Если требуется вывести только одно решение, добавьте три байта и оберните программу в
(...0)
.объяснение
источник
Рубин, 60 байт
Печатает все решения как "a * b == c"
Пример:
источник
Пакетный, 305 байтов
Принимает ввод в STDIN в виде строки
[1-9]{6}
и выводит все решения вdd*d-ddd
формате. Пакет не очень хорош в манипулировании строками, поэтому генерировать 720 перестановок немного неудобно.источник