Вступление
Напишите полную программу, которая поворачивает прямоугольный блок символов 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
Кратчайшая программа выигрывает. Стандартные лазейки запрещены.
источник
:.+
разбить на несколько строк?:
и.
зависит от символа после них, и переводы строки не действительны после любого из них (и даже если бы они были, это изменило бы значение программы).C (gcc) ,
14201399463 байтаАх ... радость струн неопределенной длины!
Предполагает
sizeof(char*) == sizeof(int)
иsizeof(char**) <= 16
.Новый подход
Попробуйте онлайн!
Выход выше
В конце концов, решение было невероятно простым. Вы делаете одну программу A, которая вращает вещи по часовой стрелке, и одну программу B, которая вращается против часовой стрелки:
A
В
Сделайте прямоугольник разумных пропорций и ограничьте его этим, а вокруг него разместите защитники комментариев:
Ограничьте программу B квадратом, равным ширине с квадратом для A плюс два (для дополнительных строк комментариев у нижнего края), поверните ее против часовой стрелки и шлепните ее вправо от программы A, и вы получите решение выше.
Старый подход
Попробуйте онлайн!
Выход выше
источник