Hola,
es verdad que el problema era muy fácil, sin embargo no se me ha ocurrido nada para parsear la entrada de las cajas, para poder resolverlo la he cambiado para que me fuera más fácil leerlo, no sé si eso está permitido o no, sea como sea, ahí va mi solución en java:
package aoc_2022;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Map;
import java.util.Stack;
import java.util.TreeMap;
public class Day5 {
private static final File CRATES_INPUT = new File("2022_inputs/2022_day5_input_1.txt");;
private static final File INPUT = new File("2022_inputs/2022_day5_input.txt");
private Map<Integer, Stack<Character>> crates;
Day5(){
crates = new TreeMap<>();
}
private void generateMap(){
String line = "";
try(BufferedReader br = new BufferedReader(new FileReader(CRATES_INPUT))){
while((line = br.readLine()) != null){
int index = Integer.parseInt(line.charAt(0)+"");
line = line.replaceAll(" ","");
crates.put(index,new Stack<>());
for (int i = 1; i < line.length(); i++) {
crates.get(index).add(line.charAt(i));
}
}
}catch(IOException e){
System.err.println("Error generating map.");
}
}
private void move(int move, int f, int t){ //part 1
for (int i = 0; i < move; i++) {
char crate = crates.get(f).pop();
crates.get(t).push(crate);
}
}
private void moveMoreThanOne(int move, int f, int t){ // added for part 2
String crateOrder = "";
for (int i = 0; i < move; i++) {
crateOrder += crates.get(f).pop();
}
for (int i = crateOrder.length()-1; i >= 0; i--) {
crates.get(t).push(crateOrder.charAt(i));
}
}
private void solve(){
String line = "";
try(BufferedReader br = new BufferedReader(new FileReader(INPUT))){
while((line = br.readLine())!= null){
String [] x = line.split(" ");
int numberOfMoves = Integer.parseInt(x[1]);
if(numberOfMoves > 1 )
moveMoreThanOne(numberOfMoves,Integer.parseInt(x[3]),Integer.parseInt(x[5]));
else
move(numberOfMoves,Integer.parseInt(x[3]),Integer.parseInt(x[5]));
}
}catch (IOException e){
System.err.println("Error reading input.");
}
}
private String getAnswer(){
String answer = "";
for (int i = 1; i <= 9 ; i++) {
answer += crates.get(i).pop();
}
return answer;
}
public static void main(String[] args) {
Day5 d5 = new Day5();
d5.generateMap();
d5.solve();
System.out.println(d5.getAnswer());
}
}