Orbiter 2022
Combinatorial Objects
interface_combinatorics.cpp
Go to the documentation of this file.
1/*
2 * interface_combinatorics.cpp
3 *
4 * Created on: Apr 11, 2020
5 * Author: betten
6 */
7
8
9
10
11
12
13#include "orbiter.h"
14
15using namespace std;
16
17
18namespace orbiter {
19namespace layer5_applications {
20namespace user_interface {
21
22
23
25{
26 f_diophant = FALSE;
27 Diophant_description = NULL;
28
29 f_diophant_activity = FALSE;
30 Diophant_activity_description = NULL;
31
32 f_bent = FALSE;
33 bent_n = 0;
34
35 f_random_permutation = FALSE;
36 random_permutation_degree = 0;
37 //random_permutation_fname_csv = NULL;
38
39 f_read_poset_file = FALSE;
40 //read_poset_file_fname;
41
42 f_grouping = FALSE;
43 grouping_x_stretch = 0.7;
44
45 f_list_parameters_of_SRG = FALSE;
46 list_parameters_of_SRG_v_max = 0;
47
48 f_conjugacy_classes_Sym_n = FALSE;
49 conjugacy_classes_Sym_n_n = 0;
50
51 f_tree_of_all_k_subsets = FALSE;
52 tree_of_all_k_subsets_n = 0;
53 tree_of_all_k_subsets_k = 0;
54
55 f_Delandtsheer_Doyen = FALSE;
56 Delandtsheer_Doyen_description = NULL;
57
58
59 f_tdo_refinement = FALSE;
60 Tdo_refinement_descr = NULL;
61
62 f_tdo_print = FALSE;
63 //tdo_print_fname;
64
65 f_convert_stack_to_tdo = FALSE;
66 //stack_fname;
67
68 f_maximal_arc_parameters = FALSE;
69 maximal_arc_parameters_q = 0;
70 maximal_arc_parameters_r = 0;
71
72 f_arc_parameters = FALSE;
73 arc_parameters_q = arc_parameters_s = arc_parameters_r = 0;
74
75
76 f_pentomino_puzzle = FALSE;
77
78 f_regular_linear_space_classify = FALSE;
79 Rls_descr = NULL;
80
81 f_draw_layered_graph = FALSE;
82 //draw_layered_graph_fname;
83 Layered_graph_draw_options = NULL;
84
85 f_read_solutions_and_tally = FALSE;
86 //read_solutions_and_tally_fname
87 read_solutions_and_tally_sz = 0;
88
89
90 f_make_elementary_symmetric_functions = FALSE;
91 make_elementary_symmetric_functions_n = 0;
92 make_elementary_symmetric_functions_k_max = 0;
93
94 f_Dedekind_numbers = FALSE;
95 Dedekind_n_min = 0;
96 Dedekind_n_max = 0;
97 Dedekind_q_min = 0;
98 Dedekind_q_max = 0;
99
100 f_rank_k_subset = FALSE;
101 rank_k_subset_n = 0;
102 rank_k_subset_k = 0;
103 //rank_k_subset_text;
104
105 f_geometry_builder = FALSE;
106 Geometry_builder_description = NULL;
107
108}
109
110
112 std::string *argv, int i, int verbose_level)
113{
115
116 if (ST.stringcmp(argv[i], "-diophant") == 0) {
117 cout << "-diophant <description> " << endl;
118 }
119 else if (ST.stringcmp(argv[i], "-diophant_activity") == 0) {
120 cout << "-diophant_activity <description> " << endl;
121 }
122 else if (ST.stringcmp(argv[i], "-bent") == 0) {
123 cout << "-bent <int : n>" << endl;
124 }
125 else if (ST.stringcmp(argv[i], "-random_permutation") == 0) {
126 cout << "-random_permutation <ind : degree> <string : <fname_csv>" << endl;
127 }
128 else if (ST.stringcmp(argv[i], "-read_poset_file") == 0) {
129 cout << "-read_poset_file <string : file_name>" << endl;
130 }
131 else if (ST.stringcmp(argv[i], "-read_poset_file_with_grouping") == 0) {
132 cout << "-read_poset_file_with_grouping <string : file_name> <double : x_stretch>" << endl;
133 }
134 else if (ST.stringcmp(argv[i], "-list_parameters_of_SRG") == 0) {
135 cout << "-list_parameters_of_SRG <int : v_max>" << endl;
136 }
137 else if (ST.stringcmp(argv[i], "-conjugacy_classes_Sym_n") == 0) {
138 cout << "-conjugacy_classes_Sym_n <int : n>" << endl;
139 }
140 else if (ST.stringcmp(argv[i], "-tree_of_all_k_subsets") == 0) {
141 cout << "-tree_of_all_k_subsets <int : n> <int : k>" << endl;
142 }
143 else if (ST.stringcmp(argv[i], "-Delandtsheer_Doyen") == 0) {
144 cout << "-Delandtsheer_Doyen <description>" << endl;
145 }
146 else if (ST.stringcmp(argv[i], "-tdo_refinement") == 0) {
147 cout << "-tdo_refinement <options>" << endl;
148 }
149 else if (ST.stringcmp(argv[i], "-tdo_print") == 0) {
150 cout << "-tdo_print <string : tdo-fname>" << endl;
151 }
152 else if (ST.stringcmp(argv[i], "-convert_stack_to_tdo") == 0) {
153 cout << "-convert_stack_to_tdo <string : stack_fname>" << endl;
154 }
155 else if (ST.stringcmp(argv[i], "-maximal_arc_parameters") == 0) {
156 cout << "-maximal_arc_parameters <int : q > < int : r >" << endl;
157 }
158 else if (ST.stringcmp(argv[i], "-arc_parameters") == 0) {
159 cout << "-arc_parameters <int : q > <int : s > < int : r >" << endl;
160 }
161 else if (ST.stringcmp(argv[i], "-pentomino_puzzle") == 0) {
162 cout << "-pentomino_puzzle" << endl;
163 }
164 else if (ST.stringcmp(argv[i], "-regular_linear_space_classify") == 0) {
165 cout << "-regular_linear_space_classify <description>" << endl;
166 }
167 else if (ST.stringcmp(argv[i], "-draw_layered_graph") == 0) {
168 cout << "-draw_layered_graph <string : fname> <layered_graph_options>" << endl;
169 }
170 else if (ST.stringcmp(argv[i], "-read_solutions_and_tally") == 0) {
171 cout << "-read_solutions_and_tally <string : fname> <int :read_solutions_and_tally_sz>" << endl;
172 }
173 else if (ST.stringcmp(argv[i], "-make_elementary_symmetric_functions") == 0) {
174 cout << "-make_elementary_symmetric_functions <int : n> <int :k_max>" << endl;
175 }
176 else if (ST.stringcmp(argv[i], "-Dedekind_numbers") == 0) {
177 cout << "-Dedekind_numbers <int : n_min> <int : n_max> <int : q_min> <int : q_max> " << endl;
178 }
179 else if (ST.stringcmp(argv[i], "-rank_k_subset") == 0) {
180 cout << "-rank_k_subset <int : n> <int : k> <string : text> " << endl;
181 }
182 else if (ST.stringcmp(argv[i], "-geometry_builder") == 0) {
183 cout << "-geometry_builder <description> -end" << endl;
184 }
185}
186
188 std::string *argv, int i, int verbose_level)
189{
191 if (i >= argc) {
192 return false;
193 }
194 if (ST.stringcmp(argv[i], "-diophant") == 0) {
195 return true;
196 }
197 else if (ST.stringcmp(argv[i], "-diophant_activity") == 0) {
198 return true;
199 }
200 else if (ST.stringcmp(argv[i], "-bent") == 0) {
201 return true;
202 }
203 else if (ST.stringcmp(argv[i], "-random_permutation") == 0) {
204 return true;
205 }
206 else if (ST.stringcmp(argv[i], "-read_poset_file") == 0) {
207 return true;
208 }
209 else if (ST.stringcmp(argv[i], "-read_poset_file_with_grouping") == 0) {
210 return true;
211 }
212 else if (ST.stringcmp(argv[i], "-list_parameters_of_SRG") == 0) {
213 return true;
214 }
215 else if (ST.stringcmp(argv[i], "-conjugacy_classes_Sym_n") == 0) {
216 return true;
217 }
218 else if (ST.stringcmp(argv[i], "-tree_of_all_k_subsets") == 0) {
219 return true;
220 }
221 else if (ST.stringcmp(argv[i], "-Delandtsheer_Doyen") == 0) {
222 return true;
223 }
224 else if (ST.stringcmp(argv[i], "-tdo_refinement") == 0) {
225 return true;
226 }
227 else if (ST.stringcmp(argv[i], "-tdo_print") == 0) {
228 return true;
229 }
230 else if (ST.stringcmp(argv[i], "-convert_stack_to_tdo") == 0) {
231 return true;
232 }
233 else if (ST.stringcmp(argv[i], "-maximal_arc_parameters") == 0) {
234 return true;
235 }
236 else if (ST.stringcmp(argv[i], "-arc_parameters") == 0) {
237 return true;
238 }
239 else if (ST.stringcmp(argv[i], "-pentomino_puzzle") == 0) {
240 return true;
241 }
242 else if (ST.stringcmp(argv[i], "-regular_linear_space_classify") == 0) {
243 return true;
244 }
245 else if (ST.stringcmp(argv[i], "-draw_layered_graph") == 0) {
246 return true;
247 }
248 else if (ST.stringcmp(argv[i], "-read_solutions_and_tally") == 0) {
249 return true;
250 }
251 else if (ST.stringcmp(argv[i], "-make_elementary_symmetric_functions") == 0) {
252 return true;
253 }
254 else if (ST.stringcmp(argv[i], "-Dedekind_numbers") == 0) {
255 return true;
256 }
257 else if (ST.stringcmp(argv[i], "-rank_k_subset") == 0) {
258 return true;
259 }
260 else if (ST.stringcmp(argv[i], "-geometry_builder") == 0) {
261 return true;
262 }
263 return false;
264}
265
267 std::string *argv, int &i, int verbose_level)
268{
269 int f_v = (verbose_level >= 1);
271
272 if (f_v) {
273 cout << "interface_combinatorics::read_arguments" << endl;
274 }
275
276
277 if (f_v) {
278 cout << "interface_combinatorics::read_arguments the next argument is " << argv[i] << endl;
279 }
280
281 if (ST.stringcmp(argv[i], "-diophant") == 0) {
282 f_diophant = TRUE;
283 if (f_v) {
284 cout << "-diophant " << endl;
285 }
286 Diophant_description = NEW_OBJECT(solvers::diophant_description);
287 i += Diophant_description->read_arguments(argc - (i + 1),
288 argv + i + 1, verbose_level);
289
290 if (f_v) {
291 cout << "interface_combinatorics::read_arguments finished "
292 "reading -diophant" << endl;
293 cout << "i = " << i << endl;
294 cout << "argc = " << argc << endl;
295 if (i < argc) {
296 cout << "next argument is " << argv[i] << endl;
297 }
298 }
299 }
300 else if (ST.stringcmp(argv[i], "-diophant_activity") == 0) {
301 f_diophant_activity = TRUE;
302 if (f_v) {
303 cout << "-diophant_activity " << endl;
304 }
305 Diophant_activity_description = NEW_OBJECT(solvers::diophant_activity_description);
306 i += Diophant_activity_description->read_arguments(argc - (i + 1),
307 argv + i + 1, verbose_level);
308
309 if (f_v) {
310 cout << "interface_combinatorics::read_arguments finished "
311 "reading -diophant_activity" << endl;
312 cout << "i = " << i << endl;
313 cout << "argc = " << argc << endl;
314 if (i < argc) {
315 cout << "next argument is " << argv[i] << endl;
316 }
317 }
318 }
319 else if (ST.stringcmp(argv[i], "-bent") == 0) {
320 f_bent = TRUE;
321 bent_n = ST.strtoi(argv[++i]);
322 if (f_v) {
323 cout << "-bent " << bent_n << endl;
324 }
325 }
326 else if (ST.stringcmp(argv[i], "-random_permutation") == 0) {
327 f_random_permutation = TRUE;
328 random_permutation_degree = ST.strtoi(argv[++i]);
329 random_permutation_fname_csv.assign(argv[++i]);
330 if (f_v) {
331 cout << "-random_permutation " << random_permutation_degree << endl;
332 }
333 }
334 else if (ST.stringcmp(argv[i], "-read_poset_file") == 0) {
335 f_read_poset_file = TRUE;
336 f_grouping = FALSE;
337 read_poset_file_fname.assign(argv[++i]);
338 if (f_v) {
339 cout << "-read_poset_file " << read_poset_file_fname << endl;
340 }
341 }
342 else if (ST.stringcmp(argv[i], "-read_poset_file_with_grouping") == 0) {
343 f_read_poset_file = TRUE;
344 f_grouping = TRUE;
345 read_poset_file_fname.assign(argv[++i]);
346 grouping_x_stretch = ST.strtof(argv[++i]);
347 if (f_v) {
348 cout << "-read_poset_file_with_grouping "
349 << read_poset_file_fname << " " << grouping_x_stretch << endl;
350 }
351 }
352 else if (ST.stringcmp(argv[i], "-list_parameters_of_SRG") == 0) {
353 f_list_parameters_of_SRG = TRUE;
354 list_parameters_of_SRG_v_max = ST.strtoi(argv[++i]);
355 if (f_v) {
356 cout << "-list_parameters_of_SRG " << list_parameters_of_SRG_v_max << endl;
357 }
358 }
359 else if (ST.stringcmp(argv[i], "-conjugacy_classes_Sym_n") == 0) {
360 f_conjugacy_classes_Sym_n = TRUE;
361 conjugacy_classes_Sym_n_n = ST.strtoi(argv[++i]);
362 if (f_v) {
363 cout << "-conjugacy_classes_Sym_n " << conjugacy_classes_Sym_n_n << endl;
364 }
365 }
366 else if (ST.stringcmp(argv[i], "-tree_of_all_k_subsets") == 0) {
367 f_tree_of_all_k_subsets = TRUE;
368 tree_of_all_k_subsets_n = ST.strtoi(argv[++i]);
369 tree_of_all_k_subsets_k = ST.strtoi(argv[++i]);
370 if (f_v) {
371 cout << "-tree_of_all_k_subsets " << tree_of_all_k_subsets_n << " " << tree_of_all_k_subsets_k << endl;
372 }
373 }
374 else if (ST.stringcmp(argv[i], "-Delandtsheer_Doyen") == 0) {
375 f_Delandtsheer_Doyen = TRUE;
376 Delandtsheer_Doyen_description = NEW_OBJECT(apps_combinatorics::delandtsheer_doyen_description);
377 i += Delandtsheer_Doyen_description->read_arguments(argc - (i - 1),
378 argv + i, verbose_level);
379
380 if (f_v) {
381 cout << "-Delandtsheer_Doyen" << endl;
382 }
383 }
384 else if (ST.stringcmp(argv[i], "-tdo_refinement") == 0) {
385 f_tdo_refinement = TRUE;
386 if (f_v) {
387 cout << "-tdo_refinement " << endl;
388 }
390 i += Tdo_refinement_descr->read_arguments(argc - (i + 1),
391 argv + i + 1, verbose_level);
392 if (f_v) {
393 cout << "interface_combinatorics::read_arguments finished "
394 "reading -tdo_refinement" << endl;
395 cout << "i = " << i << endl;
396 cout << "argc = " << argc << endl;
397 if (i < argc) {
398 cout << "next argument is " << argv[i] << endl;
399 }
400 }
401 }
402 else if (ST.stringcmp(argv[i], "-tdo_print") == 0) {
403 f_tdo_print = TRUE;
404 tdo_print_fname.assign(argv[++i]);
405 if (f_v) {
406 cout << "-tdo_print " << tdo_print_fname << endl;
407 }
408 }
409 else if (ST.stringcmp(argv[i], "-convert_stack_to_tdo") == 0) {
410 f_convert_stack_to_tdo = TRUE;
411 stack_fname.assign(argv[++i]);
412 if (f_v) {
413 cout << "-convert_stack_to_tdo " << stack_fname << endl;
414 }
415 }
416 else if (ST.stringcmp(argv[i], "-maximal_arc_parameters") == 0) {
417 f_maximal_arc_parameters = TRUE;
418 maximal_arc_parameters_q = ST.strtoi(argv[++i]);
419 maximal_arc_parameters_r = ST.strtoi(argv[++i]);
420 if (f_v) {
421 cout << "-maximal_arc_parameters " << maximal_arc_parameters_q
422 << " " << maximal_arc_parameters_r << endl;
423 }
424 }
425 else if (ST.stringcmp(argv[i], "-arc_parameters") == 0) {
426 f_arc_parameters = TRUE;
427 arc_parameters_q = ST.strtoi(argv[++i]);
428 arc_parameters_s = ST.strtoi(argv[++i]);
429 arc_parameters_r = ST.strtoi(argv[++i]);
430 if (f_v) {
431 cout << "-arc_parameters " << arc_parameters_q
432 << " " << arc_parameters_s
433 << " " << arc_parameters_r
434 << endl;
435 }
436 }
437 else if (ST.stringcmp(argv[i], "-pentomino_puzzle") == 0) {
438 f_pentomino_puzzle = TRUE;
439 if (f_v) {
440 cout << "-pentomino_puzzle " << endl;
441 }
442 }
443 else if (ST.stringcmp(argv[i], "-regular_linear_space_classify") == 0) {
444 f_regular_linear_space_classify = TRUE;
445
446 if (f_v) {
447 cout << "-regular_linear_space_classify " << endl;
448 }
449
451 i += Rls_descr->read_arguments(argc - i - 1,
452 argv + i + 1, verbose_level);
453 if (f_v) {
454 cout << "interface_combinatorics::read_arguments finished "
455 "reading -regular_linear_space_classify" << endl;
456 cout << "i = " << i << endl;
457 cout << "argc = " << argc << endl;
458 if (i < argc) {
459 cout << "next argument is " << argv[i] << endl;
460 }
461
462 cout << "-regular_linear_space_classify " <<endl;
463 }
464 }
465 else if (ST.stringcmp(argv[i], "-draw_layered_graph") == 0) {
466 f_draw_layered_graph = TRUE;
467 draw_layered_graph_fname.assign(argv[++i]);
468 if (f_v) {
469 cout << "-draw_layered_graph " << endl;
470 }
471 Layered_graph_draw_options = NEW_OBJECT(graphics::layered_graph_draw_options);
472 i += Layered_graph_draw_options->read_arguments(argc - i - 1,
473 argv + i + 1, verbose_level);
474 if (f_v) {
475 cout << "interface_combinatorics::read_arguments "
476 "finished reading -draw_layered_graph" << endl;
477 cout << "i = " << i << endl;
478 cout << "argc = " << argc << endl;
479 if (i < argc) {
480 cout << "next argument is " << argv[i] << endl;
481 }
482 }
483 }
484 else if (ST.stringcmp(argv[i], "-read_solutions_and_tally") == 0) {
485 f_read_solutions_and_tally = TRUE;
486 read_solutions_and_tally_fname.assign(argv[++i]);
487 read_solutions_and_tally_sz = ST.strtoi(argv[++i]);
488 if (f_v) {
489 cout << "-read_solutions_and_tally " << read_solutions_and_tally_fname
490 << " " << read_solutions_and_tally_sz << endl;
491 }
492 }
493
494 else if (ST.stringcmp(argv[i], "-make_elementary_symmetric_functions") == 0) {
495 f_make_elementary_symmetric_functions = TRUE;
496 make_elementary_symmetric_functions_n = ST.strtoi(argv[++i]);
497 make_elementary_symmetric_functions_k_max = ST.strtoi(argv[++i]);
498 if (f_v) {
499 cout << "-make_elementary_symmetric_functions " << make_elementary_symmetric_functions_n
500 << " " << make_elementary_symmetric_functions_k_max << endl;
501 }
502 }
503 else if (ST.stringcmp(argv[i], "-Dedekind_numbers") == 0) {
504 f_Dedekind_numbers = TRUE;
505 Dedekind_n_min = ST.strtoi(argv[++i]);
506 Dedekind_n_max = ST.strtoi(argv[++i]);
507 Dedekind_q_min = ST.strtoi(argv[++i]);
508 Dedekind_q_max = ST.strtoi(argv[++i]);
509 if (f_v) {
510 cout << "-Dedekind_numbers " << Dedekind_n_min
511 << " " << Dedekind_n_max
512 << " " << Dedekind_q_min
513 << " " << Dedekind_q_max
514 << " " << endl;
515 }
516 }
517 else if (ST.stringcmp(argv[i], "-rank_k_subset") == 0) {
518 f_rank_k_subset = TRUE;
519 rank_k_subset_n = ST.strtoi(argv[++i]);
520 rank_k_subset_k = ST.strtoi(argv[++i]);
521 rank_k_subset_text.assign(argv[++i]);
522 if (f_v) {
523 cout << "-rank_k_subset " << rank_k_subset_n
524 << " " << rank_k_subset_k
525 << " " << rank_k_subset_text
526 << " " << endl;
527 }
528 }
529 else if (ST.stringcmp(argv[i], "-geometry_builder") == 0) {
530 f_geometry_builder = TRUE;
531 if (f_v) {
532 cout << "-geometry_builder " << endl;
533 }
534 Geometry_builder_description = NEW_OBJECT(geometry_builder::geometry_builder_description);
535 i += Geometry_builder_description->read_arguments(argc - (i + 1),
536 argv + i + 1, verbose_level);
537
538 if (f_v) {
539 cout << "interface_combinatorics::read_arguments finished "
540 "reading -geometry_builder" << endl;
541 cout << "i = " << i << endl;
542 cout << "argc = " << argc << endl;
543 if (i < argc) {
544 cout << "next argument is " << argv[i] << endl;
545 }
546 }
547 }
548
549 if (f_v) {
550 cout << "interface_combinatorics::read_arguments done" << endl;
551 }
552}
553
554
556{
557 if (f_diophant) {
558 cout << "-diophant " << endl;
559 Diophant_description->print();
560 }
561 if (f_diophant_activity) {
562 cout << "-diophant_activity " << endl;
563 Diophant_activity_description->print();
564 }
565 if (f_bent) {
566 cout << "-bent " << bent_n << endl;
567 }
568 if (f_random_permutation) {
569 cout << "-random_permutation " << random_permutation_degree << endl;
570 }
571 if (f_read_poset_file) {
572 cout << "-read_poset_file " << read_poset_file_fname << endl;
573 }
574 if (f_read_poset_file) {
575 cout << "-read_poset_file_with_grouping "
576 << read_poset_file_fname << " " << grouping_x_stretch << endl;
577 }
578 if (f_list_parameters_of_SRG) {
579 cout << "-list_parameters_of_SRG " << list_parameters_of_SRG_v_max << endl;
580 }
581 if (f_conjugacy_classes_Sym_n) {
582 cout << "-conjugacy_classes_Sym_n " << conjugacy_classes_Sym_n_n << endl;
583 }
584 if (f_tree_of_all_k_subsets) {
585 cout << "-tree_of_all_k_subsets " << tree_of_all_k_subsets_n << " " << tree_of_all_k_subsets_k << endl;
586 }
587 if (f_Delandtsheer_Doyen) {
588 cout << "-Delandtsheer_Doyen" << endl;
589 Delandtsheer_Doyen_description->print();
590 }
591 if (f_tdo_refinement) {
592 cout << "-tdo_refinement " << endl;
593 Tdo_refinement_descr->print();
594 }
595 if (f_tdo_print) {
596 cout << "-tdo_print " << tdo_print_fname << endl;
597 }
598 if (f_convert_stack_to_tdo) {
599 cout << "-convert_stack_to_tdo " << stack_fname << endl;
600 }
601 if (f_maximal_arc_parameters) {
602 cout << "-maximal_arc_parameters " << maximal_arc_parameters_q
603 << " " << maximal_arc_parameters_r << endl;
604 }
605 if (f_arc_parameters) {
606 cout << "-arc_parameters " << arc_parameters_q
607 << " " << arc_parameters_s
608 << " " << arc_parameters_r
609 << endl;
610 }
611 if (f_pentomino_puzzle) {
612 cout << "-pentomino_puzzle " <<endl;
613 }
614 if (f_regular_linear_space_classify) {
615 cout << "-regular_linear_space_classify " << endl;
616 //Rls_descr->print();
617 }
618 if (f_draw_layered_graph) {
619 cout << "-draw_layered_graph " << endl;
620 }
621 if (f_read_solutions_and_tally) {
622 cout << "-read_solutions_and_tally " << read_solutions_and_tally_fname
623 << " " << read_solutions_and_tally_sz << endl;
624 }
625
626 if (f_make_elementary_symmetric_functions) {
627 cout << "-make_elementary_symmetric_functions "
628 << make_elementary_symmetric_functions_n
629 << " " << make_elementary_symmetric_functions_k_max
630 << endl;
631 }
632 if (f_Dedekind_numbers) {
633 cout << "-Dedekind_numbers " << Dedekind_n_min
634 << " " << Dedekind_n_max
635 << " " << Dedekind_q_min
636 << " " << Dedekind_q_max
637 << " " << endl;
638 }
639 if (f_rank_k_subset) {
640 cout << "-rank_k_subset " << rank_k_subset_n
641 << " " << rank_k_subset_k
642 << " " << rank_k_subset_text
643 << " " << endl;
644 }
645 if (f_geometry_builder) {
646 Geometry_builder_description->print();
647 }
648}
649
650
651void interface_combinatorics::worker(int verbose_level)
652{
653 int f_v = (verbose_level >= 1);
654
655 if (f_v) {
656 cout << "interface_combinatorics::worker" << endl;
657 }
658 if (f_diophant) {
659 do_diophant(Diophant_description, verbose_level);
660 }
661 else if (f_diophant_activity) {
662 do_diophant_activity(Diophant_activity_description, verbose_level);
663 }
664 else if (f_bent) {
665 do_bent(bent_n, verbose_level);
666 }
667 else if (f_random_permutation) {
668
670
671 Combi.create_random_permutation(random_permutation_degree,
672 random_permutation_fname_csv, verbose_level);
673 }
674 else if (f_read_poset_file) {
675
677
678 Combi.do_read_poset_file(read_poset_file_fname,
679 f_grouping, grouping_x_stretch,
680 verbose_level);
681 }
682 else if (f_list_parameters_of_SRG) {
683
685
686 G.list_parameters_of_SRG(list_parameters_of_SRG_v_max, verbose_level);
687 }
688 else if (f_conjugacy_classes_Sym_n) {
689
690 do_conjugacy_classes_Sym_n(conjugacy_classes_Sym_n_n, verbose_level);
691 }
692 else if (f_tree_of_all_k_subsets) {
693
695
696 Combi.do_make_tree_of_all_k_subsets(tree_of_all_k_subsets_n, tree_of_all_k_subsets_k, verbose_level);
697 }
698 else if (f_Delandtsheer_Doyen) {
699
700 do_Delandtsheer_Doyen(Delandtsheer_Doyen_description, verbose_level);
701 }
702 else if (f_tdo_refinement) {
703
705
706 Combi.do_tdo_refinement(Tdo_refinement_descr, verbose_level);
707 }
708 else if (f_tdo_print) {
709
711
712 Combi.do_tdo_print(tdo_print_fname, verbose_level);
713 }
714 else if (f_convert_stack_to_tdo) {
715
717
718 Combi.convert_stack_to_tdo(stack_fname, verbose_level);
719 }
720 else if (f_maximal_arc_parameters) {
721
723
724 Combi.do_parameters_maximal_arc(maximal_arc_parameters_q,
725 maximal_arc_parameters_r, verbose_level);
726 }
727 else if (f_arc_parameters) {
728
730
731 Combi.do_parameters_arc(arc_parameters_q,
732 arc_parameters_s, arc_parameters_r, verbose_level);
733 }
734 else if (f_pentomino_puzzle) {
735 cout << "pentomino_puzzle " <<endl;
736
738
740
741 P->main(verbose_level);
742
743 FREE_OBJECT(P);
744
745 }
746 else if (f_regular_linear_space_classify) {
747
749
751
752 if (f_v) {
753 cout << "interface_combinatorics::worker before Rls->init_and_run" << endl;
754 }
755 Rls->init_and_run(Rls_descr, verbose_level);
756 if (f_v) {
757 cout << "interface_combinatorics::worker after Rls->init_and_run" << endl;
758 }
759 FREE_OBJECT(Rls);
760
761 }
762 else if (f_draw_layered_graph) {
764
765 GO.draw_layered_graph_from_file(draw_layered_graph_fname,
766 Layered_graph_draw_options,
767 verbose_level);
768
769 }
770 else if (f_read_solutions_and_tally) {
771
773
774 Fio.read_solutions_and_tally(read_solutions_and_tally_fname,
775 read_solutions_and_tally_sz, verbose_level);
776
777 }
778 else if (f_make_elementary_symmetric_functions) {
779
781
782 Combi.make_elementary_symmetric_functions(make_elementary_symmetric_functions_n,
783 make_elementary_symmetric_functions_k_max, verbose_level);
784
785 }
786 else if (f_Dedekind_numbers) {
787
789
790 Combi.Dedekind_numbers(
791 Dedekind_n_min, Dedekind_n_max, Dedekind_q_min, Dedekind_q_max,
792 verbose_level);
793
794 }
795
796 else if (f_rank_k_subset) {
797
799
800
801 int *set;
802 int sz;
803 int i, j, r, N;
804 int *Rk;
805
806 Int_vec_scan(rank_k_subset_text, set, sz);
807
808 N = (sz + rank_k_subset_k - 1) / rank_k_subset_k;
809 Rk = NEW_int(N);
810 i = 0;
811 j = 0;
812 while (i < sz) {
813
814
815 r = Combi.rank_k_subset(set + i, rank_k_subset_n, rank_k_subset_k);
816
817 cout << "The rank of ";
818 Int_vec_print(cout, set + i, rank_k_subset_k);
819 cout << " is " << r << endl;
820 Rk[j] = r;
821
822 i += rank_k_subset_k;
823 j++;
824 }
825
826 cout << "the ranks of all subsets are: ";
827 Int_vec_print(cout, Rk, N);
828 cout << endl;
829
831
832 Sorting.int_vec_heapsort(Rk, N);
833
834 cout << "the sorted ranks of all subsets are: ";
835 Int_vec_print(cout, Rk, N);
836 cout << endl;
837
838 }
839 else if (f_geometry_builder) {
840 if (f_v) {
841 cout << "interface_combinatorics::worker -geometry_builder" << endl;
842 }
843
845
847
848 GB->init_description(Geometry_builder_description, verbose_level);
849
850 GB->gg->main2(verbose_level);
851
852 FREE_OBJECT(GB);
853 }
854
855
856}
857
858
860{
861 int f_v = (verbose_level >= 1);
862
863 if (f_v) {
864 cout << "interface_combinatorics::do_diophant" << endl;
865 }
866
868
870
871 DC->init(Descr, verbose_level);
872
873
874 if (f_v) {
875 cout << "interface_combinatorics::do_diophant done" << endl;
876 }
877}
878
880 solvers::diophant_activity_description *Descr, int verbose_level)
881{
882 int f_v = (verbose_level >= 1);
883
884 if (f_v) {
885 cout << "interface_combinatorics::do_diophant_activity" << endl;
886 }
887
889
891
892 DA->init_from_file(Descr, verbose_level);
893
894 FREE_OBJECT(DA);
895
896 if (f_v) {
897 cout << "interface_combinatorics::do_diophant_activity done" << endl;
898 }
899}
900
901void interface_combinatorics::do_bent(int n, int verbose_level)
902{
903 int f_v = (verbose_level >= 1);
904
905 if (f_v) {
906 cout << "interface_combinatorics::do_bent" << endl;
907 }
908
909 {
911
913
914 if (f_v) {
915 cout << "interface_combinatorics::do_bent before BF->init" << endl;
916 }
917 BF->init(n, verbose_level);
918 if (f_v) {
919 cout << "interface_combinatorics::do_bent after BF->init" << endl;
920 }
921
923
925
926 if (f_v) {
927 cout << "interface_combinatorics::do_bent before BFC->init_group" << endl;
928 }
929 BFC->init_group(BF, verbose_level);
930 if (f_v) {
931 cout << "interface_combinatorics::do_bent after BFC->init_group" << endl;
932 }
933
934 if (f_v) {
935 cout << "interface_combinatorics::do_bent before BFC->search_for_bent_functions" << endl;
936 }
937 BFC->search_for_bent_functions(verbose_level);
938 if (f_v) {
939 cout << "interface_combinatorics::do_bent after BFC->search_for_bent_functions" << endl;
940 }
941
942 FREE_OBJECT(BFC);
943 FREE_OBJECT(BF);
944 }
945
946 if (f_v) {
947 cout << "interface_combinatorics::do_bent done" << endl;
948 }
949}
950
951
953{
954 int f_v = (verbose_level >= 1);
955
956 if (f_v) {
957 cout << "interface_combinatorics::do_conjugacy_classes_Sym_n" << endl;
958 }
959
960 int i;
961 int cnt;
962 ring_theory::longinteger_object class_size, S, F, A;
966
967 cnt = Combi.count_partitions(n);
968
969 int *Parts;
970
971 Parts = NEW_int(cnt * n);
972 Combi.make_partitions(n, Parts, cnt);
973
974
975 S.create(0, __FILE__, __LINE__);
976
977 cout << "The conjugacy classes in Sym_" << n << " are:" << endl;
978 for (i = 0; i < cnt; i++) {
979 cout << i << " : ";
980 Int_vec_print(cout, Parts + i * n, n);
981 cout << " : ";
982
983 C.size_of_conjugacy_class_in_sym_n(class_size, n, Parts + i * n);
984 cout << class_size << " : ";
985 cout << endl;
986
987 D.add_in_place(S, class_size);
988 }
989
990 D.factorial(F, n);
991 D.integral_division_exact(F, S, A);
992 if (!A.is_one()) {
993 cout << "the class sizes do not add up" << endl;
994 exit(1);
995 }
996 cout << "The sum of the class sizes is n!" << endl;
997
998 if (f_v) {
999 cout << "interface_combinatorics::do_conjugacy_classes_Sym_n done" << endl;
1000 }
1001}
1002
1003
1005{
1006 int f_v = (verbose_level >= 1);
1007
1008 if (f_v) {
1009 cout << "interface_combinatorics::do_Delandtsheer_Doyen" << endl;
1010 }
1011
1013
1015
1016 DD->init(Descr, verbose_level);
1017
1018 FREE_OBJECT(DD);
1019
1020
1021 if (f_v) {
1022 cout << "interface_combinatorics::do_Delandtsheer_Doyen done" << endl;
1023 }
1024}
1025
1026
1027}}}
1028
void size_of_conjugacy_class_in_sym_n(ring_theory::longinteger_object &a, int n, int *part)
void make_elementary_symmetric_functions(int n, int k_max, int verbose_level)
void do_tdo_refinement(tdo_refinement_description *Descr, int verbose_level)
void do_read_poset_file(std::string &fname, int f_grouping, double x_stretch, int verbose_level)
void convert_stack_to_tdo(std::string &stack_fname, int verbose_level)
void Dedekind_numbers(int n_min, int n_max, int q_min, int q_max, int verbose_level)
void create_random_permutation(int deg, std::string &fname_csv, int verbose_level)
generate all solutions of the pentomino puzzle
a collection of functions related to sorted vectors
functions related to strings and character arrays
void init_description(geometry_builder_description *Descr, int verbose_level)
a catch-all class for things related to 2D graphics
Definition: graphics.h:411
void draw_layered_graph_from_file(std::string &fname, layered_graph_draw_options *Opt, int verbose_level)
options for drawing an object of type layered_graph
Definition: graphics.h:457
int read_arguments(int argc, std::string *argv, int verbose_level)
void read_solutions_and_tally(std::string &fname, int sz, int verbose_level)
Definition: file_io.cpp:4397
domain to compute with objects of type longinteger
Definition: ring_theory.h:240
void integral_division_exact(longinteger_object &a, longinteger_object &b, longinteger_object &a_over_b)
void add_in_place(longinteger_object &a, longinteger_object &b)
a class to represent arbitrary precision integers
Definition: ring_theory.h:366
void create(long int i, const char *file, int line)
to describe an activity for a diophantine system from command line arguments
Definition: solvers.h:27
to perform an activity for a diophantine system using diophant_activity_description
Definition: solvers.h:77
void init_from_file(diophant_activity_description *Descr, int verbose_level)
to create a diophantine system from diophant_description
Definition: solvers.h:101
void init(diophant_description *Descr, int verbose_level)
to describe a diophantine system from command line arguments
Definition: solvers.h:125
int read_arguments(int argc, std::string *argv, int verbose_level)
void init_group(combinatorics::boolean_function_domain *BF, int verbose_level)
search for line transitive point imprimitive linear spaces as described by Delandtsheer and Doyen
void init(delandtsheer_doyen_description *Descr, int verbose_level)
a description of a class of regular linear spaces from the command line
void init_and_run(regular_linear_space_description *Descr, int verbose_level)
void do_diophant(solvers::diophant_description *Descr, int verbose_level)
void print_help(int argc, std::string *argv, int i, int verbose_level)
int recognize_keyword(int argc, std::string *argv, int i, int verbose_level)
void do_diophant_activity(solvers::diophant_activity_description *Descr, int verbose_level)
void do_Delandtsheer_Doyen(apps_combinatorics::delandtsheer_doyen_description *Descr, int verbose_level)
void read_arguments(int argc, std::string *argv, int &i, int verbose_level)
#define Int_vec_scan(A, B, C)
Definition: foundations.h:716
#define NEW_OBJECT(type)
Definition: foundations.h:638
#define FREE_OBJECT(p)
Definition: foundations.h:651
#define NEW_int(n)
Definition: foundations.h:625
#define TRUE
Definition: foundations.h:231
#define FALSE
Definition: foundations.h:234
#define Int_vec_print(A, B, C)
Definition: foundations.h:685
the orbiter library for the classification of combinatorial objects