Waardes verdelen
Ik heb een string met een variabele lengte tussen de 1 en de 9, die ik split in een losse array (per teken). so far so good.
Vervolgens moeten deze gesplits worden in maximaal 3 groepen waarbij elke groep tenminste 1 waarde bevat. als er maar 2 tekens in de string staan worden het maximaal 2 groepen.
Nu ben ik op zoek naar een manier om alle mogelijke verdeel combinaties te krijgen.
Voorbeeld
string : 1234
Opties :
[123,4]
[12,34]
[1,234]
Voorbeeld 2
string : 123456
Opties :
[123,456]
[12,345,6]
[1,234,56]
[12,34,56]
[12,3,456]
enz. het idee lijkt me duidelijk (nee bovenstaand zijn niet alle mogelijke combinaties, ben ik me van bewust.
De volgorde hoeft niet te veranderen, en in de daadwerkelijke code zijn het binaire getallen, maar heb nu even 1 t/m 9 gebruikt voor de duidelijkheid.
Hopelijk heeft iemand een suggestie want kan even niets bedenken
Mvg,
Jacco
Gewijzigd op 22/01/2019 09:25:16 door Jacco Engel
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
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
<?php
$string = "654321";
for ($i = 1; $i < strlen($string); $i++) {
$restult[] = substr($string, 0, $i) . ',' . substr($string, $i);
}
echo '<pre>';
var_dump($restult);
/*
array(5) {
[0]=>
string(7) "6,54321"
[1]=>
string(7) "65,4321"
[2]=>
string(7) "654,321"
[3]=>
string(7) "6543,21"
[4]=>
string(7) "65432,1"
}
*/
?>
$string = "654321";
for ($i = 1; $i < strlen($string); $i++) {
$restult[] = substr($string, 0, $i) . ',' . substr($string, $i);
}
echo '<pre>';
var_dump($restult);
/*
array(5) {
[0]=>
string(7) "6,54321"
[1]=>
string(7) "65,4321"
[2]=>
string(7) "654,321"
[3]=>
string(7) "6543,21"
[4]=>
string(7) "65432,1"
}
*/
?>
En ja dat is mogelijk wel een begin, maar verder dan dat ben ik niet gekomen :). Ik ga er nog verder over nadenken, verdere input zou gewardeerd worden :),
Maar dank je wel voor het meedenken
Gewijzigd op 23/01/2019 12:42:31 door Jacco Engel
Waarrrrrrrrrrrrrr heb je dit voor nodig.
Mn werk, meer kan ik er niet over roepen helaas :)
Je hebt een lengte: minimaal 1, maximaal 9.
Je hebt het maximaal aantal groepen, afhankelijk van lengte: 1 (lengte 1), 2 (lengte 2), 3 (lengte 3-9).
Je hebt de maximale lengte van een groep, mogelijk beperkt door de lengte van de invoer: 1 (lengte 1), 2 (lengte 2), 3 (lengte 3-9).
De laatste twee zaken impliceren elkaar min of meer.
Waar je eigenlijk naar op zoek bent zijn "lengtecombinaties". Invoer ter lengte 1 heeft maar één combinatie: 1. Invoer ter lengte 2 heeft meerdere combinaties:
11
2
Invoer ter lengte 3 heeft meerdere combinaties:
111
12
21
3
Invoer ter lengte 4 heeft meerdere combinaties:
112 (max 3 groepen restrictie)
121
13
211
22
31
Deze kun je lexicografish ordenen.
Aangezien je invoer maximum lengte 9 heeft en groepen niet groter dan 3 zijn zullen de combinaties dus altijd tussen 1 en 333 liggen. De cijfersom dient dan hetzelfde te zijn als de lengte van de invoer. Deze combinaties zou je dus eenmalig kunnen berekenen op deze manier.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
for ($i=1; $i < 10; $i++) {
?><h2>combinations for length <?php echo $i; ?></h2><?php
$combinations = array(); // to filter out doubles
for ($j=1; $j < 334; $j++) {
// note: 0 is allowed, the 0 just needs to be filtered out afterwards
// note: second part is expensive, but is only executed if first part is true due to lazy evaluation
if (array_sum(str_split($j)) == $i && preg_match('#^[0-3]*$#', $j) === 1) {
// strip zeroes
$match = str_replace('0', '', $j);
// store as key so duplicates are removed
$combinations[$match] = true;
}
}
?><ul><?php
foreach (array_keys($combinations) as $v) {
?><li><?php echo $v; ?></li><?php
}
?></ul><?php
}
?>
for ($i=1; $i < 10; $i++) {
?><h2>combinations for length <?php echo $i; ?></h2><?php
$combinations = array(); // to filter out doubles
for ($j=1; $j < 334; $j++) {
// note: 0 is allowed, the 0 just needs to be filtered out afterwards
// note: second part is expensive, but is only executed if first part is true due to lazy evaluation
if (array_sum(str_split($j)) == $i && preg_match('#^[0-3]*$#', $j) === 1) {
// strip zeroes
$match = str_replace('0', '', $j);
// store as key so duplicates are removed
$combinations[$match] = true;
}
}
?><ul><?php
foreach (array_keys($combinations) as $v) {
?><li><?php echo $v; ?></li><?php
}
?></ul><?php
}
?>
De rest lijkt mij makkelijk als je deze combinaties hebt?
En sinds het je werk betreft - had je hier niet zelf uit kunnen/moeten komen? :p
Thomas, jij loopt op je werk/opleiding nooit tegen iets aan waar je even geen oplossing voor ziet ;)?
Continu, maar ik start meestal met een soort van strategie en/of probeer iets abstracts concreet te maken en gaandeweg door gewoon eerst wat testjes in klad uit te voeren kom je vaak al een heel eind.
Thomas van den Heuvel op 23/01/2019 10:22:27:
Continu, maar ik start meestal met een soort van strategie en/of probeer iets abstracts concreet te maken en gaandeweg door gewoon eerst wat testjes in klad uit te voeren kom je vaak al een heel eind.
En je denkt dat ik dat niet gedaan heb :)? Verder intressante dicussie maar niet voor dit topic
Is hiermee je vraag beantwoord dan?
Thomas van den Heuvel op 23/01/2019 10:09:21:
En sinds het je werk betreft - had je hier niet zelf uit kunnen/moeten komen? :p
Als de vraag was geweest "hoe include ik een bestand" dan had ik je zowaar gelijk gegeven, maar ook jij ziet toch dat dit een wat complexer gevalletje is?
Misschien is het voor jou gesneden koek, maar dat wil niet zeggen dat het dat voor iemand anders ook is. Iedereen heeft zijn/haar eigen kwaliteiten en interessegebieden. Van de zijlijn roepen dat iemand 'iets had moeten weten' omdat het z'n werk is (hoe onschuldig wellicht bedoeld ook) komt een beetje betweterig over en bovendien doe je daarmee iemands kwaliteiten tekort. Het voegt mijns inziens weinig toe. Ik ken je inmiddels langer en daardoor weet ik dat je het niet verkeerd bedoelt, maar zeggen dat iemand z'n werk niet goed doet (zo komt het nu een beetje over) is niet echt heel tof ;)
Ik kan natuurlijk niet zien hoeveel tijd hier tussen zat (moment van bedenken/realisatie dilemma/plaatsen topic), maar er zijn waarschijnlijk toch ook wel wat collega's? Weet ook niet voor wat voor bureau hij werkt, in welke capaciteit, en voor hoe lang.
Maar weet niet hoe dit verder staat naar anderen toe.
TS geeft hier ook verder niets over aan. Vandaar mijn vraag. Niet neerbuigend bedoeld, maar meer met enige verwondering. Als je ergens op kantoor zit dan gooi je het meestal eerst intern in de groep voordat je een openbare bron gaat bevragen/raadplegen lijkt mij zo?
Gewijzigd op 23/01/2019 12:32:35 door Thomas van den Heuvel
Thomas van den Heuvel op 23/01/2019 11:58:52:
Is hiermee je vraag beantwoord dan?
Genoeg om voor nu mee door te kunnen, dank je wel
Dat kan dat je het intern bespreekt, maar misschien werkt ie wel in z'n eentje. Wie zal het zeggen. Verder ook niet echt relevant lijkt me. Iedereen staat vrij om een openbare bron te raadplegen. Niemand weet alles.
>> Ik krijg niet betaald voor mijn denkwerk, hij waarschijnlijk wel?
Niemand op het forum krijgt betaald voor z'n denkwerk. Dat is ook niet de insteek van dit forum :)
Anyhow ... genoeg geluld. Jacco kan weer vooruit.
Quote:
"Het is voor mijn werk" en het vervolgens op een forum gooien. Ik krijg niet betaald voor mijn denkwerk, hij waarschijnlijk wel?
Dus hieruit mag ik concluderen dat jij van mening bent dat hier alleen vragen thuis horen van mensen die in een hobby project ergens tegenaan lopen?
(even recent voorbeeld)
https://www.phphulp.nl/php/forum/topic/wat-is-slim/102700/last/
Deze persoon wil uiteindelijk een site voor haar bedrijf opzetten? Moeten we die dan ook niet meer helpen? Die gaat er per slot van rekening uiteindelijk (hoop ik iig :P) ook geld mee verdienen
Quote:
Ik kan natuurlijk niet zien hoeveel tijd hier tussen zat (moment van bedenken/realisatie dilemma/plaatsen topic), maar er zijn waarschijnlijk toch ook wel wat collega's? Weet ook niet voor wat voor bureau hij werkt, in welke capaciteit, en voor hoe lang.
Correct, dus vraag dat in plaats van er aannames over te doen.
Quote:
Maar weet niet hoe dit verder staat naar anderen toe.
Niet veel beroerder dan de "Maak mn schoolwerk voor me" topics die ik af en toe voorbij zie komen. (imho)
Quote:
TS geeft hier ook verder niets over aan. Vandaar mijn vraag. Niet neerbuigend bedoeld, maar meer met enige verwondering. Als je ergens op kantoor zit dan gooi je het meestal eerst intern in de groep voordat je een openbare bron gaat bevragen/raadplegen lijkt mij zo?
En wat in mijn hele verhaal heeft je de indruk gegeven dat dit niet het geval is?
Jou hele manier van antwoorden is gebaseerd op verschrikkelijk veel aannames, en ik hoop alleen maar dat je er iets minder doet als je daadwerkelijk een project moet ontwikkelen.
Verder vind ik het wel intressant om deze discussie te voeren, maar mn probleem is verholpen, dus mik hem dan even naar de koffiehoek :)
Jacco Engel op 23/01/2019 12:41:13:
Dus hieruit mag ik concluderen dat jij van mening bent dat hier alleen vragen thuis horen van mensen die in een hobby project ergens tegenaan lopen?
Nee, maar als je ergens in een professionele capaciteit zit, dan zijn er waarschijnlijk wel enige verwachtingen.
Jacco Engel op 23/01/2019 12:41:13:
(even recent voorbeeld)
https://www.phphulp.nl/php/forum/topic/wat-is-slim/102700/last/
Deze persoon wil uiteindelijk een site voor haar bedrijf opzetten? Moeten we die dan ook niet meer helpen? Die gaat er per slot van rekening uiteindelijk (hoop ik iig :P) ook geld mee verdienen
https://www.phphulp.nl/php/forum/topic/wat-is-slim/102700/last/
Deze persoon wil uiteindelijk een site voor haar bedrijf opzetten? Moeten we die dan ook niet meer helpen? Die gaat er per slot van rekening uiteindelijk (hoop ik iig :P) ook geld mee verdienen
Deze site heeft vaak de gewoonte om vragenstellers te "bedienen" en ze op die manier ter wille te zijn. Terwijl dat lang niet altijd het "beste" advies is wat gegeven kan worden. Soms is de conclusie gewoon dat men ergens externe expertise moet zoeken/inhuren in plaats van dat men zelf allerlei dingen gaat kleien.
Jacco Engel op 23/01/2019 12:41:13:
Correct, dus vraag dat in plaats van er aannames over te doen.
Daar heb ik al min of meer op gezinspeeld, maar je laat er nog steeds niets over los.
Jacco Engel op 23/01/2019 12:41:13:
Niet veel beroerder dan de "Maak mn schoolwerk voor me" topics die ik af en toe voorbij zie komen. (imho)
Het feit dat jij het blijkbaar geen probleem vindt om je tot dit zelfde niveau te verlagen zegt een hoop.
Jacco Engel op 23/01/2019 12:41:13:
En wat in mijn hele verhaal heeft je de indruk gegeven dat dit niet het geval is?
Dit is mij eigenlijk nog steeds niet duidelijk. En je lijkt ook haast onwillig om hier informatie over te geven.
Jacco Engel op 23/01/2019 12:41:13:
Jou hele manier van antwoorden is gebaseerd op verschrikkelijk veel aannames, en ik hoop alleen maar dat je er iets minder doet als je daadwerkelijk een project moet ontwikkelen.
Als je deze hele discussie had willen vermijden had je natuurlijk ook wat meer context kunnen verschaffen.
Gewijzigd op 23/01/2019 12:55:04 door Thomas van den Heuvel