Описание задачи
Зацикливание всех букв из первой части алфавита в одном направлении и букв из второй половины алфавита в другом. Другие персонажи остаются на месте.
Примеры
1: Привет, мир
Hello_world //Input
Hell ld //Letters from first half of alphabet
o wor //Letters from second half of alphabet
_ //Other characters
dHel ll //Cycle first letters
w oro //Cycle second letters
_ //Other characters stay
dHelw_oroll //Solution
2: кодегольф
codegolf
c deg lf
o o
f cde gl
o o
focdeogl
3 .: пустая строка
(empty string) //Input
(empty string) //Output
вход
Струну нужно вращать. Может быть пустым. Не содержит новых строк.
Выход
Повернутая строка ввода, допускается завершающий перевод новой строки.
Может быть записано на экран или возвращено функцией.
правила
- Не допускаются лазейки
- Это код-гольф, поэтому выигрывает самый короткий код в байтах, решающий проблему
- Программа должна вернуть правильное решение
Ответы:
MATL , 29 байт
Попробуйте онлайн!
объяснение
источник
Сетчатка , 55 байт
Попробуйте онлайн!
Использует два этапа сортировки для поворота первой и второй половины букв по отдельности.
источник
05AB1E ,
444342 байтаобъяснение
Создайте список букв алфавита обоих случаев.
['Aa','Bb', ..., 'Zz']
Разделите на 2 части и сохраните копию в реестре.
Извлечение писем из ввода , которые являются частью 1 - й половины алфавита, повернуть его и хранить в X .
Извлечение писем из ввода , которые являются частью 2 - й половины алфавита, повернуть его и хранить в Y .
Основной цикл
Попробуйте онлайн!
Примечание: ведущий
Ð
может быть опущен в 2sable для 41- байтового решения.источник
<s>44</s>
по-прежнему выглядит как 44.Javascript (ES6),
155142138 байтИзменить: сохранено
34 байта с помощьюunshift()
(вдохновленный ответом edc65)Как это работает
R
Функция принимает метод массива в качестве параметраm
:Сначала он используется с
push
методом для хранения извлеченных символов вa[]
(первая половина алфавита) иb[]
(вторая половина алфавита). Как только эти массивы были повернуты,R()
вызывается второй раз сshift
методом для ввода новых символов в последнюю строку.Отсюда и немного необычный синтаксис:
R`push`
иR`shift`
.демонстрация
источник
a.unshift(a.pop(b.push(b.shift())))
CJam , 41 байт
Попробуйте онлайн!
Использует аналогичный подход к моему ответу на гласную перестановку .
источник
Python, 211 байт
Лучшее, что я мог сделать. Берет строку из STDIN и печатает результат в STDOUT.
альтернатива с 204 байтами, но, к сожалению, печатает новую строку после каждого символа:
источник
Python 2, 149 байт
источник
JavaScript (ES6), 144
Использование
parseInt
базы 36 для разделения первой половины, второй половины и других. Для любого персонажаc
я оцениваюy=parseInt(c,36)
так, чтобыc '0'..'9' -> y 0..9
c 'a'..'m' or 'A'..'M' -> y 10..22
c 'n'..'z' or 'N'..'Z' -> y 23..35
c any other -> y NaN
Так
y=parseInt(c,36), x=(y>22)+(y>9)
даетx==1
для первой половины,x==2
для второй половины иx==0
для любого другого (какNaN
> любое число является ложным)Первый шаг: входная строка отображается в массив из 0,1 или 2. Между тем все строковые символы добавляются в 3 массива. В конце этого первого шага матрицы 1 и 2 вращаются в противоположных направлениях.
Второй шаг: сопоставленный массив сканируется, восстанавливая выходную строку, беря каждый символ из 3 временных массивов.
Меньше гольфа
Тест
источник
Perl. 53 байта
Включает +1 для
-p
Запустите с помощью ввода на STDIN:
drotate.pl
:источник
Питон,
142133 байтаЛучшая вариация на тему:
ungolfed:
предшествующее решение:
ungolfed:
источник
Рубин, 89 байт
источник
PHP, 189 байт
Довольно сложно в гольф ... Вот мое предложение:
источник