diff --git a/src/sage/combinat/designs/database.py b/src/sage/combinat/designs/database.py index 332a29ed14b..fd430b7f877 100644 --- a/src/sage/combinat/designs/database.py +++ b/src/sage/combinat/designs/database.py @@ -68,6 +68,7 @@ :func:`OA(12,276) `, :func:`OA(12,298) `, :func:`OA(12,342) `, + :func:`OA(20,352) `, :func:`OA(12,474) `, :func:`OA(9,514) `, :func:`OA(11,640) `, @@ -2835,6 +2836,62 @@ def OA_12_342(): M = OA_from_Vmt(10,31,[0,1,3,57,128,247,289,239,70,271,96]) return M +def OA_20_352(): + r""" + Returns an OA(20,352) + + Published by Julian R. Abel in [AbelThesis]_. + + .. SEEALSO:: + + :func:`sage.combinat.designs.orthogonal_arrays.OA_from_quasi_difference_matrix` + + EXAMPLES:: + + sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array + sage: from sage.combinat.designs.database import OA_20_352 + sage: OA = OA_20_352() # not tested (~25s) + sage: print is_orthogonal_array(OA,20,352,2) # not tested (~25s) + True + + The design is available from the general constructor:: + + sage: designs.orthogonal_array(20,352,existence=True) + True + """ + # Column 8, line 6 : 4,25 became 4,27 + # line 17: 3,0 became 3,None + # Column 14,line 1 : 4,1 became 4,0 + # Column 18,line 18: 0,0 became 0,None + A = [ + [(0,None),(0, None),(0,None),(0,None),(0,None),(0,None),(0,None),(0,None),(0,None),(0,None),(0,None),(0,None),(1,None),(4,None),(9,None),(5, None),(3,None),(3,None),(5,None)], + [(0,None),(1, None),(2, 13),(3, 2),(4, 0),(5, 8),(6, 30),(7, 0),(8, 13),(9, 26),(10, 10),(1, 29),(0, 9),(1, 11),(4, 0),(9, 23),(5, 7),(3, 25),(3, 29)], + [(0,None),(2, None),(4, 29),(6, 6),(8, 3),(10, 18),(1, 21),(3, 24),(5, 4),(7, 7),(9, 29),(4, 22),(1, 2),(0, 27),(1, 10),(4, 13),(9, 22),(5, 6),(3, 20)], + [(0,None),(3, None),(6, 25),(9, 21),(1, 23),(4, 25),(7, 12),(10, 16),(2, 26),(5, 27),(8, 19),(9, 27),(4, 6),(1, 5),(0, 6),(1, 15),(4, 10),(9, 2),(5, 14)], + [(0,None),(4, None),(8, 3),(1, 23),(5, 17),(9, 7),(2, 7),(6, 25),(10, 27),(3, 30),(7, 5),(5, 23),(9, 24),(4, 16),(1, 12),(0, 8),(1, 12),(4, 17),(9, 28)], + [(0,None),(5, None),(10, 10),(4, 27),(9, 4),(3, 24),(8, 21),(2, 3),(7, 22),(1, 21),(6, 24),(3, 28),(5, 3),(9, 26),(4, 29),(1, 9),(0, 19),(1, 2),(4, 0)], + [(0,None),(6, None),(1, 11),(7, 9),(2, 14),(8, 15),(3, 11),(9, 7),(4, 27),(10, 13),(5, 4),(3, 18),(3, 0),(5, 5),(9, 2),(4, 7),(1, 30),(0, 10),(1,None)], + [(0,None),(7, None),(3, 25),(10, 7),(6, 29),(2, 4),(9, 10),(5, 22),(1, 25),(8, 18),(4, 11),(5, 21),(3, 29),(3, 14),(5, 12),(9, 25),(4, 2),(1, 13),(0, 19)], + [(0,None),(8, None),(5, 27),(2, 30),(10, 24),(7, 4),(4, 6),(1, 4),(9, 5),(6, 27),(3, 0),(9, 2),(5, 20),(3, 10),(3, 13),(5, 2),(9, 5),(4, 21),(1, 12)], + [(0,None),(9, None),(7, 21),(5, 0),(3, 9),(1, 13),(10, 17),(8, 1),(6, 15),(4, 30),(2, 28),(4, 3),(9, 28),(5, 0),(3,None),(3, 2),(5, 23),(9, 10),(4, 15)], + [(0,None),(10,None),(9, 29),(8, 8),(7, 6),(6, 6),(5, 18),(4, 20),(3, 22),(2, 7),(1, 13),(1, 24),(4, 13),(9, 14),(5, 29),(3, 27),(3, 16),(5, 12),(9, 4)], + [(0,None),(6, 4),(2, 17),(10, 16),(8, 26),(7, 17),(7, 21),(8, 9),(10, 2),(2, 25),(6, 27),(0, 20),(10, 8),(7, 12),(2, 26),(6, 22),(8, 8),(8, 16),(6, 13)], + [(0,None),(7, 4),(4, 1),(2, 0),(1, 8),(1, 18),(2, 10),(4, 9),(7, 2),(0, 11),(5, 27),(10, 27),(0, 16),(10, 19),(7, 0),(2, 2),(6, 26),(8, 30),(8, 6)], + [(0,None),(8, 4),(6, 19),(5, 24),(5, 16),(6, 20),(8,None),(0, 17),(4, 5),(9, 23),(4, 27),(7, 22),(10, 25),(0, 23),(10, 11),(7, 10),(2, 16),(6, 28),(8, 3)], + [(0,None),(9, 4),(8, 14),(8, 30),(9, 16),(0, 0),(3, 25),(7, 30),(1, 27),(7, 4),(3, 10),(2, 5),(7, 3),(10, 11),(0, 21),(10,None),(7, 7),(2, 19),(6, 24)], + [(0,None),(10, 4),(10, 30),(0, 12),(2, 9),(5, 9),(9, 0),(3, 14),(9, 17),(5, 17),(2, 18),(6, 10),(2, 0),(7, 16),(10, 23),(0, 1),(10, 26),(7, 18),(2, 9)], + [(0,None),(0, 4),(1, 13),(3, 28),(6, 25),(10, 28),(4, 16),(10, 17),(6, 23),(3, 7),(1, 22),(8, 22),(6, 27),(2, 29),(7, 5),(10, 14),(0, 12),(10, 14),(7, 6)], + [(0,None),(1, 4),(3, 6),(6, 4),(10, 13),(4, 12),(10, 15),(6, 27),(3,None),(1, 26),(0, 3),(8, 21),(8, 26),(6, 13),(2, 27),(7, 11),(10, 5),(0, 3),(10, 3)], + [(0,None),(2, 4),(5, 12),(9, 27),(3, 7),(9, 21),(5,None),(2, 22),(0, 28),(10, 30),(10, 25),(6, 12),(8, 6),(8, 30),(6, 28),(2, 6),(7, 26),(10, 3),(0,None)], + [(0,None),(3, 4),(7, 22),(1, 7),(7, 8),(3, 12),(0, 27),(9, 1),(8, 17),(8, 4),(9, 12),(2, 16),(6, 23),(8, 14),(8, 2),(6, 26),(2, 14),(7, 22),(10, 30)], + [(0,None),(4, 4),(9, 21),(4, 25),(0, 9),(8, 23),(6, 5),(5, 20),(5, 13),(6, 19),(8, 0),(7, 30),(2, 29),(6, 24),(8, 18),(8, 10),(6, 9),(2, 20),(7, 4)], + [(0,None),(5, 4),(0, 25),(7, 4),(4, 20),(2, 3),(1,None),(1, 21),(2,None),(4, 26),(7, 1),(10, 23),(7, 20),(2, 3),(6, 5),(8, 19),(8, 9),(6, 23),(2, 7)], + ] + + Y = [None, 0, 1, 2, 18, 5, 11, 4, 13, 26, 25, 29, 24, 7, 20, 19, 9, 12, 15] + + return _helper_function_when_n_is_prime_times_power_of_2(20,352,zip(*A),Y) + def OA_12_474(): r""" Returns an OA(12,474) @@ -3198,6 +3255,7 @@ def _helper_function_when_n_is_prime_times_power_of_2(k,n,A,Y): 276 : (12 , OA_12_276), 298 : (12 , OA_12_298), 342 : (12 , OA_12_342), + 352 : (20 , OA_20_352), 474 : (12 , OA_12_474), 514 : (9 , OA_9_514), 640 : (11 , OA_11_640), diff --git a/src/sage/combinat/designs/latin_squares.py b/src/sage/combinat/designs/latin_squares.py index d8db2cbc148..13e7e62a98f 100644 --- a/src/sage/combinat/designs/latin_squares.py +++ b/src/sage/combinat/designs/latin_squares.py @@ -40,7 +40,7 @@ 280| 7 280 6 282 6 12 6 7 15 288 6 6 6 292 6 6 7 10 10 12 300| 7 7 7 7 15 15 6 306 7 7 7 310 7 312 7 10 7 316 7 10 320| 15 15 6 16 8 12 6 7 7 9 6 330 7 8 7 6 7 336 6 7 - 340| 6 10 10 342 7 7 6 346 6 348 8 12 10 352 6 9 7 7 6 358 + 340| 6 10 10 342 7 7 6 346 6 348 8 12 18 352 6 9 7 7 6 358 360| 7 360 6 7 7 7 6 366 15 15 7 15 7 372 7 15 7 13 7 378 380| 7 12 7 382 15 15 7 15 7 388 7 16 7 7 7 7 8 396 7 7 400| 15 400 7 15 11 8 7 15 7 408 7 13 8 12 10 9 15 15 7 418 @@ -78,7 +78,7 @@ 280| 300| 320| - - 340| - - + 340| - 360| - - 380| - 400| - -