Ваша задача, учитывая квадратную сетку цифр ( 0-9), вывести один из способов, которыми цифры могут быть сгруппированы так, чтобы:
- Каждая цифра является частью ровно одной группы
- Все группы имеют одинаковое количество цифр
- Все группы ограничены одной многоугольной формой (это означает, что каждая цифра в группе находится рядом с [влево, вправо, вверх, вниз] по крайней мере еще одной цифрой в той же группе, если в каждой группе нет 1 элемента).
- Все группы имеют одинаковую сумму
Сетка ввода всегда будет квадратом: вы можете выбрать любой метод ввода, который вам нравится (включая предоставление аргументов функции или методу). Кроме того, на входе будет указано количество групп, в которые ваша программа должна сгруппировать цифры.
Пример ввода:
Предположим, ваш формат ввода stringOfDigits numberOfGroups.
Пример ввода будет:
156790809 3
который будет переводить в (сетка sqrt(9) * sqrt(9))
1 5 6
7 9 0
8 0 9
которую вам придется разделить на 3 группы, каждая из которых должна иметь 9 / 3 = 3элементы с одинаковой суммой.
Вывод: Вывод должен быть строкой цифр с необязательными пробелами и символами новой строки для форматирования, за каждой цифрой следует буква, a-zобозначающая ее группу. Там должно быть точно numberOfTotalDigits / numberOfGroupsэлементы в каждой группе. Вам никогда не придется делить что-то на более чем 26 групп.
Пример вывода:
1a 5a 6b
7c 9a 0b
8c 0c 9b
Обратите внимание, что замена всех as на bs и bs на as одинаково действительна. Пока каждая группа обозначена отдельной буквой, выходные данные действительны.
Кроме того, я ожидаю, что большинство программ будет выводить что-то вроде этого, потому что новые строки / пробелы являются необязательными:
1a5a6b7c9a0b8c0c9b
В этом случае добавляются все цифры группы a, bили cсоставляет 15. Кроме того, все группы связаны каким-либо полигоном.
Неверные выходы:
1a 5a 6b
7c 9a 0c
8c 0b 9b
потому что группы не образуют многоугольники (в частности, они 6bизолированы и 0cтакже одиноки).
1a 5a 6b
7c 9a 0b
8c 0b 9b
потому что группа bимеет 4 элемента, в то время как cтолько 2.
И т.п.
Если нет действительного решения, ваша программа может сделать что-нибудь (то есть остановить, завершить сбоем, запустить навсегда), но если ваша программа печатает, Noneкогда нет действительного решения, -15на ваш счет.
Если существует более одного решения, вам нужно распечатать только одно, но -20если ваша программа печатает их все, разделенные каким-либо разделителем.
Это код гольф, поэтому самый короткий код (с бонусами) выигрывает!
156790889 3кажется, что так и должно быть156790809 3
6bон изолирован, а не0b.