Напишите две треугольные (то есть пирамидальные) программы.
Первый должен быть направленным вверх текстовым треугольником с минимальной базовой шириной в три символа. Так что это будет иметь такую структуру, как
X
XXX
или
X
XXX
XXXXX
или
X
XXX
XXXXX
XXXXXXX
или больше Каждое из X
символов должно быть заменено символами вашего фактического кода, которые могут быть чем угодно, кроме разделителей строк (так что символы X
могут быть пробелами). Все X
буквы должны быть заменены, и пробелы и символы новой строки, которые помогают сформировать треугольную форму, должны оставаться как есть.
Вторая программа должна иметь тот же размер и форму, что и первая, за исключением того, что треугольник будет направлен вниз.
Так что если ваша первая программа выглядит
X
XXX
XXXXX
тогда ваша вторая программа будет выглядеть
yyyyy
yyy
y
где каждый y
является символом, который вам нужно заполнить реальным кодом (вероятно, отличным от вашего X
кода). Пробелы и переводы строки тоже должны оставаться такими же.
Ваша задача - написать эти программы так, чтобы каждая из них выводила (на стандартный вывод или ближайшую альтернативу) название отдельной песни Битлз , не принимая никакого ввода. Эта статья в Википедии послужит официальным списком песен для The Beatles. Вывод должен быть одним из названий в точности как указано, например I Want You (She's So Heavy)
.
Это довольно легко, однако, даже со странным требованием программы треугольника. Итак, мы собираемся сформировать еще одну программу из первых двух, которая должна выводить еще одно название песни.
Комбинируя три копии каждой из двух треугольных программ, мы можем создать третью программу в форме шестиугольника.
Если бы ширина вашей первой программы была три, она бы выглядела так:
XyyyX
XXXyXXX
yyyXyyy
yXXXy
Если бы базовая ширина была пятью, это выглядело бы так:
XyyyyyX
XXXyyyXXX
XXXXXyXXXXX
yyyyyXyyyyy
yyyXXXyyy
yXXXXXy
Эта программа (при запуске с пробелами и символами новой строки, как и остальные) должна выводить название другой песни Beatles, как и первые две программы. Также:
- Ваши три программы должны выводить разные названия песен.
- Допустимы только названия песен длиной восемь символов или более.
- Вы можете выбрать только один из
Revolution
,Revolution 1
иRevolution 9
потому названия очень похожи. - Вы должны выбрать свои три любимые песни Битлз. (Ну, попробуй .)
Обратите внимание, что фактические программы не требуются. Функции не допускаются. Чтение собственного исходного кода в любой программе также не допускается.
пример
Если ваша первая программа была
A
AAA
AAAAA
это может вывести Across the Universe
.
Тогда ваша вторая программа
bbbbb
bbb
b
мог бы вывести Revolution
.
Затем объединить в программу шестиугольника
AbbbbbA
AAAbbbAAA
AAAAAbAAAAA
bbbbbAbbbbb
bbbAAAbbb
bAAAAAb
выход может быть Get Back
.
счет
Представление с наименьшей шириной основания треугольника выигрывает. В вероятном случае связей выигрывает представление с наибольшей суммой трех названий песен.
источник
Ответы:
GolfScript, ширина = 9 символов, заголовки = 33 символа
шестиугольник
Принты Let It Be . (9 символов)
Попробуйте онлайн.
Как это работает
Маркер
"Let It Be"
в первой строке помещает строку Let It Be в стек.Вторая строка начинается с
}
недокументированного «супер комментария», который немедленно прерывает выполнение.Перед выходом GolfScript печатает содержимое стека.
X треугольник
Отпечатки Твист и Крик . (15 символов)
Попробуйте онлайн.
Как это работает
Первые две строки выдвигают строку
"\n }"
, которую команда;
отбрасывает из стека.Остальные строки содержат маркеры
"Twi"
,"st an"
и"d Shout"
, которые толкают строку Twist и Shout на три части.Перед выходом GolfScript печатает содержимое стека.
Y треугольник
Печать вчера . (9 символов)
Попробуйте онлайн.
Как это работает
Маркеры
Let
,It
иBe
на первой линии не определены, так что они ничего не делают.Три следующие строки содержат маркера
"Yeste"
,"rda"
и"y"
, которые толкают строку Вчера в трех частях.}
На последней строке ничего не делает; программа все равно закончилась бы.Еще раз, GolfScript печатает содержимое стека перед выходом.
источник
Befunge -93, ширина = 13
15, названия = 3124символаОтключение электроэнергии вчера вечером помешало мне обновить это, когда я понял это, но мне удалось уменьшить ширину треугольника и увеличить длину песни!
Указательная программа: «Копай пони», 10 знаков:
объяснение
Я ДЕЙСТВИТЕЛЬНО воспользовался уловкой Бефунга и выбрал «Копать пони» именно потому, что на 6-й позиции было место. Это позволяет программе перемещаться по названию песни. Попробуйте это в онлайн-переводчике, чтобы увидеть, как это работает.
Указывающая программа: «Если я упал», 9 символов:
(Период является посторонним и включается только для отображения других строк.)
объяснение
Единственные соответствующие строки здесь - первые два. Я использовал трюк с циклическим изменением (указатель инструкции отправляется слева), чтобы сжать еще один символ. Вторая строка выводит название песни.
Комбинированные: «Drive My Car», 12 символов:
Вот то же самое, но с добавленными линиями, чтобы показать шестиугольник и треугольники.
объяснение
Здесь вступают в игру третья и четвертая линии треугольника, направленного вниз. Есть несколько перенаправлений на краю обоих треугольников, которые служат для перемещения указателя инструкций по этим двум линиям и переноса «Drive My Car» в стек. Затем он распечатывается с использованием
>:#,_@
бита в треугольнике со стрелкой вверх. Кстати, используются как левый, так и правый треугольники, направленные вверх.Там может быть способ использовать больше пустого пространства, но я думаю , что мое время лучше потратить на другие вопросы. :П
источник
Python 2, ширина = 51
Да, хорошо ... Питон.
Комментарии Python начинаются с
#
, поэтому большинство строк - просто комментарии. Для обращенного вверх треугольника единственное, что выполняется, этокоторый печатает
Sgt. Pepper's Lonely Hearts Club Band
.Для обращенного вниз треугольника мы выполняем
который печатает
Yellow Submarine
, так как функцияid
правдива.Однако когда мы объединяем программы, все, что происходит, - это две вышеупомянутые строки в последовательности. Поскольку устанавливается конец первой строки
id=0
, который теперь ложный, конечным результатом является то, что мы добавляем конец(Reprise)
до конца, получая вSgt. Pepper's Lonely Hearts Club Band (Reprise)
качестве результата (Кальвин сказал, что все в порядке ).источник
Снеговик 1.0.2 , ширина = 13
В заключение! Задача, в которой Снеговик может процветать! : D: D
Косые черты в основном для эстетических целей, и большинство из них можно заменить пробелами (но это сделало бы их намного скучнее). Некоторые косые черты необходимы, для комментариев.
Программа А (вывод:)
Birthday
:Это довольно просто. Первый символ (
}
) устанавливает наши активные переменные, затем есть куча комментариев / никаких операций. Затем он сохраняет строку"Sun King\n "
и сразу же отбрасывает ее (через*
хранение в permavar, который мы никогда не используем). Тогда это хранит"Birthday\n"
.]]
здесь не используется, так[[ foo ]]
как это блочный комментарий в Snowman, но поскольку[[
до этого нет соответствия]]
(в самой программе A), он просто ничего не делает. Затем8AaL
захватывает первые 8 символов строки,sP
печатает ее и[[
комментирует остальную часть программы (потому что, опять же, соответствия нет]]
.Программа B (вывод:)
Get Back
:Это тоже довольно просто.
?}
эквивалентно}
(?
просто устанавливает все переменные на неактивные, что здесь не работает, но опять же важно позже). Затем он сохраняет строку"Get Back"
, выполняет кучу операций, которые не выполняются (//
до конца строки всегда комментарий), и печатает черезsP
.Полная программа
Выход, как вы уже догадались,
Sun King
1 .Давайте посмотрим на эту строку построчно:
Линия 1
Это устанавливает наши активные переменные, как и в предыдущих программах (теперь мы можем видеть, что
?
это необходимо, чтобы не просто включить их, а затем снова включить}}
). Остальная часть строки закомментирована.Линии 2-4
Комментарии...
Строка 5
Здесь мы сохраняем строку
"Sun King//"
, а затем запускаем комментарий блока. Это по сути пропускает все до следующего]]
.Строка 6
Все еще внутри комментария блока ...
Линия 7
Здесь мы вырываемся из комментария блока на короткий промежуток времени, чтобы выполнить код
8AaLsP
. Это фактически используется в программе A. Поскольку я выбрал все песни длиной 8 букв, я могу просто использовать один и тот же код для объединенной программы.Тогда это становится немного сложнее. В следующий раз, когда мы выйдем из комментария блока, мы увидим
8AaLsP
снова. На этот раз, однако, все переменные не определены (мы назвалиsp
, print, в режиме потребления, который избавляется от переменных). Посколькуaal
требуется два аргумента, и на этот раз он имеет только один (8
), он ошибается и оставляет переменные без изменений.Точно так же
sp
встречает8
, понимает, что это неправильный тип для печати, и оставляет переменные как есть.Строки 8-13
Все еще застрял в этом блоке комментариев ...
Линия 14
Наконец, мы пытаемся вызвать ту же самую последовательность print-first-8-chars еще раз, и она снова терпит неудачу, вызывая еще две ошибки. (Это
8
означает, что переменные сейчас8 8
, что является правильным числом переменных наaal
данный момент, но все еще не правильными типами.)1: а также четыре ошибки времени выполнения
SnowmanException
для STDERR, но для мета это не имеет значения .источник
The slashes are mostly for aesthetic purposes, and the majority of them can be replaced with spaces (but that would make it look a whole lot more boring)
Но это немного усложняет понимание того, что происходит ...> <> , ширина = 11
2D-языки неплохо проводят время с этим испытанием.
Стрелка вверх
Ход программы начинается сверху слева, двигаясь вправо.
/
Отражает, и так> <> является тороидальный мы вновь со дна. Затем мы/
нажимаем другое и снова размышляем, и помещаем символыklawstaC
один за другим в стек в""
режиме строки . Наконец, мы отражаем вверх и попадаем в>l?!;o
цикл, который является идиоматическим способом печати всего стека в> <>.Это печатает
Catswalk
.Стрелка вниз
По сути, это то же самое, толкая символы с самого начала и используя зеркала и стрелки для управления потоком программ. Это печатает
Birthday
.комбинированный
Соответствующие части выше (я вырезал много строк в середине). Используя
/
стрелку «вверх», мы отражаем вверх и оборачиваемся вокруг, но, поскольку теперь у нас есть стрелка вниз, часть этого кода выполняется вместо этого. Затем мы помещаем соответствующие символы в стек и повторно используем цикл вывода из стрелки вниз.Это печатает
Hey Jude
.источник
Python 2, размер 21
Эта программа требует ANSI-совместимого терминала ( точнее, DOS ANSI.SYS ), так как я использую,
\x1b[2J
чтобы очистить консоль И переместить курсор в верхний левый угол. Чтобы сделать это совместимым с другими терминалами ANSI, распечатайте\x1b[1J\x1b[H
(он по-прежнему может соответствовать размеру шестиугольника 21). Я не смог протестировать эту часть, потому что у меня нет терминала, который печатает управляющие коды ANSI.Я думаю, что программа выглядит довольно круто, похожа на радиоактивный символ (хотя затенение ASCII подразумевает цвета назад) или значок снайперского оружия из Metroid Prime: Hunters.
Он сделал посадку в размере 17, но я забыл
id=0
в стрелку вверх. Я не думаю, что смогу уменьшить его, так как все должно быть в одной строке ...Кроме того, кредит идет на Sp3000 за идею использовать
id
.Стрелка вверх:
Стрелка вниз:
"Эй, Джуд" - одна из моих любимых песен "Битлз", но я действительно не знаю так много. Я никогда не слышал две другие песни, которые я использую. Это не тот жанр, который я часто слушаю.
источник
\x1b[2J
работает только с ANSI.SYS; он не должен ничего делать в других терминалах. Кроме того,\x1b[;H
ожидает целое число после точки с запятой. Чтобы сделать для строки и столбца значение по умолчанию 1, используйте\x1b[H
. 2.\x1b[1J\x1b[H
и\x1b[H\x1b[J
должен работать на всех терминалах ANSI. 3. На терминалах Linux вы можете просто использовать\x1bc
для сброса терминала. 4.\x1b
может быть заменен буквальным байтом ESC, если это поможет улучшить ваш счет.C (gcc) , базовая ширина = 17
Верх "Эй, Джуд"
Попробуйте онлайн!
Снизу, "Спичечная коробка"
Попробуйте онлайн!
Шестигранник "Мишель"
Попробуйте онлайн!
источник
пупок, длина основания 15
Только что узнал, что это не работает с mawk : /
Это не слишком сложно, но когда я вырос в 70-х годах, когда «Битлз» все еще были вездесущими в эфире, мне пришлось ответить на это. Сначала я думал, что awk не подходит, но потом он пришел ко мне.
Поскольку эти сценарии содержат BEGIN- и / или END-блоки, им нужно сказать, что не будет входных данных для выполнения END-блока. Этого можно достичь, нажав Ctrl-D после их запуска, или запустив их так:
который я считаю более удобным.
echo | awk -f script.awk
также будет работать, но если бы я использовал пустую строку в качестве ввода, я бы сделал это совершенно по-другому.Указывая вверх, печатает For No One (ссылка на YouTube)
Основной код без комментариев это. Поскольку
n
он не определен, он печатает «For No One», если вызывается сам по себе.Указывая вниз, печатает черный дрозд
Основной код - это Если
n
был определен ранее, он ничего не печатает. Я ввел хороший вывод с новой строкой после каждого названия дорожки, потому что у меня была возможность сделать это, и в консоли это выглядит лучше.n
определяется в процессе; это нужно для шестиугольника.Шестиугольник, принты я так устал
Основной код. Теперь, наконец, таинственное
n
используется. Посколькуn
определяется в первой строке, направленный вверх треугольник печатает альтернативный вывод, а направленный вниз треугольник печатает пустоту.источник