ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1404. Легко взломать!

Using OOP (C#)
Послано Maxim Afripov 31 окт 2021 14:59
using System;
namespace EasyHack_ {
    class Coder {
        private short[] unicode;
        private string word;
        public static readonly string alphabet = "abcdefghijklmnopqrstuvwxyz";
        public string GetCoderWord() {
            this.UnicodeToCoder();
            this.SetUnicode();
            return this.word;
        }

        public string GetOutCoderWord() {
            this.UnicodeOutCoder();
            this.SetUnicode();
            return this.word;
        }

        public Coder(string word) {
            this.word = word.ToLower();
            this.unicode = new short[word.Length];
            this.GetUnicode();
        }

        public string GetWord () {
            return this.word;
        }

        public short[] GetWordUnicode () {
            return this.unicode;
        }

        private void GetUnicode () {
            for (int iterable = 0; iterable < unicode.Length; iterable++) {
                this.unicode[iterable] = (short)Coder.alphabet.IndexOf(this.word[iterable]);
            }
        }

        private void SetUnicode () {
            this.word = "";
            for (int iterable = 0; iterable < unicode.Length; iterable++) {
                this.word += Coder.alphabet[unicode[iterable]];
            }
        }

        private void UnicodeToCoder () {
            if (unicode[0] == 21) unicode[0] = 0;
            else this.unicode[0] = (this.unicode[0] + 5 > 25) ?
                (short)(this.unicode[0] + 5 - 25) :
                (short)(this.unicode[0] + 5);
            for (int iterable = 1; iterable < this.unicode.Length; iterable++) {
                this.unicode[iterable] = (this.unicode[iterable] + this.unicode[iterable - 1] > 25) ?
                    (short)((this.unicode[iterable] + this.unicode[iterable - 1]) % 26) :
                    (short)(this.unicode[iterable] + this.unicode[iterable - 1]);
            }
        }

        private void UnicodeOutCoder () {
            for (int iterable = 1; iterable < this.unicode.Length; iterable++) {
                while (this.unicode[iterable] < this.unicode[iterable - 1]) this.unicode[iterable] += 26;
            }

            short _lastUnicode = this.unicode[0];
            if (this.unicode[0] == 0) this.unicode[0] = 21;
            else this.unicode[0] = (this.unicode[0] - 5 < 0) ?
                (short)(25 + this.unicode[0] - 5) :
                (short)(this.unicode[0] - 5);
            for (int iterable = 0; iterable < this.unicode.Length - 1; iterable++) {
                short element = this.unicode[iterable + 1];
                this.unicode[iterable + 1] -= _lastUnicode;
                _lastUnicode = element;
            }
        }
    }

    class Program {
        public static void Main(string[] args) {
            string coderWord = Console.ReadLine();
            Coder word = new Coder(coderWord);
            Console.WriteLine(word.GetOutCoderWord());
        }
    }
}

Edited by author 31.10.2021 14:59

Edited by author 31.10.2021 15:11