Buat program atau fungsi yang mengambil daftar string sebagai input, dan output string terpanjang yang merupakan substring dari semua string input. Jika ada beberapa substring dengan panjang yang sama, dan tidak lagi substring, output salah satu dari mereka.
- Ini mungkin berarti mengeluarkan string kosong.
- Jika ada beberapa output yang valid, Anda dapat output salah satu dari mereka. Anda tidak diharuskan untuk memberikan output yang konsisten untuk input yang diberikan selama output selalu valid.
- Akan selalu ada setidaknya satu string dalam input, tetapi mungkin tidak ada string yang tidak kosong.
- Semua karakter ASCII yang dapat dicetak dapat muncul di input. Anda dapat menganggap itu adalah satu-satunya karakter yang muncul.
- Anda dapat mengambil input atau menghasilkan output dengan salah satu metode default .
- Celah standar tidak diizinkan.
- Ini adalah kode-golf - semakin sedikit byte kode, semakin baik.
Kasus uji:
[Inputs] -> [Valid outputs (choose one)]
["hello", "'ello"] -> ["ello"]
["very", "much", "different"] -> [""]
["empty", "", "STRING"] -> [""]
["identical", "identical"] -> ["identical"]
["string", "stRIng"] -> ["st", "ng"]
["this one", "is a substring of this one"] -> ["this one"]
["just one"] -> ["just one"]
["", "", ""] -> [""]
["many outputs", "stuptuo ynam"] -> ["m", "a", "n", "y", " ", "o", "u", "t", "p", "s"]
["many inputs", "any inputs", "ny iii", "yanny"] -> ["ny"]
["%%not&", "ju&#st", "[&]alpha_numeric"] -> ["&"]
code-golf
string
subsequence
Sara J
sumber
sumber
undefined
berarti tidak ada string output yang valid. Jika string kosong (atau string lain) adalah output yang valid, mengklaim tidak ada output yang valid salah.Jawaban:
Python 2 , 82 byte
Cobalah online!
Mengambil input splatted. Akan habis waktu untuk input di mana string pertama panjang
Idenya adalah untuk mengambil substring dari string pertama
h
untuk menemukan yang terpanjang yang muncul di semua string yang tersisat
. Untuk melakukannya, kami secara cabang melakukan penghapusan karakter pertama atau terakhir darih
.Python 2 , 94 byte
Cobalah online!
Metode yang lebih langsung. Fungsi bantu
g
menghasilkan set semua substrings
, dan fungsi utama mengambil yang terpanjang di persimpangan mereka.sumber
Brachylog (v2),
39 byteCobalah online!
Program lengkap. Input dari input standar (sebagai daftar string gaya JSON), output ke output standar.
Penjelasan
Tampaknya, urutan tiebreak
s
tidak seperti pada hampir semua hal lain di Brachylog, jadi kita perlu menimpanya secara manual untuk menghasilkan output terpanjang. (Itu agak frustasi: empat karakter tambahan untuk penimpaan, ditambah dua karakter pengelompokan karena Brachylog tidak mem-parsing dua metapredicate berturut-turut.)Brachylog's
s
tidak mengembalikan substring kosong, jadi kita perlu sedikit trik untuk menyiasatinya: alih-alih membuat submission fungsi (yang biasanya dilakukan), kita menulis program lengkap, menghasilkan output standar. Dengan begitu, jika ada substring yang umum, kami hanya mengeluarkannya, dan kami selesai. Jika tidak ada substring umum, program keluar - tetapi masih tidak mencetak apa pun ke output standar, sehingga output string null seperti yang dimaksud.sumber
s
kesalahan, dan mengesampingkan urutan tiebreak agak mahal. Akan tetapi, lakukan itu sekarang, karena penting agar jawabannya benar. Entah bagaimana tidak ada kasus tes yang saya coba perhatikan perbedaannya.s
menghasilkan substring adalah dengan terlebih dahulu memberikan semua awalan input (terpanjang pertama), kemudian menjatuhkan yang pertama dan ulangiJelly ,
126 byteCobalah online!
Terima kasih kepada @JonathanAllan karena telah menghemat 6 byte!
sumber
Ẇ€œ&/Ṫḟ0
akan melakukan pekerjaan dan menghemat empat byte karena sub-string sudah dipesan oleh panjang, maka hasil yang disaring akan menjadi; maka yang tersisa adalah ketika tidak ada kecocokan, tail menghasilkan angka nol, dan karena kita dijamin daftar karakter, kita dapat dengan mudah menyaringnya.œ&/
dapat diganti denganf/
menyimpan lain di siniẆ€f/ṛ/
.Ruby 2.6,
76 5954 byteCobalah online! - Versi Ruby 2.5 (56 byte)
Bagaimana?
Buat daftar kecocokan potensial, awalnya diatur ke array asli. Iterasi pada daftar, dan jika sebuah string tidak cocok, tambahkan 2 string baru ke ujung daftar, memotong karakter pertama atau terakhir. Pada akhirnya kecocokan (akhirnya string kosong) akan ditemukan.
Terima kasih Kirill L untuk -2 byte dan histokrat untuk -2 lainnya
sumber
R ,
119116108106 byteCobalah online!
Temukan semua substring dari setiap string, temukan persimpangan setiap daftar substring, lalu akhirnya kembalikan (salah satu) yang terpanjang.
-3 byte terima kasih kepada Kirill L.
-8 byte menggunakan
lapply
sebagai gantinyaMap
-2 byte terima kasih kepada Kirill L. lagi, menghapus kawat gigi
sumber
nchar
cukup untuk menyelamatkan sesuatu dengan menyatakannchar
sebagai operator yang tidak waspada.list
juga memberi kita -3 byte.05AB1E ,
1498 byte-6 byte terima kasih kepada @Adnan .
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
€Œ.«Ãõªéθ
harus bekerja selama 9 byte.Å«Ã
, tetapi tidak menyadari bahwa saya seharusnya menggunakannya.«Ã
.. Terima kasih!€Œ.«ÃéθJ
harus bekerja untuk 8.Zsh ,
126 ...96 byte-3 byte dari aritmatika untuk, -6 byte dari implisit
"$@"
(terima kasih roblogic), -5 byte dari menghapus yang tidak dibutuhkan{
}
, -1 byte dari bentuk pendekfor
, -1 byte dengan menggunakanrepeat
, -1 byte dengan menggabungkanfor s ($b)
dengan tubuhnya, -13 byte dengan mengubah loop berulang keluar untuk beberapa jank eval.Cobalah online! Cobalah online!Cobalah online!Kami membaca semua substring yang mungkin ke dalam array
a
, dan kemudian mengaturb
ke persimpangan arraya
danb
. Konstruk${b-$a}
hanya akan menggantikan$a
pada iterasi pertama: Tidak seperti ekspansi saudara kandungnya${b:-$a}
, itu tidak akan menggantikan ketikab
ditetapkan tetapi kosong.sumber
a+=( $l[1+i/$#l,1+i%$#l] )
for
loop bersarangfor l in "$@"
hanyafor l;
- ini adalah trik bashb=(${${b-$a}:*a})}
man zshexpn
danman zshparam
terutama. Saya selalu membuatnya terbuka saat menulis jawaban.Haskell , 80 byte
Cobalah online!
Dapatkan semua sufiks (
tails
) dari kata pertamax
dalam daftar dan ambil semua awalan (inits
) dari sufiks tersebut untuk mendapatkan semua substrings
darix
. Simpanlah masings
- masingisInfixOf
all
string dalam daftar yang tersisar
. Mengurutkan mereka substring dengan panjang (menggunakan satu(0<$)
trik ) dan kembali yang terakhir.sumber
Retina 0.8.2 , 48 byte
Cobalah online! Penjelasan:
Untuk setiap akhiran string pertama, temukan awalan terpanjang yang juga merupakan substring dari semua string lainnya. Daftar semua awalan sufiks tersebut (yaitu substring). Jika tidak ada substring yang cocok, kami hanya berakhir dengan string kosong, yang memang kami inginkan.
Sortir substring dalam urutan panjang terbalik.
Simpan hanya yang pertama, yaitu substring terpanjang.
sumber
n
adalah sejumlah string argumen. Maka(?=(.*\n.*\1)*.*$)
seharusnya begitu(?=(.*\n.*\1){n-1}.*$)
, bukan? Uji kasus:["very", "different", "much"] -> [""]
{n}
Anda bisa menghapus pola awal dan akhir dan tetap(.+)(?=(.*\n.*\1){n}
jika Retina memungkinkan untuk menulisn
lebih pendek dari(?<=^.*).*$
Permintaan TSQL, 154 byte
Cobalah online
Buat case sensitif dengan mendeklarasikan kolom 'a' dengan collation yang berisi CS (case sensitif).
Memisahkan semua string dari 2540 posisi awal (banyak identik) tetapi nilai berguna berkisar antara 1 dan 2070 dan berakhir 0 hingga 22 karakter setelah posisi awal, posisi akhir bisa lebih lama dengan mengubah jenis ke 'P' daripada 'L', tetapi akan melumpuhkan kinerja.
String-string berbeda ini dalam setiap rownumber dihitung. Hitungan tertinggi akan selalu sama dengan jumlah baris dalam variabel tabel '@'. Membalik urutan pada jumlah yang sama akan membuat substring dengan sebagian besar pertandingan di atas hasil diikuti oleh panjang substring terbalik akan meninggalkan pertandingan terpanjang dengan sebagian besar pertandingan di atas. Kueri hanya memilih 1 baris teratas.
Untuk mendapatkan semua jawaban, ubah bagian pertama kueri menjadi
sumber
C # (Visual C # Interactive Compiler),
320257 byteCobalah online!
Props untuk @Expired Data dan @dana
sumber
Perl 6 ,
6260 byteCobalah online!
Saya sedikit kesal Perl 6 tidak bisa melakukan operasi pada daftar daftar, itulah sebabnya ada tambahan
.comb
dan>>
di sana.Hal menjengkelkan lainnya adalahSeperti yang ditunjukkan dalam komentar,max
tidak bisa berfungsi untuk membandingkan item, artinya saya harus menggunakannyasort
.max
dapat mengambil argumen, namun berakhir lebih lama karena saya harus mempertimbangkanmax
mengembalikan infinity negatif ketika ada substring umum ( Coba online! ).sumber
max
dapat mengambil fungsi seperti itu (arity 1), baik dengan posisi ketika dipanggil dalam mode OO, atau:by
argumen bernama dalam mode prosedural.Japt v2.0a0
-hF
, 8 byteTerima kasih kepada Shaggy karena telah menghemat 3 byte
Cobalah
sumber
-F
default ke string kosong.Japt
-h
, 8 byte(Saya bisa menghilangkan 3 byte terakhir dan menggunakan
-Fh
flag, tapi saya bukan penggemar menggunakan-F
)Cobalah atau jalankan semua test case
sumber
Python 3 , 137 byte
Cobalah online!
sumber
Python 2 , 103 byte
Cobalah online!
Ini adalah lambda anonim yang mengubah setiap elemen menjadi himpunan semua substring, lalu
reduce
s dengan mengatur persimpangan (set.__and__
) dan kemudian mengembalikanmax
elemen denganlen
gth.sumber
set.intersection
.C # (Visual C # Interactive Compiler) ,
147145 byteCobalah online!
sumber
Perl 5 (
-aln0777F/\n/
-M5.01
-MList::util=max
), 99 bytemungkin golf lebih pasti
TIO
sumber
JavaScript (ES6),
9892 byteCobalah online!
sumber
Arang , 30 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Algoritma ini lebih efisien dan juga lebih pendek daripada menghasilkan semua substring. Penjelasan:
Pop string terakhir dari daftar input ke dalam variabel.
Batalkan indeks mulai substring.
Simpulkan semua kemungkinan indeks akhir substring. (Sebenarnya ini loop dari 0 tidak termasuk panjang, sehingga nilainya disesuaikan nanti.)
Dapatkan substring saat ini.
Periksa apakah substring ini terkandung dalam semua string input lainnya.
Jika kemudian mencetak setiap substring output sebelumnya.
Kalau tidak, coba tambahkan indeks mulai substring.
sumber
Bash ,
295.. 175 byteTidak cantik tapi setidaknya berhasil. Cobalah secara Online
-37 dengan pembersihan umum ; -52 dengan menjiplak jawaban zsh ; -26 dengan mengganti array dengan loop ; -2 Berkat GammaFunction ; -3 dihapus
i=0
darifor
loopInilah skrip asli yang tidak diubah dengan komentar
sumber
((k==$#))&&
dengan((k-$#))||
. Ini juga memungkinkan Anda menggunakank=
alih-alih mengaturnya ke 0.Merah ,
266174 byteCobalah online!
Mengubah rekursi menjadi iterasi dan menyingkirkan penyortiran.
sumber
Perl 5 , 87 byte
Cobalah online!
sumber
JavaScript (Node.js) , 106 byte
Cobalah online!
sumber
Gaia , 15 byte
Cobalah online!
sumber
PowerShell ,
16516387 byte-76 bytes terima kasih kepada Nail untuk regexp yang mengagumkan .
Cobalah online!
Kurang bermain golf:
sumber
JavaScript (Node.js) , 90 byte
Cobalah online! Kasus uji dicuri tanpa malu-malu dari @Arnauld. Port of my Charcoal menjawab.
sumber
Java (JDK) , 158 byte
Cobalah online!
Kredit
sumber
Perl 5 , 86 byte
Cobalah online!
sumber
Pyth , 16 byte
Cobalah online!
sumber