Tìm kiếm văn bản cho một tiền tố và liệt kê tất cả các hậu tố của nó trong văn bản


17

Tôi sử dụng "hậu tố" một cách lỏng lẻo ở đây có nghĩa là "bất kỳ chuỗi con nào theo sau tiền tố".

"Tiền tố" ở đây có nghĩa là BẮT ĐẦU của một từ, trong đó bắt đầu của một từ được xác định là sau một khoảng trắng hoặc từ ký tự đầu tiên của văn bản đầu vào (đối với từ đầu tiên). Một "tiền tố" ở giữa một từ bị bỏ qua.

Ví dụ: nếu tiền tố đầu vào của bạn là "arm" và văn bản đầu vào là "Quân đội của Dumbledore đã được trang bị đầy đủ cho armageddon sắp xảy ra" thì danh sách đầu ra chứa (y, ed, agedon).

Các trường hợp thử nghiệm

Giả sử trường hợp nhạy cảm, chuỗi kết thúc sau dấu cách. Đầu vào sẽ không bắt đầu với một khoảng trắng.

Loại bỏ trùng lặp là tùy chọn.


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

Người chiến thắng

Đây là , vì vậy ít byte nhất sẽ thắng. :)

Có thể chấp nhận các đầu vào theo bất kỳ cách nào hoạt động, miễn là mã của bạn có thể giải quyết các vấn đề tùy ý như các trường hợp thử nghiệm.


2
Để rõ ràng, tiền tố phải ở đầu một từ? Nếu trường hợp thử nghiệm thứ hai có chữ 'nhiễu xạ' trong đó, điều đó có thay đổi đầu ra không?
- Phục hồi Monica

2
Làm thế nào có https://www.astrotheme.com/astrology/thể là tiền tố khi nó đi trước href="?
Neil

1
Có thể hậu tố trống?
dùng202729

1
Tôi đề nghị cho phép mọi người phân chia trên không gian trắng cũng như không gian như một số ít dường như đang làm như vậy. Tôi cũng đề nghị nói rằng sẽ không có nhiều khoảng trắng trong một hàng trong đầu vào (hoặc tương đương với các từ trống có thể dẫn đến hành vi không xác định). Tôi đề nghị cả hai điều này vì phần chính của thử thách không phải là phần chia thành các từ (tôi sẽ đề nghị chỉ cho phép một danh sách các từ hoặc thậm chí chỉ là một từ làm đầu vào, nhưng giờ đã quá muộn với 22 câu trả lời - một điều cần lưu ý cho những thách thức trong tương lai).
Jonathan Allan

1
-1 để cho phép phân tách trên các khoảng trắng khác bây giờ. Sẽ có ý nghĩa đối với thử thách ban đầu, nhưng thay đổi bây giờ sẽ chia câu trả lời thành hai câu hỏi khác nhau. Và điều này không giống như trường hợp một số ngôn ngữ không thể xử lý, ví dụ. Các số 64 bit hoặc một cái gì đó, ở đây chỉ có nghĩa là thực hiện một kết hợp phức tạp hơn một chút (có thể), do đó, sẽ hợp lý hơn khi trả lời đúng với các giả định sai và có thể thêm trường hợp kiểm tra để kiểm tra điều này.
- Phục hồi Monica

Câu trả lời:


5

R , 63 byte

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

Hãy thử trực tuyến!

Thật không may, việc triển khai giao diện tích cực dài hơn 5 byte do regmatches/gregexprsự kết hợp rất lớn :

function(s,p)regmatches(s,gregexpr(paste0('(?<=',p,')[^ ]*'),s,,T))

2
Một tiểu mục ngây thơ (grep ()) tốt hơn một chút so với giao diện ở 66, nhưng vẫn không xâm phạm vào startWith (). Tôi không thấy nhiều chỗ để cải thiện ở đây mà không thay đổi cách tiếp cận. Hãy thử trực tuyến!
CriminallyVulgar

4

Thạch , 12 byte

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

Hãy thử trực tuyến!


Một tác phẩm nghệ thuật. : ') Sẽ sử dụng điều này để phân tích html thành các danh sách, cảm ơn bạn rất nhiều. :)
DrQuarius

2
@DrQuarius Regex không thể phân tích cú pháp HTML và Jelly cũng vậy.
dùng202729

Có vẻ làm việc ok với tôi . Không chắc chắn lý do tại sao?
DrQuarius

1
@DrQuarius Đó là một trò đùa nổi tiếng và user202729 đã mở rộng nó.
Erik the Outgolfer 17/07/18

4

Japt , 9 byte

8 byte nếu chúng ta có thể lấy đầu vào là một mảng các từ.

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

Hãy thử trực tuyến!


Rất đẹp, nhưng dường như không hoạt động cho trường hợp thử nghiệm cuối cùng . Có thể là do dấu ngoặc kép bên trong chuỗi? hay dòng mới?
DrQuarius

@DrQuarius Trường hợp kiểm tra cuối cùng của bạn bị lỗi, phải không? Tất cả các chuỗi bạn đang tìm kiếm ở giữa các từ (được bao quanh bởi url('')), không có chuỗi nào ở đầu.
Nit


4

C (gcc) , 113 109 106 105 byte

-4 byte nhờ @LambdaBeta!
-3 byte nhờ @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++);}

Hãy thử trực tuyến!


1
Bạn có thể lưu 4 byte bằng cách xóa cả hai ^0. Chỉ ;*t;&&*t;
LambdaBeta

@LambdaBeta cảm ơn! Tôi đã bỏ lỡ nó.
betseg

1
Tôi đã có thể hạ nó xuống 107 bằng một chiến lược khác, xin lỗi :)
LambdaBeta 16/07/18

@LambdaBeta Tôi thực sự đã nghĩ đến phương pháp đó nhưng tôi không nghĩ nó sẽ ngắn hơn giải pháp mà tôi đã đăng. Câu trả lời hay, nâng cao.
betseg

1
sử dụng đặt thay vì putchar, bây giờ là 107, đầu ra trên các dòng khác nhau: tio.run/ Kẻ
Bánh quy cối xay gió

3

Japt , 16 12 byte

Cảng Arnauld Trả lời

-4 byte từ @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

Hãy thử trực tuyến!



Có lẽ nên đề cập rằng đây là một giải pháp của Arnauld. (Tất nhiên, giả sử nó không có nguồn gốc độc lập)
Shaggy

@Shaggy Thành thật tôi không nhận thấy đây là câu trả lời tương tự, dù sao tôi cũng sẽ cho anh ta tín dụng. xin lỗi
Luis felipe De jesus Munoz

Có một giải pháp 9 byte nếu bạn muốn thử.
Xù xì

@Shaggy Ý bạn là thế này hay bạn có điều gì khác trong đầu?
Nit

3

05AB1E , 11 byte

#ʒηså}εsgF¦

Hãy thử trực tuyến! ( đây là bản demo cho chuỗi đa dòng)

Làm thế nào nó hoạt động?

# åså} εsgF¦ Chương trình đầy đủ.
# Tách đầu vào đầu tiên theo khoảng trắng.
 } Lọc các từ bằng ...
  ηså ... "Có phải đầu vào thứ hai xảy ra trong tiền tố của từ không?"
      Và với mỗi từ hợp lệ
       sg Lấy độ dài của đầu vào thứ hai.
         F¦ Và thả ký tự đầu tiên của từ đó số lần.

:) Rất đẹp, cảm ơn vì bản demo đa dòng! Tôi nghĩ rằng điều đó đã gây ra vấn đề cho các chương trình khác.
DrQuarius

3

Stax , 8 byte

·B¬╤²*6&

Chạy và gỡ lỗi nó

Giải trình:

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

Tôi cũng có thể sử dụng x%t(độ dài của X, cắt từ trái sang), dài bằng nhau nhưng gói thành 9 byte .


Xinh đẹp. :) Tôi nghĩ rằng đây có thể là người chiến thắng. Hầu hết các ứng cử viên điểm byte thấp nhất đã không thể phân tích cú pháp thử nghiệm thứ ba. :)
DrQuarius

À ... nhưng tôi thấy bạn đã làm nó như thế nào rồi, bạn phải cho chương trình biết rằng dấu ngoặc kép trong chuỗi không phải là một phần của chương trình. Tôi nghĩ điều đó tốt Ngoài ra, của bạn vẫn là ngắn nhất bất kể. :)
DrQuarius

3

Võng mạc , 31 byte

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

Hãy thử trực tuyến! Dòng đầu tiên phải là tiền tố mong muốn, phần còn lại là văn bản đầu vào. Không loại bỏ trùng lặp. Sẽ là 25 byte nếu bất kỳ khoảng trắng nào là một ngăn cách hợp lệ. Giải thích: Chúng tôi muốn liệt kê các hậu tố của các tiền tố hợp lệ. Các [^ ¶]+phù hợp với hậu tố chính nó. Tiền tố của biểu thức chính là một giao diện đảm bảo rằng tiền tố của hậu tố là tiền tố đầu vào. Vì một cái nhìn được đánh giá từ phải sang trái, điều này bắt đầu bằng cách khớp với tiền tố (sử dụng cùng một mẫu nhưng bên trong ()s để bắt nó), sau đó bất kỳ ký tự nào, trước khi cuối cùng khớp với tiền tố trên dòng của chính nó ở đầu đầu vào.


Không gian màu trắng có nghĩa là không gian và / hoặc ngắt dòng? Tôi nghĩ đó là một giải pháp hợp lệ nếu vậy, nhưng để công bằng cho tất cả tôi sẽ để lại vấn đề như đã nêu.
DrQuarius

@DrQuarius Không, bất kỳ khoảng trắng nào cũng bao gồm các tab, biểu mẫu và thậm chí cả hình elip .
Neil

Retina là ngôn ngữ đầu tiên xuất hiện trong đầu tôi khi tôi nhìn thấy bài đăng (mặc dù tôi chưa biết ngôn ngữ này). Tôi nghĩ rằng nó sẽ ngắn hơn mặc dù. Tôi có thể làm phiền bạn để giải thích? Ví dụ. các tài liệu nói là một nhân vật mới, nhưng tôi không thể hiểu tại sao rất nhiều cần thiết ở đây.
- Phục hồi Monica

@sundar Xin lỗi lúc đó tôi đang rất vội vàng. Dòng đầu tiên đảm bảo rằng toàn bộ dòng đầu tiên được khớp với tiền tố. Thứ hai là cần thiết bởi vì không biết có bao nhiêu dòng trung gian. Hai phần cuối hoạt động theo cùng một cách - các lớp ký tự bị phủ định thường bao gồm các dòng mới nhưng chúng tôi không muốn điều đó ở đây.
Neil

Không có vấn đề gì, cảm ơn vì đã thêm nó vào. "Thông thường bao gồm các dòng mới nhưng chúng tôi không muốn điều đó ở đây" <- Nếu tôi hiểu chính xác, chúng tôi muốn điều đó ở đây. OP chỉ định nghiêm ngặt rằng chỉ các khoảng trắng được tính là dấu phân cách, các tiền tố bắt đầu tại và hậu tố kết thúc tại khoảng trắng. Vì vậy, ví dụ. "Dif \ nfractional" không nên khớp với "frac" vì tiền tố xuất hiện sau một dòng mới, không phải là khoảng trắng. Tương tự "gãy - \ nrelated" sẽ trả về hậu tố "ture- \ nrelated". Đó là tin tốt ở đây tôi nghĩ, bởi vì bạn có thể loại bỏ ít nhất một , có thể nhiều hơn.
- Phục hồi Monica

3

Brachylog , 24 21 byte

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

Hãy thử trực tuyến!

Có thể đã ngắn hơn một vài byte nếu có chia sẻ biến với các biến vị ngữ nội tuyến.

Đầu vào là một mảng với tiền tố là phần tử đầu tiên và văn bản là phần tử thứ hai.

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)

2

Công thức ghi chú IBM / Lotus, 54 byte

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

Đưa đầu vào từ hai trường có tên ab. Hoạt động vì Công thức sẽ áp dụng đệ quy một hàm cho danh sách mà không cần @Forvòng lặp.

Không có TIO nên đây là một ảnh chụp màn hình:

nhập mô tả hình ảnh ở đây


2

APL (Dyalog Unicode) , 23 byte SBCS

Chương trình đầy đủ. Lời nhắc cho văn bản và tiền tố từ stdin. In danh sách vào thiết bị xuất chuẩn.

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

Hãy thử trực tuyến!

 lời nhắc (cho văn bản)

 mang lại (tách '\1'từ )

(... )⎕S'\1' PCRE tìm kiếm và danh sách trả lại chụp nhóm 1 từ regex sau:

 dấu nhắc (cho tiền tố)

'(\w+)\b', thêm vào chuỗi này (nhóm các ký tự từ theo sau bởi một ranh giới từ)

5⌽ xoay 5 ký tự đầu tiên đến cuối; '\bPREFIX(\w+)'


2

C (tiếng kêu) , 107 byte

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

Hãy thử trực tuyến!

Sự miêu tả:

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
}

Phải kêu vang vì segccults gcc mà không #include <string.h>do vấn đề strtok.



2

MATL, 17 byte

Yb94ih'(.*)'h6&XX

Dùng thử trên MATL Online

Làm sao?

Yb - Tách đầu vào tại các khoảng trắng, đặt kết quả vào một mảng ô

94- Mã ASCII cho ^ký tự

ih - Nhận đầu vào (nói "frac"), nối '^' và đầu vào

'(.*)'h- Đẩy chuỗi '(.*)'vào ngăn xếp, nối '^ frac' và '(. *)'. Vì vậy, bây giờ chúng ta có '^frac(.*), một regex khớp với "frac" ở đầu chuỗi và nắm bắt bất cứ điều gì đến sau.

6&XX - Chạy kết hợp regex, với 6& chỉ định chế độ 'Mã thông báo', tức là các nhóm chụp được khớp được trả về thay vì toàn bộ khớp.

Ngẫu nhiên xuất kết quả.


Vì vậy, đó là những gì 'Tokens'làm; thật tốt khi biết
Luis Mendo

1
Haha. Tôi cũng không có ý kiến ​​gì, đã tìm ra nó bằng cách dùng thử và lỗi cho câu trả lời này.
- Phục hồi Monica


2

PowerShell 3.0, 60 62 59 byte

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

Mất một số byte ngăn chặn đầu ra cmatch. Có một giải pháp tưng bừng đã đạt được một số bằng cách cố tình gây ra trùng lặp. Nhưng nó cũng đã ném các đường đỏ nếu nó không khớp với lần đầu tiên nhưng bây giờ tôi nghĩ nó không ổn. +2 byte để sửa nó mặc dù.


Giải pháp với 60 byte trả về câu trả lời kép trong một số trường hợp king, tals, ted, tional, tional, tionally, tioned, tioned, tious, tostratic, tures,tures,tures, tures, asvà hiển thị lỗi chỉ mục trên He1inví dụ. Quyền hạn 5.1, 6.0.2. Giải pháp với 62 byte là Ok.
mê mẩn

1
@mazzy Tôi biết rằng, tôi chỉ lạm dụng bit "Sao chép được phép" để nó trả lại nhiều bản sao hơn nữa khi nó xuất hiện một trận đấu không khớp và ném màu đỏ vào lần lặp thứ 1 không khớp.
Veskah

1

JavaScript (ES6), 57 byte

Đưa đầu vào theo cú pháp currying (text)(prefix). Không loại bỏ trùng lặp.

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

Hãy thử trực tuyến!




1

Chồng , 11 byte

Khá nhiều chỉ là một cổng của câu trả lời Haskell :

m↓L⁰foΠz=⁰w

Hãy thử trực tuyến!

Giải trình

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

Thạch ,  11  9 byte

Ḳœṣ€ḢÐḟj€

Một liên kết dyadic chấp nhận văn bản (một danh sách các ký tự) ở bên trái và tiền tố (một danh sách các ký tự) ở bên phải, đưa ra một danh sách các danh sách các ký tự (hậu tố kết quả).

Hãy thử trực tuyến!(chân tham gia với không gian để tránh đầy đủ chương trình ngầm đập)
Lưu ý: Tôi thêm ba trường hợp cạnh để các chuỗi trong OP - unfrackled và nofracfracheremate để bắt đầu, mà không nên đầu ra và fracfracit đến cùng mà nên đầu ra fracit.

Làm sao?

Ḳœṣ€ḢÐḟ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 trước:

Ḳs€L}Ḣ⁼¥ƇẎ€

Cũng là một liên kết dyadic như trên.

Hãy thử trực tuyến!


1

Perl 5 với -asE, 23 22 21 byte (?)

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

Hãy thử trực tuyến!

Có thể được chạy dưới dạng một dòng lệnh như perl -asE 'say/^$b(.*)/ for@F' -- -b=frac -, hoặc với một tên tệp thay cho tên cuối cùng -.
Hoặc từ một tập tin kịch bản, nóiperl -as -M5.010 script.pl -b=frac - (cảm ơn @Brad Gilbert b2gills cho liên kết TIO chứng minh điều này).

Bản thân mã là 18 byte, tôi đã thêm 3 byte cho -b=tùy chọn gán giá trị của nó (đầu vào tiền tố) cho một biến có tên $btrong mã. Cảm giác đó giống như một ngoại lệ đối với sự đồng thuận "cờ không được tính" thông thường.

-achia từng dòng đầu vào tại khoảng trắng và đặt kết quả vào mảng @F. -slà một cách tắt để gán một đối số dòng lệnh dưới dạng một biến, bằng cách đặt tên trên dòng lệnh. Ở đây, đối số là -b=frac, đặt tiền tố "frac" trong một biến$b .

/^$b(.*)/- Khớp giá trị $bở đầu chuỗi. .*là bất cứ điều gì xảy ra sau đó, cho đến khi kết thúc từ này, và các thông số xung quanh nắm bắt giá trị này. Các giá trị đã chụp được tự động trả về, sẽ được in bởi say. Lặp lại qua các từ được phân tách bằng dấu cách có for @Fnghĩa là chúng ta không phải kiểm tra các khoảng trắng ban đầu hoặc cuối cùng.



1

Perl 6 , 30 byte

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

Kiểm tra nó

Mở rộng:

{  # 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)
  /
}

@sundar cố định
Brad Gilbert b2gills

Bạn dường như có thêm một khoảng trống giữa 'p' và '<' btw.
- Phục hồi lại

@sundar Khoảng trống giữa p<(là cần thiết vì nếu không nó có thể được xem $v<…>là viết tắt của $v{qw '…'}.
Brad Gilbert b2gills

1
Có vẻ như làm việc mà không có nó, ít nhất là trong trường hợp này.
- Tái lập lại

1
@sundar Về mặt kỹ thuật, nó chỉ cảnh báo, nhưng tôi không thích viết mã cảnh báo khi nó chỉ khác một byte so với mã không cảnh báo.
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()));}

Dùng thử trực tuyến tại đây .

Ung dung:

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
}

1

Cơ bản nhỏ , 242 byte

Tập lệnh không có đầu vào và đầu ra cho TextWindowĐối tượng

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

Hãy dùng thử tại SmallBasic.com! Yêu cầu IE / Silverlight


1

Python 2 , 53 byte

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

Hãy thử trực tuyến!


Ý tưởng thú vị nhưng không thành công cho trường hợp thử nghiệm đầu tiên, nhập: "1", "He1in aosl 1ll j21j 1lj2j 1lj2 1ll l1j2i"
Chas Brown

Phải, tôi sẽ cố gắng nghịch ngợm với nó. Tôi chắc chắn tôi đang ở một cái gì đó ...
Raphaël Côté

1

Brachylog , 12 byte

hṇ₁∋R&t;.cR∧

Hãy thử trực tuyến!

Đưa đầu vào như [text, prefix]thông qua biến đầu vào và tạo từng từ thông qua biến đầu ra. Đây ban đầu là câu trả lời của chủ nhật, mà tôi đã bắt đầu thử chơi golf sau khi đọc rằng nó "có thể ngắn hơn một vài byte nếu có chia sẻ biến với các vị từ nội tuyến", hiện có thể thực hiện được. Hóa ra đầu ra máy phát tiết kiệm nhiều byte hơn.

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

Hai nỗ lực đầu tiên của tôi khi chơi golf, sử dụng các tính năng khá mới của ngôn ngữ:

Với các biến toàn cầu đã được hy vọng: hA⁰&tṇ₁{∧A⁰;.c?∧}ˢ (18 byte)

Với phép ẩn dụ áp dụng vào đầu: ṇ₁ᵗz{tR&h;.cR∧}ˢ (16 byte)

Và giải pháp ban đầu của tôi:

Brachylog , 15 byte

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

Hãy thử trực tuyến!

I / O giống nhau. Đây thực chất là một trình tạo các từ có tiền tố ṇ₁ʰ⟨∋a₀⟩, được sửa đổi để loại bỏ tiền tố.

                   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.

Một biến vị ngữ rất khác nhau có cùng số byte:

Brachylog , 15 byte

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

Hãy thử trực tuyến!

I / O giống nhau.

   ∋               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 byte

AQVcH)IqxNG0:NG"

Hãy thử trực tuyến!

-1 bằng cách sử dụng Vthay FNvì vì Vngầm định đặtN

-2 sau khi đọc thêm về các tùy chọn cắt chuỗi

-1 sử dụng x để kiểm tra sự hiện diện của chuỗi con ở chỉ số 0

-1 sử dụng thay thế bằng "" để kết thúc chuỗi

Tôi chắc chắn rằng điều này có thể sử dụng một số môn golf nghiêm túc nhưng với tư cách là người mới chơi Pyth, chỉ cần làm cho nó hoạt động là một phần thưởng.

Làm thế nào nó hoạt động?

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

0

VBA Excel, 86 byte

Lấy đầu vào làm tiền tố trong [A1]và giá trị trong [B1]và đầu ra cho bàn điều khiển.

For each w in Split([B1]):?IIf(Left(w,[Len(A1)])=[A1],Mid(w,[Len(A1)+1])+" ","");:Next
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.