1
0

AdventOfCode

This commit is contained in:
Mike Schwörer 2020-01-15 00:04:40 +01:00
parent 020515c4af
commit 2b450bdef1
Signed by: Mikescher
GPG Key ID: D3C7172E0A70F8CF
2 changed files with 37 additions and 137 deletions

View File

@ -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;
}
}

View File

@ -1,5 +1,7 @@
<?php
require_once 'website.php';
class AdventOfCode
{
const YEARS =
@ -23,45 +25,50 @@ class AdventOfCode
'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');
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');
$result = $all[$year];
array_walk($result, function(&$value) use ($year) { $value = self::readSingle($year, $value); });
return $result;
return $this->staticData;
}
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);
foreach ($all as $d)
{
$result[$d['day']-1] = $d;
$result[$d['day'] - 1] = $d;
}
return $result;
}
public static function listYears()
public function listYears()
{
$all = require (__DIR__ . '/../statics/aoc/__all.php');
return array_keys($all);
return array_keys($this->staticData);
}
public static function readSingle($year, $a)
@ -93,7 +100,7 @@ class AdventOfCode
return $a;
}
public static function getDayFromStrIdent($year, $ident)
public function getDayFromStrIdent($year, $ident)
{
$e = explode('-', $ident, 2); // day-xxx
if (count($e)!==2) return null;
@ -104,25 +111,25 @@ class AdventOfCode
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;
}
return null;
}
public static function getGithubLink($year)
public function getGithubLink($year)
{
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 . '/';
}
public static function getPrevYear($year)
public function getPrevYear($year)
{
$last = null;
foreach (self::YEARS as $y => $d)
@ -133,7 +140,7 @@ class AdventOfCode
return null;
}
public static function getNextYear($year)
public function getNextYear($year)
{
$found = false;
foreach (self::YEARS as $y => $d)
@ -144,12 +151,12 @@ class AdventOfCode
return null;
}
public static function getLanguageCSS($data)
public function getLanguageCSS($data)
{
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]);
@ -165,11 +172,13 @@ class AdventOfCode
return $raw;
}
public static function checkConsistency()
public function checkConsistency()
{
$warn = null;
foreach (self::listAllFromAllYears() as $year => $yd)
$this->load();
foreach ($this->listAllFromAllYears() as $year => $yd)
{
$daylist = [];
$titlelist = [];