Goedenmiddag, kan iemand mij uitleggen een driehoek van 1 naar 8 sterretjes maak met While?




hij moet er zo uit komen te zien.
*
**
***
****
*****
******
*******
********
*********
Huiswerk?

Lijkt me meer iets voor een dubbele for loop.
[php]for[/php]
Succes ;-)
Dit vraagt toch om even een lekker potje golfen (met while!)

do(print(implode("\n",array_map('str_repeat',array_fill(1,8,'*'),range(1,8)))));
while(false);
Rob Doemaarwat op 23/09/2017 06:44:35

Dit vraagt toch om even een lekker potje golfen (met while!)

Door specifiek te stellen dat de output in een while-loop gegenereerd moet worden, lijkt dit me een opdracht in het kader van programmeertaalconcepten. Als ik docent was, zou ik je oplossing misschien een puntje geven voor inventiviteit, maar ik zou de code niet als correcte oplossing accepteren, omdat de do-while loop volledig overbodig is.

Bovendien: het idee achter codegolfen is dat je de code zo klein/compact mogelijk maakt. Jouw code is 95 bytes. Het kan in 50 bytes, en dan ook nog op een manier die de while-loop daadwerkelijk gebruikt:

$i=0;while($i<8){echo str_repeat('*',++$i),"\n";}

;-)

Misschien is het zelfs nog de bedoeling om het gedeelte dat nu met str_repeat wordt afgehandeld te implementeren als een geneste while-loop. Dat laat ik als vingeroefening voor TS.
OK, het was geen beste "golf". Meer een poging om zo ommundig mogelijk antwoord op de vraag te geven (dus met while!) zonder hier een beetje iemands huiswerk te lopen maken.

Maar nu jij dat al wel gedaan hebt: het kan ook in 47 karakters (volgens jij telt jouw oplossing slechts 49 karakters):
$i=0;while($i<8)echo str_repeat('*',++$i),"\n";

Next
via een for:
<?php for($i=0;$i<8;print(str_repeat('*',++$i)."\n")); ?>

of Willems versie zonder {} om nog 2 tekens te winnen:

<?php $i=0;while($i<8)echo str_repeat('*',++$i),"\n"; ?>
Tsja, als het nóg compacter moet, zou ik het in Perl doen:

my $i=0;while($i<8){say'*'x++$i}

34 bytes, en zonder use strict kan de 'my' er ook nog uit, wat weer 3 bytes scheelt.
Of zelfs in 19 bytes met een for-loop:

say'*'x$_ for(1..8)

Overigens is dit nou niet bepaald code die geschikt is om in te leveren bij een docent in het kader van een programmeeropdracht. ;-)

Reageren