Ducttape Ducttape


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 і більше. Чи можна розмістити підрядок всередині іншої підрядки? (Чи повинні підрядки бути суцільними?)
Синій

1
@sysreq Я вирішив дозволити регулярні вирази!
Стефнотч

5
Проста відповідь: Використовуйте
Unary

Відповіді:


9

Пітон 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
@Stenfoch Вам не потрібно; попередня відповідь містить ту саму фразу
pppery

2
Одне, що я дізнався про проблеми, що кодують стрічки : Це складно слідкувати за тим, де ви отримали весь свій код.
pppery

Ого, оцінка цієї посади дуже швидко зростає ...
pppery
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.