Введение
Давайте посмотрим на следующую строку:
ABCDEFGHIJKLMNOP
Если мы поменяем местами концы строки , это:
ABCDEFGHIJKLMNOP
^^ ^^
Мы получаем следующий результат:
BACDEFGHIJKLMNPO
После этого мы удаляем концы строки, которые в этом случае являются B
и O
. Результат:
ACDEFGHIJKLMNP
Если мы повторим процесс, мы получим следующий список:
N Result
2 ADEFGHIJKLMP
3 AEFGHIJKLP
4 AFGHIJKP
5 AGHIJP
6 AHIP
7 AP
Вы можете видеть, что для N = 5 результат равен AGHIJP
. При N = 7 длина строки меньше 3 , поэтому в этом случае N> 7 считается недействительным .
Задание
Если задана строка S с длиной не менее 4 и числом повторений N > 0, выведите окончательный результат. Вы можете предположить, что N всегда верно .
Контрольные примеры
Input > Output
N = 3, S = ABCDEFGHIJKLMNOP > AEFGHIJKLP
N = 1, S = Hello > Hlo
N = 2, S = 123321 > 11
Это код-гольф , поэтому выигрывает представление с наименьшим количеством байтов! Для простоты можно предположить, что строка будет содержать только буквенно-цифровые символы.
'
символом счета? Например:''123321
?N
, но это может быть строка, с кавычками? Я имею в виду, чтобыN=3
взять'111'
(в отличие от111
)Ответы:
MATL , 8
91213байтВходные данные: сначала
N
в виде унарной строки с кавычками (разрешено заданием); второйS
как строка с кавычками (кавычки в строках разрешены по умолчанию); разделены переносом строки.Это работает путем переворачивания строки, удаления ее второго элемента и повторения в общей сложности несколько
2*N
раз.Попробуйте онлайн!
источник
Retina ,
4420 байтВычеркнул 44, все еще регулярно 44 :(
Предполагается ввод в следующем формате (с одинарным счетом:)
'
:{number of repeats}{string}
Например:
'''''''ABCDEFGHIJKLMNOP
между числом повторов и строкой нет пробела.
Спасибо @ MartinBüttner за то, что он сбрил 24 байта!
Попробуйте онлайн!
источник
Python 2, 31 байт
Я думаю, что это работает?
источник
Mathematica, 29 байт
Мой первый ответ!
Суть бескаркасного Mathematica! Функциональные входы - это список (символов или чего-либо еще) и число.
источник
Лабиринт , 40 байт
За вводом
N
следует строка, отделенная любым нечисловым символом.Попробуйте онлайн!
Это было написано в сотрудничестве с Sp3000 (что означает, что я не мог разобраться с алгоритмом, поэтому он начал работать над ним, придумал 118-байтовое решение, но не мог быть обеспокоен игрой в гольф, поэтому я занялся гольфом. .. ура для совместной работы).
объяснение
Обычный праймер Sp (как обычно, немного модифицированный):
<>^v
который циклически сдвигает строку или столбец или сетку."
нет опс.Вот так.
Код начинается
<
с трюка, который я использовал несколько раз, когда начинал с длинного куска линейного кода. Он смещает первый ряд циклически влево с IP-адресом , поэтому источник выглядит следующим образом:Но теперь IP не может никуда двигаться, поэтому он выполняет
<
снова. Это продолжается, пока мы не достигнем этого состояния:В этот момент IP может покинуть ячейку и начать выполнение второй строки, начиная с
?
. Итак, вот линейный код с разбивкой:Теперь IP входит в эту комнату 3x2, которая на самом деле представляет собой две сильно сжатые (перекрывающиеся) петли 2x2 по часовой стрелке. Первый цикл читает и отбрасывает
N-1
символы из STDIN.Теперь мы вводим второй цикл, который читает остаток входной строки. Мы можем обнаружить EOF, потому
,
что-1
в этом случае вернемся , и IP повернет налево.Это уменьшение на самом деле не полезно, но мы можем отменить его позже бесплатно, и здесь оно позволяет нам перекрывать два цикла.
Если мы возьмем
5 ABCDEFGHIJKLMNOP
входные данные в качестве примера, стек выглядит так:Обратите внимание, что они на самом деле соответствуют входным символам
FGHIJKLMNOP
(потому что мы их уменьшили), и что мы на самом деле не хотим печатать первые из них (мы только отбросилиN-1
символы, но хотим пропуститьN
).Теперь есть короткий линейный бит, который подготавливает стек к следующему циклу:
Стеки теперь выглядят так:
Мы входим в другой цикл 2x2 по часовой стрелке. Это отбрасывает верхние
N
символы из основного стека:Когда мы выходим из цикла
=
,0
снова меняем местами последний и последний символ входной строки. Теперь стеки выглядят так:Мы хотим напечатать содержимое основного стека (кроме нижнего элемента и всего с шагом 1) слева . Это означает, что нам нужно передать его во вспомогательный стек. Вот что делает следующий цикл 2x2 (по часовой стрелке):
Стеки сейчас:
Мы перемещаем первый из них (тот, который мы не хотим печатать) обратно в основной стек
{
. И теперь мы входим в последний цикл 2x2 ( против часовой стрелки ), который печатает остаток:Наконец мы завершаем программу с
@
.источник
JavaScript (ES6), 39 байт
Оказывается, я просто заново изобрел ответ @ Sp3000.
источник
Желе, 8 байт
Попробуйте онлайн!
Как это работает
источник
Желе , 10 байт
Введите число через STDIN, а строку через аргументы командной строки . Спасибо @Dennis за много подсказок / помощь, чтобы заставить это работать (Jelly все еще ускользает от меня).
Попробуйте онлайн!
источник
ḢṪḊṖƓ¡
все используют более 1 байта), или вы используете какую-то таблицу кодов символов для удобства чтения?Pyth, 13 байт
Объяснение:
Попробуй здесь
источник
Vitsy,
129 (код) + 1 (перевод строки для объявления функции) = 10 байт\ О /
Ожидается ввод в стек в виде строки, за которой следует число.
Который вы можете позвонить с:
Это функция, которая оставляет результирующую строку в стеке. Я предоставил это как программу в ссылке TryItOnline.
TryItOnline!
источник
Python 2,
4948 байтовПопробуйте здесь с тестовыми примерами!
Простое рекурсивное решение. Удаляет второй и последний второй элемент из входной строки и вызывает себя с этим и
n-1
доn=0
.редактировать: чувствую себя немного глупо, глядя на другое решение Python . Думаю, я просто слишком люблю рекурсию ...
источник
C 96 байтов
Ungolfed
источник
Рубин, 29 байт
Очень просто.
~
трюк, украденный из ответа Sp , который сохраняет байтs[n+1..-2-n]
. (Это работает, потому что~n
находится-1-n
в двух дополнениях, а затем...
является эксклюзивным диапазоном.)источник
Perl,
3632 + 1 = 33 байтаТребует
-p
флаг и принимает данные в две строки с числом итераций в конце:Ungolfed?
источник
CJam, 12 байт
Попробуйте онлайн!
Как это работает
источник
Октава, 28 байт
Индексируйте строку, опуская
S(2:N+1)
иS(end-N:end-1)
.Пробный прогон на идеоне .
источник
Ржавчина, 135 байт
Ну, это довольно ужасная длина.
Довольно отпечатанный:
Вы можете уменьшить его до 104 байт, если мы допустим строки байтов вместо правильных строк.
Довольно отпечатанный:
Любопытно, если кто-нибудь может сделать лучше.
источник
mSL - 137 байт
Объяснение:
%l = $len($1)
получит длину входной строки и сохранит ее в переменной с именем l$right(<input>,<length>)
и$left(<input>,<length>
может использоваться для возврата левой или правой части оригинальной строки соответственно. $ left всегда возвращает текст, начинающийся с самой левой стороны, а $ right всегда возвращает текст, начинающийся с правой стороны. Если указанная длина является отрицательным числом, $ left и $ right возвращают весь текст минус столько символов с соответствующих сторон.$mid(<string>,<start>,[length])
используется для получения подстроки из середины строки. Начало - это начало подстроки слева. Отрицательное значение указывает начало справа. В обоих случаях указывается необязательная длина. Отрицательная длина может быть использована для удаления такого количества символов с конца. Поэтому я использовал его для извлечения второго символа и второго последнего символа, используя длину входной строки.$calc(<input>)
используется для выполнения математических расчетовисточник
На языке без названия (новый неконкурентоспособный) 9 байт
Вы можете найти исходный код здесь , язык совершенно нестабилен (первое испытание для него), поэтому не ожидайте, что он будет работать в будущем (commit 7)
Это основанный на стеке язык с функциями, которые добавляют и удаляют объекты из стека. В настоящее время есть 2 команды манипуляции со стеком:
D
(дублируйте вершину стека N раз) иR
(вращайте верхние N элементов в стеке)Объяснение:
источник
CJam, 14 байтов
Проверьте это здесь.
объяснение
источник
Vim, 27 байт
Ожидается, что вход будет в форме
STRING N
в первой строке без других символов.Объяснение:
источник
Brainfuck, 130 байт
Моя первая запись PPCG!
Очевидно, не выиграю, но эй.
Принимает следующие данные: 4ABCDEFGHIJKL, первый символ - N.
Проверьте это на этом замечательном сайте.
Ограничено N меньше или равно 9, потому что двузначные числа являются болью в заднице.
РЕДАКТИРОВАТЬ: Я смирился с этим и добавил поддержку двузначных чисел. Pad с нуля для однозначных.
источник
Perl, 27 байт
Включить +1 для
-p
Беги как
perl -p sdr.pl
Ввод данных в STDIN, первая строка - строка, вторая строка - число Предполагается, что строка содержит только символы «слова»
sdr.pl
:источник
PHP, 60 байт
Это решение итеративно устанавливает символы из входной строки в пустую строку по индексу. Я манипулирую входной строкой напрямую, чтобы предотвратить длинные
return
.В основном в памяти
$w
выглядит так, когда сделано:Запустите так:
источник
<?for(;$I;)$W[$I--]=$W[strlen($W)-$I-2]="";echo$W;
. Он ожидает значения на ключахW
иI
, по сравнению с POST / GET / COOKIE ... Примером может служитьhttp://example.com/a.php?W=MyString&I=5
register globals
больше. Спасибо за предложение, хотя :)Пилоны , 16 байтов.
Как это работает:
источник
CJam, 15 байтов
Я уверен, что это возможно в гольф дальше ...
источник
Джольф, 13 байт
Ответ на JavaScript.
Объяснение:
Попробуй это здесь!
Более интересная пост-вопросная версия:
источник
Серьезно, 17 байтов
Принимает вход как
s \n n
.Попробуйте онлайн!
Объяснение:
источник
C #, 129 байт
Так как мы в основном пропускаем 1 и удаляем N и обратный сценарий
ungolfed
источник
Java, 144 байта
источник