В этой задаче вам необходимо сдвигать символы во введенной строке n раз и выводить смещенную строку
вход
Ввод сначала будет содержать строку. В следующей строке будет представлено целое число, которое обозначает n
.
Выход
- Если
n
положительно, сдвиньте символы в строке в нужноеn
время. - Если
n
отрицательный, сдвиньте символы в строке влевоn
раз. - Если
n
ноль, не сдвигайте символы в строке.
После сдвига (кроме случаев, когда n
ноль), выведите сдвинутую строку.
Примечания
- Строка не будет пустой или
null
. - Строка не должна быть длиннее 100 символов и будет содержать только символы ASCII в диапазоне
(от пробела) до
~
(тильда) (коды символов от 0x20 до 0x7E включительно). См. Таблицу ASCII для справки. - Сдвиг циклический.
- Число
n
может быть положительным, отрицательным или нулевым. n
всегда будет больше или равно -1000 и меньше или равно 1000- Вы можете получить ввод через
stdin
или из аргументов командной строки - Сдвинутая строка должна быть выведена в
stdout
(или ближайшем эквиваленте) - Вы можете написать полную программу или функцию, которая принимает входные данные и выводит строку в
stdout
или ближайшем эквиваленте
Тестовые случаи
1)
Hello world!
5 -->orld!Hello w
2)
Testing...
-3 -->ting...Tes
3)
~~~
1000 -->~~~
4)
12345
0 -->12345
5)
ABA
17 -->BAA
счет
Это код-гольф , поэтому выигрывает самое короткое представление (в байтах).
Javascript ( ES5 ),
5552 байтакомментарии:
источник
CJam, 5 байтов
Это довольно просто.
Попробуйте онлайн здесь
источник
C, 93 байта
Более понятной является версия аргумента функции, которая была изменена, чтобы сделать версию аргумента командной строки
Этот размер составляет всего 68 байт, что показывает, насколько уязвим C, когда имеет дело с аргументами командной строки.
Если сдвиг
n
положительный, тоstrlen(s)-n%strlen(s)
смещение, а еслиn
отрицательное, то смещение-n%strlen(s)
. Вprintf
принтах от смещения,c
к концу строки, а затем конечнымc
символам с самого начала.Примеры:
источник
v[2]
есть"1"
, код просто выводит строку без каких-либо изменений. И только так"~~~"
и"12345"
работает. Остальные из них дают неправильные выводы. Если бы они все повернулись еще раз, это было бы исправлено.main(a,v,n)
->n;main(a,v)
) clang на linux, и он работает как положено. Для gcc я использую версию 5.1.0 и компилирую сgcc -o rotstr rotstr.c
. Какой компилятор вы используете?n
глобальный тоже. Та же проблема. Я скомпилировал используяgcc file.c -o file
. Я использую GCC 4.8.1 на Windows. Есть ли неопределенное поведение в вашем коде?v[2]-v[1]-1
наstrlen(v[1])
может иметь значение, это единственное место, где я могу думать о чем-то тонком, происходящем. К сожалению, у меня нет доступа к машине с Windows для тестирования.Python 3, 45 байт
Ядро программы
Все остальное - просто неуклюжая работа с I / O.
источник
ABA 17
тестового случая, и будет в целом, если|n| > length of string
n=int(input())%len(s);
, он будет работать для целых чисел, превышающих длину строки, но потребует еще 7 символовК,
87 байтУже существует примитив rotate (
!
), который выполняет обобщение этой операции для списков. К строкам относятся списки символов, так что это применимо. Однако спецификация немного предпочитает CJam и Pyth, потому что вращение K происходит в противоположном направлении от желаемого. Обертывание!
в функции и отрицание неявного аргументаx
будут делать то, что мы хотим:Немного более короткий подход, предложенный kirbyfan64sos, состоит в том, чтобы покончить с круглыми скобками и отрицанием в пользу обращения строки (
|
) до и после поворота.Если бы не это несоответствие импеданса, решение было бы просто
Вызывается одинаково:
источник
|
, вернув ее назад, и наоборот, даст ли тот же результат? Если это так, вы можете отрезать персонажа.Пип, 10 байт
Вполне возможно, это может быть улучшено в дальнейшем. Тем не менее, для языка без оператора сдвига 10 байтов неплохие.
Объяснение:
Это работает , потому что строка и список индексации в Пип циклично:
"Hello"@9 == "Hello"@4 == "o"
.источник
RS , 180 символов
Живая демоверсия .
Большая часть этого - перестановка строки, если введенное число отрицательно. Я воспользовался тем фактом, что только некоторые символы ASCII являются допустимыми для ввода, и использовал вкладку в своих интересах.
Обратите внимание, что мне пришлось немного обмануть: поскольку rs - это однострочный текстовый модификатор, мне пришлось использовать его
<number> <text>
в качестве формата ввода.источник
Ява, 167
Принимает ввод через командную строку.
Как ни странно, изначально я случайно изменил порядок смещения струны. Но исправление этой ошибки было короче, просто умножив n на -1, чтобы правильно написать логику.
расширен:
источник
enum S{; ... }
?enum
можно использовать таким образом!Integer.parseInt
может бытьnew Integer
(-5 байт); иn%=l;
может быть удален, если вы изменитеr[0].substring(n)+
наr[0].substring(n%=l)+
(-2 байта). Кроме того, вы можете указать, что это Java 6, потому что в Java 7 или выше перечисление сmain
-method больше невозможно.PHP> = 7.1, 88 байт (неконкурентный)
Testcases
источник
Japt , 2 байта
Попробуйте онлайн
источник
Casio Basic, 27 байтов
Как выясняется, для Casio ClassPad это встроено! Но это работает наоборот, следовательно
-n
.24 байта для кода, 3 байта для указания в
s,n
качестве аргументов.источник
05AB1E , 6 байтов
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
Поскольку 05AB1E имеет только встроенные функции для Поворота один раз вправо / влево , а не для Поворота
N
количества вправо / влево , я повторяюlength + input
количество раз и поворачиваю это число раз вправо.Например:
10 + -3 = 7
вправо, в результате чегоting...Tes
.11 + 5 = 16
время вправо, в результате чегоworldHello
.источник
Юлия 0,6 , 31 байт
Попробуйте онлайн!
источник
Stax , 2 байта
Запустите и отладьте его
источник
Perl 5 +
-palF
, 26 байтПопробуйте онлайн!
источник