Article View: pl.comp.programming
Article #216503Re: Jak zrobić grupowanie w kolejności
From: godek.maciek
Date: Mon, 18 Nov 2019 14:57
Date: Mon, 18 Nov 2019 14:57
44 lines
2959 bytes
2959 bytes
W dniu poniedziałek, 18 listopada 2019 15:47:23 UTC+1 użytkownik godek...@gmail.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]
Technical Details
Message-ID:
<9ad95a36-9e0a-4613-93a5-c42dc5c97476@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!j16no544572qtl.0!news-out.google.com!g53ni272qtg.0!nntp.google.com!j16no544565qtl.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<5dd2981a$0$17364$65785112@news.neostrada.pl> <9f5f4000-d6b9-4537-a7f0-561c1bfef49b@googlegroups.com>Show Full Headers
Complete Article Headers
X-Received: by 2002:a0c:f4d2:: with SMTP id o18mr9054870qvm.100.1574089065860; Mon, 18 Nov 2019 06:57:45 -0800 (PST) X-Received: by 2002:a0c:cd8b:: with SMTP id v11mr26637494qvm.66.1574089065657; Mon, 18 Nov 2019 06:57:45 -0800 (PST) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!j16no544572qtl.0!news-out.google.com!g53ni272qtg.0!nntp.google.com!j16no544565qtl.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.programming Date: Mon, 18 Nov 2019 06:57:45 -0800 (PST) In-Reply-To: <9f5f4000-d6b9-4537-a7f0-561c1bfef49b@googlegroups.com> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=213.192.68.153; posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r NNTP-Posting-Host: 213.192.68.153 References: <5dd2981a$0$17364$65785112@news.neostrada.pl> <9f5f4000-d6b9-4537-a7f0-561c1bfef49b@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <9ad95a36-9e0a-4613-93a5-c42dc5c97476@googlegroups.com> Subject: Re: Jak zrobić grupowanie w kolejności From: godek.maciek@gmail.com Injection-Date: Mon, 18 Nov 2019 14:57:45 +0000 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit