Задача: Учитывая вход, состоящий ровно из одного из символов <>^v
, выведите второй вход, состоящий из печатных символов ASCII (от пробела до тильды), ориентированных со стрелкой.
Давайте предположим, что второй вход в программу ABC
. Вот что он должен делать:
- Ввод
>
: печатьABC
. - Ввод
<
: печатьCBA
. - Ввод
^
: печатьC\nB\nA
или ввод повернут на -90 °. - Ввод
v
: печатьA\nB\nC
или ввод повернут на 90 °.
Контрольные примеры
input => \n output
---
">", "thanks!" =>
thanks!
---
"<", "Hello, World!" =>
!dlroW ,olleH
---
"^", "This is text." =>
.
t
x
e
t
s
i
s
i
h
T
---
"v", "Tokyo" =>
T
o
k
y
o
---
"<", ">>>" =>
>>>
Это код-гольф , поэтому выигрывает самая короткая программа в байтах.
>ABC
>
ориентации.Ответы:
MATL ,
106 байт4 байта сэкономлено благодаря Мартину!
Попробуйте онлайн!
Старая версия, без операций по модулю: 10 байт
Попробуйте онлайн!
источник
mod 11
трюка (хотя вам придется вращать наоборот) ,Python 3,
645148 байтСохранено 6 байтов благодаря xnor.
Сэкономили 7 байтов благодаря Линн.
Сохраненный 3 байта благодаря DSM и Морган из так питона.
Функция принимает один из символов from
<>^v
в качестве первого аргумента и строку, которую необходимо повернуть в качестве второго аргумента.Вот более читаемая версия:
источник
s[1|-(c in'<^')]
иsep='\n'*(c in'^v')
lambda
если бы вы использовалиjoin
с вашим сепом, а не печать.Haskell, 57 байт
Пример использования:
f "v" "ABC"
->"A\nB\nC"
.Направление
>
функция idendity,<
переворачивает это аргумент,v
добавляет символ новой строки к каждому символу в строке и падает последний и^
являетсяv
последующим<
.источник
Japt, 9 байт
Вдохновленный ответом @ DonMuesli, хотя я только что заметил, что CJam использует точно такую же технику. Проверьте это онлайн!
Как это работает
источник
Error: Japt.stdout must be sent to an HTMLElement
и т.д.CJam, 13 байтов
Ввод - это символ ориентации, за которым непосредственно следует повернутая строка.
Проверьте это здесь.
объяснение
Yay для модуля магии. Взятие четырех символов по модулю 11 отображает их в:
Они различны по модулю 4 и более важно , они аккуратно растет:
3, 0, 1, 2
. Это означает, что мы можем просто использовать результат,mod 11
чтобы определить, как часто вращаться (без необходимости явногоmod 4
, так как четыре поворота в любом случае не используются). Обычно мы должны были бы сместить эти числа на 1, так что это>
фактически приводит к тому, что они8
становятся неактивными, но способ, которым я их чередую, фактически инвертирует строку в первом приложении, так что мы всегда получаем один поворот бесплатно.источник
Pyth,
1715Попробуйте здесь или запустите Test Suite
2 байта сохранены благодаря Jakube!
Альтернативно используя мод трюки:
Попробуй это здесь .
источник
Юлия, 51 байт
Это функция, которая принимает a
Char
и строку и возвращает строку.Позвольте
d
быть символом, обозначающим направление иs
быть строкой. Еслиd
слева или вверх, мы используем обратнуюs
, в противном случае мы используемs
как дано. Мы создаем разделитель как пустую строку, еслиd
слева или справа, или как новую строку, еслиd
вверх или вниз. Передайте строку и разделительjoin
, чтобы вставить разделитель между каждым символом строки и вернуть строку.Проверьте все тестовые примеры онлайн
источник
Bash + GNU Utilities, 67
источник
-q
's, но вы делаетеJavaScript (ES6),
766765 байтПорт ответа @Alex A.'s Julia. Изменить: Сохранено 9 байт благодаря @ETHproductions. Сохранено два байта отдельно благодаря @ edc65.
источник
/[v^]/.test(a)
=>'Z'<a
?:
версия была на 1 байт короче.(/v|>/.test(a)?[...b]:[...b].reverse())...
должно быть 65Perl
5451 + 1 = 52 байтаТребуется
-n
флаг и свободный-M5.010
|-E
, Принимает следующие данныеdirection\nline
:Мне нравится, что
$/x/[v^]/
выглядит как замена.Как это работает:
источник
PowerShell, 84 байта
Это будет полным бредом для людей, не знакомых с PowerShell. Давайте пройдем через это.
Принимает ввод
param([char]$a,$b)
с явным приведением к символу для$a
. Остальная часть программы - одно утверждение. Начнем с первой половины, до-join
.Мы создаем новый динамический массив
(...,...)
и индексируем его$a%7-eq6
. Значения ASCII дляv
и>
есть116
и62
, соответственно, и116%7 = 62%7 = 6
, и это два направления, которые «увеличиваются» вниз и вправо. Таким образом, если-eq
есть$true
, мы будем принимать второе значение, которое$b[0..$c]
, или массив символов$b
до конца . Мы получаем значение$c
из первого значения,$b[($c=$b.length)..0]
которое выбирается, если входной символ равен^
или<
(т. Е. Проходит через строку назад). Важно отметить, что даже если выбрано второе значение,$c
оно все равно вычисляется и сохраняется, поэтому мы можем использовать его как ярлык, как этот.Итак, теперь у нас есть массив символов, идущих вперед или назад. Затем
-join
эти символы вместе с результатом другого индекса динамического массива. На этот раз мы выбирающие в зависимости от того значения ASCII для$a
ниже90
( на самом деле много значений будут работать, я выбрал этот раз потому что). Так как>
и<
оба имеют значение ниже90
, то-lt
есть$false
, поэтому мы выбираем пустую строку""
, и, таким образом, массив символов просто объединяется. В противном случае мы выбираем символ новой строки,"`n"
чтобы присоединить массив символов вместе с символами новой строки.Эта результирующая строка остается в конвейере, а вывод неявным.
пример
источник
C
123119117114 байтовGolfed:
Тестовая программа с объяснениями и несколько неопрятным кодом:
Советы приветствуются!
источник
Сетчатка , 60 байт
Требуется в гольф ...
Ввод все как одна строка, например
^ABC
.^
или<
, переверните строку<
или>
, удалите новые строкиПопробуйте онлайн.
источник
Дьялог АПЛ , 15 байт
⍪
преобразовать строку в таблицу из 1 столбца⍣(
…)
repeat ( n ) раза⍞
получить входные данные строки,⎕UCS
преобразованные в11|
деление кодовой точки UCS, оставшиеся при делении на 11⌽∘⍉
повернуть -90 ° (перевернуть-переставить)Альтернативный метод (той же длины):
⎕
получить оцененный ввод (поэтому необходимо ввести, например, '^' или имя программы / переменной, которая возвращает желаемый символ)'<^>v'⍳
индекс в строкуисточник
Джольф, 22 байта
Попробуй это здесь! Вы должны заменить
ƒ
на\x9f
. Принимает жало, затем направленный характер.источник
JavaScript ES6,
918384 байтаСоздает необходимые строки и получает индекс, который
a
лежит в.indexOf
Используется, потому что^
это токен регулярного выражения. Спасибо ETHproductions за исправление ошибки и побритые байты!источник
f("v","abc")
возвращаетсяc\nb\na
за мной.(a,b)=>[b,(c=[...b].reverse()).join``,[...b].join`\n`,c.join`\n`]["><v^".indexOf(a)]
c
буквальноd
.JavaScript (ES6) 71
Тест
источник
Perl 5, 67 байт
66 плюс один для
-p
Входные данные представляют собой одну строку, первый символ которой определяет ориентацию.
источник
DUP , 48 байт
Try it here.
Анонимная лямбда, которая принимает как аргумент, так и ввод STDIN. Использование:
объяснение
источник
Серьезно, 41 байт
Принимает строку в качестве первого ввода и направление (
><v^
) в качестве второго ввода.Попробуйте онлайн!
источник
D 198 байт
: с
Менее гольф:
источник