Compare commits
No commits in common. "6407f8f4780e667f0a20e467d60973594ffa20e0" and "46b700e4f3051e5b786ecf0149477dbc5e9c52fb" have entirely different histories.
6407f8f478
...
46b700e4f3
7 changed files with 0 additions and 344 deletions
45
cpu/cache.c
45
cpu/cache.c
|
@ -1,45 +0,0 @@
|
||||||
#include <stdio.h>
|
|
||||||
#define N 1024
|
|
||||||
|
|
||||||
int gcd(int a, int b);
|
|
||||||
int main() {
|
|
||||||
int n, d;
|
|
||||||
int i, j, k;
|
|
||||||
/* to use shorter types such as short is a BAD idea */
|
|
||||||
static int A[N][N], B[N][N], C[N][N];
|
|
||||||
int res = 0;
|
|
||||||
|
|
||||||
scanf("%d %d", &n, &d);
|
|
||||||
|
|
||||||
for (i = 0; i < n; ++i)
|
|
||||||
for (j = i; j < n; ++j) {
|
|
||||||
//printf("%d %d\n", i ,j);
|
|
||||||
A[i][j] = gcd(i + 2,j + 2);
|
|
||||||
A[j][i] = A[i][j];
|
|
||||||
}
|
|
||||||
//printf("nya!\n");
|
|
||||||
for (i = 0; i < n; ++i)
|
|
||||||
for (j = i; j < n; ++j) {
|
|
||||||
//printf("%d %d\n", i ,j);
|
|
||||||
B[i][j] = gcd(n - i,n - j);
|
|
||||||
B[j][i] = B[i][j];
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < n; ++i)
|
|
||||||
for (j = 0; j < n; ++j)
|
|
||||||
for (k = 0; k < n; ++k) {
|
|
||||||
//printf("i:%d, j^%d, k^%d\n", i, j, k);
|
|
||||||
C[i][j] += A[i][k] * B[j][k];
|
|
||||||
}
|
|
||||||
for (i = 0; i < n; ++i)
|
|
||||||
for (j = 0; j < n; ++j)
|
|
||||||
if (C[i][j] % d == 0)
|
|
||||||
++res;
|
|
||||||
|
|
||||||
printf("%d", res);
|
|
||||||
}
|
|
||||||
|
|
||||||
int gcd(int a, int b) {
|
|
||||||
return (a == 0) ? b : gcd(b % a, a);
|
|
||||||
}
|
|
||||||
|
|
68
cpu/cpu.c
68
cpu/cpu.c
|
@ -1,68 +0,0 @@
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
int check_registers(int a, int b, int max_reg);
|
|
||||||
int main() {
|
|
||||||
int max_reg = 4;
|
|
||||||
#ifdef REGISTERS
|
|
||||||
max_reg = REGISTERS;
|
|
||||||
#endif
|
|
||||||
/* A, B, C, D. Indice + 5 */
|
|
||||||
uint8_t reg[4] = {0, 0, 0, 0};
|
|
||||||
int i;
|
|
||||||
uint8_t a, b;
|
|
||||||
uint8_t x;
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
|
||||||
printf("%hhu\n", x);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
x = getchar() - '0';
|
|
||||||
#ifdef _DEBUG
|
|
||||||
printf("x:%hhu\n", x);
|
|
||||||
#endif
|
|
||||||
switch (x) {
|
|
||||||
case 0:
|
|
||||||
return 0;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
scanf("%hhu %hhu\n", &a, &b);
|
|
||||||
if (check_registers(a, b, max_reg)) {
|
|
||||||
printf("-1\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
reg[a-5] += reg[b-5];
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
scanf("%hhu %hhu\n", &a, &b);
|
|
||||||
if(check_registers(a, b, max_reg)) {
|
|
||||||
printf("-1\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
reg[a-5] -= reg[b-5];
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
scanf("%hhu %hhu\n", &a, &b);
|
|
||||||
if(check_registers(a, 0, max_reg)) {
|
|
||||||
printf("-1\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
reg[a-5] = b;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
for (i = 0; i < max_reg; ++i)
|
|
||||||
printf("%hhu ", reg[i]);
|
|
||||||
putchar('\n');
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int check_registers(int a, int b, int max_reg) {
|
|
||||||
a -= 5;
|
|
||||||
b -= 5;
|
|
||||||
if ((a >= max_reg) || (b >= max_reg))
|
|
||||||
return 1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
58
cpu/cuda.c
58
cpu/cuda.c
|
@ -1,58 +0,0 @@
|
||||||
#include <stdio.h>
|
|
||||||
#include <math.h>
|
|
||||||
#define THR 32
|
|
||||||
#define MEM 128
|
|
||||||
#define REG 2
|
|
||||||
#define MAXTHR 1536
|
|
||||||
#define MAXMEM 49152
|
|
||||||
#define MAXREG 32768
|
|
||||||
|
|
||||||
|
|
||||||
int check_use(int x, const int frac);
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
int reg, thr, mem;
|
|
||||||
int nbreg, nbmem, nbthr;
|
|
||||||
int nthr;
|
|
||||||
int min = 0;
|
|
||||||
|
|
||||||
freopen("cuda.in", "r", stdin);
|
|
||||||
#ifndef _DEBUG
|
|
||||||
freopen("cuda.out", "w", stdout);
|
|
||||||
#endif
|
|
||||||
scanf("%d %d %d", &thr, ®, &mem);
|
|
||||||
|
|
||||||
nthr = check_use(thr, THR);
|
|
||||||
nbthr = (int) MAXTHR / nthr;
|
|
||||||
nbreg = (int) MAXREG / (nthr*check_use(reg, REG));
|
|
||||||
nbmem = (int) MAXMEM / check_use(mem, MEM);
|
|
||||||
|
|
||||||
|
|
||||||
if ((nbthr <= nbreg) && (nbthr <= nbmem))
|
|
||||||
min = nbthr;
|
|
||||||
else if ((nbreg <= nbthr) && (nbreg <= nbmem))
|
|
||||||
min = nbreg;
|
|
||||||
else if ((nbmem <= nbthr) && (nbmem <= nbreg))
|
|
||||||
min = nbmem;
|
|
||||||
#ifdef _DEBUG
|
|
||||||
printf("used: %d %d %d\n", check_use(thr, THR), nthr*check_use(reg, REG), check_use(mem, MEM));
|
|
||||||
printf("By threads: %d, by registers: %d, by memory: %d\n", nbthr, nbreg, nbmem);
|
|
||||||
#endif
|
|
||||||
printf("%d", (int)round((thr*min*100)/(double)MAXTHR));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int check_use(int x, const int frac) {
|
|
||||||
int real_x = frac;
|
|
||||||
while (1) {
|
|
||||||
real_x += frac;
|
|
||||||
if (real_x >= x) {
|
|
||||||
x = real_x;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#ifdef _DEBUG
|
|
||||||
printf("%d %d\n", x, real_x);
|
|
||||||
#endif
|
|
||||||
return x;
|
|
||||||
}
|
|
94
cpu/flag.c
94
cpu/flag.c
|
@ -1,94 +0,0 @@
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
int check_registers(int a, int b, int max_reg);
|
|
||||||
int main() {
|
|
||||||
int max_reg = 4;
|
|
||||||
int zf = 0, to_exec = 1;
|
|
||||||
#ifdef REGISTERS
|
|
||||||
max_reg = REGISTERS;
|
|
||||||
#endif
|
|
||||||
/* A, B, C, D. Indice - 5 */
|
|
||||||
uint8_t reg[4] = {0, 0, 0, 0};
|
|
||||||
int i;
|
|
||||||
uint8_t a, b;
|
|
||||||
uint8_t x;
|
|
||||||
|
|
||||||
while (1) {;
|
|
||||||
scanf("%hhu", &x);
|
|
||||||
#ifdef _DEBUG
|
|
||||||
printf("x:%hhu\n", x);
|
|
||||||
#endif
|
|
||||||
if ((x & (1 << 7)) && !zf) {
|
|
||||||
to_exec = 0;
|
|
||||||
//zf = 0;
|
|
||||||
}
|
|
||||||
x &= 0x7F;
|
|
||||||
#ifdef _DEBUG
|
|
||||||
printf("zf:%d, to_exec:%d\n", zf, to_exec);
|
|
||||||
#endif
|
|
||||||
if (to_exec == 0) {
|
|
||||||
if ((x >= 1) && (x <= 3))
|
|
||||||
scanf("%hhu %hhu\n", &a, &b);
|
|
||||||
to_exec = 1;
|
|
||||||
zf = 0;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (x) {
|
|
||||||
case 0:
|
|
||||||
return 0;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
scanf("%hhu %hhu\n", &a, &b);
|
|
||||||
if (check_registers(a, b, max_reg)) {
|
|
||||||
printf("-1\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
reg[a-5] += reg[b-5];
|
|
||||||
if (reg[a-5] == 0)
|
|
||||||
zf = 1;
|
|
||||||
else
|
|
||||||
zf = 0;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
scanf("%hhu %hhu\n", &a, &b);
|
|
||||||
if(check_registers(a, b, max_reg)) {
|
|
||||||
printf("-1\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
reg[a-5] -= reg[b-5];
|
|
||||||
if (reg[a-5] == 0)
|
|
||||||
zf = 1;
|
|
||||||
else
|
|
||||||
zf = 0;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
scanf("%hhu %hhu\n", &a, &b);
|
|
||||||
if(check_registers(a, 0, max_reg)) {
|
|
||||||
printf("-1\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
reg[a-5] = b;
|
|
||||||
if (reg[a-5] == 0)
|
|
||||||
zf = 1;
|
|
||||||
else
|
|
||||||
zf = 0;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
for (i = 0; i < max_reg; ++i)
|
|
||||||
printf("%hhu ", reg[i]);
|
|
||||||
putchar('\n');
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
to_exec = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int check_registers(int a, int b, int max_reg) {
|
|
||||||
a -= 5;
|
|
||||||
b -= 5;
|
|
||||||
if ((a >= max_reg) || (b >= max_reg))
|
|
||||||
return 1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,6 +0,0 @@
|
||||||
char* whatisyourname() {
|
|
||||||
char *res = calloc(256+1, sizeof(char));
|
|
||||||
for (int i = 0; i < 256; ++i)
|
|
||||||
res[i] = '1';
|
|
||||||
return res;
|
|
||||||
}
|
|
46
cpu/pdp_rw.c
46
cpu/pdp_rw.c
|
@ -1,46 +0,0 @@
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
typedef uint8_t byte;
|
|
||||||
typedef uint16_t word;
|
|
||||||
typedef uint16_t adr;
|
|
||||||
|
|
||||||
byte mem[1 << 16];
|
|
||||||
|
|
||||||
byte b_read (adr a) {
|
|
||||||
return mem[a];
|
|
||||||
}
|
|
||||||
void b_write (adr a, byte val) {
|
|
||||||
mem[a] = val;
|
|
||||||
}
|
|
||||||
word w_read (adr a) {
|
|
||||||
return *(word*)&mem[a];
|
|
||||||
}
|
|
||||||
void w_write (adr a, word val) {
|
|
||||||
*(word*)&mem[a] = val;
|
|
||||||
}
|
|
||||||
void load_file() {
|
|
||||||
adr a;
|
|
||||||
int n, i;
|
|
||||||
byte x;
|
|
||||||
|
|
||||||
while(scanf("%hx %x", &a, &n) != EOF) {
|
|
||||||
//printf("%x", n);
|
|
||||||
for (i = 0; i < n; ++i) {
|
|
||||||
//printf("number %d\n", i);
|
|
||||||
scanf("%hhx", &x);
|
|
||||||
b_write(a+i, x);
|
|
||||||
//printf("Read %hx\n", mem[a+2*i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void mem_dump(adr start, word n) {
|
|
||||||
for (int i = 0; i < n; i+=2) {
|
|
||||||
//printf("%d:read from %hx: %hx\n", i,start+i, *(word*)&mem[start+i]);
|
|
||||||
printf("%06ho : %06ho\n", start+i, *(word*)&mem[start+i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//int main() {
|
|
||||||
// load_file();
|
|
||||||
// mem_dump(0x40, 4);
|
|
||||||
//}
|
|
|
@ -1,27 +0,0 @@
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
unsigned N, i, page_n, log;
|
|
||||||
|
|
||||||
scanf("%u", &N);
|
|
||||||
unsigned *mem = (unsigned*)calloc(N, sizeof(unsigned));
|
|
||||||
for (i = 0; i < N; ++i) {
|
|
||||||
scanf("%x", &mem[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
scanf("%x", &log);
|
|
||||||
page_n = (log >> 26) & 0b111111;
|
|
||||||
if (page_n < N) {
|
|
||||||
printf("%x", mem[page_n]+(log << 6 >> 6));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
printf("error");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
free(mem);
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
Reference in a new issue