eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingJak zrobić grupowanie w kolejności › Re: Jak zrobić grupowanie w kolejności
  • X-Received: by 2002:a0c:cd8b:: with SMTP id v11mr26637494qvm.66.1574089065657; 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: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erj
    e.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!g53ni2
    72qtg.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: <9...@g...com>
    Complaints-To: g...@g...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>
    <9...@g...com>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <9...@g...com>
    Subject: Re: Jak zrobić grupowanie w kolejności
    From: g...@g...com
    Injection-Date: Mon, 18 Nov 2019 14:57:45 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    Xref: news-archive.icm.edu.pl pl.comp.programming:214441
    [ ukryj nagłówki ]

    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]

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: