За последние 24 часа нас посетили 53989 программистов и 1720 роботов. Сейчас ищут 986 программистов ...

Массив, код символа, значение

Тема в разделе "PHP для новичков", создана пользователем domio, 14 окт 2016.

  1. domio

    domio Активный пользователь

    С нами с:
    18 дек 2012
    Сообщения:
    35
    Симпатии:
    5
    Добрый день. Есть массив который состоит из индексов - код символа, и значения - буквы.

    PHP:
    1. $arr = [];
    2. for ($i=65; $i<=90; $i++) {
    3.     $x = chr($i);
    4.     $arr[$i] = $x;
    5. }
    6. $index =89; //это буква Y
    7. $index +=2;
    8. $index = 91;
    Предпоследнее значение это буква Y с кодом 89.
    Мне нужно чтобы при изменении кода символа например на 2, мы прибавляли к значению 89+2 смотрели что такого значения нету, в массиве и бежали к 65 элементу. Кажись пока писал задачу понял как решить. Но все равно может кто-то подскажет идею получше.
     
    #1 domio, 14 окт 2016
    Последнее редактирование: 14 окт 2016
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    так чтоль?

    PHP:
    1. if (!isset($arr[91])){
    2.    // берем $arr[65]
    3. }
     
  3. domio

    domio Активный пользователь

    С нами с:
    18 дек 2012
    Сообщения:
    35
    Симпатии:
    5
    Не совсем так. Я уже решил.

    PHP:
    1. $arr = [];
    2. for ($i=65; $i<=90; $i++) {
    3.     $x = chr($i);
    4.     $arr[$i] = $x;
    5. }
    6.  
    7. $n = 2;
    8. $index =89+$n; // 89 это символ Y
    9. if(array_key_exists($index, $arr)){
    10.     echo "$arr[$index]";
    11. }else{
    12.     $index = 65;
    13.     echo "$arr[$index]";
    14. }
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Те же яйца, но сбоку, собственно :)
    А теперь расскажи, что вообще задумал, в общем контексте. А то само по себе это выглядит странно и немного индусово.
    Мб есть более верное решение.
     
  5. domio

    domio Активный пользователь

    С нами с:
    18 дек 2012
    Сообщения:
    35
    Симпатии:
    5
    вообщем ситуация следующая, нашел я интересный портал(не буду рекламить, так как наврное это запрещенно) со всякими задачками ну и была там задача такого плана.

    Есть строка "BORN IN 2015!". Эту строку надо "закодировать"
    1) сместить каждый символ на один
    2) от каждой цифры отнять 9
    Результат CPSO JO 7984!
    3) потом каждый нечетный символ сделать заглавным
    4) перевернуть строку
    Конечный результат: "!4897 Oj oSpC"

    У меня вышел косяк с алфавитом, вместо того чтобы искать код символа в алфвите я брал просто следующий код в таблице ascii.

    Мое решение выглядит вот так
    PHP:
    1. echo "4897 NkTrC Hq fT67 GjV Pq aP OqTh gOcE CoPcTi aO\n";
    2. echo "<br>";
    3. $input = "MY GRANMA CAME FROM NY ON THE 23RD OF APRIL 2015";
    4.  
    5. function playPass($str, $n=2)
    6. {
    7.     $arr = [];
    8.     for ($i=65; $i<=90; $i++) {
    9.         $x = chr($i);
    10.         $arr[$i] = $x;
    11.     }
    12.     $result = "";
    13.     $length = strlen($str);
    14.     for($i=0;$i<$length;$i++){
    15.         $letter = $str[$i];
    16.         if(ctype_alpha($letter)){
    17.  
    18.             // echo $str[$i]."\n";
    19.             $key = array_keys ($arr, $str[$i]);
    20.             $tmp = $key[0];
    21.             $index = $tmp + $n;
    22.             if(array_key_exists($index, $arr)){
    23.                 $letter = chr($index);
    24.             }else{
    25.                 $index = 65;
    26.                 $letter = chr($index);
    27.             }
    28.         }
    29.         if(ctype_digit($letter)){
    30.             $letter = (int)$str[$i];
    31.             $letter -=9;
    32.             $letter = abs($letter);
    33.         }
    34.     //Result 1-2-3
    35.     $result .= $letter;
    36.     }
    37.     $result = strtoupper($result);
    38.     $result = ucfirst($result);
    39.  
    40.     $r = "";
    41.     for ($j=0; $j <strlen($result) ; $j++) {
    42.         if($j%2){
    43.             $r .= strtolower($result[$j]);
    44.         }else{
    45.             $r .= $result[$j];
    46.         }
    47.     }
    48.  
    49.     $r = strrev($r);
    50.     return $r;
    51. }
    52.  
    53.  
    54. echo playPass($input);
    Первый вывод это то что должно получиться, второй то что получилось. Возможно кто-то предложит вариант по лучше.

    Eng version task
    1. shift each letter by a given number but the transformed letter must be a letter (circular shift),
    2. replace each digit by its complement to 9,
    3. keep such as non alphabetic and non digit characters,
    4. downcase each letter in odd position, upcase each letter in even position (the first character is in position 0),
    5. reverse the whole result.
    Example:
    your text: "BORN IN 2015!", shift 1

    1 + 2 + 3 -> "CPSO JO 7984!"

    4 "CpSo jO 7984!"

    5 "!4897 Oj oSpC"
     
    topas нравится это.
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Наоборот, такое тут любят, мб новичкам пригодится. Не стесняйся, вбрасывай ссыль. Тут не любят рекламу пластиковых окон, дилдосов, казино и прочего не тематического. А ссылки в тему - это же ссылки в тему, все ок.
     
  7. domio

    domio Активный пользователь

    С нами с:
    18 дек 2012
    Сообщения:
    35
    Симпатии:
    5
    Да не вопрос, ловите) https://www.codewars.com/
     
    denis01 нравится это.
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Офигенская тема! Спасибо :)
    --- Добавлено ---
    Прошел вступление на JS и чот сайт перестал загружаться. Крашится в хроме. В мозиле, вроде, работает при этом. Чудеса.
     
  9. domio

    domio Активный пользователь

    С нами с:
    18 дек 2012
    Сообщения:
    35
    Симпатии:
    5
    Ну я только пхп пробовал, понравилось.

    Раз пошла такая пьянка. то вот Вам еще больше таких ресурсов.
    http://theasder.github.io/learning/...sites-to-sharpen-your-programming-skills.html
     
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Круто, спасибо :)