AdventOfCode
This commit is contained in:
parent
020515c4af
commit
2b450bdef1
@ -1,109 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require_once (__DIR__ . '/../internals/base.php');
|
|
||||||
require_once (__DIR__ . '/../extern/Parsedown.php');
|
|
||||||
require_once (__DIR__ . '/../extern/ParsedownExtra.php');
|
|
||||||
|
|
||||||
|
|
||||||
class ParsedownCustom extends ParsedownExtra
|
|
||||||
{
|
|
||||||
protected function element(array $Element)
|
|
||||||
{
|
|
||||||
if (isset($Element['custom']) && $Element['custom'] && isset($Element['handler']))
|
|
||||||
return $this->{$Element['handler']}($Element['text']);
|
|
||||||
else
|
|
||||||
return parent::element($Element);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function blockFencedCode($Line)
|
|
||||||
{
|
|
||||||
$Block = parent::blockFencedCode($Line);
|
|
||||||
if ($Block === null) return $Block;
|
|
||||||
|
|
||||||
$Block['custom'] = false;
|
|
||||||
|
|
||||||
if (isset($Block['element']['text']['attributes']))
|
|
||||||
{
|
|
||||||
foreach ($Block['element']['text']['attributes'] as $attr)
|
|
||||||
{
|
|
||||||
$spl = explode('__', $attr);
|
|
||||||
|
|
||||||
if ($spl[0] === 'language-befungerunner')
|
|
||||||
{
|
|
||||||
$Block['element']['handler'] = 'handleBef93';
|
|
||||||
$Block['custom'] = true;
|
|
||||||
$Block['element']['text']['b93_speed'] = null;
|
|
||||||
$Block['element']['text']['b93_interactive'] = true;
|
|
||||||
$Block['element']['text']['b93_editable'] = true;
|
|
||||||
|
|
||||||
foreach ($spl as $param)
|
|
||||||
{
|
|
||||||
if (startsWith($param, 'speed-')) $Block['element']['text']['b93_speed'] = intval( substr($param, strlen('speed-')));
|
|
||||||
if (startsWith($param, 'interactive-')) $Block['element']['text']['b93_interactive'] = boolval(substr($param, strlen('interactive-')));
|
|
||||||
if (startsWith($param, 'editable-')) $Block['element']['text']['b93_editable'] = boolval(substr($param, strlen('editable-')));
|
|
||||||
}
|
|
||||||
|
|
||||||
return $Block;
|
|
||||||
}
|
|
||||||
else if ($spl[0] === 'language-bfjoustrunner')
|
|
||||||
{
|
|
||||||
$Block['element']['handler'] = 'handleBFJoust';
|
|
||||||
$Block['custom'] = true;
|
|
||||||
return $Block;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $Block;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function blockFencedCodeComplete($Block)
|
|
||||||
{
|
|
||||||
if (! $Block['custom']) { return parent::blockFencedCodeComplete($Block); }
|
|
||||||
|
|
||||||
$Block['element']['custom'] = true;
|
|
||||||
|
|
||||||
return $Block;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function handleBFJoust(array $Element)
|
|
||||||
{
|
|
||||||
global $PARAM_CODE_LEFT;
|
|
||||||
global $PARAM_CODE_RIGHT;
|
|
||||||
|
|
||||||
$split = preg_split("/\-{16,}/", $Element['text']);
|
|
||||||
|
|
||||||
$PARAM_CODE_LEFT = trim($split[0]);
|
|
||||||
$PARAM_CODE_RIGHT = trim($split[1]);
|
|
||||||
|
|
||||||
return require (__DIR__ . '/../fragments/widget_bfjoust.php');
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function handleBef93(array $Element)
|
|
||||||
{
|
|
||||||
global $PARAM_BEFUNGE93RUNNER;
|
|
||||||
$PARAM_BEFUNGE93RUNNER =
|
|
||||||
[
|
|
||||||
'code' => $Element['text'],
|
|
||||||
'url' => '',
|
|
||||||
'interactive' => $Element['b93_interactive'],
|
|
||||||
'speed' => $Element['b93_speed'],
|
|
||||||
'editable' => $Element['b93_editable'],
|
|
||||||
];
|
|
||||||
return require (__DIR__ . '/../fragments/widget_befunge93.php');
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function blockTable($Line, array $Block = null)
|
|
||||||
{
|
|
||||||
// https://stackoverflow.com/a/46346412/1761622
|
|
||||||
|
|
||||||
$Block = parent::blockTable($Line, $Block);
|
|
||||||
|
|
||||||
if ($Block === null) return $Block;
|
|
||||||
if (!key_exists('element', $Block)) return $Block;
|
|
||||||
|
|
||||||
$Block['element']['attributes']['class'] = 'stripedtable';
|
|
||||||
|
|
||||||
return $Block;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,5 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
require_once 'website.php';
|
||||||
|
|
||||||
class AdventOfCode
|
class AdventOfCode
|
||||||
{
|
{
|
||||||
const YEARS =
|
const YEARS =
|
||||||
@ -23,45 +25,50 @@ class AdventOfCode
|
|||||||
'ts' => ['ext'=>'ts', 'css'=>'language-typescript', 'name'=>'Typescript'],
|
'ts' => ['ext'=>'ts', 'css'=>'language-typescript', 'name'=>'Typescript'],
|
||||||
];
|
];
|
||||||
|
|
||||||
public static function listAllFromAllYears()
|
/** @var array */
|
||||||
|
private $staticData;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->load();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function load()
|
||||||
{
|
{
|
||||||
$all = require (__DIR__ . '/../statics/aoc/__all.php');
|
$all = require (__DIR__ . '/../statics/aoc/__all.php');
|
||||||
|
|
||||||
array_walk($all, function(&$value, $year) { array_walk($value, function (&$innervalue) use ($year) { $innervalue = self::readSingle($year, $innervalue); }); });
|
array_walk($all, function(&$value, $year) { array_walk($value, function (&$innervalue) use ($year) { $innervalue = self::readSingle($year, $innervalue); }); });
|
||||||
|
|
||||||
return $all;
|
$this->staticData = $all;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function listSingleYear($year)
|
public function listAllFromAllYears()
|
||||||
{
|
{
|
||||||
$all = require (__DIR__ . '/../statics/aoc/__all.php');
|
return $this->staticData;
|
||||||
|
|
||||||
$result = $all[$year];
|
|
||||||
|
|
||||||
array_walk($result, function(&$value) use ($year) { $value = self::readSingle($year, $value); });
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function listSingleYearAssociative($year)
|
public function listSingleYear($year)
|
||||||
{
|
{
|
||||||
$all = self::listSingleYear($year);
|
return $this->staticData[$year];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function listSingleYearAssociative($year)
|
||||||
|
{
|
||||||
|
$all = $this->listSingleYear($year);
|
||||||
|
|
||||||
$result = array_fill(0, 25, null);
|
$result = array_fill(0, 25, null);
|
||||||
|
|
||||||
foreach ($all as $d)
|
foreach ($all as $d)
|
||||||
{
|
{
|
||||||
$result[$d['day']-1] = $d;
|
$result[$d['day'] - 1] = $d;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function listYears()
|
public function listYears()
|
||||||
{
|
{
|
||||||
$all = require (__DIR__ . '/../statics/aoc/__all.php');
|
return array_keys($this->staticData);
|
||||||
|
|
||||||
return array_keys($all);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function readSingle($year, $a)
|
public static function readSingle($year, $a)
|
||||||
@ -93,7 +100,7 @@ class AdventOfCode
|
|||||||
return $a;
|
return $a;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getDayFromStrIdent($year, $ident)
|
public function getDayFromStrIdent($year, $ident)
|
||||||
{
|
{
|
||||||
$e = explode('-', $ident, 2); // day-xxx
|
$e = explode('-', $ident, 2); // day-xxx
|
||||||
if (count($e)!==2) return null;
|
if (count($e)!==2) return null;
|
||||||
@ -104,25 +111,25 @@ class AdventOfCode
|
|||||||
return self::getSingleDay($year, $i);
|
return self::getSingleDay($year, $i);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getSingleDay($year, $day)
|
public function getSingleDay($year, $day)
|
||||||
{
|
{
|
||||||
foreach (self::listSingleYear($year) as $aocd) {
|
foreach ($this->listSingleYear($year) as $aocd) {
|
||||||
if ($aocd['day'] == $day) return $aocd;
|
if ($aocd['day'] == $day) return $aocd;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getGithubLink($year)
|
public function getGithubLink($year)
|
||||||
{
|
{
|
||||||
return self::YEARS['' . $year]['github'];
|
return self::YEARS['' . $year]['github'];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getURLForYear($year)
|
public function getURLForYear($year)
|
||||||
{
|
{
|
||||||
return '/blog/' . self::YEARS[''.$year]['blog-id'] . '/Advent_of_Code_' . $year . '/';
|
return '/blog/' . self::YEARS[''.$year]['blog-id'] . '/Advent_of_Code_' . $year . '/';
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getPrevYear($year)
|
public function getPrevYear($year)
|
||||||
{
|
{
|
||||||
$last = null;
|
$last = null;
|
||||||
foreach (self::YEARS as $y => $d)
|
foreach (self::YEARS as $y => $d)
|
||||||
@ -133,7 +140,7 @@ class AdventOfCode
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getNextYear($year)
|
public function getNextYear($year)
|
||||||
{
|
{
|
||||||
$found = false;
|
$found = false;
|
||||||
foreach (self::YEARS as $y => $d)
|
foreach (self::YEARS as $y => $d)
|
||||||
@ -144,12 +151,12 @@ class AdventOfCode
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getLanguageCSS($data)
|
public function getLanguageCSS($data)
|
||||||
{
|
{
|
||||||
return self::LANGUAGES[$data['language']]['css'];
|
return self::LANGUAGES[$data['language']]['css'];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getSolutionCode($data, $i)
|
public function getSolutionCode($data, $i)
|
||||||
{
|
{
|
||||||
$raw = file_get_contents($data['file_solutions'][$i]);
|
$raw = file_get_contents($data['file_solutions'][$i]);
|
||||||
|
|
||||||
@ -165,11 +172,13 @@ class AdventOfCode
|
|||||||
return $raw;
|
return $raw;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function checkConsistency()
|
public function checkConsistency()
|
||||||
{
|
{
|
||||||
$warn = null;
|
$warn = null;
|
||||||
|
|
||||||
foreach (self::listAllFromAllYears() as $year => $yd)
|
$this->load();
|
||||||
|
|
||||||
|
foreach ($this->listAllFromAllYears() as $year => $yd)
|
||||||
{
|
{
|
||||||
$daylist = [];
|
$daylist = [];
|
||||||
$titlelist = [];
|
$titlelist = [];
|
||||||
|
Loading…
Reference in New Issue
Block a user