Problem 42: Kodierte Dreieckszahlen

Gesucht wird die Anzahl aller „Dreiecksworte“ in einer gegeben Liste von 2000 Worten! Als „Dreieckswort“ wird ein Wort bezeichnet, dessen Summe der Zahlenwerte seiner Buchstaben eine Dreieckszahl ist. [das englische Original]

Durch das vorhergehende Problem 22 gab es schon zwei Methoden, die die Lösung dieses Problem stark vereinfachten: Zum einen war das sortierte Auslesen einer Datei möglich, zum anderen war die Berechnung des alphabetischen Wertes eines Wortes gegeben!

Nun brauchte es nur noch eine Methode die prüft, ob eine gegebene Zahl eine Dreieckszahl ist. Um dies zu Testen muss man die gegeben Formel zur Berechnung einer Dreieckszahl umstellen:

Herleitung der Formel zum Prüfen, ob eine gegebene Zahl eine Dreieckszahl ist.
Herleitung der Formel zum Prüfen, ob eine gegebene Zahl eine Dreieckszahl ist.

Dies lässt sich im folgenden Einzeiler umsetzen:

public static boolean isTriangleNumber( int num ) {
   return Math.sqrt( 8.0 * num + 1 ) % 2 == 1;
}

Mit diesen drei Helferlein ist die Lösung des Problems recht einfach:

@Override
public String solve() {
 
  int count = 0;
 
  String[] words = IO.readSortedStrings( "data-files/p042_words.txt" );
 
  for( String word : words ) {
     if( Mathe.isTriangleNumber( Mathe.getAlphabeticalValue( word ) ) ) {
        count++;
        IO.infoln( count + ": " + word );
     }
   }
 
   return IO.i2s( count );
}

Den vollständigen Quellcode der Klasse für die Lösung des Problems 42 kann man sich hier anschauen!

<< Problem 41 Übersicht Problem 43 >>

Willkommen in Nico Dannebergs Netzwerk

%d Bloggern gefällt das: