Skip to content

Instantly share code, notes, and snippets.

@gb96
Created February 14, 2011 22:52
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 gb96/826757 to your computer and use it in GitHub Desktop.
Save gb96/826757 to your computer and use it in GitHub Desktop.
/**
* For N=13 recursive swap() evaluates 0-based deck using nested switch.
* Inner switch is effectively inline version of one level of recursion.
* @see https://gist.github.com/826754
*
* @param v00
* @param v01
* @param v02
* @param v03
* @param v04
* @param v05
* @param v06
* @param v07
* @param v08
* @param v09
* @param v10
* @param v11
* @param v12
* @return
*/
static int swap(final char v00, final char v01, final char v02, final char v03, final char v04, final char v05, final char v06, final char v07, final char v08, final char v09, final char v10, final char v11, final char v12) {
switch (v00) {
case 0:
return 0;
case 1:
switch (v01) {
case 0:
return 1;
case 2:
if (v02 == 0) return 2;
return 2 + swap(v02, v00, v01, v03, v04, v05, v06, v07, v08, v09, v10, v11, v12);
case 3:
if (v03 == 0) return 2;
return 2 + swap(v03, v02, v00, v01, v04, v05, v06, v07, v08, v09, v10, v11, v12);
case 4:
if (v04 == 0) return 2;
return 2 + swap(v04, v03, v02, v00, v01, v05, v06, v07, v08, v09, v10, v11, v12);
case 5:
if (v05 == 0) return 2;
return 2 + swap(v05, v04, v03, v02, v00, v01, v06, v07, v08, v09, v10, v11, v12);
case 6:
if (v06 == 0) return 2;
return 2 + swap(v06, v05, v04, v03, v02, v00, v01, v07, v08, v09, v10, v11, v12);
case 7:
if (v07 == 0) return 2;
return 2 + swap(v07, v06, v05, v04, v03, v02, v00, v01, v08, v09, v10, v11, v12);
case 8:
if (v08 == 0) return 2;
return 2 + swap(v08, v07, v06, v05, v04, v03, v02, v00, v01, v09, v10, v11, v12);
case 9:
if (v09 == 0) return 2;
return 2 + swap(v09, v08, v07, v06, v05, v04, v03, v02, v00, v01, v10, v11, v12);
case 10:
if (v10 == 0) return 2;
return 2 + swap(v10, v09, v08, v07, v06, v05, v04, v03, v02, v00, v01, v11, v12);
case 11:
if (v11 == 0) return 2;
return 2 + swap(v11, v10, v09, v08, v07, v06, v05, v04, v03, v02, v00, v01, v12);
case 12:
if (v12 == 0) return 2;
return 2 + swap(v12, v11, v10, v09, v08, v07, v06, v05, v04, v03, v02, v00, v01);
}
return 1 + swap(v01, v00, v02, v03, v04, v05, v06, v07, v08, v09, v10, v11, v12);
case 2:
switch (v02) {
case 0:
return 1;
case 1:
if (v01 == 0) return 2;
return 2 + swap(v01, v02, v00, v03, v04, v05, v06, v07, v08, v09, v10, v11, v12);
case 3:
if (v03 == 0) return 2;
return 2 + swap(v03, v00, v01, v02, v04, v05, v06, v07, v08, v09, v10, v11, v12);
case 4:
if (v04 == 0) return 2;
return 2 + swap(v04, v03, v00, v01, v02, v05, v06, v07, v08, v09, v10, v11, v12);
case 5:
if (v05 == 0) return 2;
return 2 + swap(v05, v04, v03, v00, v01, v02, v06, v07, v08, v09, v10, v11, v12);
case 6:
if (v06 == 0) return 2;
return 2 + swap(v06, v05, v04, v03, v00, v01, v02, v07, v08, v09, v10, v11, v12);
case 7:
if (v07 == 0) return 2;
return 2 + swap(v07, v06, v05, v04, v03, v00, v01, v02, v08, v09, v10, v11, v12);
case 8:
if (v08 == 0) return 2;
return 2 + swap(v08, v07, v06, v05, v04, v03, v00, v01, v02, v09, v10, v11, v12);
case 9:
if (v09 == 0) return 2;
return 2 + swap(v09, v08, v07, v06, v05, v04, v03, v00, v01, v02, v10, v11, v12);
case 10:
if (v10 == 0) return 2;
return 2 + swap(v10, v09, v08, v07, v06, v05, v04, v03, v00, v01, v02, v11, v12);
case 11:
if (v11 == 0) return 2;
return 2 + swap(v11, v10, v09, v08, v07, v06, v05, v04, v03, v00, v01, v02, v12);
case 12:
if (v12 == 0) return 2;
return 2 + swap(v12, v11, v10, v09, v08, v07, v06, v05, v04, v03, v00, v01, v02);
}
return 1 + swap(v02, v01, v00, v03, v04, v05, v06, v07, v08, v09, v10, v11, v12);
case 3:
switch (v03) {
case 0:
return 1;
case 1:
if (v02 == 0) return 2;
return 2 + swap(v02, v03, v01, v00, v04, v05, v06, v07, v08, v09, v10, v11, v12);
case 2:
if (v01 == 0) return 2;
return 2 + swap(v01, v02, v03, v00, v04, v05, v06, v07, v08, v09, v10, v11, v12);
case 4:
if (v04 == 0) return 2;
return 2 + swap(v04, v00, v01, v02, v03, v05, v06, v07, v08, v09, v10, v11, v12);
case 5:
if (v05 == 0) return 2;
return 2 + swap(v05, v04, v00, v01, v02, v03, v06, v07, v08, v09, v10, v11, v12);
case 6:
if (v06 == 0) return 2;
return 2 + swap(v06, v05, v04, v00, v01, v02, v03, v07, v08, v09, v10, v11, v12);
case 7:
if (v07 == 0) return 2;
return 2 + swap(v07, v06, v05, v04, v00, v01, v02, v03, v08, v09, v10, v11, v12);
case 8:
if (v08 == 0) return 2;
return 2 + swap(v08, v07, v06, v05, v04, v00, v01, v02, v03, v09, v10, v11, v12);
case 9:
if (v09 == 0) return 2;
return 2 + swap(v09, v08, v07, v06, v05, v04, v00, v01, v02, v03, v10, v11, v12);
case 10:
if (v10 == 0) return 2;
return 2 + swap(v10, v09, v08, v07, v06, v05, v04, v00, v01, v02, v03, v11, v12);
case 11:
if (v11 == 0) return 2;
return 2 + swap(v11, v10, v09, v08, v07, v06, v05, v04, v00, v01, v02, v03, v12);
case 12:
if (v12 == 0) return 2;
return 2 + swap(v12, v11, v10, v09, v08, v07, v06, v05, v04, v00, v01, v02, v03);
}
return 1 + swap(v03, v02, v01, v00, v04, v05, v06, v07, v08, v09, v10, v11, v12);
case 4:
switch (v04) {
case 0:
return 1;
case 1:
if (v03 == 0) return 2;
return 2 + swap(v03, v04, v02, v01, v00, v05, v06, v07, v08, v09, v10, v11, v12);
case 2:
if (v02 == 0) return 2;
return 2 + swap(v02, v03, v04, v01, v00, v05, v06, v07, v08, v09, v10, v11, v12);
case 3:
if (v01 == 0) return 2;
return 2 + swap(v01, v02, v03, v04, v00, v05, v06, v07, v08, v09, v10, v11, v12);
case 5:
if (v05 == 0) return 2;
return 2 + swap(v05, v00, v01, v02, v03, v04, v06, v07, v08, v09, v10, v11, v12);
case 6:
if (v06 == 0) return 2;
return 2 + swap(v06, v05, v00, v01, v02, v03, v04, v07, v08, v09, v10, v11, v12);
case 7:
if (v07 == 0) return 2;
return 2 + swap(v07, v06, v05, v00, v01, v02, v03, v04, v08, v09, v10, v11, v12);
case 8:
if (v08 == 0) return 2;
return 2 + swap(v08, v07, v06, v05, v00, v01, v02, v03, v04, v09, v10, v11, v12);
case 9:
if (v09 == 0) return 2;
return 2 + swap(v09, v08, v07, v06, v05, v00, v01, v02, v03, v04, v10, v11, v12);
case 10:
if (v10 == 0) return 2;
return 2 + swap(v10, v09, v08, v07, v06, v05, v00, v01, v02, v03, v04, v11, v12);
case 11:
if (v11 == 0) return 2;
return 2 + swap(v11, v10, v09, v08, v07, v06, v05, v00, v01, v02, v03, v04, v12);
case 12:
if (v12 == 0) return 2;
return 2 + swap(v12, v11, v10, v09, v08, v07, v06, v05, v00, v01, v02, v03, v04);
}
return 1 + swap(v04, v03, v02, v01, v00, v05, v06, v07, v08, v09, v10, v11, v12);
case 5:
switch (v05) {
case 0:
return 1;
case 1:
if (v04 == 0) return 2;
return 2 + swap(v04, v05, v03, v02, v01, v00, v06, v07, v08, v09, v10, v11, v12);
case 2:
if (v03 == 0) return 2;
return 2 + swap(v03, v04, v05, v02, v01, v00, v06, v07, v08, v09, v10, v11, v12);
case 3:
if (v02 == 0) return 2;
return 2 + swap(v02, v03, v04, v05, v01, v00, v06, v07, v08, v09, v10, v11, v12);
case 4:
if (v01 == 0) return 2;
return 2 + swap(v01, v02, v03, v04, v05, v00, v06, v07, v08, v09, v10, v11, v12);
case 6:
if (v06 == 0) return 2;
return 2 + swap(v06, v00, v01, v02, v03, v04, v05, v07, v08, v09, v10, v11, v12);
case 7:
if (v07 == 0) return 2;
return 2 + swap(v07, v06, v00, v01, v02, v03, v04, v05, v08, v09, v10, v11, v12);
case 8:
if (v08 == 0) return 2;
return 2 + swap(v08, v07, v06, v00, v01, v02, v03, v04, v05, v09, v10, v11, v12);
case 9:
if (v09 == 0) return 2;
return 2 + swap(v09, v08, v07, v06, v00, v01, v02, v03, v04, v05, v10, v11, v12);
case 10:
if (v10 == 0) return 2;
return 2 + swap(v10, v09, v08, v07, v06, v00, v01, v02, v03, v04, v05, v11, v12);
case 11:
if (v11 == 0) return 2;
return 2 + swap(v11, v10, v09, v08, v07, v06, v00, v01, v02, v03, v04, v05, v12);
case 12:
if (v12 == 0) return 2;
return 2 + swap(v12, v11, v10, v09, v08, v07, v06, v00, v01, v02, v03, v04, v05);
}
return 1 + swap(v05, v04, v03, v02, v01, v00, v06, v07, v08, v09, v10, v11, v12);
case 6:
switch (v06) {
case 0:
return 1;
case 1:
if (v05 == 0) return 2;
return 2 + swap(v05, v06, v04, v03, v02, v01, v00, v07, v08, v09, v10, v11, v12);
case 2:
if (v04 == 0) return 2;
return 2 + swap(v04, v05, v06, v03, v02, v01, v00, v07, v08, v09, v10, v11, v12);
case 3:
if (v03 == 0) return 2;
return 2 + swap(v03, v04, v05, v06, v02, v01, v00, v07, v08, v09, v10, v11, v12);
case 4:
if (v02 == 0) return 2;
return 2 + swap(v02, v03, v04, v05, v06, v01, v00, v07, v08, v09, v10, v11, v12);
case 5:
if (v01 == 0) return 2;
return 2 + swap(v01, v02, v03, v04, v05, v06, v00, v07, v08, v09, v10, v11, v12);
case 7:
if (v07 == 0) return 2;
return 2 + swap(v07, v00, v01, v02, v03, v04, v05, v06, v08, v09, v10, v11, v12);
case 8:
if (v08 == 0) return 2;
return 2 + swap(v08, v07, v00, v01, v02, v03, v04, v05, v06, v09, v10, v11, v12);
case 9:
if (v09 == 0) return 2;
return 2 + swap(v09, v08, v07, v00, v01, v02, v03, v04, v05, v06, v10, v11, v12);
case 10:
if (v10 == 0) return 2;
return 2 + swap(v10, v09, v08, v07, v00, v01, v02, v03, v04, v05, v06, v11, v12);
case 11:
if (v11 == 0) return 2;
return 2 + swap(v11, v10, v09, v08, v07, v00, v01, v02, v03, v04, v05, v06, v12);
case 12:
if (v12 == 0) return 2;
return 2 + swap(v12, v11, v10, v09, v08, v07, v00, v01, v02, v03, v04, v05, v06);
}
return 1 + swap(v06, v05, v04, v03, v02, v01, v00, v07, v08, v09, v10, v11, v12);
case 7:
switch (v07) {
case 0:
return 1;
case 1:
if (v06 == 0) return 2;
return 2 + swap(v06, v07, v05, v04, v03, v02, v01, v00, v08, v09, v10, v11, v12);
case 2:
if (v05 == 0) return 2;
return 2 + swap(v05, v06, v07, v04, v03, v02, v01, v00, v08, v09, v10, v11, v12);
case 3:
if (v04 == 0) return 2;
return 2 + swap(v04, v05, v06, v07, v03, v02, v01, v00, v08, v09, v10, v11, v12);
case 4:
if (v03 == 0) return 2;
return 2 + swap(v03, v04, v05, v06, v07, v02, v01, v00, v08, v09, v10, v11, v12);
case 5:
if (v02 == 0) return 2;
return 2 + swap(v02, v03, v04, v05, v06, v07, v01, v00, v08, v09, v10, v11, v12);
case 6:
if (v01 == 0) return 2;
return 2 + swap(v01, v02, v03, v04, v05, v06, v07, v00, v08, v09, v10, v11, v12);
case 8:
if (v08 == 0) return 2;
return 2 + swap(v08, v00, v01, v02, v03, v04, v05, v06, v07, v09, v10, v11, v12);
case 9:
if (v09 == 0) return 2;
return 2 + swap(v09, v08, v00, v01, v02, v03, v04, v05, v06, v07, v10, v11, v12);
case 10:
if (v10 == 0) return 2;
return 2 + swap(v10, v09, v08, v00, v01, v02, v03, v04, v05, v06, v07, v11, v12);
case 11:
if (v11 == 0) return 2;
return 2 + swap(v11, v10, v09, v08, v00, v01, v02, v03, v04, v05, v06, v07, v12);
case 12:
if (v12 == 0) return 2;
return 2 + swap(v12, v11, v10, v09, v08, v00, v01, v02, v03, v04, v05, v06, v07);
}
return 1 + swap(v07, v06, v05, v04, v03, v02, v01, v00, v08, v09, v10, v11, v12);
case 8:
switch (v08) {
case 0:
return 1;
case 1:
if (v07 == 0) return 2;
return 2 + swap(v07, v08, v06, v05, v04, v03, v02, v01, v00, v09, v10, v11, v12);
case 2:
if (v06 == 0) return 2;
return 2 + swap(v06, v07, v08, v05, v04, v03, v02, v01, v00, v09, v10, v11, v12);
case 3:
if (v05 == 0) return 2;
return 2 + swap(v05, v06, v07, v08, v04, v03, v02, v01, v00, v09, v10, v11, v12);
case 4:
if (v04 == 0) return 2;
return 2 + swap(v04, v05, v06, v07, v08, v03, v02, v01, v00, v09, v10, v11, v12);
case 5:
if (v03 == 0) return 2;
return 2 + swap(v03, v04, v05, v06, v07, v08, v02, v01, v00, v09, v10, v11, v12);
case 6:
if (v02 == 0) return 2;
return 2 + swap(v02, v03, v04, v05, v06, v07, v08, v01, v00, v09, v10, v11, v12);
case 7:
if (v01 == 0) return 2;
return 2 + swap(v01, v02, v03, v04, v05, v06, v07, v08, v00, v09, v10, v11, v12);
case 9:
if (v09 == 0) return 2;
return 2 + swap(v09, v00, v01, v02, v03, v04, v05, v06, v07, v08, v10, v11, v12);
case 10:
if (v10 == 0) return 2;
return 2 + swap(v10, v09, v00, v01, v02, v03, v04, v05, v06, v07, v08, v11, v12);
case 11:
if (v11 == 0) return 2;
return 2 + swap(v11, v10, v09, v00, v01, v02, v03, v04, v05, v06, v07, v08, v12);
case 12:
if (v12 == 0) return 2;
return 2 + swap(v12, v11, v10, v09, v00, v01, v02, v03, v04, v05, v06, v07, v08);
}
return 1 + swap(v08, v07, v06, v05, v04, v03, v02, v01, v00, v09, v10, v11, v12);
case 9:
switch (v09) {
case 0:
return 1;
case 1:
if (v08 == 0) return 2;
return 2 + swap(v08, v09, v07, v06, v05, v04, v03, v02, v01, v00, v10, v11, v12);
case 2:
if (v07 == 0) return 2;
return 2 + swap(v07, v08, v09, v06, v05, v04, v03, v02, v01, v00, v10, v11, v12);
case 3:
if (v06 == 0) return 2;
return 2 + swap(v06, v07, v08, v09, v05, v04, v03, v02, v01, v00, v10, v11, v12);
case 4:
if (v05 == 0) return 2;
return 2 + swap(v05, v06, v07, v08, v09, v04, v03, v02, v01, v00, v10, v11, v12);
case 5:
if (v04 == 0) return 2;
return 2 + swap(v04, v05, v06, v07, v08, v09, v03, v02, v01, v00, v10, v11, v12);
case 6:
if (v03 == 0) return 2;
return 2 + swap(v03, v04, v05, v06, v07, v08, v09, v02, v01, v00, v10, v11, v12);
case 7:
if (v02 == 0) return 2;
return 2 + swap(v02, v03, v04, v05, v06, v07, v08, v09, v01, v00, v10, v11, v12);
case 8:
if (v01 == 0) return 2;
return 2 + swap(v01, v02, v03, v04, v05, v06, v07, v08, v09, v00, v10, v11, v12);
case 10:
if (v10 == 0) return 2;
return 2 + swap(v10, v00, v01, v02, v03, v04, v05, v06, v07, v08, v09, v11, v12);
case 11:
if (v11 == 0) return 2;
return 2 + swap(v11, v10, v00, v01, v02, v03, v04, v05, v06, v07, v08, v09, v12);
case 12:
if (v12 == 0) return 2;
return 2 + swap(v12, v11, v10, v00, v01, v02, v03, v04, v05, v06, v07, v08, v09);
}
return 1 + swap(v09, v08, v07, v06, v05, v04, v03, v02, v01, v00, v10, v11, v12);
case 10:
switch (v10) {
case 0:
return 1;
case 1:
if (v09 == 0) return 2;
return 2 + swap(v09, v10, v08, v07, v06, v05, v04, v03, v02, v01, v00, v11, v12);
case 2:
if (v08 == 0) return 2;
return 2 + swap(v08, v09, v10, v07, v06, v05, v04, v03, v02, v01, v00, v11, v12);
case 3:
if (v07 == 0) return 2;
return 2 + swap(v07, v08, v09, v10, v06, v05, v04, v03, v02, v01, v00, v11, v12);
case 4:
if (v06 == 0) return 2;
return 2 + swap(v06, v07, v08, v09, v10, v05, v04, v03, v02, v01, v00, v11, v12);
case 5:
if (v05 == 0) return 2;
return 2 + swap(v05, v06, v07, v08, v09, v10, v04, v03, v02, v01, v00, v11, v12);
case 6:
if (v04 == 0) return 2;
return 2 + swap(v04, v05, v06, v07, v08, v09, v10, v03, v02, v01, v00, v11, v12);
case 7:
if (v03 == 0) return 2;
return 2 + swap(v03, v04, v05, v06, v07, v08, v09, v10, v02, v01, v00, v11, v12);
case 8:
if (v02 == 0) return 2;
return 2 + swap(v02, v03, v04, v05, v06, v07, v08, v09, v10, v01, v00, v11, v12);
case 9:
if (v01 == 0) return 2;
return 2 + swap(v01, v02, v03, v04, v05, v06, v07, v08, v09, v10, v00, v11, v12);
case 11:
if (v11 == 0) return 2;
return 2 + swap(v11, v00, v01, v02, v03, v04, v05, v06, v07, v08, v09, v10, v12);
case 12:
if (v12 == 0) return 2;
return 2 + swap(v12, v11, v00, v01, v02, v03, v04, v05, v06, v07, v08, v09, v10);
}
return 1 + swap(v10, v09, v08, v07, v06, v05, v04, v03, v02, v01, v00, v11, v12);
case 11:
switch (v11) {
case 0:
return 1;
case 1:
if (v10 == 0) return 2;
return 2 + swap(v10, v11, v09, v08, v07, v06, v05, v04, v03, v02, v01, v00, v12);
case 2:
if (v09 == 0) return 2;
return 2 + swap(v09, v10, v11, v08, v07, v06, v05, v04, v03, v02, v01, v00, v12);
case 3:
if (v08 == 0) return 2;
return 2 + swap(v08, v09, v10, v11, v07, v06, v05, v04, v03, v02, v01, v00, v12);
case 4:
if (v07 == 0) return 2;
return 2 + swap(v07, v08, v09, v10, v11, v06, v05, v04, v03, v02, v01, v00, v12);
case 5:
if (v06 == 0) return 2;
return 2 + swap(v06, v07, v08, v09, v10, v11, v05, v04, v03, v02, v01, v00, v12);
case 6:
if (v05 == 0) return 2;
return 2 + swap(v05, v06, v07, v08, v09, v10, v11, v04, v03, v02, v01, v00, v12);
case 7:
if (v04 == 0) return 2;
return 2 + swap(v04, v05, v06, v07, v08, v09, v10, v11, v03, v02, v01, v00, v12);
case 8:
if (v03 == 0) return 2;
return 2 + swap(v03, v04, v05, v06, v07, v08, v09, v10, v11, v02, v01, v00, v12);
case 9:
if (v02 == 0) return 2;
return 2 + swap(v02, v03, v04, v05, v06, v07, v08, v09, v10, v11, v01, v00, v12);
case 10:
if (v01 == 0) return 2;
return 2 + swap(v01, v02, v03, v04, v05, v06, v07, v08, v09, v10, v11, v00, v12);
case 12:
if (v12 == 0) return 2;
return 2 + swap(v12, v00, v01, v02, v03, v04, v05, v06, v07, v08, v09, v10, v11);
}
return 1 + swap(v11, v10, v09, v08, v07, v06, v05, v04, v03, v02, v01, v00, v12);
case 12:
switch (v12) {
case 0:
return 1;
case 1:
if (v11 == 0) return 2;
return 2 + swap(v11, v12, v10, v09, v08, v07, v06, v05, v04, v03, v02, v01, v00);
case 2:
if (v10 == 0) return 2;
return 2 + swap(v10, v11, v12, v09, v08, v07, v06, v05, v04, v03, v02, v01, v00);
case 3:
if (v09 == 0) return 2;
return 2 + swap(v09, v10, v11, v12, v08, v07, v06, v05, v04, v03, v02, v01, v00);
case 4:
if (v08 == 0) return 2;
return 2 + swap(v08, v09, v10, v11, v12, v07, v06, v05, v04, v03, v02, v01, v00);
case 5:
if (v07 == 0) return 2;
return 2 + swap(v07, v08, v09, v10, v11, v12, v06, v05, v04, v03, v02, v01, v00);
case 6:
if (v06 == 0) return 2;
return 2 + swap(v06, v07, v08, v09, v10, v11, v12, v05, v04, v03, v02, v01, v00);
case 7:
if (v05 == 0) return 2;
return 2 + swap(v05, v06, v07, v08, v09, v10, v11, v12, v04, v03, v02, v01, v00);
case 8:
if (v04 == 0) return 2;
return 2 + swap(v04, v05, v06, v07, v08, v09, v10, v11, v12, v03, v02, v01, v00);
case 9:
if (v03 == 0) return 2;
return 2 + swap(v03, v04, v05, v06, v07, v08, v09, v10, v11, v12, v02, v01, v00);
case 10:
if (v02 == 0) return 2;
return 2 + swap(v02, v03, v04, v05, v06, v07, v08, v09, v10, v11, v12, v01, v00);
case 11:
if (v01 == 0) return 2;
return 2 + swap(v01, v02, v03, v04, v05, v06, v07, v08, v09, v10, v11, v12, v00);
}
return 1 + swap(v12, v11, v10, v09, v08, v07, v06, v05, v04, v03, v02, v01, v00);
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment