Avatar billede breum Nybegynder
22. september 2003 - 19:19 Der er 26 kommentarer og
1 løsning

Arrays der overlapper samles til en

Jeg har en fil, der via et prg som jeg ikke har adgang til hele tiden får tilføjet linier forneden og fjernet foroven.

Eksempel

æble
banan
pære
appelsin
tomat
agurk
banan
tomat
agurk
banan

Lidt senere


pære
appelsin
tomat
agurk
banan
tomat
agurk
banan
melon
ært

Således er æble fjernet, melon tilføjet, banan fjernet, ært tilføjet.

Der er altid 10 i listen

Jeg vil gerne hente listen ofte se hvilke nye der er kommet med siden sidst (altså ært og melon) Bemærk at ordene kan forekomme flere gange, og så skal de med igen.

De 2 lister skal således koges sammen til 1:

æble
banan
pære
appelsin
tomat
agurk
banan
tomat
agurk
banan
melon
ært



melon@array1= ('æble','banan','pære','appelsin','tomat','agurk','banan','tomat','agurk','banan');
@array2= ('pære','appelsin','tomat','agurk','banan','tomat','agurk','banan','melon','ært');
&makeonearrey;
print @arrey3;

er der en der kan lave
sub makeonearrey

så de virker som ønsket?
Avatar billede erikjacobsen Ekspert
22. september 2003 - 19:53 #1
Der skal være 12 efter operationen. Er rækkefølgen ligegyldig?
Avatar billede hizung Nybegynder
22. september 2003 - 19:56 #2
ja
Avatar billede erikjacobsen Ekspert
22. september 2003 - 20:04 #3
Øhm, der der jo kun disse forskellige - er det med vilje:

ært
banan
æble
appelsin
pære
melon
tomat
agurk
Avatar billede erikjacobsen Ekspert
22. september 2003 - 20:09 #4
ok, jeg har læst dit spørgsmål.... Det er de samme værdier der går igen
i array2 med et udefineret overlap. Kan man regne med at dine linier er
unikke, så hvis appelsin=sppelsin så er der ikke andre linier med den værdi?
Avatar billede breum Nybegynder
22. september 2003 - 21:47 #5
erikjacobsen>Ja de samme værdier går som regel igen, idet jeg forsøger at hente filen så tit at der er et overlap for ikke at misse noget.
og nej desværre, du kan ikke regne med at samme ord ikke forekommer igen. jfr banan er med 2 gange i ovenstående eksempel.
Avatar billede breum Nybegynder
22. september 2003 - 21:50 #6
Som nævnt tilføjes ord forneden og fjernes foroven, det handler således om et kontinuum.

Det er en ueendelig kæde med ord, som sagtens kan forekomme flere gange, men jeg har kunnn adgang til de seneste 10, og udfra disse skal jeg forsøge at gendanne kæden.
Avatar billede breum Nybegynder
22. september 2003 - 21:52 #7
Øe hizung, hvordan kan du svare på om rækkefølgen er ligegyldig?

Jae, joe rækkefølgen er vel ligegyldig, bare alle ordene kommer med - eller alternativt antallet af forekomster talt
Avatar billede erikjacobsen Ekspert
22. september 2003 - 21:53 #8
Det er da et spændende problem. Hvis det kan løses .... :)

Hvad nu hvis de første linier er (skrevet på een linie):
  a a b b a a a b b a
og de næste er
  b b a a a a a a a a

Hvordan overlapper det så? Skal man i trivlstilfælde tage "fra neden"
eller "fra oven" ?
Avatar billede breum Nybegynder
22. september 2003 - 21:53 #9
Forstået således at antallet af banan er 3 og IKKE 5 i ovenstående
Avatar billede breum Nybegynder
22. september 2003 - 21:58 #10
I tilfælde af at der er flere mulige overlap (det vil meget sjældent forekomme) skal den antage at den korrekte er den med mest overlap.

I dit eksempel er der kun 1 løsning :

a a b b a a a b b a a a a a a a a

idet overlappet altid varer filen ud
Avatar billede erikjacobsen Ekspert
22. september 2003 - 21:58 #11
det var ikke helt korrekt. Prøver igen:

Hvad nu hvis de første linier er (skrevet på een linie):
  a a b b a a a b b a
og de næste er
  b b a a a b b a a a
Avatar billede breum Nybegynder
22. september 2003 - 21:59 #12
men et mere spændende eksempel er
a b c d e f g h f g
og
f g h f g e b h d g

Her er der nemlig 2 mulige løsninger
Avatar billede breum Nybegynder
22. september 2003 - 22:00 #13
undskyld forkert
Avatar billede breum Nybegynder
22. september 2003 - 22:01 #14
men et mere spændende eksempel er
b c d e f g h f g h
og
f g h f g h b h d g
Her er der nemlig 2 mulige løsninger
Avatar billede breum Nybegynder
22. september 2003 - 22:02 #15
b c d e f g h f g h f g h b h d g
eller
b c d e f g h f g h b h d g

her er den nederste "rigtig" for der er mest overlap
Avatar billede breum Nybegynder
22. september 2003 - 22:03 #16
Og endelig:
Hvis der slet ikke er overlap, skal de bare efter hinanden
Avatar billede breum Nybegynder
22. september 2003 - 22:04 #17
Og hvis der er 100% overlap smides den nyeste væk
Avatar billede erikjacobsen Ekspert
22. september 2003 - 22:05 #18
*g* Se nu ligner det noget.... Det tror jeg godt jeg kan lave. Jeg prøver lige.
Avatar billede breum Nybegynder
22. september 2003 - 22:09 #19
I dit eksempel

  a a b b a a a b b a
&
  b b a a a b b a a a

er der 2 mulige løsninger:
a a b b a a a b b a a a b b a a a
a a  b b a a a b b a a a

Den sidste er den korrekte (længst overlap)
Avatar billede breum Nybegynder
22. september 2003 - 22:10 #20
Jeg sidder iøvrigt og storsmiler, for jeg vidste allerede inden jeg postede denne at det ville "tænde" dig.
Avatar billede erikjacobsen Ekspert
22. september 2003 - 22:36 #21
Det er jo svært at sige nej til sådan noget.... Jeg ved ikke om det er det
mest elegante, men her er et forsøg du kan lege med:

@array1= ('a','b','b','a','a','a','b','b','a','a');
@array2= ('b','b','a','a','a','b','b','a','a','a');

$found=0;
$i=0; $j=0;
while (!$found && $i<=$#array1) {

  $mismatch=0;
  $j=0;
  while (!$mismatch && $j<=$#array2 && $i+$j<=$#array1) {
    if ($array1[$i+$j] ne $array2[$j]) {
      $mismatch=1;
    } else {
      $j++;
    }
  }

  if ($mismatch) {
    $i++;
  } else {
    $found=1;
  }

}

@array3=@array1;
if ($found) {
  for($j=0;$j<=$#array2;$j++) {
    $array3[$i+$j]=$array2[$j];
  }
} else {
  splice @array3,$#array3+1,0,@array2;
}

print join(",",@array3);
print "\n";
Avatar billede erikjacobsen Ekspert
22. september 2003 - 22:39 #22
Den nederste stump kan selvfølgelig være:

@array3=@array1;
if ($found) {
  splice @array3,$i,$#array3,@array2;
} else {
  splice @array3,$#array3+1,0,@array2;
}
Avatar billede breum Nybegynder
22. september 2003 - 22:43 #23
Den ser rigtig god ud! Såvidt jeg kan se fungerer den efter hensigten!!!!!!!!!!!!!

Jeg er en glad julegris!!!!!!!!!!!!!!!

Se så at smide et svar, for du slipper ikke for at få point!
Avatar billede breum Nybegynder
22. september 2003 - 22:47 #24
Jeg har testet den på en kravlegårsversion, imorgen får den sin rette plads, og du kommer med i min aftenbøn!
Avatar billede erikjacobsen Ekspert
22. september 2003 - 22:48 #25
Du bør slette $j=0; i linie 5 - det ser grimt ud ;))
Avatar billede breum Nybegynder
23. september 2003 - 23:00 #26
Grundet strømafbrydelsen blev det ikke idag at produktet blev født, men jeg glæder mig.
Avatar billede erikjacobsen Ekspert
23. september 2003 - 23:02 #27
Lad høre hvis det virker. Perl er sjovest med strøm på. Så os jyder
har det sjovere end jer sjællændere...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester