Từ khóa tiêu đề trong ngữ cảnh


10

Thách thức này dựa trên một vấn đề được mô tả trong D. Parnas, Về các tiêu chí được sử dụng trong việc phân tách các hệ thống thành các mô-đun , và được xây dựng trong J. Morris, Lập trình thực trong Ngôn ngữ chức năng .

Viết chương trình hoặc chức năng lấy danh sách tên sách từ stdinhoặc làm đối số, theo định dạng hợp lý, thuận tiện cho ngôn ngữ của bạn. Ví dụ,

Green Sleeves
Time Was Lost

hoặc là

("Green Sleeves";"Time Was Lost")

Trả lại hoặc in ra stdoutmột danh sách theo thứ tự bảng chữ cái của các từ khóa, hiển thị ngữ cảnh của chúng trong các tiêu đề ban đầu bằng cách đặt mỗi từ khóa trong dấu ngoặc nhọn ( <>). Cũng như đầu vào, đầu ra có thể ở định dạng hợp lý, thuận tiện cho các dòng được phân tách bằng ngôn ngữ mới, danh sách các chuỗi, v.v .:

<Green> Sleeves
Time Was <Lost>
Green <Sleeves>
<Time> Was Lost
Time <Was> Lost

Các tiêu đề sẽ bao gồm một loạt các từ khóa được phân tách bằng một khoảng trắng. Từ khóa sẽ chỉ chứa các ký tự chữ cái. Các từ khóa sẽ được sắp xếp theo từ vựng . Các tiêu đề sẽ là duy nhất và các từ khóa sẽ là duy nhất trong mỗi tiêu đề nhưng cùng một từ khóa có thể tồn tại trong một số tiêu đề. Nếu một từ khóa tồn tại trong nhiều tiêu đề, đầu ra sẽ liệt kê mỗi lần xuất hiện theo thứ tự tùy ý . Ví dụ, đưa ra đầu vào này:

A Dugong
A Proboscis

Một đầu ra hợp lệ sẽ là:

<A> Proboscis
<A> Dugong
A <Dugong>
A <Proboscis>

Hoặc là:

<A> Dugong
<A> Proboscis
A <Dugong>
A <Proboscis>

Đây là - người chiến thắng là giải pháp ngắn nhất tính bằng byte. Sơ hở tiêu chuẩn là không được phép.


Điều gì về nếu cùng một từ khóa xảy ra nhiều hơn một lần trong một tiêu đề? Sự xuất hiện nên theo thứ tự xuất hiện, hoặc được phép tùy ý?
Peter Taylor

1
@PeterTaylor: từ thông số kỹ thuật, "Tiêu đề sẽ là duy nhất và từ khóa sẽ là duy nhất trong mỗi tiêu đề"
JohnE

Câu trả lời:


4

Pyth, 25 24 22 byte

VSsm,Rdcd\ QAN:HGjG"<>

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

Đưa đầu vào như một mảng các dòng, như ["Green Sleeves","Time Was Lost"].

Giải trình

VSsm,Rdcd\ QAN:HGjG"<>   implicit: Q = evaluated input

   m       Q                   map input lines:
       cd\                         split input line to words
    ,Rd                          replace each word by pair [word, entire line]
  s                          concatenate results for all input lines
 S                         sort the array of pairs lexicographically
V                        loop over the array
            AN             assign the word to G and the corresponding line to H
                 jG"<>       put the word between <>
              :HG          replace the word by the above in the line and print

Có vẻ lỗi - kiểm tra việc xử lý tiêu đề Time Was Time.
Peter Taylor

3
@PeterTaylor Trích dẫn từ OP , keywords will be unique within each title.
PurkkaKoodari

2

Japt , 55 byte

Có lẽ điều này có thể được thực hiện ngắn hơn, nhưng tôi không chắc làm thế nào ...

P+UqR £XqS m_+S+X) q', n £Xs1+XbS)rXs0,XbS),@"<{X}>")qR

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

P+UqR m@XqS m_+S+X) q', n m@Xs1+XbS)rXs0,XbS),@"<{X}>")qR
          // Implicit: U = input string, S = a space, P = empty string
UqR m@    // Split input at newlines, then map each item X to:
XqS m_    //  X split at spaces, with each item Z mapped to:
+S+X)     //   Z + a space + X.
P+   q',  // Parse the result as a string, and split at commas. Due to JS's default
          // array-to-string conversion (joining with commas), this flattens the array.
n         // Sort the result lexicographically.
m@Xs1+XbS // Map each item X to everything after the first space,
rXs0,XbS  // replacing the original keyword with
@"<{X}>"  // "<" + keyword + ">".
qR        // Join the result with newlines.
          // Implicit: output last expression


1

Haskell, 113 byte

import Data.List
g l=[(m,h++('<':m++['>']):t)|(h,m:t)<-zip(inits l)$tails l]
f=map(unwords.snd).sort.(>>=g.words)

Ví dụ sử dụng: f ["Green Sleeves","Time Was Lost"]-> ["<Green> Sleeves","Time Was <Lost>","Green <Sleeves>","<Time> Was Lost","Time <Was> Lost"].

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.