Skip to content

Instantly share code, notes, and snippets.

@isamotiuc
Created May 4, 2016 14:07
Show Gist options
  • Save isamotiuc/e4c49d8e69a77cb972c532bdced370cc to your computer and use it in GitHub Desktop.
Save isamotiuc/e4c49d8e69a77cb972c532bdced370cc to your computer and use it in GitHub Desktop.
package com.company;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
ArrayList<String> numbers = new ArrayList<>();
try {
Files.lines(Paths.get(args[0])).forEachOrdered(s -> {
numbers.add(s);
System.out.println(s);
});
} catch (IOException e) {
e.printStackTrace();
}
System.out.println();
System.out.println();
for (String number : numbers) {
ArrayList<Integer> digits = convertNumberToDigitsArray(Integer.parseInt(number.trim()));
ArrayList<Integer> digitsSecondPart = new ArrayList<>();
ArrayList<Integer> sortedNumbers = new ArrayList<>(digits);
Collections.sort(sortedNumbers);
Collections.reverse(sortedNumbers);
if (isSorted(digits)) {
if (digits.get(digits.size() - 1) == 0) {
digits.add(0);
arrayToString(transform(digits, digitsSecondPart, sortedNumbers));
} else {
Collections.reverse(digits);
digits.add(1, 0);
arrayToString(digits);
}
} else {
arrayToString(transform(digits, digitsSecondPart, sortedNumbers));
}
}
}
private static ArrayList<Integer> transform(ArrayList<Integer> digits, ArrayList<Integer> digitsSecondPart, ArrayList<Integer> sorted) {
outerloop:
for (int i = digits.size() - 1; i > 0; i--) {
for (int j = i - 1; j >= 0; j--) {
for (int sortedInt : sorted) {
if (digits.get(i) > digits.get(j) && (digits.get(i) == sortedInt)) {
Collections.swap(digits, i, j);
digitsSecondPart = new ArrayList<>(digits.subList(0, j + 1));
digits = new ArrayList<>(digits.subList(j + 1, digits.size()));
Collections.sort(digits);
break outerloop;
}
}
}
}
digitsSecondPart.addAll(digits);
return digitsSecondPart;
}
private static void arrayToString(ArrayList<Integer> digits2) {
String stringNumber = "";
for (Integer aDigits2 : digits2) {
stringNumber += (aDigits2 + "");
}
System.out.print(stringNumber);
System.out.println();
}
private static ArrayList<Integer> convertNumberToDigitsArray(int number) {
ArrayList<Integer> digits = new ArrayList<>();
do {
digits.add(number % 10);
number /= 10;
} while (number > 0);
Collections.reverse(digits);
return digits;
}
private static <T extends Comparable<? super T>> boolean isSorted(Iterable<T> iterable) {
Iterator<T> iter = iterable.iterator();
if (!iter.hasNext()) {
return true;
}
T t = iter.next();
while (iter.hasNext()) {
T t2 = iter.next();
if (t.compareTo(t2) < 0) {
return false;
}
t = t2;
}
return true;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment