Java: практические задания шестой недели начальных курсов

4.4 (88.57%) 7 vote[s]

В этом практическом задании нужно выполнить 2 задания: реализовать алгоритм RLE (кодирование повторов) в обоих направлениях (упаковка и декодирование).

Упаковка

Описание задания:

Создать приложение, упаковывающее строки с помощью алгоритма RLE. В случае Вашего приложения нужно заменить последовательность одинаковых букв на букву, за которой будет следовать цифра от 2 до 9, что укажет на количество повтора символов. Если символ встретился только 1 раз то замену делать не нужно. Регистр символов при замене учитывается. Например, строка:

Hhhhhhhhhhhhhheeeellooooo 

Будет преобразован в:

Hh9h4e4l2o5 

Обратите внимание: если количество повторов более 9 то нужно разбить закодированную информацию на две группы. Например:

hhhhhhhhhhhh 

будет заменено на:

h9h3        

Данные для кодирования будут поступать в качестве аргументов командной строки (только одну строку). Обратите внимание на проверку входных данных: на входе НЕ может быть null но может быть пустая строка. В случае пустого строке на входе Ваше приложение должно вывести на экран пустую строку.

Шаблон для вставки вашего кода:

package com.tasks6.rle;
 
public class Application
{
      public static void main( String[] args )
      {
      }
}       

Пример реализации:

package com.tasks6.rle;

public class Application
{
	public static void main( String[] args )
	{
		if ((args.length == 0) || (args[0] == null) || (args[0].equals(""))) {
			System.out.println("");
			
		}else {
			String income = args[0];

			char[] decoding = new char[income.length()];

			char sample;

			
			for (int i = 0; i < income.length(); i++) {
				decoding[i] = income.charAt(i);
				// System.out.print(decoding[i]);
			}
			
			int k = 0;
			sample = decoding[0];
			for (int i = 0; i < decoding.length; i++) {

				int sampleCount = 1;

				while ((i + 1 < decoding.length) && (decoding[i] == decoding[i+1]) && (sampleCount < 9)) {
					sampleCount++;
					i++;
				}
				System.out.print(decoding[i]);
				if (sampleCount > 1) {
					System.out.print(sampleCount);
				}
			}
		}
	}
}          
      

Декодирование

Описание задания:

Создайте приложение, будет декодировать строки полученные в задании с кодировкой строк. Например:

Hh9h4e4l2o5 

Нужно превратить в:

Hhhhhhhhhhhhhheeeellooooo 

Данные для декодирования будут поступать в качестве аргументов командной строки (только одну строку). Обратите внимание на проверку входных данных: на входе НЕ может быть null но может быть пустая строка. В случае пустого строке на входе Ваше приложение должно вывести на экран пустую строку. Также на входе могут быть заведомо некорректные строки. Например:

Hh90helo 

В данном случае количество повторов 90, не допустимо по условиям задачи кодирования. В таком случае выведите на экран пустую строку.

В кодированном строке не должно быть повторяющихся символов. Например:

Hhhhhhhhhhhhhheeeellooooo 

В таком случае выведите пустую строку.

Шаблон для вставки кода:

package com.tasks6.rle_decoder;
 
public class Application
{
       public static void main( String[] args )
       {
              
       }
}  

Пример реализации:

package com.tasks6.rle_decoder;

public class Application {

    public static void main(String[] args) {

        
        if ((args.length == 0)  || (args[0].equals(""))) {
            System.out.println("");
        } else {
            String income = args[0];
            int length = income.length();

            
            if (Character.isDigit(income.charAt(0))) {
                System.out.println("");
                return;
            }

            
            for (int i = 0; i < length - 1; i++) {
                if (income.charAt(i) == income.charAt(i + 1)) {
                    System.out.println("");
                    return;
                }
                if (Character.isDigit(income.charAt(i)) && Character.isDigit(income.charAt(i + 1))) {
                    System.out.println("");
                    return;
                }
            }

           
            StringBuilder result = new StringBuilder("");
            char basket;
            int n = 0;
            basket = income.charAt(0);

            for (int i = 1; i < length; i++) {

                if (Character.isDigit(income.charAt(i))) {
                    n = income.charAt(i) - '0';

                    for (int j = 0; j < n - 1; j++) {
                        result.append(basket);
                    }
                } else {
                    result.append(basket);
                    basket = income.charAt(i);
                }
            }

            result.append(basket);
            System.out.println(result.toString());
        }
    }
}

Читайте больше по теме:

Подписаться
Уведомление о
guest
0 комментариев
Inline Feedbacks
View all comments
Просмотры: 317

Популярные записи