Jump to content

Ciparu COUNT, iesakiet kur un ka PLZ


zeratuls
 Share

Recommended Posts

Sveiki.

Loti steidzami vajag saskaitīt, cik ir 1 cik 2 cik 3 utt.

Mana gadījuma šablons, un tādi ir 50 dažādi, ar acīm un roku bišķin ilgi :)

        {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1},
        {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,1,1,0,2,0,0,0,0,0,0,2,3,2,1,1,0,2,2,0,0,0,0,0,0,0,0,1,1,0,1},
        {1,0,1,1,2,2,3,4,5,0,0,4,0,2,4,1,1,0,4,3,2,2,0,0,0,2,2,4,1,1,0,1},
        {1,0,0,2,2,0,4,3,0,0,5,0,2,0,2,0,0,0,2,2,0,0,0,0,0,4,5,2,2,0,0,1},
        {1,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,2,3,4,2,2,2,0,0,3,0,2,3,0,0,1},
        {1,0,2,2,2,3,0,0,2,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,4,2,5,4,0,0,0,0,0,2,2,5,4,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,1},
        {0,0,0,0,3,4,0,0,0,0,0,3,3,0,0,0,0,0,0,5,4,2,2,3,4,5,0,0,0,0,0,0},
        {0,0,2,2,2,3,4,5,0,0,0,0,0,0,0,0,0,0,0,0,5,4,2,2,3,4,5,0,2,0,2,0},
        {0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0},
        {1,1,1,1,1,1,1,1,1,1,1,0,0,3,4,1,1,4,5,0,0,1,1,1,1,1,1,1,1,1,1,1},
        {1,1,1,1,1,1,1,1,1,1,1,0,0,3,4,1,1,4,5,0,0,1,1,1,1,1,1,1,1,1,1,1},
        {0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0},
        {0,0,2,2,2,3,4,5,0,0,0,0,0,0,0,0,0,0,0,0,5,4,2,2,3,4,5,0,2,0,2,0},
        {0,0,0,0,3,4,0,0,0,0,0,3,3,0,0,0,0,0,0,5,4,2,2,3,4,5,0,0,0,0,0,0},
        {1,0,4,2,5,4,0,0,0,0,0,2,2,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1},
        {1,0,2,2,2,3,0,0,2,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,2,3,4,2,2,2,0,0,3,0,2,3,0,0,1},
        {1,0,0,2,2,0,4,3,0,0,5,0,2,0,2,0,0,0,2,2,0,0,0,0,0,4,5,2,2,0,0,1},
        {1,0,1,1,2,2,3,4,5,0,0,4,0,2,4,1,1,0,4,3,2,2,0,0,0,2,2,4,1,1,0,1},
        {1,0,1,1,0,2,0,0,0,0,0,0,2,3,2,1,1,0,2,2,0,0,0,0,0,0,0,0,1,1,0,1},
        {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
        {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1}

Link to comment
Share on other sites

_dunduks_

man sanāk citādāk:

0    427
1    148
2    101
3    30
4    40
5    22
 

īzzī & pīzī to visu ekselī

Labots - _dunduks_
Link to comment
Share on other sites

Hehe, interesting!
 
Te būs mans risinājums- no db kodera skatu punkta :)

declare @shablons varchar(max) = 'te,taa,garaa,pentere'
set @shablons = replace(replace(replace(@shablons,'{',''),'}',''),space(1),'')

declare @x xml = cast('<A>'+ replace(@shablons,',','</A><A>')+ '</A>' as xml)
     
select skaitlis,count(*)
from (select t.value('.', 'varchar(max)') as skaitlis
	  from @x.nodes('/A') as x(t) 
	  ) x
group by skaitlis

Sanāk:

0    427
1    148
2    101
3    30
4    40
5    22

Ir vēl n-tie veidi kā iekš SQL šo risināt, bet man patīk xml metodes dēļ performance ;)

 

Link to comment
Share on other sites

Inspektors Caps

 

 

Loti steidzami vajag saskaitīt, cik ir 1 cik 2 cik 3 utt.

Kas Tu par programmētāju, ka nevari pa fikso uzcept tādu programmu?

 

 

 

mans nesenākais atklājums - 'Java' ir 1.5x ātrāka par 'C++' uz math uzdevumiem

Tas parāda tikai to, ka atklājums, ka nemāki pienācīgi kodēt C++, Tev vēl ir priekšā. Visdrīzāk Tu domā pārāk high-level, esi pārobjektorientējies un vai ciet no kādas citas modernās programmēšanas zombijmācības kaites, un tādēļ veido stulbu C/C++ kodu. Tas nav personīgs apvainojums, bet vispārīga atziņa par mūsdienu programmētājiem. :)

Link to comment
Share on other sites

Inspektors Caps

 

 

A tu no nākotnes vai pagātnes?

Nākotni jau neviens nezin, tā kā par to nezinu. Priekš sevis esmu no tagadnes, bet pēc vidējā tagadnes subjekta domiņām esmu no pagātnes, kad koderi vēl domāja paši ar savu galvu, nevis tikai klausījās atvērtām mutītēm.

 

 

 

nu kods tik vienkāršs

Un te nu parādās problēma - pat tik vienkāršā kodā moderns koderis nespēj saprast savu fundamentālo kļūdu. Cilvēk... Tu taču tur nemaz nemēri skaitļošanas performanci, bet ko pavisam citu!

 

Mazsvarīgāka nianse:

float diff ((float)t2-(float)t1);

Pirmkārt jau tur kaut kas neklapē ar sintaksi, bet tas tā. Galvenais - kādēļ abi tiek konvertēti uz float un tad atņemti nevis atņemti tie paši clock_t, kas ir veseli tipi? It kā jau nekas svarīgs, bet.. liecības par domu gājienu... ;)

Link to comment
Share on other sites

 

 

Loti steidzami vajag saskaitīt, cik ir 1 cik 2 cik 3 utt.

 

1) iekopēt jebkurā sakarīgā redaktorā ( notepad2, editplus, notepad++, pat Notepad derētu) 

2) for each ( 1 , 2 , 3 as SKAITLIS ) {

    "Find and replace" SKAITLIS , replace with "X" -> Replace all -> YYY objects replaced;

    write down YYY; 

    Ctrl+Z;

  }

Link to comment
Share on other sites

Inspektors Caps

 

 

es pat nesaprotu par ko tu tagad runā - kaut kas tiek skaitļots, tad ko es īsti mēru, ja ne skaitļošanas preformanci?

Daudziem ir tāda problēma - tik tālu attālinājušies no realitātes, ka tad, kad kāds par to runā, pat vispār nesaprot! :) Tam galvenajam FORam taču ir tikai divas rindiņas... Vai tiešām ir tik grūti saprast kas tur ir "nepareizi"? ;) Paštuko vēl, bet, ja kas, tad sveci zem pūra neturēšu un nākošnedēļ pateikšu atbildi. :)

Link to comment
Share on other sites

Somebody

Bash shell ar palīgprogrammām:

 

saturs iekopeets  failā a.txt

$> cat a.txt |sed 's/^[ \t]*//'| sed 's/[{}]//g'|sed 's/,$//'| sed 's/,/\n/g' | awk '{a[$0]++}END{for(i in a)print i,a[i]}' |sort

0 427
1 148
2 101
3 30
4 40
5 22
 

Labots - Somebody
Link to comment
Share on other sites

Un neviens neielika C# kodu! (uz dumiem jautājumiem neatbildam?)

var s1 = File.ReadAllText(@"c:\a0\111.txt");
var ss = s1.Split(new char[] { ' ', ',', '{', '}', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
var gr =
    from num in ss
    group num by num into g
    orderby g.Key
    select new {g.Key, ct = g.Count()};
var s2 = "";
foreach (var v in gr)
    s2 += string.Format("{0}: {1} \n", v.Key, v.ct);
MessageBox.Show(s2);

Link to comment
Share on other sites

marrtins

Perl :grin:

while(<>){$_=~s/[\s,{}]//g;while (/(.)/g){$a{$1}++;}};foreach $k(keys %a){print "$k=$a{$k}\n"};

perl skript.pl < a.txt



Saīsināts Sombody skripts:

cat a.txt|tr -d "\t\n {}"|sed 's/[,]/\n/g'|awk '{a[$0]++}END{for(i in a)print i,a[i]}'|sort
Link to comment
Share on other sites

  • 3 weeks later...
Inspektors Caps

 

 

neturi gan to sveci zem pūra, tik jāatceras, ka tas 'for' cikls tiek izpildīts 47 reizes, bet pati programma uz manas kastes izpildās 25-35 sekundes, tā ka diez vai tur ko vērts optimizēt

Beidzot saņēmos un patestēju to programmu. Tad nu tā.. Rezultāti uzrādīti milisekundēs.

 

* Tiešais dotais variants (ms): Java - 46800, C++ - 60300, C - 59800.

* Eksperimentam pievienoju rekursīvās funkcijas izsaukumam __fastcall: C++ - 53200, C - 53400.

* Tad vēl intereses pēc izmēģināju to pašu ar nerekursīvu funkciju, tikai palielinot iterāciju skaitu līdz 4700: Java - 600, C++ - 2550, C - 600.
 
1. Jāatzīst, ka rezultāti ļoti interesanti. Nedaudz pārsteidza tas, ka oriģinālajā variantā Java tiešām bija ātrāka, tiesa ne jau pusotru reizi, bet par ~10%. Kā noprotams no koda un netieši apstiprina arī __fastcall, tad visdrīzāk tas ir saistīts ar funkcijas izsaukumu overhead attiecībā pret reālā aprēķinu koda apjomu.
2. Kas pie velna notiek ar C++ pēdējā variantā? Tā kā tur ir 4700 izdrukas konsolē, tad ticamākais - cout sucks big time.
3. 47 skaitļi ~50 sekundēs ar debīli pielietotu rekursiju pret 4700 skaitļiem 0,6 sekundēs ar visparastāko funkciju. Kārtējo reizi varam secināt to, ka ne jau valoda vai kompilators ir programmas snieguma un kvalitātes galvenie nodrošinātāji, bet pats programmētājs. :)
Link to comment
Share on other sites

Inspektors Caps

Tak neuztver to uz sevi personīgi. Tīri tehniski, ja funkcijas izsaukums noēd vairāk CPU kā pati darbība, tad tas taču ir debīls pielietojums, ne?

 

Starpcitu, nesen skatījos multeni "Sprīdītis" un tur padomju laika (it kā taču bija bargāka cenzūra) bērnu multfilmā bez kādas kautrēšanās tiek lietoti vārdi "diedelnieks", "kverplis" un citi. Izlieniet taču reiz no tās politkorekti pārjēlās pasaules, kur kaut kāda patētisma dēļ sliktās lietas nedrīkst saukt īstajos vārdos.

Link to comment
Share on other sites

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 kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...