zotbar1234 Skrevet 5. oktober 2015 Rapporter Del Skrevet 5. oktober 2015 Selv om jeg foretrekker delphi ( pascal) så har ejg en utfordring til dere problemet er at jeg har en teksstreng med masse tallverdier i (...) Hvor er utfordringen? Det er bare å holde rede på nedre og øvre grense av neste intervall å "kompaktere" og når det er slutt, legge det til svaret. O(n) plass og O(n) tid. Lenke til kommentar
sinnaelgen Skrevet 5. oktober 2015 Rapporter Del Skrevet 5. oktober 2015 Selv om jeg foretrekker delphi ( pascal) så har ejg en utfordring til dere problemet er at jeg har en teksstreng med masse tallverdier i (...) Hvor er utfordringen? Det er bare å holde rede på nedre og øvre grense av neste intervall å "kompaktere" og når det er slutt, legge det til svaret. O(n) plass og O(n) tid. utfordringen er å gjøre det på en veldig veldig enkel måte. Lenke til kommentar
Lycantrophe Skrevet 5. oktober 2015 Rapporter Del Skrevet 5. oktober 2015 Får du det ikke til på egen hånd? :---) Lenke til kommentar
sinnaelgen Skrevet 5. oktober 2015 Rapporter Del Skrevet 5. oktober 2015 Får du det ikke til på egen hånd? :---) det får jeg sikkert men neppe på en så enkel måte som ønskelig Lenke til kommentar
Salvesen. Skrevet 5. oktober 2015 Rapporter Del Skrevet 5. oktober 2015 Selv om jeg foretrekker delphi ( pascal) så har ejg en utfordring til dere problemet er at jeg har en teksstreng med masse tallverdier i,de er adskilt med komma tallverdiene forløper i stigende orden fra 0 til 504, men de kommer ikke nødvendigvis etter hverandre ( d.v.s at noen verdier mangler hvis man tenker på at teksstrengen inneholder alle verdier mellom 0 og 504. utfordringen blir da korte ned innholdet slik at det f,eks står 0,3..10,15..20 o.s.v i stedet for 0,3,4,5,6,7,8,9,10, 15,16,17,18,19,20 o.s.v Skal du bare fjerne deler av innholdet og skal det gjøres for noe spesifikt eller bare random som skal fjernes? Lenke til kommentar
sinnaelgen Skrevet 5. oktober 2015 Rapporter Del Skrevet 5. oktober 2015 Selv om jeg foretrekker delphi ( pascal) så har ejg en utfordring til dere problemet er at jeg har en teksstreng med masse tallverdier i,de er adskilt med komma tallverdiene forløper i stigende orden fra 0 til 504, men de kommer ikke nødvendigvis etter hverandre ( d.v.s at noen verdier mangler hvis man tenker på at teksstrengen inneholder alle verdier mellom 0 og 504. utfordringen blir da korte ned innholdet slik at det f,eks står 0,3..10,15..20 o.s.v i stedet for 0,3,4,5,6,7,8,9,10, 15,16,17,18,19,20 o.s.v Skal du bare fjerne deler av innholdet og skal det gjøres for noe spesifikt eller bare random som skal fjernes? innholdet skal gjøres mere kompakt for syns skyld så det man skal fjerne er verdier som er mellom max og min verdien i hver avgrensing Lenke til kommentar
zotbar1234 Skrevet 5. oktober 2015 Rapporter Del Skrevet 5. oktober 2015 utfordringen er å gjøre det på en veldig veldig enkel måte. Huske intervallstart, se på differansen til forrige element og flytte intervallslutt såfremt differansen til forrige element er 1. Gjenta til det ikke er flere elementer. Hva var utfordringen? Lenke til kommentar
Emancipate Skrevet 5. oktober 2015 Rapporter Del Skrevet 5. oktober 2015 Har du ikke møtt elgen tidligere? 3 Lenke til kommentar
Lycantrophe Skrevet 6. oktober 2015 Rapporter Del Skrevet 6. oktober 2015 ^ pretty much this. 2 Lenke til kommentar
sinnaelgen Skrevet 6. oktober 2015 Rapporter Del Skrevet 6. oktober 2015 (endret) jeg har prøv , me det fungerte ikke 100% enda. CODE procedure behandlelinje(st:string);var p,nv,k:integer;st1,st2,st3:string;label l1;beginx1:=-1;x2:=-1;k:=-1;p:=pos(':',st);st1:=copy(st,1,p);delete(st,1,p);l1:p:=pos(',',st);st2:=copy(st,1,p-1);delete(st,1,p);x1:=strtoint(st2);nv:=x1+1;repeat////////////////////p:=pos(',',st);st3:=copy(st,1,p-1);delete(st,1,p);x2:=strtoint(st3);if st='' then p:=0;if x2=nv then beginnv:=nv+1;inc(k);endelsebeginif k > 0 then beginst1:=st1+format('%d..%d,',[x1,nv-1]);x1:=x2;nv:=x1+1;k:=-1;//goto l1;end elsebeginst1:=st1+format('%d,',[x1]);x1:=x2;nv:=x1+1;k:=-1;//goto L1;end;end;until p=0;st1:=st1+format('%d..%d,',[x1,nv-1]);end; St1 er den tekststrengen der resultatet skal bære til slutt. eller så må jeg fjerne vekk navnet <navn> og ":" under behandlingen st2 og st3 samt X1 og X2 er hjelpe variabler NV brukes om hjelpe variabel for kontrollere om variabelen X2 har neste verdi eller om det er et opphold K er kontroll variabel som fortelter hvordan variablene X1 og X2 skal brukes p forteller hvor skille tegnet "," er Endret 6. oktober 2015 av den andre elgen Lenke til kommentar
Sokkalf™ Skrevet 6. oktober 2015 Rapporter Del Skrevet 6. oktober 2015 Har du bare deklarert variablene? Da skal det jo en hel del mer til før det funker 100%. Lenke til kommentar
sinnaelgen Skrevet 6. oktober 2015 Rapporter Del Skrevet 6. oktober 2015 Har du bare deklarert variablene? Da skal det jo en hel del mer til før det funker 100%. neia , du ser ikke hele koden du må skolle for å se resten Lenke til kommentar
tomsi42 Skrevet 6. oktober 2015 Rapporter Del Skrevet 6. oktober 2015 Jeg tror jeg ville brukt split til å lage et array av verdiene, sortert de (hvis nødvendig) og så bygd opp et nytt et. Lenke til kommentar
rockPaperScissors() Skrevet 6. oktober 2015 Rapporter Del Skrevet 6. oktober 2015 Selv om jeg foretrekker delphi ( pascal) så har ejg en utfordring til dere problemet er at jeg har en teksstreng med masse tallverdier i,de er adskilt med komma tallverdiene forløper i stigende orden fra 0 til 504, men de kommer ikke nødvendigvis etter hverandre ( d.v.s at noen verdier mangler hvis man tenker på at teksstrengen inneholder alle verdier mellom 0 og 504. utfordringen blir da korte ned innholdet slik at det f,eks står 0,3..10,15..20 o.s.v i stedet for 0,3,4,5,6,7,8,9,10, 15,16,17,18,19,20 o.s.v input = "0,3,4,5,6,7,8,9,10, 15,16,17,18,19,20" res_a1 = [] data = input.split(',').map{|i| i.to_i} data.each_with_index do |x, i| if i == 0 || i == data.length - 1 res_a1 << x.to_s elsif (data[i]-1 == data[i-1]) ^ (data[i]+1 == data[i+1]) || !(data[i]-1 == data[i-1]) && !(data[i]+1 == data[i+1]) res_a1 << x.to_s elsif !res_a1.empty? && !(res_a1.last =~ /\.\./) res_a1 << '..' end end res_a2 = [] res_a1.each_with_index do |x, i| not_last_item_and_x_is_num = i != res_a1.length-1 && x =~ /\d+/ if not_last_item_and_x_is_num && res_a2.last.to_s =~ /\d+/ res_a2 << ',' << x elsif not_last_item_and_x_is_num && res_a2.last.to_s =~ /\.\./ res_a2 << x << ',' else res_a2 << x end end p "Input #{input}" # => "Input 0,3,4,5,6,7,8,9,10, 15,16,17,18,19,20" p "Result loop #1 #{res_a1.join}" # => "Result loop #1 03..1015..20" p "Result loop #2 #{res_a2.join}" # => "Result loop #2 0,3..10,15..20" You welcome. Lenke til kommentar
sinnaelgen Skrevet 6. oktober 2015 Rapporter Del Skrevet 6. oktober 2015 hvis det er C# ( eller tilsvarende ) så sliter jeg litt med å se strukturen , altså hvordan programmet forløper kode linjen med "input" er verst å forstå eller så virker det som du allerede har fastsatt verdiene. mulig dere har misforstått det , men talverdien er tilfeldige hvis det er mulig så trenger jeg en liten gjennomgang hvordan du tenker deg at programmet skal forløpe Lenke til kommentar
Emancipate Skrevet 6. oktober 2015 Rapporter Del Skrevet 6. oktober 2015 (endret) Språket over er altså ruby. Programmet har dog en liten feil. Prøv input = "0,2,4,5,6,7,8,9,10,15,16,17,18,19,20,25,26,30" og se på slutten. Jeg synes heller ikke det så særlig enkelt ut. Elgen: Du må selv putte noe fornuftig i input-variabelen. Dette er Python: #instr = "0,2,4,5,6,7,8,9,10,15,16,17,18,19,20,25,26,30" instr = "0,3,4,5,6,7,8,9,10, 15,16,17,18,19,20" instr_int = [int(x) for x in instr.split(",")] output = [] in_run = False prev_val = -10000000 for val in instr_int: if val-1 == prev_val: # in run, don't print anything in_run = True else: if in_run == True: # end of run output[-1] += ".." + str(prev_val) in_run = False output.append(str(val)) # update previous value prev_val = val if in_run == True: output[-1] += ".." + str(val) result = ",".join(output) print(result) En "range" på bare to tall burde egentlig listes opp som vanlige separate tall, men det tenkte jeg ikke på, og det ville nok komplisert ting endel. Endret 6. oktober 2015 av Emancipate Lenke til kommentar
sinnaelgen Skrevet 6. oktober 2015 Rapporter Del Skrevet 6. oktober 2015 (endret) jeg trenger en gjennomgang siden jeg har for dårlig kjennskap til både ruby og pyton da blir det mere kompliser å forstå en det trenger å være det er i grunnen nok å forklare prinsippet del for del , omtrent som når man bruker flytskjema Endret 6. oktober 2015 av den andre elgen Lenke til kommentar
Emancipate Skrevet 6. oktober 2015 Rapporter Del Skrevet 6. oktober 2015 (endret) Jeg kan ikke forklare alt. Denne linja: instr_int = [int(x) for x in instr.split(",")] gjør om strengen i linja over til en array av tall: [0, 3, 4, 5, 6, 7, 8, 9, 10, 15, 16, 17, 18, 19, 20] output = [] lager en ny tom array (av strenger) til resultatet for val in instr_int:betyr noe sånt som for i = 0 to length(instr_int) begin val = instr_int[i]Rett og slett at den looper en gang for hvert element i instr_int. = betyr := == betyr = Endret 6. oktober 2015 av Emancipate Lenke til kommentar
sinnaelgen Skrevet 6. oktober 2015 Rapporter Del Skrevet 6. oktober 2015 Denne linja: instr_int = [int(x) for x in instr.split(",")] gjør om strengen i linja over til en array av tall: [0, 3, 4, 5, 6, 7, 8, 9, 10, 15, 16, 17, 18, 19, 20] javel ( samme som strtoint i pascal ) men hvorfor er [0, 3, 4, 5, 6, 7, 8, 9, 10, 15, 16, 17, 18, 19, 20] der hvilken hensikt har de ? så i første omgang ser det ut som forhåndsdefinerte og faste verdier det er ikke det jeg vil og hvis man skal bruke et Arry så må det gå fra o til n fortløpende ( der n også er en verdi) man må da uansett vite hvor mange verdier, avskilt med komma,det er i strengen trenger jeg 10 plasser så definere jeg det slik : verdi : array [0..9] of integer . integer er heltall men her vet man ikke på forhand hvor mange verdi det er tekststrengen strengen blir dog generert fra en annen del av samme program Lenke til kommentar
Emancipate Skrevet 6. oktober 2015 Rapporter Del Skrevet 6. oktober 2015 hvilken hensikt har de ? Det er tall som er brukt som eksempel. trenger jeg 10 plasser så definere jeg det slik : verdi : array [0..9] of integer . Ah, det er litt av en "defekt" i pascal at lengden på en array er en del av typen. I Python kan lengden endre seg underveis. Delphi har fått støtte for arrays med dynamisk lengde: http://stackoverflow.com/questions/433221/how-do-i-declare-an-array-when-i-dont-know-the-length-until-run-time output.append(str(val)) gir arrayen en ekstra plass og putter str(val) inn der. det må lages litt annerledes i delphi. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå