Вы должны написать функцию / программу, которая принимает ввод через stdin
аргументы / аргументы командной строки / аргументы функции, смешивает символы в строке и затем выводит финальную строку через stdout
.
Сначала ввод будет содержать строку (не пустую или null
), пробел, а затем четное число неотрицательных чисел, разделенных пробелами. Если ввод берется через аргументы функции, строка будет одним из аргументов, а целые числа, разделенные пробелом, будут другими. Вы должны поменять местами символы строки с индексами, соответствующими последовательным парам чисел.
Например:
Hello_world! 0 6
должен привести к
wello_Horld!
Предположения
- Вы можете выбрать индексирование на основе 0 или 1 и предположить, что заданные индексы всегда будут в диапазоне.
- Строка не должна быть длиннее 100 символов и будет содержать только символы ASCII в диапазоне
!
от~
(коды символов от 0x21 до 0x7E включительно). См. Таблицу ASCII для справки. - Два индекса в паре могут быть идентичны (в этом случае на этом этапе ничего не поменяется местами).
счет
Это код гольф, поэтому выигрывает самое короткое представление (в байтах).
Тестовые случаи
Hello_world! 0 6 => wello_Horld!
First 1 2 1 0 0 4 => tFisr
(Second!$$) 8 7 10 1 => ()econd$!$S
~Third~ 0 0 6 6 0 6 6 0 => ~Third~
Ответы:
CJam, 11 байт
Как это работает
Это немного другой подход, в котором я просто запускаю цикл do-while, пока на входе не останется пар чисел.
Попробуйте онлайн здесь
источник
Python 3,
8986 байтРаспакуйте все вещи. (3 байта сохранены благодаря @potato)
источник
[*s],*L=input().split()
затем вы можете убрать строку после нее. Мне очень нравится ваше решение, кстати, оно почти элегантно, хотя и очень гольфы.CJam, 13 байтов
Проверьте это здесь.
объяснение
источник
С (137 б)
Объяснение идет ...
аргументы
T = слово типа char * .
V = массив четного числа целых элементов.
L = длина V
Вывод
смешанная строка
Как это работает ? :
подметает числа массива V и наоборот и помещает n-й элемент строки после отслеживания всего ее хода до фактической точки. пример
входные = T = "First", V = {1,2,1,0,0,4}
V перевернуто = {4,0,0,1,2,1}
Попробуй здесь
источник
int
не требуется (может привести к неожиданному поведению), аint
переменные, являющиеся параметрами, не нуждаются вint
переменных; вместо объявления в цикле можно объявить в одном месте вне цикла, использоватьputchar
вместоprintf
etcПитон 3 -
161149Гольф больше, меняя местами некоторые переменные и используя,
;
как в комментарии Тима.Я ожидал, что он выйдет в гольф, но не так сильно.
источник
while
Towhile c<len(t):line1;line2;line3...
.c=c+2
идетc+=2
c
на самом деле индексированиеt
(вход), чтобы получить позиции, которые мы должны поменять местами. Но посколькуt[0]
это строка, нам нужно поменяться местамиt[1]
иt[2]
провести первую пару перестановок .C
109107102 байтПримечание:
s
иa
должен быть объявлен как глобальные массивы.s
является строкой, которую вы хотите поменять, иa
является массивомint
со всеми числовыми значениями.Если приведенный выше код не работает, попробуйте использовать
void f(){...}
вместоf(){...}
Код Ungolfed:
Проверьте это здесь
источник
Питон 3, 135
Объяснение:
источник
C 70 байт
Учитывая, что длина входной строки не превышает 100, я решил сделать байт NULL, указывающий конец целочисленного массива, однозначным
0xFF
. Предположительно, это не считается дополнительным вводом, хотя при стоимости(максимум) 73 байта его можно превратить в индексирование на основе 1 и использовать'\0'
в качестве конца массива.Практически просто выполняет регулярную замену переменной tmp и использует, что оператор запятой вводит точки последовательности для определенного поведения (в отличие от некоторых проявлений перестановок xor, которые имели бы меньшее количество символов, но приводили к неопределенному поведению).
Изменить: По запросу вы можете проверить это: http://rextester.com/OVOQ23313 .
источник
Дротик - 123
Предполагается, что ввод в командной строке автоматически разделяется на пробелы. В противном случае необходимо начальное
x=x[0].split(' ');
для разделения строки на текст и индексы.С большим количеством пробелов:
Запустите / протестируйте это на dartpad.dartlang.org .
источник
Реболь - 71
Ungolfed:
источник
input
Функция не сможет вызывать STDIN оттуда. Обходной путь - просто установитьinput
значение, которое вы хотите проверить. Вот полный пример первого теста -input: "hello_World 1 7" s: take i: split input" "foreach[a b]i[swap at s do a at s do b]print s
и нажмите Do в Rebol 3 NB. Rebol использует индексирование на основе 1.C, 143 байта
Вышеуказанная программа принимает входные данные из аргументов командной строки, копирует строку в массив, заменяет соответствующие символы и затем выводит измененную строку.
Код Ungolfed:
источник
10
один из показателей.JavaScript (ES6), 95
95 байтов с одним вводом строки (функция f ниже)
75 байтов с 2 параметрами, массивом строк и чисел (функция g ниже)
(EcmaScript 6, только Firefox)
источник