Skip to content

Instantly share code, notes, and snippets.

@Stonos
Last active August 29, 2015 14:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Stonos/900f628a721d41b14219 to your computer and use it in GitHub Desktop.
Save Stonos/900f628a721d41b14219 to your computer and use it in GitHub Desktop.
Λύνει έναν γρίφο της εκπομπής Super Game (προσοχή: ακολουθεί ΠΟΛΥ άσχημος κώδικας! :P)
<!doctype html>
<html lang="el">
<head>
<meta charset="utf-8">
<title>ΚΑΚΑΟ</title>
<style type="text/css">
.letter {
color: red;
font-weight: bold;
}
#result {
text-align: center;
font-size: 18pt;
font-weight: bold;
}
pre {
margin: 8px;
display: inline-table;
}
</style>
</head>
<body>
<?php
function mb_str_split( $string ) {
# Split at all position not after the start: ^
# and not before the end: $
return preg_split('/(?<!^)(?!$)/u', $string );
}
$pattern = ' Κ
ΚΑΚ
ΚΑΚΑΟ
ΟΑΚΑΚΑΟ
ΚΑΚΑΟΑΚΑΚ
Ο Ο ';
$targetText = 'ΚΑΚΑΟ';
$target = mb_str_split($targetText);
$pattern = explode("\n", $pattern);
for ($i = 0; $i < count($pattern); $i++) {
$pattern[$i] = mb_str_split($pattern[$i]);
}
$c = 0;
set_time_limit(5);
$results = array();
function print_solution($solution) {
global $pattern;
echo "<pre>";
for ($i = 0; $i < count($pattern); $i++) {
for ($j = 0; $j < count($pattern[$i]); $j++) {
if (in_array(array($i, $j), $solution)) {
echo "<span class=\"letter\">" . $pattern[$i][$j] . "</span>";
} else {
echo $pattern[$i][$j];
}
}
echo "\n";
}
echo "</pre>";
}
function solve($i, $j, $sofar, $coords, $lasti, $lastj) {
global $pattern, $target, $targetReverse, $targetText, $results, $c;
if ($i >= count($pattern) || $j >= count($pattern[0]) || $i < 0 || $j < 0) return;
if ($pattern[$i][$j] == $target[mb_strlen($sofar, "UTF-8")] && !in_array(array($i, $j), $coords)) {
$sofar .= $pattern[$i][$j];
$coords[] = array($i, $j);
} else {
$sofar = '';
$coords = array();
}
if ($sofar == $targetText) {
$c++;
$sofar = '';
$results[] = $coords;
$coords = array();
}
if ($sofar != '') {
solve($i+1, $j, $sofar, $coords, $i, $j);
solve($i, $j+1, $sofar, $coords, $i, $j);
solve($i-1, $j, $sofar, $coords, $i, $j);
solve($i, $j-1, $sofar, $coords, $i, $j);
}
}
for ($i=0; $i<count($pattern); $i++) {
for ($j=0; $j<count($pattern[0]); $j++) {
solve($i, $j, '', array(), $i-1, $j-1);
}
}
$results = array_unique($results, SORT_REGULAR);
foreach($results as $result) {
print_solution($result);
}
echo "<br><br><div id=\"result\">Τελικό αποτέλεσμα: " . count($results) . "</div>";
?>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment