Skip to content

Instantly share code, notes, and snippets.

@royvanrijn
Last active August 29, 2015 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save royvanrijn/33e780c1f270691cd326 to your computer and use it in GitHub Desktop.
Save royvanrijn/33e780c1f270691cd326 to your computer and use it in GitHub Desktop.
Oplossing voor de verfspetter-uitdaging, zonder enter 753 karakters
import static java.lang.Math.*;import static java.util.Arrays.*;public class V{public static void main(String[]a){a=a[0].split(",");int s=(int)sqrt(a.length);int[] g=new int[s*s],l=new int[s*s],c=new int[s*s];int e=0;fill(g,-1);fill(l,-1);for(int x=0;x<s;x++)for(int y=0;y<s;y++){int p=(x*s)+y;int m=y>0&&l[p-1]!=-1?l[p-1]:p;if(a[p].equals("X")){for(int z=max(0,y-1);z<min(s,y+2);z++){e=(x-1)*s+z;if(x>0&&l[e]>-1)g[l[e]]=m=min(m,l[e]);}c[g[p]=l[p]=m]++;}}for(int i=s*s;i-->1;)if((g[i]*g[i-1])>0&&g[i]<g[i-1])g[i-1]=g[i];for(int i=0;i<s*s;i++)if(g[i]>=0&&g[i]<i){c[g[i]]+=c[i];c[i]=0;}e=-1;for(int i=0;i<s*s;i++)if(c[i]>0)e=e==-1?i:c[i]<c[e]?i:e;String q=c[e]+":";for(int i=0;i<s*s;i++)if(l[i]>=0&&g[l[i]]==e)q+="("+i%s+","+i/s+")";System.out.print(q);}}
@royvanrijn
Copy link
Author

Om te runnen, zet alles op één lange regel:

java V O,X,O,O,O,O,O,O,O,O,O,O,X,X,O,O,O,X,X,X,O,O,O,O,X,X,X,O,X,O,X,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,X,X,O,O,O,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,X,X,X,O,O,O,O,O,O,O,O,X,X,O,O,O,O,O,O,X,O,O,O,O,X,O,O,O,X,X,X,X,O,O,O,O,O,X,X,O,X,X,X,X,X,X,X,O,O,O,X,O,O,O,O

Werkt met alle vierkante inputs, ook met grote 'U'-vormen zoals:

X,O,O,X,X,O,X,O,X,O,O,X,X,X,X,X

(Dit gaat fout als je een te simpele oplossing maakt)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment