package robot;
/**
 * @author Fenyvesi Tibor
 */
import java.io.*;
import java.text.DecimalFormat;
import java.util.*;

public class Robot {

    public static void main(String[] args) throws IOException {
        int i = 0;
        int psz = 0; // programok száma
        String[] P; // programok utasításai
        System.out.println("1. feladat");
        BufferedReader br = new BufferedReader(new FileReader("program.txt"));
        psz = Integer.parseInt(br.readLine());
        P = new String [psz];
        String sor;
        while ((sor = br.readLine()) != null) {
            P[i] = sor;
            i++;
        }
        br.close();

        System.out.println("2. feladat:");
        Scanner sc = new Scanner(System.in);
        System.out.println("Kérem az utasítássor sorszámát!");
        int us = sc.nextInt()-1;

        // 2.a.
        if (P[us].contains("ED") || P[us].contains("DE") ||
            P[us].contains("KN") || P[us].contains("NK"))
            System.out.println("egyszerűsíthető");
        else
            System.out.println("nem egyszerűsíthető");

        // 2.b. és 2.c.
        int ed = 0; // az észak-déli tengely lépésszáma
        int kn = 0; // a keleti-nyugati tengely lépésszáma
        double max_távolság = 0; // a robot maximális távolsága a startponttól
        double akt_távolság = 0; // a robot aktuális távolsága a startponttól
        int max_lépés = 0; // a maximális távolsághoz tartozó lépések száma
        for (i = 0; i < P[us].length(); i++) {
            // 2.b.
            switch (P[us].charAt(i)) {
                case 'E': ed++; break;
                case 'D': ed--; break;
                case 'K': kn++; break;
                case 'N': kn--;
            }
            // 2.c.
            akt_távolság = Math.sqrt(Math.pow(ed,2)+Math.pow(kn,2));
            if (akt_távolság > max_távolság) {
                max_lépés = i+1;
                max_távolság = akt_távolság;
            }
        }
        // 2.b.
        System.out.println(Math.abs(ed) + " lépést kell tenni az ED, " 
                           + Math.abs(kn) + " lépést a KN tengely mentén.");
        // 2.c.
        DecimalFormat htf = new DecimalFormat("###.000");
        System.out.println("A robot " + max_lépés + " lépést követően volt a "
                            + "legmesszebb, amikor is ");
        System.out.println("a központtól mért távolsága légvonalban "
                            + htf.format(max_távolság) + " egység volt.");
        System.out.println("");

        System.out.println("3. feladat:");
        int akt_en = 0;
        for (i = 0; i < psz; i++) {
            akt_en = 2 + P[i].length(); // fix energia: indulás + lépések száma
            for (int k = 0; k < P[i].length()-1; k++)
                if (P[i].charAt(k) != P[i].charAt(k+1))
                    akt_en += 2;
            if (akt_en <= 100)
                System.out.println("A(z) " + (i+1) + ". utasítássor " + akt_en
                                   + " egység energiát fogyaszt.");
        }
        System.out.println("");

        System.out.println("4. feladat");
        PrintWriter pw = new PrintWriter("ujprog.txt");
        String tsor; // technikai sor
        int usz;
        for (i = 0; i < psz; i++) {
            usz = 1; //utasításszámláló
            tsor= P[i]+"*"; // zárókarakter hozzáadása (csak technikai okokból)
            for (int k = 1; k <= tsor.length()-1; k++)
                if (tsor.charAt(k) == tsor.charAt(k-1))
                    usz++;
                else {
                    if (usz > 1) pw.print(usz);
                    pw.print(tsor.charAt(k-1));
                    usz = 1;
                }
            pw.println(""); // soremelés
        }
        pw.close(); // állomány zárása

        System.out.println("5. feladat:");
        sc = new Scanner(System.in);
        System.out.println("Kérek egy új formátumú utasítássort!");
        String uts = sc.next();
        int ism_szám = 0; // betűismétlések száma
        String ism_kar = "0"; // számkarakterek gyűjtője
        for (i = 0; i < uts.length(); i++) {
            if (uts.substring(i,i+1).matches("E|D|K|N")) {
            ism_szám = Integer.parseInt(ism_kar);
                if (ism_szám == 0) ism_szám = 1;
                for (int k = 1; k <= Math.min(ism_szám, 200); k++)
                    System.out.print(uts.charAt(i));
                ism_kar = "0";
            } else 
                  ism_kar += uts.charAt(i); 
        }
        System.out.println("");
    }
}
