![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Przyjaciele php.pl Postów: 1 467 Pomógł: 13 Dołączył: 22.02.2003 Ostrzeżenie: (0%) ![]() ![]() |
Możecie bez strachu przejśc tutaj: http://forum.php.pl/viewtopic.php?p=31706#31706 ;P
[php:1:725d22549f]<?php $hashes = array(); function get_string() { static $string, $depth, $init; if( ! $init ) { $init = true; $string = array( chr( 1 ), chr( 1 ), chr( 1 ), chr( 1 ) ); $depth = 4; } else { if( ( $char = ++ord( $string[ $depth - 1 ] ) ) > 255 ) { $string[ $depth - 1 ] = chr( 1 ); for( $i = $depth - 1; $i > 0; $i-- ) if( ++ord( $string[ $i - 1 ] ) > 255 ) { $string[ $i - 1 ] = chr( 1 ); if( ( $i - 2 == 0 ) && ( ++ord( $string[ 0 ] ) > 255 ) ) { $string[ ++$depth - 1 ] = chr( 1 ); break; } else $string[ $i - 2 ] = chr( ord( $string[ $i ] ) ++ ); } else break; } else $string[ $depth - 1 ] = chr( $char ); } return implode( '', $string ); } do $hashes[ md5( ( $string = get_string() ) ) ] = $string; while( sizeof( $hashes ) <= pow( 16, 32 ) ); $fd = fopen( 'hashtable', 'w' ); fputs( $fd, serialize( $hashes ) ); fclose( $fd ); ?>[/php:1:725d22549f]niech ktoś to przetestuje, może najpierw tylko funkcje get_string(); pisalem bez testowania z glowy, wiec nie wiem czy dziala. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 1 467 Pomógł: 13 Dołączył: 22.02.2003 Ostrzeżenie: (0%) ![]() ![]() |
hmmm
a przeanalizujmy kod (troche zmieniony ;P ):[php:1:21720c74fc]<?php $hashes = array(); function get_string() { static $string, $depth, $init; if( ! $init )//jezeli nie ma zapoczatkowanego to zrob to { $init = true; $string = array( chr( 1 ), chr( 1 ), chr( 1 ), chr( 1 ) );//ustaw na 1,1,1,1 poniewaz ponizszy kod wymaga conajmniej 4 znakow $depth = 4; } else//jezeli zapoczatkowane { if( ( $char = ( ord( $string[ $depth - 1 ] ) ) + 1 ) > 255 )//jezeli ostatni znak powiekszony o 1 przekracza pule ascii { $string[ $depth - 1 ] = chr( 1 );//zmien ostatni znak na pierwszy w ascii for( $i = $depth - 1; $i > 0; $i-- )//dla kazdego znaku blizej poczatku sprawdz, czy nie przekracza ascii if( ( ord( $string[ $i - 1 ] ) + 1 ) > 255 )//jezeli tak { $string[ $i - 1 ] = chr( 1 );//zmien ten znak na pierwszy w ascii if( ( $i - 2 == 0 ) && ( ( ord( $string[ 0 ] ) + 1 ) > 255 ) )//jezeli znak przed nim jest pierwszym znakiem i przekracza pule { $string[ ++$depth - 1 ] = chr( 1 );//zwieksz dlugosc stringow $string[ 0 ] = chr( 1 );//zmien pierwszy znak na ascii 1 break;//skoncz petla } else//jezeli nie $string[ $i - 2 ] = chr( ( ord( $string[ $i ] ) + 1 ) );//zwieksz znak przed ostatnim znakiem, zeby po 1,1,1,255 dawalo 1,1,2,1 a nie 1,1,1,1 } else//jezeli nie przekracza puli asci { $string[ $i ] = ord( $string[ $i - 1 ] ) + 1;//zwieksz go o 1 break;//i zakoncz petle } } else//jezeli nie to $string[ $depth - 1 ] = chr( $char );//zwieksz ten znak } return implode( '', $string );//wiadomo } //dalej wiadomo do { $hashes[ md5( ( $string = get_string() ) ) ] = $string; print $string. "n";//debbuging } while( sizeof( $hashes ) <= pow( 16, 32 ) ); $fd = fopen( 'hashtable', 'w' ); fputs( $fd, serialize( $hashes ) ); fclose( $fd ); ?>[/php:1:21720c74fc]Może dojrzycie błąd? ps. zastanawiam się, czy nie przenieść do php? conajmniej ostatnich paru postów //edit, juz sie nie zastanawiam ;P post nawiazuje dohttp://forum.php.pl/viewtopic.php?t=4985 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 8.10.2025 - 02:01 |