"PHP" / Говнокод #561 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
<?php
/*
    desc:
        Инкремент строки типа '000'
        Символы от '0' до 'z'
*/
function levelIncrease($lvl)
{
	for($i = 2, $ng = 0; $i >= 0; $i--) {
		$g = ord($lvl[$i]);
		if($i == 2)
			++$g;
		$g += $ng;
		$ng = 0;
		if($g > 57 && $g < 97)
			$g = 97;
		else if($g > 122) {
			$diff = $g - 122;
			$g = 48 + $diff - 1;
			$ng = ceil($diff / 36);
		}
		$lvl[$i] = chr($g);
		if($ng == 0)
			break;
	}
	return $lvl;
}

echo levelIncrease('aaa');   // aab

Инкремент строки типа '000'
Символы от '0' до 'z'

Запостил: guest guest, (Updated )

Комментарии (18) RSS

  • А привести рабочее небыдлокод-решение слабо?
    Ответить
  • Говнокодер:
    Вот типа нормальный вариант:

    function increaseCommentLevel($level)
    {
    if(strlen($level) % 3 != 0)
    throw new Exception('ERROR: Comment level is corrupted');

    $scale = array(
    '0','1','2','3','4','5','6','7','8','9', 'a','b','c','d','e','f','g','h',
    'i','j','k','l','m','n','o','p','q','r', 's','t','u','v','w','x','y','z'
    );
    $increment = 1; // size of the increment

    $scSize = count($scale);
    $res = '';
    $nGrade = 0;
    for($i = strlen($level) - 1, $fst = 1; $i >= 0; $i--)
    {
    $dg = array_search($level[$i], $scale);
    if($fst) { $dg += $increment; $fst = 0; }
    $dg += $nGrade;
    $nGrade = floor($dg / $scSize);
    $dg = ($dg - $scSize * $nGrade);
    $res = $scale[$dg] . $res;
    }
    return $res;
    }
    Ответить
  • VoidEx:
    lvl = ['0'..'9'] ++ ['a'..'z']
    lvls = sequence $ replicate 3 lvl
    getNext e = maybe "000" ((lvls !!).(+1)) $ elemIndex e lvls
    Ответить
  • VoidEx:
    Точнее
    getNext e = maybe "000" ((lvls !!).(`mod` (length lvls)).(+1)) $ elemIndex e lvls
    Ответить
  • mykola:
    хуясе здесь математики собрались о_О
    Обязательно этот беcпредел с флурами, цейлами и тонной умножений? Первый код нихуя не понятен, но в втором каменте ваще какая то высшая математика..
    Ответить
  • От, родил $)
    #!/usr/bin/php
    <?php
    
    
    function levelup($lvl) {
            if ( $lvl == "" ) return "0"; 
            $size = strlen($lvl)-1;
            $c = $lvl[$size] ; // last char
            $res= substr($lvl, 0, $size); 
            $inc = chr(ord($c)+1); 
            if ( $c == '9' ) $inc = 'a';
            if ( $c == 'z' ) { // fuck this system
                    $inc = '0';
                    $res = levelup($res);
            }
            return $res.$inc;
    }
    echo levelup( $argv[1]), "\r\n";
    ?>

    root@asterisksys:~# for x in aaa zzz bbb 099 a9z zaz ; do ./l.php $x  ; done
    aab
    0000
    bbc
    09a
    aa0
    zb0
    Ответить
  • Капитан Очевидность:
    Долбаебы
    <?php
    $str = 'ab0';
    
    echo ++$str;
    ?>
    Ответить
  • mykola:
    Рыдаю. Радует что я не один такой 🙂
    Ответить
  • Говнокодер:
    Капитан Очевидность, а у тебя бестолковка работает, молодец!
    Как в басне: ".. а ларчик просто открывался".

    В итоге решение такое:
    $str = '001';
    $str = sprintf('%03s', ++$str);
    echo $str;

    Индуский бог кодинга седня отдыхает :)))
    Ответить
  • Капитан Очевидность:
    Похоже какой-то кусок подписывается моим ником
    Ответить
  • $str = 'zzz';
    $str = sprintf('%03s', ++$str);
    echo $str; //aaaa

    Ну и что? Возьми с полки пряник.
    Ответить
  • Сдаётся мне, КО и команда написали неговнокод, только неработающий, лол
    Ответить
  • Ну так и есть. К.О. - вы быдлокодер, поздравляю.

    http://ru.php.net/operators.increment

    Note that incrementing strings can give unpredictable results due to type changes. For example:

    <?php

    $i = '9C6';
    for($n=0; $n<10; $n++)
    echo ++$i . "\n";

    ?>

    Gives you:
    9C7
    9C8
    9C9
    9D0
    10
    11
    12
    ..etc.
    Ответить
  • Не надо верить всему, что пишут в комментах на ru.php.net, а головой надо думать и читать больше, если не знаешь. То что инкремент строки может привести к непредсказуемым результатам давно пофиксили.
    Ответить
  • А №14 набрехал, что после zzz идёт aaaa, а не 000?
    Или ему тоже не верить?
    Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8