Skip to content

Instantly share code, notes, and snippets.

@hatimmohammed369
Created January 8, 2019 17:55
Show Gist options
  • Save hatimmohammed369/143d2ad88c5bf21ca1bfdd822b70babe to your computer and use it in GitHub Desktop.
Save hatimmohammed369/143d2ad88c5bf21ca1bfdd822b70babe to your computer and use it in GitHub Desktop.
package com.fun;
import java.util.ArrayList;
import java.util.StringTokenizer;
import java.util.TreeMap;
public class Tests{
static TreeMap<Integer, ArrayList<String>> savedPartitions = new TreeMap<>();
static{
savedPartitions.put(1, new ArrayList<String>());
savedPartitions.get(1).add("1");
savedPartitions.put(2, new ArrayList<String>());
savedPartitions.get(2).add("2");
savedPartitions.get(2).add("1+1");
}
static int stringCount(String s, String target){
int count = 0;
while(true)
if(s.indexOf(target) != -1){
count++;
s = s.substring(s.indexOf(target)+target.length(), s.length());
}else
break;
return count;
}
static boolean caseEquals(String case1, String case2){
StringTokenizer tokenizer = new StringTokenizer(case1, "+");
while(tokenizer.hasMoreTokens()){
String nextToken = tokenizer.nextToken();
if( stringCount(case1, nextToken) != stringCount(case2, nextToken) )
return false;
}
return true;
}
static ArrayList<String> partition(int n) {
if (n <= 0)
throw new IllegalArgumentException("Value given is either 0 or negative!");
if(savedPartitions.containsKey(n))
return savedPartitions.get(n);
ArrayList<String> partitions = new ArrayList<>();
partitions.add(n + "");
for (int x = 1, y = n - 1; x != n; x++, y--) {
ArrayList<String> p = partition(y);
for (String eP : p) {
StringBuilder builder = new StringBuilder(eP);
for (int i = 1; i < builder.length(); i += 2)
if (builder.charAt(i) != '+' && (i+1 < builder.length() && builder.charAt(i+1) != '0'))
builder.insert(i, '+');
partitions.add(x + "+" + builder.toString());
}
}
savedPartitions.put(n, filter( partitions ));
return savedPartitions.get(n);
}
private static ArrayList<String> filter(ArrayList<String> a) {
for(int x = 0; x < a.size();x++)
for(int y = x+1; y < a.size();y++)
if( caseEquals( a.get(x), a.get(y) ) ){
a.remove(y);
}
return a;
}
public static void main(String[] args){
System.out.printf("Java %d", 8);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment