Ducttape ống dẫn


11

Sếp của bạn đã phát hiện ra rằng khá nhiều nhân viên của anh ấy (bao gồm cả bạn) thích ăn cắp mã từ người khác. Anh ta ra lệnh cho bạn viết cho anh ta một chương trình mà anh ta có thể sử dụng để tìm những người ăn cắp mã từ người khác.

Bài tập:

Viết chương trình / hàm phát hiện nếu ai đó sao chép (một phần) mã của anh ta từ một nơi khác.

Chương trình sẽ nhận được tất cả các chương trình hiện có và chương trình cần kiểm tra từ hai đầu vào riêng biệt . Chỉnh sửa: Vì không có câu trả lời cho đến nay, bạn có thể sử dụng các biểu thức thông thường!

Đầu ra

  • Sau đó, chương trình sẽ xuất ra tất cả các đoạn mã bị đánh cắp, được phân tách bằng dấu cách hoặc dòng mới. (Nó có thể có một khoảng trắng hoặc một dòng mới ở cuối.)
  • Một đoạn mã được coi là bị đánh cắp / sao chép nếu nó bao gồm 10 byte liên tiếp trở lên . (Xin lỗi, người hâm mộ Java!)
  • Bạn phải xuất ra càng nhiều càng tốt, nhưng nếu có những cái chồng chéo, bạn có thể bỏ qua một trong số chúng hoặc xuất cả hai.

Xoắn:

Như đã đề cập trước đó, bạn cũng thích mã hóa băng keo. Điều đó có nghĩa là, mọi thứ trong mã của bạn sẽ được sao chép từ một trang web trao đổi ngăn xếp! Bạn có thể sao chép bất cứ thứ gì bạn muốn (không giới hạn mã trong các khối mã) và nhiều như bạn muốn. (Nhưng ít nhất 10 byte) (Cùng quy tắc như trên về những gì được coi là bị đánh cắp / sao chép.) (Xin lưu ý rằng mọi câu trả lời được đăng sau câu hỏi này có thể không được sử dụng.) Vui lòng cung cấp liên kết đến nơi bạn nhận được mã từ.

Ví dụ:

Đầu vào:
x = document.getElementById("ninja'd"); (Đầu vào đầu tiên)
y = document.getElementById("id");(Đầu vào thứ hai)

Đầu ra:

 = document.getElementById("

Đầu vào:
foo (Đầu vào đầu tiên)
foo+bar(Đầu vào thứ hai)

Đầu ra:
Không có gì.

Đầu vào:
public static void main(String[] args) (Đầu vào đầu tiên)
public static void main(String[] args)(Đầu vào thứ hai)

Đầu ra:

 main(String[] args)

Đầu vào:
for(var i=0; i<x.length; i++){} (Đầu vào đầu tiên)
for(var i=0; i<oops.length; i++){break;}(Đầu vào thứ hai)

Đầu ra:

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

hoặc là

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

1
Đó là các quy tắc thiếu đối với chuỗi nào có thể được sao chép và cách thức (đối với mã).
frageum

4
Các chuỗi được sao chép phải đến từ các khối mã, hoặc bất kỳ phần nào của câu trả lời SE? Nếu nó đến từ một khối mã thì nó có cần sử dụng toàn bộ khối không, hay có thể sử dụng một chuỗi con? Các chuỗi có thể đến từ văn bản được định dạng hoặc nguồn Markdown không? Các khối mã mới hơn câu hỏi này có thể được sử dụng? Có thể sử dụng bản sửa đổi cũ của một câu hỏi?
frageum

3
Bạn nói các chuỗi con phải dài từ 10 trở lên. Tôi có thể đặt một chuỗi con bên trong một chuỗi con khác không? (Các chuỗi con có phải liên tục không?)
Blue

1
@sysreq Tôi quyết định cho phép biểu thức chính quy!
Stefnotch

5
Câu trả lời dễ dàng: Sử dụng Unary
lirtosiast

Câu trả lời:


9

Python 2, 224 byte

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]

Sao chép từ câu trả lời này :

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

get_matching_blocks()được sao chép từ câu trả lời này

a=raw_input()
b=raw_input()

được sao chép từ câu hỏi này

for start, _, size inđược sao chép từ câu trả lời này và lần xuất hiện thứ hai similar(a, b)được sao chép từ cùng một nơi với lần đầu tiên.

if(size > 9)được sao chép từ câu hỏi này .

:
    print

được sao chép từ câu hỏi này

a[start:được sao chép từ câu trả lời này .

và cuối cùng, start+size]được sao chép từ nhiệm vụ này

Cuối cùng đã trả lời sau một năm rưỡi ...


+1 Mặc dù, stackoverflow.com/questions/37386311/ đã được đăng sau khi thử thách này được đăng. Tôi quyết định loại bỏ hạn chế đó, vì vậy câu trả lời của bạn là tốt. :)
Stefnotch

1
@Stenfoch Bạn không cần; một câu trả lời trước đó có cùng một cụm từ
pppery

2
Một điều tôi học được về các thách thức mã hóa băng keo : Thật khó để theo dõi nơi bạn có tất cả mã của mình.
pppery

Ồ, điểm số của bài đăng này đã tăng lên rất nhanh ...
pppery
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.