สตริงของฉันเข้ากันได้อย่างไร


12

บทนำ

พิจารณาสองสายและBของระยะเวลาเดียวกันLและจำนวนเต็มK ≥ 0 สำหรับวัตถุประสงค์ของการท้าทายนี้เราบอกว่าสตริงที่มีKใช้ได้กับระบบปฏิบัติการ, ถ้ามีสตริงCความยาวKดังกล่าวว่าเป็นสตริงย่อยที่ต่อเนื่องกันของการ concatenation BCB โปรดทราบว่าAเป็นสตริงย่อยของBABดังนั้นAและBจะเข้ากันได้กับL-Lเสมอ(แต่อาจเป็นK-ที่เข้ากันได้สำหรับK <Lอื่น ๆ)

อินพุต

อินพุตของคุณเป็นสองสายที่มีความยาวบวกเท่ากันประกอบด้วยตัวอักษร ASCII ตัวพิมพ์ใหญ่และเล็ก

เอาท์พุต

ผลลัพธ์ของคุณจะเป็นจำนวนเต็มที่ไม่เป็นลบต่ำสุดKเช่นที่อินพุตเป็นK-ที่เข้ากันได้

ตัวอย่าง

พิจารณาอินพุต

A = HHHHHH
B = HHttHH

พวกเขาจะไม่ 0 ได้เพราะไม่ได้เป็นย่อยของ พวกเขายังไม่ได้ 1 ได้เพราะไม่ได้เป็นย่อยของเรื่องที่จดหมายวางอยู่บน อย่างไรก็ตามเป็นหน่อยย่อยของที่Cเป็นสตริงตัวอักษรสองตัว ดังนั้นปัจจัยการผลิตที่มี 2 ได้และการส่งออกที่ถูกต้องคือHHttHHHHttHHHHttHH#HHttHH# HHttHHHHHHttHHHH2

กฎและการให้คะแนน

คุณสามารถเขียนโปรแกรมเต็มรูปแบบหรือฟังก์ชั่น จำนวนไบต์ต่ำสุดที่ชนะและช่องโหว่มาตรฐานไม่ได้รับอนุญาต

กรณีทดสอบ

เงื่อนไขความเข้ากันได้เป็นแบบสมมาตรดังนั้นการสลับอินพุตทั้งสองไม่ควรเปลี่ยนเอาต์พุต

E G -> 1
E E -> 0
aB Bc -> 1
YY tY -> 1
abcd bcda -> 0
abcXd bxcda -> 4
Hello Hello -> 0
Hello olHel -> 1
aBaXYa aXYaBa -> 1
aXYaBa aBaXYa -> 1
HHHHHH HHttHH -> 2
abcdab cdabcd -> 2
XRRXXXXR XRXXRXXR -> 4
evveeetev tetevevev -> 7
vzzvzJvJJz vJJvzJJvJz -> 10
JJfcfJJcfJfb JcfJfbbJJJfJ -> 5
GhhaaHHbbhGGH HHaaHHbbGGGhh -> 9
OyDGqyDGDOGOGyG yDGqOGqDyyyyOyD -> 12
ffKKBBpGfGKpfGpbKb fGpbKbpBBBffbbbffK -> 9
UZuPPZuPdVdtuDdDiuddUPtUidtVVV dtUPtUidtVVVtDZbZZPuiUZuPPZuPd -> 21

ลีดเดอร์บอร์ด

นี่คือตัวอย่างข้อมูลเพื่อสร้างกระดานแต้มนำและรายชื่อผู้ชนะตามภาษา เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นให้เริ่มด้วยส่วนหัวของแบบฟอร์ม

## Language, N bytes

คุณสามารถเก็บคะแนนเก่าในส่วนหัวโดยใช้แท็กขีด: <s>57</s>จะปรากฏเป็น57

คำตอบ:


8

Pyth, 16

lhf}QjT,vzvz+k.:

ค้นหาสตริงย่อยสั้นที่สุดของ A ที่เมื่อแทรกระหว่างสองสำเนาผลลัพธ์ B ในสตริงที่มี A

นี่อาจสั้นลงสองไบต์ถ้าบรรทัดที่สองไม่มีเครื่องหมายคำพูด แต่รู้สึกแปลก ๆ ใช่ไหม

ชุดทดสอบ


4

Python 3, 155 168 157 bytes

Aรวมความยาวของ เปรียบเทียบจุดเริ่มต้นของAถึงจุดสิ้นสุดBและลบจากทั้งหมด เปรียบเทียบจุดเริ่มต้นของBถึงจุดสิ้นสุดAและลบจากทั้งหมด ส่งคืนค่าสัมบูรณ์ของผลรวมยกเว้นผลรวมเท่ากับความยาวซึ่งในกรณีนั้นกลับเป็น 0

def f(A,B):
    T=L=len(A)
    C=D=1
    for i in range(L,0,-1):
        if A[:i]==B[-i:]and C:
            T,C=T-i,0
        if A[-i:]==B[:i]and D:
            T,D=T-i,0
    return (0,abs(T))[T!=-L]

แก้ไข:จัดการf("abcdab","cdabcd")==2กรณีและปัญหา


3
น่าเสียดายที่นี่ใช้งานไม่ได้f("abcdab", "cdabcd")ซึ่งควรเป็น 2
Neil

@ นีลจับดี ฉันจะเพิ่มเรื่องนั้นลงในกรณีทดสอบ
Zgarb


@ mEQ5aNLrK3lqs3kfSa5HbvsTWe0nIu ฉันดูรูปภาพและคิดว่า 'นี่เป็นความคิดที่ดีในการใช้ดีบัก emojis แต่ฉันไม่เห็นบั๊ก ... ' ฉันคิดว่าโปรแกรมเสริมจะสร้างความเสียหายบนเว็บไซต์นี้
ไม่เป็นเชิงเส้น

3

เรติน่า 49 ไบต์

.*?(?<=^(?=(.*)(?<4-3>.)*(.*) \2.*\1$)(.)*).+
$#4

ลองออนไลน์! (แก้ไขเล็กน้อยเพื่อรันการทดสอบทั้งหมดในครั้งเดียว)

เคล็ดลับคือเราต้องย้อนกลับไปในส่วนAที่เราไม่พบBและจนถึงตอนนี้ฉันยังไม่พบวิธีที่จะทำสิ่งนี้โดยไม่ต้องมีการตรวจจับและสร้างสมดุลที่น่ารำคาญ


3

Jolf, 40 ไบต์

Wά)Ζ0W<ζli)? h++i]Iζ+ζniIoά0nΖhζ}onhn}wn

ลองมัน!

ฉันค่อนข้างใหม่กับ Jolf ได้เรียนรู้มากมายในขณะที่หาสิ่งนี้ ดูเหมือนว่าจะงุ่มง่ามอยู่บ้าง แม้จะล้มลงไป 2 ไบต์ในขณะที่เขียนคำอธิบายนี้

คำอธิบาย:

  Wά)                                      While ά (initialized to 16)
     Ζ0                                    Set ζ to 0
       W<ζli)                              While ζ < length(A)
             ? h++i]Iζ+ζniIoά0n            Set ά to 0 if (A + a substring from B of length n + A) contains B
                               Ζhζ         Increment ζ
                                  }onhn    Increment n (initialize to 0
                                       }wn Decrement n and print

ฉันไม่ได้พยายามอย่างจริงจังและนี่อาจเป็นทางออกที่ดีที่สุด แต่ฉันขอแนะนำให้ลองแมปตามช่วง ( s0zliจะให้อาเรย์ [0 ... ความยาว i] ถ้าคุณต้องการลองใช้วิธีนี้)
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴอืมฉันจะให้ดู ... นอกจากนี้ยังมีคำสั่ง if ที่ฉัน jmissed ขณะที่ดูเอกสาร / แหล่งที่มาหรือเป็นตัวเลือกเท่านั้น? ด้วยอาร์กิวเมนต์ที่สามที่ไม่เกี่ยวข้อง?
คลื่นที่

?ใกล้เคียงกับถ้ามีใน Jolf มันเหมือนไตรภาคีถ้า ?ABCs returns B` ถ้าเป็นจริงและCอย่างอื่น
Conor O'Brien


2

JavaScript (ES6), 110 ไบต์

(a,b)=>{for(i=0;;i++)for(j=i;j<=a.length;j++)if(b.startsWith(a.slice(j))&&b.endsWith(a.slice(0,j-i)))return i}

ทำงานโดยการหั่นชิ้นที่เคยอีกต่อไปจากตรงกลางของจนกว่าพวกเขาจะตรงปลายทั้งสองข้างของa ห่วงไม่ได้ไม่มีที่สิ้นสุดในขณะที่มันจะหยุดก่อนหรือbi == a.length

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.