-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathrr.php
executable file
·121 lines (105 loc) · 3.97 KB
/
rr.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/php
<?php
/**
* Round-robin schedule generation implementation
*
* @author Michael P. Nitowski <[email protected]>
*
* MIT License
*
* Copyright (c) 2017 Michael P. Nitowski
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
/*
* rr.php
* Command line script to generate round-robin schedules
*/
require_once('src/round-robin.php');
/* Setup */
$script_name = basename($argv[0]);
$usage = $script_name
. ' [-h] -t teams [-r rounds] [-s] [-i seed] [-n name] [-d description] [-g]';
$help_text = <<<'TEXT'
-t --teams t1, t2, t3... Teams to include in schedule.
-r --rounds r The amount of rounds [default: number of teams].
-s --shuffle Whether to shuffle teams or not.
-i --seed s The random number generator seed to use.
-n --name n Name of schedule.
-d --description d Description of schedule.
-g --include-generation-details Include timestamp and platform info.
-h --help Display help.
TEXT;
/* Option parsing */
$options = getopt(
't:r:si:n:d:gh', // Corresponds to long options
[ // See help_text for descriptions
'teams:',
'rounds:',
'shuffle',
'seed:',
'name:',
'description:',
'include-generation-details',
'help'
]
);
$help = array_key_exists('h', $options) || array_key_exists('help', $options);
if($help) {
echo 'Usage: ' . PHP_EOL . ' ' . $usage . PHP_EOL;
echo 'Options: ' . PHP_EOL . $help_text . PHP_EOL;
exit(0);
}
if(!(array_key_exists('t', $options) || array_key_exists('teams', $options))) {
echo 'Usage: ' . PHP_EOL . ' ' . $usage . PHP_EOL;
exit(0);
}
$teams = array_map('trim', explode(',', $options['teams'] ?? $options['t']));
$rounds = $options['rounds'] ?? $options['r'] ?? NULL;
if($rounds != NULL) {
$rounds = (int) $rounds;
}
$shuffle = array_key_exists('s', $options)
|| array_key_exists('shuffle', $options);
$seed = $options['i'] ?? $options['seed'] ?? NULL;
$name = $options['name'] ?? $options['n'] ?? NULL;
$description = $options['description'] ?? $options['d'] ?? NULL;
$include_generation_details =
array_key_exists('include-generation-details', $options)
|| array_key_exists('g', $options);
/* Generate schedule */
$builder = new ScheduleBuilder($teams, $rounds);
$shuffle ? $builder->shuffle($seed) : $builder->doNotShuffle();
$schedule = $builder->build();
/* Output in markdown format */
echo schedule_to_markdown($schedule, $name, $description);
if($include_generation_details) {
echo '## Generation Details' . MARKDOWN_EOL . MARKDOWN_EOL;
echo 'Datetime: ' . date('l, F j, Y g:i A', time())
. ' (' . gmdate('Y-m-d\TH:i:s\Z', time()) . ')' . MARKDOWN_EOL . MARKDOWN_EOL;
echo 'Platform: '
. 'PHP ' . phpversion() . ' on '
. implode(
' ',
// OS details
[php_uname('s'), php_uname('r'), php_uname('v'), php_uname('m')]
)
. MARKDOWN_EOL;
if(!is_null($seed)) {
echo MARKDOWN_EOL . 'Seed: ' . $seed . MARKDOWN_EOL;
}
}