Wyszukaj w tekście prefiks i wypisz wszystkie jego sufiksy w tekście

17

Używam tutaj „sufiksu” w znaczeniu luźnym, aby oznaczać „dowolny ciąg podrzędny następujący po przedrostku”.

„Prefiks” oznacza tutaj START słowa, przy czym początek słowa jest zdefiniowany albo po spacji, albo od pierwszego znaku tekstu wejściowego (dla pierwszego słowa). „Przedrostek” w środku słowa jest ignorowany.

Np. Jeśli twój przedrostek wejściowy to „uzbrojenie”, a tekst wejściowy to „Armia Dumbledore'a była w pełni uzbrojona na nadchodzące zbrojnie”, wówczas lista wyjściowa zawiera (y, ed, ageddon).

Przypadki testowe

Załóżmy, że rozróżniana jest wielkość liter, łańcuchy kończą się spacjami. Wprowadzanie nie rozpocznie się od spacji.

Usuwanie duplikatów jest opcjonalne.


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")

Zwycięzca

To jest , więc wygrywa najmniej bajtów. :)

Może akceptować dane wejściowe w dowolny sposób, pod warunkiem, że Twój kod może rozwiązać dowolne problemy, takie jak przypadki testowe.

DrQuarius
źródło
2
Żeby było jasne, przedrostek musi znajdować się na początku słowa? Gdyby w drugim przypadku testowym było słowo „dyfrakcja”, czy zmieniłoby to wynik?
Sundar - Przywróć Monikę
2
Jak może https://www.astrotheme.com/astrology/być prefiksem, gdy jest poprzedzony href="?
Neil
1
Czy sufiks może być pusty?
user202729,
1
Sugerowałbym pozwalanie ludziom na dzielenie się zarówno na białych, jak i na innych obszarach, ponieważ i tak wydaje się, że niektórzy to robią. Sugerowałbym również powiedzenie, że na wejściu nie będzie wielu spacji (lub nieco równoważnie, że puste słowa mogą powodować niezdefiniowane zachowanie). Sugeruję obie te rzeczy, ponieważ główna część wyzwania nie polega na podziale na słowa (sugerowałbym po prostu dopuszczenie listy słów lub nawet słowa jako danych wejściowych, ale jest już za późno z 22 odpowiedziami - coś, na co należy zwrócić uwagę na przyszłe wyzwania).
Jonathan Allan,
1
-1, aby umożliwić teraz podział na inne białe znaki. Wyzwanie miałoby być początkowo, ale zmiana teraz podzieliłaby odpowiedzi na te, które robią dwie różne rzeczy. I to nie jest tak, że niektóre języki nie obsługują np. Liczby 64-bitowe lub coś takiego, tutaj oznacza to po prostu implementację nieco (być może) bardziej złożonego dopasowania, więc sensowniej jest poprawiać odpowiedzi przy błędnych założeniach i być może dodać przypadek testowy, aby to sprawdzić.
Sundar - Przywróć Monikę

Odpowiedzi:

5

R , 63 bajty

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

Wypróbuj online!

Implementacja wyglądająca pozytywnie jest niestety o 5 bajtów dłuższa z powodu ogromnej regmatches/gregexprkombinacji:

function(s,p)regmatches(s,gregexpr(paste0('(?<=',p,')[^ ]*'),s,,T))
digEmAll
źródło
2
Naiwny sub (grep ()) jest nieco lepszy niż lookbehind w 66, ale nadal nie wkracza na startWith (). Nie widzę tu wiele miejsca do poprawy bez zmiany podejścia. Wypróbuj online!
CriminallyVulgar
4

Galaretka , 12 bajtów

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

Wypróbuj online!

Erik the Outgolfer
źródło
Dzieło sztuki. : ') Użyje tego do parsowania HTML na listy, dziękuję bardzo. :)
DrQuarius
2
@DrQuarius Regex nie może parsować HTML , podobnie jak Jelly.
user202729,
Wydaje mi się, że działa dobrze . Nie pewny dlaczego?
DrQuarius
1
@DrQuarius To słynny żart, a użytkownik202729 go przedłużył.
Erik the Outgolfer
4

Japt , 9 bajtów

8 bajtów, jeśli możemy przyjąć dane wejściowe jako tablicę słów.

¸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.

Wypróbuj online!

Gnida
źródło
Bardzo fajnie, ale wydaje się, że nie działa w ostatnim przypadku testowym . Może to być spowodowane cudzysłowami wewnątrz ciągu? czy nowe linie?
DrQuarius
@DrQuarius Twój ostatni przypadek testowy jest wadliwy, prawda? Wszystkie ciągi, których szukasz, znajdują się w środku słów (otoczone przez url('')), żadne z nich nie jest na początku.
Nit
4

Python 2 , 57 56 bajtów

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

Wypróbuj online!

-1 dzięki dzięki @mypetlion

ElPedro
źródło
2
lambda i,j:[w[len(i):]for w in j.split()if w.find(i)==0]dla -1 bajtów
mypetlion
4

C (gcc) , 113 109 106 105 bajtów

-4 bajty dzięki @LambdaBeta!
-3 bajty dzięki @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++);}

Wypróbuj online!

betseg
źródło
1
Możesz zapisać 4 bajty, usuwając oba ^0. Właśnie ;*t;i&&*t;
LambdaBeta
@LambdaBeta dzięki! Tęsknie za tym.
betseg
1
Niestety udało mi się obniżyć do 107, stosując inną strategię :)
LambdaBeta
@LambdaBeta Właściwie myślałem o tej metodzie, ale nie sądziłem, że byłaby krótsza niż rozwiązanie, które opublikowałem. Dobra odpowiedź, pozytywnie oceniany.
betseg
1
używane puts zamiast putchar, teraz jest 107, dane wyjściowe w różnych wierszach: tio.run/…
Windmill Cookies
3

Japt , 16 12 bajtów

Odpowiedź portu Arnauld

-4 bajty od @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

Wypróbuj online!

Luis Felipe De Jesus Munoz
źródło
1
12 bajtów
Kudłaty
Powinien chyba wspomnieć, że jest to port rozwiązania Arnaulda. (Zakładając, że nie zostało to niezależnie wyprowadzone, oczywiście)
Kudłaty
@Shaggy Szczerze mówiąc, nie zauważyłem, że to ta sama odpowiedź, w każdym razie dam mu uznanie. przepraszam
Luis Felipe De Jesus Munoz
Istnieje 9-bajtowe rozwiązanie, jeśli chcesz spróbować.
Kudłaty
@Shaggy Czy miałeś na myśli to, czy miałeś na myśli coś innego?
Nit
3

05AB1E , 11 bajtów

#ʒηså}εsgF¦

Wypróbuj online! ( tutaj jest demo dla ciągów wielowierszowych)

Jak to działa?

# ʒηså} εsgF¦ Pełny program.
# Podziel pierwsze wejście na spacje.
 ʒ} Filtruj słowa według ...
  ηså ... "Czy drugie wejście występuje w prefiksie słowa?"
      ε I dla każdego ważnego słowa
       sg Pobierz długość drugiego wejścia.
         F¦ I upuść pierwszy znak słowa tyle razy.
Pan Xcoder
źródło
:) Bardzo miło, dziękuję za multiline demo! Myślę, że to powodowało problemy dla innych programów.
DrQuarius
3

Stax , 8 bajtów

·B¬╤²*6&

Uruchom i debuguj

Wyjaśnienie:

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

Mógłbym również użyć x%t(długość X, przycięcie od lewej), która jest równie długa, ale pakuje do 9 bajtów .

pustkowie
źródło
Piękny. :) Myślę, że to może być zwycięzca. Większość uczestników o najniższym bajcie nie była w stanie przeanalizować trzeciego przypadku testowego. :)
DrQuarius
Ahhh ... ale widzę, jak teraz to zrobiłeś, musiałeś poinformować program, że znaki cudzysłowu w ciągu nie były częścią programu. Myślę, że to w porządku. Poza tym twój jest wciąż najkrótszy. :)
DrQuarius
3

Retina , 31 bajtów

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

Wypróbuj online! Pierwszy wiersz powinien być pożądanym prefiksem, reszta to tekst wejściowy. Nie usuwa duplikatów. Będzie to 25 bajtów, jeśli dowolna biała spacja była prawidłowym separatorem. Objaśnienie: Chcemy wymienić sufiksy prawidłowych prefiksów. [^ ¶]+Mecze samego sufiksu. Prefiks wyrażenia regularnego jest wyglądem, który zapewnia, że ​​prefiks sufiksu jest prefiksem wejściowym. Podczas oceniania wyglądu od prawej do lewej, zaczyna się od dopasowania przedrostka (używając tego samego wzorca, ale w ()celu przechwycenia go w środku s), a następnie dowolnych znaków, a następnie dopasowania przedrostka w jego własnej linii na początku danych wejściowych.

Neil
źródło
Biała spacja oznacza spacje i / lub łamanie linii? Myślę, że to prawidłowe rozwiązanie, jeśli tak, ale szczerze mówiąc, zostawię problem, jak powiedziano.
DrQuarius
@DrQuarius Nie, każda biała spacja zawiera tabulatory, formularze, a nawet elipsy .
Neil
Retina była pierwszym językiem, który przyszedł mi do głowy, gdy zobaczyłem post (choć jeszcze go nie znam). Myślałem, że będzie krótszy. Czy mogę ci przeszkadzać za wyjaśnienie? Na przykład doktorzy mówią, że jest postacią nowej linii, ale nie mogę zrozumieć, dlaczego tak wielu jest tutaj potrzebnych.
sundar - Przywróć Monikę
@sundar Przepraszam, że się wtedy spieszyłem. Pierwszy zapewnia, że ​​cała pierwsza linia jest dopasowana do przedrostka. Drugi jest potrzebny, ponieważ nie wiadomo, ile jest linii pośrednich. Dwa ostatnie działają w ten sam sposób - negowane klasy znaków zwykle zawierają znaki nowej linii, ale nie chcemy tego tutaj.
Neil
Nie ma problemu, dziękuję za dodanie. „Zwykle zawierają nowe wiersze, ale nie chcemy tego tutaj” <- Jeśli dobrze rozumiem, chcemy to tutaj. OP określa ściśle, że tylko spacje liczą się jako separatory, których prefiksy zaczynają się od, a sufiksy kończą się spacjami. Więc np. „dif \ nfractional” nie powinno pasować do „frac”, ponieważ prefiks występuje po nowej linii, a nie spacji. Podobnie „złamanie- niezwiązane” powinno zwrócić sufiks „zwięzłe”. Myślę, że to dobra wiadomość, ponieważ możesz usunąć przynajmniej jedną , a może nawet więcej.
Sundar - Przywróć Monikę
3

Brachylog , 24 21 bajtów

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

Wypróbuj online!

Mogłoby być kilka bajtów krótszych, gdyby istniało współdzielenie zmiennych z predykatami wbudowanymi.

Dane wejściowe to tablica z prefiksem jako pierwszym elementem i tekstem jako drugim elementem.

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 - Przywróć Monikę
źródło
2

Formuła IBM / Lotus Notes, 54 bajty

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

Pobiera dane wejściowe z dwóch pól o nazwach ai b. Działa, ponieważ Formula rekurencyjnie zastosuje funkcję do listy bez potrzeby@For pętli.

Brak dostępnego TIO, oto zrzut ekranu:

enter image description here

ElPedro
źródło
2

APL (Dyalog Unicode) , 23 bajty SBCS

Pełny program Monity o tekst i prefiks ze standardowego wejścia. Drukuje listę na standardowe wyjście.

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

Wypróbuj online!

 monit (o tekst)

 dochód, (wydzielane '\1'z )

()⎕S'\1' PCRE Wyszukaj i zwróć listę grupy przechwytywania 1 z następującego wyrażenia regularnego:

 monit (dla prefiksu)

'(\w+)\b', poprzedzić ten ciąg (grupa znaków słownych, po których następuje granica słowa)

5⌽ obróć pierwsze 5 znaków do końca; '\bPREFIX(\w+)'

Adám
źródło
2

C (brzęk) , 107 bajtów

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

Wypróbuj online!

Opis:

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
}

To musi być klang, ponieważ gcc segfaults bez #include <string.h>problemów z powodu strtok.

LambdaBeta
źródło
100 bajtów
pułap pułapu
2

MATL, 17 bajtów

Yb94ih'(.*)'h6&XX

Wypróbuj na MATL Online

W jaki sposób?

Yb - Podziel dane wejściowe na spacje, umieść wyniki w tablicy komórkowej

94- Kod ASCII dla ^znaku

ih - Pobierz dane wejściowe (powiedz „frac”), połącz „^” i dane wejściowe

'(.*)'h- Wciśnij ciąg '(.*)'do stosu, połącz „^ frac” i „(. *)”. Mamy teraz '^frac(.*)wyrażenie regularne, które pasuje do „frac” na początku łańcucha i przechwytuje to, co nastąpi później.

6&XX- Uruchom dopasowanie wyrażenia regularnego, 6&określając tryb „Tokeny”, tzn. Dopasowane grupy przechwytywania są zwracane zamiast całego dopasowania.

Wyjmij wyniki niejawnie.

sundar - Przywróć Monikę
źródło
Więc to właśnie 'Tokens'działa; dobrze wiedzieć!
Luis Mendo
1
Ha ha. Nie miałem też pojęcia, próbowałem i próbowałem znaleźć odpowiedź.
sundar - Przywróć Monikę
2

Bash + grep, 20 bajtów

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

Prefiks jest podawany jako parametr wiersza polecenia, a tekst wejściowy jest przesyłany potokowo przez stdin.

Wypróbuj online!

Cyfrowa trauma
źródło
2

PowerShell 3.0, 60 62 59 bajtów

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

Utracono niektóre bajty tłumiące dane wyjściowe cmatch. Miał zabawne rozwiązanie, które zyskało, celowo powodując duplikaty. Ale rzuciło również czerwone linie, jeśli nie pasowało do pierwszego, ale teraz nie jest dobrze, kiedy o tym myślę. +2 bajty, aby to naprawić.

Veskah
źródło
Rozwiązanie z 60 bajtami zwraca w niektórych przypadkach podwójną odpowiedź king, tals, ted, tional, tional, tionally, tioned, tioned, tious, tostratic, tures,tures,tures, tures, asi pokazuje na He1inprzykład błąd indeksu . PowerShell 5.1, 6.0.2. Rozwiązanie z 62 bajtami jest OK.
mazzy
1
@mazzy Wiedziałem, że właśnie nadużyłem bitu „Dozwolone są duplikaty”, aby zwrócił jeszcze więcej duplikatów, gdy natrafi na brak dopasowania i rzuci czerwony na pierwszą iterację bez dopasowania.
Veskah
1

JavaScript (ES6), 57 bajtów

Pobiera dane wejściowe w składni curry (text)(prefix). Nie usuwa duplikatów.

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

Wypróbuj online!

Arnauld
źródło
1

Łuska , 11 bajtów

Prawie tylko część odpowiedzi Haskella :

m↓L⁰foΠz=⁰w

Wypróbuj online!

Wyjaśnienie

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"]
ბიმო
źródło
1

Galaretka ,  11  9 bajtów

Ḳœṣ€ḢÐḟj€

Dyadyczny link akceptujący tekst (listę znaków) po lewej stronie i prefiks (lista znaków) po prawej stronie, który daje listę list znaków (wynikowe sufiksy).

Wypróbuj online!(stopka łączy się ze spacjami, aby uniknąć niejawnego rozbicia całego programu)
Uwaga: Dodałem trzy przypadki krawędzi do łańcucha w OP - niezakodowane i nofracfracheremate na początku, które nie powinny wypisywać i fracfracit na końcu, który powinien wypisywać fracit.

W jaki sposób?

Ḳœṣ€ḢÐḟ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"]

poprzednie 11 bajtów:

Ḳs€L}Ḣ⁼¥ƇẎ€

Również link diadadowy jak wyżej.

Wypróbuj online!

Jonathan Allan
źródło
1

Perl 5 z -asE, 23 22 21 bajtów (?)

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

Wypróbuj online!

Może być prowadzony jako poleceń jedną wkładką jako perl -asE 'say/^$b(.*)/ for@F' -- -b=frac -, albo z pliku w miejscu ostatniego -.
Lub powiedzmy z pliku skryptuperl -as -M5.010 script.pl -b=frac - (dzięki @Brad Gilbert b2gills za link TIO demonstrujący to).

Sam kod ma 18 bajtów, dodałem 3 bajty dla -b=opcji, która przypisuje swoją wartość (wejście prefiksu) do zmiennej wymienionej $bw kodzie. To wydawało się wyjątkiem od zwykłego konsensusu „flagi nie są liczone”.

-adzieli każdą linię wejściową na spacje i umieszcza wynik w tablicy @F. -sto skrótowy sposób przypisywania argumentu wiersza poleceń jako zmiennej, poprzez podanie nazwy w wierszu polecenia. Oto argument -b=frac, który umieszcza przedrostek „frac” w zmiennej $b.

/^$b(.*)/- Odpowiada wartości $bna początku łańcucha. .*jest tym, co nastąpi potem, aż do końca słowa, a otaczające go nawiasy ujmują tę wartość. Przechwycone wartości są automatycznie zwracane do wydrukowania say. Iteracja słów oddzielonych spacjami for @Foznacza, że ​​nie musimy sprawdzać początkowych ani końcowych spacji.

sundar - Przywróć Monikę
źródło
1

Perl 6 , 30 bajtów

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

Sprawdź to

Rozszerzony:

{  # 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)
  /
}
Brad Gilbert b2gills
źródło
@sundar stałe
Brad Gilbert b2gills
Wydaje się, że masz dodatkową spację między „p” a „<” btw.
Sundar - Przywróć Monikę
@sundar Odstęp między pi <(jest konieczny, ponieważ w przeciwnym razie może być postrzegany jako $v<…>skrót $v{qw '…'}.
Brad Gilbert b2gills 17.07.18
1
Wydaje się jednak działać bez niego, przynajmniej w tym przypadku.
sundar - Przywróć Monikę
1
@sundar Technicznie to po prostu ostrzega, ale nie lubię pisać kodu, który ostrzega, gdy jest tylko jeden bajt inny niż kod, który nie ostrzega.
Brad Gilbert b2gills 18.07.18
1

Java 10, 94 bajty

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

Wypróbuj online tutaj .

Nie golfowany:

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
źródło
1

Mały podstawowy , 242 bajty

Skrypt, który nie pobiera danych wejściowych i wyjściowych do TextWindowobiektu

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

Wypróbuj na SmallBasic.com! Wymaga IE / Silverlight

Taylor Scott
źródło
1

Python 2 , 53 bajty

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

Wypróbuj online!

Raphaël Côté
źródło
Ciekawy pomysł, ale nie udaje się w pierwszym przypadku testowym, wpisz: „1”, „He1in aosl 1ll j21j 1lj2j 1lj2 1ll l1j2i”
Chas Brown
Racja, spróbuję się z tym pogrzebać. Jestem pewien, że coś mi się podoba ...
Raphaël Côté
1

Brachylog , 12 bajtów

hṇ₁∋R&t;.cR∧

Wypróbuj online!

Pobiera dane wejściowe jak [text, prefix]przez zmienną wejściową i generuje każde słowo przez zmienną wyjściową. To była pierwotnie odpowiedź Sundara, którą zacząłem grać w golfa po przeczytaniu, że „mogłaby być kilka bajtów krótsza, gdyby istniało dzielenie zmiennych z predykatami wbudowanymi”, co jest teraz możliwe. Okazuje się, że moc generatora pozwala zaoszczędzić jeszcze więcej bajtów.

    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).

Dwie pierwsze próby gry w golfa przy użyciu całkiem nowych funkcji języka:

Z oczekiwanymi zmiennymi globalnymi: hA⁰&tṇ₁{∧A⁰;.c?∧}ˢ(18 bajtów)

Z metapredykatem „aplikuj na głowę”: ṇ₁ᵗz{tR&h;.cR∧}ˢ (16 bajtów)

I moje oryginalne rozwiązanie:

Brachylog , 15 bajtów

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

Wypróbuj online!

Ten sam I / O. Jest to zasadniczo generator słów z prefiksem ṇ₁ʰ⟨∋a₀⟩, zmodyfikowany w celu usunięcia prefiksu.

                   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.

Zupełnie inny predykat z tą samą liczbą bajtów:

Brachylog , 15 bajtów

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

Wypróbuj online!

Ten sam 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.
Niepowiązany ciąg
źródło
0

Pyth , 21 20 18 17 16 bajtów

AQVcH)IqxNG0:NG"

Wypróbuj online!

-1 przy użyciu Vzamiast, FNponieważ Vdomyślnie ustawiaN

-2 po dalszym czytaniu na temat opcji krojenia ciągów

-1 za pomocą xdo sprawdzenia obecności podłańcucha o indeksie 0

-1 za pomocą zamiany na „” w celu uzyskania końca łańcucha

Jestem pewien, że przydałoby się trochę poważnego golfa, ale jako początkujący Pyth, dostanie go do pracy było bonusem.

Jak to działa?

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
źródło
0

Excel VBA, 86 bajtów

Pobiera dane wejściowe jako prefiks do [A1]oraz wartości [B1]i dane wyjściowe do konsoli.

For each w in Split([B1]):?IIf(Left(w,[Len(A1)])=[A1],Mid(w,[Len(A1)+1])+" ","");:Next
Taylor Scott
źródło