Hi My goal is read only line from file , and find fibonacci series that has minimun 3 element.I want to control numbers from 1 to 6 digit. Fibonacci series starts 1,1,2,3,5,8,13,21,34,55,89, ...... .For example;File text document
49693463452312343388645
I division string 1 to 6 digit. Check 4 is fibonacci number , no , go ahaed 49 is fibonacci number , no, next 496 is fibonacci ,no, 4969 after 44693 ,after 496934 no.There isnt any fibonacci , go to next digit and do it again 9 , 96,969,9693,96934.
use 5.010;
use strict;
use warnings;
open(FILE, "<:encoding(UTF8)", "aa.txt") or die "Could not open file:
+ $!";
my $numbers;
while (<FILE>) {
$numbers="$_" ;
print "$_";
}
chomp $numbers;
print "\n$numbers";
my $len=length($numbers);
print "\n$len\n";
my $i;
my $abc;
foreach my $i (0..$len){
foreach my $j (1..6) {
print "$j>";
$abc = substr($numbers,$i,$j);
print "$abc\n";
}
print "***********************************\n";
}
close FILE;
I read to find fibonacci series with PERFECT SQUARE. I didn't use it. C code example
// C++ program to check if x is a perfect square
#include <iostream>
#include <math.h>
using namespace std;
// A utility function that returns true if x is perfect square
bool isPerfectSquare(int x) {
int s = sqrt(x);
return (s*s == x);
}
// Returns true if n is a Fibinacci Number, else false
bool isFibonacci(int n) {
// n is Fibinacci if one of 5*n*n + 4 or 5*n*n  4 or both
// is a perferct square
return isPerfectSquare(5*n*n + 4)  isPerfectSquare(5*n*n  4);
}
// A utility function to test above functions
int main() {
for (int i = 1; i <= 10; i++)
isFibonacci(i)? cout << i << " is a Fibonacci Number \n":
cout << i << " is a not Fibonacci Number \n" ;
+
return 0;
}
20171229 Athanasius restored original content
Re: Read file text and find fibonacci series
by haukex (Canon) on Dec 28, 2017 at 19:12 UTC

This appears to have been posted to Meditations, but I'm not sure if you meant it to be a question? Anyway, you're describing scanning a string looking for a pattern, which is exactly what regular expressions are good at. Ignoring the duplicate 1's, there are only 29 Fibonacci numbers with 1 to 6 digits, a regex can handle that just fine (and it would have no problem handling much more). See Building Regex Alternations Dynamically.
This code can handle huge numbers too, try changing $DIGITS to e.g.
60. And note that you can use the same regex to find sequences of numbers, e.g. (?:$re){3,} (although that doesn't check if they are consecutive in the sequence).
#!/usr/bin/env perl
use warnings;
use strict;
my $DIGITS = 6;
my %fib;
{ use bigint;
for ( my ($f,$t)=(1,1); length($f)<=$DIGITS; ($f,$t)=($t,$f+$t) ) {
my $s = "$f";
$fib{$s} = [$s];
while (length $s > 1) {
chop $s;
push @{$fib{$f}}, $s if exists $fib{$s};
}
} }
#use Data::Dump; dd \%fib;
print "There are ",0+keys(%fib)," fibs with up to $DIGITS digits\n";
my ($re) = map {qr/$_/} join '', map {quotemeta}
sort { length $b <=> length $a or $b cmp $a } keys %fib;
print "$re\n";
while (<DATA>) {
chomp;
print "Searching '$_'\n";
while (/(?=($re))./g) {
print "Found ",join(', ',@{$fib{$1}})," at ",$[0],"\n";
}
}
__DATA__
496934634523123433886451447233402467622113
690168906931029935139391829792095612517948949963798093315456
Update: You appear to have edited your node to remove its content, please see How do I change/delete my post? for why you shouldn't do that. Content restored, thanks Athanasius. Also made very minor fixups.
 [reply] [d/l] [select] 

Hi, haukex.
while (/(?=($re))./g) { ... }
"Look for a fib anywhere ahead, then if found, consume its leftmost digit, then repeat" probably makes no sense, even for this assignment/homework. The %fib was built but not actually used. The "3 element" part of assignment (not addressed in your code) could be either consecutive, or just ascending fibs. But, the way %fib was constructed, it may be to help looking for a fib whose initial digits are a fib too, whose initial digits, ..., etc. While leftmost digit of any 2digit fib is a fib,  I wonder if any value of %fib could be an array with more than 3 elements? :)
P.S. Please, I'm not appealing to rewrite anything, don't waste your time, the task is too much unclear.
P.P.S. And, I suspect the "PERFECT SQUARE" in OP, in C, won't work for 6digit numbers and int type, because of overflow?
 [reply] [d/l] [select] 

The %fib was built but not actually used.
Well not quite, it is used for what you said:
to help looking for a fib whose initial digits are a fib too
This is what I was using it for, since I didn't feel like getting too fancy with the regex. The code I wrote was mostly just an implementation of my interpretation of the description the OP gave:
"Check 4 is fibonacci number , no , go ahaed 49 is fibonacci number , no, next 496 is fibonacci ,no, 4969 after 44693 [sic] ,after 496934 no.There isnt any fibonacci , go to next digit and do it again 9 , 96,969,9693,96934."
I wonder if any value of %fib could be an array with more than 3 elements?
Good question, I didn't try cranking up $DIGITS past 60 yet...
the task is too much unclear
Agreed, which is why I just implemented the part I (thought I) understood ;)
 [reply] [d/l] [select] 
Re: Read file text and find fibonacci series
by thanos1983 (Vicar) on Jan 02, 2018 at 18:00 UTC

Hello darkblackblue,
As the fellow Monks say this looks like a school assignment. Well I could suggest another approach to your problem but it only contains half of the solution, I have left the rest for you to solve.
Sample of code:
I used different hard coded input instead of reading your data from your file but you get the point that the input is data from your file. What I am doing on this sample of code is comparing the string part by part as you wanted with a list of fibonacci numbers. The module that I am using is Math::Fibonacci. What the script does not do is to compare the numbers by subtracting the elements one by one until the end as you described. I have left this part out.
Update: I just observed that the darkblackblue has asked the question since the 28th December. I assume that he/she was not able to resolve it. Just to add complete answer to the question for future reference see sample of code bellow:
Hope this helps, BR.
Seeking for Perl wisdom...on the process of learning...not there...yet!
 [reply] [d/l] [select] 
Re: Read file text and find fibonacci series
by aartist (Monk) on Jan 02, 2018 at 15:14 UTC

Is it a programming exercise or you are solving a mathematical problem?  [reply] 

