Vind de kortste route...
ik zat weer eens challenges te doen totdat ik een best wel lastige challenge tegen kwam.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#########################################
S # # # # #
####### # # ##### ### # # ### ####### # #
# # # # # # # # # # # # # #
# ### ##### ### ### # # # # ### # # #####
# # # # # # # # # # #
### ##### # # ### ##### # ########### # #
# # # # # # # # # # #
# ##### ### ### # ##### # # ##### # ### #
# # # # # # # # # # # #
# # ##### # # ### # ##### ### # ### ### #
# # # # # # # # # # # # #
# ##### # # # # # ### ### ### # # ### # #
# # # # # # # # # # # # # #
# # # ##### # # ### ### # # # ####### # #
# # # # # # # # # # # # # #
# # ##### # # ### ##### ####### # # ### #
# # # # # # F
#########################################
S # # # # #
####### # # ##### ### # # ### ####### # #
# # # # # # # # # # # # # #
# ### ##### ### ### # # # # ### # # #####
# # # # # # # # # # #
### ##### # # ### ##### # ########### # #
# # # # # # # # # # #
# ##### ### ### # ##### # # ##### # ### #
# # # # # # # # # # # #
# # ##### # # ### # ##### ### # ### ### #
# # # # # # # # # # # # #
# ##### # # # # # ### ### ### # # ### # #
# # # # # # # # # # # # # #
# # # ##### # # ### ### # # # ####### # #
# # # # # # # # # # # # # #
# # ##### # # ### ##### ####### # # ### #
# # # # # # F
#########################################
Als het goed is afgebeeld zie je hierboven een plategrondje.
zie deze plaatje:
Ik moet bij S beginnen en bij F eindigen (kortste route uiteraad).
hoe het werkt:
#########
S+++++# #
#####+# #
#_____+++F
#########
De plus teken laat het weggetje zien.
code word: 111213141525353637
gescheiden: 11 12 13 14 15 25 35 36 37
uitleg: 11 betekent eigenlijk rij 1, kolom 1
kunnen jullie me helpen, een script of een uitleg geven hoe ik dit probleem het beste aan kan pakken?
Gewijzigd op 01/01/1970 01:00:00 door Kumkwat Trender
A* http://nl.wikipedia.org/wiki/A*
Dijkstra http://nl.wikipedia.org/wiki/Kortstepadalgoritme
Als je met Wiskunde de grafentheorie gehad heb, dan is het wel te implementeren. http://nl.wikipedia.org/wiki/Grafentheorie
Edit
Ik zou trouwens voor Dijkstra gaan, omdat die makkelijker te implementeren is.
Gewijzigd op 01/01/1970 01:00:00 door Gerben G
Dijkstra algoritme Je moet daarvoor wel zien dat je de afbeelding om kunt zetten in een gerichte graaf.
Voor het berekenen van het kortste pad is er het Want ik heb het echt 3 tot 5 keer doorgelezen hoe dat dijkstra algoritme werkt maar ik snap er geen enne hol van.
heb je misschien minder universiteits niveau misschien? :P
Gewijzigd op 01/01/1970 01:00:00 door Kumkwat Trender
Peter schreef op 21.01.2009 22:30:
dat deed je zeker met de hand ? :P
Nee, scriptje.
mag ik dat scriptje zien a.u.b.?
Code (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
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
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
$array=array('*****************************************',
'S * * * * *',
'******* * * ***** *** * * *** ******* * *',
'* * * * * * * * * * * * * *',
'* *** ***** *** *** * * * * *** * * *****',
'* * * * * * * * * * *',
'*** ***** * * *** ***** * *********** * *',
'* * * * * * * * * * *',
'* ***** *** *** * ***** * * ***** * *** *',
'* * * * * * * * * * * *',
'* * ***** * * *** * ***** *** * *** *** *',
'* * * * * * * * * * * * *',
'* ***** * * * * * *** *** *** * * *** * *',
'* * * * * * * * * * * * * *',
'* * * ***** * * *** *** * * * ******* * *',
'* * * * * * * * * * * * * *',
'* * ***** * * *** ***** ******* * * *** *',
'* * * * * * F',
'*****************************************');
echo '<pre>';
foreach($array as $line)
{
echo '<br/>' . $line;
}
echo '</pre>';
do
{
$bool = false;
foreach($array as $key => $line)
{
for($i=1; $i<strlen($line)-1; $i++)
{
$tel = 0;
if($line[$i] == ' ')
{
$tel = ($line[$i-1]=='*') ? $tel + 1 : $tel;
$tel = ($line[$i+1]=='*') ? $tel + 1 : $tel;
$tel = ($array[$key-1][$i]=='*') ? $tel + 1 : $tel;
$tel = ($array[$key+1][$i]=='*') ? $tel + 1 : $tel;
}
if($tel > 2)
{
$line[$i] = '*';
$bool = true;
}
$array[$key] = $line;
}
}
}
while($bool);
echo '<pre>';
foreach($array as $line)
{
echo '<br/>' . $line;
}
echo '</pre>';
?>
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
$array=array('*****************************************',
'S * * * * *',
'******* * * ***** *** * * *** ******* * *',
'* * * * * * * * * * * * * *',
'* *** ***** *** *** * * * * *** * * *****',
'* * * * * * * * * * *',
'*** ***** * * *** ***** * *********** * *',
'* * * * * * * * * * *',
'* ***** *** *** * ***** * * ***** * *** *',
'* * * * * * * * * * * *',
'* * ***** * * *** * ***** *** * *** *** *',
'* * * * * * * * * * * * *',
'* ***** * * * * * *** *** *** * * *** * *',
'* * * * * * * * * * * * * *',
'* * * ***** * * *** *** * * * ******* * *',
'* * * * * * * * * * * * * *',
'* * ***** * * *** ***** ******* * * *** *',
'* * * * * * F',
'*****************************************');
echo '<pre>';
foreach($array as $line)
{
echo '<br/>' . $line;
}
echo '</pre>';
do
{
$bool = false;
foreach($array as $key => $line)
{
for($i=1; $i<strlen($line)-1; $i++)
{
$tel = 0;
if($line[$i] == ' ')
{
$tel = ($line[$i-1]=='*') ? $tel + 1 : $tel;
$tel = ($line[$i+1]=='*') ? $tel + 1 : $tel;
$tel = ($array[$key-1][$i]=='*') ? $tel + 1 : $tel;
$tel = ($array[$key+1][$i]=='*') ? $tel + 1 : $tel;
}
if($tel > 2)
{
$line[$i] = '*';
$bool = true;
}
$array[$key] = $line;
}
}
}
while($bool);
echo '<pre>';
foreach($array as $line)
{
echo '<br/>' . $line;
}
echo '</pre>';
?>
nu nog dat rijen, kolomen nummers toevoegen :P
Hoe bedoel je?
---
hoe het werkt:
#########
S+++++# #
#####+# #
#_____+++F
#########
De plus teken laat het weggetje zien.
code word: 111213141525353637
gescheiden: 11 12 13 14 15 25 35 36 37
uitleg: 11 betekent eigenlijk rij 1, kolom 1
kunnen jullie me helpen, een script of een uitleg geven hoe ik dit probleem het beste aan kan pakken?
----
zeg maar dat je een lange code krijgt met de stappen waardoor die heen loopt.
Gewijzigd op 01/01/1970 01:00:00 door Kumkwat Trender
Edit: Of moeten ze in de volgorde die je dan moet volgen. Nu zijn het gewoon de lege plekken van links naar rechts en van boven naar beneden.
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
Santhe, ik heb het code bekeken.. ik kan dat nooit maken, maar ik ga je code proberen te ontrafelen en aan te leren hoe je zulke dingen maakt.
Bedankt voor je hulp
Code (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
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
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
function zoekleeg($x, $y)
{
global $array;
if($array[$y][$x]!=' ') return;
echo $y . $x . ' ';
$array[$y][$x] = 'X';
zoekleeg($x-1, $y);
zoekleeg($x+1, $y);
zoekleeg($x, $y-1);
zoekleeg($x, $y+1);
}
$array=array('*****************************************',
'S * * * * *',
'******* * * ***** *** * * *** ******* * *',
'* * * * * * * * * * * * * *',
'* *** ***** *** *** * * * * *** * * *****',
'* * * * * * * * * * *',
'*** ***** * * *** ***** * *********** * *',
'* * * * * * * * * * *',
'* ***** *** *** * ***** * * ***** * *** *',
'* * * * * * * * * * * *',
'* * ***** * * *** * ***** *** * *** *** *',
'* * * * * * * * * * * * *',
'* ***** * * * * * *** *** *** * * *** * *',
'* * * * * * * * * * * * * *',
'* * * ***** * * *** *** * * * ******* * *',
'* * * * * * * * * * * * * *',
'* * ***** * * *** ***** ******* * * *** *',
'* * * * * * F',
'*****************************************');
echo '<pre>';
foreach($array as $line)
{
echo '<br/>' . $line;
}
echo '</pre>';
do
{
$bool = false;
foreach($array as $key => $line)
{
for($i=1; $i<strlen($line)-1; $i++)
{
$tel = 0;
if($line[$i] == ' ')
{
$tel = ($line[$i-1]=='*') ? $tel + 1 : $tel;
$tel = ($line[$i+1]=='*') ? $tel + 1 : $tel;
$tel = ($array[$key-1][$i]=='*') ? $tel + 1 : $tel;
$tel = ($array[$key+1][$i]=='*') ? $tel + 1 : $tel;
}
if($tel > 2)
{
$line[$i] = '*';
$bool = true;
}
$array[$key] = $line;
}
}
}
while($bool);
echo '<pre>';
foreach($array as $line)
{
echo '<br/>' . $line;
}
echo '</pre>';
foreach($array as $key => $line)
{
for($i=1; $i<strlen($line)-1; $i++)
{
if($line[$i] == ' ')
{
echo $key . $i . ' ';
}
}
}
echo '<br/><br/>De code volgens het lopen van de juiste weg:<br/>';
zoekleeg(1,1);
echo '<pre>';
foreach($array as $line)
{
echo '<br/>' . $line;
}
echo '</pre>';
?>
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
function zoekleeg($x, $y)
{
global $array;
if($array[$y][$x]!=' ') return;
echo $y . $x . ' ';
$array[$y][$x] = 'X';
zoekleeg($x-1, $y);
zoekleeg($x+1, $y);
zoekleeg($x, $y-1);
zoekleeg($x, $y+1);
}
$array=array('*****************************************',
'S * * * * *',
'******* * * ***** *** * * *** ******* * *',
'* * * * * * * * * * * * * *',
'* *** ***** *** *** * * * * *** * * *****',
'* * * * * * * * * * *',
'*** ***** * * *** ***** * *********** * *',
'* * * * * * * * * * *',
'* ***** *** *** * ***** * * ***** * *** *',
'* * * * * * * * * * * *',
'* * ***** * * *** * ***** *** * *** *** *',
'* * * * * * * * * * * * *',
'* ***** * * * * * *** *** *** * * *** * *',
'* * * * * * * * * * * * * *',
'* * * ***** * * *** *** * * * ******* * *',
'* * * * * * * * * * * * * *',
'* * ***** * * *** ***** ******* * * *** *',
'* * * * * * F',
'*****************************************');
echo '<pre>';
foreach($array as $line)
{
echo '<br/>' . $line;
}
echo '</pre>';
do
{
$bool = false;
foreach($array as $key => $line)
{
for($i=1; $i<strlen($line)-1; $i++)
{
$tel = 0;
if($line[$i] == ' ')
{
$tel = ($line[$i-1]=='*') ? $tel + 1 : $tel;
$tel = ($line[$i+1]=='*') ? $tel + 1 : $tel;
$tel = ($array[$key-1][$i]=='*') ? $tel + 1 : $tel;
$tel = ($array[$key+1][$i]=='*') ? $tel + 1 : $tel;
}
if($tel > 2)
{
$line[$i] = '*';
$bool = true;
}
$array[$key] = $line;
}
}
}
while($bool);
echo '<pre>';
foreach($array as $line)
{
echo '<br/>' . $line;
}
echo '</pre>';
foreach($array as $key => $line)
{
for($i=1; $i<strlen($line)-1; $i++)
{
if($line[$i] == ' ')
{
echo $key . $i . ' ';
}
}
}
echo '<br/><br/>De code volgens het lopen van de juiste weg:<br/>';
zoekleeg(1,1);
echo '<pre>';
foreach($array as $line)
{
echo '<br/>' . $line;
}
echo '</pre>';
?>
ik had nog een challenge waar ik eigenlijk niet uit kwam, deze is wel simpeler en toch lastiger
ik heb een driehoek
namelijk:
___8
__7 5
_5 7 8
3 9 4 2
en wat je moet doen is van boven naar beneden alle mogelijkheden gebruiken.
8 + 7 + 5 + 3 = 23
8 + 7 + 5 + 9 = 29
8 + 7 + 7 + 9 = 31
8 + 7 + 7 + 4 = 26
8 + 5 + 7 + 9 = 29
8 + 5 + 7 + 4 = 24
8 + 5 + 8 + 4 = 25
8 + 5 + 8 + 2 = 23
De gemiddelde: 31.
hoe zou ik deze dan aan moeten pakken? ook door middel van arrays?
Edit: effe een mooie piramide van gemaakt
Gewijzigd op 01/01/1970 01:00:00 door Kumkwat Trender
Edit: Gemiddelde is trouwens geen 31. Dat is de hoogste.
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
Je zou dit aan kunnen pakken met een multidymensionale array,
array(1=>array(8),2=>array(7,5)) enzovoorts... Omdat een array zelf nummert met keys vanaf 0, kan je met een paar controles de boel doorlopen.
Je moet elke keer het nummer van de key zelf en indien mogelijk key-1 en +1 doen. Op zich is dat niet zo heel lastig volgens mij. Je moet alleen even de logica zien.
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
als je dit in een array stopt
dan kijk je naar de laatste waarde (hoeveel array keys die bevat)
dus als we deze hebben als voorbeeld:
___8
__7 5
_5 7 8
3 9 4 2
krijgen we 4 uit
we beginnen uiteraad boven en tellen we net als binaire codes van boven naar beneden
alles op 1e cijfer scheiden:
8
7
5
3
laatste cijfer switchen:
8
7
5
9
uuhh,, je hebt gelijk.. is best wel lastig jaa..
Edit: @robert hoe wil je dit gaan controleren dan? :P
Gewijzigd op 01/01/1970 01:00:00 door Kumkwat Trender
Peter schreef op 21.01.2009 22:26:
ow ja, ik zit in havo 5 ;)
Want ik heb het echt 3 tot 5 keer doorgelezen hoe dat dijkstra algoritme werkt maar ik snap er geen enne hol van.
heb je misschien minder universiteits niveau misschien? :P
Want ik heb het echt 3 tot 5 keer doorgelezen hoe dat dijkstra algoritme werkt maar ik snap er geen enne hol van.
heb je misschien minder universiteits niveau misschien? :P
Ik heb het tijdens het 2de jaar HBO gehad. Het lijkt heel moeilijk, maar het valt echt wel mee. Maar een bruteforce oplossing kan ook prima voor iets wat zo klein is.
Donhertog schreef op 21.01.2009 23:34:
Ik heb het tijdens het 2de jaar HBO gehad. Het lijkt heel moeilijk, maar het valt echt wel mee. Maar een bruteforce oplossing kan ook prima voor iets wat zo klein is.
Peter schreef op 21.01.2009 22:26:
ow ja, ik zit in havo 5 ;)
Want ik heb het echt 3 tot 5 keer doorgelezen hoe dat dijkstra algoritme werkt maar ik snap er geen enne hol van.
heb je misschien minder universiteits niveau misschien? :P
Want ik heb het echt 3 tot 5 keer doorgelezen hoe dat dijkstra algoritme werkt maar ik snap er geen enne hol van.
heb je misschien minder universiteits niveau misschien? :P
Ik heb het tijdens het 2de jaar HBO gehad. Het lijkt heel moeilijk, maar het valt echt wel mee. Maar een bruteforce oplossing kan ook prima voor iets wat zo klein is.
Het zit in me, ik weet het zeker. Maar het komt nog wel.. :)
Nou wat ik nu dan "moeilijk" eruit vind zien zijn die rare tekentjes/regeltjes.
Op zich weet ik een paar maar nog niet alles, wat ik nu op school krijg is logaritme's, dingen over figuren, abc-formule, x vrij maken enz. enz.
natuurkunde ga ik deze periode over atoom splitsingen of zow leren. Ik ga dus langzaaam die richting op..