#!/usr/bin/perl -w
#re_NGD_code.pl

use Math::BigInt;

#####################################################################
##################    get log_10($n)   ##############################
#####################################################################


sub log10{
    my ($n) = @_;
    $tmp_log10 = Math::BigInt->bzero();

    if($n != 0  && $n ne -1){
	$n += 0.1;
	$tmp_log10 = log($n) / log(10.0) ;
	
	return $tmp_log10;
    }else{
	return 0;
    }
}


#####################################################################
#######    read "test_file.txt" and make NGD_matrix    ##############
#####################################################################

print"\n";

open(F,"in_h_for_g.txt");

while(<F>){
    @s = <F>;
}
#################################################################
#### in_file's textform :                                     ###
####           "n val"                                        ###
####           "word1  number_of_word's_count"                ### 
####                         ///                              ### 
####           "word1 word2 number_of_word's_count"           ###
####                         ///                              ###
#################################################################

####################################
### insert in_file's information ###
####################################



$n = 0;
$k = 1;
foreach $line(@s){
    chomp($line);
    @str = split(/\s/,$line,2);

    if($n == 0){
	$n = $str[1];     # n : number of word
	print"n $n\n";
    }else{
	$tmp = $str[0];

	$list{$tmp} = $str[1];    # insert in_file's information for @list

	if($k <= $n){
	    $matrix[$k][0] = $str[0];  # insert word for @matrix
	    $matrix[0][$k] = $str[0];
	}
	$k++;
    }
}

#################################################################################
### chose $matrix[$i][0] and $matrix[0][$j] , and get numbers of word's count ###
#################################################################################

for($i=1;$i<=$n;$i++){
    for($j=1;$j<=$n;$j++){

	if($i != $j){
	    $x_val = $list{$matrix[$i][0]};
	    $y_val = $list{$matrix[0][$j]};
	    
	    $tmp = $matrix[$i][0] . $matrix[0][$j];
	    $xy_val = $list{$tmp};
	    
################################
###        get NGD!          ###
################################
	    
	    $logx = &log10($x_val);
	    $logy = &log10($y_val);
	    $logxy = &log10($xy_val);
	    
	    $logN = 10.301;
	    
	    if($logx > $logy){
		$max = $logx;
		$min = $logy;
	    }else{
		$max = $logy;
		$min = $logx;
	    }
	    $tmp_val = $max - $logxy;
	    $NGD = abs ( $tmp_val / ( $logN - $min ) );
	    $matrix[$i][$j] = $NGD;

	}else{
	    $matrix[$i][$j] = 0;
	}

    }
}

###################################################################
#################     output of $matrix     #######################
###################################################################

for($i=1;$i<=$n;$i++){
    for($j=0;$j<=$n;$j++){
	if($j == 0){
	    print sprintf("%s ",$matrix[$i][$j]);
	}
	else{
	    print sprintf("%1.4f ",$matrix[$i][$j]);
	}
    }
    print "\n";
}
