Вступление
Напишите полную программу, которая поворачивает прямоугольный блок символов ASCII на 90 градусов по часовой стрелке. Когда сама программа поворачивается на 90 градусов по часовой стрелке, она поворачивает блок символов ASCII на 90 против часовой стрелки.
правила
- Вы много не используете встроенные модули, которые вращают или транспонируют матрицы. Например, в MATLAB / Octave
rot90
и оператор транспонирования'
не допускаются. - Вы должны написать полную программу, которая использует STDIN и STDOUT или ближайший эквивалент.
- Ваша программа должна быть прямоугольной и предполагать, что вход также прямоугольный.
- Ввод и вывод - это строки, разделенные символом новой строки, и они не будут содержать завершающие символы новой строки.
При запуске с исходным кодом в качестве исходной программы ваша программа должна поворачиваться на 90 градусов по часовой стрелке. Выходными данными должна быть вторая программа на том же языке, которая поворачивает свои входные данные на 90 градусов против часовой стрелки. Когда повернутой программе передается исходный код, она должна вывести исходный код исходной программы.
Примечание: обе программы должны работать для любого ввода, а не только для собственного исходного кода, поэтому односимвольная квинна не допускается.
пример
Скажем, следующее - это действительная программа, которая поворачивает свои входные данные на 90 градусов на гипотетическом языке ExampleLang.
^f a2% 3
lk (^_^&
v
D8 $4 /
При запуске с самим собой в качестве входа, он выводит другую действительную программу, которая вращает свой вход против часовой стрелки:
D l^
8 kf
$ (a
4 ^2
_%
^
/v&3
Эта вторая программа, когда передается сама себе, выводит исходную программу. Обратите внимание, что в пустой строке должно быть четыре пробела, а во второй и последней строке есть пробел, который нельзя отобразить в уценке. Чтобы уточнить:
$ examplelang program < program > rotProg
$ examplelang rotProg < rotProg > program1
$ diff -s program program1
Files program and program1 are identical
Кратчайшая программа выигрывает. Стандартные лазейки запрещены.
:.+
разбить на несколько строк?