Tulis program atau fungsi yang, diberi dua string ASCII A
dan B
, akan menghasilkan string A'
dan di B'
mana substring umum dibalikkan di tempatnya. Proses untuk menemukan A'
adalah sebagai berikut:
A'
awalnya kosong.- Jika karakter pertama
A
adalah dalamB
, temukan awalan terpanjangA
yang merupakan substring dariB
. Hapus awalan ini dariA
dan tambahkan pembalikannya keA'
. - Jika tidak, hapus karakter pertama ini dari
A
dan tambahkan keA'
. - Ulangi langkah 2-3 hingga
A
kosong.
Menemukan B'
dilakukan dengan cara yang sama.
Contoh
Mari kita pertimbangkan senar A = "abc bab"
dan B = "abdabc"
. Sebab A'
, inilah yang terjadi:
A = "abc bab"
: Karakter pertama"a"
dalam B dan awalan terpanjang dari A ditemukan di B adalah"abc"
. Kami menghapus awalan ini dari A dan menambahkan pembalikannya"cba"
ke A '.A = " bab"
: Karakter pertama" "
tidak dalam B, jadi kami menghapus karakter ini dari A dan menambahkannya ke A '.A = "bab"
: Karakter pertama"b"
dalam B dan awalan terpanjang dari A ditemukan di B adalah"b"
. Kami menghapus awalan ini dari A dan menambahkan pembalikannya (yang masih"b"
) ke A '.A = "ab"
: Karakter pertama"a"
dalam B dan awalan terpanjang dari A ditemukan di B adalah"ab"
. Kami menghapus awalan ini dari A dan menambahkan pembalikannya"ba"
ke A '.A = ""
: A kosong, jadi kami berhenti.
Demikian kita dapatkan A' = "cba" + " " + "b" + "ba" = "cba bba"
. Untuk B ', prosesnya mirip:
B = "abdabc" -> "a" in A, remove prefix "ab"
B = "dabc" -> "d" not in A, remove "d"
B = "abc" -> "a" in A, remove prefix "abc"
Demikian kita dapatkan B' = "ba" + "d" + "cba" = "badcba"
.
Akhirnya, kami mengembalikan dua string, yaitu
(A', B') = ("cba bba", "badcba")
Uji kasus
"abc bab", "abdabc" -> "cba bba", "badcba"
"abcde", "abcd bcde" -> "dcbae", "dcba edcb"
"hello test", "test banana" -> "hello tset", "tset banana"
"birds flying high", "whistling high nerds" -> "bisdr flyhgih gni", "wihstlhgih gni nesdr"
Kode terpendek dalam byte menang.
"cba bba", "badcba"
menyertakan tanda kutip dan koma?Jawaban:
Pyth, 29 byte
Uji Harness.
Format input adalah:
Output adalah:
sumber
Haskell,
120111 byteTes berjalan:
sumber
SWI-Prolog, 312 byte
Contoh:
a("birds flying high","whistling high nerds",X,Y).
keluaranSebuah cara, cara solusi terlalu lama yang masuk terlalu menunjukkan bagaimana verbose Prolog adalah ketika berhadapan dengan string. Dimungkinkan untuk mempersingkat hal ini menggunakan array kode (
`birds flying high`
) alih-alih string ("birds flying high"
).sumber
Python 2.7,
169156152141 BytesFungsi
m
mengambil 2 string sebagai input. Ini memanggilb
fungsi dua kali yang melakukan pemrosesan aktual sesuai dengan spesifikasi.Demo di sini .
Mengujinya -
OUTPUT:
PS: Terima kasih kepada orlp untuk solusi yang digunakan
next()
sumber
m=lambda A,B:(b(A,B),b(B,A))
while len(A)>0
dengan adilwhile A
. Demikian pulaif len(p)>0
menjadiif p
.if len(p)
bisa jugaif p
. (Sudah dikatakan di atas, tetapi Anda melewatkannya.)len(p)>0
menjadilen(p)
. Terima kasih untuk itu :)while A:j=next((j for j in range(len(A),0,-1)if A[:j]in B),1);C+=A[:j][::-1];A=A[j:]
.