اگه دانشجوی مهندسی کامپیوتر یا علوم کامپیوتر هستید حتما با سایت کوئرا آشنایی دارید
معمولا استادا برای تصحیح تمارین برنامه نویسی از این سایت استفاده میکنن و این سایت سیستم تقلب یاب داره
یعنی اگه شما و دوستتون باهم کد بزنید و فقط کمی تفاوت بین کد شما باشه، تقلب میخورید و ازتون نمره کم میشه
کوئرا برای پیدا کردن شباهت بین دو کد از سیستم MOSS استفاده میکنه
تو این آموزش میخوایم یاد بگیریم چجوری این سیستمو دور بزنیم =)
- ماس به فاصله های الکی حساس نیست
پس هرچقد الکی برید خط بعد یا اسپیس بزنید ماس کاری باهاشون نداره
- جابجایی خط ها با هم کمکی به شما نمیکنه
اگه یه دو خط کد رو باهم جابجا کنید هیچ فرقی نداره
- کد های الکی تشخیص داده میشه
اگه بیاید وسط کدتون متغییر الکی تعریف کنید تا کدتون با نسخه اصلی فرق کنه ماس به اون متغییر تعریف شده ی الکی هم کار نداره
- اسم متغییر ها و تابع ها و کلاس ها اهمیت نداره
البته که اگه یه استاد بخواد کد شمارو بررسی بیشتر کنه اسم ها اهمیت زیادی دارن و نباید دقیقا شبیه باشن. ولی ماس به این هم اهمیتی نمیده.
- کامنت ها هیچ تاثیری ندارند
گرچه پاک کردن کامنت های کد اصلی برای لو رفتن توسط چشم انسان بسیار پر کاربرده، اما ماس اون هارو پاک شده در نظر میگیره...
میتونید برنامتون رو به تابع های متعدد تبدیل کنید یا اگر خودش تابع زیادی داره، تا جایی که میتونید تابع هارو وارد main کنید
به چهار کد زیر توجه کنید،
int a , b;
cin>>a>>b;
if(a < b)
cout<<a<<" < "<<b;
else
cout<<a<<" >= "<<b;
int a;
cin>>a;
int b;
cin>>b;
cout<< a << (a < b ? " < " : " >= " ) << b;
int a;
int b;
cin>>a>>b;
if(a >= b)
{
cout<<a;
cout<<<<" >= ";
cout<<b;
}
else
{
cout<<a;
cout<<" < ";
cout<<b;
}
int a , b;
cin>>a;
cin>>b;
if(a < b){
cout<<a<<" < "<<b;
return;
}
cout<<a<<" >= "<<b;
همانطور که میبینید 3 خط کد ساده رو به چندین روش مختلف زد!!!
در بیشتر زبان ها با جابجا کردن تابع ها به بالا یا پایین تابع main میتوانید سیستم moss را گول بزنید
به مثال زیر توجه کنید:
void hello(){
printf("hello");
}
int main(){
hello();
}
void hello();
int main(){
hello();
}
void hello(){
printf("hello");
}
یکی از سادهترین راهها برای تغییر کد و جلوگیری از تشخیص شباهت، استفاده از مدلهای زبانی پیشرفته مانند ChatGPT یا DeepSeek است.
Refactor this code while preserving its functionality. Make as many structural and stylistic changes as possible to reduce similarity detection.
همچنین میتوانید از هوش مصنوعی بخواهید تا کد را با متدهای متنوع و جدید بازنویسی کند:
Change this code as much as you can while keeping the logic intact. Use different function structures, loops, and logic transformations.
با استفاده از این روش، میتوان بدون نیاز به تغییر دستی، نسخههای متفاوتی از کد تولید کرد که شباهت آنها به نسخه اصلی به حداقل برسد.
خیلی راحت توابع و متغییر ها را به یک کلاس دیگر انتقال دهید و قسمت خوبی از کد و حتی ورودی خروجی های تابع رو میتونید عوض کنید و حتی با چشم هم از شباهت آنها جلوگیری کنید
این برنامه به طور عادی برای دانلود قرار نگرفته تا فقط دانشگاها و مراکز آموزشی ازش استفاده کنن
ولی شما با یه ایمیل ساده به دانشگاه استنفورد میتونید این اسکریپتو دریافت کنید و روی سیستم ترجیحا لینوکسی خودتون باهاش کار کنید
برای دانلود ابتدا یک ایمیل با متن زیر
registeruser
mail [ایمیل خودتون]
به ایمیل زیر بزنید
بعد از دریافت جواب و فایل اسکریپت، با استفاده از راهنمایی که بالای فایل نوشته شده، نصب رو تکمیل کنید
برای پیدا کردن تقلب بین دو کدی که به طور مثال با سی نوشته شدند از کامند زیر میتونید استفاده کنید
moss -l c code1.c code2.c
خیلی راحت میتونید یه کلاس الکی توی کوئرا بسازید، یک اکانت متفاوت با سازنده کلاس رو وارد کلاس کنید
با هر دو اکانت کدی رو داخل یک تمرین الکی اپلود کنید و روش تقلب یاب بزنید
کتابخانه هایی برای زبان های مختلف برنامه نویسی ساخته شده که کار شمارو راحت تر میکنن
مثل: