Существует множество головоломок со спичками, которые включают добавление, удаление или перемещение определенного количества спичек для создания новых чисел или фигур. Это похоже на цифровые часы.
Если на 12-часовых цифровых часах установлено правильное время, выведите цифру, для которой необходимо переместить наименьшее количество строк, чтобы каждая видимая цифра на часах стала этой цифрой. Если минимум несколько цифр, выведите их все. Если невозможно сделать каждую цифру одинаковой, выходной -1
или ложное значение, отличное от 0 (вы получите много из них).
Цифры часов выглядят так:
|
|
_
_|
|_
_
_|
_|
|_|
|
_
|_
_|
_
|_
|_|
_
|
|
_
|_|
|_|
_
|_|
_|
_
| |
|_|
Тестовые случаи:
Входные данные: 123
Дисплей часов:
_ _
| : _| _|
| : |_ _|
Вывод: 4
Пояснение: для отображения 1:23
требуется нарисовать всего 12 линий. Поэтому, чтобы каждая цифра была одинаковой, каждая цифра должна иметь 4 строки. Единственная цифра, которая имеет 4 строки 4
. Поэтому ответ должен быть 4
.
Входные данные: 1212
Дисплей часов:
_ _
| _| : | _|
| |_ : | |_
Вывод: -1
Пояснение: для отображения 12:12
требуется 14 строк. 14, деленное на 4, не является целым числом, поэтому невозможно, чтобы каждая цифра была одинаковой.
Входные данные: 654
Дисплей часов:
_ _
|_ : |_ |_|
|_| : _| |
Вывод: 5
Объяснение: Общее количество строк равно 15. 15, разделенное на 3, равно 5, поэтому каждая цифра должна иметь 5 строк. Единственные цифры , которые имеют 5 линий 2
, 3
и 5
. Ответ заключается в том, 5
что для создания каждой цифры 5 требуется всего 2 хода. Просто переместите строку в нижнем левом углу 6 на нижнюю часть 4, тогда вы получите:
_ _
|_ : |_ |_|
_| : _| _|
Затем, как вы можете видеть, все, что вам нужно сделать, это переместить строку в верхнем правом углу цифры, которая изначально была 4 наверх, и вы получите 5:55
. Чтобы сделать каждую цифру a 2
или 3
потребуется более 2 ходов.
Входные данные: 609
Дисплей часов:
_ _ _
|_ : | | |_|
|_| : |_| _|
Вывод: 609
( 6,0,9
или [6,0,9]
тоже нормально).
Объяснение: 6
, 0
и 9
единственные цифры , которые имеют 6 строк. Как таковые, они также являются единственно возможными решениями. Нетрудно понять, что потребуется всего два хода, чтобы сделать из них единственную цифру. Поэтому вы выводите все три цифры.
Ноты:
- Хотя время ввода должно быть действительным, время вывода - нет (например,
999
в качестве выхода все в порядке.) - Я очень гибок с вводом. Вам может потребоваться ведущий 0. Вы можете использовать число с десятичной точкой. Вы можете использовать строку. Вы можете использовать массив. Вы можете иметь параметр для каждой цифры.
Ответы:
Юлия,
160157154Это лямбда-функция. Назначьте это переменной, чтобы вызвать это. Принимает вектор целых чисел в диапазоне
0-9
любой длины и возвращает (возможно, пустой) вектор результатов.Контрольные примеры
объяснение
Перечислите семь сегментов и представьте их как битовый вектор.
Пример:
1
(сегменты 2 + 5 включены) становится36
(биты 2 + 5 установлены).Вот представления для цифр
0-9
.Мы можем использовать цифру в качестве индекса, чтобы получить представление битового вектора.
+1
из-за индексации на основе 1 в юлии.Функция
c=count_ones;
подсчитывает количество 1-бит в целом числе. Мы назначаем псевдоним, потому что он нам нужен чаще.Полная программа, несколько не в гольфе:
Теперь, последние две строки в деталях:
mean(map(c,m))
вычисляет среднее количество строк на входную цифру.n=map(a->...,l)
зацикливается на векторном представлении всех цифр.Если число строк нашей текущей цифры не
a
равно среднему количеству строк ввода, вернитесьinf
.Если нет, вернуть сумму расстояний Хэмминга между нашим текущим и всеми входными цифрами.
Теперь у нас есть вектор
n
длины,10
представляющий числа,0-9
которые дают нам общее количество добавлений / удалений, которые мы должны выполнить, чтобы преобразовать все входные цифры в это число, илиinf
, если такое преобразование невозможно без изменения количества строк.Наконец, выведите местоположения (на основе 0) всех минимумов, которых нет
inf
.источник