aNNiPAk, в экселе тоже мощный vbscript
# reaper (24.09.2015 / 23:00)
Тут недавно нормальная такая задачка была, с которой даже я не до конца справился.
Есть строка. Нужно найти все возможные комбинации регистра символов.
Например для строки abc:
abc
Abc
aBc
abC
Я видел её.
Вот мой велосипед через рекурсию
<?php
$word = 'a#()dbc';
F($word);
function F($word) {
$word = strtolower($word);
reqF($word);
}
function reqF($word, $pos = 0) {
if( $pos > strlen($word)-1 ){
echo $word . '<br>';
return;
}
if( !is_letter($word[$pos]) ){
reqF($word, $pos+1);
return;
}
reqF($word, $pos+1);
$word[$pos] = chr( ord($word[$pos]) - 32 );
reqF($word, $pos+1);
}
function is_letter($letter) {
return ('a' <= $letter && $letter <= 'z');
}
Мой велосипед, на скорую руку
function strSplit( $string, $key, $length = 1 )
{
if ( $length <= 0 )
{
$length = 1;
}
$strSplit = str_split(strtolower($string), $length);
if ( $key >= 0 && (count($strSplit) - 1) >= $key )
{
$strSplit[$key] = '<b>' . strtoupper($strSplit[$key]) . '</b>';
}
return $strSplit;
}
$string = md5(time());
$strlen = strlen($string);
$return = array();
foreach (range(1, $strlen) as $length)
{
foreach (range(0, $strlen) as $key)
{
$return[] = implode(strSplit($string, $key, $length));
}
}
//unset($string, $strlen, $length, $key);
echo implode('<br>' . PHP_EOL, array_unique($return));
//unset($return);
кстати Макса задача не решена осталась
прикольно делать одно т3 разными способами. надо развивать тему
ещё задачка для раздумья
печать календарика с выходными и днями неделями на текущий месяц
# Koenig (26.09.2015 / 13:50)
кстати Макса задача не решена осталась
прикольно делать одно Т3 разными способами. надо развивать тему
Я как раз над ней сейчас и работаю
ДоХтор, вроде там задачка для детей)
# Koenig (26.09.2015 / 23:14)
ДоХтор, вроде там задачка для детей)
Почувствую себя ребёнком
У меня какой-то быдлокод получился... Вроде бы всё просто, но туева хуча циклов, как ни крути, имеет место. И ещё я не реализовал сортировку по дате. И вообще, мне не понравилось моё решение, если найду время, то перепишу заново.
Пример (+/-)
<?php
/**
* Напиши скрипт, который будет:
* Собирать юзерагенты и ip пользователей, обращающихся к нему и сохранять в файл.
* В одном файле хранятся записи за последние 5 минут. Через 5 минут создается новый файл и
* последующие 5 минут в него пишутся юзер агенты и так далее.
*
* Файлов может быть не более 10 штук.
*
* После всего этого написать страничку, которая будет выводить юзерагенты из этих файлов
* в таблице примерно такого вида:
* Дата | Юзерагент | IP
*
* При выводе данных из файлов не должно быть повторяющихся связок IP + Юзерагент.
* Ну и сделать возможность сортировки по дате.
*/
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT);
if (!isset($_REQUEST[session_name()])) session_start();
$sid = session_id();
$textfile = time() . '.txt';
$time_is_up = time() - 300;
$numb_files = 10;
$date = date('j.m.Y - H:i:s');
$user_agent = htmlspecialchars($_SERVER['HTTP_USER_AGENT']);
$user_agent = str_replace('|', '', $user_agent);
$ip = $_SERVER['REMOTE_ADDR'];
$filing = $sid . '|' . $date . '|' . $user_agent . '|' . $ip;
$array_names = array();
foreach (glob('*.txt') as $file_name) {
$array_names[] = $file_name;
}
$all_strings = sizeof($array_names);
if ($all_strings == 0) {
file_put_contents($textfile, $filing . PHP_EOL, LOCK_EX);
} else {
$basename = (int)basename($array_names[($all_strings - 1)], '.txt');
if ($time_is_up > $basename) file_put_contents($textfile, $filing . PHP_EOL, LOCK_EX);
$file = file_get_contents(end($array_names));
$explode = explode(PHP_EOL, $file);
$temp = array();
foreach ($explode as $string) {
$array = explode('|', $string);
$temp[] = $array[0];
}
if (!in_array($sid, $temp)) {
file_put_contents(end($array_names), $filing . PHP_EOL, FILE_APPEND | LOCK_EX);
}
}
if ($all_strings > $numb_files) {
$array_names = array_reverse($array_names);
$arr_fnames = array();
$arr_contents = array();
for ($i = 0; $i < $numb_files; $i++) {
$arr_fnames[] = $array_names[$i];
$arr_contents[] = file_get_contents($array_names[$i]);
}
foreach (glob('*.txt') as $filename) unlink($filename);
for ($i = 0; $i < $numb_files; $i++) {
file_put_contents($arr_fnames[$i], $arr_contents[$i]);
}
}
/** ******************** Вывод в браузер ******************** **/
$array_result = array();
foreach (glob('*.txt') as $file_name) {
$array_result[] = file_get_contents($file_name);
}
$input = array_reverse($array_result);
$array_result = array_unique($input);
$contents = '<table border="1">';
$contents .= '<tr><td>Дата</td><td>Браузер</td><td>IP</td></tr>';
foreach ($array_result as $result) {
foreach (explode(PHP_EOL, $result) as $result) {
$expl_arr = explode('|', $result);
if (empty($expl_arr[0])) continue;
$contents .= '<tr><td>'. $expl_arr[1] .'</td><td>'. $expl_arr[2] .
'</td><td>'. $expl_arr[3] .'</td></tr>';
}
}
$contents .= '</table>';
echo $contents;
ДоХтор, я бы глянул в сторону spl там не плохие инструменты для работы с фс и файлами
# Koenig (27.09.2015 / 14:37)
ДоХтор, я бы глянул в сторону spl там не плохие инструменты для работы с фс и файлами
Спасибо, почитаю. А этот мой код неверно выполняет задачу, я его немного не дописал, потому что понял что логика немного ошибочна.