1. Список говнокодов пользователя TheHamstertamer

    Всего: 20

  2. Куча / Говнокод #11459

    +129

    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
    F[numbers_, setNumber_, ParenNum_] := 
     Block[{func = {"+", "-", "*", "/"}[[setNumber]], 
       parens = {{"", "", "", "", "", ""}, {"", "(", "", "", ")", 
           ""}, {"", "", "", "(", "", ")"}, {"", "(", "", "", "", 
           ")"}, {"(", "", ")", "(", "", ")"}}[[ParenNum]], e}, 
      e = ToExpression[
        ToString[
         StringJoin[parens[[1]], ToString[numbers[[1]]], func[[1]], 
          parens[[2]], ToString[numbers[[2]]], parens[[3]], func[[2]], 
          parens[[4]], ToString[numbers[[3]]], parens[[5]], func[[3]], 
          ToString[numbers[[4]]], parens[[6]]]]]; e];Timing[c = 0; d = 0; 
     b = Permutations[{1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4}, {3}]; 
     For[n1 = 1, n1 < 10, n1++, 
      For[n2 = 1, n2 < n1, n2++, 
       For[n3 = 1, n3 < n2, n3++, 
        For[n4 = 1, n4 < n3, n4++, 
         a = Permutations[{n1, n2, n3, n4}, {4}]; sol = {}; 
         For[i = 1, i <= Length[a], i++, 
          For[j = 1, j <= 64, j++, 
           For[n = 1, n <= 5, n++, g = F[a[[i]], b[[j]], n]; 
            If[IntegerQ[g] && g > 0, AppendTo[sol, g]]]]; 
          m = Sort[DeleteDuplicates[sol]]; 
          l = Complement[Range[1000], m][[1]]; 
          If[l > c, c = l; d = {n1, n2, n3, n4}]]]]]]; 
     FromDigits[Reverse[d]]]

    http://projecteuler.net/problem=93
    http://projecteuler.net/thread=93&page=6


    Язык, кстати, Mathematica.

    TheHamstertamer, 22 Июля 2012

    Комментарии (7)
  3. C# / Говнокод #11287

    +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
    public class Problem33 {
        public static void main(String arg[]){
            long l1 = Calendar.getInstance().getTimeInMillis();
            int amount = 0;
            for(int a=1; a<=9; a++){
                for(int b=1; b<=9; b++){
                    for(int c=1; c<=9; c++){
                        for(int d=1; d<=9; d++){
                            int numerator = a*10+b;
                            int denominator = c*10+d;
                            double fraction = 1.0*numerator/denominator;
                            if(numerator < denominator){
                                if(
                                  (a==c && (1.0*b/d == fraction)) ||
                                  (a==d && (1.0*b/c == fraction)) ||
                                  (b==c && (1.0*a/d == fraction)) ||
                                  (b==d && (1.0*a/c == fraction))
                                  ){
                                    amount++;
                                    System.out.println(a + "" +  b + "/" + c + "" + d);
                                 }
                            }
                        }
                    }
                }
            }
            System.out.println(amount);
            long l2 = Calendar.getInstance().getTimeInMillis();
            System.out.println("Time: " + (l2-l1) + "ms");
        }
    }

    http://projecteuler.net/problem=33
    http://projecteuler.net/thread=33

    TheHamstertamer, 24 Июня 2012

    Комментарии (19)
  4. C# / Говнокод #11013

    +156

    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
    private static BigInteger result = 0;
            static BigInteger F1 = 1;
            static BigInteger F2 = 1;
            static BigInteger provv;
            static BigInteger provv2;
    
            static void Main(string[] args)
            {
                for (BigInteger number = 3; result == 0; number++)
                {
                    provv2 = F2;
                    F2 = F2 + F1;
                    F1 = provv2; ;
                    if (HasProperty(F2.ToString()))
                        result = number;
                }
            }
    
            private static bool HasProperty(string number)
            {
                if (number.Length < 9)
                    return false;
                if (IsPandigital(number.Substring(0, 9)))
                    if (IsPandigital(number.Substring(number.Length - 9, 9)))
                        return true;
                return false;
            }
    
            private static bool IsPandigital(string result)
            {
                int repetitions;
                for (int count = 0; count < 9; count++)
                {
                    repetitions = 0;
                    for (int count2 = 0; count2 < 9; count2++)
                    {
                        if (result.ElementAt(count).ToString() == "0")
                            return false;
                        if (result.ElementAt(count).ToString() == result.ElementAt(count2).ToString())
                        {
                            repetitions++;
                            if (repetitions == 2)
                                return false;
                        }
                    }
                }
                return true;
            }

    http://projecteuler.net/problem=104
    http://projecteuler.net/thread=104;page=6



    >brute force approach,solved aproximately in 24 hours
    >solved aproximately in 24 hours
    >24 hours
    >24
    >hours


    Терпеливый, сука!

    TheHamstertamer, 17 Июня 2012

    Комментарии (57)
  5. Python / Говнокод #10924

    −101

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    maxi=140000
    plist=set(primes(maxi))
    dlist={}
    def dp(n):
        if dlist.has_key(n):
            return dlist[n]
        else:
            facts= len([k for k in plist if n%k==0])
            dlist[n]=facts
            return facts
    print [k for k in range (1,maxi) if dp(k)==4 and dp(k+1)==4 and dp(k+2)==4 and dp(k+3)==4]

    http://projecteuler.net/problem=47
    http://projecteuler.net/thread=47;page=8


    Этот товарищ растянул на 11 секунд то, что даже тупым брутфорсом решается за <1 секунду.

    TheHamstertamer, 12 Июня 2012

    Комментарии (54)
  6. Си / Говнокод #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)
  7. Куча / Говнокод #10554

    +127

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    # My first attempt in J:
    +/(>/)"1 <.@(10&^.)(2 & x:) (+%)/\(1x,1000$2)
    
    # It gave the right answer, but took about an hour.
    # Based on other people's comments I went back and figured out the relationship
    # between one answer and the next, and came up with this,
    # which runs in less than 1 second:
    ((((0{])+([:$[:":1{])>([:$[:":2{])),(1{]+2*2{]),1{]+2{])^:1000) 0 3x 2x

    http://projecteuler.net/thread=57;page=2


    Как на этом можно писать?

    TheHamstertamer, 04 Июня 2012

    Комментарии (19)
  8. Си / Говнокод #10465

    +123

    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
    #include <stdio.h>
    int getLen(long long num)
    {
        int count=0;
        while (num > 0)
        {
            count++;
            num/=10;
        }
        return count;
    }
    
    int main(void)
    {
        int count = 0;
        for (long long i=1; i<=9; i++)
        {
            long long num = 1;
            int modify=0;
    
            for (int j=1; j<30; j++)
            {
                if (i==7 && j == 5)
                {
                    int a= 1;
                    a++;
                }
                num *= i;
                if (getLen(num) == j-modify)
                {
                    printf("%d^%d=%lld OK  %d\n", i, j, num, count+1);
                    count++;
                }
                if (num > 10000000)
                {
                    num/=10;
                    modify++;
                }
            }
        }
        printf("%d\n", count);
        return 0;
    }

    http://projecteuler.net/problem=63
    http://projecteuler.net/thread=63&page=8



    >I don't want to write again an big number rendering algorithm, so I played a little trick on it and hoped it won't cause any trouble..

    TheHamstertamer, 30 Мая 2012

    Комментарии (11)
  9. Java / Говнокод #10361

    +74

    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
    public class factorial {
        public static void main(String[] args) {
            boolean run = true;
            long count = 2142;
            long last_count=0;
            while (run) {
                if (ispand(count)) {
                    if (isprime(count)) {
                        System.out.println(count);
                        last_count=count;
                    }
    
                }
                if((count+"").length()>7){
                   System.out.println("Largest prime can be :"+last_count);
                   System.exit(1);
                }
                count++;
            }
        }
        public static boolean ispand(long num) {
            String text = num + "";
            for (int i = 1; i <= text.length(); i++) {
                if (!text.contains(i + "")) {
                    return false;
                }
            }
            return true;
        }
        public static boolean isprime(long num) {
            if (num == 1) {
                return false;
            } else {
                for (int i = 2; i <= Math.sqrt(num); i++) {
                    if (num % i == 0) {
                        return false;
                    }
                }
            }
            return true;
        }
    }

    http://projecteuler.net/problem=41
    http://projecteuler.net/thread=41&page=8


    Пациент каким-то образом растянул решение аж на две секунды.

    PS: одному Аллаху известно почему это "factorial".

    TheHamstertamer, 24 Мая 2012

    Комментарии (95)
  10. Python / Говнокод #10349

    −104

    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
    SIEVE_SIZE = 4096
    
    def primes():
        s = [False] * 2 + [True] * (SIEVE_SIZE - 2)
        primel = []
    
        # Bootstrap sieve
        for i in xrange(SIEVE_SIZE):
            if s[i]:
                yield i
                primel.append(i)
                j = i
                while j < SIEVE_SIZE:
                    s[j] = False
                    j += i
    
        # Main loop
        seg = SIEVE_SIZE
        while True:
            s = [True] * SIEVE_SIZE
            for p in primel:
                j = (seg / p) * p - seg
                if j < 0:
                    j += p
                while j < SIEVE_SIZE:
                    s[j] = False
                    j += p
    
            # Yield next set of primes
            for p in map(lambda x: x[0], filter(lambda x: x[1],
                    enumerate(s, seg))):
                yield p
                primel.append(p)
    
            seg += SIEVE_SIZE
    
    pg = iter(primes())
    test_primes = []
    
    p = next(pg)
    while p < 1000:
        test_primes.append(p)
        p = next(pg)
    
    ps = set(test_primes)
    ps.add(p)
    pm = p
    
    def is_prime(n):
        global pm
        while pm < n:
            pm = next(pg)
            ps.add(pm)
        return n in ps
    
    def get_formula_length(a, b):
        n = 1
        t = lambda n: n * n + a * n + b
    
        while t(n) > 0 and is_prime(t(n)):
            n += 1
    
        return n
    
    print max((get_formula_length(a, b), a * b) for b in test_primes
        for a in xrange(-999, 1000))[1]

    http://projecteuler.net/problem=27
    http://projecteuler.net/thread=27;page=6


    >Phooey, scrolling through the comments I can see my code could benefit from quite some improvements. That being said, I use a sliding sieve of Eratosthenes to generate an "infinite" list of primes. This is then used in combination with brute force to find the right solution.

    TheHamstertamer, 23 Мая 2012

    Комментарии (17)
  11. Java / Говнокод #10324

    +74

    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
    public static boolean isBouncy(long n) {
    	boolean isBouncy = false;
    	String num = Long.toString(n);
    	String[] seperateDigits = new String[num.length()+1];
    	for (int i=1; i <= num.length(); i++) {
    		seperateDigits[i] = num.substring(i-1,i);
    	}
    	int firstDig = Integer.parseInt(num.substring(0,1));
    	int cDig;
    	int iDeg = 0;
    	int cDeg = 0;
    	int dig0;
    	int dig1;
    	for (int i = 2; i <= seperateDigits.length-1; i++) {
    		if (!isBouncy) {
    			dig0 = Integer.parseInt(seperateDigits[i-1]);
    			dig1 = Integer.parseInt(seperateDigits[i]);
    			if (i == 2) iDeg = getDegree(dig0, dig1);
    			else {
    				cDeg = getDegree(dig0,dig1);
    				if (iDeg == 0) iDeg = cDeg;
    				else if (cDeg == -iDeg) isBouncy = true;
    			}
    		}
    	}
    	if (iDeg == 0) isBouncy = false;
    	return isBouncy;
    }

    http://projecteuler.net/problem=112
    http://projecteuler.net/thread=112&page=6#63821


    >Nothing intuitive about it at all

    TheHamstertamer, 19 Мая 2012

    Комментарии (20)