Java 7, Score = Upvotes - 3.97 ============================== Yay!!! Java!!! The world's favourite golfing language in the world. What, you can actually golf in java??? Well, it's kind of like using a bulldozer to putt. `a` is expected to contain the first character. `b` is expected to contain the last character. `c` is expected to have the input string. Here is the function golfed: <!-- language-all: lang-java --> int d=0;try{d=Integer.parseInt(c);}catch(Exception e){}int l=b-a+1;char[]f=new char[l];int[]g=new int[l];int h=1;int i=1;g[0]=1;f[0]=a;int j;for(j=1;j<b-a+1;){g[j]=(h+=i);f[j]=(char)(f[j++-1]+1);i*=h==10*i?10:1;}if(d==0){h=0;for(char k:c.toCharArray()){for(j=0;j<l;j++){if(f[j]==k){h+=g[j];}}}System.out.println(h);}else{c="";for(j=l;j>0;){if(g[--j]<=d){c+=f[j];d-=g[j++];}}System.out.println(c);} Here it is indented with structure code: public class G{ public static void main(String[] args){ new G(args); } public G(String[] args){ a = args[0].charAt(0); b = args[1].charAt(0); for (int i = 2; i < args.length; i++){ c += args[i]; } function(); } char a; char b; String c = ""; void function(){ int d=0; try{ d=Integer.parseInt(c); }catch(Exception e){} int l=b-a+1; char[]f=new char[l]; int[]g=new int[l]; int h=1; int i=1; g[0]=1; f[0]=a; int j; for(j=1;j<b-a+1;){ g[j]=(h+=i); f[j]=(char)(f[j++-1]+1); i*=h==10*i?10:1; } if(d==0){ h=0; for(char k:c.toCharArray()){ for(j=0;j<l;j++){ if(f[j]==k){ h+=g[j]; } } } System.out.println(h); }else{ c=""; for(j=l;j>0;){ if(g[--j]<=d){ c+=f[j]; d-=g[j++]; } } System.out.println(c); } } } Here it is completely expanded: public class Generator{ public static void main(String[] args){ beginning = args[0].charAt(0); end = args[1].charAt(0); for (int i = 2; i < args.length; i++){ phrase += args[i]; } function(); } static char beginning; static char end; static String phrase = ""; static void function(){ int convertTo = 0; try{ convertTo = Integer.parseInt(phrase); } catch (Exception e){} char[] alphabet = new char[end - beginning + 1]; int[] values = new int[alphabet.length]; int value = 1; int base = 1; values[0] = 1; alphabet[0] = beginning; int i; for (i = 1; i < values.length;){ values[i] = (value += base); alphabet[i] = (char)(alphabet[i++-1]+1); base*=value==10*base?10:1; } if(convertTo==0){ value = 0; for (char character : phrase.toCharArray()){ for (i = 0; i < alphabet.length;i++){ if (alphabet[i] == character){ value += values[i]; } } } System.out.println(value); } else { phrase = ""; for (i = values.length;i > 0;){ if (values[--i] <= convertTo){ phrase += alphabet[i]; convertTo -= values[i++]; } } System.out.println(phrase); } } }