Поиск текста по префиксу и перечислить все его суффиксы в тексте

17

Я свободно использую здесь суффикс для обозначения «любой подстроки, следующей за префиксом».

«Префикс» здесь означает НАЧАЛО слова, где начало слова определяется либо после пробела, либо с первого символа входного текста (для первого слова). «Приставка» в середине слова игнорируется.

Например, если ваш префикс ввода «arm», а вводимый текст - «Армия Дамблдора была полностью вооружена для предстоящего армагеддона», тогда список вывода содержит (y, ed, agedon).

Тестовые случаи

Предположим, что с учетом регистра строки заканчиваются после пробелов. Ввод не будет начинаться с пробела.

Удаление дубликатов необязательно.


Input prefix: "1"

Input text:

"He1in aosl 1ll j21j 1lj2j 1lj2 1ll l1j2i"

Output: (ll, lj2j, lj2) - in any permutation

Input prefix: "frac"

Input text: 

"fracking fractals fracted fractional currency fractionally fractioned into fractious fractostratic fractures causing quite a fracas"

Output: (king, tals, ted, tional, tionally, tioned, tious, tostratic, tures, as)

Input prefix: "href="https://www.astrotheme.com/astrology/"

Input text: 

"(div style="padding: 0; background: url('https://www.astrotheme.com/images/site/arrondi_450_hd.png') no-repeat; text-align: left; font-weight: bold; width: 450px; height: 36px")
  (div class="titreFiche" style="padding: 5px 0 0 6px")(a href="https://www.astrotheme.com/astrology/Nolwenn_Leroy" title="Nolwenn Leroy: Astrology, birth chart, horoscope and astrological portrait")Nolwenn Leroy(br /)
(/div)
  (div style="text-align: right; border-left: 1px solid #b2c1e2; border-right: 1px solid #b2c1e2; width: 446px; padding: 1px 1px 0; background: #eff8ff")
    (table style="width: 100%")(tr)(td style="width: 220px")
(div style="padding: 0; background: url('https://www.astrotheme.com/images/site/arrondi_450_hd.png') no-repeat; text-align: left; font-weight: bold; width: 450px; height: 36px")
  (div class="titreFiche" style="padding: 5px 0 0 6px")(a href="https://www.astrotheme.com/astrology/Kim_Kardashian" title="Kim Kardashian: Astrology, birth chart, horoscope and astrological portrait")Kim Kardashian(br /)(span style="font-weight: normal; font-size: 11px")Display her detailed horoscope and birth chart(/span)(/a)(/div)
(/div)
(div style="padding: 0; background: url('https://www.astrotheme.com/images/site/arrondi_450_hd.png') no-repeat; text-align: left; font-weight: bold; width: 450px; height: 36px")
  (div class="titreFiche" style="padding: 5px 0 0 6px")(a href="https://www.astrotheme.com/astrology/Julia_Roberts" title="Julia Roberts: Astrology, birth chart, horoscope and astrological portrait")Julia Roberts(br /)(span style="font-weight: normal; font-size: 11px")Display her detailed horoscope and birth chart(/span)(/a)(/div)
    (td id="cfcXkw9aycuj35h" style="text-align: right")
  (/div)"

Output: (Nolwenn_Leroy", Kim_Kardashian", Julia_Roberts")

Победитель

Это , поэтому побеждает меньше всего байтов. :)

Может принимать входные данные любым способом, который работает, если ваш код может решать произвольные задачи, такие как тестовые случаи.

DrQuarius
источник
2
Чтобы было понятно, приставка должна быть в начале слова? Если во втором контрольном примере есть слово «дифракция», это изменит выход?
sundar - Восстановить Монику
2
Как может https://www.astrotheme.com/astrology/быть префикс, когда ему предшествует href="?
Нил
1
Может ли суффикс быть пустым?
user202729
1
Я бы посоветовал разрешить людям делиться на другие пустые пространства, а также на пробелы, как некоторые, похоже, делают в любом случае. Я также предложил бы сказать, что на входе не будет нескольких пробелов в строке (или что-то эквивалентное, что пустые слова могут привести к неопределенному поведению). Я предлагаю обе эти вещи, так как основная часть задачи не состоит в разделении на слова (я бы предложил просто ввести список слов или даже просто слово в качестве входных данных, но сейчас уже слишком поздно с 22 ответами - что-то отметить для будущих проблем, хотя).
Джонатан Аллан
1
-1, чтобы разрешить разбиение на другие пробелы сейчас. Было бы целесообразно, чтобы задача была такой, как изначально, но изменение сейчас разделит ответы на вопросы, которые делают две разные вещи. И это не похоже на случаи, когда некоторые языки не могут справиться, например. 64-битные числа или что-то еще, здесь это просто означает реализацию немного (возможно) более сложного соответствия, поэтому имеет больше смысла исправлять ответы с неправильными предположениями и, возможно, добавить контрольный пример, чтобы проверить это тоже.
sundar - Восстановить Монику

Ответы:

5

R , 63 байта

function(s,p,z=el(strsplit(s,' ')))sub(p,'',z[startsWith(z,p)])

Попробуйте онлайн!

Реализация в позитивном виде, к сожалению, на 5 байт длиннее из-за огромной regmatches/gregexprкомбинации:

function(s,p)regmatches(s,gregexpr(paste0('(?<=',p,')[^ ]*'),s,,T))
digEmAll
источник
2
Наивный саб (grep ()) немного лучше, чем взгляд на 66, но все еще не посягает на StartWith (). Я не вижу большой возможности для улучшения здесь без изменения подхода. Попробуйте онлайн!
Преступно-
4

Желе , 12 байт

Ḳfṛ"€¥Ḋ€ṫ€L}

Попробуйте онлайн!

Эрик Outgolfer
источник
Произведение искусства. : ') Будет использовать это для разбора HTML в списки, большое спасибо. :)
DrQuarius
2
@DrQuarius Regex не может анализировать HTML , как и Jelly.
user202729
Кажется, работает хорошо для меня . Не уверен почему?
DrQuarius
1
@DrQuarius Это известная шутка, и пользователь 202729 расширил ее.
Эрик Outgolfer
4

Japt , 9 байт

8 байтов, если мы можем принять ввод как массив слов.

¸kbV msVl
¸         // Shorthand for `qS`, split into words.
 kbV      // Filter the words, selecting only those that start with the prefix.
     msVl // For each remaining word, remove prefix length chars from the start.

Попробуйте онлайн!

гнида
источник
Очень хорошо, но, похоже, не работает для последнего теста . Может быть из-за кавычек внутри строки? или новые строки?
DrQuarius
@DrQuarius Ваш последний контрольный пример неисправен, не так ли? Все строки, которые вы ищете, находятся в середине слов (в окружении url('')), ни одна из них не находится в начале.
Нить
4

C (gcc) , 113 109 106 105 байт

-4 байта благодаря @LambdaBeta!
-3 байта благодаря @WindmillCookies!

i;f(char*s,char*t){for(i=strlen(s);*t;t++)if(!strncmp(t,s,i))for(t+=i,puts("");*t^32&&*t;)putchar(*t++);}

Попробуйте онлайн!

betseg
источник
1
Вы можете сохранить 4 байта, удалив оба ^0. Просто ;*t;и&&*t;
LambdaBeta
@LambdaBeta спасибо! Я пропустил это.
бетсег
1
Мне удалось снизить его до 107, используя другую стратегию, извините :)
LambdaBeta
@LambdaBeta Я действительно думал об этом методе, но я не думал, что он будет короче, чем решение, которое я опубликовал. Хороший ответ, проголосовал.
бетсег
1
использовал путы вместо путчар, теперь 107, выходы на разных строках: tio.run/…
печенья
3

Джапт , 16 12 байт

Порт Арнаулд Ответ

-4 байта от @Shaggy

iS qS+V Å®¸g

iS                  Insert S value (S = " ") at beginning of first input (Implicit)
   q                split using
    S+V             S + Second input
        Å           slice 1
         ®          map
          ¸         split using S
           g        get first position

Попробуйте онлайн!

Луис Фелипе Де Иисус Муньос
источник
1
12 байтов
лохматый
Должен, вероятно, упомянуть, что это порт решения Арно. (Конечно, при условии, что это не было независимо получено)
Лохматый
@ Shaggy Честно говоря, я не заметил, что это был тот же ответ, в любом случае, я дам ему кредит. извините
Луис Фелипе Де Иисус Муньос
Есть 9-байтовое решение, если вы хотите попробовать.
Лохматый
@ Shaggy Вы имели в виду это или вы имели в виду что-то другое?
Нит
3

05AB1E , 11 байт

#ʒηså}εsgF¦

Попробуйте онлайн! ( здесь демо для многострочных строк)

Как это работает?

# ʒηså} εsgF¦ Полная программа.
# Разделить первый ввод пробелами.
 Filter} Отфильтруйте слова по ...
  ηså ... "Второй ввод происходит в префиксе слова?"
      И для каждого действительного слова
       sg Получить длину второго входа.
         F¦ И бросьте первый символ слова это количество раз.
Мистер Xcoder
источник
:) Очень приятно, спасибо за многострочную демонстрацию! Я думаю, что это вызывало проблемы для других программ.
DrQuarius
3

Stax , 8 байт

·B¬╤²*6&

Запустите и отладьте его

Объяснение:

j{x:[fmx|- Full program, implicit input: On stack in order, 1st input in X register
j          Split string on spaces
 {   f     Filter:
  x:[        Is X a prefix?
      m    Map passing elements:
       x|-   Remove all characters in X the first time they occur in the element
             Implicit output

Я также мог бы использовать x%t(длина X, обрезка слева), которая одинаково длинна, но упакована до 9 байтов .

Wastl
источник
Прекрасный. :) Я думаю, что это может быть победителем. Большинство претендентов с наименьшими байтами не смогли проанализировать третий тестовый пример. :)
DrQuarius
Аааа ... но я вижу, как вы это сделали сейчас, вы должны были сообщить программе, что кавычки в строке не были частью программы. Я думаю это нормально. Кроме того, ваш по-прежнему самый короткий в любом случае. :)
DrQuarius
3

Сетчатка , 31 байт

L`(?<=^\2¶(.|¶)*([^ ¶]+))[^ ¶]+

Попробуйте онлайн! Первая строка должна быть желаемым префиксом, остальное - вводимый текст. Не удаляет дубликаты. Было бы 25 байт, если бы любой пробел был допустимым разделителем. Объяснение: Мы хотим перечислить суффиксы действительных префиксов. Соответствует [^ ¶]+самому суффиксу. Префикс регулярного выражения - это обзор, который гарантирует, что префикс суффикса является входным префиксом. Так как внешний вид оценивается справа налево, он начинается с сопоставления префикса (используя тот же шаблон, но внутри ()s для его захвата), затем любых символов, прежде чем окончательно сопоставить префикс в отдельной строке в начале ввода.

Нил
источник
Пробел, означающий пробелы и / или разрывы строк? Я думаю, что это правильное решение, если это так, но, если честно, я оставлю проблему, как указано.
DrQuarius
@DrQuarius Нет, любое пустое пространство включает в себя вкладки, форм-фиды и даже эллипсы .
Нил
Retina была первым языком, который пришёл мне в голову, когда я увидела сообщение (хотя я пока не знаю язык). Я думал, что это будет короче, хотя. Могу ли я побеспокоить вас для объяснения? Например, Документы говорят, что это символ новой строки, но я не могу понять, почему здесь так много нужно.
sundar - Восстановить Монику
@sundar Извините, я был немного спешил в то время. Первая гарантирует, что вся первая строка соответствует префиксу. Второе необходимо, потому что неизвестно, сколько существует промежуточных строк. Последние два работают одинаково - классы символов с отрицанием обычно включают переводы строки, но здесь мы этого не хотим.
Нил
Нет проблем, спасибо, что добавили его. «Обычно включают в себя новые строки, но мы не хотим этого здесь» <- Если я правильно понимаю, мы хотим это здесь. OP строго определяет, что только пробелы считаются разделителями, префиксы начинаются с пробелов, а суффиксы заканчиваются пробелами. Так, например. «dif \ nfractional» не должен совпадать с «frac», потому что префикс идет после новой строки, а не пробела. Точно так же «разрушенная \ nrelated» должна возвращать суффикс «ture- \ nrelated». Я думаю, что это хорошая новость, потому что вы можете удалить хотя бы одну , а может и больше.
sundar - Восстановить Монику
3

Брахилог , 24 21 байт

tṇ₁W&h;Wz{tR&h;.cR∧}ˢ

Попробуйте онлайн!

Мог бы быть на несколько байтов короче, если бы существовало совместное использование переменных со встроенными предикатами.

Input - это массив с префиксом в качестве первого элемента и текстом в качестве второго элемента.

tṇ₁W                    % Split the text at spaces, call that W
    &h;Wz               % Zip the prefix with each word, to give a list of pairs
         {         }ˢ   % Select the outputs where this predicate succeeds:
          tR            % Call the current word R
            &h;.c       % The prefix and the output concatenated
                 R      % should be R
                  ∧     % (No more constraints on output)
sundar - Восстановить Монику
источник
2

IBM / Lotus Notes Formula, 54 байта

c:=@Explode(b);@Trim(@If(@Begins(c;a);@Right(c;a);""))

Принимает данные из двух полей с именами aи b. Работает, потому что Формула будет рекурсивно применять функцию к списку без @Forцикла.

TIO недоступен, вот скриншот:

введите описание изображения здесь

ElPedro
источник
2

APL (Dyalog Unicode) , 23 байта SBCS

Полная программа. Запрашивает текст и префикс из стандартного ввода. Список распечаток на стандартный вывод.

(5'(\w+)\b',⎕)⎕S'\1'⊢⎕

Попробуйте онлайн!

 подсказка (для текста)

 дать это (отделяется '\1'от )

()⎕S'\1' PCRE Поиск и возврат списка групп захвата 1 из следующего регулярного выражения:

 подсказка (для префикса)

'(\w+)\b', добавить эту строку (группа символов слова, за которыми следует граница слова)

5⌽ поверните первые 5 символов до конца; '\bPREFIX(\w+)'

Адам
источник
2

C (лязг) , 107 байт

i;f(s,t,_)char*s,*t,*_;{i=strlen(s);_=strtok(t," ");while((strncmp(_,s,i)||puts(_+i))&&(_=strtok(0," ")));}

Попробуйте онлайн!

Описание:

i;f(s,t,_)char*s,*t,*_;{   // F takes s and t and uses i (int) and s,t,u (char*)
    i=strlen(s);           // save strlen(s) in i
    _=strtok(t," ");       // set _ to the first word of t
    while(                 // while loop
        (strncmp(_,s,i)||  // short-circuited if (if _ doesn't match s to i places)
         puts(_+i))        // print _ starting at the i'th character
        &&                 // the previous expression always returns true
        (_=strtok(0," "))) // set _ to the next word of t
    ;                      // do nothing in the actual loop
}

Должен быть лязг, потому что gcc не работает #include <string.h>из-за проблем с strtok.

LambdaBeta
источник
100 байт
floorcat
2

MATL, 17 байт

Yb94ih'(.*)'h6&XX

Попробуйте это на MATL Online

Как?

Yb - Разбить ввод на пробелы, поместить результаты в массив ячеек

94- ASCII код для ^персонажа

ih - Получить ввод (скажем, "ГРП"), объединить '^' и ввод

'(.*)'h- Вставьте строку '(.*)'в стек, объедините '^ frac' и '(. *)'. Итак, теперь у нас '^frac(.*)есть регулярное выражение, которое соответствует «frac» в начале строки и фиксирует все, что следует после.

6&XX- Запустите сопоставление с регулярным выражением, 6&указав режим «Жетоны», т. Е. Сопоставленные группы захвата будут возвращены вместо всего совпадения.

Неявно выводить результаты.

sundar - Восстановить Монику
источник
Так вот что 'Tokens'делает; хорошо знать!
Луис Мендо
1
Ха - ха. Я тоже понятия не имел, понял это методом проб и ошибок для этого ответа.
sundar - Восстановить Монику
2

Bash + grep, 20 байтов

grep -Po "\b$1\K\S*"

Префикс указывается в качестве параметра командной строки, а вводимый текст передается через stdin.

Попробуйте онлайн!

Цифровая травма
источник
2

PowerShell 3.0, 60 62 59 байт

param($p,$s)-split$s|%{if($_-cmatch"^$p(.*)"){$Matches[1]}}

Потерял несколько байтов, подавляя вывод cmatch. У меня было нестабильное решение, которое было получено путем намеренного создания дубликатов. Но он также бросал красные линии, если он не совпадал с первым, но это не хорошо, когда я думаю об этом. +2 байта, чтобы исправить это, хотя.

Veskah
источник
Решение с 60 байтами возвращает двойной ответ в некоторых случаях king, tals, ted, tional, tional, tionally, tioned, tioned, tious, tostratic, tures,tures,tures, tures, asи показывает ошибку индекса на He1inпримере. Powershell 5.1, 6.0.2. Решение с 62 байтами в порядке.
Маззи
1
@mazzy Я знал, что просто злоупотреблял битом «Дубликаты разрешены», чтобы он возвращал еще больше дубликатов, когда сталкивается с несоответствием, и бросает красный на первой итерации без сопоставления.
Веска
1

JavaScript (ES6), 57 байт

Принимает ввод в синтаксис карри (text)(prefix). Не удаляет дубликаты.

s=>p=>(' '+s).split(' '+p).slice(1).map(s=>s.split` `[0])

Попробуйте онлайн!

Arnauld
источник
1

шелуха , 11 байт

Практически просто порт ответа на Haskell :

m↓L⁰foΠz=⁰w

Попробуйте онлайн!

объяснение

m↓L⁰f(Πz=⁰)w  -- prefix is explicit argument ⁰, the other one implicit. eg: ⁰ = "ab" and implicit "abc def"
           w  -- words: ["abc","def"]
    f(    )   -- filter by (example w/ "abc"
       z=⁰    -- | zip ⁰ and element with equality: [1,1]
      Π       -- | product: 1
              -- : ["abc"]
m             -- map the following
 ↓            -- | drop n elements
  L⁰          -- | n being the length of ⁰ (2)
              -- : ["c"]
ბიმო
источник
1

Желе ,  11  9 байт

Ḳœṣ€ḢÐḟj€

Диадическая ссылка, принимающая текст (список символов) слева и префикс (список символов) справа, который приводит к списку символов (результирующие суффиксы).

Попробуйте онлайн! (нижний колонтитул объединяется с пробелами, чтобы избежать неявного разрушения полной программы)
разрушения Примечание. Я добавил три строки с краями в строку в OP - unckckled и nofracfracheremate в начало, которые не должны выводить и fracfracit до конца, который должен выводить fracit.

Как?

Ḳœṣ€ḢÐḟj€ - Link: text, prefix                        e.g. "fracfracit unfracked", "frac"
Ḳ         - split (text) at spaces -> list of words        ["fracfracit", "unfracked"]
   €      - for each (word):
 œṣ       -   split around sublists equal to (prefix)       ["","","it"]  ["un","ked"]
     Ðḟ   - filter discard items for which this is truthy:
    Ḣ     -   head
          -   -- Crucially this modifies the list:             ["","it"]       ["ked"]
          -   -- and yields the popped item:                 ""            "un"
          -   -- and only non-empty lists are truthy:       kept          discarded
          -            ...so we end up with the list:      [["","it"]]
        € - for each (remaining list of lists of characters):
       j  -   join with the prefix                          "fracit"                                             
          -                                                ["fracit"]

предыдущий 11 байт:

Ḳs€L}Ḣ⁼¥ƇẎ€

Также диадическая ссылка, как указано выше.

Попробуйте онлайн!

Джонатан Аллан
источник
1

Perl 5 с -asE, 23 22 21 байт (?)

say/^$b(.*)/ for@F

Попробуйте онлайн!

Может работать в качестве командной строки однострочника как perl -asE 'say/^$b(.*)/ for@F' -- -b=frac -, или с именем файла в месте последнего -.
Или из файла сценария, скажемperl -as -M5.010 script.pl -b=frac - (спасибо @Brad Gilbert b2gills за ссылку TIO, демонстрирующую это).

Сам код составляет 18 байт, я добавил 3 байта для -b=параметра, который присваивает его значение (ввод префикса) переменной, названной $bв коде. Это было похоже на исключение из обычного консенсуса "флаги не учитываются".

-aразбивает каждую входную строку на пробелы и помещает результат в массив @F. -sэто быстрый способ присвоения аргумента командной строки в качестве переменной, указав имя в командной строке. Здесь аргумент -b=frac, который помещает префикс "frac" в переменную$b .

/^$b(.*)/- Соответствует значению $bв начале строки. .*это то, что приходит после этого, до конца слова, и окружающие парантезы улавливают это значение. Захваченные значения автоматически возвращаются для печати say. Итерация через разделенные пробелами слова for @Fозначает, что нам не нужно проверять начальные или конечные пробелы.

sundar - Восстановить Монику
источник
1

Perl 6 , 30 байт

{$^t.comb: /[^|' ']$^p <(\S+/}

Проверь это

Expanded:

{  # bare block lambda with placeholder params $p, $t

  $^t.comb:    # find all the substrings that match the following
  /
    [ ^ | ' ' ] # beginning of string or space
    $^p        # match the prefix
    <(         # don't include anything before this
    \S+        # one or more non-space characters (suffix)
  /
}
Брэд Гилберт b2gills
источник
@sundar фиксированный
Брэд Гилберт b2gills
У вас, кажется, есть лишний пробел между 'p' и '<' btw.
sundar - Восстановить Монику
@sundar Пространство между pи <(необходимо, так как в противном случае это может быть видно как $v<…>сокращение $v{qw '…'}.
Брэд Гилберт b2gills
1
Кажется, работает без него, по крайней мере, в этом случае.
sundar - Восстановить Монику
1
@sundar Технически это просто предупреждает, но мне не нравится писать код, который предупреждает, когда он только на один байт отличается от кода, который не предупреждает.
Брэд Гилберт b2gills
1

Java 10, 94 байта

p->s->{for(var w:s.split(" "))if(w.startsWith(p))System.out.println(w.substring(p.length()));}

Попробуйте онлайн здесь .

Ungolfed:

p -> s -> { // lambda taking prefix and text as Strings in currying syntax
    for(var w:s.split(" ")) // split the String into words (delimited by a space); for each word ...
        if(w.startsWith(p)) //  ... test whether p is a prefix ...
            System.out.println(w.substring(p.length())); // ... if it is, output the suffix
}
OOBalance
источник
1

Small Basic , 242 байта

Скрипт, который не требует ввода и вывода в TextWindowобъект

c=TextWindow.Read()
s=TextWindow.Read()
i=1
While i>0
i=Text.GetIndexOf(s," ")
w=Text.GetSubText(s,1,i)
If Text.StartsWith(w,c)Then
TextWindow.WriteLine(Text.GetSubTextToEnd(w,Text.GetLength(c)+1))
EndIf
s=Text.GetSubTextToEnd(s,i+1)
EndWhile

Попробуйте это на SmallBasic.com! Требуется IE / Silverlight

Тейлор Скотт
источник
1

Python 2 , 53 байта

lambda i,j:[w.split()[0]for w in j.split(i)if len(w)]

Попробуйте онлайн!

Рафаэль Кот
источник
Интересная идея, но она проваливается в первом тестовом примере, введите: «1», «He1in aosl 1ll j21j 1lj2j 1lj2 1ll l1j2i»
Час Браун
Хорошо, я постараюсь возиться с этим. Я уверен, что я на что-то ...
Raphaël Côté
1

Брахилог , 12 байт

hṇ₁∋R&t;.cR∧

Попробуйте онлайн!

Принимает ввод как [text, prefix]через входную переменную, и генерирует каждое слово через выходную переменную. Первоначально это был ответ Сундара, который я начал пытаться сыграть в гольф после того, как прочитал, что «он мог бы быть на несколько байт короче, если бы существовало совместное использование переменных со встроенными предикатами», что теперь возможно. Оказывается, что выход генератора экономит еще больше байтов.

    R           R
   ∋            is an element of
h               the first element of
                the input
 ṇ₁             split on spaces,
     &          and the input
      t         's last element
         c      concatenated
       ;        with
        .       the output variable
          R     is R
           ∧    (which is not necessarily equal to the output).

Мои первые две попытки сыграть в гольф, используя довольно новые возможности языка:

С глобальными переменными, на которые надеялись: hA⁰&tṇ₁{∧A⁰;.c?∧}ˢ(18 байт)

С метапредикатом применять к голове: ṇ₁ᵗz{tR&h;.cR∧}ˢ (16 байтов)

И мое оригинальное решение:

Брахилог , 15 байт

ṇ₁ʰlᵗ↙X⟨∋a₀⟩b↙X

Попробуйте онлайн!

Тот же I / O. По сути, это генератор слов с префиксом ṇ₁ʰ⟨∋a₀⟩, модифицированный для удаления префикса.

                   The input variable
  ʰ                with its first element replaced with itself
ṇ₁                 split on spaces
    ᵗ              has a last element
   l               the length of which
     ↙X            is X,
       ⟨   ⟩       and the output from the sandwich
       ⟨∋  ⟩       is an element of the first element of the modified input
       ⟨ a₀⟩       and has the last element of the input as a prefix.
                   The output variable
       ⟨   ⟩       is the output from the sandwich
            b      with a number of characters removed from the beginning
             ↙X    equal to X.

Совсем другой предикат с одинаковым количеством байтов:

Брахилог , 15 байт

hṇ₁∋~c₂Xh~t?∧Xt

Попробуйте онлайн!

Тот же I / O.

   ∋               An element of
h                  the first element of
                   the input variable
 ṇ₁                split on spaces
    ~c             can be un-concatenated
      ₂            into a list of two strings
       X           which we'll call X.
        h          Its first element
         ~t        is the last element of
           ?       the input variable,
            ∧      and
             Xt    its last element is
                   the output variable.
Несвязанная строка
источник
0

Pyth , 21 20 18 17 16 байт

AQVcH)IqxNG0:NG"

Попробуйте онлайн!

-1 с помощью Vвместо, FNпотому чтоV неявно устанавливаетN

-2 после дальнейшего прочтения о параметрах нарезки строк

-1 с использованием x для проверки наличия подстроки в индексе 0

-1 используя замену на "" для получения конца строки

Я уверен, что это может использовать некоторые серьезные игры в гольф, но, как начинающий Pyth, просто получить его на работу было бонусом.

Как это работает?

assign('Q',eval_input())
assign('[G,H]',Q)
for N in num_to_range(chop(H)):
    if equal(index(N,G),0):
        imp_print(at_slice(N,G,""))
ElPedro
источник
0

Excel VBA, 86 байт

Принимает ввод как префикс в [A1]и значения в [B1]и выводит на консоль.

For each w in Split([B1]):?IIf(Left(w,[Len(A1)])=[A1],Mid(w,[Len(A1)+1])+" ","");:Next
Тейлор Скотт
источник