Вдохновленный этим вызовом .
Цель:
Учитывая предварительно сконфигурированный коммутатор и список индексов, инвертируйте коммутаторы по указанным индексам.
Распределительный щит состоит из некоторого количества переключателей ( v
или ^
), завернутых в -
и размещенных в ряды различной длины. Вот пример коммутатора:
-v-^-v-
-^-v-
-v-^-v-
Инвертировать / перевернуть переключатель означает изменить его с v
на ^
или с ^
на v
.
Переключатели индексируются слева направо, сверху вниз. Например, в приведенном выше примере последний v
в первом ряду будет в позиции 3, а ^
в среднем ряду будет в 4 (с использованием 1-индексации).
Входные данные:
- Строка (или список строк), представляющая коммутатор. Это гарантированно соответствует регулярному выражению
((-[v^])+-)(\n(-[v^])+-)*
. - Возможно, пустой список чисел, представляющих индексы, может быть индексирован 0 или 1 (или произвольным числом, если хотите). Это переключатели, которые необходимо переключить.
Выход:
- Коммутатор той же формы, что и вход с указанными инвертированными переключателями. Любые неуказанные переключатели должны сохранять свое начальное состояние.
Правила:
- Входные данные всегда будут правильно отформатированы, и никакие заданные индексы не будут выходить за пределы.
- Список индексов будет отсортирован и не будет иметь дубликатов.
- Укажите в своем ответе, какой индекс вы используете, будь то 0, 1 или какой-то другой.
- Конечный пробел в порядке, пока вывод выглядит как ввод.
- Это код-гольф, поэтому выигрывает самый короткий код.
Примеры:
#Using 1-indexing
input: #Empty Case
[],
-v-^-v-
output:
-v-^-v-
input: #Single switch
[1],
-v-
output:
-^-
input: #Skip a line
[3,5],
-^-v-v-
-v-
-^-^-
output:
-^-v-^-
-v-
-v-^-
input: #Flip one in each line + number wrap
[3,4,6],
-^-v-v-
-v-
-^-^-
output:
-^-v-^-
-^-
-^-v-
input: #Flip 'em all
[1,2,3,4,5,6],
-^-v-v-
-v-
-^-^-
output:
-v-^-^-
-^-
-v-v-
>"-"
: поскольку входная строка гарантированно начинается с-
, вы можете проверить соответствие имени параметра / аргумента / переменной, которое вы используете для этого.Ответы:
Vim,
60, 46, 38, 37 байт / нажатий клавиш<esc>
и<C-r>
оба - 1 байт / нажатие клавиши. Счетчик байтовТестовый пример 1 (подробный режим)
Тестовый пример 2 (подробный режим)
Спасибо Grimy за идеи, которые привели к сокращению на 22 байта :)
источник
:s/\%V./\='v^'[submatch(0)=='v']
бытьcl<C-R>='v^'['<C-R>"'=='v']
для -13 байтов? (каждый <CR> только один байт).s == cl
, так в-14
целом.s^v!<Esc>?\<C-R>"<CR>xhf!x
илиs<CR>^v<Esc>:s/\V<C-R>"<CR>kgJ
.-
, так что это на самом деле работает! Duh.JavaScript,
6359 байтПопробуйте онлайн!
Сохранено 4 байта благодаря Арно .
источник
K (ок) ,
3127 байтРешение:
Попробуйте онлайн!
Объяснение:
Быстрый ответ, попробую в гольф это. 0 индексированные.
Заметки:
>93
трюкуисточник
Python 3 ,
140134103 байта(-30 благодаря DJMcMayhem ♦, -1 больше благодаря Black Owl Kai)
Попробуйте онлайн!
Oof, вторая попытка игры в гольф вообще. Это просто использует довольно простой цикл над строкой, который используется
x
для отслеживания текущего индекса переключателя. Использует 1-индексацию.Ungolfed:
источник
Желе , 12 байт
Полная программа, принимающая строку и список целых чисел, который печатает результат.
Попробуйте онлайн!
Как?
источник
Python 3.8 (предварительная версия) ,
80,78,77,71, 70 байт-1 байт, спасибо @Shaggy
Попробуйте онлайн!
источник
c>s
сохраняет байт.Perl 6 , 31 байт
Попробуйте онлайн!
(-2 байта благодаря Джо Кингу)
Оператор подстановки в Perl 6
S
удобно беретnth
наречие, которое принимает не только один индекс для выполнения замены, но и их список, именно так, как здесь необходимо.Замена - это
$/ ~^ '('
где$/
совпадающий текст (либо,v
либо^
), либо~^
строковый оператор исключения, либо, и(
символ, биты которого превращаютсяv
в,^
и наоборот.источник
MATL , 29 байт
Попробуйте онлайн! Или проверьте все текстовые случаи .
Входные данные - это массив ячеек строк и вектор строк чисел с индексированием на основе 1. Вывод дополнен правами пробелами.
источник
Python 2 ,
1059791 байтПопробуйте онлайн!
6 байт спасены
крастьс помощью преобразования Фурье Рина «Sc>'-'
вместоc in'^v'
.0
-indexed.источник
Желе , 14 байт
Попробуйте онлайн!
Полная программа.
Это слишком долго ...
источник
”-
имя первого аргумента (³
?), Который гарантированно будет начинаться с a-
?>
векторизация. Вы можете видеть, что это не работает .³
,⁴
,⁵
,⁶
и⁷
, для первого по пятый CLAs соответственно. Вы можете прочитать страницу Atoms, чтобы узнать, существует ли конкретная встроенная функция.Stax , 13 байт
Запустите и отладьте его
При этом используются индексы на основе 0.
[v^]
.40
. Этоxor('v', '^')
.источник
Чисто , 93 байта
Попробуйте онлайн!
Определяет функцию,
$ :: [Int] -> [Char] -> [Char]
принимающую список индексов с нулевым индексом и возвращающую функцию, которая принимает строку и возвращает измененную строку.источник
JavaScript (Node.js) ,
1019893917767 байтПопробуйте онлайн!
10 байтов, спасибо предложениям Шегги .
Порт моего Python ответа . Не привыкли к игре в гольф на JavaScript!
источник
V , 20 байтов
Попробуйте онлайн!
Используются некоторые новые функции, например,
Ñ
которые невероятно полезны.источник
JavaScript, 111 байт
Код
Принимает ввод в формате f (x) (y), где x - индексы, а y - коммутатор. Индексы 0 проиндексированы
Попробуйте онлайн!
объяснение
Для каждого индекса
построить регулярное выражение, которое находит индекс + 1-й "^" или "v"
вставьте его в строку, чтобы заменить его противоположным символом "v" <-> "^"
затем оцените строку как функцию
Перебирая индексы для переключения, верните коммутатор
источник
Желе , 17 байт
Попробуйте онлайн!
Полная программа, принимающая индексы в качестве первого и строку в качестве второго аргумента. Печатает вывод с указанными переключателями.
источник
Retina 0.8.2 ,
6662 байтаПопробуйте онлайн! Ссылка включает в себя тестовый пример. 1-индексироваться. Объяснение:
Преобразовать введенные числа в одинарные.
Transliterate между
v
и^
все символы с тем свойством , что числоv
х и^
S до сих пор (включительно) составляют один из входных чисел.Удалить введенные номера.
источник
Древесный уголь , 23 байта
Попробуйте онлайн! Ссылка на подробную версию кода. 0 индексированные. Объяснение:
источник
Рубин , 56 байт
1-индексироваться.
Попробуйте онлайн!
источник
C # (интерактивный компилятор Visual C #) , 73 байта
Попробуйте онлайн!
источник
Japt , 15 байт
Попытайся
источник
Japt ,
1614 байтовПопытайся
источник
:D
)