Diberikan (pada STDIN, sebagai argumen baris perintah, atau sebagai argumen fungsi) dua string non-kosong yang berbeda, temukan dan kembalikan substring terpendek dari string pertama yang bukan merupakan substring dari string kedua. Jika tidak ada substring seperti itu, Anda dapat mengembalikan string kosong, mengembalikan string apa pun yang bukan substring dari string asli, atau melempar pengecualian. Jika Anda kembali dari suatu fungsi, Anda juga dapat mengembalikan nol (atau tidak ditentukan, Tidak ada, dll.) Dalam kasus ini. Jika beberapa substring terikat untuk yang terpendek, Anda dapat mengembalikan salah satunya.
String dapat terdiri dari karakter ascii yang dapat dicetak.
Input yang diberikan pada STDIN akan diberikan dengan satu string pada setiap baris. Atas permintaan Anda, satu baris kosong dapat ditambahkan di akhir input.
Ini adalah kode golf, sehingga program yang paling singkat yang valid menang.
BEBERAPA KASUS UJI
MEMASUKKAN:
STRING ONE
STRING TWO
KELUARAN:
E
MEMASUKKAN:
A&&C
A&$C
OUTPUT YANG LUAR BIASA:
&&
&C
MEMASUKKAN:
(Dua string 80-huruf yang dihasilkan secara acak)
QIJYXPYWIWESWBRFWUHEERVQFJROYIXNKPKVDDFFZBUNBRZVUEYKLURBJCZJYMINCZNQEYKRADRYSWMH
HAXUDFLYFSLABUCXUWNHPSGQUXMQUIQYRWVIXGNKJGYUTWMLLPRIZDRLFXWKXOBOOEFESKNCUIFHNLFE
SEMUA OUTPUT YANG VALID:
AD
BJ
BR
CZ
DD
EE
ER
EY
EY
FF
FJ
FW
FZ
HE
IJ
IN
IW
JC
JR
JY
KL
KP
KR
KV
LU
MH
MI
NB
NQ
OY
PK
PY
QE
QF
QI
RA
RB
RF
RO
RV
RY
RZ
SW
UE
UH
UN
UR
VD
VQ
VU
WB
WE
WI
WU
XN
XP
YI
YK
YK
YM
YS
YW
YX
ZB
ZJ
ZN
ZV
Jawaban:
Brachylog , 23 byte
Bekerja pada transpiler Java lama. Mengharapkan dua string dalam daftar sebagai input, menyatukan output dengan substring. Jika tidak ada substring yang ditemukan, mengembalikan false.
Sayangnya saya belum memberi kode subset built-in di Prolog transpiler baru.
Penjelasan
sumber
Python,
11911591Kasus uji:
Berusaha membuatnya lebih pendek, tapi ini naluri otakku. Belum terlalu pegolf.
Terima kasih kepada @ user81655 dan @NlinlinearFruit untuk byte ekstra.
Edit :
Dang. Mencoba kode ini:
Kupikir itu beberapa byte lebih pendek. Ternyata itu 1 byte lebih lama dari apa yang saya miliki sebelum edit.
sumber
(r=range)(1,len(a)+1)
kemudian menggunakanr
?range
untukr
di baris di atas, itu benar-benar menambah byte. Tapi ide bagus. Mungkin ada cara yang lebih pendek untuk beralih melalui substring.range(1,len(a))
danrange(len(a)-1)
haruskah bekerja bukan? Saya juga berpikir menggunakan karakter tab untuk dua spasi indent akan menghemat satu byte.range(1,len(a))
, gips uji ke-4 gagal karena tidak akan mencoba string penuh; itu hanya akan pergi ke panjang string - 1. Dan denganrange(len(a)-1)
, test case 1 gagal mengembalikan'cd'
bukan hanya'd'
. Mungkin ada sesuatu di sana.range(1,len(a)+1)
danrange(len(a))
.Python,
8786 byteJika ada, ini akan mengembalikan substring unik terpendek ke kiri.
Jika tidak ada substring unik, sebuah IndexError dinaikkan.
Uji di Ideone .
sumber
enumerate
memulaij
dii+1
.j
pertama, lalui
.'ab'
untuk input'abc','aaa'
.Python, 82 byte
Penggunaan:
f('A&&C', 'A&$C')
-> pengembalian'&&'
Meningkatkan ValueError jika tidak ada substring yang cocok.
Penjelasan:
g=lambda u:{u}|g(u[1:])|g(u[:-1])if u else{''}
secara rekursif membuat satu set substring dariu
f=lambda s,t:min(g(s)-g(t),key=len)
mengambil substring terpendek dari perbedaan setsumber
JavaScript (ES6), 79 byte
Jika pengembalian
false
dapat diterima, simpan 2 byte dengan menggunakan&&s
alih-alih?s:''
.sumber
Pyth, 11 byte
Cobalah online!
sumber
JavaScript (Firefox), 80 byte
Tes hanya berfungsi di Firefox. Kembali
undefined
jika tidak ada substring.sumber
b.includes
saja?includes
.SyntaxError: unexpected token 'for'
Retina , 37 byte
Output kosong jika tidak ditemukan substring yang valid di
A
.Cobalah online! (Sedikit dimodifikasi untuk menjalankan beberapa test case sekaligus. Format input sebenarnya dipisahkan dengan linefeed, tetapi test suites lebih mudah ditulis dengan satu case test per baris. Kerangka uji mengubah ruang menjadi linefeed sebelum kode aktual dimulai.)
Penjelasan
Untuk setiap posisi awal yang memungkinkan di
A
, cocokkan substring terpendek yang tidak muncul diB
. The&
adalah untuk tumpang tindih pertandingan, seperti yang kita benar-benar mencoba setiap posisi awal, bahkan jika pertandingan lebih panjang dari satu karakter. The\G
memastikan bahwa kami tidak melewati posisi apa pun - khususnya, dengan cara ini kami harus berhenti di umpan baris, sehingga kami tidak mendapatkan kecocokan tambahan dari , sehingga semua substring yang memulai lebih jauh langsung dari posisi saat ini, jadi membuang itu bukan masalah (dan sebenarnya meningkatkan kinerja).B
dirinya sendiri. Alasan ini tidak mengacaukan segalanya sebenarnya cukup halus: karena jika ada posisi awal diA
mana kita tidak dapat menemukan substring yang valid, maka itu juga merupakan kegagalan yang akan menyebabkan\G
berhenti memeriksa setiap posisi lebih lanjut. Namun, jika (dari posisi awal saat ini) semua substring muncul diB
Karena
M!
konfigurasi, semua pertandingan ini akan dikembalikan dari panggung, bergabung dengan umpan garis.Ini memilah garis dari hasil sebelumnya dengan panjang. Ini dilakukan dengan mencocokkan baris dengan
.+
. Kemudian$
mengaktifkan bentuk "sort-by", sehingga pertandingan diganti dengan$.&
untuk menentukan urutan sortir. Itu$.&
sendiri menggantikan pertandingan dengan panjangnya. Akhirnya,#
opsi memberi tahu Retina untuk mengurutkan secara numerik (jika tidak, itu akan memperlakukan angka yang dihasilkan sebagai string dan mengurutkannya secara leksikografis).Akhirnya, kami hanya menyimpan baris pertama, dengan menggunakan tahap grep dengan regex kosong (yang selalu cocok) dan batas
1
.sumber
Perl,
8785Ini adalah fungsi anonim yang mengembalikan pertama (berdasarkan posisi) dari substring terpendek
$_[0]
yang tidak terjadi di$_[1]
, atauundef
jika tidak ada substring seperti itu ada.Program pengujian dengan string yang diambil dari jawaban @ iAmMortos, diuji dengan Perl 5.22.1:
sumber
Haskell, 72 byte
Contoh penggunaan:
"abcd" # "dabc"
->"cd"
.Implementasi langsung: bangun semua substring
a
dan pertahankan yang tidak munculb
.argmin
mengembalikan elemen daftar yang meminimalkan fungsi mengingat argumen ke-2, di sini:length
.sumber
argmin
! Tampaknya sangat bermanfaat.Pyth -
96 byteCobalah online di sini .
sumber
C #, 152 byte
sumber
Ruby, 70 byte
Mengumpulkan semua substring dengan panjang tertentu dari string pertama, dan jika ada yang tidak ada di string kedua, kembalikan.
sumber
Burlesque - 26 byte
Saat ini cara terpendek yang bisa saya lakukan adalah:
sumber
Japt , 14 byte
Cobalah online!
Kembali
undefined
jika tidak ada substring yang valid . Ini berbeda dari mengembalikan string "tidak terdefinisi" , meskipun perbedaannya hanya terlihat karena flag -Q.Penjelasan:
sumber
Japt
-h
, 11 byteCobalah
sumber