1. PHP / Говнокод #9345

    +174

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    //присваиваем массиву значения
    	for ($i=0; $i<7; $i++) 
    		{
    		$rand[$i]=rand(1,52);
    		}
    
    //проверяем 50 раз что бы исключить повторы
    for ($i=0; $i<50; $i++) 
    	{
    //проверяем $rand[0] на совпадения
    	if ($rand[0]==$rand[1])
    		{
    		$rand[0]=rand(1,52);
    		}
    	else
    		{
    		if ($rand[0]==$rand[2])
    			{
    			$rand[0]=rand(1,52);
    			}
    		else
    			{
    			if ($rand[0]==$rand[3])
    				{
    				$rand[0]=rand(1,52);
    				}
    			else
    				{
    				if ($rand[0]==$rand[4])
    					{
    					$rand[0]=rand(1,52);
    					}
    				else
    					{
    					if ($rand[0]==$rand[5])
    						{
    						$rand[0]=rand(1,52);
    						}
    					else
    						{
    						if ($rand[0]==$rand[6])
    							{
    							$rand[0]=rand(1,52);
    							}
    						}
    					}
    				}
    			}
    		}
    
    //проверяем $rand[1] на совпадения
    	if ($rand[1]==$rand[0])
    		{
    		$rand[1]=rand(1,52);
    		}
    	else
    		{
    		if ($rand[1]==$rand[2])
    			{
    			$rand[1]=rand(1,52);
    			}
    		else
    			{
    			if ($rand[1]==$rand[3])
    				{
    				$rand[1]=rand(1,52);
    				}
    			else
    				{
    				if ($rand[1]==$rand[4])
    					{
    					$rand[1]=rand(1,52);
    					}
    				else
    					{
    					if ($rand[1]==$rand[5])
    						{
    						$rand[1]=rand(1,52);
    						}
    					else
    						{
    						if ($rand[1]==$rand[6])
    							{
    							$rand[1]=rand(1,52);
    							}
    						}
    					}
    				}
    			}
    		}

    Генератор "не повторяющихся цифр от 1 до 52"
    Влезло 2 if-блока из семи в оригинале :)

    Запостил: govnokod-observer, 07 Февраля 2012

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

    • Жуть.
      Ответить
    • не хватает кого нибудь eval`a для полного счастья!
      Ответить
    • Да ладно, на хаскеле еще хуже выглядит...
      Ответить
      • Пример в студию.
        Ответить
        • [hackage-пакет] Shuffle a list randomly. The method is based on Oleg Kiselyov's perfect shuffle http://okmij.org/ftp/Haskell/perfect-shuffle.txt :

          > data Tree a = Leaf a | Node !Int (Tree a) (Tree a) deriving Show
          >
          > -- Convert a sequence (e1...en) to a complete binary tree
          > build_tree = grow_level . (map Leaf)
          > where
          > grow_level [node] = node
          > grow_level l = grow_level $ inner l
          >
          > inner [] = []
          > inner x@[_] = x
          > inner (e1:e2:rest) = (join e1 e2) : inner rest
          >
          > join l@(Leaf _) r@(Leaf _) = Node 2 l r
          > join l@(Node ct _ _) r@(Leaf _) = Node (ct+1) l r
          > join l@(Leaf _) r@(Node ct _ _) = Node (ct+1) l r
          > join l@(Node ctl _ _) r@(Node ctr _ _) = Node (ctl+ctr) l r
          >
          > shuffle1 :: [a] -> [Int] -> [a]
          > shuffle1 elements rseq = shuffle1' (build_tree elements) rseq
          > where
          > shuffle1' (Leaf e) [] = [e]
          > shuffle1' tree (ri:r_others) = extract_tree ri tree
          > (\tree -> shuffle1' tree r_others)
          >
          > extract_tree 0 (Node _ (Leaf e) r) k = e:k r
          > extract_tree 1 (Node 2 l@Leaf{} (Leaf r)) k = r:k l
          > extract_tree n (Node c l@Leaf{} r) k =
          > extract_tree (n-1) r (\new_r -> k $ Node (c-1) l new_r)
          > extract_tree n (Node n1 l (Leaf e)) k | n+1 == n1 = e:k l
          >
          > extract_tree n (Node c l@(Node cl _ _) r) k
          > | n < cl = extract_tree n l (\new_l -> k $ Node (c-1) new_l r)
          > | otherwise = extract_tree (n-cl) r (\new_r -> k $ Node (c-1) l new_r)

          Коменты не влезли. Пишут, что у них проще, но в source разбросано по многим ф-ям (в том числе из Seq), так что не факт, и не видно картины в целом... Подумаешь, что чуть сложнее (n * log n), зато чистый хаскель, без всяких непартийных массивов.
          Ответить
          • И в чем проблема? Нормальный код же. Во всяком случае лучше чем php-код выше.
            Ответить
            • Не говорилось, что это именно ГК. Может я чего не понимаю, но код чрезмерно "ядрён" для этой задачи. Если изменяемая и "нефункциональная" структура данных более приемлема, то почему бы не воспользоваться ей: на хаскель-вики алгоритм есть, а в библиотеках встречалось лишь это.

              Хаскель хорош, но ведь это не серебрянная пуля...
              Ответить
          • Oh, god... it is so beautiful...
            Ответить
            • Хм, а это не вы возмущались по поводу O(n * log n) заместо O(n)? Вроде как раз в случае shuffle-а. Таки для функциональных языков двоиные стандарты :) ?
              Ответить
              • За лень и иммутабельность надо платить... Сам алгоритм понравился.
                Ответить
                • Понятно, что в общем случае приходится. Но ведь есть алгоритмы, на которые иммутабельность etc. ложатся хорошо (вот зипперы придумали). Просто, имхо, в данном случае императивщина оправдана: к тому же Random таскает либо либо StdGen, либо IO.

                  Сам алгоритм интересен, немного спорен подход.
                  Ответить
                  • Ну, за зипперы приходится платить памятью.
                    А использовать в хаскеле императивный код вам никто не запрещает. Многие хаскелисты считают haskell лучшим из императивных языков :)
                    Ответить
                    • > Многие хаскелисты считают haskell лучшим
                      Непоказательно. Дельфилюбы тоже самое о своей борландяшечке думают.
                      Ответить
                      • эх, вы не то выделили. Основная мысль
                        > считают haskell лучшим из императивных языков
                        всяк сверчок хвалит свой шесток
                        Ответить
                        • >всяк сверчок хвалит свой шесток
                          а как в бане собираются
                          шесточками меряются
                          Ответить
    • очень "неленивый программист"
      Ответить
    • Этот "программист" - нагло троллит своего начальника.
      Ответить
    • После этого еще надо:
      if ($rand[0]==$rand[1] || $rand[0]==$rand[2] || ... || $rand[1]==$rand[0] || ... || $rand[6]==$rand[5])
      throw new Exception("Worning: FATALE ERROR!!!");
      Ответить
    • Да ещё и блядский перенос между if и else
      Ответить
      • Цветочек, воткнутый в гуано кучу отнюдь не делает её красивше.
        Ответить
    • Ужаснах
      Ответить
    • Я б так наговнякал.
      $rand=array();
      while(count($rand)<7)
      $rand[rand(1,52)]=0;
      $rand=array_keys($rand);
      Ответить
    • сранд
      Ответить
    • Вит вздрогнул и повернулся на голос. Он так увлёкся самокопанием, что не заметил появившегося в дверях Руслана.
      Ответить

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