En Kısa Substring Endeksi


9

Tembel ama etkili bir insanım, çünkü çoğunuz da muhtemelen. Yani, ne zaman bir şey yapsam, bunu en az çabayla yapmak istiyorum. Bu yüzden bu sorunu benim için çözmeni istiyorum.

Burada elimde bir çeşit belge var. Bu belgenin her satırında tek bir kelime veya kısa bir kelime öbeği bulunur. Belge sıralanmamış, ama her şeyin nerede olduğunu biliyorum. İşleri daha hızlı bulmak için biraz yardım alabilirim ve bunun için ikinci bir listeye ihtiyacım var. Buraya girdiğiniz yer. Bu belgedeki her metin satırı için bazı tanımlayıcılara ihtiyacım var. Yapabileceğim bir şey CTRL+ F, ama bu sonucu elde etmek için kesinlikle gerekli olandan daha uzun olamaz.

Örnek girdi:

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

Örnek çıktı:

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

Aynı sayfada olduğumuzdan emin olmak için burada tekrar edeceğim:

  • Girdi, satır sonları ile ayrılmış bir öğe listesi içeren biçimlendirilmemiş bir metin dosyasıdır. Burada .txt biçiminde var, adı "STUFF.TXT"
  • Belgenin ilk ve son satırı boş. Diğer her satır> 0 uzunluğunda bir girdi içerir.
  • Dosya yalnızca alfasayısal karakterler (tümü küçük harf), boşluklar ve satır kesmeleri içerir.
  • İstenen çıktı, orijinal listem ile aynı sırayla tanımlayıcıların bir listesidir.
  • Her liste öğesi için birden fazla arama kelimesi istemiyorum. Birden fazla cevap varsa, birini seçin, hangisini umursamıyorum. Yukarıdaki örnekte için 'ap' seçtim an apple, ancak 'n', 'a', 'pp', 'pl' veya 'le' seçmiş olabilirsiniz. 'An' değil, çünkü içeride banana.
  • Sizi temin ederim, dosya asla boş değildir ve asla kopya içermez.
  • Gerekirse , hat sonlandırıcıyla eşleştirebilirsiniz. Ancak bu, yalnızca liste öğelerini (örneğin 'elma' ve 'elma') ayırt etmenin başka bir yolu olmadığında kullanılacak son çözümdür.

Standart boşluklara izin verilmez. Ayrıca, bu kod golf çok kısa kod kazanır.

Bir örnek daha:

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

Ve çıktısı:

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

1
@CarpetPython mümkün olan en kısa zamanda olmalı. Giriş ve çıkışta boşluklar olabilir, bunu soruya ekledik.
freekvd

Bir dize diğerinin son eki ise, arama teriminin başlangıcında da yeni satırlar kullanabilir miyiz?
Martin Ender 30'15

@ MartinBüttner evet. Bu nedenle belge boş bir satırla başlar ve biter, böylece her satır öğesinin başında ve sonunda bu satır satırları olur.
freekvd

4
Bu sorunun NP-tamamlanmış olduğundan eminim. Sanırım tam kapak sorununun azaltılmasını buna da getirebilirim.
FUZxxl

4
Kaba kuvvetten daha iyi bir çözüm olmadığı için herhangi bir yaratıcı çözüm görmeyeceksiniz.
FUZxxl

Yanıtlar:


3

Pyth, 39 bayt

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

Brute, her dizenin tüm alt kümelerini artan uzunlukta zorlar ve bu dizenin diğer iç kısımlarda olup olmadığını kontrol eder. Bu işe yaramazsa, öğesinin tüm alt kümeleri hariç aynısını yapar \nstring\n.


Bunu test ettiğimde kötü bir tür birleşim hatası alıyorum. pyth.herokuapp.com/…
freekvd

@freekvd Heroku'nun Pyth'in eski bir sürümü olması gerekir, çünkü .:birinci tür dize ve ikinci tür int ile çağrı yapmak bir hata değildir. Depodan Pyth'i
orlp
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.