(* Buchseiten-RŠtsel, L. Fellermayr *) let laenge = String.length;; let string_of_char = String.make 1;; let ziffer_frst = fun s -> String.get s 0;; let ziffer_last = fun s -> String.get s ((laenge s)-2);; (* Prźft, ob Float f ungerade ist. *) let isOddFloat f = int_of_string (string_of_char (ziffer_last (string_of_float f))) mod 2 <> 0;; (* Produkt aus z und seinen drei Nachfolgern berechnen *) let viererprod z = z *. (z+.1.) *. (z+.2.) *. (z+.3.);; (* Ganzzahlige Floats ohne Punkt ausgeben *) let string_of_float2 f = String.sub (string_of_float f) 0 ((laenge (string_of_float f))-1) (* Achtung: 11 Zeichen wegen finalem ".", da Typ float *) let itMatches z s = (isOddFloat z) && (laenge s == 11) && (ziffer_frst s == '5') && (ziffer_last s == '4');; let rec doBruteForce z = if itMatches z (string_of_float (viererprod z)) then (* Passender Wert gefunden, Terminierung *) string_of_float2 (z) ^ "," ^ string_of_float2 (z+.1.) ^ "," ^ string_of_float2 (z+.2.) ^ "," ^ string_of_float2 (z+.3.) else doBruteForce (z+.1.) in doBruteForce 1.;; (* Optimalerweise sollte man natźrlich doBruteForce bei einem Startwert von plusminus fourth_root(5000000000) loslegen lassen (wobei fourth_root(x) die vierte Wurzel von x sein soll), da jeder kleinere Startwert (bei diesem Ergebnis) Verschwendung von Rechenzeit ist. *)