Parole chiave del titolo nel contesto


10

Questa sfida si basa su un problema descritto in D. Parnas, sui criteri da utilizzare per decomporre i sistemi in moduli , ed elaborato in J. Morris, Real Programming in Functional Languages .

Scrivi un programma o una funzione che prende un elenco di titoli di libri da stdino come argomento, in un formato ragionevole e conveniente per la tua lingua. Per esempio,

Green Sleeves
Time Was Lost

o

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

Restituisce o stampa stdoutun elenco alfabetico delle parole chiave, mostrando il loro contesto all'interno dei titoli originali racchiudendo ciascuna parola chiave tra parentesi angolari ( <e >). Come per l'input, l'output può essere in un formato ragionevole che è conveniente per la tua lingua - linee separate da newline, un elenco di stringhe, ecc:

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

I titoli saranno costituiti da una serie di parole chiave separate da un singolo spazio. Le parole chiave conterranno solo caratteri alfabetici. Le parole chiave devono essere ordinate lessicograficamente . I titoli saranno unici e le parole chiave saranno univoche all'interno di ciascun titolo, ma la stessa parola chiave potrebbe esistere in più titoli. Se esiste una parola chiave in più di un titolo, l'output dovrebbe elencare ogni aspetto in un ordine arbitrario . Ad esempio, dato questo input:

A Dugong
A Proboscis

Un output valido sarebbe:

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

O:

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

Questo è - il vincitore è la soluzione più breve in byte. Le scappatoie standard non sono ammesse.


Che dire se la stessa parola chiave compare più di una volta in un titolo? Le occorrenze dovrebbero essere in ordine di apparizione o è consentito un ordine arbitrario?
Peter Taylor,

1
@PeterTaylor: dalle specifiche, "I titoli saranno unici e le parole chiave saranno univoche all'interno di ciascun titolo ..."
JohnE

Risposte:


4

Pyth, 25 24 22 byte

VSsm,Rdcd\ QAN:HGjG"<>

Provalo online.

Accetta input come una matrice di linee, come ["Green Sleeves","Time Was Lost"].

Spiegazione

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

Sembra buggy - controlla la gestione del titolo Time Was Time.
Peter Taylor,

3
@PeterTaylor Citando dalla OP, keywords will be unique within each title.
PurkkaKoodari,

2

Japt , 55 byte

Forse questo potrebbe essere ridotto, ma non sono sicuro di come ...

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

Come funziona

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)

Esempio di utilizzo: f ["Green Sleeves","Time Was Lost"]-> ["<Green> Sleeves","Time Was <Lost>","Green <Sleeves>","<Time> Was Lost","Time <Was> Lost"].

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.