Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.IO;
- namespace Third___Easy
- {
- class Program
- {
- static TextReader input;
- static TextWriter output;
- static int step;
- static void Main(string[] args)
- {
- Initialize(args);
- string line = input.ReadLine();
- while (line.Length > 0)
- {
- StringBuilder outputLine = new StringBuilder(line.Length);
- foreach (char c in line)
- {
- if (char.IsLower(c))
- {
- outputLine.Append(CaesarCypherLower(c));
- }
- else if (char.IsUpper(c))
- {
- outputLine.Append(CaesarCypherUpper(c));
- }
- else
- {
- outputLine.Append(CaesarCypherOther(c));
- }
- }
- output.WriteLine(outputLine);
- line = input.ReadLine();
- }
- }
- private static void Initialize(string[] args)
- {
- input = Console.In;
- output = Console.Out;
- step = 1;
- for (int i = 0; i < args.Length; i++)
- {
- if (args[i] == "-i")
- {
- input = new StreamReader(args[i + 1]);
- i++;
- }
- else if (args[i] == "-o")
- {
- output = new StreamWriter(args[i + 1]);
- i++;
- }
- else if (args[i] == "-d")
- {
- step *= -1;
- }
- else if (args[i] == "-s")
- {
- step *= int.Parse(args[i + 1]);
- i++;
- }
- }
- }
- private static char CaesarCypherLower(char letter)
- {
- byte asciiValue = Encoding.ASCII.GetBytes(new char[] { letter })[0];
- byte asciiMin = Encoding.ASCII.GetBytes(new char[] { 'a' })[0];
- byte asciiMax = Encoding.ASCII.GetBytes(new char[] { 'z' })[0];
- return CaesarCypher(ref asciiValue, asciiMin, asciiMax);
- }
- private static char CaesarCypherUpper(char letter)
- {
- byte asciiValue = Encoding.ASCII.GetBytes(new char[] { letter })[0];
- byte asciiMin = Encoding.ASCII.GetBytes(new char[] { 'A' })[0];
- byte asciiMax = Encoding.ASCII.GetBytes(new char[] { 'Z' })[0];
- return CaesarCypher(ref asciiValue, asciiMin, asciiMax);
- }
- private static char CaesarCypherOther(char letter)
- {
- byte asciiValue = Encoding.ASCII.GetBytes(new char[] { letter })[0];
- byte asciiMin = Encoding.ASCII.GetBytes(new char[] { '!' })[0];
- byte asciiMax = Encoding.ASCII.GetBytes(new char[] { '@' })[0];
- //is encryptable symbol?
- if (asciiValue < asciiMin || asciiValue > asciiMax)
- {
- return letter;
- }
- return CaesarCypher(ref asciiValue, asciiMin, asciiMax);
- }
- private static char CaesarCypher(ref byte asciiValue, byte asciiMin, byte asciiMax)
- {
- asciiValue += (byte)step;
- //character overflow or underflow correction
- if (asciiValue < asciiMin)
- {
- asciiValue = (byte)(asciiMax - (asciiMin - asciiValue) + 1);
- }
- if (asciiValue > asciiMax)
- {
- asciiValue = (byte)(asciiMin + (asciiValue - asciiMax) - 1);
- }
- return Encoding.ASCII.GetChars(new byte[] { asciiValue })[0];
- }
- }
- }
Add Comment
Please, Sign In to add comment