Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: тестовое задание
 
 автор: admiral   (04.11.2010 в 16:35)   письмо автору
 
 

Прислали задание по почте. Я честно его понять не могу, точнее примеры, которые написали.
Вот —

Дан текст в кодировке utf-8. Необходимо написать функцию, 
которая принимает на вход этот текст и выдает список слов, в 
которых все буквы в слове следуют в алфавитном порядке.

Примеры
Вход: abcd 01234 87 01235
Выход: abcd 01234

Вход: ололо я прст гусей
Выход: я прст

  Ответить  
 
 автор: Лена   (04.11.2010 в 16:45)   письмо автору
 
   для: admiral   (04.11.2010 в 16:35)
 

Последовательность:
explode() - по пробелу
str_split() - преобразуем каждый полученный элемент в массив
asort() - сортируем по алфавиту
implode() - объединяем полученное в строку

  Ответить  
 
 автор: Trianon   (04.11.2010 в 16:58)   письмо автору
 
   для: Лена   (04.11.2010 в 16:45)
 

Это не то, что требовалось.
Требовалось лишь пропустить элементы удовлетворяющие условию.
Ничего не переделывая.

  Ответить  
 
 автор: sim5   (04.11.2010 в 17:03)   письмо автору
 
   для: Лена   (04.11.2010 в 16:45)
 

И будет работать?

  Ответить  
 
 автор: psychomc   (04.11.2010 в 17:10)   письмо автору
 
   для: admiral   (04.11.2010 в 16:35)
 

создайте строку с последовательностью символов алфавита. abcdef......0123...
разбейте входную строку на массив по словам.
проверяйте входит ли каждое слово из массива слов входной строки в строку с алфавитом. те которые входят записывайте в результат.

  Ответить  
 
 автор: sim5   (04.11.2010 в 17:20)   письмо автору
 
   для: psychomc   (04.11.2010 в 17:10)
 

Какой алфавит?

  Ответить  
 
 автор: Trianon   (04.11.2010 в 17:26)   письмо автору
 
   для: sim5   (04.11.2010 в 17:20)
 

unicode

  Ответить  
 
 автор: sim5   (04.11.2010 в 17:27)   письмо автору
 
   для: Trianon   (04.11.2010 в 17:26)
 

Я думаю, что он об этом даже и не подумал.

  Ответить  
 
 автор: Trianon   (04.11.2010 в 17:24)   письмо автору
 
   для: psychomc   (04.11.2010 в 17:10)
 

строка вроде bde сквозь такой фильтр не пройдет.
А согласно условию, должна, очевидно.

И опять же - Вы представляете себе строку, размером с весь unicode? По-моему - нет.

  Ответить  
 
 автор: psychomc   (04.11.2010 в 17:29)   письмо автору
 
   для: Trianon   (04.11.2010 в 17:24)
 

мне показалось, что русского, английского и чисел достаточно

  Ответить  
 
 автор: Trianon   (04.11.2010 в 17:36)   письмо автору
 
   для: psychomc   (04.11.2010 в 17:29)
 

зря. Не надо быть таким шовинистом.
Тем более, что алфавит задан в условии явным образом.

  Ответить  
 
 автор: psychomc   (04.11.2010 в 17:31)   письмо автору
 
   для: Trianon   (04.11.2010 в 17:24)
 

нет, судя по всему вы ошибаетесь

условие
Вход: abcd 01234 87 01235
Выход: abcd 01234

01235 не прошло, хотя по вашим словам должно бы...

  Ответить  
 
 автор: Trianon   (04.11.2010 в 17:35)   письмо автору
 
   для: psychomc   (04.11.2010 в 17:31)
 

условие непрерывности в задании не подчеркивается,
пожалуй, этот пример ему и вправду противоречит.
Тем хуже для примера. :)

  Ответить  
 
 автор: psychomc   (04.11.2010 в 17:37)   письмо автору
 
   для: Trianon   (04.11.2010 в 17:35)
 

согласен. вообще задание само по себе неочевидное. но я намеренно его не усложнял бы :)

  Ответить  
 
 автор: psychomc   (04.11.2010 в 17:32)   письмо автору
 
   для: admiral   (04.11.2010 в 16:35)
 

набросал черновое решение из условия (алфавит весь не переписывал)

<?php
$abc 
"abcdefjhi...0123456789";
$str "abc abb cde cce 0001 0123 555 456 88 89";
$words_arr explode(" "$str);
foreach (
$words_arr as $key => $word) {
    if (!
mb_substr_count($abc$word"utf-8")) {
        unset(
$words_arr[$key]);
    } 
}
echo 
implode(" "$words_arr);

  Ответить  
 
 автор: sim5   (04.11.2010 в 18:18)   письмо автору
 
   для: psychomc   (04.11.2010 в 17:32)
 

Как быть в вашем решении, если будут строки в верхнем регистре? К тому же, utf-это не обязательно два байта.

  Ответить  
 
 автор: psychomc   (04.11.2010 в 18:27)   письмо автору
 
   для: sim5   (04.11.2010 в 18:18)
 

это просто пример. я думаю, автор напишет сам или приведет его к тому виду,который ему нужен. вариантов много, включая самый кривой - просто записать в алфавит те же символы в верхнем регистре.

  Ответить  
 
 автор: psychomc   (04.11.2010 в 18:37)   письмо автору
 
   для: sim5   (04.11.2010 в 18:18)
 

а как Вам такой вариант?


<?php
// ....
      
if (!preg_match("/".preg_quote($word)."/i"$abc)) {
      
// .....
      
}
// ...

  Ответить  
 
 автор: sim5   (04.11.2010 в 18:44)   письмо автору
 
   для: psychomc   (04.11.2010 в 18:37)
 

Что вы меня спрашиваете, вы попробуйте, вот вам и ответ будет, но utf

  Ответить  
 
 автор: psychomc   (04.11.2010 в 20:18)   письмо автору
 
   для: sim5   (04.11.2010 в 18:44)
 

я попробовал еще до того, как написал тут.
работает так как надо, файл в кодировке utf-8

  Ответить  
 
 автор: Trianon   (04.11.2010 в 22:22)   письмо автору
 
   для: psychomc   (04.11.2010 в 20:18)
 

выходит, плохой файл выбрали, негодный... :)

  Ответить  
 
 автор: psychomc   (04.11.2010 в 22:46)   письмо автору
 
   для: Trianon   (04.11.2010 в 22:22)
 

я уже даже так поизвращался :)

<?php
$abc 
iconv("cp1251""UTF-8""abcdefjhi...0123456789"); 
$str iconv("cp1251""UTF-8""abc abb cde cce 0001 0123 555 456 88 89"); 
// ...


p.s разъясните плиз в чем тут соль, а то судя по всему я в теме кодировок плаваю

  Ответить  
 
 автор: sim5   (05.11.2010 в 08:44)   письмо автору
 
   для: psychomc   (04.11.2010 в 22:46)
 

Стоило с английскими литерами извращаться-то, им и utf то не нужен для примера вашего.

  Ответить  
 
 автор: psychomc   (05.11.2010 в 10:26)   письмо автору
 
   для: sim5   (05.11.2010 в 08:44)
 

а, вот оно что...русские не тестил. пусть уже этим автор занимается :)

  Ответить  
 
 автор: Gubichev   (04.11.2010 в 19:00)   письмо автору
 
   для: psychomc   (04.11.2010 в 18:37)
 

Почему бы не воспользоваться таблицей ASSCI?

  Ответить  
 
 автор: sim5   (04.11.2010 в 19:05)   письмо автору
 
   для: Gubichev   (04.11.2010 в 19:00)
 

А что это за таблица?

  Ответить  
 
 автор: Gubichev   (04.11.2010 в 19:12)   письмо автору
 
   для: sim5   (04.11.2010 в 19:05)
 

*ASCII

  Ответить  
 
 автор: sim5   (04.11.2010 в 19:15)   письмо автору
 
   для: Gubichev   (04.11.2010 в 19:12)
 

Это другое дело, но в задании как бы не указывается, что строки представленные в utf обязательно только те, которые можно представить в ASCII.

  Ответить  
 
 автор: Красная_шляпа   (05.11.2010 в 12:16)   письмо автору
 
   для: admiral   (04.11.2010 в 16:35)
 


<?php

$text 
"ололо я прст гусей";
$words explode(" "$text);
$result = array();
foreach (
$words as $word) {

$chars = array();
$chars str_split($word);
$count count($chars);
$i 0;
$boolean true;
for (
$i 0$i $count 1; ++$i) {
     
$x $chars[$i];
     
$y = ++$x;
     if (
$y == $chars[$i 1]) {
         continue;
     }
     else {
         
$boolean false;
         break;
     }
}
if (
$boolean) {
    
$result[] = $word;
}
}
var_dump($result);


?>

  Ответить  
 
 автор: sim5   (05.11.2010 в 12:21)   письмо автору
 
   для: Красная_шляпа   (05.11.2010 в 12:16)
 

Еще один умник. Вы хотя бы попробовали на бумажке, отдельно, str_split для utf, о коем говорится в задании, а уж потом...

  Ответить  
 
 автор: Красная_шляпа   (05.11.2010 в 12:24)   письмо автору
 
   для: sim5   (05.11.2010 в 12:21)
 


<?php 

$text 
"abcd 01234 87 01235"
$words explode(" "$text); 
$result = array(); 
foreach (
$words as $word) { 
    
$chars = array(); 
    
$chars str_split($word); 
    
$count count($chars); 
    
$i 0
    
$boolean true
    for (
$i 0$i $count 1; ++$i) { 
         
$x $chars[$i]; 
         
$y = ++$x
         if (
$y == $chars[$i 1]) { 
             continue; 
         } 
         else { 
             
$boolean false
             break; 
         } 
    } 
    if (
$boolean) { 
        
$result[] = $word
    } 

var_dump($result); 


?>


работает для русских букв другой алгоритм придумывать надо

  Ответить  
 
 автор: sim5   (05.11.2010 в 12:32)   письмо автору
 
   для: Красная_шляпа   (05.11.2010 в 12:24)
 

Очень ценно! А для китайских другой, а для иврита еще один....

  Ответить  
 
 автор: Красная_шляпа   (05.11.2010 в 12:49)   письмо автору
 
   для: sim5   (05.11.2010 в 12:32)
 



<?php 

echo "<html><head><meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\"></head><body><pre>";

$alpha "";
for (
$i 65$i <= 122; ++$i) {
    if (
$i >= 91 and $i 97) continue;
    
$alpha.= chr($i);
}
$alpha str_split($alpha);
$alpha[] = "А";
$alpha[] = "Б";
$alpha[] = "В";
$alpha[] = "Г";
$alpha[] = "Д";
$alpha[] = "Е";
$alpha[] = "Ё";
$alpha[] = "Ж";
$alpha[] = "З";
$alpha[] = "И";
$alpha[] = "Й";
$alpha[] = "К";
$alpha[] = "Л";
$alpha[] = "М";
$alpha[] = "Н";
$alpha[] = "О";
$alpha[] = "П";
$alpha[] = "Р";
$alpha[] = "С";
$alpha[] = "Т";
$alpha[] = "У";
$alpha[] = "Ф";
$alpha[] = "Ц";
$alpha[] = "Ч";
$alpha[] = "Ш";
$alpha[] = "Щ";
$alpha[] = "Ъ";
$alpha[] = "Ы";
$alpha[] = "Ь";
$alpha[] = "Э";
$alpha[] = "Ю";
$alpha[] = "Я";
$alpha[] = "а";
$alpha[] = "б";
$alpha[] = "в";
$alpha[] = "г";
$alpha[] = "д";
$alpha[] = "е";
$alpha[] = "ё";
$alpha[] = "ж";
$alpha[] = "з";
$alpha[] = "и";
$alpha[] = "й";
$alpha[] = "к";
$alpha[] = "л";
$alpha[] = "м";
$alpha[] = "н";
$alpha[] = "о";
$alpha[] = "п";
$alpha[] = "р";
$alpha[] = "с";
$alpha[] = "т";
$alpha[] = "у";
$alpha[] = "ф";
$alpha[] = "ц";
$alpha[] = "ч";
$alpha[] = "ш";
$alpha[] = "щ";
$alpha[] = "ъ";
$alpha[] = "ы";
$alpha[] = "ь";
$alpha[] = "э";
$alpha[] = "ю";
$alpha[] = "я";

// print_r($alpha);
function mb_str_split($str) { 
    return 
preg_split("/(?<!^)(?!$)/u"$str); 
}

$text "abcd 01234 87 01235"
$words explode(" "$text); 
$result = array(); 
foreach (
$words as $word) { 
    
$chars = array(); 
    
$chars mb_str_split($word); 
    
$count count($chars); 
    
$i 0
    
$boolean true
    for (
$i 0$i $count 1; ++$i) { 
        
$x array_search($chars[$i], $alpha); 
        
$y $alpha[$x 1];     
        if (
$y == $chars[$i 1]) { 
            continue; 
        } 
        else { 
            
$boolean false
            break; 
        } 
    } 
    if (
$boolean) { 
        
$result[] = $word
    } 

var_dump($result); 
echo 
"</pre></body></html>";

?>



Вот решение соответствующее условию задачи.

  Ответить  
 
 автор: Красная_шляпа   (05.11.2010 в 12:59)   письмо автору
 
   для: admiral   (04.11.2010 в 16:35)
 



<?php 

$text 
"abcd 01234 87 01235"

$alphanumeric = array (
  
=> '0',
  
=> '1',
  
=> '2',
  
=> '3',
  
=> '4',
  
=> '5',
  
=> '6',
  
=> '7',
  
=> '8',
  
=> '9',
  
10 => 'A',
  
11 => 'B',
  
12 => 'C',
  
13 => 'D',
  
14 => 'E',
  
15 => 'F',
  
16 => 'G',
  
17 => 'H',
  
18 => 'I',
  
19 => 'J',
  
20 => 'K',
  
21 => 'L',
  
22 => 'M',
  
23 => 'N',
  
24 => 'O',
  
25 => 'P',
  
26 => 'Q',
  
27 => 'R',
  
28 => 'S',
  
29 => 'T',
  
30 => 'U',
  
31 => 'V',
  
32 => 'W',
  
33 => 'X',
  
34 => 'Y',
  
35 => 'Z',
  
36 => 'a',
  
37 => 'b',
  
38 => 'c',
  
39 => 'd',
  
40 => 'e',
  
41 => 'f',
  
42 => 'g',
  
43 => 'h',
  
44 => 'i',
  
45 => 'j',
  
46 => 'k',
  
47 => 'l',
  
48 => 'm',
  
49 => 'n',
  
50 => 'o',
  
51 => 'p',
  
52 => 'q',
  
53 => 'r',
  
54 => 's',
  
55 => 't',
  
56 => 'u',
  
57 => 'v',
  
58 => 'w',
  
59 => 'x',
  
60 => 'y',
  
61 => 'z',
  
62 => 'А',
  
63 => 'Б',
  
64 => 'В',
  
65 => 'Г',
  
66 => 'Д',
  
67 => 'Е',
  
68 => 'Ё',
  
69 => 'Ж',
  
70 => 'З',
  
71 => 'И',
  
72 => 'Й',
  
73 => 'К',
  
74 => 'Л',
  
75 => 'М',
  
76 => 'Н',
  
77 => 'О',
  
78 => 'П',
  
79 => 'Р',
  
80 => 'С',
  
81 => 'Т',
  
82 => 'У',
  
83 => 'Ф',
  
84 => 'Ц',
  
85 => 'Ч',
  
86 => 'Ш',
  
87 => 'Щ',
  
88 => 'Ъ',
  
89 => 'Ы',
  
90 => 'Ь',
  
91 => 'Э',
  
92 => 'Ю',
  
93 => 'Я',
  
94 => 'а',
  
95 => 'б',
  
96 => 'в',
  
97 => 'г',
  
98 => 'д',
  
99 => 'е',
  
100 => 'ё',
  
101 => 'ж',
  
102 => 'з',
  
103 => 'и',
  
104 => 'й',
  
105 => 'к',
  
106 => 'л',
  
107 => 'м',
  
108 => 'н',
  
109 => 'о',
  
110 => 'п',
  
111 => 'р',
  
112 => 'с',
  
113 => 'т',
  
114 => 'у',
  
115 => 'ф',
  
116 => 'ц',
  
117 => 'ч',
  
118 => 'ш',
  
119 => 'щ',
  
120 => 'ъ',
  
121 => 'ы',
  
122 => 'ь',
  
123 => 'э',
  
124 => 'ю',
  
125 => 'я',
);

$result = array(); 
$words explode(" "$text);

function 
mb_str_split($str) { 
    return 
preg_split("/(?<!^)(?!$)/u"$str); 
}
 
foreach (
$words as $word) { 
    
// 9ABC или Za или zАБВГ не подходят
    
if (preg_match("/^[0-9]+$/"$word) or preg_match("/^[a-z]+$/u"$word) or preg_match("/^[A-Z]+$/u"$word) or preg_match("/^[а-я]+$/u"$word) or preg_match("/^[А-Я]+$/u"$word)) {
        
$chars = array(); 
        
$chars mb_str_split($word); 
        
$count count($chars); 
        
$boolean true
        for (
$i 0$i $count 1; ++$i) { 
            
$x array_search($chars[$i], $alphanumeric); 
            
$y $alphanumeric[$x 1];     
            if (
$y == $chars[$i 1]) { 
                continue; 
            } 
            else { 
                
$boolean false
                break; 
            } 
        } 
        if (
$boolean) { 
            
$result[] = $word
        } 
    }
}
echo 
"<html>
<head>
<meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\">
</head>
<body>
<pre>"
;
var_dump($result); 
echo 
"</pre>
</body>
</html>"
;

?>



На выходе:



array(2) {
  [0]=>
  string(4) "abcd"
  [1]=>
  string(5) "01234"
}





<?php 

$text 
"ололо я прст гусей"

// ...



На выходе:



array(2) {
  [0]=>
  string(2) "я"
  [1]=>
  string(8) "прст"
}



Автор ты ололо и с тебя 62WMR ггг.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования