Если вы преподаватель программирования, то обязательно сталкивались с необходимостью проверки студенческих «опусов», сдаваемых на проверку. Преподавателю надо не только проверить код программы, правильность ее работы, оптимальность использованного алгоритма решения поставленной задачи, но и оценить, а не украден ли этот код где-то (ну или не украден, а просто найден в просторах интернета). И если выполнить проверку на уникальность обычного текста можно, используя онлайн-сервисы, то с проверкой кода все обстоит намного сложнее. Часто такие коды на сайтах приводятся в виде скринов (содержимое не индексируется) или располагаются в блоках, закрытых для индексирования или же поисковый бот просто пропускает такие коды.
Попробуйте найти онлайн-сервис для проверки программных кодов, воспользовавшись запросом, вынесенным в заголовок этой публикации. Будете удивлены, но ничего внятного найти не удастся. А если еще вспомнить, что языков программирования великое множество.... Проблема.
А ведь в случае с программным кодом в той же студенческой работе, например, в дипломной, ценность именно в написанном программном коде. И тут еще одна проблема - сегодня код приличной программы насчитывает многие тысячи строк. Это только в детских задачках по два десятка строк кода. Вопрос - как проверить уникальность программы, написанной студентом и позиционируемой им как его собственная разработка? А про обфускацию кода вы слышали?
Итак, вопрос для дискуссии: как вы проверяете уникальность уникальность программы, сдаваемой студентом на проверку?
#include <algorithm>
#include <cmath>
using namespace std;
int main(){
for (int p = 3; p < 1000; p++){
for (int a = 1; a < 1000; a++){
for (int b = 1; b < 1000; b++){
for (int c = 1; c < 1000; c++){
if (pow(a,p) + pow(b,p) == pow(c,p)){
std::cout << a << " " << b << " " << c << " " << p << '\n';
break;
}
}
}
}
}
#include <ctime>
#include <cstdlib>
#include <iostream>
#include <Windows.h>
Life::Life() {
for (int i = 0; i < a; i++)
for (int j = 0; j < b; j++)
space[i][j] = 0;
}
Life::~Life() {
}
int Life::checkRule(int i, int j)
{
int lifeCount = 0; //переменная куда записываеться кол-во живых планет
for (int k = i - 1; k < i + 2; k++)
for (int n = j - 1; n < j + 2; n++)
lifeCount = lifeCount + space[k][n];
lifeCount = lifeCount - space[i][j];
// проверка
if (lifeCount == 3 && space[i][j] == 0) //по правилу если в мертвой клетке соседствует три живые клетки, то жизнь зарождается
space[i][j] = 1;
if ((lifeCount < 2 || lifeCount > 3) && space[i][j] == 1) //если у живой клетки есть две или три живые соседки, то эта клетка продолжает жить; в противном случае (если живых соседей меньше двух или больше трёх) клетка умирает («от одиночества» или «от перенаселённости»).
space[i][j] = 0;
return 0;
}
void Life::printSpace() {
for (int i = 1; i < a - 1; i++) {
for (int j = 1; j < b - 1; j++)
if (space[i][j] == 1) //если планета жива, то выводим @
std::cout << "@";
else
std::cout << " ";
std::cout << std::endl;
}
}
void Life::generateLife() {
for (int i = 1; i < a - 1; i++)
for (int j = 1; j < b - 1; j++)
space[i][j] = rand() % 2;
}
void Life::runLife() {
generateLife();
printSpace();
Sleep(2000);
system("cls");
while (1) {
for (int i = 1; i < a; i++)
for (int j = 1; j < b; j++)
checkRule(i, j);
printSpace();
Sleep(1);
system("cls");
}
}
#include <string>
#include <vector>
#include <sstream>
#include <iomanip>
#include <cmath>
#include <ctime>
using namespace std;
class Hash
{
string hash;
int receivingExCodes(int x) {
x += 256;
while (!(((x <= 57) && (x >= 48)) || ((x <= 90) && (x >= 65)) || ((x <= 122) && (x >= 97))))
{
if (x < 48) x += 24;
else x -= 47;
}
return x;
}
int getControlSum(string str)
{
unsigned int sault = 0, strlen = 0;
for (; strlen < str.size(); strlen++)
sault += int(str[strlen]);
return sault;
}
public:
string getHash(string userString, unsigned int lengthHash)
{
if (lengthHash > 3)
{
unsigned int minLen = 2;
unsigned int realMinLen = 0;
unsigned int originalSault = this->getControlSum(userString);
unsigned int originalLengthStr = (userString.size());
while (minLen <= lengthHash)
realMinLen = (minLen *= 2);
while (minLen < originalLengthStr)
minLen *= 2;
if ((minLen - originalLengthStr) < minLen)
minLen *= 2;
int addCount = minLen - originalLengthStr;
for (int i = 0; i < addCount; i++)
userString += this->receivingExCodes(userString[i] + userString[i + 1]);
int maxSault = this->getControlSum(userString);
int maxLengthStr = (userString.size());
while (userString.size() != realMinLen)
{
for (int i = 0, center = userString.size() / 2; i < center; i++)
this->hash += this->receivingExCodes(userString[center - i] + userString[center + i]);
userString = this->hash;
this->hash.clear();
}
unsigned int rem = realMinLen - lengthHash;
for (unsigned int i = 0, countCompress = realMinLen / rem; this->hash.size() < (lengthHash - 4); i++)
{
if (i % countCompress == 0)
this->hash += this->receivingExCodes(userString[i] + userString[++i]);
else
this->hash += userString[i];
}
this->hash += this->receivingExCodes(originalSault);
this->hash += this->receivingExCodes(originalLengthStr);
this->hash += this->receivingExCodes(maxSault);
this->hash += this->receivingExCodes(maxLengthStr);
return this->hash;
}
return "";
}
};
class AutoTests {
private:
int countIn;
int receivingExCodes(int x);
int ceivingExCodes(int x);
string generationString()
{
string str;
string chars = "1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNMйцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ";
int lengthString = rand() % 23 + 5;
for (int i = 0; i < lengthString; i++)
str += this->receivingExCodes(int(chars[rand() % chars.size() + 0]));
return str;
}
public:
AutoTests(int count) : countIn(count)
{
srand((int)time(NULL));
}
void GoTestRandom(int lenghtTemp)
{
int counterCoins = 0;
string stringTemp;
string resultTemp;
string *arrayString = new string[this->countIn];
string *arrayHash = new string[this->countIn];
for (int i = 0; i < this->countIn; i++)
{
stringTemp = this->generationString();
Hash hash;
resultTemp = hash.getHash(stringTemp, lenghtTemp);
arrayString[i] = stringTemp;
arrayHash[i] = resultTemp;
}
}
};
int main() {
Hash hash;
string str;
int len;
AutoTests test(5000);
test.GoTestRandom(6);
}
cin.tie(0);
cout.tie(0);
setlocale(LC_ALL, "Russian");
string type;
cout << "Введите SOUND, если хотите работать с передачей звука\nВведите TEXT, если хотите работать с передачей текста\n";
cin >> type;
if (type == "SOUND") {
cout << "Условие задачи:\n Музыкальный фрагмент был оцифрован и записан в виде файла без использования сжатия данных.\n Получившийся файл был передан в город А по каналу связи за T секунд.\n Затем тот же музыкальный фрагмент был оцифрован повторно с разрешением в X раза выше и частотой дискретизации в Y раа выше, чем в первый раз.\n Сжатие данных не производилось. Полученный файл был передан в город Б; пропускная способность канала связи с городом Б в Z раз выше,\n чем канала связи с городом А.\n Сколько секунд длилась передача файла в город Б?";
cout << "\n\n Введите 4 параметра: T (сек), X, Y, Z в формате НАИМЕНОВАНИЕ ЗНАЧЕНИЕ\n Пример: T 60\n";
cout << "Обратите внимание, что значения могут быть нецелыми\n";
cout << "Когда закончите ввод данных, введите в новой строке -1\n";
string name;
double value;
map<string, double> mp;
cin >> name;
while (name != "-1") {
cin >> value;
if (value <= 0) {
cout << "Такого не может быть :(\n";
return 0;
}
if (name != "T" && name != "X" && name != "Y" && name != "Z") {
cout << "Ошибка :(";
return 0;
}
mp[name] = value;
cin >> name;
}
if (mp.size() != 4) {
cout << "Ошибка :(";
return 0;
}
double newT = mp["T"] * mp["X"] * mp["Y"];
newT = double(newT / mp["Z"]);
cout << "Файл из города Б в город А будет идти " << newT << " секунд\n";
}
else if (type == "TEXT") {
cout << "Есть 4 параметра:\n скорость передачи данных в бит/сек\n время передачи в сек\n количество символов в тексте\n в сколько битной кодировке представлен текст\n";
cout << "Вводите исходные данные (SPEED, TIME, NUM, CODE) в формате НАИМЕНОВАНИЕ ЗНАЧЕНИЕ\n Пример: SPEED 128000\n";
cout << "Обратите внимание, что все числа целые\n";
cout << "Когда закончите ввод данных, введите в новой строке -1\n";
string name;
int value;
map<string, int> mp;
cin >> name;
while (name != "-1") {
cin >> value;
if (value <= 0) {
cout << "Такого не может быть";
return 0;
}
if (name != "SPEED" && name != "NUM" && name != "CODE" && name != "TIME") {
cout << "Ошибка :(";
return 0;
}
mp[name] = value;
cin >> name;
}
if (mp.size() != 3) {
cout << "Ошибка :(";
return 0;
}
if (mp.find("SPEED") == mp.end()) {
cout << "Скорость передачи данных будет " << double(mp["NUM"] * mp["CODE"]) / mp["TIME"] << " бит/с\n";
}
else if (mp.find("TIME") == mp.end()) {
cout << "Время передачи данных будет " << double(mp["NUM"] * mp["CODE"]) / mp["SPEED"] << " секунд\n";
}
else if (mp.find("CODE") == mp.end()) {
cout << "Кодировка будет состоять из " << double(mp["SPEED"] * mp["TIME"]) / mp["NUM"] << " бит\n";
}
else if (mp.find("NUM") == mp.end()) {
cout << "Количество символов будет " << double(mp["SPEED"] * mp["TIME"]) / mp["CODE"] << "\n";
}
else {
cout << "Ошибка :(";
return 0;
}
}
else {
cout << "Я не понял, о чем вы :(";
return 0;
привет
п4кминкфгмфукму
using namespace std;
int main() {
int a,b;
cin>>a>>b;
cout<<b%a;
return 0;
}
import numpy as np
import pandas as pd
# для работы с графиками
import matplotlib.pyplot as plt
import seaborn as sns
# отключение предупреждений
import warnings
warnings.filterwarnings('ignore')
# для качественного отображения графиков
%config InlineBackend.figure_format = 'svg'
# Исходный набор данных
initial_df = pd.read_csv('D:/DataSets/application_train.csv')
print('Размер исходных данных: ', initial_df.shape)
initial_df.head()
# Разделяем исходные данные на тренировочный и тестовый наборы
from sklearn.model_selection import train_test_split
X = initial_df.drop('TARGET', axis=1) # Набор признаков
y = initial_df['TARGET'] # Набор целевых переменных
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42) # Делим в отношении 70 / 30
from sklearn.preprocessing import MinMaxScaler
from sklearn.impute import SimpleImputer
train = X_train.copy()
features = list(train.columns)
# копируем тестовые данные
test = X_test.copy()
# заполним недостающее по медиане
imputer = SimpleImputer(strategy = 'median')
# Нормализация
scaler = MinMaxScaler(feature_range = (0, 1))
# заполнение тренировочной выборки
imputer.fit(train)
# Трансофрмация тренировочной и тестовой выборок
train = imputer.transform(train)
test = imputer.transform(X_test)
# то же самое с нормализацией
scaler.fit(train)
train = scaler.transform(train)
test = scaler.transform(test)
print('Формат тренировочной выборки: ', train.shape)
print('Формат тестовой выборки: ', test.shape)
from lightgbm import LGBMClassifier
clf = LGBMClassifier()
clf.fit(train, y_train)
y_pred = clf.predict_proba(test)[:, 1]
# Датафрейм ответов
submit = X_test[['SK_ID_CURR']]
submit['TARGET'] = y_pred
# Сохранение датафрейма
submit.to_csv('lightgbm.csv', index = False)