Pages

Showing posts with label HashSet. Show all posts
Showing posts with label HashSet. Show all posts

Sunday, September 13, 2009

Euler Problem 44 solution

Time (s): ~0.294
package margusmartseppcode.From_40_to_49;

import java.util.HashSet;
import java.util.Set;

public class Problem_44 {
 public static void main(String[] args) {
  Set<integer> set = new HashSet<integer>();
  int p[] = new int[10000];
  int i = 0, j = 0;
  boolean out = false;

  for (i = 1; i < 10000; i++)
   set.add(p[i] = (i * 3 * i - i) / 2);

  for (i = 1; i < 10000 && !out; i++)
   for (j = 1; j < i && !out; j++)
    if (set.contains(p[i] + p[j]) && set.contains(p[i] - p[j]))
     out = true;

  System.out.println(p[i] - p[j]);
 }
}

Wednesday, September 9, 2009

Euler Problem 41 solution

Time (s): ~0.009
package margusmartseppcode.From_40_to_49;

import java.util.HashSet;
import java.util.Set;

public class Problem_41 {
 static final int nbrs = 7;

 static boolean isPandigital(String s) {
  return isPandigital(s, nbrs);
 }

 static boolean isPandigital(String s, int nr) {
  if (s.length() != nr)
   return false;

  Set<Character> set = new HashSet<Character>();
  for (int i = 0; i < nr; i++)
   set.add(s.charAt(i));

  if (set.size() != nr)
   return false;
  if (set.contains('0'))
   return false;
  if (set.contains('8'))
   return false;
  if (set.contains('9'))
   return false;
  return true;
 }

 // Call only if: (n>0&&(i%2==0||i%3==0||i%5==0||i%7==0))
 static boolean isPrimeS(final int n) {
  final int r = (int) Math.floor(Math.sqrt(n));
  for (int f = 5; f <= r; f += 6)
   if (n % f == 0 || n % (f + 2) == 0)
    return false;
  return true;
 }

 public static void main(String[] args) {
  int i;
  for (i = 7654321; i >= 1234567; i -= 2) {
   if (i % 3 == 0 || i % 5 == 0 || i % 7 == 0)
    continue;
   if (!isPrimeS(i))
    continue;
   if (isPandigital("" + i))
    break;
  }
  System.out.println(i);
 }
}

Euler Problem 38 solution

Time (s): ~0.012
package margusmartseppcode.From_30_to_39;

import java.util.HashSet;
import java.util.Set;

public class Problem_38 {
 static final int nbrs = 9;

 static boolean isPandigital(String s) {
  return isPandigital(s, nbrs);
 }

 static boolean isPandigital(String s, int nr) {
  if (s.length() != nr)
   return false;

  Set<Character> set = new HashSet<Character>();
  for (int i = 0; i < nr; i++)
   set.add(s.charAt(i));

  if (set.size() != nr)
   return false;
  if (set.contains('0'))
   return false;
  return true;
 }

 public static void main(String[] args) {
  String maxPan = "";
  for (int i = 9876; i > 9123; i--)
   if (isPandigital(maxPan = "" + i + (i + i)))
    break;
  System.out.println(maxPan);
 }
}

Euler Problem 37 solution

Time (s): ~0.599
package margusmartseppcode.From_30_to_39;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Problem_37 {

 static Integer cint(String nr) {
  return Integer.parseInt(nr);
 }

 static boolean isLTP(String mem, Set<Integer> primes) {
  int n = mem.length();
  if (n < 1)
   return true;
  return primes.contains(cint(mem)) && isLTP(mem.substring(1), primes);
 }

 static boolean isRTP(String mem, Set<Integer> primes) {
  int n = mem.length();
  if (n < 1)
   return true;
  return primes.contains(cint(mem))
    && isRTP(mem.substring(0, n - 1), primes);
 }

 static boolean isTP(String mem, Set<Integer> primes) {
  return isLTP(mem, primes) && isRTP(mem, primes);
 }

 private static void bTP(Integer mem, Set<Integer> primes,
   Set<Integer> truncatable) {
  if (primes.contains(mem)) {
   if (isTP(""+mem, primes))
    truncatable.add(mem);
   TruncatablePrimes(mem, primes, truncatable);
  }
 }

 private static void TruncatablePrimes(Integer elem, Set<Integer> primes,
   Set<Integer> truncatable) {
  String[] o = new String[] { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
  String s = "" + elem;

  for (String pos : o) {
   bTP(cint(s + pos), primes, truncatable);
   bTP(cint(pos + s), primes, truncatable);
  }
 }

 public static void main(String[] args) throws FileNotFoundException {
  Set<Integer> truncatable = new HashSet<Integer>();
  Set<Integer> primes = new HashSet<Integer>();
  Scanner sc = new Scanner(new File("primes1m.txt"));
  int sum = 0;

  for (String tmp = sc.next(); sc.hasNext(); tmp = sc.next())
   primes.add(Integer.parseInt(tmp));

  for (Integer elem : new Integer[] { 3, 7 })
   TruncatablePrimes(elem, primes, truncatable);

  for (Integer elem : truncatable)
   sum += elem;

  System.out.println(sum);
 }
}

Euler Problem 35 solution

Time (s): ~0.921
package margusmartseppcode.From_30_to_39;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Problem_35 {
 static boolean contains_024568(final char[] input) {
  int n = input.length;
  for (int i = 4; i < n; i++)
   if (input[i] == '0' || input[i] == '2' || input[i] == '4'
     || input[i] == '5' || input[i] == '6' || input[i] == '8')
    return true;
  return false;
 }

 static void rotate(StringBuilder sb) {
  sb.append(sb.charAt(0)).delete(0, 1);
 }

 static int iRotate(StringBuilder s) {
  return Integer.parseInt(s.append(s.charAt(0)).delete(0, 1).toString());
 }

 static void CircularPrimes(Integer elem, Set<Integer> primes,
   Set<Integer> found, Set<Integer> circular) {
  StringBuilder sb = new StringBuilder("" + elem);
  ArrayList<Integer> tmp = new ArrayList<Integer>();
  int n = sb.length(), i;

  if (found.contains(elem) || circular.contains(elem))
   return;
  for (i = 1; i <= n; i++)
   tmp.add(iRotate(sb));
  for (Integer mem : tmp)
   if (!primes.contains(mem)) {
    found.addAll(tmp);
    return;
   }

  circular.addAll(tmp);
 }

 public static void main(String[] args) throws FileNotFoundException {
  Set<Integer> circular = new HashSet<Integer>();
  Set<Integer> primes = new HashSet<Integer>();
  Set<Integer> found = new HashSet<Integer>();
  Scanner sc = new Scanner(new File("primes1m.txt"));

  for (String tmp = sc.next(); sc.hasNext(); tmp = sc.next())
   if (!contains_024568(tmp.toCharArray()))
    primes.add(Integer.parseInt(tmp));

  for (Integer elem : primes)
   CircularPrimes(elem, primes, found, circular);

  System.out.println(circular.size());
 }
}

Tuesday, September 8, 2009

Euler Problem 32 solution

Time (s): ~0.066
package margusmartseppcode.From_30_to_39;

import java.util.HashSet;
import java.util.Set;

public class Problem_32 {
 static final int nbrs = 9;

 static boolean isPandigital(String s) {
  return isPandigital(s, nbrs);
 }

 static boolean isPandigital(String s, int nr) {
  if (s.length() != nr)
   return false;

  Set<Character> set = new HashSet<<Character>();
  for (int i = 0; i < nr; i++)
   set.add(s.charAt(i));

  if (set.size() != nr)
   return false;
  if (set.contains('0'))
   return false;
  return true;
 }

 public static void main(String[] args) {
  Set<Integer> set = new HashSet<Integer>();
  int sum = 0;

  for (int i = 2, n = 1234; i < 100; i++, n = i > nbrs ? 123 : 1234)
   for (int j = n; j < (int) (10000 / i + 1); j++)
    if (isPandigital("" + i + j + (i * j)))
     set.add(i * j);

  for (Integer val : set)
   sum += val;

  System.out.println(sum);
 }
}

Euler Problem 29 solution

Time (s): ~0.025
package margusmartseppcode.From_20_to_29;

import java.util.HashSet;
import java.util.Set;

public class Problem_29 {

 public static void main(String[] args) {
  int max = 101;
  Set<double> set = new HashSet<double>();

  for (Long i = 2L; i < max; i++)
   for (Long j = 2L; j < max; j++)
    set.add(Math.pow(i, j));

  System.out.println(set.size());
 }
}

Euler Problem 27 solution

Time (s): ~0.034
package margusmartseppcode.From_20_to_29;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class Problem_27 {
 static Integer prime_k[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37,
   41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107,
   109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179,
   181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251,
   257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331,
   337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409,
   419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487,
   491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577,
   587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653,
   659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743,
   751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829,
   839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929,
   937, 941, 947, 953, 967, 971, 977, 983, 991, 997 };

 public static void main(String[] args) {
  int nmax = 0, n, pr = 0;
  Set<Integer> set = new HashSet<Integer>(Arrays.asList(prime_k));

  for (int i = -999; i < 999; i += 2)
   for (int b : prime_k) {
    n = 1;
    while (set.contains(n * n + i * n + b))
     n += 1;
    if (n > nmax) {
     nmax = n;
     pr = i * b;
    }
   }
  System.out.println(pr);
 }
}