最短の部分文字列インデックス


9

私は怠惰ですが効率的な人です。あなたの多くもおそらくそうです。だから、何かをしているときはいつも、最小限の努力でやりたいと思っています。そのため、この問題を解決するようにお願いしています。

ここにあるのは一種の文書です。このドキュメントのすべての行には、単一の単語または短いフレーズがあります。ドキュメントはソートされていませんが、すべてがどこにあるかはわかっています。私はいくつかのものを使ってより速く物事を見つけることができ、そのために2つ目のリストが必要です。ここがあなたの出番です。このドキュメントのすべてのテキスト行について、いくつかの識別子が必要です。何か私ができるCTRL+ Fが、それはその1つの結果を得るために絶対に必要以上に長くすることはできません。

入力例:

(blank)
an apple
spiderman 3
7pm pick up laundry
tequila
fake mustache
dishes on wednesday
banana
biscuits
(blank)

出力例:

ap,3,7,q,f,w,ba,bi

同じページにいることを確認するために、ここでも繰り返します。

  • 入力は、改行で区切られた項目のリストを含むフォーマットされていないテキストファイルです。ここに.txt形式であり、「STUFF.TXT」と呼ばれています。
  • 文書の最初と最後の行は空です。他のすべての行には、長さが> 0のエントリが含まれています。
  • ファイルには、英数字(すべて小文字)、スペース、および改行のみが含まれます。
  • 望ましい出力は、元のリストと同じ順序での識別子のリストです。
  • すべてのリストアイテムに複数の検索語を使いたくありません。複数の回答がある場合は、1つ選択してください。どちらでもかまいません。上記の例では「ap」を選択しましたがan apple、「n」、「a」、「pp」、「pl」、「le」を選択することもできます。「an」ではありませんbanana
  • ファイルが空になることはなく、重複が含まれることもありません。
  • 必要に応じて、行末記号で一致させることができます。ただし、これは、リストアイテムを区別する方法が他にない場合にのみ使用する最後の手段です(たとえば、 'apple'と 'apples')。

標準の抜け穴は許可されていません。また、これはコードゴルフなので、最短のコードが勝ちます。

もう1つの例:

(blank)
ban
any
king
bean
yen
rake
raki
bar
(blank)

そしてその出力:

ban,ny,g,be,ye,ke,aki,ar

1
@CarpetPythonそれは可能な限り最短でなければなりません。スペースは入力と出力に含めることができ、それを質問に追加しました。
freekvd 2015年

ある文字列が別の文字列のサフィックスである場合、検索語句の先頭に改行を使用することもできますか?
マーティンエンダー2015年

@MartinBüttnerはい。そのため、ドキュメントは空白行で始まり、空白行で終わります。そのため、各リストアイテムの先頭と末尾にこれらの改行があります。
freekvd 2015年

4
この問題はNP完全であると確信しています。正確なカバーの問題をこの問題にまで削減できると思います。
FUZxxl 2015年

4
ブルートフォースよりも優れたソリューションはないので、創造的なソリューションは表示されません。
FUZxxl 2015年

回答:


3

Pyth、39バイト

Lsm.:bdtUbKfT.zj\,mhf!}Yjb-Kk+yky++bkbK

すべての文字列のすべてのサブセットを増加する長さでブルートフォースし、その文字列が他の文字列内に出現するかどうかを確認します。それが機能しない場合は、のすべてのサブセットを除いて同じように動作し\nstring\nます。


これをテストすると、不正な型の組み合わせエラーが発生します。pyth.herokuapp.com/...
freekvd

@freekvd Herokuには古いバージョンのPythが必要.:です。最初のタイプの文字列と2番目のタイプのintでの呼び出しはエラーではないためです。リポジトリからPythを使用してみてください:github.com/isaacg1/pyth
orlp
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.