1. Си / Говнокод #10621

    +137

    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
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    int main()
    {
    	long i, copy, n, temp;
    	int *ar, j, k, flag, d1, d2;
    	for(i=987654321; i>=123456789; i--)
    	{		
    		copy=i;
    		ar=(int *)calloc(10, sizeof(int));
    		while(copy>0)
    		{
    			if(copy%10==0)
    				break;
    			if(ar[copy%10]!=0)
    				break;
    			ar[copy%10]=1;
    			copy/=10;
    		}
    		free(ar);
    		if(copy==0)
    		{				
    			for(j=8; j>=5; j--)
    			{
    				flag=1;
    				n=i/(long)pow(10, j);
    				copy=i-n*(long)pow(10, j);
    				for(k=2; k<=8 && flag; k++)
    				{
    					temp=n*k;
    					if(temp>copy)
    					{
    						flag=0;
    						break;
    					}
    					while(temp>0)
    					{
    						d1=temp/(long)pow(10, (int)log10(temp));
    						d2=copy/(long)pow(10, (int)log10(copy));
    						if(d1!=d2)
    						{
    							flag=0;
    							break;
    						}
    						temp=temp-d1*(long)pow(10, (int)log10(temp));
    						copy=copy-d2*(long)pow(10, (int)log10(copy));
    					}
    					if(copy==0)
    					{
    						printf("The pandigital number is %ld and the integer is %ld\n", i, n);
    						return 0;
    					}
    				}
    			}
    		}
    	}
    	return 0;
    }

    Очередной гений с пр. Ейлер:
    http://projecteuler.net/problem=38
    http://projecteuler.net/thread=38&page=8


    >Runtime: 14.86s on 2.67Ghz machine

    Запостил: TheHamstertamer, 08 Июня 2012

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

    • То же задание, Хаскелл:
      import Data.List
      import Data.Char
      fromDigits = foldl addDigit 0                                                      
         where addDigit num d = 10*num + d 
      problemSpace = filter (>= 918273645) $ map fromDigits $ reverse $ sort $ permutations [1..9] 
      numDigits :: Int -> Int
      numDigits q = floor (logBase 10 (fromIntegral q)) + 1
      listForm n = map digitToInt $ show n
      workList xs = map (*(fromDigits xs)) [1..9]
      lengthList xs = map (numDigits) xs
      fromMulDigits = foldl addDigit 0
         where addDigit num d = (10 ^ (floor $ (log (fromIntegral d)) / (log 10) + 1))*num + d 
      check ll wl c n
      	| length ll == 1	= fromMulDigits (take (c+1) wl) == n
      	| (head ll)+(head $ tail ll) < 9	= check ([(head ll)+(head $ tail ll)]++(tail $ tail ll)) wl (c+1) n
       	| (head ll)+(head $ tail ll) > 9	= False
         | (head ll)+(head $ tail ll) == 9	= fromMulDigits (take (c+1) wl) == n
      truncateR xs
      	| length xs > 0 	= xs:(truncateR $ take ((length xs)-1) xs)
      	| otherwise 		= []
      trunc xs = reverse $ truncateR xs
      isDecomposable n = elem True $ map (\e -> check (lengthList $ workList e) (workList e) 1 n) (trunc $ listForm n)
      main = print(head $ take 1 $ filter (isDecomposable) problemSpace)



      *facepalm*
      Ответить
      • Линканите, пожалуйста, само задание.
        Ответить
      • Извините, не мог устоять:
        import Data.List                        ( sort, foldl1' )
        import Data.Maybe                       ( catMaybes )
        import Safe                             ( headMay )
        
        
        digits :: Int -> [Int]
        digits = go []
            where go acc 0 = acc
                  go acc n = let (a,b) = n `divMod` 10 in go (b:acc) $! a
        
        undigits :: [Int] -> Int
        undigits = foldl1' $ \ a b -> 10 * a + b
        
        prod :: Int -> Int -> [Int]
        prod x n = digits =<< map (x*) [1..n]
        
        
        maxPan :: Int -> Maybe Int
        maxPan n = let lim = 10 ^ (9 `div` n)
                       prods = map (`prod` n) [lim, lim-1 .. 1]
                   in fmap undigits . headMay $ filter isPan prods
        
            where isPan ds = sort ds == [1..9]
        
        main :: IO ()
        main = print . maximum . catMaybes $ map maxPan [2..9]
        Ответить
        • Что за модуль "Safe"? Мой GHC его не находит.
          Ответить
          • Если пустой список - то Nothing (на месте реализуется в 2 строчки). http://hackage.haskell.org/packages/archive/safe/0.3.3/doc/html/Safe.html
            Ответить
          • ps. В данном случае можно headMay -> take 1 и catMaybes -> concat, и убрать два импорта. Но Maybe здесь более идиоматично задаче.
            Ответить
    • показать все, что скрытоЗнаешь, |c|, по-моему, я схожу с ума...
      Дело в том, что иногда по ночам мне кажется, что я яваблядь. Мне хочется выделять память, зарабатывать на доширак, пиздеть про энтерпрайз, сваливать свои проблемы на чужие плечи и писать нечитаемый бессмысленный говнокод.
      Я ворочаюсь, страдаю, рычу, а под конец вскакиваю с кровати и хватаю первое, что попалось под руку.
      Это может быть тапок, топор или простая поварешка, но в моем воображении она становится огромным прожорливым интерпретатором.
      С этим интерпретатором я открываю корпус сервера, ставлю ещё две планки оперативной памяти и с громким боевым кличем выбегаю на улицу. Я бегаю под окнами своих соседей и ору: "Ява не тормозит, тупые нищебляди!! Купите нормальное железо!!"
      Но они не покупают... Они привыкли.
      И когда я уставший, но довольный, поднимаюсь в квартиру, наоравшись и набегавшись, одна из дверей открывается. Там, лукаво сверкая глазенками, стоит маленький соседский мальчик Женька. Он громко шепчет беззыбым ртом "Клоссплатфолменность!" и ободряюще мигает мне одним глазом.
      Я, улыбаясь ему, прохожу мимо, и в душе моей поют заказчики.
      А дома я открываю бутылку водки, морщась, выпиваю ее до половины, и ловлю кота. Ругая этого "сраного волосатого индуса", я сажаю его за клавиатуру, и чтобы он не убежал, приматываю его к ней скотчем.
      А дальше все просто.
      Я стою у окна, пуская скупую быдлокодерскую слезу по своей прыщавой щеке , и мечтаю. Я представляю, что огни домов -- это пламя костров, на которых сжигают крестопидоров, шум машин -- это рев кулеров в серверных, а в мире нет ничего, кроме великого энтерпрайза и нас, яваблядей...
      И я жду, что вдруг, вот сейчас, в мою дверь войдет начальник и скажет: "Эй, раб, ты чо так так долго? Давай, быстро дописывай исходник. Похуй, если будет тормозить - разберутся те, кто будет сопровождать! ГА-га-га-га!" И ободряюще хлопнет меня по спине.
      И тогда не будет в мире счастливее человека, чем я... Точнее, явабляди.
      Что же мне делать, анон? Что же мне делать?
      Ответить
    • показать все, что скрытоЗАЙДИТЕ НА ЭТОТ САЙТ!!!!!!! http://viois.ru/ ОН НЕРЕАЛЬНО ПОЛЕЗНЫЙ!!!!!!
      Ответить
    • Какой адъ.

      % time ruby19 38.rb > /dev/null
      ruby19 38.rb > /dev/null 0,08s user 0,02s system 97% cpu 0,109 total
      Ответить

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