Эта проблема связана с 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"
Как всегда, если что-то неясно или неправильно, пожалуйста, дайте мне знать в комментариях. Удачи и хорошего гольфа!