-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBrain.php
executable file
·73 lines (64 loc) · 1.97 KB
/
Brain.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
<?php
class Brain
{
public $books;
public $libraries;
public $days;
public $usedLibraries = [];
public $scannedBooks;
public function __construct($books, $libraries, $days)
{
$this->books = $books;
$this->libraries = $libraries;
$this->days = $days;
}
public function solution()
{
$signUpProcessDays = 0;
for ($day = 0; $day<$this->days; $day++) {
if ($signUpProcessDays == 0) {
$nextLibrary = $this->findLibrary();
if ($nextLibrary) {
$signUpProcessDays = $nextLibrary->signUpDays;
$this->usedLibraries[] = $nextLibrary;
}
}
$this->scanAndProcessLibraries();
$signUpProcessDays--;
}
return $this->returnAnswer($this->usedLibraries);
}
public function findLibrary()
{
return array_shift($this->libraries);
}
public function scanAndProcessLibraries()
{
foreach ($this->usedLibraries as $i => $library) {
if ($library->signUpDays === 0) {
$this->usedLibraries[$i] = $this->scanBooks($library);
} else {
$this->usedLibraries[$i]->signUpDays--;
}
}
}
public function scanBooks(Library $library)
{
$this->scannedBooks = $library->scanBooks($this->scannedBooks);
return $library;
}
public function returnAnswer($scannedLibraries)
{
$lib = array_pop($scannedLibraries);
if ($lib && $lib->getScannedBooksNumber() > 0) {
$scannedLibraries[] = $lib;
}
$answer = [];
$answer[] = count($scannedLibraries);
foreach ($scannedLibraries as $scannedLibrary) {
$answer[] = $scannedLibrary->id . " " . $scannedLibrary->getScannedBooksNumber();
$answer[] = implode(' ', $scannedLibrary->scannedBooks);
}
return implode("\n", $answer);
}
}