Cari teks untuk awalan dan daftarkan semua sufiksnya dalam teks

17

Saya menggunakan "akhiran" secara longgar di sini berarti "sub-string yang mengikuti awalan".

"Awalan" di sini berarti MULAI kata, di mana awal kata didefinisikan sebagai setelah spasi atau dari karakter pertama dari teks input (untuk kata pertama). "Awalan" di tengah kata diabaikan.

Misalnya jika awalan input Anda adalah "lengan" dan teks inputnya adalah "Pasukan Dumbledore dipersenjatai sepenuhnya untuk Armageddon yang akan datang" maka daftar output berisi (y, ed, ageddon).

Uji Kasus

Asumsikan case-sensitive, string berakhir setelah spasi. Input tidak akan mulai dengan spasi.

Menghapus duplikat adalah opsional.


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

Pemenang

Ini adalah , sehingga byte paling sedikit menang. :)

Dapat menerima input dengan cara apa pun yang berfungsi, selama kode Anda dapat menyelesaikan masalah arbitrer seperti kasus uji.

DrQuarius
sumber
2
Agar jelas, awalan harus di awal kata? Jika test case kedua memiliki kata 'difraksi' di dalamnya, apakah itu akan mengubah output?
sundar - Reinstate Monica
2
Bagaimana bisa https://www.astrotheme.com/astrology/menjadi awalan saat didahului oleh href="?
Neil
1
Bisakah sufiks kosong?
user202729
1
Saya sarankan membiarkan orang untuk membagi ruang putih lain dan ruang karena beberapa tampaknya tetap melakukannya. Saya juga menyarankan mengatakan tidak akan ada banyak spasi dalam satu baris dalam input (atau agak setara bahwa kata-kata kosong dapat mengakibatkan perilaku tidak terdefinisi). Saya menyarankan kedua hal ini karena bagian utama dari tantangan bukanlah pemisahan menjadi kata-kata (saya sarankan hanya mengizinkan daftar kata atau bahkan hanya kata sebagai masukan, tapi sudah terlambat sekarang dengan 22 jawaban - sesuatu yang perlu diperhatikan untuk tantangan di masa depan).
Jonathan Allan
1
-1 untuk memungkinkan pemisahan pada spasi putih lainnya sekarang. Masuk akal jika tantangannya seperti itu pada awalnya, tetapi mengubah sekarang akan membagi jawaban menjadi dua yang berbeda. Dan ini tidak seperti kasus di mana beberapa bahasa tidak dapat menangani misalnya. Angka 64-bit atau sesuatu, di sini ini berarti menerapkan kecocokan yang sedikit (mungkin) lebih kompleks, jadi lebih masuk akal untuk mengoreksi jawaban dengan asumsi yang salah dan mungkin menambahkan test case untuk memeriksa ini juga.
sundar - Reinstate Monica

Jawaban:

5

R , 63 byte

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

Cobalah online!

Penerapan positif-lihat di belakang sayangnya 5 byte lebih lama karena regmatches/gregexprkombinasi besar :

function(s,p)regmatches(s,gregexpr(paste0('(?<=',p,')[^ ]*'),s,,T))
menggali semua
sumber
2
Sub naif (grep ()) sedikit lebih baik daripada tampilan di belakang di 66, tetapi masih tidak melanggar pada beginWith (). Saya tidak melihat banyak ruang untuk perbaikan di sini tanpa perubahan pendekatan. Cobalah online!
kriminal
4

Jeli , 12 byte

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

Cobalah online!

Erik the Outgolfer
sumber
Sebuah karya seni. : ') Akan menggunakan ini untuk mem-parsing html ke dalam daftar, terima kasih banyak. :)
DrQuarius
2
@DrQuarius Regex tidak dapat menguraikan HTML , dan begitu juga Jelly.
user202729
Tampaknya bekerja ok untuk saya . Tidak yakin kenapa
DrQuarius
1
@DrQuarius Ini adalah lelucon terkenal, dan user202729 memperpanjangnya.
Erik the Outgolfer
4

Japt , 9 byte

8 byte jika kita dapat mengambil input sebagai array kata.

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

Cobalah online!

Nit
sumber
Sangat bagus, tetapi sepertinya tidak berfungsi untuk test case terakhir . Mungkinkah karena tanda kutip di dalam string? atau baris baru?
DrQuarius
@DrQuarius Test case terakhir Anda rusak, bukan? Semua string yang Anda cari ada di tengah kata-kata (dikelilingi oleh url('')), tidak ada dari mereka yang berada di awal.
Nit
4

Python 2 , 57 56 byte

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

Cobalah online!

-1 dengan terima kasih kepada @mypetlion

ElPedro
sumber
2
lambda i,j:[w[len(i):]for w in j.split()if w.find(i)==0]untuk -1 byte
mypetlion
4

C (gcc) , 113 109 106 105 byte

-4 byte terima kasih kepada @LambdaBeta!
-3 byte terima kasih kepada @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++);}

Cobalah online!

betseg
sumber
1
Anda dapat menyimpan 4 byte dengan menghapus keduanya ^0. Just ;*t;and&&*t;
LambdaBeta
@LambdaBeta terima kasih! Saya melewatkan itu.
betseg
1
Saya dapat menurunkannya menjadi 107 menggunakan strategi yang berbeda, maaf :)
LambdaBeta
@LambdaBeta Saya sebenarnya memikirkan metode itu tetapi saya tidak berpikir itu akan lebih pendek daripada solusi yang saya posting. Jawaban yang bagus, terangkat.
betseg
1
menempatkan digunakan bukan putchar, sekarang adalah 107, output pada baris yang berbeda: tio.run/...
Windmill Cookies
3

Japt , 16 12 byte

Port of Arnauld Answer

-4 byte dari @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

Cobalah online!

Luis felipe De jesus Munoz
sumber
1
12 byte
Shaggy
Mungkin harus menyebutkan bahwa ini adalah port solusi Arnauld. (Dengan asumsi itu tidak diturunkan secara independen, tentu saja)
Shaggy
@ Shaggy Jujur saya tidak melihat ini adalah jawaban yang sama, toh saya akan memberinya kredit. maaf
Luis felipe De jesus Munoz
Ada solusi 9 byte jika Anda ingin mencobanya.
Shaggy
@Shaggy Apakah maksud Anda ini atau apakah Anda memiliki sesuatu yang berbeda?
Nit
3

05AB1E , 11 byte

#ʒηså}εsgF¦

Cobalah online! (di sini adalah demo untuk string multiline)

Bagaimana cara kerjanya?

# ʒηså} εsgF¦ Program lengkap.
# Pisahkan input pertama dengan spasi.
 ʒ} Saring kata-kata dengan ...
  ηså ... "Apakah input kedua muncul pada awalan kata?"
      ε Dan untuk setiap kata yang valid
       sg Ambil panjang input kedua.
         F¦ Dan jatuhkan karakter pertama dari kata itu beberapa kali.
Tuan Xcoder
sumber
:) Sangat bagus, terima kasih untuk demo multiline! Saya pikir itu menyebabkan masalah untuk program lain.
DrQuarius
3

Stax , 8 byte

·B¬╤²*6&

Jalankan dan debug itu

Penjelasan:

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

Saya juga bisa menggunakan x%t(panjang X, trim dari kiri), yang sama-sama panjang tetapi paket hingga 9 byte .

wastl
sumber
Cantik. :) Saya pikir ini mungkin pemenangnya. Sebagian besar pesaing skor byte terendah belum dapat menguraikan kasus uji ketiga. :)
DrQuarius
Ahhh ... tapi saya melihat bagaimana Anda melakukannya sekarang, Anda harus memberi tahu program bahwa tanda kutip dalam string bukan bagian dari program. Saya pikir itu baik-baik saja. Selain itu, milik Anda masih yang terpendek. :)
DrQuarius
3

Retina , 31 byte

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

Cobalah online! Baris pertama harus menjadi awalan yang diinginkan, sisanya adalah teks input. Tidak menghapus duplikat. Akan menjadi 25 byte jika spasi putih adalah sepator yang valid. Penjelasan: Kami ingin membuat daftar akhiran dari awalan yang valid. The [^ ¶]+sesuai dengan akhiran sendiri. Awalan regexp adalah lookbehind yang memastikan bahwa awalan suffix adalah awalan input. Ketika tampilan dievaluasi dari kanan ke kiri, ini dimulai dengan mencocokkan awalan (menggunakan pola yang sama tetapi di dalam ()s untuk menangkapnya), lalu karakter apa pun, sebelum akhirnya mencocokkan awalan pada barisnya sendiri pada awal input.

Neil
sumber
Ruang putih artinya ruang dan / atau garis terputus? Saya pikir itu solusi yang valid jika demikian, tetapi untuk bersikap adil terhadap semua saya akan meninggalkan masalah seperti yang dinyatakan.
DrQuarius
@DrQuarius Tidak, spasi putih termasuk tab, formfeed, dan bahkan elips .
Neil
Retina adalah bahasa pertama yang muncul di benak saya ketika saya melihat posting (meskipun saya belum tahu bahasa itu). Saya pikir akan lebih pendek. Bisakah saya mengganggumu untuk penjelasan? Untuk misalnya. kata docs adalah karakter baris baru, tapi saya tidak tahu mengapa begitu banyak yang dibutuhkan di sini.
sundar - Reinstate Monica
@sundar Maaf saya agak terburu-buru saat itu. Yang pertama memastikan bahwa seluruh baris pertama dicocokkan dengan awalan. Yang kedua diperlukan karena tidak diketahui berapa banyak garis perantara yang ada. Dua yang terakhir bekerja dengan cara yang sama - kelas karakter yang dinegasikan biasanya menyertakan baris baru tetapi kami tidak menginginkannya di sini.
Neil
Tidak masalah, terima kasih telah menambahkannya. "Biasanya menyertakan baris baru tapi kami tidak ingin itu di sini" <- Jika saya mengerti dengan benar, kami ingin itu di sini. OP secara tegas menetapkan bahwa hanya spasi yang dihitung sebagai pemisah, awalan dimulai pada dan akhiran berakhir pada spasi. Jadi untuk mis. "dif \ nfractional" tidak boleh cocok dengan "frac" karena awalan muncul setelah baris baru, bukan spasi. Demikian pula "fracture- \ nrelated" harus mengembalikan suffix "ture- \ nrelated". Saya kira ini adalah kabar baik, karena Anda dapat menghapus setidaknya satu , mungkin lebih.
sundar - Reinstate Monica
3

Brachylog , 24 21 byte

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

Cobalah online!

Bisa jadi beberapa byte lebih pendek jika ada berbagi variabel dengan predikat sebaris.

Input adalah larik dengan awalan sebagai elemen pertama dan teks sebagai elemen kedua.

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 - Pasang kembali Monica
sumber
2

IBM / Lotus Notes Formula, 54 byte

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

Mengambil input dari dua bidang bernama adan b. Berfungsi karena Formula akan secara rekursif menerapkan fungsi ke daftar tanpa perlu @Forloop.

Tidak ada TIO yang tersedia jadi inilah tangkapan layarnya:

enter image description here

ElPedro
sumber
2

APL (Dyalog Unicode) , 23 byte SBCS

Program lengkap. Meminta teks dan awalan dari stdin. Mencetak daftar ke stdout.

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

Cobalah online!

 prompt (untuk teks)

 hasilkan itu (terpisah '\1'dari )

()⎕S'\1' PCRE Cari dan kembalikan daftar grup tangkap 1 dari regex berikut:

 prompt (untuk awalan)

'(\w+)\b', awali string ini (grup karakter kata diikuti oleh batas kata)

5⌽ putar 5 karakter pertama hingga akhir; '\bPREFIX(\w+)'

Adm
sumber
2

C (dentang) , 107 byte

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

Cobalah online!

Deskripsi:

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
}

Harus dentang karena gf segfaults tanpa #include <string.h>karena masalah strtok.

LambdaBeta
sumber
100 byte
ceilingcat
2

MATL, 17 byte

Yb94ih'(.*)'h6&XX

Cobalah di MATL Online

Bagaimana?

Yb - Pisahkan input pada spasi, letakkan hasilnya dalam array sel

94- Kode ASCII untuk ^karakter

ih - Dapatkan input (katakan "frac"), gabungkan '^' dan input

'(.*)'h- Dorong string '(.*)'ke dalam tumpukan, gabungkan '^ frac' dan '(. *)'. Jadi sekarang kita punya '^frac(.*), sebuah regex yang cocok dengan "frac" di awal string dan menangkap apa pun yang terjadi setelahnya.

6&XX- Jalankan pencocokan regexp, dengan 6&menentukan mode 'Token' yaitu, kelompok tangkapan yang cocok dikembalikan sebagai ganti seluruh pertandingan.

Secara implisit menampilkan hasilnya.

sundar - Pasang kembali Monica
sumber
Jadi begitulah 'Tokens'; senang mendengarnya!
Luis Mendo
1
Ha ha. Saya juga tidak tahu, menemukan jawabannya melalui coba-coba untuk jawaban ini.
sundar - Reinstate Monica
2

Bash + grep, 20 byte

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

Awalan diberikan sebagai parameter baris perintah, dan teks input disalurkan melalui stdin.

Cobalah online!

Trauma Digital
sumber
2

PowerShell 3.0, 60 62 59 byte

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

Kehilangan beberapa byte yang menekan output cmatch. Punya solusi janky yang diperoleh beberapa dengan sengaja menyebabkan duplikat. Tapi itu juga melempar redline jika tidak cocok pada awalnya tapi itu tidak baik sekarang karena aku memikirkannya. +2 byte untuk memperbaikinya.

Veskah
sumber
Solusi dengan 60 byte mengembalikan jawaban ganda dalam beberapa kasus king, tals, ted, tional, tional, tionally, tioned, tioned, tious, tostratic, tures,tures,tures, tures, asdan menunjukkan kesalahan indeks pada He1incontoh. Powershell 5.1, 6.0.2. Solusi dengan 62 byte adalah Ok.
mazzy
1
@ Mazzy Saya tahu itu, saya hanya menyalahgunakan bit "Duplikat diizinkan" untuk mengembalikannya lebih banyak lagi ketika muncul pertandingan yang tidak cocok dan melempar merah pada iterasi pertama yang tidak cocok dengan pertandingan.
Veskah
1

JavaScript (ES6), 57 byte

Mengambil input dalam sintaks currying (text)(prefix). Tidak menghapus duplikat.

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

Cobalah online!

Arnauld
sumber
1

Sekam , 11 byte

Cukup banyak port jawaban Haskell :

m↓L⁰foΠz=⁰w

Cobalah online!

Penjelasan

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"]
ბიმო
sumber
1

Jelly ,  11  9 byte

Ḳœṣ€ḢÐḟj€

Tautan diad yang menerima teks (daftar karakter) di sebelah kiri dan awalan (daftar karakter) di sebelah kanan yang menghasilkan daftar daftar karakter (sufiks yang dihasilkan).

Cobalah online! (Footer bergabung dengan spasi untuk menghindari smashing implisit program penuh)
Catatan: Saya menambahkan tiga kasus tepi ke string di OP - tidak difrackled dan nofracfracheremate ke awal, yang seharusnya tidak menampilkan dan fracfracit sampai akhir yang seharusnya menghasilkan fracit.

Bagaimana?

Ḳœṣ€ḢÐḟ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 byter sebelumnya:

Ḳs€L}Ḣ⁼¥ƇẎ€

Juga tautan diad seperti di atas.

Cobalah online!

Jonathan Allan
sumber
1

Perl 5 dengan -asE, 23 22 21 byte (?)

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

Cobalah online!

Dapat dijalankan sebagai commandline one-liner as perl -asE 'say/^$b(.*)/ for@F' -- -b=frac -, atau dengan nama file sebagai ganti yang terakhir -.
Atau dari file skrip, katakanperl -as -M5.010 script.pl -b=frac - (terima kasih kepada @Brad Gilbert b2gills untuk tautan TIO yang menunjukkan ini).

Kode itu sendiri adalah 18 byte, saya menambahkan 3 byte untuk -b=opsi yang menetapkan nilainya (input awalan) ke variabel yang disebutkan $bdalam kode. Itu terasa seperti pengecualian untuk konsensus "bendera tidak dihitung" yang biasa.

-amemisahkan setiap jalur input pada spasi dan menempatkan hasilnya dalam array @F. -sadalah cara pintas untuk menetapkan argumen baris perintah sebagai variabel, dengan memberikan nama pada baris perintah. Di sini argumennya adalah -b=frac, yang menempatkan awalan "frac" dalam sebuah variabel $b.

/^$b(.*)/- Cocokkan dengan nilai $bpada awal string. .*Apa pun yang terjadi setelah itu, sampai akhir kata, dan paranthes di sekitarnya menangkap nilai ini. Nilai yang ditangkap secara otomatis dikembalikan, untuk dicetak oleh say. Mengulang-ulang kata-kata yang dipisahkan oleh ruang for @Fberarti kita tidak perlu memeriksa ruang awal atau akhir.

sundar - Pasang kembali Monica
sumber
1

Perl 6 , 30 byte

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

Menguji

Diperluas:

{  # 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
sumber
@sundar tetap
Brad Gilbert b2gills
Anda tampaknya memiliki ruang ekstra antara 'p' dan '<' btw.
sundar - Reinstate Monica
@sundar Ruang antara pdan <(diperlukan karena jika tidak dapat dianggap sebagai $v<…>kependekan dari $v{qw '…'}.
Brad Gilbert b2gills
1
Tampaknya bekerja tanpa itu, setidaknya dalam kasus ini.
sundar - Reinstate Monica
1
@sundar Secara teknis itu hanya memperingatkan, tapi saya tidak suka menulis kode yang memperingatkan ketika hanya satu byte berbeda dari kode yang tidak memperingatkan.
Brad Gilbert b2gills
1

Java 10, 94 byte

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

Cobalah online di sini .

Tidak Disatukan:

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
}
Ketidakseimbangan
sumber
1

Small Basic , 242 byte

Script yang tidak mengambil input dan output ke TextWindowObject

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

Cobalah di SmallBasic.com! Membutuhkan IE / Silverlight

Taylor Scott
sumber
1

Python 2 , 53 byte

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

Cobalah online!

Raphaël Côté
sumber
Gagasan yang menarik tetapi gagal untuk kasus uji pertama, masukan: "1", "He1in aosl 1ll j21j 1lj2j 1lj2 1ll l1j2i"
Chas Brown
Benar, aku akan mencoba bermain-main dengannya. Saya yakin saya ke sesuatu ...
Raphaël Côté
1

Brachylog , 12 byte

hṇ₁∋R&t;.cR∧

Cobalah online!

Mengambil input [text, prefix]melalui variabel input, dan menghasilkan setiap kata melalui variabel output. Ini awalnya jawaban Sunda, yang saya mulai mencoba golf setelah membaca bahwa itu "bisa beberapa byte lebih pendek jika ada berbagi variabel dengan predikat sebaris", yang mungkin sekarang. Ternyata output generator menyimpan lebih banyak byte.

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

Dua upaya pertama saya untuk menurunkannya, menggunakan fitur bahasa yang cukup baru:

Dengan variabel global yang diharapkan: hA⁰&tṇ₁{∧A⁰;.c?∧}ˢ (18 byte)

Dengan metapredicate apply-to-head: ṇ₁ᵗz{tR&h;.cR∧}ˢ (16 byte)

Dan solusi asli saya:

Brachylog , 15 byte

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

Cobalah online!

I / O yang sama. Ini pada dasarnya adalah generator untuk kata-kata dengan awalan ṇ₁ʰ⟨∋a₀⟩,, dimodifikasi untuk menghapus awalan.

                   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.

Predikat yang sangat berbeda dengan jumlah byte yang sama:

Brachylog , 15 byte

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

Cobalah online!

I / O yang sama.

   ∋               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.
String yang tidak terkait
sumber
0

Pyth , 21 20 18 17 16 byte

AQVcH)IqxNG0:NG"

Cobalah online!

-1 dengan menggunakan Valih-alih FNkarena Vset secara implisitN

-2 setelah membaca lebih lanjut tentang opsi pengiris string

-1 menggunakan x untuk memeriksa keberadaan substring pada indeks 0

-1 menggunakan ganti dengan "" untuk mendapatkan akhir dari string

Saya yakin ini bisa menggunakan beberapa golf serius tetapi sebagai pemula Pyth, hanya membuatnya bekerja adalah bonus.

Bagaimana cara kerjanya?

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
sumber
0

Excel VBA, 86 byte

Mengambil input sebagai awalan [A1]dan nilai-nilai [B1]dan output ke konsol.

For each w in Split([B1]):?IIf(Left(w,[Len(A1)])=[A1],Mid(w,[Len(A1)+1])+" ","");:Next
Taylor Scott
sumber