mboost-dp1

At Tælle


Gå til bund
Gravatar #1 - Stewart
2. mar. 2010 14:12
Hejsa nørder,

Jeg kan ikke rigtig finde ud af hvordan man klare denne opgave.

Jeg har en kommasepareret fil med en masse tal i. Det eneste jeg skal finde ud af, er hvilket tal der er flest af.

F.eks:
817;9;516;11;817;408;9;817

så bliver resultatet 817


Håber at i forstår hvad jeg mener.
Gravatar #2 - Josso
2. mar. 2010 14:24
Er der et programmeringssprog du fremtrækker eller kan vi bare byde ind?
Gravatar #3 - arne_v
2. mar. 2010 14:25
#1

Parse strengen ved semikolon adskillelse. Tæl op i en tal->tal mapping. Løb gennem tal->tal mappingen og find det største antal.
Gravatar #4 - Stewart
2. mar. 2010 14:26
sorry.. det er i VBscript.
Gravatar #5 - zin
2. mar. 2010 16:04
#3 har helt ret. Det er relativt simpelt. Desværre kan jeg ikke VBscript, så jeg kan ikke direkte hjælpe dig... Men det er noget hen af lá
{Kommasepareret parsing}
int highest = 0;
int count = 0;
if (int i > highest)
highest = i;
count = 1;
else if (int i = highest)
count++;
Gravatar #6 - arne_v
2. mar. 2010 16:48
#4


s = "817;9;516;11;817;408;9;817"
Set all = CreateObject("Scripting.Dictionary")
For Each n in Split(s,";")
If all.Exists(n) Then
all.Item(n) = all.Item(n) + 1
Else
all.Add n,1
End If
Next
maxn = ""
maxval = 0
For Each n in all.Keys
If all.Item(n) > maxval Then
maxn = n
maxval = all.Item(n)
End If
Next
WScript.Echo maxn & " occurs " & maxval & " times"
Set all = Nothing
Gravatar #7 - XorpiZ
2. mar. 2010 20:02
#6

Findes der nogle programmeringssprog du IKKE mestrer?
Gravatar #8 - Corholio
2. mar. 2010 20:03
XorpiZ (7) skrev:
#6

Findes der nogle programmeringssprog du IKKE mestrer?


Lige umiddelbart ville jeg mene at han ikke mestrer Brainfuck, men jeg kan jo tage fejl?
Gravatar #9 - arne_v
2. mar. 2010 20:14
#7

Masser.

Jeg har aldrig skrevet en linie i Forth, APL, LISP, Prolog, Oberon, Haskell, Eiffel m.fl..

Jeg er elendig til Ada, Cobol, PL/I, Modula-2 m.fl..

Gravatar #10 - Jace
2. mar. 2010 20:52
arne_v (9) skrev:
#7

Masser.

Jeg har aldrig skrevet en linie i Forth, APL, LISP, Prolog, Oberon, Haskell, Eiffel m.fl..

Jeg er elendig til Ada, Cobol, PL/I, Modula-2 m.fl..

Haha, jeg kender ikke et eneste af dem du nævner der :)
Gravatar #11 - Stewart
3. mar. 2010 07:56
#6

Mange tak, det var lige præcis det jeg manglede :D
Gravatar #12 - illishar
3. mar. 2010 08:45
arne_v (9) skrev:
... elendig til Ada ...


En lille reklame: SPARK-sproget der er bygget på Ada (det kan compiles med en standard Ada-compiler), er bestemt værd at kigge nærmere på, hvis man er til eksotiske sprog. Det er bygget op omkring "functional safety"-principper og er derfor udbredt indenfor kritiske applicationer. Det er faktisk lidt synd, at der ikke er flere sprog, der har en "SPARK"-udgave. (Og nej, MISRA-C kan ikke sammenlignes med SPARK.)
Gravatar #13 - Windcape
3. mar. 2010 08:49
XorpiZ (7) skrev:
Findes der nogle programmeringssprog du IKKE mestrer?
Med god erfaring i programmering kan man også ret nemt løse opgaven i andre sprog.

Haskell string split, for en start:


split :: Char -> String -> [String]
split delimiter input
| [] == rest = [token]
| otherwise = token : split delimiter (tail rest)
where (token,rest) = span (/=delimiter) input


Brug:


*Main> split ';' "817;9;516;11;817;408;9;817"
["817","9","516","11","817","408","9","817"]
Gravatar #14 - Windcape
3. mar. 2010 09:10
Og på overstående kan man så bruge indbyggede haskell functions

Så fuld kode bliver noget i stil med:


import List

split :: Char -> String -> [String]
split delimiter input
| [] == rest = [token]
| otherwise = token : split delimiter (tail rest)
where (token,rest) = span (/=delimiter) input



*Main> maximum (group (split ';' "1;2;3;4;5;5"))
["5","5"]


Gravatar #15 - arne_v
3. mar. 2010 16:28
illishar (12) skrev:
En lille reklame: SPARK-sproget der er bygget på Ada (det kan compiles med en standard Ada-compiler), er bestemt værd at kigge nærmere på, hvis man er til eksotiske sprog.


Jeg kender det godt af omtale.

Hvis man arbejder med kritisk software, så er det en meget relevant mulighed.

Gravatar #16 - sparrez
3. mar. 2010 20:51
C# 3.0

string s = "817;9;516;11;817;408;9;817".Split(';').GroupBy(g => g).OrderByDescending(g => g.Count()).First().Key;

Ser ud som om det vil builde, men har ikke tjekket...
Gravatar #17 - arne_v
4. mar. 2010 02:11
#16

Det gør det.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login