80分求求调!
查看原帖
80分求求调!
749028
QAQ5楼主2025/1/1 09:10
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    static int p1, p2, p3;

    public static void main(String[] args) {
        Line line;
        {
            Scanner scanner = new Scanner(System.in);
            p1 = scanner.nextInt();
            p2 = scanner.nextInt();
            p3 = scanner.nextInt();
            scanner.nextLine();
            line = new Line(scanner.nextLine().toCharArray());
        }
        line.next();
        while (line.nextRow() && !line.onEnd()) {
//            System.out.println(line + ":" + line.point);
            line.insert(getMidChars(line.get(HorizonDirection.left), line.get(HorizonDirection.right)));
//            System.out.println(line + ":" + line.point);
        }
        System.out.println(line);
    }

    static Character[] getMidChars(char left, char right) {
        if (right <= left || (Character.isDigit(left) && !Character.isDigit(right)) || (Character.isAlphabetic(left) && !Character.isAlphabetic(right)))
            return new Character[]{'-'};
        Character[] result = new Character[(right - left - 1) * p2];
        for (char from = (char) (left + 1), to = (char) (right - 1), i = 0; from <= to; from++)
            for (int count = 0; count < p2; count++)
                result[i++] = switch (p1) {
                    case 1 -> Character.toLowerCase(from);
                    case 2 -> Character.toUpperCase(from);
                    case 3 -> '*';
                    default -> throw new IllegalStateException("Unexpected value: " + p1);
                };
        if (p3 == 2) result = new ArrayList<>(List.of(result)).reversed().toArray(new Character[0]);
        return result;
    }
}

class Line {
    ArrayList<Character> data = new ArrayList<>();
    int point = 0;

    Line(char[] chars) {
        for (char c : chars)
            data.add(c);
    }

    void insert(Character[] chars) {
        ArrayList<Character> newData = new ArrayList<>();
        Character[] left = data.subList(0, point).toArray(new Character[0]), right = data.subList(point + 1, data.size()).toArray(new Character[0]);
        newData.addAll(List.of(left));
        newData.addAll(List.of(chars));
        newData.addAll(List.of(right));
        point += chars.length;
        data = newData;
    }

    char get(HorizonDirection direction) {
        return switch (direction) {
            case left -> data.get(point - 1);
            case right -> data.get(point + 1);
        };
    }

    /**
     * next-
     */
    boolean nextRow() {
        while (get() != '-') {
            if (!next()) return false;
        }
        return true;
    }

    boolean next() {
        if (onEnd()) return false;
        point++;
        return true;
    }

    boolean onStart() {
        return point == 0;
    }

    boolean onEnd() {
        return point == data.size() - 1;
    }

    char get() {
        return data.get(point);
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        for (char d : data)
            builder.append(d);
        return builder.toString();
    }
}

enum HorizonDirection {
    left, right
}

2025/1/1 09:10
加载中...