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

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
  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 govnokod-observer, (Updated )

Комментарии (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-код выше.
          Ответить
          • Не говорилось, что это именно ГК. Может я чего не понимаю, но код чрезмерно "ядрён" для этой задачи. Если изменяемая и "нефункциональная" структура данных более приемлема, то почему бы не воспользоваться ей: на хаскель-вики алгоритм есть, а в библиотеках встречалось лишь это.

            Хаскель хорош, но ведь это не серебрянная пуля...
            Ответить
          • Хм, а это не вы возмущались по поводу 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!!!");
    Ответить
    • Цветочек, воткнутый в гуано кучу отнюдь не делает её красивше.
      Ответить
  • Я б так наговнякал.
    $rand=array();
    while(count($rand)<7)
    $rand[rand(1,52)]=0;
    $rand=array_keys($rand);
    Ответить
  • Вит вздрогнул и повернулся на голос. Он так увлёкся самокопанием, что не заметил появившегося в дверях Руслана.
    Ответить

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

Семь раз отмерь — один отрежь, guest!

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


    8