#!/usr/bin/perl -w

$N=1000;
$q=$ARGV[0];
$ntimesteps=1;


print STDERR "Number of patterns is $q.\n";


# Muster erzeugen
for ($mu=0; $mu<$q; $mu++) {
  for ($i=0; $i<$N; $i++) {
    if ( rand(1) >= 0.5 ) {
      $xi[$mu][$i]=1;
    } else {
      $xi[$mu][$i]=-1;
    }
  }
}


# Synapsenstaerken berechnen
for ($i=0; $i<$N; $i++) {
  for ($j=0; $j<$N; $j++) {
    $sum=0;
    for ($mu=0; $mu<$q; $mu++) {
      $sum += $xi[$mu][$i]*$xi[$mu][$j];
    }
    $J[$i][$j]=1/$N*$sum;
  }
  $J[$i][$i]=0;
}

# Zahl der korrekt erinnerten Muster
$ncorrect=0;

# Fuer alle Muster:
for ($mu=0; $mu<$q; $mu++) {

  # Netz mit Anfangsmuster initialisieren
  for($i=0; $i<$N; $i++) {
    $S[$i]=$xi[$mu][$i];
  }

  # Zeitliche Entwicklung berechnen
  for($t=0; $t<$ntimesteps; $t++) {
    for($i=0; $i<$N; $i++) {
      $v[$i]=0;
      for($j=0; $j<$N; $j++) {
	$v[$i] += $J[$i][$j] * $S[$j];
      }
    }
    for($i=0; $i<$N; $i++) {
      if($v[$i]<0) {
	$S[$i]=-1;
      } else {
	$S[$i]=1;
      }
    }
  }

  # Netz im Endzustand mit gespeichertem Muster 
  # vergleichen
  $overlap=0;
  for($i=0; $i<$N; $i++) {
    $overlap += $S[$i]*$xi[$mu][$i];
  }
  $overlap /= $N;
  print STDERR "Overlap with pattern $mu is $overlap.\n";
  if ( $overlap==1 ) {
    $ncorrect++;
  }

}


$percent_correct = $ncorrect/$q;
print "$q $percent_correct\n";
