За последние 24 часа нас посетили 17697 программистов и 1625 роботов. Сейчас ищут 953 программиста ...

Задача и безысходность

Тема в разделе "Сделайте за меня", создана пользователем HoneySeller, 16 окт 2014.

  1. HoneySeller

    HoneySeller Новичок

    С нами с:
    16 окт 2014
    Сообщения:
    4
    Симпатии:
    0
    Всем привет.

    Получил задачу, суть: написать регулярное выражение, которое в введенных в формы словах меняют буквы местами: первую букву в первом слове на последнюю во втором, вторую на вторую и третью букву в одном слове на первую в другом. Например, превратить слова "мед" и "кот" в "ток" и "дем".

    Меня уверили, что это "задача на полчаса максимум", я же за последние 2 дня потратил около 7часов на поиск инфы в гугле, книг накачал и перелопатил, нихрена не нашел подобного. И да, в теме я новый, оттуда и скилл. Походу, прогание не моё, но сделать это очень надо. Вчера ночью, просидев очередные 3 часа над задачей и не решив её - четко ощутил чувство безысходности, не лучшее чувство. Мне и подсказать никто из круга знакомых не в силах.

    Создал форму:
    Код (Text):
    1. <html>
    2. <head></head>
    3. <body>
    4. <div align="center">
    5. <form action="cc.php" method="POST">
    6. Введите первое слово:</br>
    7. <input type="text" name="slovo1"></br>
    8. Введите второе слово</br>
    9. <input type="text" name="slovo2"></br>
    10. <input type="submit"  value="Поменять буквы">  
    11. </body>
    12. </html>
    Подскажите: в какой стороне мне копать? Или есть ссылки на материалы, которые мне помогут? Перезагрузил себя слишком большой дозой инфы. Уже ничего не понимаю.

    Бьюсь об заклад, если кто решит задачу в теме - отправлю копейки на килограмм фруктов или кину на телефон.
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ставим два слова рядом. делаем реплейс по регулярке. ищем первую букву - несколько символов - последнюю букву - пробел - первую букву - несколько символов - последнюю букву. меняем на 6-2-4 3-5-1. эксплод по пробелу и забирайте свои слова. элементарно, не?
     
  3. HoneySeller

    HoneySeller Новичок

    С нами с:
    16 окт 2014
    Сообщения:
    4
    Симпатии:
    0
    "На 6макс столе открываем 3бб с ракетами с утюга, нас коллят на кнопке и тайтовый малый блайнд делает сквиз с общим показателем 2% на 10к+ рук. Диапазон у него узкий, значит, вероятно, он готов 5бетом запихнуть на префлопе стек, мы даем 4бет и ожидаем от него пуш" - вроде тоже элементарно, но плохо посвященному человеку сложно будет понять суть.

    Ganzal, я искренне благодарен тебе за оставленный комментарий :) Спасибо, что не остался равнодушен. Есть за что зацепиться, буду копать дальше.
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    HoneySeller, что ты хотел сказать этими терминами? мы на карточном форуме? нет. ты пришел в дом программистов и пытаешься выпендриваться карточными терминами. тебе дали четкий алгоритм действий. три сраные строки кода. ты хотя бы приложи усилия почитать про то как конкатенация переменных делается чтоб получилось строка номер один. почитай про то какие бывают шаблоны регулярных выражений и про подстановку значений при замене. и у тебя есть строка два. а потом найди банальную функцию которая разбивает строку по пробелу. и у тебя есть строка три. не надо тут про стеки и префлопы. ты вроде просил помощи с пхп и регуляркой. а сам потом про карты заговорил. что ты как дешевка какая-то? не уважаешь себя так других уважай. ок?

    будут проблемы с реализацией - пиши, поможем. там всё элементарно. потрудись написать эти три строки пхп кода а не высера карточными терминами.
     
  5. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    preg_replace('~(.)(.)(.)~', '\3\2\1', $text)
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    в задаче про два слова, увы.
     
  7. osipov180

    osipov180 Новичок

    С нами с:
    17 окт 2014
    Сообщения:
    10
    Симпатии:
    0
    Одни и те же люди во всех форумах занимаются самолюбованием.
    Лучше вообще не отвечайте, чем так. Помощи от вас никакой.
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    очень обидные слова...

    Код (PHP):
    1. <?php
    2. $r1 = $r2 = $err = false;
    3. $slovo1 = isset($_POST['slovo1']) ? trim($_POST['slovo1']) : false;
    4. $slovo2 = isset($_POST['slovo2']) ? trim($_POST['slovo2']) : false;
    5.  
    6. if($slovo1 && $slovo2){
    7.     if(3 == mb_strlen($slovo1) && 3 == mb_strlen($slovo2)){
    8.         list($r1, $r2) = explode(' ', preg_replace('~(.)(.)(.) (.)(.)(.)~u', '\6\5\4 \3\2\1', $slovo1 . ' ' . $slovo2));
    9.     } else {
    10.         $err = 'В задачке ни слова не сказано про слова длиной отличной от 3 символов!!!!11!!111!!!1!1';
    11.     }
    12. }
    13. ?>
    14. <!DOCTYPE html>
    15. <html>
    16.     <head>
    17.         <title>ru.php.forum.50416 - Поменятор букф</title>
    18.     </head>
    19.     <body>
    20.         <h1>Поменятор букф</h1>
    21.         <h2>УФОрма</h2>
    22.         <?php if($err) { ?><strong style="color:red;font-size:250%"><?=$err?></strong><br><?php } ?>
    23.         <form action="<?=$_SERVER['PHP_SELF']?>" method="POST">
    24.             Введите первое слово:<br>
    25.             <input type="text" name="slovo1" value="<?=$slovo1?>"><br>
    26.             Введите второе слово:<br>
    27.             <input type="text" name="slovo2" value="<?=$slovo2?>"><br> 
    28.             <input type="submit"  value="Поменять буквы">
    29.         </form>
    30. <?php if($r1 && $r2) {
    31.     ?><h2>PE3yJIbTAT</h2><ul><li><?=$r1?><li><?=$r2?></ul><?php
    32. }
    33. ?>
    34. </body></html>
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    задача сводится к переворачиванию слов и менянию их местами.

    только я не знаю способа перевернуть слово регуляркой.
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    хм... через колбэк к strrev )))
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    нужно просто перевернуть всю строку нафик. но это регуляркой я не знаю как сделать.
     
  12. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    без внешнего вызова - никак
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Ок. Можно у того кто задавал задачу узнать решение?
     
  14. HoneySeller

    HoneySeller Новичок

    С нами с:
    16 окт 2014
    Сообщения:
    4
    Симпатии:
    0
    Ganzal, на вопрос
    я не придумал лучшего ответа, как провести аналогию из абсолютной левой сферы, при этом пытаясь донести, что, в целом, я мало что понял из твоего первого сообщения в теме. Мне и в голову не пришло, что это может настроить тебя на негативные эмоции.
    Вторая же часть моего сообщения - абсолютно искренняя благодарность за оставленную тобой подсказку. Опять же, без задних мыслей.

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

    И следом просто переворачиваешь мои представления. Низкий поклон.

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

    Осмелюсь спросить
    внешний вызов - вызов внешнего скрипта из другого файла?
     
  15. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    да всё ок))) я тоже когда-то был новичком и на своем примере знаю что по форумам ждать помощи - практически пустая трата времени если хочешь понять материал. сначала мануал, потом гугл и только потом если что-то не понял - идешь к гуру и выкладываешь как есть чтоб они направили как нужно.
    мне не жалко же код показать. я ж от этого ничего не теряю. а вот обратившийся новичок ничего кроме кода не получит если в рамках халявы наметился. а если реально хочет в материал вникнуть то уж лучше менять его понимание нежели пытаться прописать свое.
    мы на программерском форуме, я описал алгоритм словами. от вас ожидал не карточные термины а что вы накидаете алгоритм функциями пхп и спросите так или не так)))) ну раз в тупик зашли то я лучше мирным путём код скину и в кусты)))

    нет, не файла. игорь внес идею что всё сводится к разворачиванию слов и менянию их местами. потом о том что строку развернуть и всё. но не знает как это регулярками. я лишь пояснил что без внешнего вызова (preg_preplace_callback+strrev) - никак.
     
  16. HoneySeller

    HoneySeller Новичок

    С нами с:
    16 окт 2014
    Сообщения:
    4
    Симпатии:
    0
    Появился другой вопрос. Если мне нужно, чтобы,например, первое слово вводили только буквами из кириллицы, то , как понимаю, надо использовать preg_match.

    Код (Text):
    1. if($slovo1 && $slovo2) {
    2. if (!preg_match('/^[а-яёА-ЯЁ]+$/', $slovo1))
    3. {
    4.    echo 'В строке имеются недопустимые символы!';
    5. }
    6. {
    7.     if(3 == mb_strlen($slovo1) && 3 == mb_strlen($slovo2)){
    8.         list($r1, $r2) = explode(' ', preg_replace('~(.)(.)(.) (.)(.)(.)~u', '\6\5\4 \3\2\1', $slovo1 . ' ' . $slovo2));
    9.     } else {
    10.         $err = 'Введите слова длиной в 3 буквы';
    11.     }
    12. }
    13. }
    Но на выходе это нифига не работает. Поможете разобраться ?
     
  17. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    во-первых математика вашей регулярки НЕ проверяет недопустимые символы а лишь проверяет наличие одного и более символа из перечисления. wяfжq - успешно пройдет проверку.
    во-вторых регулярные выражения работают на уровне байтов а не символов. юникод кодирует символы выходящие за рамки ASCII двумя и более байтами о чем регулярка не знает. нужно включить юникод через модификаторы регулярки.

    в-третьих надеюсь что это просто опечатка:
     
  18. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Ну, выделить блок фигурными скобками ничего не мешает, синтаксически это верно. Но по смыслу - даже если проверка регуляркой вернула ошибку, дальше вычисления все равно пойдут.
     
  19. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    вот я про это и говорю. логика проверки теряется и на это я и пытался указать.