From c5fcf7179a83ef65c86c6a4a390029149e518649 Mon Sep 17 00:00:00 2001 From: Franciszek Malinka Date: Tue, 5 Oct 2021 21:49:54 +0200 Subject: Duzy commit ze smieciami --- semestr-4/ask/lista5/zad3.c | 60 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 semestr-4/ask/lista5/zad3.c (limited to 'semestr-4/ask/lista5/zad3.c') diff --git a/semestr-4/ask/lista5/zad3.c b/semestr-4/ask/lista5/zad3.c new file mode 100644 index 0000000..1ce9067 --- /dev/null +++ b/semestr-4/ask/lista5/zad3.c @@ -0,0 +1,60 @@ +#include +#include +#include + +uint32_t puzzle3(uint32_t n, uint32_t d); + +// uint32_t divv(uint32_t edi, uint32_t esi) { +// uint64_t rdi = edi; +// uint64_t rsi = esi; +// rsi <<= 32; +// uint8_t edx = 32; +// uint32_t ecx = 0x80000000; +// uint32_t eax = 0; +// L3: +// rdi += rdi; +// int64_t r8 = rdi; +// r8 -= rsi; +// if (r8 < 0) { +// goto L2; +// } +// eax |= ecx; +// rdi = r8; +// L2: +// ecx >>= 1; +// edx--; +// if (edx != 0) { +// goto L3; +// } +// return eax; +// } + +uint32_t decoded(uint32_t n, uint32_t d) { + uint64_t N = n; + uint64_t D = (uint64_t)d << 32; + + uint32_t bit = 0x80000000; + uint32_t result = 0; + for (uint32_t edx = 32; edx > 0; edx--) { + N += N; + if ((int64_t)(N - D) >= 0) { + result |= bit; + N -= D; + } + bit >>= 1; + } + return result; +} + +int main() { + for (uint32_t n=0; n <= 1000; ++n) { + for (uint32_t d=1; d <= 1000; ++d) { + if (puzzle3(n,d) != decoded(n, d)) { + printf("%d %d\n", n, d); + printf("%u %u\n", puzzle3(n, d), decoded(n, d)); + return 0; + } + } + } + printf("%d\n", puzzle3(1000000000, 2)); +} \ No newline at end of file -- cgit v1.2.3