вход
Непустая перетасованная строка, состоящая из символов ASCII в диапазоне .
Выход
Выход получается путем применения последовательных поворотов к входной строке.
Для каждой буквы ( [a-zA-Z]
) во входной строке, идущей слева направо:
- если буква в верхнем регистре, поверните все символы перед ней на одну позицию влево
- если буква в нижнем регистре, поверните все символы перед ней на одну позицию вправо
пример
Вход: "Cb-Ad"
- Первая буква " С ". Мы должны повернуть налево, но перед этим буквой " C " нет символа . Так что вращать нечего.
- Следующая буква - « б ». Вращаем « С » вправо. Поскольку это один символ, он остается неизменным.
- Символ « - » не вызывает вращения, так как это не буква.
- Следующая буква " А ". Поворачиваем « Cb- » влево, что дает « bC Ad»
- Четвертая и последняя буква - « д ». Поворачиваем « b-CA » вправо, что дает « Ab-C d»
Следовательно, ожидаемый результат - « Ab-Cd ».
правила
- Вы можете воспринимать ввод как строку или как массив символов - что может или не может быть одним и тем же, в зависимости от вашего языка.
- Вы также можете вывести массив символов вместо строки.
- Это код-гольф
ogl-edocf
Контрольные примеры
"cbad" -> "abcd"
"ACBD" -> "ABCD"
"Cb-Ad" -> "Ab-Cd"
"caeBDF" -> "aBcDeF"
"aEcbDF" -> "abcDEF"
"ogl-edocf" -> "code-golf"
"W o,ollelrHd!" -> "Hello, World!"
"ti HIs SSta ET!" -> "tHis IS a tEST!"
code-golf
string
code-golf
string
code-golf
string
parsing
brainfuck
code-challenge
python
hello-world
error-message
code-golf
string
code-golf
number
integer
counting
subsequence
code-golf
string
cipher
code-golf
array-manipulation
arithmetic
integer
matrix
code-golf
math
sequence
code-golf
restricted-source
pi
popularity-contest
cops-and-robbers
polyglot
popularity-contest
cops-and-robbers
polyglot
code-golf
file-system
king-of-the-hill
code-golf
number
sequence
integer
rational-numbers
string
code-challenge
source-layout
code-golf
ascii-art
king-of-the-hill
code-golf
array-manipulation
sorting
code-golf
string
code-golf
restricted-source
source-layout
tips
math
code-challenge
permutations
logic-gates
code-golf
number
random
integer
code-golf
math
code-golf
math
number
decision-problem
king-of-the-hill
python
board-game
code-challenge
brainfuck
busy-beaver
code-golf
number
cops-and-robbers
polyglot
obfuscation
answer-chaining
code-golf
number
integer
conversion
code-golf
string
parsing
code-golf
ascii-art
number
king-of-the-hill
javascript
code-golf
source-layout
radiation-hardening
code-golf
array-manipulation
matrix
code-golf
string
graph-theory
code-golf
array-manipulation
decision-problem
code-golf
string
ascii-art
code-golf
string
code-golf
array-manipulation
Arnauld
источник
источник
.U
для уменьшения ввода от 2-го значения. Это позволяет отказаться=k
от начала и)k
конца, поскольку ввод и печать неявны. Полная программа:.U+.>b-}ZG}Zr1GZ
- ссылкаPython 2 ,
1009895 байтПопробуйте онлайн!
источник
Желе , 14 байт
Монадическая ссылка, принимающая список символов, который выдает список символов.
Попробуйте онлайн! Или посмотрите набор тестов .
Как?
источник
I
поступать так же, какḅ-
в этом случае? Кажется, здесь работает , но не в вашем коде. Я немного запутался, почему. Кроме того, есть ли команда, чтобы поместить все списки как отдельные элементы в стек в Jelly (подождите, Jelly не является языком, основанным на стеке, не так ли ...)? В этом случае можно использовать простое вычитание, и вам также не понадобится отрицание, если я не ошибаюсь (аналогично последнему редактированию в моем ответе 05AB1E).I
дает список - добавить,ŒṘ
чтобы увидеть полное представление . ТакØẠŒHċ€IṪN⁸ṙ;ð/
будет работать.05AB1E ,
18171614 байтовПопробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
К4 ,
4333 байтаРешение:
Примеры:
Объяснение:
Выполните итерацию по входной строке, поворачивая предыдущий вывод на 1, -1 или 0 в зависимости от его положения в списке «a-zA-Z».
Заметки:
источник
> <> ,
4543 байтаПопробуйте онлайн!
Тот факт, что> <> имеет ротацию стека, помогает, но необходимость проверять регистр букв - нет.
Объяснение:
источник
Haskell ,
10191 байт-10 байт, вдохновленный ответом Кертиса Бектела (используйте
'@'<c,c<'['
надelem c['A'..'Z']
и соответствующий диапазон для строчных букв).Попробуйте онлайн!
Объяснение / Ungolfed
Оператор
(!)
берет непустую строку,x
по которой мы можем сопоставить шаблон и символ:Теперь мы можем уменьшить хвост ввода слева направо, начиная с первого символа ввода, используя:
источник
Haskell ,
12292 байтаСпасибо BWO за предложения! Я также много сэкономил, приняв немного иной подход, чем мой первоначальный ответ.
Попробуйте онлайн!
источник
(#)
, использовать,
более&&
, использовать[l!!0,c]
болееhead l:[c]
,1>0
вместо тогоTrue
, чтобы считать, вам не нужно считать,f=
и вы можете предполагать непустые входные данные, которые сохраняютl==[]
защиту - вы экономите 13 байт: попробуйте онлайн!isLower
иisUpper
гольф в своем представлении , я надеюсь, что вы согласны с этим, в противном случае я переверну мои измененияJavaScript (Node.js) ,
116102 байтаПопробуйте онлайн!
Оригинал (
116111106B)s=>Buffer(s).map((x,i)=>s=(t=s[S="slice"](i),i<2)?s:x>64&x<91?s[S](1,i)+s[0]+t:x>96&x<123?s[i-1]+s[S](0,i-1)+t:s)&&s
s=>Buffer(s).map((x,i)=>i<2|--x%32>25|x<64?s:s=[s[S="slice"](1,i)+s[0],s[i-1]+s[S](0,i-1)][+(x>95)]+s[S](i))&&s
s=>Buffer(s).map((x,i)=>!i|--x%32>25|x<64?s:s=(w=x>95,t=s.slice(1-w,i-w),w?s[i-1]+t:t+s[0])+s.slice(i))&&s
источник
eval(`regex`)
чем использование конструктораeval(`regex`)
, поэтому -2 + 2 = 0, и, следовательно, это не помогает уменьшить количество байтов.eval()
когда используется хотя бы один флаг:eval('/./g')
на 3 байта меньше, чемRegExp('.','g')
.Рубин , 51 байт
Попробуйте онлайн!
Ввод и вывод - это массивы символов
Трюк:
Код довольно прост, за исключением, возможно, части поворота:
x - это один символ, который может быть буквой, первое выражение
x=~/\W/
возвращает,nil
если это буква, и 0 в противном случае. Если это 0, мы закончили, если нет, логическаяor
проверка второго выражения:?_<=>x
возвращает -1 для верхнего регистра и 1 для нижнего регистра. Итак, вращение:источник
красный , 110 байт
Попробуйте онлайн!
Объяснение:
источник
Perl 6 , 47 байт
Попробуйте онлайн!
Работает на массиве символов.
источник
Japt,
171614 байтовПринимает ввод как массив символов, выводит строку
Попытайся
объяснение
источник
Желе , 19 байт
Попробуйте онлайн!
источник
Java 10,
149119 байтПорт @ShieruAsakoto JavaScript ответ , поэтому обязательно проголосуйте за него.
Попробуйте онлайн.
Объяснение:
источник
Stax , 32 байта
Запустите и отладьте его
Большая замена стека, что, вероятно, не нужно. Я действительно хотел бы получить это больше, но я боролся с упорядочением стека. Может быть, кто-то может понять это, если им скучно. Будет продолжать работать над этим.
источник
Атташе , 69 байт
Попробуйте онлайн!
объяснение
Общая форма
Функция выглядит в основном так:
Который складывается
{...}
на каждого члена в диапазоне от0
до#input - 1
(Iota
), начиная с ввода в качестве начального числа.Внутренняя функция
Следующая функция вызывается как
f[building, index]
и вызывается с каждым индексом от0
до#input
эксклюзивных.@SplitAt
вызываетSplitAt
эти аргументы, разделяя входную строку наindex
.По сути, эта функция вращает левую часть строки в соответствии с первым символом правой части.
источник
Древесный уголь , 20 байтов
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Зацикливайте вводимые символы.
Сопоставьте строку собранных символов до настоящего времени, циклически индексируя до собранных символов до сих пор с индексом, увеличиваемым или уменьшающимся, если текущий символ является прописным или строчным соответственно. Это завершает вращение. Затем следующий символ объединяется, и результат присваивается обратно строке.
Распечатайте результат.
источник
R ,
107102100 байтМассивный, потому что манипуляции с R громоздки. Кто-нибудь может получить его под 100?
-5 байт, используя трюк «установить переменные цикла в F, чтобы избежать инициализации».
-2 байта, предполагая, что все символы печатаются и используются,
2*!k%%97>25
а не2*k%in%97:122
для проверки строчных букв, с использованием приоритета оператора.Попробуйте онлайн!
источник
Japt ,
2523 байтаЯ сдаюсь, не могу сделать это короче
-2 байта из @ETHproductions
Попробуйте онлайн!
источник
éXè\a -Xè\A
это :-( Вы можете сохранить два байта, изменив двойной пробел на a)
и удалив©
(неявная запятая означает, чтоU
он все еще выводится)ÃU
и используя-h
флаг.Сетчатка ,
676458 байт-9 байт благодаря @Neil удалив три ненужных
?
я добавил, а также ненужные(.*)
в остальном случае.Попробуйте онлайн или проверьте все тесты . (ПРИМЕЧАНИЕ: выходы с завершающим символом новой строки. Заголовок в наборе тестов предназначен для проверки каждой строки ввода как отдельного тестового примера, а нижний колонтитул должен удалить этот завершающий перевод строки для более компактного вывода.)
Объяснение:
Добавить новую строку перед вводом:
Продолжайте замену, пока мы можем найти соответствие:
Все остальное - это три разные проверки, объединенные вместе:
Если символ сразу после новой строки является строчной буквой: поверните все до новой строки один раз вправо, а затем добавьте этот символ и новую строку:
Если символ после новой строки является заглавной буквой: поверните все до новой строки один раз влево, а затем добавьте этот символ и новую строку:
Иначе (ни строчные, ни прописные буквы): просто сдвиньте новую строку один раз вправо для следующей «итерации»:
Эти три проверки, приведенные выше, объединены с операторами регулярных выражений OR (
|
) и более крупными групповыми заменами, чтобы заставить его действовать какif(lowercase) ... elseif(uppercase) ... else ...
:источник
?
s - если нечего вращать, не имеет значения, есть ли письмо.(.*)¶(.)
на$1$2¶
может быть упрощена заменой¶(.)
на,$1¶
поскольку другой захват не влияет на результат.MATL , 20 байтов
Попробуйте онлайн!
-4 байта благодаря Луису Мендо.
Преобразует прописные / строчные / не буквы в [-1,0,1] (первая половина программы). Применяет круговое смещение последовательно (вторая половина). Я ломаю свой мозг, если есть лучший способ отобразить прописные / строчные буквы на [-1,0,1] (см. Вторую версию), и, возможно, способ сразу перевернуть строку, чтобы избавиться от двух
w
нужно для&)
.источник
С (лязг) ,
168159153119 байт-26 благодаря @ceilingcat
Попробуйте онлайн!
источник
g=a[j=i++];islower(a[i])?bcopy(a,a+1,j)
вместоa[j=i++];islower(a[i])?g=a[j],bcopy(a,a+1,j)
Pyth, 16 байт
Попробуй это здесь!
Объяснение:
источник