Подожди ..... это не троллинг.
Фон
В эти дни на YouTube разделы комментариев завалены такими шаблонами:
S
St
Str
Stri
Strin
String
Strin
Stri
Str
St
S
где String
- просто заполнитель и относится к любой комбинации символов. Эти паттерны обычно сопровождаются чем-то It took me a lot of time to make this, pls like
или чем-то, и часто ФП удается накапливать множество лайков.
Задание
Несмотря на то, что вы обладаете огромным талантом накапливать отклики на PPCG с помощью своих очаровательных навыков игры в гольф, вы определенно не лучший выбор для создания остроумных замечаний или ссылок на мемы в разделах комментариев YouTube. Таким образом, ваши конструктивные комментарии, сделанные с осознанной мыслью, на YouTube набирают от нескольких до «лайков». Вы хотите, чтобы это изменилось. Таким образом, вы прибегаете к созданию вышеупомянутых шаблонов клише для достижения ваших конечных амбиций, но не теряете времени, пытаясь написать их вручную.
Проще говоря, ваша задача - взять строку, скажем s
, и вывести 2*s.length - 1
подстроки s
, разделенные новой строкой, чтобы соответствовать следующему шаблону:
(for s
= "Hello")
H
He
Hel
Hell
Hello
Hell
Hel
He
H
вход
Одна строка s
. Входные значения по умолчанию сообщества применяются. Вы можете предположить, что входная строка будет содержать только печатные символы ASCII.
Выход
Несколько строк разделены новой строкой, образуя соответствующий шаблон, как описано выше. Выходные значения по умолчанию сообщества применяются. Допускаются начальные и конечные пробелы (не содержащие символов или символов, которые нельзя увидеть, например, пробел) в выходных данных.
Прецедент
Тестовый набор из нескольких слов:
Input => "Oh yeah yeah"
Output =>
O
Oh
Oh
Oh y
Oh ye
Oh yea
Oh yeah
Oh yeah
Oh yeah y
Oh yeah ye
Oh yeah yea
Oh yeah yeah
Oh yeah yea
Oh yeah ye
Oh yeah y
Oh yeah
Oh yeah
Oh yea
Oh ye
Oh y
Oh
Oh
O
Обратите внимание, что в форме выходных данных вышеприведенного тестового примера имеются явные искажения (например, вторая и третья строки выходных данных выглядят одинаково). Это потому, что мы не можем видеть конечные пробелы. Ваша программа не должна пытаться исправить эти искажения.
Критерий победы
Это код-гольф , поэтому выигрывает самый короткий код в байтах на каждом языке!
YouTube Comments #1
в названии.""
? А как насчет одного персонажа"H"
? Если да, что должно быть получено в обоих случаях?Ответы:
брейкфук , 32 байта
Попробуйте онлайн!
Один и тот же цикл используется для обеих половин шаблона.
Объяснение:
источник
JavaScript (ES6), 36 байт
Попробуйте онлайн!
комментарии
источник
Unix (LF)
. Проблема решена раз и навсегда. :)05AB1E (legacy) ,
43 байтаВычеркнуто
4
уже не 4 :)Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
В новой версии 05AB1E
»
требуется явное указание послеη
, поэтому я использую устаревшую версию 05AB1E для сохранения байта.источник
\xce\xb7\x2e\xe2\x88\x8a
08 2e 17
, которые вы можете запустить и проверить с помощью--osabie
флага: tio.run/…IBM PC DOS, сборка 8088,
4443разобранное:
объяснение
Петля
2 * input length - 1
для каждого ряда. Функция отображения строки API DOS (INT 21H,9
) записывает$
на экран строку, определяемую окончанием, поэтому каждый раз в цикле символ после последней отображаемой строки заменяется символом конца строки.Счетчик цикла сравнивается с длиной строки, и, если она больше (имеется в виду восходящая часть вывода), позиция строки / свопа увеличивается, в противном случае она уменьшается (на самом деле это
-1-1+1
меньше байтов, чем в разветвленной структуре if / else).Автономная исполняемая программа, принимает входную строку из командной строки.
Выход
Загрузить YT2.COM (43 байта)
источник
SHR SI, 1
.Python 2 ,
6052 байтаПопробуйте онлайн!
Python 3.8 (предварительная версия) , 50 байт
Попробуйте онлайн!
источник
x:=s[:n]
.MATL , 8 байт
Попробуйте онлайн!
Пожалуйста, как этот пост для смайлика
:)
в коде, это заняло у меня много времени, чтобы сделать.источник
J 11 байт
Функция анонимного молчаливого префикса. Возвращает заполненную пробелами матрицу символов.
Попробуйте онлайн!
]\
список префиксов[:(
...)
применить следующую функцию к этому списку|.
обратный список,
с добавлением}:
свернутый (без последнего элемента) списокисточник
[:(
и}:,|
выглядишь так грустно ...Perl 6 , 31 байт
Попробуйте онлайн!
Блок анонимного кода, который принимает строку и возвращает список строк.
Объяснение:
источник
Japt -R , 4 байта
Кумулятивное уменьшение по струне.
-1 байт благодаря @Shaggy
Попробуйте онлайн!
источник
-flag
или <language>-flag
. Также: | Я забыл, что кумулятивное уменьшение было чем-то, клянусь, я пропускал его каждый раз, когда видел его-flag
?Japt
-R
,97 байт-2 байта благодаря Shaggy
Попробуйте онлайн!
источник
Ã
это вещьPerl 5 (
-p
), 26 байтTIO
источник
Haskell,
525044 байтаinstance Semigroup b => Semigroup (a -> b)
Попробуйте онлайн!
источник
inits
требует использования импорта, так что вам нужно будет добавитьimport Data.List
или что-то подобное.import Data.List putStr.unlines.((++)<*>reverse.init).tail.inits
R ,
79656258 байтПопробуйте онлайн!
-14 от превосходного знания функций Джузеппе
-3 с более чистой индексацией
-4 благодаря Ник Кеннеди и Джузеппе переездом в
scan
иwrite
Избегать петель (и
substr
) это хорошо.источник
sapply
-substring
будем делать то, что вы хотите (с дополнительной завершающей пустой строкой), и за 65 байтов ! Я бы точно не подумал,substring
если бы не увидел твоего милого использованияsubstr
здесь.scan
иwrite
? Всего 59 байт!""
на1
.Желе ,
54 байта-1 байт благодаря @JonathanAllan !
Попробуйте онлайн! Я думаю, что это мой второй ответ желе?
Я не знаю, является ли это оптимальным.Я больше убежден в том, что это оптимально. Возвращает массив строк.объяснение
Другой подход, предложенный @JonathanAllan, заключается в том
;\ŒḄ
, что кумулятивно уменьшает (\
) concatenation (;
), что является еще одним способом генерирования префиксов.источник
Y
из кода (я бы сделать колонтитул либоÇY
или ,ÇŒṘ
чтобы избежать неявную разящую печати в полных программах). На сопроводительной записке это также эквивалентно реализовано, как и;\ŒḄ
для того же подсчета байтов (также вы можете передать аргумент так,"blah"
как Jelly интерпретирует его как список символов - ваш, собственно, список списков символов, как вы увидите если вы сделаете нижний колонтитулÇŒṘ
)Python 3.8 (предварительная версия) , 48 байт
Попробуйте онлайн!
Использует выражения присваивания с,
:=
чтобы накапливать список префиксов, а затем снова, чтобы сохранить результат, чтобы объединить его реверс (без первого символа).Python 2 , 51 байт
Попробуйте онлайн!
У нас почти есть следующее хорошее 45-байтовое решение, но оно дважды содержит исходную строку, и я не вижу короткого пути, чтобы это исправить.
Попробуйте онлайн!
источник
print('\n'.join(f(s)))
?x=[s[:i+1]for i in range(len(s))];x+x[-2::-1]
s=input();x=[s[:i+1]for i in range(len(s))];print x+x[-2::-1]
. Смотрите примеры в верхней части здесь .Древесный уголь , 5 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
G
рисует заполненный многоугольник,^
указывает, что стороны находятся внизу вправо и вниз влево (многоугольник затем автоматически закрывается сам),Lθ
указывает длину этих сторон как длину исходного ввода, а финалθ
задает строку заливки.источник
C # (интерактивный компилятор Visual C #) ,
123109948474 байтаПредполагается, что мы можем вернуть массив массивов символов (я полагаю, что это возможно, поскольку массив символов является допустимым представлением для строки, а массив строк является допустимым представлением для нескольких строк).
Попробуйте онлайн!
источник
Атташе , 15 байт
Попробуйте онлайн!
Довольно просто
Bounce
s (добавляет реверс без центра)Prefixes
ввода.В качестве альтернативы, 21 байт:
Bounce@{_[0..0:~-#_]}
повторный префикс.источник
Brachylog (v2), 6 байт
Попробуйте онлайн!
Передача функции, возвращающая массив строк. Свободно, основываясь на ответе @ Fatalize .
объяснение
Порядок временного разбиения здесь задается параметром
⊆
, который при использовании с этим шаблоном потока предпочитает минимально возможный выходной сигнал, срывая связь, размещая заданные элементы как можно раньше . Кратчайший возможный вывод - это то, что мы хотим здесь (из-за невозможности иметь какие-либо дубликаты префиксов), и размещение данных элементов (то есть префиксов) как можно раньше поместит их в первую половину (с округлением в большую сторону) выход. Учитывая, что мы также требуем, чтобы они были расположены в том же порядке, мы получаем именно тот шаблон, который нам нужен, хотя описание, которое мы дали Brachylog, очень общее; разрывы связей оказываются совершенно правильными, в результате чего Brachylog выбирает нужный нам вывод, а не какой-либо другой вывод, который подчиняется описанию.источник
PowerShell,
898766 байт-2 байта благодаря @AdmBorkBork
Попробуйте онлайн!
Это на самом деле не работает, как указано ранее, извините за это! Я отредактировал это и также сумел сбрить некоторые байты.
источник
--$d
вместо того,($d-1)
чтобы сохранить пару в конце.PowerShell , 46 байт
Попробуйте онлайн!
PowerShell , 42 байта (YouTube особенный, грязный)
Известно, что максимальная длина комментария на YouTube составляет 10000 символов. Хорошо, используйте это как верхний предел.
Попробуйте онлайн!
источник
APL (Dyalog Unicode) , 9 байтов SBCS
Функция анонимного молчаливого префикса. Возвращает список строк.
Попробуйте онлайн!
,\
список префиксов (горит, накопленная конкатенация)(
…)
Применить к этому списку следующую функцию:⌽
перевернутый список1↓
брось первый предмет,
перед именем⊢
неизмененный списокисточник
Рубин ,
514240 байтПопробуйте онлайн!
Спасибо Doorknob за -2 байта.
источник
...
на,
JavaScript (Node.js) , 90 байт
Это, вероятно, может быть гораздо лучше, у Арно уже есть путь короче, но я развлекался по крайней мере!
Попробуйте онлайн!
источник
СНОБОЛ4 (CSNOBOL4) , 118 байт
Попробуйте онлайн!
Кажется, есть ошибка в этой реализации SNOBOL; попытка заменить ярлык
D
на ярлык2
приводит к ошибке, хотя в руководстве для Vanilla SNOBOL это указывается (выделение добавлено)Я предполагаю, что интерпретатор CSNOBOL поддерживает только одну метку, которая начинается с целого числа.
источник
APL + WIN, 31 байт
Запрашивает ввод строки:
Объяснение:
источник
F # (.NET Core) ,
6761 байтПопробуйте онлайн!
Вход является,
string
а выход являетсяseq<string>
Другое решение может быть
let f(s:string)=for i=1 to s.Length*2-1 do printfn"%s"s.[..s.Length-abs(i-s.Length)-1]
для 80-байтовых байтов ... Я не уверен, что это стоит посмотреть.источник
sed ,
3135 байтПопробуйте онлайн!
объяснение
В начале каждой итерации цикла пространство шаблонов представляет собой некоторый «центральный фрагмент» желаемого вывода, и каждый цикл добавляет сокращенную копию вверху и внизу.
источник
sed
. То же самое на TIO. Какуюsed
реализацию вы используете и как вы передаете ей вход? (Кстати, меняя замену, чтобыs/.\n.*\|.$//
sed
реализацией (с использованием GNU версии 4.2.1), я просто не заметил ошибку. Я поиграл с некоторыми другими исправлениями и не могу найти ничего, что добавляет менее четырех байтов, поэтому я принимаю ваше исправление, спасибо.Python 2 ,
13110084 байтаМой первый ответ на Code Golf!
-47 байт в целом благодаря @ SriotchilismO'Zaic
Попробуйте онлайн!
источник
;
s вместо новых строк, чтобы избежать отступов. Также нет необходимости в пробелах междуprint
и''
a
строку, а не список, вам больше не нуженjoin
вообще, и вы можете простоprint a
.x
.J , 12 байт
Попробуйте онлайн!
Все еще на 1 байт длиннее, чем у Адама
K (ок) ,
1211 байт-1 байт благодаря ngn
Попробуйте онлайн!
источник
{x,1_|x}@,\