Вызов:
Входные данные:
Вы берете два ввода:
- Строка, содержащая только печатаемый ASCII (исключая пробелы, символы табуляции или новые строки)
- Печатный символ ASCII
Выход:
Первая строка будет содержать строку ввода. Каждое i
первое появление -modulo-3 этого персонажа будет двигаться в юго-восточном направлении; каждое i
появление -модуло-3 секунды будет двигаться в южном направлении; и каждое i
третье вхождение -модуло-3 будет двигаться в юго-западном направлении. Вы будете продолжать до тех пор, пока символы снова не окажутся в своей начальной начальной позиции (что означает, что при необходимости они будут переворачиваться с одной стороны на другую), а затем вы снова напечатаете последнюю строку со строковым вводом, чтобы закончи это. (Обратите внимание, что все тестовые случаи будут заканчиваться на своем начальном вводе после не более чем length(input)
строк, включая строку, содержащую завершающий ввод. Это может быть быстрее, хотя, как показано в этом первом тестовом примере ниже, с длиной 14, но заканчивается после 9.)
Это может быть довольно расплывчато, так что вот пример:
Тестовый пример 1:
String-input: "This_is_a_test"
Символьный ввод:'s'
Выход:
This_is_a_test
s s s
ss s
s s
sss
sss
s s
ss s
s s s
This_is_a_test
Вот тот же тестовый пример с цветными контурами трех s
:
где первая 's'
следует по зеленой тропе в юго-восточном направлении; вторая 's'
следует по желтому пути в южном направлении; и третий 's'
следует по светло-синему пути в юго-западном направлении. (Если будет четвертый, 's'
он снова пойдет в юго-восточном направлении, что можно увидеть в некоторых других тестовых примерах ниже.)
Правила соревнований:
- Входные данные будут содержать только печатные ASCII (исключая пробелы, табуляции и новые строки)
- Форматы ввода / вывода являются гибкими. Может быть строка с разделителями новой строки, символьная матрица и т. Д. Ваш вызов.
- Возможно, что данный символ отсутствует в строке, и в этом случае вам разрешается либо выводить строку ввода один или два раза (т.е.
"test", 'a'
может иметь любой из них в качестве возможного вывода:"test\ntest"
/"test"
). - Ведущие пробелы обязательны; завершающие пробелы не являются обязательными. Разрешены один или несколько ведущих / конечных новых строк.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это необходимо.
Тестовые случаи / больше примеров:
Контрольный пример 2:
String-input: "abcabcabcabcabc"
Символьный ввод:'b'
Выход:
abcabcabcabcabc
b b b b b
bbb bb
b b
bbb bb
b b b b b
b b b b
b b b b b
bb b bb
b b b
bb bbb
b b bbb
b b b b
b bb bb
b b bb b
abcabcabcabcabc
Вот тот же тестовый пример с цветными дорожками из пяти a
:
Тестовый пример 3:
String-input: "only_two_paths?"
Символьный ввод:'o'
Выход:
only_two_paths?
o o
o o
o o
o o
o o
oo
o
oo
o o
o o
o o
o o
o o
o o
only_two_paths?
Вот тот же тестовый пример с цветными контурами двух o
:
Контрольный пример 4:
Строковый ввод: "lollollollollol"
ввод символов:'l'
Выход:
lollollollollol
lll ll ll
ll ll ll
l ll ll ll ll
lll l ll l ll
llllll ll ll
l l ll ll
ll lll ll
l l l lll ll l
ll l ll l l
l l l l llll l
ll lll lll
l l l ll
ll lll lllll
l l l ll l ll
lollollollollol
Вот тот же тестовый пример с цветными дорожками из десяти l
:
Тестовый пример 5:
Строковый ввод: "AbCdEeDcBaAbCdEeDcBa_CCCCC"
ввод символов:'C'
Выход:
AbCdEeDcBaAbCdEeDcBa_CCCCC
C C C C C
C C C C CCC
C C C C C C C
C C C C C C C
C C C C C C C
C C C C C C C
C C C C C C C
C C C CC C C
C C CC C C
C C CC C C
C C CC C
CC CC C C
CC CC C C
C C CC C C
C C CC C C C
C C C C C C
C C CC C C C
C C C C C C C
C C C C C C C
C C C C C CC
C C C C C C
C C C C CCC
C C C CCCC
C C C C
C C CCCCC
AbCdEeDcBaAbCdEeDcBa_CCCCC
Вот тот же тестовый пример с цветными дорожками семи C
:
Контрольный пример 6:
Строковый ввод: "XyX"
ввод символов:'X'
Выход:
XyX
XX
X
XyX
Вот тот же тестовый пример с цветными контурами двух X
:
Тестовый пример 7:
Строковый ввод: "aaaa"
ввод символов:'a'
Выход:
aaaa
aa
aaa
aaa
aaaa
Вот тот же тестовый пример с цветными контурами четырех a
:
length(input)
все снова совпадает, но это может произойти раньше, как доказывает первый тестовый пример. Но, похоже, вы действительно правы относительно кратности 3 части (хотя я не уверен на 100%).Ответы:
Stax , 24 байта
Запустите и отладьте его онлайн
Это представление ascii той же программы.
Он получает индексы всех персонажей, а затем мутирует их до тех пор, пока они не станут по порядку равными исходным индексам. Для каждого изменения выведите строку с символом в этих индексах.
источник
Perl 5 ,
-plF
10110099989796 байтЗамените
\0
байтовым 0 байтом, чтобы получить 96. Обратите внимание, что ссылка Try It Online содержит 97 байтов, потому что кажется невозможным ввести туда буквальный символ 0.Код для гольфа Perl Highlighter думает
#
начать комментарий. Как наивно 😈Попробуйте онлайн!
Как это работает
$l
является счетчиком, для которого после первой строки мы находимся (хотя отсчитывается, например, -3 для 3 строк ниже верхней строки). После печати исходной строки один раз она повторяет следующее.Найдите в первой строке вхождения целевого символа и рассчитайте, в каком смещении он должен появиться:
(++$#$l%3*$l-$l+"@-")%@F
какой является текущая позиция плюс номер строки (отрицательный) раз-1, 0, 1
(циклический). Создайте строку с таким количеством раз,\0
за которым следует целевой символ, а затемor
- в аккумуляторе$$l
(это отдельный аккумулятор для каждого,$l
и причина$l
отсчитывается, а не вверх, потому что$1
и$2
т. Д. Только для чтения). Simularly$#$l
ссылается на другой массив каждый раз через цикл. Результатом является$l
th-я строка, но с\0
пробелами.Целевые символы в первой строке заменяются
\0
на исходную строку с «отверстиями» (с\0
) в исходных позициях целевого символа. Если выxor
используете аккумулятор, отверстия заполняются тогда и только тогда, когда аккумулятор содержит целевые символы в исходных позициях, поэтому результатом будет исходная строка. Это используется для завершения цикла. Если цикл еще не закончен, выведите аккумулятор с\0
заменой на пробел.Когда цикл заканчивается,
-p
опция снова печатает первую строку, и программа завершается.Целевой персонаж подбирается довольно хитрым способом. В
${\<>}
обращенную линии читать из STDIN в качестве ссылки , который затем немедленно разыменован и замещенной в регулярном выражении.\Q
Префикс ускользает все символы , которые являются особенными в регулярном выражении (как.
и*
). Это\E
неявное.o
Модификатор вызывает поиск часть никогда не будет оцениваться еще раз , но только повторяется во всех последующих матчах (это хорошо , так как нет ничего на STDIN больше).источник
Python 2 ,
199193191 байтПопробуйте онлайн!
Если цикл может выйти через исключение:
Python 2 , 187 байт
Попробуйте онлайн!
источник
(j[i]-i%3+1)%l
течение двух байтов.C (gcc) , 261 байт
Попробуйте онлайн!
источник
JavaScript (Node.js) ,
197194 байтаПопробуйте онлайн!
Принимает входные сигналы в выделки синтаксис, то есть
f(s)(c)
.Совсем не идеальный, но мне нужен JS. Много функций в функции.
источник
Рубин ,
189 176 171 156 150 146 144137 байтПопробуйте онлайн!
источник
Желе , 33 байта
Попробуйте онлайн!
Вызов как функция. (двоичная ссылка)
Я нашел несколько 33-байтовых альтернатив , но без реальных улучшений.
источник