Palindromen
- Datum:
- Auteur: Stefan Cruysberghs
Wat is een palindroom
Een palingdroom is een getal of een woord dat we langs twee kanten kunnen lezen en toch dezelfde klank behouden. Voorbeelden hiervan zijn lepel, 1001, 5445, kok,… Het palindroom probleem kan op een 3-tal manieren opgelost worden. De meestgebruikt methode is het aflopen van alle getallen tussen 1 en 999999 en het eerste cijfer vergelijken met het laatste, het tweede met het voorlaatste, ... totdat er een verschil optreedt. Als je het midden bereikt zonder dat er verschillen waren, dan is het getal een palindroom (1). Een andere methode is de helft van het getal af te knippen, dit om te keren en er achteraan bij te plakken. Is dit getal hetzelfde als het originele getal dan is het een palindroom (2). De snelste methode is het zelf aanmaken van palindromen (3).
Voorbeelden in verschillende programmeertalen
Hieronder volgen enkele programma’s die het 2de algoritme gebruiken. Deze programmetjes hebben we op snelheid getest. De testen zullen niet helemaal correct zijn, maar geven toch een vrij goed beeld van de kracht van de huidige programmeertalen. Verder herken je duidelijk in alle talen dezelfde structuren en overeenkomsten.
Delphi 3
// Delphi 3 procedure TForm1.SpeedButton1Click(Sender: TObject); var i, j, lengte, midden : integer; palindroom : string; begin Listbox1.Items.Clear; for i:=1 to 99999 do begin palindroom:=IntToStr(i); lengte:=Length(palindroom); midden:=(lengte+1) div 2; j:=0; repeat inc(j); until (j=midden) or (palindroom[j]<>palindroom[lengte-j+1]); if palindroom[j]=palindroom[lengte-j+1] then Listbox1.Items.Add(palindroom); end; end;
C++Builder
// C++Builder void __fastcall TForm1::SpeedButton1Click(TObject *Sender) { int i, j, lengte, midden; ListBox1->Items->Clear(); for (i = 1; i < 100000; i++) { str=IntToStr(i); lengte=StrLen(str.c_str()); midden=(lengte+1) / 2; j=1; while (j < midden && str[j]==str[lengte-j+1]) { j++; } if (str[j] == str[lengte-j+1]) { ListBox1->Items->Add(str); } } }
Visual Basic 5
' Visual Basic 5 Private Sub Command1_Click() Dim i, j, lengte, midden As Integer Dim palindroom As String List1.Clear For i = 1 To 99999 palindroom = i lengte = Len(palindroom) midden = (lengte + 1) / 2 j = 0 Do j = j + 1 Loop While j < midden And Mid$(palindroom, j, 1) = Mid$(palindroom, lengte - j + 1, 1) If Mid$(palindroom, j, 1) = Mid$(palindroom, lengte - j + 1, 1) Then List1.AddItem (palindroom) End If Next i End Sub
JavaScript
// JavaScript function Palindromen() { for (var i = 1; i < 100000; i++) { str=i+""; lengte=str.length; midden=lengte % 2; j=0; while (j < midden && str.substring(j,j+1) == str.substring(lengte-1-j,lengte-j)) { j++; } if (str.substring(j,j+1) == str.substring(lengte-1-j,lengte-j)) { document.writeln(i," "); } } }
VBScript
// VBScript Sub Palindromen() For i = 1 To 99999 palindroom = i lengte = Len(palindroom) midden = (lengte + 1) / 2 j = 0 Do j = j + 1 Loop While j < midden And Mid(palindroom, j, 1) = Mid(palindroom, lengte - j + 1, 1) If Mid(palindroom, j, 1) = Mid(palindroom, lengte - j + 1, 1) Then Document.Writeln palindroom End If Next End Sub
Snelheid
Programmeertaal | Snelheid | Opmerking |
Delphi 3 |
+++ |
Zeker en vast de snelste uit de rij |
C++ Builder |
+++ |
Benaderd Delphi maar de code is iets ingewikkelder |
Delphi 1 |
++ |
Iets tragen dan de 32-bit versie van Delphi |
Pascal (DOS) |
+ |
Scoort vrij goed |
Cobol (DOS) |
+ |
Raar maar waar |
Visual Basic 5 |
- |
Visual Basic scoort niet zo goed, het is dan ook maar een interpreter |
VBScript |
--- |
Is zeer traag t.o.v van gewone programmeertalen, maar steunt dan ook helemaal op de interpreter van de webbrowser |
JavaScript | --- |
Was ietsje tragen dan VBScript |