Re: [PHP] Rangorde bepalen
John Bokma:
>for my $number (sort { $b <=> $a } keys %count ) {
Het zal wel iets betekenen, maar geen idee wat :-)
Ik dacht nog, zal ik zo'n mooie magische Python-oneliner met map, filter,
reduce en lambda schrijven, maar nee... laat ik het maar triviaal houden.
Maarten wil het vast naar een andere programmeertaal overzetten.
--
René Pijlman
Wat wil jij leren? http://www.leren.nl
Re: [PHP] Rangorde bepalen
John Bokma wrote:
>> $i=0;
>> foreach (array_count_values($arr) as $v=>$n)
>> for ($i+=$n, $r=0; $r<$n; $r++) echo "$i. $v\n";
>
> Mooi kort, lijkt op een PHP versie van mijn Perl snippet, dus ik gok dat ik
> op de goede weg qua wat de OP wilde (was voor mij niet 100% duidelijk)
Voor mij is het dan wel handig om te weten *wat* ik niet
duidelijk uitlegde. Wellicht doel je op de rangnummers?
(Zoals in m'n reply op WD te lezen is, er zijn i.d.d. twee
nummers 2 i.p.v. 3)
--
Cheers,
Maarten Wierda
"Shit happens. Then you wipe."
Re: [PHP] Rangorde bepalen
Daniel Tryba wrote:
>> Geen idee of het klopt :-D.
Ja.
> Komt wel overeen met wat OP wil, maar IMHO is mijn output
> toch "normaler". Als er 3 2de plekken zijn zijn die niet
> opeens 4de, en de 5de 6de. Ze zijn gewoon 2de en het 5de
> getal gewoon 5de.
Je hebt gelijk hoor, die twee derde plaatsen was een vreemde
beredenatie van me. Ben benieuwd of die methode ergens wordt
gehanteerd.
Mijn methode was gebaseerd op Audioscrobbler
(<http://www.audioscrobbler.com/user/norecess/>). Maar nu
zie ik ook dat ik heel veel tweede plaatsen heb staan in m'n
Weekly Track Chart i.p.v. heel veel nummers 10.
> Ik zou dit natuurlijk kunnen onderbouwen emt sport en
> EuroVisie SongFestival uitslagen :)
Volg jij het Songfestival? :)
--
Cheers,
Maarten Wierda
"Shit happens. Then you wipe."
Re: [PHP] Rangorde bepalen
Rene Pijlman wrote:
>> for my $number (sort { $b <=> $a } keys %count ) {
>
> Het zal wel iets betekenen, maar geen idee wat :-)
John wil gewoon stoer doen. Dat is hem m.i. aardig gelukt :)
> Ik dacht nog, zal ik zo'n mooie magische Python-oneliner
> met map, filter, reduce en lambda schrijven, maar nee...
> laat ik het maar triviaal houden. Maarten wil het vast
> naar een andere programmeertaal overzetten.
Jouw code ga ik straks in de trein bekijken. Zelfde geldt
voor die van Daniel, alhoewel die al exact doet wat ik wil
(zelfs zonder dat ik aangaf dat ik *dat* wilde).
Trouwens, horen jullie (op John na) niet te slapen 's
nachts? Voor mijn programmeer-problemen hoef je echt niet
wakker te blijven hoor ;)
--
Cheers,
Maarten Wierda
"Shit happens. Then you wipe."
Re: [PHP] Rangorde bepalen
Rene Pijlman <reply.in.the.newsgroup@my.address.is.invalid>:
> John Bokma:
>>for my $number (sort { $b <=> $a } keys %count ) {
>
> Het zal wel iets betekenen, maar geen idee wat :-)
Tijd voor een cursus Perl?
--
robert
Re: [PHP] Rangorde bepalen
Maarten Wierda:
>Trouwens, horen jullie (op John na) niet te slapen 's
>nachts? Voor mijn programmeer-problemen hoef je echt niet
>wakker te blijven hoor ;)
Ik ben met een programmeerklus bezig en dan heeft het dagritme de neiging
ongeveer een uur per dag naar achteren te schuiven [1]. Een klus van 24
dagen (of een veelvoud daarvan) is ideaal, dan ben je aan het eind weer
helemaal aan de maatschappij aangepast :-)
[1] Uit onderzoek is gebleken dat mensen die niet de externe prikkels van
het dag/nachtgebeuren krijgen, dagen van ongeveer 25 uur gaan leven. Dat
zal wel geen toeval zijn.
--
René Pijlman
Wat wil jij leren? http://www.leren.nl
Re: [PHP] Rangorde bepalen
Rene Pijlman in nl.internet.www.server-side (Fri, 11 Mar 2005 11:14:47
+0100):
>[1] Uit onderzoek is gebleken dat mensen die niet de externe prikkels van
>het dag/nachtgebeuren krijgen, dagen van ongeveer 25 uur gaan leven. Dat
>zal wel geen toeval zijn.
Bij sommige ploegendiensten ga je elke week een ploeg eerder draaien.
Dan draai je feitelijk dagen van zo'n 23 uur. Ik heb dat nooit begrepen.
In de broodfabriek, waar mijn Pa nu zijn pensioen van trekt, draaiden ze
naar achteren door: dagen van zo'n 25 uur. Kijk, die snapten het.
Nadeel: eens in de 3 weken was je een dag kwijt. Weg weekend.
Jan
--
Look, Ma. No tables - http://enbio.steenbergen-stichting.nl/
Re: [PHP] Rangorde bepalen
Maarten Wierda <moart3nAT@chellodot.nl> wrote:
>> Ik zou dit natuurlijk kunnen onderbouwen emt sport en
>> EuroVisie SongFestival uitslagen :)
>
> Volg jij het Songfestival? :)
Tuurlijk niet, dat mag toch duidelijk zijn als ik het in 1 regel noem
met sport :)
Re: [PHP] Rangorde bepalen
Maarten Wierda <moart3nAT@chellodot.nl> wrote:
> Jouw code ga ik straks in de trein bekijken. Zelfde geldt
> voor die van Daniel, alhoewel die al exact doet wat ik wil
> (zelfs zonder dat ik aangaf dat ik *dat* wilde).
Dat is omdat ik specs slecht lees en maak wat ik denk dat goed is :)
> Trouwens, horen jullie (op John na) niet te slapen 's nachts? Voor
> mijn programmeer-problemen hoef je echt niet wakker te blijven hoor ;)
Mijn bioritme ligt rond de 30 uur, gemapped op 24 is lol :)
Re: [PHP] Rangorde bepalen
Rene Pijlman:
>Ik ben met een programmeerklus bezig en dan heeft het dagritme de neiging
>ongeveer een uur per dag naar achteren te schuiven [1]. Een klus van 24
>dagen (of een veelvoud daarvan) is ideaal, dan ben je aan het eind weer
>helemaal aan de maatschappij aangepast :-)
Ik bedoelde natuurlijk een klus van 25 dagen. Alleen slaap je dan maar 24
keer.
--
René Pijlman
Wat wil jij leren? http://www.leren.nl
Re: [PHP] Rangorde bepalen
"Maarten Wierda" <moart3nAT@chelloDOT.nl> wrote:
> Warden Dave wrote:
>> Als je i.p.v. '1,3,3,5,5' etc. '1,2,2,4,4' schrijven wilt
>> dan begin je met '$i=1' en verhoog je na de for-lus
>> ($i+=$n).
>
> Je hebt inderdaad gelijk dat ik eigenlijk twee nummers 2 heb
> en twee nummers 4. Maar met onderstaande code bereik ik toch
> niet het gewenste resultaat:
>
> $arr = array("100%", "100%", "80%", "70%", "50%", "50%", "20%");
>
> $i=0;
> foreach (array_count_values($arr) as $v=>$n) {
> for ($i+=$n, $r=0; $r<$n; $r++) {
> echo "<p>$i. $v\n</p>";
> $i+=$n;
> }
> }
>
> Heb ik je opmerking verkeerd geinterpreteerd?
Ehm, ja, inderdaad... De vrolijkheid raakt er zo wel vanaf. ;)
Logischerwijze had het dan moeten zijn:
$i=1;
foreach (array_count_values($arr) as $v=>$n) {
for ($r=0; $r<$n; $r++) echo "<p>$i. $v\n</p>";
$i+=$n;
}
groet,
WD
Re: [PHP] Rangorde bepalen
Daniel Tryba wrote:
>> Jouw code ga ik straks in de trein bekijken. Zelfde
>> geldt voor die van Daniel, alhoewel die al exact doet
>> wat ik wil (zelfs zonder dat ik aangaf dat ik *dat*
>> wilde).
>
> Dat is omdat ik specs slecht lees en maak wat ik denk dat
> goed is :)
Heel goed, opvoeden die klant* !
* Of mensen in n.i.w.-s met een probleem.
--
Cheers,
Maarten Wierda
"Shit happens. Then you wipe."
Re: [PHP] Rangorde bepalen
Rene Pijlman wrote:
> John Bokma:
>>for my $number (sort { $b <=> $a } keys %count ) {
>
> Het zal wel iets betekenen, maar geen idee wat :-)
sorteer op de sleutels van de hash table met als vergelijkingsoperator
b <=> a
> Ik dacht nog, zal ik zo'n mooie magische Python-oneliner met map, filter,
> reduce en lambda schrijven, maar nee... laat ik het maar triviaal houden.
> Maarten wil het vast naar een andere programmeertaal overzetten.
:-D Oh, ben het met je eens dat een one-liner niet te lezen is.
--
John Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Website design: http://johnbokma.com/websitedesign/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html
Re: [PHP] Rangorde bepalen
Rene Pijlman wrote:
> Maarten Wierda:
>>Trouwens, horen jullie (op John na) niet te slapen 's
>>nachts? Voor mijn programmeer-problemen hoef je echt niet
>>wakker te blijven hoor ;)
>
> Ik ben met een programmeerklus bezig en dan heeft het dagritme de neiging
> ongeveer een uur per dag naar achteren te schuiven [1]. Een klus van 24
> dagen (of een veelvoud daarvan) is ideaal, dan ben je aan het eind weer
> helemaal aan de maatschappij aangepast :-)
>
> [1] Uit onderzoek is gebleken dat mensen die niet de externe prikkels van
> het dag/nachtgebeuren krijgen, dagen van ongeveer 25 uur gaan leven. Dat
> zal wel geen toeval zijn.
Aha! Enige nadeel wat ik wel eens heb is dat ik heel soms extra lange dagen
kado krijg :-(
--
John Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Website design: http://johnbokma.com/websitedesign/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html
Re: [PHP] Rangorde bepalen
Maarten Wierda wrote:
> John Bokma wrote:
>
>>> $i=0;
>>> foreach (array_count_values($arr) as $v=>$n)
>>> for ($i+=$n, $r=0; $r<$n; $r++) echo "$i. $v\n";
>>
>> Mooi kort, lijkt op een PHP versie van mijn Perl snippet, dus ik gok
>> dat ik op de goede weg qua wat de OP wilde (was voor mij niet 100%
>> duidelijk)
>
> Voor mij is het dan wel handig om te weten *wat* ik niet
> duidelijk uitlegde. Wellicht doel je op de rangnummers?
>
> (Zoals in m'n reply op WD te lezen is, er zijn i.d.d. twee
> nummers 2 i.p.v. 3)
Ja, ik schreef dat al ergens (op een reply aan Daniel IIRC), je eerste
probleem kon ik later terugbrengen tot:
vind de maximale positie van een element in een rij gesorteerde
elementen met de positie van het 1e element is 1. Toon vervolgens per
voorkomen van een element de maximale positie, en de waarde van het
element op een nieuwe regel.
Een andere omschrijving is: vind het aantal voorkomens van een element
in een rij gesorteerde elementen. Toon vervolgens per voorkomen van een
element de positie van de regel van het voorgaande element ongelijk aan
het huidige element met daarbij opgeteld het aantal voorkomens. De
eerste regel heeft postitie 1.
Mijn eerste oplossing werkte op die manier: ik bepaalde eerst het aantal
voorkomens middels een hash. Omdat ik de volgorde kwijt raakte (hash is
ongeordend) sorteer ik die hash op de sleutels ( = elementen), en
vervolgens druk ik per element het aantal voorkomens af.
Een erg onleesbare vorm van de 1e:
my %maxpos;
print "$maxpos{ $_ }. $_\n"
for map { $maxpos{ $nrs[ $_ ] } = $_ + 1 and $nrs[ $_ ] } 0..$#nrs;
Hier bewaar ik voor elk element in een hash table de index + 1 ( =
positie 1-based), omdat de elementen op volgorde doorlopen worden hou
ik uiteindelijk de maximale positie vast. Die and is een truuk om de
totale expressie het nummer met index $_ op te doen leveren.
De for krijgt in plaats van de 0 t/m aantal getallen - 1 zo de getallen
zelf voor de kiezen. In de print druk ik het de maximale positie af, en
het bijbehorende getal (dat nu in $_ zit).
Leesbaarder:
# bepaal de maximale positie van elk element in gesorteerd array $nrs.
# het 1e element in het array heeft een positie van 1
my %maxpos;
$maxpos{ $nrs[ $_ ] } = $_ + 1 for 0 .. $#nrs;
# druk af voor elk element in het gesorteerde array de maximale positie
# gevolgt door het element zelf, elk op een nieuwe regel
print "$maxpos{ $_ }. $_\n" for @nrs;
--
John Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Website design: http://johnbokma.com/websitedesign/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html