NewAge Ierakstīts Septembris 19, 2011 Share Ierakstīts Septembris 19, 2011 (labots) Laba diena! Kamēr lielie onkuļi Saeimā vēl pagaidām nevar saprast kā un ar ko izveidot koalīciju, es izdomāju, ka mēs varētu palīdzēt viņiem to izdarīt vismaz tīri matemātiski. Un pie reizes paši patrenēties. Tātad uzdevums: savā mīļākajā programmēšanas valodā uzprogrammēt programmu, kas aprēķina un izvada visus iespējamos koalīcijas variantus un kopējo deputātu skaitu katras koalīcijas variantā. Jāņem vērā, ka: - koalīcijai nepieciešams vismaz 51 deputāts; - ZZS nevar būt vienā koalīcijā ar ZRP; - NA nevar būt vienā koalīcijā ar SC. Pārējie var vērtēt katra kodu un likt plusus un mīnusus pēc sev vien zināmiem kritērijiem Mans variants iekš Python: #!/usr/bin/python from itertools import combinations Saeima={'SC':31,'ZRP':22,'V':20,'NA':14,'ZZS':13} for i in xrange(len(Saeima)): for j in combinations(Saeima.keys(),i): if ('ZRP' in j and 'ZZS' in j) or ('NA' in j and 'SC' in j) or (len(j)==0): del(j) else: balsis=sum(Saeima.get(j) for j in j) if balsis<51: del(j) else: for k in j: print k, print balsis Un rezultāts: SC ZRP 53 SC V 51 SC ZRP V 73 SC ZZS V 64 ZRP NA V 56 Labots Septembris 19, 2011 - NewAge 4 Link to comment Share on other sites More sharing options...
edd999 Septembris 19, 2011 Share Septembris 19, 2011 Labs, šādus uzdevumus vajadzētu dot augstskolās. Link to comment Share on other sites More sharing options...
NewAge Septembris 19, 2011 Author Share Septembris 19, 2011 (labots) Politikas vai IT? Bet, jā, man ar interesantāk risināt uzdevumus iz dzīves nevis kaut kādus pirmskaitļus meklēt, kuri dalās ar hvz ko. Lai gan sen jau neesmu students Labots Septembris 19, 2011 - NewAge Link to comment Share on other sites More sharing options...
ggg97 Septembris 19, 2011 Share Septembris 19, 2011 Pēdējais variants varētu būt pirmais... Link to comment Share on other sites More sharing options...
andza Septembris 19, 2011 Share Septembris 19, 2011 (labots) Python izskatās tīri sakarīga valoda, smuks kods. Te ir mans darinājums iekš R (http://www.r-project.org/) (vajadzēja kādas 20 minūtes lai izdomātu ). Saeima <- c(31,22,20,14,13) Partijas <- c("SC","ZRF","V","NA","ZZS") nesadarbojas <- list(c(31,14),c(22,13)) for (j in c(4,3,2)) { summas <- combn (Saeima,j) for (a in 1:ncol(summas)) { if (all(nesadarbojas[[1]] %in% summas[,a])==FALSE & all(nesadarbojas[[2]] %in% summas[,a])==FALSE) { balsiskopaa <- sum(summas[,a]) { if (balsiskopaa>=51) { cat(c(Partijas[saeima%in%summas[,a]],balsiskopaa),"\n") } } } } } Un rezultāts: SC ZRF V 73 SC V ZZS 64 ZRF V NA 56 SC ZRF 53 SC V 51 Labots Septembris 19, 2011 - andza Link to comment Share on other sites More sharing options...
Prime Septembris 19, 2011 Share Septembris 19, 2011 man liekas ka varētu būt 4 partiju koalīcija ZRP, SC, Vienotība un ZZS Link to comment Share on other sites More sharing options...
(...) Septembris 19, 2011 Share Septembris 19, 2011 nepietiek ar vienu tofiku, jābāž visur caur caurēm tā politika? Skatos ziņas tur politika, skatos te politika, zb jau teikšu kā ir... Link to comment Share on other sites More sharing options...
NewAge Septembris 19, 2011 Author Share Septembris 19, 2011 Šis topiks nav par politiku, ja kādam tas nav skaidrs. Andza, jā Python ir labs ... gaidam vēl variantus Link to comment Share on other sites More sharing options...
(...) Septembris 19, 2011 Share Septembris 19, 2011 ...Šis topiks nav par politiku... par ko tad, ēdiena pagatavošanu??? aptrakuši visi ar tām vēlēšanām saki ko gribi... Link to comment Share on other sites More sharing options...
Prime Septembris 19, 2011 Share Septembris 19, 2011 sorry kļūdījos, būs 3 partiju koalīcija SC, Vienotība un ZRP Link to comment Share on other sites More sharing options...
marrtins Septembris 19, 2011 Share Septembris 19, 2011 Ko tu streso, simpson? Link to comment Share on other sites More sharing options...
NewAge Septembris 28, 2011 Author Share Septembris 28, 2011 Re kur mans variants iekš Bash Shell.. quick and dirty #!/bin/bash saeima=(SC ZRP V NA ZZS) SC=31;ZRP=22;V=20;NA=14;ZZS=13 bin="" ones="1" for ((j=1;j<=${#saeima[@]};j++)) do bin="$bin$ones" done cntr="$(( 2#$bin ))" for ((i=1;i<=$cntr;i++)) do revbin=$(echo "ibase=10;obase=2;$i"|bc|rev) r=0 while (($r<${#revbin})) do tmparr[$r]=${revbin:$r:1} let r=$r+1 done for t in ${!tmparr[@]} do if [ "${tmparr[$t]}" == "1" ] then koalicija[$t]=${saeima[$t]} echo -n "${koalicija[$t]} " >> tmpf fi done echo >> tmpf done while read line do koalicija=($line) if [[ ${koalicija[@]} =~ ZRP && ${koalicija[@]} =~ ZZS ]] then unset koalicija elif [[ ${koalicija[@]} =~ SC && ${koalicija[@]} =~ NA ]] then unset koalicija else sum=0 for v in ${!koalicija[@]} do let sum=$sum+$((${koalicija[$v]})) done if [ $sum -lt 51 ] then unset koalicija else echo ${koalicija[@]} $sum fi fi done < tmpf rm tmpf Un rezultāts: SC ZRP 53 SC V 51 SC ZRP V 73 ZRP V NA 56 SC V ZZS 64 Link to comment Share on other sites More sharing options...
usver Septembris 28, 2011 Share Septembris 28, 2011 Versija iekš PHP pietrūkst tādu lietu kā utilītfunkciju kombinācijām kā iekš R vai Python, tāpēc paņēmu kādu lietojamu. liekas foršs kods ar dinamiski maināmiem nosacījumiem, tāpēc viss svarīgais iznests sākumā + funkcija validācijai ņem arī 3 un 4 un 5 nesaderīgās partijas. ~20min. <?php // init vars $persons_required = 51; $partijas = array('SC'=>31,'ZRP'=>22,'V'=>20,'NA'=>14,'ZZS'=>13); $incompatible = array(array('ZZS','ZRP'), array('SC','NA')); // walk combinations, echo valid; foreach(pc_array_power_set(array_keys($partijas)) as $comb){ $sum = calc_sum($comb, $partijas); // get sum if($sum < 51){ continue; } // sum validation if(validate($comb, $incompatible)){ // perform compatibility test echo implode(' ',array_values($comb)).' '.$sum.'.'; // output } } ################################################ // app-specific code function calc_sum($comb, $partijas){ $sum = 0; foreach($comb as $party){ /*pārty pīpl!*/ $sum += $partijas[$party]; } return $sum; } function validate($comb, $incompatible){ foreach($incompatible as $inc){ $all_dangerous_found = true; foreach($inc as $one){ if(!in_array($one, $comb)){$all_dangerous_found = false;} } if($all_dangerous_found){ return false; } } return true; } // utility functions function pc_array_power_set($array) { $results = array(array( )); foreach ($array as $element) foreach ($results as $combination) array_push($results, array_merge(array($element), $combination)); return $results; } ?> Rezultāts: ZRP SC 53 V SC 51 V ZRP SC 73 NA V ZRP 56 ZZS V SC 64 Link to comment Share on other sites More sharing options...
NewAge Septembris 28, 2011 Author Share Septembris 28, 2011 Bashā arī nav funkcijas, kas izvada kombinācijas, tāpēc nācās domāt algoritmu un rakstīt pašam. Pa lielam tā jau ir šī uzdevuma grūtākā daļa. Link to comment Share on other sites More sharing options...
Recommended Posts
Izveido kontu, vai pieraksties esošajā, lai komentētu
Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas
Izveidot jaunu kontu
Piereģistrējies un izveido jaunu kontu, tas būs viegli!
Reģistrēt jaunu kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!