Nonogram является двумерным логическая головоломка , которая выглядит примерно так (скриншоты из игры Pixelo , моя любимая Nonogram игры):
Цель игры - выяснить, какое изображение кодируют эти цифры. Правила просты: число в столбце или строке означает, что где-то в этом столбце или строке столько полей заполнено в строке. Например, в нижнем ряду на изображении выше не должно быть заполненных полей, а в верхнем ряду должны быть заполнены все поля. Третий ряд снизу имеет 8 заполненных ящиков, и все они будут в ряд.
Два или более числа для одного и того же столбца или строки означают, что существует несколько «рядов» заполненных полей, с как минимум одним пробелом между этими длинами. Порядок сохранен. Например, в правом столбце вышеупомянутого изображения есть три заполненных прямоугольника, по крайней мере, один пробел под ними, а затем еще один заполненный прямоугольник.
Вот та самая загадка, почти завершенная:
(Икс не важны, это всего лишь подсказка, которую игрок оставляет для себя, чтобы сказать: «Этот квадрат определенно не заполнен». Подумайте о флагах в Сапер. У них нет смысла правил.)
Надеемся, что вы можете видеть, что, например, средние столбцы с подсказками, которые говорят «2 2», имеют два ряда по 2 длины, заполненные прямоугольниками.
Ваша миссия, если вы решите принять ее, - написать программу или функцию, которая создаст такую головоломку. Вам дан размер доски в виде единого целого числа (5 <= n <= 50) на стандартном вводе или в качестве аргумента (нет причины, по которой головоломка с неграммой должна быть квадратной, но для этого испытания это будет). После этого вам дадут серию из 1 и 0, представляющих заполненные и незаполненные квадраты на изображении соответственно. Первые n из них - это верхний ряд, затем следующий ряд и т. Д. Вы вернете или напечатаете для вывода на доску из 2 * 1 ячеек (потому что они выглядят лучше, и это дает вам место для двухзначных подсказок для столбца ), все они пустые, с подсказками, соответствующими входным данным.
Выходной формат
Образец
Входные данные:
./nonogram <<< '5 0 1 1 1 0 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1 0 1 1 1 0'
OR
n(5,[0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0])
Образ:
Выход:
1
2 1 2
3 2 1 2 3
+----------
3|
2 2|
1 1 1|
2 2|
3|
Входные данные:
./nonogram <<< '15 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 0 0 1 0 1 0 0 1 0 0 0 1 1 1 1 1 0 1 0 1 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1'
Образ:
Выход:
1 1
1 1 3 3 5 5 3 3 1
7 2 3 2 4 2 3 210 2 3 0 4 215
+------------------------------
2|
1|
1|
1|
1|
1 1|
3 3 1 1|
1 5 1 1|
3 5 3|
1 5 1|
1 3 1|
1 1 1 1 1|
1 1 1 1 1 1 1 1|
11 3|
11 3|
Разъяснения
- Ваш вывод не должен быть решаемой загадкой. Не все нонограммы разрешимы, но это не ваша забота. Просто выведите подсказки, которые соответствуют вводу, делают ли они хорошую загадку или нет.
- Программа, которая принимает аргументы в командной строке, разрешена. Это вроде как сказано выше, но возможно ошибиться. Вот для чего нужны разъяснения.
- Печать
0
строки или столбца без заполненных полей является обязательной. Я нигде не говорю это словами, но это в примерах.
5<=n<=50
это спецификация, поэтому не может быть 3-значных чисел
-
чем следовало бы?