Autor Thema: Wörtersuche aka. 9Live  (Gelesen 1836 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline Andreas

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 1323
  • Bewertung der Beiträge: 8
  • Geschlecht: Männlich
    • Profil anzeigen
    • https://www.pc-techniker.org
Wörtersuche aka. 9Live
« am: Oktober 05, 2005, 21:05:06 »
Hallo zusammen,

im Moment sind diese Quizsendungen ja inn, wo man verschieden Aufgaben lösen muß und Geld gewinnen kann. Der bekannteste Sender ist wahrscheinlich 9Live. Eine Art Quiz ist, wo man aus einer Art Buchstabensalat ein Wort bilden muß.... Nun gut..... 9Live soll ja angeblich mehrdeutige Löungen anbieten, was nicht bestätigt ist aber anscheinend spricht man drüber. Prüfen wir das  :-D

Mit ist da so eine Idee gekommen, die ich eben mal umgesetzt habe. Ich habe ein kleines Perl-Script geschrieben, welches aus einer Wortliste mit 300k Wörten aus einer x belibigen Buchstabenkombination die n Stellen hat das dazu passende Wort oder Wörter sucht.

#!/usr/bin/perl

print "\n \n";
print "########################################\n";
print "## Wortsucher                         ##\n";
print "########################################\n";
print "\n \n";
print "Bitte geben Sie die Buchstabenkombination ein";
print "\n \n";

$search = <STDIN>;
$search = lcfirst($search);
$count_search = length($search);
$result = open(Datei, "german.txt");
my $check = 0;
my @array_a;
my @array_b;

if($result)
{
my @words = <Datei>;
close(Datei);

foreach $i (@words)
{
  $count_word = length($i);
  $i = lcfirst($i);
  if($count_search == $count_word)
  {
           
           if("$search" eq "$i")
           {
               print " Das gesuchte Wort ist $i ";
               last;
           }
           
           else
           {
           
               for(my $a = 0; $a < $count_word; $a++)
               {
                  $array_a[$a] = substr($search,$a,1);
               }
               
               my @array_a_sort = sort(@array_a);
                     
               
               for(my $a = 0; $a < $count_word; $a++)
               {
                  $array_b[$a] = substr($i,$a,1);
               }
           
       my @array_b_sort = sort(@array_b);
           
       if("@array_a_sort" eq "@array_b_sort")
              {
     print " Das gesuchte Wort lautet $i";
      }
           }
       }
   }                  
}

Kurz zur Funktionsweise:

Das Script liest alle Wörter zeilenweise aus meiner Wortliste und vergleicht zuerst die Länge des eingegebenen String mit dem in der aktuellen Zeile. Diese art Vorsortierung erhöht die Geschwindigkeit des Scripts ungemein.
Wenn die Länge übereinstimmt, werden beide String in Buchstaben zerlegt und in einem Array gespeichert. Dieses Array wird anschließen sortiert und abgespeichert. Wenn beide Wörter übereinstimmen, muss auch das Array nach der Sortierung gleich sein. Somit ist das Wort gefunden.

Das Script selbst kann jeder mal Testen, wenn er so ein Quiz sieht.
Windowsuser müssen sich, sofern nicht schon vorhanden, den Perl Interpreter herunterladen und die Shebang-Zeile ( Erste Zeile in #!C:\pfad\zum\perl-interpreter ) ändern. Danach einfach das Script ausführen und die Buchstaben eingeben ... :-D Die Wortliste sollte im gleichen Ordner liegen.

Mein Rechner ( XP 3000+) braucht etwa 6 Sekunden für die komplette Liste ... Bissle schneller als ich  :mrgreen:

Download:
Wortliste
http://pc-techniker.portalsource.de/downloads/german.tgz (http://pc-techniker.portalsource.de/downloads/german.tgz)

Script
http://pc-techniker.portalsource.de/downloads/search.pl (http://pc-techniker.portalsource.de/downloads/search.pl)
« Letzte Änderung: Oktober 05, 2005, 21:43:37 von Andreas »
with best regards ....