Ducttape Ducttape

11

Ваш начальник узнал, что довольно много его сотрудников (включая вас) любят красть код у других. Он приказал вам написать ему программу, которую он может использовать для поиска людей, которые крадут код у других.

Задача:

Напишите программу / функцию, которая обнаруживает, скопировал ли кто-то (часть) свой код откуда-то еще.

Программа получит все существующие программы и программу, которую она должна протестировать, с двух отдельных входов . Изменить: Поскольку пока нет ответов, вы можете использовать регулярные выражения!

Выход

  • Затем программа должна вывести все украденные фрагменты кода, разделенные пробелом или переводом строки. (В конце может быть пробел или перевод строки.)
  • Кусок кода считается украденным / скопированным, если он состоит из 10 или более последовательных байтов. (Извините, фанаты Java!)
  • Вы должны вывести как можно больше, но если есть перекрывающиеся, вы можете игнорировать один из них или вывести оба.

Twist:

Как упоминалось ранее, вы также любите кодирование клейкой ленты. Это означает, что все в вашем коде будет скопировано с сайта обмена стека! Вы можете копировать все, что хотите (не ограничиваясь кодом в блоках кода) и сколько хотите. (Но не менее 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++){
Stefnotch
источник
1
В нем отсутствуют правила, для которых можно скопировать строки и каким образом (для кода).
feersum
4
Должны ли скопированные строки происходить из блоков кода или каких-либо частей ответа SE? Если это происходит из блока кода, нужно ли использовать весь блок или можно использовать подстроку? Могут ли строки прийти из отформатированного текста или из источника Markdown? Можно ли использовать блоки кода новее, чем этот вопрос? Можно ли использовать старые редакции вопроса?
feersum
3
Вы говорите, что подстроки должны быть длиной 10 или больше. Могу ли я поместить подстроку в другую подстроку? (Должны ли подстроки быть непрерывными?)
Blue
1
@sysreq Я решил разрешить регулярные выражения!
Stefnotch
5
Легкий ответ: Используйте Унарный
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]скопировано из этого квеста

Наконец ответили через полтора года ...

pppery
источник
+1 Тем не менее, stackoverflow.com/questions/37386311/… был опубликован после того, как этот вызов был опубликован. Я решил снять это ограничение, поэтому ваш ответ в порядке. :)
Stefnotch
1
@ Стенфоч Вам не нужно; более ранний ответ содержит ту же фразу
pppery
2
Одна вещь, которую я узнал о проблемах кодирования с помощью клейкой ленты : сложно проследить, откуда у вас весь код.
pppery
Вау, оценка этого поста росла очень быстро ...
pppery