-
1. Data: 2019-11-18 14:09:45
Temat: Jak zrobić grupowanie w kolejności
Od: Borneq <b...@a...hidden.p>
Mam liczby 1,5,7,10,100,5,6,
jak zrobić grupy o co najmniej sumie 10, nie zmieniając kolejności tak jak:
(1,5,7),(10),(100),(5,6),
zamiast liczb mogą być długości stringów,
mogę najprościej:
vector<wstring> vec;
vector<wstring> veclongs;
int n = 0;
for (int i = 0; i < vec.size(); i++)
{
if (i == 0 || vec[i].length() > 10)
{
veclongs.push_back(vec[i]);
n++;
}
else veclongs.back() = veclongs.back() + vec[i];
}
return veclongs;
Jedna wada to i==0 bo inaczej nie da rady veclongs.back()
co gdy pierwszy będzie mały np 5 a pozostałe wystarczajace?
np: 5,10,10,10, - bez grupowania
a trzeba (5,10),10,10
Jak to zrobić, niby prosto bo bez zmiany kolejności
-
2. Data: 2019-11-18 15:22:43
Temat: Re: Jak zrobić grupowanie w kolejności
Od: "M.M." <m...@g...com>
On Monday, November 18, 2019 at 2:09:47 PM UTC+1, Borneq wrote:
> Mam liczby 1,5,7,10,100,5,6,
> jak zrobić grupy o co najmniej sumie 10
Potrzebujesz dowolną grupę, jakąś konkretną, wszystkie grupy?
Pozdrawiam
-
3. Data: 2019-11-18 15:28:23
Temat: Re: Jak zrobić grupowanie w kolejności
Od: Borneq <b...@a...hidden.p>
W dniu 18.11.2019 o 15:22, M.M. pisze:
> On Monday, November 18, 2019 at 2:09:47 PM UTC+1, Borneq wrote:
>> Mam liczby 1,5,7,10,100,5,6,
>> jak zrobić grupy o co najmniej sumie 10
>
> Potrzebujesz dowolną grupę, jakąś konkretną, wszystkie grupy?
>
> Pozdrawiam
>
Wszystkie, chcę łączyć stringi, aby miały conajmniej jakąś długość.
-
4. Data: 2019-11-18 15:47:21
Temat: Re: Jak zrobić grupowanie w kolejności
Od: g...@g...com
W dniu poniedziałek, 18 listopada 2019 14:09:47 UTC+1 użytkownik Borneq napisał:
> Mam liczby 1,5,7,10,100,5,6,
> jak zrobić grupy o co najmniej sumie 10, nie zmieniając kolejności tak jak:
> (1,5,7),(10),(100),(5,6),
> zamiast liczb mogą być długości stringów,
> mogę najprościej:
> vector<wstring> vec;
> vector<wstring> veclongs;
>
> int n = 0;
> for (int i = 0; i < vec.size(); i++)
> {
> if (i == 0 || vec[i].length() > 10)
> {
> veclongs.push_back(vec[i]);
> n++;
> }
> else veclongs.back() = veclongs.back() + vec[i];
> }
> return veclongs;
>
> Jedna wada to i==0 bo inaczej nie da rady veclongs.back()
> co gdy pierwszy będzie mały np 5 a pozostałe wystarczajace?
> np: 5,10,10,10, - bez grupowania
> a trzeba (5,10),10,10
> Jak to zrobić, niby prosto bo bez zmiany kolejności
W Haskellu na szybko:
groups :: [a] -> ([a] -> Bool) -> [[a]]
groups list c = f list []
where f (h:t) g | (c (g++[h])) = [g++[h]]++(f t [])
f (h:t) g = f t (g++[h])
f [] g = []
groups [1,5,7,10,100,5,6] (\x -> (sum x) >= 10)
[[1,5,7],[10],[100],[5,6]]
-
5. Data: 2019-11-18 15:57:45
Temat: Re: Jak zrobić grupowanie w kolejności
Od: g...@g...com
W dniu poniedziałek, 18 listopada 2019 15:47:23 UTC+1 użytkownik g...@g...com
napisał:
> W dniu poniedziałek, 18 listopada 2019 14:09:47 UTC+1 użytkownik Borneq napisał:
> > Mam liczby 1,5,7,10,100,5,6,
> > jak zrobić grupy o co najmniej sumie 10, nie zmieniając kolejności tak jak:
> > (1,5,7),(10),(100),(5,6),
> > zamiast liczb mogą być długości stringów,
> > mogę najprościej:
> > vector<wstring> vec;
> > vector<wstring> veclongs;
> >
> > int n = 0;
> > for (int i = 0; i < vec.size(); i++)
> > {
> > if (i == 0 || vec[i].length() > 10)
> > {
> > veclongs.push_back(vec[i]);
> > n++;
> > }
> > else veclongs.back() = veclongs.back() + vec[i];
> > }
> > return veclongs;
> >
> > Jedna wada to i==0 bo inaczej nie da rady veclongs.back()
> > co gdy pierwszy będzie mały np 5 a pozostałe wystarczajace?
> > np: 5,10,10,10, - bez grupowania
> > a trzeba (5,10),10,10
> > Jak to zrobić, niby prosto bo bez zmiany kolejności
>
>
> W Haskellu na szybko:
>
> groups :: [a] -> ([a] -> Bool) -> [[a]]
> groups list c = f list []
> where f (h:t) g | (c (g++[h])) = [g++[h]]++(f t [])
> f (h:t) g = f t (g++[h])
> f [] g = []
>
> groups [1,5,7,10,100,5,6] (\x -> (sum x) >= 10)
> [[1,5,7],[10],[100],[5,6]]
Ewentualnie jakbyś chciał, żeby ostatnia niepełna grupa też trafiała do listy, to
wtedy zamiast ostatniego warunku byś musiał napisać:
f [] [] = []
f [] g = [g]
-
6. Data: 2019-11-18 16:12:48
Temat: Re: Jak zrobić grupowanie w kolejności
Od: "M.M." <m...@g...com>
On Monday, November 18, 2019 at 3:28:24 PM UTC+1, Borneq wrote:
> W dniu 18.11.2019 o 15:22, M.M. pisze:
> > On Monday, November 18, 2019 at 2:09:47 PM UTC+1, Borneq wrote:
> >> Mam liczby 1,5,7,10,100,5,6,
> >> jak zrobić grupy o co najmniej sumie 10
> >
> > Potrzebujesz dowolną grupę, jakąś konkretną, wszystkie grupy?
> >
> > Pozdrawiam
> >
> Wszystkie, chcę łączyć stringi, aby miały conajmniej jakąś długość.
I tak że jeśli jakiś wyraz był na pozycji np. drugiej, a inny wyraz
na pozycji trzeciej, to po złączeniu nie zamienią się kolejnością, tylko
nadal będzie złączenie drugi+trzeci?
Pozdrawiam
-
7. Data: 2019-11-18 19:47:48
Temat: Re: Jak zrobić grupowanie w kolejności
Od: Borneq <b...@a...hidden.p>
W dniu 18.11.2019 o 16:12, M.M. pisze:
> I tak że jeśli jakiś wyraz był na pozycji np. drugiej, a inny wyraz
> na pozycji trzeciej, to po złączeniu nie zamienią się kolejnością, tylko
> nadal będzie złączenie drugi+trzeci?
Tak, chodziło mi o najprostszy przypadek, napisałem szybko powyższą
pętlę, tylko się okazuje że nie uwzględnia przypadków gdy pierwszy
krótki a drugi długi.
-
8. Data: 2019-11-18 19:51:18
Temat: Re: Jak zrobić grupowanie w kolejności
Od: Borneq <b...@a...hidden.p>
W dniu 18.11.2019 o 15:47, g...@g...com pisze:
> W dniu poniedziałek, 18 listopada 2019 14:09:47 UTC+1 użytkownik Borneq napisał:
>> Mam liczby 1,5,7,10,100,5,6,
> groups [1,5,7,10,100,5,6] (\x -> (sum x) >= 10)
> [[1,5,7],[10],[100],[5,6]]
>
Ten przykład niezbyt dobry, bo 5 <10 i mój sposób też zadziała,
ale weźmy:
1,10,7,3,10,100,5,6,
-
9. Data: 2019-11-18 20:08:38
Temat: Re: Jak zrobić grupowanie w kolejności
Od: g...@g...com
W dniu poniedziałek, 18 listopada 2019 19:51:20 UTC+1 użytkownik Borneq napisał:
>
> >> Mam liczby 1,5,7,10,100,5,6,
> > groups [1,5,7,10,100,5,6] (\x -> (sum x) >= 10)
> > [[1,5,7],[10],[100],[5,6]]
> >
>
> Ten przykład niezbyt dobry, bo 5 <10 i mój sposób też zadziała,
> ale weźmy:
> 1,10,7,3,10,100,5,6,
To mi daje coś takiego:
[[1,10],[7,3],[10],[100],[5,6]]
Tutaj sobie możesz potestować:
https://rextester.com/HGC85517
-
10. Data: 2019-11-18 23:40:51
Temat: Re: Jak zrobić grupowanie w kolejności
Od: g...@g...com
W dniu poniedziałek, 18 listopada 2019 20:08:40 UTC+1 użytkownik g...@g...com
napisał:
> W dniu poniedziałek, 18 listopada 2019 19:51:20 UTC+1 użytkownik Borneq napisał:
>
> >
> > >> Mam liczby 1,5,7,10,100,5,6,
> > > groups [1,5,7,10,100,5,6] (\x -> (sum x) >= 10)
> > > [[1,5,7],[10],[100],[5,6]]
> > >
> >
> > Ten przykład niezbyt dobry, bo 5 <10 i mój sposób też zadziała,
> > ale weźmy:
> > 1,10,7,3,10,100,5,6,
>
> To mi daje coś takiego:
>
> [[1,10],[7,3],[10],[100],[5,6]]
>
> Tutaj sobie możesz potestować:
>
> https://rextester.com/HGC85517
Trochę poprawiłem nazwy i formatowanie, może teraz będzie nieco czytelniejsze:
https://rextester.com/CRWPJS53169