문맥의 제목 키워드


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

제목은 공백으로 구분 된 일련의 키워드로 구성됩니다. 키워드는 알파벳 문자 만 포함합니다. 키워드는 사전 식 으로 정렬해야합니다 . 제목은 고유하고 각 제목 내에서 키워드는 고유하지만 여러 키워드에 동일한 키워드가있을 수 있습니다. 키워드가 둘 이상의 제목에 존재하면 출력에 각 모양 이 임의의 순서로 나열되어야합니다 . 예를 들어 다음과 같은 입력이 주어지면 :

A Dugong
A Proboscis

유효한 출력은 다음 중 하나입니다.

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

또는:

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

이것은 -승자는 바이트 단위로 가장 짧은 솔루션입니다. 표준 허점은 허용되지 않습니다.


제목에서 같은 키워드가 두 번 이상 나타나면 어떻게해야합니까? 발생 순서대로 나타나야합니까, 아니면 임의 순서로 허용됩니까?
피터 테일러

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.
피터 테일러

3
OP에서 @PeterTaylor 인용 keywords will be unique within each title.
PurkkaKoodari

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

하스켈, 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.