Эта проблема связана с Flipping Pancakes .
Возможно, вы слышали о сортировке блинов , когда стопка блинов сортируется по размеру, вставляя шпатель в стопку и переворачивая все блины над лопаточкой, пока блины не будут отсортированы наименьшим по величине на тарелке. Проблема сгоревшего блина немного другая. У всех блинов теперь есть одна сожженная сторона, и сожженная сторона каждого блина должна быть обращена к тарелке после завершения сортировки.
Например, с учетом следующего стека (размер блина слева. 0
Означает сгоревшую сторону внизу и 1
означает сгоревшую сторону справа):
1 0
3 1
2 1
Вы можете перевернуть всю стопку, чтобы получить 20 30 11
, перевернуть две верхние, чтобы получить, 31 21 11
и перевернуть всю стопку, чтобы получить 10 20 30
сортированную стопку сожженных блинов. Эта последовательность ходов, flip 3, flip 2, flip 3, может быть представлена как 3 2 3
.
Соревнование
- Учитывая массив размеров блинов (не обязательно уникальных) и их ориентации, выведите любую действительную последовательность сортировки сожженных блинов, то есть последовательность переворотов, которая приводит к сортировке стопки блинов от наименьшего к наибольшему с обожженными сторонами вниз.
- Ввод и вывод может быть любым нормальным форматом с разделителями, но, пожалуйста, укажите, какие форматы вы используете, и укажите, какой конец вашего формата ввода является вершиной стека (TOS).
- Блин с нуля допускается.
- Смешивание разделителей на входе / выходе разрешено.
Контрольные примеры
Для всех следующих тестовых случаев input представляет собой список, а output - разделенную пробелами строку, а TOS находится слева.
[[1, 0], [3, 1], [2, 1]]
"3 2 3"
[[5, 1], [3, 0], [4, 1], [2, 1], [1, 0]]
"5 3 4 1 3 2 1"
[[5, 1], [3, 0], [3, 0], [1, 1]]
"4 3 2 3"
Как всегда, если что-то неясно или неправильно, пожалуйста, дайте мне знать в комментариях. Удачи и хорошего гольфа!