Автор |
Сообщение |
28.11.2024 11:16:32
Тема: Re:Применение искусственного интеллекта для обучения HLCCAD - 2024
|
Вадим Зинович
Темы: 0
Сообщений: 35
Мой профиль
|
Задача №10
// Объявление входных и выходных переменных
int __in __bits(16) X;
int __in __bits(16) Y;
int __in __bits(8) A9;
int __in __bits(8) B7;
int __out __bits(16) RES;
// Определение типов с помощью макросов
#define i8 int __bits(8)
#define i16 int __bits(16)
#define i32 int __bits(32)
#define u1 unsigned __bits(1)
#define u3 unsigned __bits(3)
#define u8 unsigned __bits(8)
#define u16 unsigned __bits(16)
#define u32 unsigned __bits(32)
#define u64 unsigned __bits(64)
#define u4 unsigned __bits(4)
// Библиотека функций C-MPA
i16 SIGN (i16 A) { return (A > 0) ? 1 : (A == 0) ? 0 : -1; }
i16 ABS (i16 A) { return (A > 0) ? A : (A * (-1)); }
u64 FACT (u4 A) { u64 RES = 1; while (A > 1) RES *= A--; return RES; }
u1 NOT (u1 A) { return ~A; }
u1 OR2 (u1 A, u1 B) { return A | B; }
u1 XOR2 (u1 A, u1 B) { return A ^ B; }
u1 AND2 (u1 A, u1 B) { return A & B; }
u8 DC (u1 CS, u3 X) { u8 d = 1; return (CS == 0) ? 0 : d << X; }
u4 CD (u8 X) { if (X == 0) return 0; u4 i = 0; while (!(X & 1)) { i++; X = X >> 1; } return (i << 1) + 1; }
u1 MS (u8 X, u3 A) { return ((X >> A) & 1); }
u16 CBW (u8 A) { return A; }
u32 CWD (u16 A) { return A; }
i16 CONST (i16 A) { return A; }
i16 x32Tox16 (i32 A) { return A; }
i8 x16Tox8 (i16 A) { return A; }
i16 SUM (i16 A, i16 B) { i16 C; C = A + B; return C; }
i16 ISUB (i16 A, i16 B) { i16 C; C = A - B; return C; }
i32 IMUL (i16 A, i16 B) { i32 C; C = A * B; return C; }
i16 IDIV (i32 A, i32 B) { i16 C; C = A / B; return C; }
u16 MSb16x2 (u16 Zero, u16 One, u1 A) { return (A) ? One : Zero; }
u3 ICMP (i32 A, i32 B) { return (A > B) ? 4 : (A == B) ? 2 : 1; }
u1 IGT;
u1 IEQ;
u1 ILT;
void ICMPResult(i32 A, i32 B) { u3 C = ICMP(A,B); IGT = C == 4; IEQ = C == 2; ILT = C == 1; }
void main() {
// Приведение переменных к необходимым типам
i32 X32 = CWD(X);
i32 Y32 = CWD(Y);
i16 A916 = CBW(A9);
i16 B716 = CBW(B7);
i32 A932 = CWD(A916);
i32 B732 = CWD(B716);
// Первая ветка: ((A9 + X * B7) - Y) / X
i32 XB7_mul = IMUL(X, B716); // X * B7
i16 XB7_mul_16 = x32Tox16(XB7_mul); // Приведение к i16
i16 sum1 = SUM(A916, XB7_mul_16); // A9 + X * B7
i16 diff1 = ISUB(sum1, Y); // (A9 + X * B7) - Y
i32 diff1_32 = CWD(diff1); // Приведение к i32
i16 res1 = IDIV(diff1_32, X32); // ((A9 + X * B7) - Y) / X
// Вторая ветка: (B7 - Y * X) / A9 + Y
i32 YX_mul = IMUL(Y, X); // Y * X
i16 YX_mul_16 = x32Tox16(YX_mul); // Приведение к i16
i16 diff2 = ISUB(B716, YX_mul_16); // B7 - Y * X
i32 diff2_32 = CWD(diff2); // Приведение к i32
i16 div2 = IDIV(diff2_32, A932); // (B7 - Y * X) / A9
i16 res2 = SUM(div2, Y); // (B7 - Y * X) / A9 + Y
// Проверка условия X * Y >= 0
i32 XY_mul = IMUL(X, Y); // X * Y
i16 zero = CONST(0);
i32 zero_32 = CWD(zero);
ICMPResult(XY_mul, zero_32);
u1 cond = OR2(IEQ, IGT); // X * Y >= 0
// Выбор результата на основе условия
RES = MSb16x2(res2, res1, cond);
}
|
28.11.2024 11:30:35
Тема: Re:Применение искусственного интеллекта для обучения HLCCAD - 2024
|
Максим Куделько
Темы: 0
Сообщений: 17
Мой профиль
|
Задача №15
int __in __bits(16) x;
int __in __bits(16) y;
int __in __bits(8) a;
int __in __bits(8) b;
int __out __bits(16) R;
#define i8 int __bits(8)
#define i16 int __bits(16)
#define i32 int __bits(32)
#define u1 unsigned __bits(1)
#define u3 unsigned __bits(3)
#define u8 unsigned __bits(8)
#define u16 unsigned __bits(16)
#define u32 unsigned __bits(32)
i16 SIGN (i16 A) { return (A > 0) ? 1 : (A == 0) ? 0 : -1; }
i16 ABS (i16 A) { return (A > 0) ? A : (A * (-1)); }
u1 NOT (u1 A) { return ~A; }
u1 OR2 (u1 A, u1 B) { return A | B; }
u1 XOR2 (u1 A, u1 B) { return A ^ B; }
u1 AND2 (u1 A, u1 B) { return A & B; }
u16 CBW (u8 A) {return A;}
u32 CWD (u16 A) {return A;}
i16 CONST (i16 A) {return A;}
i16 x32Tox16 (i32 A) {return A;}
i16 SUM (i16 A, i16 B) {i16 C; C = A + B; return C;}
i16 ISUB (i16 A, i16 B) {i16 C; C = A - B; return C;}
i32 IMUL (i16 A, i16 B) {i32 C; C = A * B; return C;}
i16 IDIV (i32 A, i32 B) {i16 C; C = A / B; return C;}
u16 MSb16x2(u16 Zero, u16 One, u1 A) {return (A) ? One : Zero;}
u3 ICMP(i32 A, i32 B) {return (A > B) ? 4 : (A == B) ? 2 : 1;}
u1 IGT;
u1 IEQ;
u1 ILT;
void ICMPResult(i32 A, i32 B) {u3 C = ICMP(A,B); IGT = C == 4; IEQ = C == 2; ILT = C == 1;}
void main() {
// Преобразование входных данных к необходимым типам
i16 a16 = CBW(a);
i16 b16 = CBW(b);
i32 x32 = CWD(x);
i32 y32 = CWD(y);
i16 x16 = x32Tox16(x32);
i16 y16 = x32Tox16(y32);
// Промежуточные вычисления для res1
i16 a_minus_b = ISUB(a16, b16); // a - b
i32 a_minus_b_32 = CWD(a_minus_b);
i32 a_minus_b_x32 = IMUL(a_minus_b, x16); // (a - b) * x
i16 a_minus_b_x16 = x32Tox16(a_minus_b_x32);
i16 a_plus_b = SUM(a16, b16); // a + b
i32 a_plus_b_32 = CWD(a_plus_b);
i16 a_plus_b_div_y = IDIV(a_plus_b_32, y32); // (a + b) / y
i16 res1 = SUM(a_minus_b_x16, a_plus_b_div_y); // res1 = (a - b) * x + (a + b) / y
// Промежуточные вычисления для res2
i16 x_minus_y = ISUB(x16, y16); // x - y
i32 x_minus_y_32 = CWD(x_minus_y);
i32 x_minus_y_a32 = IMUL(x_minus_y, a16); // (x - y) * a
i16 x_minus_y_a16 = x32Tox16(x_minus_y_a32);
i16 x_plus_y = SUM(x16, y16); // x + y
i32 x_plus_y_32 = CWD(x_plus_y);
i16 x_plus_y_div_b = IDIV(x_plus_y_32, b16); // (x + y) / b
i16 res2 = SUM(x_minus_y_a16, x_plus_y_div_b); // res2 = (x - y) * a + (x + y) / b
// Условие для выбора результата
i32 a_mul_b32 = IMUL(a16, b16); // a * b
i16 zero16 = CONST(0);
i32 zero32 = CWD(zero16);
ICMPResult(a_mul_b32, zero32);
u1 cond = IEQ; // cond = (a * b == 0)
// Выбор результата
R = MSb16x2(res2, res1, cond);
}
|
28.11.2024 11:50:41
Тема: Re:Применение искусственного интеллекта для обучения HLCCAD - 2024
|
Сергей Емельянов
Темы: 0
Сообщений: 21
Мой профиль
|
Задача №14
#include <hlccad.mpc>
// Объявление глобальных переменных
int __in __bits(16) X;
int __in __bits(16) Y;
int __in __bits(8) A9;
int __in __bits(8) B7;
int __out __bits(16) RES;
// Главная функция
void main() {
// Приведение переменных
i32 X32 = CWD(X);
i32 Y32 = CWD(Y);
i16 A916 = CBW(A9);
i16 B716 = CBW(B7);
// Константы
i16 zero16 = CONST(0);
i32 zero32 = CWD(zero16);
// Вычисления для первой ветки
i32 A9_Y = IMUL(A916, Y);
i32 B7_X = IMUL(B716, X);
i16 A9_Y_16 = x32Tox16(A9_Y);
i16 B7_X_16 = x32Tox16(B7_X);
i16 sum1 = SUM(A9_Y_16, B7_X_16);
i16 sub1 = ISUB(sum1, X);
i32 sub1_32 = CWD(sub1);
i16 res1 = IDIV(sub1_32, Y32);
// Вычисления для второй ветки
i32 A9_B7 = IMUL(A916, B716);
i16 X_div_Y = IDIV(X32, Y32);
i16 sub2 = ISUB(X_div_Y, Y);
i16 res2 = SUM(A9_B7, sub2);
// Условие X * Y < 0
i32 XY_mul = IMUL(X, Y);
ICMPResult(XY_mul, zero32);
u1 cond = ILT;
// Выбор результата
RES = MSb16x2(res1, res2, cond);
}
|
28.11.2024 11:53:55
Тема: Re:Применение искусственного интеллекта для обучения HLCCAD - 2024
|
Максим Куделько
Темы: 0
Сообщений: 17
Мой профиль
|
Задача №12
int __in __bits(16) X;
int __in __bits(16) Y;
int __in __bits(8) A9;
int __in __bits(8) B7;
int __out __bits(16) RES;
#define i8 int __bits(8)
#define i16 int __bits(16)
#define i32 int __bits(32)
#define u1 unsigned __bits(1)
#define u3 unsigned __bits(3)
#define u8 unsigned __bits(8)
#define u16 unsigned __bits(16)
#define u32 unsigned __bits(32)
#define u64 unsigned __bits(64)
#define u4 unsigned __bits(4)
i16 SIGN(i16 A) { return (A > 0) ? 1 : (A == 0) ? 0 : -1; }
i16 ABS(i16 A) { return (A > 0) ? A : (A * (-1)); }
u64 FACT(u4 A) { u64 RES = 1; while (A > 1) RES *= A--; return RES; }
u1 NOT(u1 A) { return ~A; }
u1 OR2(u1 A, u1 B) { return A | B; }
u1 XOR2(u1 A, u1 B) { return A ^ B; }
u1 AND2(u1 A, u1 B) { return A & B; }
u8 DC(u1 CS, u3 X) { u8 d = 1; return (CS == 0) ? 0 : d << X; }
u4 CD(u8 X) { if (X == 0) return 0; u4 i = 0; while (!(X & 1)) { i++; X = X >> 1; } return (i << 1) + 1; }
u1 MS(u8 X, u3 A) { return ((X >> A) & 1); }
u16 CBW(u8 A) { return A; }
u32 CWD(u16 A) { return A; }
i16 x32Tox16(i32 A) { return A; }
i8 x16Tox8(i16 A) { return A; }
i16 CONST(i16 A) { return A; }
i16 SUM(i16 A, i16 B) { i16 C; C = A + B; return C; }
i16 ISUB(i16 A, i16 B) { i16 C; C = A - B; return C; }
i32 IMUL(i16 A, i16 B) { i32 C; C = A * B; return C; }
i16 IDIV(i32 A, i32 B) { i16 C; C = A / B; return C; }
u16 MSb16x2(u16 Zero, u16 One, u1 A) { return (A) ? One : Zero; }
u3 ICMP(i32 A, i32 B) { return (A > B) ? 4 : (A == B) ? 2 : 1; }
u1 IGT;
u1 IEQ;
u1 ILT;
void ICMPResult(i32 A, i32 B) { u3 C = ICMP(A,B); IGT = C == 4; IEQ = C == 2; ILT = C == 1; }
void main() {
i32 x32 = CWD(X);
i32 y32 = CWD(Y);
i16 a9_16 = CBW(A9);
i16 b7_16 = CBW(B7);
i32 a9_b7_mul = IMUL(a9_16, b7_16); // A9 * B7
i16 a9_b7_mul_16 = x32Tox16(a9_b7_mul);
i16 res1_sub_x = ISUB(a9_b7_mul_16, X); // A9 * B7 - X
i16 res1_add_y = SUM(res1_sub_x, Y); // A9 * B7 - X + Y
i32 res1_add_y_32 = CWD(res1_add_y);
i16 res1_final = IDIV(res1_add_y_32, x32); // res1 = (A9 * B7 - X + Y) / X
i16 const_one = CONST(1);
i16 a9_plus1 = SUM(a9_16, const_one); // A9 + 1
i32 a9_plus1_x = IMUL(a9_plus1, X); // (A9 + 1) * X
i16 a9_plus1_x_16 = x32Tox16(a9_plus1_x);
i32 b7_32 = CWD(b7_16);
i16 b7_div_y = IDIV(b7_32, y32); // B7 / Y
i16 res2_add = SUM(a9_plus1_x_16, b7_div_y); // (A9 + 1) * X + B7 / Y
i16 res2_final = ISUB(res2_add, Y); // res2 = (A9 + 1) * X + B7 / Y - Y
i32 x_y_mul = IMUL(X, Y); // X * Y
i16 zero = CONST(0);
i32 zero_32 = CWD(zero);
ICMPResult(x_y_mul, zero_32);
u1 condition = NOT(ILT);
RES = MSb16x2(res2_final, res1_final, condition);
}
|
28.11.2024 12:07:13
Тема: Re:Применение искусственного интеллекта для обучения HLCCAD - 2024
|
Вадим Зинович
Темы: 0
Сообщений: 35
Мой профиль
|
Задача №16
// Объявление входных и выходных переменных
int __in __bits(16) x;
int __in __bits(16) y;
int __in __bits(8) a;
int __in __bits(8) b;
int __out __bits(16) R;
// Определение типов с помощью макросов
#define i8 int __bits(8)
#define i16 int __bits(16)
#define i32 int __bits(32)
#define u1 unsigned __bits(1)
#define u3 unsigned __bits(3)
#define u8 unsigned __bits(8)
#define u16 unsigned __bits(16)
#define u32 unsigned __bits(32)
#define u64 unsigned __bits(64)
#define u4 unsigned __bits(4)
// Библиотека функций C-MPA
i16 SIGN (i16 A) { return (A > 0) ? 1 : (A == 0) ? 0 : -1; }
i16 ABS (i16 A) { return (A > 0) ? A : (A * (-1)); }
u64 FACT (u4 A) { u64 RES = 1; while (A > 1) RES *= A--; return RES; }
u1 NOT (u1 A) { return ~A; }
u1 OR2 (u1 A, u1 B) { return A | B; }
u1 XOR2 (u1 A, u1 B) { return A ^ B; }
u1 AND2 (u1 A, u1 B) { return A & B; }
u8 DC (u1 CS, u3 X) { u8 d = 1; return (CS == 0) ? 0 : d << X; }
u4 CD (u8 X) { if (X == 0) return 0; u4 i = 0; while (!(X & 1)) { i++; X = X >> 1; } return (i << 1) + 1; }
u1 MS (u8 X, u3 A) { return ((X >> A) & 1); }
u16 CBW (u8 A) { return A; }
u32 CWD (u16 A) { return A; }
i16 CONST (i16 A) { return A; }
i16 x32Tox16 (i32 A) { return A; }
i8 x16Tox8 (i16 A) { return A; }
i16 SUM (i16 A, i16 B) { i16 C; C = A + B; return C; }
i16 ISUB (i16 A, i16 B) { i16 C; C = A - B; return C; }
i32 IMUL (i16 A, i16 B) { i32 C; C = A * B; return C; }
i16 IDIV (i32 A, i32 B) { i16 C; C = A / B; return C; }
u16 MSb16x2 (u16 Zero, u16 One, u1 A) { return (A) ? One : Zero; }
u3 ICMP (i32 A, i32 B) { return (A > B) ? 4 : (A == B) ? 2 : 1; }
u1 IGT;
u1 IEQ;
u1 ILT;
void ICMPResult(i32 A, i32 B) { u3 C = ICMP(A,B); IGT = C == 4; IEQ = C == 2; ILT = C == 1; }
void main() {
// Приведение переменных к необходимым типам
i32 x32 = CWD(x);
i32 y32 = CWD(y);
i16 a16 = CBW(a);
i16 b16 = CBW(b);
i32 a32 = CWD(a16);
i32 b32 = CWD(b16);
// Первая ветка: (x - y) * (a + b) + (b / a)
i16 diff_xy = ISUB(x, y); // x - y
i16 sum_ab = SUM(a16, b16); // a + b
i32 mul_xy_ab = IMUL(diff_xy, sum_ab); // (x - y) * (a + b)
i16 mul_xy_ab_16 = x32Tox16(mul_xy_ab);
i16 div_b_a = IDIV(b32, a32); // b / a
i16 res1 = SUM(mul_xy_ab_16, div_b_a); // (x - y) * (a + b) + (b / a)
// Вторая ветка: (x / y) * ((a + b) / (a - b))
i16 div_x_y = IDIV(x32, y32); // x / y
i16 diff_ab = ISUB(a16, b16); // a - b
i32 sum_ab_32 = CWD(sum_ab);
i32 diff_ab_32 = CWD(diff_ab);
i32 div_ab_ab = IDIV(sum_ab_32, diff_ab_32); // (a + b) / (a - b)
i32 mul_xy_ab2 = IMUL(div_x_y, div_ab_ab); // (x / y) * ((a + b) / (a - b))
i16 res2 = x32Tox16(mul_xy_ab2);
// Проверка условия a == b
ICMPResult(a32, b32);
u1 cond = IEQ; // Условие a == b
// Выбор результата на основе условия
R = MSb16x2(res2, res1, cond);
}
|
28.11.2024 12:15:17
Тема: Re:Применение искусственного интеллекта для обучения HLCCAD - 2024
|
Максим Куделько
Темы: 0
Сообщений: 17
Мой профиль
|
Задача №6
int __in __bits(16) a;
int __in __bits(16) b;
int __in __bits(8) c;
int __in __bits(8) d;
int __out __bits(16) RES;
#define i8 int __bits(8)
#define i16 int __bits(16)
#define i32 int __bits(32)
#define u1 unsigned __bits(1)
#define u3 unsigned __bits(3)
#define u8 unsigned __bits(8)
#define u16 unsigned __bits(16)
#define u32 unsigned __bits(32)
#define u64 unsigned __bits(64)
#define u4 unsigned __bits(4)
i16 SIGN (i16 A) { return (A > 0) ? 1 : (A == 0) ? 0 : -1; }
i16 ABS (i16 A) { return (A > 0) ? A : (A * (-1)); }
u1 NOT (u1 A) { return ~A; }
u1 OR2 (u1 A, u1 B) { return A | B; }
u1 AND2 (u1 A, u1 B) { return A & B; }
i16 CONST (i16 A) { return A; }
u16 MSb16x2 (u16 Zero, u16 One, u1 A) { return (A) ? One : Zero; }
u3 ICMP(i32 A, i32 B) {return (A > B) ? 4 : (A == B) ? 2 : 1;}
u1 IGT;
u1 IEQ;
u1 ILT;
void ICMPResult(i32 A, i32 B) {u3 C = ICMP(A,B); IGT = C == 4; IEQ = C == 2; ILT = C == 1;}
i16 SUM (i16 A, i16 B) { i16 C; C = A + B; return C; }
i16 ISUB (i16 A, i16 B) { i16 C; C = A - B; return C; }
i32 IMUL (i16 A, i16 B) { i32 C; C = A * B; return C; }
i16 IDIV (i32 A, i32 B) { i16 C; C = A / B; return C; }
i16 x32Tox16 (i32 A) { return A; }
u16 CBW (u8 A) { return A; }
u32 CWD (u16 A) { return A; }
void main() {
// Приведение входных данных к типу i16
i16 a16 = a; // Приведение a к i16
i16 b16 = b; // Приведение b к i16
i16 c16 = CBW(c); // Приведение c к i16
i16 d16 = CBW(d); // Приведение d к i16
i32 a32 = CWD(a16); // Приведение a16 к i32
i32 b32 = CWD(b16); // Приведение b16 к i32
i32 c32 = CWD(c16); // Приведение c16 к i32
i32 d32 = CWD(d16); // Приведение d16 к i32
i16 zero16 = CONST(0); // Константа 0
i16 neg_c16 = ISUB(zero16, c16); // -c (в i16)
i32 neg_c32 = CWD(neg_c16); // -c (в i32)
// Проверка условия cond1: b == -c
ICMPResult(b32, neg_c32);
u1 cond1 = IEQ;
// Вычисление res1: -a * b - c * d + a / c + b / d
i32 ab_mul32 = IMUL(a16, b16); // a * b (в i32)
i16 ab_mul16 = x32Tox16(ab_mul32); // Приведение результата к i16
i16 neg_ab16 = ISUB(zero16, ab_mul16); // -a * b (в i16)
i32 cd_mul32 = IMUL(c16, d16); // c * d (в i32)
i16 cd16 = x32Tox16(cd_mul32); // Приведение результата к i16
i16 first_part = ISUB(neg_ab16, cd16); // -a * b - c * d
i16 a_div_c = IDIV(a32, c32); // a / c (в i16)
i16 b_div_d = IDIV(b32, d32); // b / d (в i16)
i16 second_part = SUM(a_div_c, b_div_d); // a / c + b / d
i16 res1 = SUM(first_part, second_part); // -a * b - c * d + a / c + b / d
// Вычисление res2: ((a + b) * a * b * c * d) / (c - d)
i16 ab_sum = SUM(a16, b16); // a + b (в i16)
i32 ab_sum32 = CWD(ab_sum); // Приведение ab_sum к i32
i32 ab_a_mul32 = IMUL(ab_sum, a16); // (a + b) * a (в i32)
i16 ab_a_mul16 = x32Tox16(ab_a_mul32); // Приведение результата к i16
i32 ab_ab_mul32 = IMUL(ab_a_mul16, b16); // (a + b) * a * b (в i32)
i16 ab_ab_mul16 = x32Tox16(ab_ab_mul32); // Приведение результата к i16
i32 abc_mul32 = IMUL(ab_ab_mul16, c16); // (a + b) * a * b * c (в i32)
i16 abc_mul16 = x32Tox16(abc_mul32); // Приведение результата к i16
i32 abcd_mul32 = IMUL(abc_mul16, d16); // (a + b) * a * b * c * d (в i32)
i16 cd_diff = ISUB(c16, d16); // c - d (в i16)
i32 cd_diff_32 = CWD(cd_diff); // c - d (в i32)
i16 res2 = IDIV(abcd_mul32, cd_diff_32); // ((a + b) * a * b * c * d) / (c - d)
// Выбор результата на основе условия
RES = MSb16x2(res2, res1, cond1);
}
|
28.11.2024 15:14:47
Тема: Re:Применение искусственного интеллекта для обучения HLCCAD - 2024
|
Евгений Ленец
Темы: 0
Сообщений: 8
Мой профиль
|
28.11 15:13 С. Задача №9 0 / 100 [1]: Ошибка компиляции (mpc): Ошибка синтаксиса (строка 66): i16 temp2 = IDIV.
#define i8 int __bits(8)
#define i16 int __bits(16)
#define i32 int __bits(32)
#define u1 unsigned __bits(1)
#define u3 unsigned __bits(3)
#define u8 unsigned __bits(8)
#define u16 unsigned __bits(16)
#define u32 unsigned __bits(32)
#define u64 unsigned __bits(64)
#define u4 unsigned __bits(4)
i16 SIGN (i16 A) { return (A > 0) ? 1 : (A == 0) ? 0 : -1; }
i16 ABS (i16 A) { return (A > 0) ? A : (A * (-1)); }
u64 FACT (u4 A) { u64 RES = 1; while (A > 1) RES *= A--; return RES; }
u1 NOT (u1 A) { return ~A; }
u1 OR2 (u1 A, u1 B) { return A | B; }
u1 XOR2 (u1 A, u1 B) { return A ^ B; }
u1 AND2 (u1 A, u1 B) { return A & B; }
u8 DC (u1 CS, u3 X) { u8 d = 1; return (CS == 0) ? 0 : d << X; }
u4 CD (u8 X) { if (X == 0) return 0; u4 i = 0; while (!(X & 1)) { i++; X = X >> 1; } return (i << 1) + 1; }
u1 MS (u8 X, u3 A) { return ((X >> A) & 1); }
i16 CBW (i8 A) {return A;}
i32 CWD (i16 A) {return A;}
i16 x32Tox16 (i32 A) {return A;}
i8 x16Tox8 (i16 A) {return A;}
i16 CONST (i16 A) {return A;}
u4 CONST4 (u4 A) {return A;}
i16 SUM (i16 A, i16 B) {i16 C; C = A + B; return C;}
i16 ISUB (i16 A, i16 B) {i16 C; C = A - B; return C;}
i32 IMUL (i16 A, i16 B) {i32 C; C = A * B; return C;}
i16 IDIV (i32 A, i32 B) {i16 C; C = A / B; return C;}
u16 MSb16x2(u16 Zero, u16 One, u1 A) {return (A) ? One : Zero;}
u3 ICMP(i32 A, i32 B) {return (A > B) ? 4 : (A == B) ? 2 : 1;}
u1 IGT;
u1 IEQ;
u1 ILT;
void ICMPResult(i32 A, i32 B) {u3 C = ICMP(A,B); IGT = C == 4; IEQ = C == 2; ILT = C == 1;}
void main() {
i16 a9_16 = CBW(A9);
i16 b7_16 = CBW(B7);
i32 x32 = CWD(X);
i32 y32 = CWD(Y);
i32 a9_32 = CWD(a9_16);
i32 b7_32 = CWD(b7_16);
i32 xy_mul = IMUL(x32, y32);
i32 zero_32 = CWD(CONST(0));
ICMPResult(xy_mul, zero_32);
u1 cond = ILT;
i16 y_x_sum = ISUB(Y, X);
i32 y_x_sum_32 = CWD(y_x_sum);
i32 b7_y_mul = IMUL(b7_16, y32);
i32 temp1 = ISUB(y_x_sum_32, b7_y_mul);
i16 temp2 = IDIV
i16 temp2 = IDIV(temp1, x32);
i16 res1 = SUM(temp2, a9_16);
i32 y_x_sum_32_2 = IMUL(SUM(Y, X), a9_32);
i16 res2 = ISUB(IDIV(y_x_sum_32_2, b7_32), Y);
RES = MSb16x2(res2, res1, cond);
}
|
28.11.2024 15:23:18
Тема: Re:Применение искусственного интеллекта для обучения HLCCAD - 2024
|
Евгений Ленец
Темы: 0
Сообщений: 8
Мой профиль
|
i32 xy_mul = IMUL(x32, y32);
IMUL - 16 битный
|
28.11.2024 15:31:05
Тема: Re:Применение искусственного интеллекта для обучения HLCCAD - 2024
|
Евгений Ленец
Темы: 0
Сообщений: 8
Мой профиль
|
u1 cond = ILT;
Что это в HLCCAD?
|
28.11.2024 15:51:17
Тема: Re:Применение искусственного интеллекта для обучения HLCCAD - 2024
|
Даниил Нечай
Темы: 0
Сообщений: 17
Мой профиль
|
использовал языковую модель GLM-4-Flash https://bigmodel.cn/console/overview
Задача №8
Путь задачи: Командные олимпиады\Архитектура вычислительных систем\Особенности архитектуры транспьютеров \Контрольный срез (Пример 8)\Базовый\П - "Задача №8"
int __in __bits(8) A9;
int __in __bits(8) B7;
int __in __bits(16) X;
int __in __bits(16) Y;
int __out __bits(16) RES;
#define i8 int __bits(8)
#define i16 int __bits(16)
#define i32 int __bits(32)
#define u1 unsigned __bits(1)
#define u3 unsigned __bits(3)
#define u8 unsigned __bits(8)
#define u16 unsigned __bits(16)
#define u32 unsigned __bits(32)
#define u64 unsigned __bits(64)
#define u4 unsigned __bits(4)
// Библиотека функций C-MPA
i16 SIGN (i16 A) { return (A > 0) ? 1 : (A == 0) ? 0 : -1; }
i16 ABS (i16 A) { return (A > 0) ? A : (A * (-1)); }
u64 FACT (u4 A) { u64 RES = 1; while (A > 1) RES *= A--; return RES; }
u1 NOT (u1 A) { return ~A; }
u1 OR2 (u1 A, u1 B) { return A | B; }
u1 XOR2 (u1 A, u1 B) { return A ^ B; }
u1 AND2 (u1 A, u1 B) { return A & B; }
u8 DC (u1 CS, u3 X) { u8 d = 1; return (CS == 0) ? 0 : d << X; }
u4 CD (u8 X) { if (X == 0) return 0; u4 i = 0; while (!(X & 1)) { i++; X = X >> 1; } return (i << 1) + 1; }
u1 MS (u8 X, u3 A) { return ((X >> A) & 1); }
i16 CONST (i16 A) {return A;}
u4 CONST4 (u4 A) {return A;}
i16 CBW (i8 A) {return A;}
i32 CWD (i16 A) {return A;}
i16 x32Tox16 (i32 A) {return A;}
i8 x16Tox8 (i16 A) {return A;}
i16 SUM (i16 A, i16 B) {i16 C; C = A + B; return C;}
i16 ISUB (i16 A, i16 B) {i16 C; C = A - B; return C;}
i32 IMUL (i16 A, i16 B) {i32 C; C = A * B; return C;}
i16 IDIV (i32 A, i32 B) {i16 C; C = A / B; return C;}
u16 MSb16x2(u16 Zero, u16 One, u1 A) {return (A) ? One : Zero;}
u3 ICMP(i32 A, i32 B) {return (A > B) ? 4 : (A == B) ? 2 : 1;}
u1 IGT;
u1 IEQ;
u1 ILT;
void ICMPResult(i32 A, i32 B) {u3 C = ICMP(A,B); IGT = C == 4; IEQ = C == 2; ILT = C == 1;}
void main() {
// Приведение переменных к необходимым типам
i32 A9_32 = CWD(A9);
i32 B7_32 = CWD(B7);
i32 X_32 = CWD(X);
i32 Y_32 = CWD(Y);
// Вычисление первой ветки: (Y + X * A9 - B7) / Y
i32 term1 = IMUL(X_32, A9_32); // X * A9
i32 sum1 = SUM(Y_32, term1); // Y + X * A9
i32 diff1 = ISUB(sum1, B7_32); // Y + X * A9 - B7
i16 res1 = IDIV(diff1, Y_32); // (Y + X * A9 - B7) / Y
// Вычисление второй ветки: (Y + A9) * X / Y - B7
i32 sum2 = SUM(Y_32, A9_32); // Y + A9
i32 mul2 = IMUL(sum2, X_32); // (Y + A9) * X
i16 res2 = IDIV(mul2, Y_32); // (Y + A9) * X / Y
i16 res2_final = ISUB(res2, B7_32); // (Y + A9) * X / Y - B7
// Условие для выбора нужной ветки
ICMPResult(X_32, Y_32);
u1 cond = IEQ; // X * Y == 0
// Выбор результата на основе условия
RES = MSb16x2(res2_final, res1, cond);
}
|
28.11.2024 15:59:35
Тема: Re:Применение искусственного интеллекта для обучения HLCCAD - 2024
|
Евгений Ленец
Темы: 0
Сообщений: 8
Мой профиль
|
IGT - >
IEQ - =
ILT - <
|
28.11.2024 16:03:49
Тема: Re:Применение искусственного интеллекта для обучения HLCCAD - 2024
|
Даниил Нечай
Темы: 0
Сообщений: 17
Мой профиль
|
произошла ошибка при генерации кода для 8 задачи.Ошибка языковой модели выглядит так: i32 term1 = IMUL(X_32, A9_32); // X * A9
i32 sum1 = SUM(Y_32, term1); // Y + X * A9 . на вход должно подаваться 16 разрядное число, а подается 32-х разрядное
|
29.11.2024 16:43:07
Тема: Re:Применение искусственного интеллекта для обучения HLCCAD - 2024
|
Сергей Емельянов
Темы: 0
Сообщений: 21
Мой профиль
|
Задача №11
#include <hlccad.mpc>
int __in __bits(16) X;
int __in __bits(16) Y;
int __in __bits(8) A9;
int __in __bits(8) B7;
int __out __bits(16) RES;
void main() {
// Приведение типов
i32 x32 = CWD(X);
i32 y32 = CWD(Y);
i16 a9_16 = CBW(A9);
i16 b7_16 = CBW(B7);
// Константа 0
i16 zero = CONST(0);
i32 zero_32 = CWD(zero);
// Первая ветка: (A9 - B7 + X * Y) / X
i16 a9_b7_diff = ISUB(a9_16, b7_16);
i32 xy_mul_32 = IMUL(X, Y);
i16 xy_mul_16 = x32Tox16(xy_mul_32);
i16 branch1_sum = SUM(a9_b7_diff, xy_mul_16);
i32 branch1_sum_32 = CWD(branch1_sum);
i16 res1 = IDIV(branch1_sum_32, x32);
// Вторая ветка: (B7 + A9) * X / Y - X
i16 b7_a9_sum = SUM(b7_16, a9_16);
i32 b7_a9_x_mul = IMUL(b7_a9_sum, X);
i16 b7_a9_x_div_y = IDIV(b7_a9_x_mul, y32);
i16 res2 = ISUB(b7_a9_x_div_y, X);
// Условие X * Y >= 0
i32 xy_mul = IMUL(X, Y);
ICMPResult(xy_mul, zero_32);
u1 cond = OR2(IEQ, IGT);
// Выбор результата
RES = MSb16x2(res2, res1, cond);
}
|
29.11.2024 16:50:21
Тема: Re:Применение искусственного интеллекта для обучения HLCCAD - 2024
|
Вадим Зинович
Темы: 0
Сообщений: 35
Мой профиль
|
Евгений Ленец:
28.11 15:13 С. Задача №9 0 / 100 [1]: Ошибка компиляции (mpc): Ошибка синтаксиса (строка 66): i16 temp2 = IDIV.
#define i8 int __bits(8)
#define i16 int __bits(16)
#define i32 int __bits(32)
#define u1 unsigned __bits(1)
#define u3 unsigned __bits(3)
#define u8 unsigned __bits(8)
#define u16 unsigned __bits(16)
#define u32 unsigned __bits(32)
#define u64 unsigned __bits(64)
#define u4 unsigned __bits(4)
i16 SIGN (i16 A) { return (A > 0) ? 1 : (A == 0) ? 0 : -1; }
i16 ABS (i16 A) { return (A > 0) ? A : (A * (-1)); }
u64 FACT (u4 A) { u64 RES = 1; while (A > 1) RES *= A--; return RES; }
u1 NOT (u1 A) { return ~A; }
u1 OR2 (u1 A, u1 B) { return A | B; }
u1 XOR2 (u1 A, u1 B) { return A ^ B; }
u1 AND2 (u1 A, u1 B) { return A & B; }
u8 DC (u1 CS, u3 X) { u8 d = 1; return (CS == 0) ? 0 : d << X; }
u4 CD (u8 X) { if (X == 0) return 0; u4 i = 0; while (!(X & 1)) { i++; X = X >> 1; } return (i << 1) + 1; }
u1 MS (u8 X, u3 A) { return ((X >> A) & 1); }
i16 CBW (i8 A) {return A;}
i32 CWD (i16 A) {return A;}
i16 x32Tox16 (i32 A) {return A;}
i8 x16Tox8 (i16 A) {return A;}
i16 CONST (i16 A) {return A;}
u4 CONST4 (u4 A) {return A;}
i16 SUM (i16 A, i16 B) {i16 C; C = A + B; return C;}
i16 ISUB (i16 A, i16 B) {i16 C; C = A - B; return C;}
i32 IMUL (i16 A, i16 B) {i32 C; C = A * B; return C;}
i16 IDIV (i32 A, i32 B) {i16 C; C = A / B; return C;}
u16 MSb16x2(u16 Zero, u16 One, u1 A) {return (A) ? One : Zero;}
u3 ICMP(i32 A, i32 B) {return (A > B) ? 4 : (A == B) ? 2 : 1;}
u1 IGT;
u1 IEQ;
u1 ILT;
void ICMPResult(i32 A, i32 B) {u3 C = ICMP(A,B); IGT = C == 4; IEQ = C == 2; ILT = C == 1;}
void main() {
i16 a9_16 = CBW(A9);
i16 b7_16 = CBW(B7);
i32 x32 = CWD(X);
i32 y32 = CWD(Y);
i32 a9_32 = CWD(a9_16);
i32 b7_32 = CWD(b7_16);
i32 xy_mul = IMUL(x32, y32);
i32 zero_32 = CWD(CONST(0));
ICMPResult(xy_mul, zero_32);
u1 cond = ILT;
i16 y_x_sum = ISUB(Y, X);
i32 y_x_sum_32 = CWD(y_x_sum);
i32 b7_y_mul = IMUL(b7_16, y32);
i32 temp1 = ISUB(y_x_sum_32, b7_y_mul);
i16 temp2 = IDIV
i16 temp2 = IDIV(temp1, x32);
i16 res1 = SUM(temp2, a9_16);
i32 y_x_sum_32_2 = IMUL(SUM(Y, X), a9_32);
i16 res2 = ISUB(IDIV(y_x_sum_32_2, b7_32), Y);
RES = MSb16x2(res2, res1, cond);
}
Здесь явно ошибка в копировании:
i16 temp2 = IDIV
i16 temp2 = IDIV(temp1, x32);
AI написал часть, после попросили дорешать и просто произошла ошибка при копировании задачи.
|
29.11.2024 17:11:41
Тема: Re:Применение искусственного интеллекта для обучения HLCCAD - 2024
|
Максим Куделько
Темы: 0
Сообщений: 17
Мой профиль
|
Задача №3
int __in __bits(16) a;
int __in __bits(16) b;
int __in __bits(8) c;
int __in __bits(8) d;
int __out __bits(16) RES;
#define i8 int __bits(8)
#define i16 int __bits(16)
#define i32 int __bits(32)
#define u1 unsigned __bits(1)
#define u3 unsigned __bits(3)
#define u8 unsigned __bits(8)
#define u16 unsigned __bits(16)
#define u32 unsigned __bits(32)
i16 SIGN(i16 A) { return (A > 0) ? 1 : (A == 0) ? 0 : -1; }
i16 ABS(i16 A) { return (A > 0) ? A : (A * (-1)); }
u1 NOT(u1 A) { return ~A; }
u1 OR2(u1 A, u1 B) { return A | B; }
u1 XOR2(u1 A, u1 B) { return A ^ B; }
u1 AND2(u1 A, u1 B) { return A & B; }
u8 DC(u1 CS, u3 X) { u8 d = 1; return (CS == 0) ? 0 : d << X; }
u1 MS(u8 X, u3 A) { return ((X >> A) & 1); }
u16 CBW(u8 A) { return A; }
u32 CWD(u16 A) { return A; }
i16 x32Tox16(i32 A) { return A; }
i8 x16Tox8(i16 A) { return A; }
i16 CONST(i16 A) { return A; }
i16 SUM(i16 A, i16 B) { i16 C; C = A + B; return C; }
i16 ISUB(i16 A, i16 B) { i16 C; C = A - B; return C; }
i32 IMUL(i16 A, i16 B) { i32 C; C = A * B; return C; }
i16 IDIV(i32 A, i32 B) { i16 C; C = A / B; return C; }
u16 MSb16x2(u16 Zero, u16 One, u1 A) { return (A) ? One : Zero; }
u3 ICMP(i32 A, i32 B) { return (A > B) ? 4 : (A == B) ? 2 : 1; }
u1 IGT;
u1 IEQ;
u1 ILT;
void ICMPResult(i32 A, i32 B) {
u3 C = ICMP(A, B);
IGT = C == 4;
IEQ = C == 2;
ILT = C == 1;
}
void main() {
// Приведение входных данных к нужным типам
i16 a16 = a;
i16 b16 = b;
i16 c16 = CBW(c);
i16 d16 = CBW(d);
i32 a32 = CWD(a16);
i32 b32 = CWD(b16);
i32 c32 = CWD(c16);
i32 d32 = CWD(d16);
i16 zero16 = CONST(0);
i16 one16 = CONST(1);
// Вычисление res1
i16 ac_sum = SUM(a16, c16); // a + c
i32 ac_d_mul = IMUL(ac_sum, d16); // (a + c) * d
i16 ac_d_div_b = IDIV(ac_d_mul, b32); // ((a + c) * d) / b
i16 ad_sum = SUM(a16, d16); // a + d
i32 ad_c_mul = IMUL(ad_sum, c16); // (a + d) * c
i16 ad_c_div_b = IDIV(ad_c_mul, b32); // ((a + d) * c) / b
i16 res1_temp = ISUB(ac_d_div_b, ad_c_div_b); // ((a + c) * d) / b - ((a + d) * c) / b
i16 res1 = res1_temp;
// Вычисление res2
i16 b_d_sum = SUM(b16, d16); // b + d
i32 b_d_sum_32 = CWD(b_d_sum); // Приведение b + d к i32
i16 a_div_b_d = IDIV(a32, b_d_sum_32); // a / (b + d)
i32 a_squared = IMUL(a16, a16); // a^2
i16 a_squared_16 = x32Tox16(a_squared); // Приведение a^2 к i16
i16 c_b_sum = SUM(c16, b16); // c + b
i32 c_b_sum_32 = CWD(c_b_sum); // Приведение c + b к i32
i16 a2_div_c_b = IDIV(a_squared, c_b_sum_32); // a^2 / (c + b)
i32 a_cubed = IMUL(a16, a_squared_16); // a^3
i16 a_cubed_16 = x32Tox16(a_cubed); // Приведение a^3 к i16
i16 d_c_sum = SUM(d16, c16); // d + c
i16 d_c_sum_1 = SUM(d_c_sum, one16); // d + c + 1
i32 d_c_sum_1_32 = CWD(d_c_sum_1); // Приведение d + c + 1 к i32
i16 a3_div_d_c_1 = IDIV(a_cubed, d_c_sum_1_32); // a^3 / (d + c + 1)
i16 res2_temp1 = SUM(a_div_b_d, a2_div_c_b); // a / (b + d) + a^2 / (c + b)
i16 res2 = ISUB(res2_temp1, a3_div_d_c_1); // a / (b + d) + a^2 / (c + b) - a^3 / (d + c + 1)
// Условие для выбора результата
ICMPResult(d32, b32); // Сравнение d и b
u1 cond1 = OR2(IEQ, IGT); // d >= b
ICMPResult(b32, zero16); // Сравнение b и 0
u1 cond2 = IGT; // b > 0
u1 cond = AND2(cond1, cond2); // Условие: d >= b и b > 0
// Выбор результата
RES = MSb16x2(res2, res1, cond);
}
|
|
|