コンテキスト内のタイトルキーワード


10

この課題は、D。Parnas、システムをモジュールに分解する際に使用される基準について説明されている問題に基づいており、J。Morrisの「関数型言語でのリアルプログラミング」で詳しく説明されています。

書籍のタイトルのリストをstdin引数として使用するプログラムまたは関数を、言語に適した便利な形式で記述します。例えば、

Green Sleeves
Time Was Lost

または

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

stdoutキーワードのアルファベット順のリストに戻るか印刷して、各キーワードを山括弧(<および>)で囲んで、元のタイトル内のコンテキストを示します。入力と同様に、出力は適切な形式にすることができます。これは、言語、改行で区切られた行、文字列のリストなどに便利です。

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

タイトルは、1つのスペースで区切られた一連のキーワードで構成されます。キーワードにはアルファベット文字のみが含まれます。キーワードは辞書式にソートされます。タイトルは一意であり、キーワードは各タイトル内で一意ですが、同じキーワードが複数のタイトルに存在する場合があります。キーワードが複数のタイトルに存在する場合、出力には各外観が任意の順序でリストさます。たとえば、次の入力があるとします。

A Dugong
A Proboscis

有効な出力は次のいずれかです。

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

または:

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

これは -勝者はバイト単位の最短のソリューションです。標準の抜け穴は許可されていません。


タイトルに同じキーワードが複数回出現する場合はどうですか?発生は出現順にする必要がありますか、それとも任意の順序で許可されますか?
Peter Taylor

1
@PeterTaylor:仕様から、「タイトルは一意になり、キーワードは各タイトル内で一意になります...」
JohnE

回答:


4

Pyth、25 24 22バイト

VSsm,Rdcd\ QAN:HGjG"<>

オンラインでお試しください。

のように、入力を行の配列として受け取ります["Green Sleeves","Time Was Lost"]

説明

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

バギーに見える -タイトルの取り扱いを確認してくださいTime Was Time
Peter Taylor

3
@PeterTaylor、OPからの引用keywords will be unique within each title
PurkkaKoodari 2015年

2

Japt、55バイト

おそらくこれはもっと短くなるかもしれませんが、どうすればいいのかわかりません...

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

使い方

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バイト

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

使用例:f ["Green Sleeves","Time Was Lost"]-> ["<Green> Sleeves","Time Was <Lost>","Green <Sleeves>","<Time> Was Lost","Time <Was> Lost"]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.