Kata Kunci Judul dalam Konteks

10

Tantangan ini didasarkan pada masalah yang dijelaskan dalam D. Parnas, Mengenai kriteria yang akan digunakan dalam penguraian sistem menjadi modul , dan diuraikan dalam J. Morris, Pemrograman Nyata dalam Bahasa Fungsional .

Tulis program atau fungsi yang mengambil daftar judul buku dari stdinatau sebagai argumen, dalam format yang masuk akal dan nyaman untuk bahasa Anda. Sebagai contoh,

Green Sleeves
Time Was Lost

atau

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

Kembalikan atau cetak ke stdoutdaftar kata kunci yang disusun menurut abjad, yang menunjukkan konteksnya dalam judul asli dengan melampirkan setiap kata kunci dalam kurung siku ( <dan >). Seperti halnya input, output dapat dalam format yang masuk akal yang sesuai untuk bahasa Anda - baris yang dipisahkan oleh baris baru, daftar string, dll:

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

Judul akan terdiri dari serangkaian kata kunci yang dipisahkan oleh satu ruang. Kata kunci hanya akan berisi karakter alfabet. Kata kunci harus diurutkan secara leksikografis . Judul akan unik, dan kata kunci akan unik dalam setiap judul tetapi kata kunci yang sama mungkin ada di beberapa judul. Jika kata kunci ada di lebih dari satu judul, output harus mencantumkan setiap penampilan dalam urutan acak . Misalnya, diberikan input ini:

A Dugong
A Proboscis

Output yang valid adalah:

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

Atau:

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

Ini adalah - pemenangnya adalah solusi terpendek dalam byte. Celah standar tidak diijinkan.

JohnE
sumber
Bagaimana jika kata kunci yang sama muncul lebih dari satu kali dalam satu judul? Haruskah kejadiannya dalam urutan penampilan, atau urutan sewenang-wenang diizinkan?
Peter Taylor
1
@PeterTaylor: dari spec, "Judul akan unik, dan kata kunci akan unik dalam setiap judul ..."
JohnE

Jawaban:

4

Pyth, 25 24 22 byte

VSsm,Rdcd\ QAN:HGjG"<>

Cobalah online.

Mengambil input sebagai larik garis, misalnya ["Green Sleeves","Time Was Lost"].

Penjelasan

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
PurkkaKoodari
sumber
Tampak buggy - periksa penanganan judul Time Was Time.
Peter Taylor
3
@PeterTaylor Mengutip dari OP keywords will be unique within each title,.
PurkkaKoodari
2

Japt , 55 byte

Mungkin ini bisa dibuat lebih pendek, tapi saya tidak yakin bagaimana ...

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

Bagaimana itu bekerja

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
Produksi ETH
sumber
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)

Contoh penggunaan: f ["Green Sleeves","Time Was Lost"]-> ["<Green> Sleeves","Time Was <Lost>","Green <Sleeves>","<Time> Was Lost","Time <Was> Lost"].

nimi
sumber