AISD: pracownia B

Testy

  • Testy - testy Paczesiowej, testy jawne, pare dużych testów, generator testów

Generator

#!/usr/bin/perl -wl
 
$n = "01";
for $p (1..5) {
        for (1..5) {
                open(F, ">duze$n.in");
                select(F);
                print "5000 $p 999983";
                for (1..$p) {
                        $x = sprintf("%d%d%d\n%d%d%d\n%d%d%d", 
                                int(rand()*2), int(rand()*2), int(rand()*2),
                                int(rand()*2), int(rand()*2), int(rand()*2),
                                int(rand()*2), int(rand()*2), int(rand()*2));
                        $x =~ s/0/./g;
                        $x =~ s/1/x/g;
                        print $x;
                }
                $n++;
        }
}

Wyniki

http://www.ii.uni.wroc.pl/~mbi/dyd/aisd_10s/wyniki_B.html 0 oznacza brak poprawnej odpowiedzi na jakiś test

0:      Ale Gali
0:      And Kaje
0:      Ani Stoz
0:      Are Flin
0:      Bla Blab (test)
0:      Dan Blas
0:      Grz Kurd
0:      Kam Miel
0:      Kon Wypy
0:      Luk Syno
0:      Luk Toma
0:      Mal Jurk
0:      Mar Kowa
0:      Mic Glen
0:      Mik Ziem
0:      Pat Obar
0:      Paw Kali
0:      Ped ober (test)
0:      Pio Pole
0:      Pio Posa
0:      Pio Walk
0:      Pio Walk (test)
0:      Szy Lasz
0:      Wal Augu (test)
1176:   Dam Rusa
1236:   Jak Tarn
1520:   Paw Muri
1912:   Wik Jana
2196:   Krz Nowi
2496:   Mar Kola
2688:   Kar Kona
4484:   Mac Pacu
4620:   Mic Mazu
5340:   EK G (test)
5424:   Mat Naha (test)
5456:   Mat Naha
5532:   Pio Gajo
5836:   Mik Kali
6036:   Wal Augu (test)
6224:   Krz Parj
6224:   Mic Karp
6308:   Mar Ryba
7148:   Joa Bieg
7520:   Mac Maty
8684:   Paw Gawr (test)
8888:   Kac Krol
9644:   Mag Sara
9800:   Tom Losz
9984:   Raf Luka
10120:  Pio Bzow
10244:  Pio Ryba
10252:  Mar Janc
11040:  Pio Rzep
12380:  Paw Kacp
12628:  Bar Krok
12820:  Mac Jabl (test)
12908:  Mar Ocze
12912:  Daw Ryzn
13456:  Krz Ziel (test)
13476:  Mar Wlod
13784:  Mar Kacz
13972:  Luk Zapa
13996:  Bla Sala
14212:  Nha Nguy
14436:  Ale Bali
14492:  Dam Stra
14516:  Mic Roza
14792:  Krz Ziel
15084:  Mar Janu
15100:  Pio Krze
15312:  Dom Rogo
16516:  Paw Kici
16912:  Iza Bicz
18472:  Dom Rusa

Rozwiazanie (dude)

Rozwiazanie nie jest optymalne.

#include <stdio.h>
#include <string.h>
 
#define SIZE            1024
#define NEXT(i, j)      ((i << 5 | j) & 0x3FF)
 
unsigned int            tab[SIZE];
unsigned int            tab2[SIZE];
unsigned char           trans[SIZE][32];
unsigned int            squares[5];
unsigned int            input[] = {
                                0x1000, 0x0080, 0x0004,
                                0x0800, 0x0040, 0x0002,
                                0x0400, 0x0020, 0x0001,
                        };
unsigned int            mask[] = { 0x1ce7, 0x39ce, 0x739c };
 
int main()
{
        int             n, p, mod;
        int             i, j, k, t, modparam;
        unsigned int    tmp;
 
        scanf("%d %d %d", &n, &p, &mod);
        for(tmp = mod - 1, modparam = 0;
            !(tmp & (unsigned int) 31 << (sizeof(unsigned int)*8 - 5));
            tmp <<= 5, modparam++);
 
        t = p;
        while (t--) {
                for (i = 0; i < 9; i++) {
                        if (!(i % 3))
                                getchar_unlocked();
                        squares[t] |= getchar_unlocked() == '.' ? 0 : input[i];
                }
        }
 
        for (i = 0; i < SIZE; i++) {
                tmp = i << 5;
                for (j = 0; j < 32; j++, tmp++) {
                        for (t = 0; t < p; t++) {
                                for (k = 0; k < 3; k++) {
                                        if (!((tmp & mask[k]) ^ (squares[t] << k))) {
                                                goto OUT;
                                        }
                                }
                        }
                        trans[i][j] = 1;
                        tab[NEXT(i,j)]++;
                        OUT: {}
                }
        }
 
        n -= 3;
        while (n--) {
                memset(tab2, 0, sizeof tab);
                for (i = 0; i < SIZE; i++) {
                        tmp = NEXT(i,0);
                        for (j = 0; j < 32; j++) {
                                tab2[tmp++] += trans[i][j] * tab[i];
                        }
                }
                memcpy(tab, tab2, sizeof tab);
                if (!(n % modparam))
                        for (i = 0; i < SIZE; tab[i++] %= mod);
        }
 
        for (n = 0, i = 0; i < SIZE; n = (n + tab[i++]) % mod);
        printf("%d\n", n);
 
        return 0;
}
 
aisd/10.pracownia-b.txt · ostatnio zmienione: 2010/04/20 13:12 przez d
 
Wszystkie treści w tym wiki, którym nie przyporządkowano licencji, podlegają licencji:MIT License
Recent changes RSS feed