ประกบท่อ


11

เจ้านายของคุณพบว่าพนักงานของเขา (รวมถึงคุณ) ชอบขโมยรหัสจากผู้อื่น เขาสั่งให้คุณเขียนโปรแกรมที่เขาสามารถใช้เพื่อค้นหาคนที่ขโมยรหัสจากคนอื่น

งาน:

เขียนโปรแกรม / ฟังก์ชั่นที่ตรวจพบว่ามีคนคัดลอก (บางส่วน) รหัสของเขาจากที่อื่น

โปรแกรมจะได้รับทุกโปรแกรมที่มีอยู่และโปรแกรมที่ว่ามันควรทดสอบจากสองปัจจัยการผลิตที่แยกต่างหาก แก้ไข:เนื่องจากยังไม่มีคำตอบคุณอาจใช้การแสดงออกปกติ!

เอาท์พุต

  • จากนั้นโปรแกรมควรแสดงโค้ดที่ถูกขโมยทั้งหมดโดยคั่นด้วยช่องว่างหรือขึ้นบรรทัดใหม่ (อาจมีช่องว่างหรือขึ้นบรรทัดใหม่ในตอนท้าย)
  • ชิ้นส่วนของรหัสจะถูกพิจารณาว่าถูกขโมย / คัดลอกถ้ามันประกอบด้วย 10 หรือมากกว่าไบต์ต่อเนื่องกัน (ขออภัยแฟน ๆ Java!)
  • คุณต้องเอาท์พุทให้มากที่สุดเท่าที่จะทำได้ แต่หากมีการซ้อนทับกันคุณอาจเพิกเฉยต่อสิ่งใดสิ่งหนึ่งหรือเอาท์พุททั้งคู่

บิด:

ดังที่ได้กล่าวไว้ก่อนหน้านี้คุณยังรักการเข้ารหัสเทปพันสายไฟ ซึ่งหมายความว่าทุกอย่างในรหัสของคุณจะถูกคัดลอกวางจากไซต์แลกเปลี่ยนสแต็ก! คุณสามารถคัดลอกสิ่งที่คุณต้องการ (ไม่ จำกัด รหัสในบล็อกรหัส) และมากเท่าที่คุณต้องการ (แต่อย่างน้อย 10 ไบต์) (เหมือนกฎข้างต้นเกี่ยวกับสิ่งที่ถูกพิจารณาว่าถูกขโมย / คัดลอก) (โปรดทราบว่าคำตอบใด ๆ ที่โพสต์หลังจากคำถามนี้อาจไม่ถูกใช้) โปรดระบุลิงก์ไปยังที่ที่คุณได้รับ รหัสจาก

ตัวอย่าง:

อินพุต:
x = document.getElementById("ninja'd"); (อินพุตแรก)
y = document.getElementById("id");(อินพุตที่สอง)

เอาท์พุท:

 = document.getElementById("

อินพุต:
foo (อินพุตแรก)
foo+bar(อินพุตที่สอง)

เอาท์พุท:
ไม่มีอะไร

อินพุต:
public static void main(String[] args) (อินพุตแรก)
public static void main(String[] args)(อินพุตที่สอง)

เอาท์พุท:

 main(String[] args)

อินพุต:
for(var i=0; i<x.length; i++){} (อินพุตแรก)
for(var i=0; i<oops.length; i++){break;}(อินพุตที่สอง)

เอาท์พุท:

for(var i=0; i<
.length; i++){

หรือ

for(var i=0; i< .length; i++){

1
มันไม่มีกฎสำหรับสตริงที่สามารถคัดลอกและวิธี (สำหรับรหัส)
feersum

4
สตริงที่คัดลอกมาจากบล็อคโค้ดหรือส่วนใดส่วนหนึ่งของคำตอบ SE หรือไม่? หากมันมาจากบล็อกรหัสจำเป็นต้องใช้ทั้งบล็อกหรือสามารถใช้สตริงย่อยได้หรือไม่ สตริงสามารถมาจากข้อความที่จัดรูปแบบหรือแหล่งที่มา Markdown ได้หรือไม่? โค้ดบล็อกสามารถใหม่กว่าคำถามนี้ได้หรือไม่? สามารถใช้การแก้ไขคำถามเก่าได้ไหม
feersum

3
คุณบอกว่าวัสดุพิมพ์ต้องมีความยาว 10 หรือมากกว่า ฉันสามารถวางซับสตริงในซับสตริงอื่นได้หรือไม่ (Do สตริงจะต้องมีอย่างต่อเนื่อง?)
สีฟ้า

1
@sysreq ฉันตัดสินใจอนุญาตให้ใช้นิพจน์ทั่วไป!
Stefnotch

5
คำตอบง่าย ๆ : ใช้ Unary
lirtosiast

คำตอบ:


9

Python 2, 224 ไบต์

from difflib import SequenceMatcher
def similar(a, b):
    return SequenceMatcher(None, a, b).get_matching_blocks()
a=raw_input()
b=raw_input()
for start, _, size in similar(a, b):
 if(size > 9):
  print a[start:start+size]

คัดลอกมาจากคำตอบนี้ :

from difflib import SequenceMatcher
def similar(a, b):
    return SequenceMatcher(None, a, b).

get_matching_blocks()ถูกคัดลอกจากคำตอบนี้

a=raw_input()
b=raw_input()

ถูกคัดลอกมาจากคำถามนี้

for start, _, size inจะถูกคัดลอกมาจากคำตอบนี้และการsimilar(a, b)คัดลอกที่เกิดขึ้นครั้งที่สองของจากสถานที่เดียวกันเป็นครั้งแรก

if(size > 9)ถูกคัดลอกมาจากคำถามนี้

:
    print

ถูกคัดลอกมาจากคำถามนี้

a[start:ถูกคัดลอกจากคำตอบนี้

และสุดท้ายstart+size]ถูกคัดลอกมาจากเควสนี้

ในที่สุดก็ตอบหลังจากหนึ่งปีครึ่ง ...


+1 แม้ว่าstackoverflow.com/questions/37386311/…ถูกโพสต์หลังจากมีการโพสต์ความท้าทายนี้ ฉันตัดสินใจที่จะลบข้อ จำกัด ดังกล่าวดังนั้นคำตอบของคุณก็ใช้ได้ :)
Stefnotch

1
@tenfoch คุณไม่จำเป็นต้อง; คำตอบก่อนหน้านี้มีวลีเดียวกัน
pppery

2
สิ่งหนึ่งที่ฉันได้เรียนรู้เกี่ยวกับความท้าทายการเขียนโค้ดเทปพันท่อ : เป็นการยากที่จะติดตามว่าคุณได้รับรหัสทั้งหมดมาจากที่ใด
pppery

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