This commit is contained in:
Heli-o 2022-04-18 02:09:42 +02:00
parent 155e3bf24e
commit d4c829fcc3
8 changed files with 619 additions and 0 deletions

25
cce.sln Normal file
View file

@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.31729.503
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cce", "cce\cce.csproj", "{F8D0AB76-7AC7-4F50-8556-58A2C2255D40}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{F8D0AB76-7AC7-4F50-8556-58A2C2255D40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F8D0AB76-7AC7-4F50-8556-58A2C2255D40}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F8D0AB76-7AC7-4F50-8556-58A2C2255D40}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F8D0AB76-7AC7-4F50-8556-58A2C2255D40}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {A99DD7F3-A6FD-4246-A7B7-0A9829779930}
EndGlobalSection
EndGlobal

6
cce/App.config Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>

144
cce/Program.cs Normal file
View file

@ -0,0 +1,144 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.IO;
using System.Windows.Forms;
using static System.Console;
using static System.Threading.Thread;
namespace cce {
class Program {
static internal string title = "Corpus Cypher Executable (CCE)";
[STAThreadAttribute]
static void Main(string[] args) {
byte choice = 255;
while (true) {
SetBufferSize(240, 60);
SetWindowSize(120, 30);
Clear();
CursorVisible = false;
Utils.LagWrite("Welcome to the " + title, true);
//WriteLine("Welcome to the Corpus cypher executable.");
WriteCrypto();
if (choice == 255) choice = Chooser();
CursorVisible = false;
var entry = "";
if ((new int[] {1,2}).Contains(choice)) {
Utils.LagWrite("Please enter the sentence: ");
CursorVisible = true;
//Write("Please enter the sentence: ");
entry = ReadLine();
CursorVisible = false;
}
if (choice == 1) { Transcoder.Encode(entry); Utils.Clip(Transcoder.result); }
else if (choice == 2) Transcoder.Decode(entry);
else if (choice == 5) Transcoder.Teacher();
else if (choice == 9) Transcoder.head_transcribe();
else if (choice == 255) Help();
else if (choice == 0) { Beep(4000, 200); return; }
SetCursorPosition(0, WindowHeight - 2);
Utils.LagWrite("\nPress enter to continue, press any other key to exit"); CursorVisible = false;
var cki = ReadKey();
choice = 255;
var options = new char[] { '0','1','2','3','4','9'};
if (options.Contains(cki.KeyChar)) choice = byte.Parse(cki.KeyChar.ToString());
else if (cki.Key != ConsoleKey.Enter) break;
}
}
static byte Chooser() {
while (true) {
Utils.LagWrite("[1] Encode"
+"\n[2] Decode"
+"\n-------------------------"
+"\n[5] Teach new words"
+"\n-------------------------"
+"\n[9] DEV: Update JSON files using sorted files from python"
+"\n[0] Exit"
+"\n>>> ");
/*Write(@"Options?
[1] Encode
[2] Decode
-------------------------
[5] Teach new words
-------------------------
[9] DEV: Update JSON files using sorted files from python
[0] Exit
>> ");*/
CursorVisible = true;
var choice = ReadKey().KeyChar;
WriteLine();
switch (choice) {
case '1':
case '2':
case '5':
case '9':
case '0':
case '?':
case '/':
case '-':
case ',':
if ((new char[] { '?','/','-',','}).Contains(choice)) return 255;
return byte.Parse(choice.ToString());
default:
WriteLine("Not a valid option");
break;
}
}
}
static void WriteCrypto()
{
var pos = (CursorLeft, CursorTop);
var crypto = new string[] {"###########################",
"# #",
"# Corpus Cypher #",
"# #",
"###########################",
"# ENG = COR #",
"# A = A G = J M = S #",
"# B = T H = K N = T #",
"# C = Y I = I O = O #",
"# D = P J = T P = K #",
"# E = E K = K Q = R #",
"# F = T L = P R = T #",
"# #",
"# S = Y W = J #",
"# T = P X = K #",
"# U = U Y = Y #",
"# V = T Z = B #",
"# #",
"###########################"};
for (int i = 0; i < crypto.Length; i++)
{
CursorTop = i + 2;
CursorLeft = WindowWidth - crypto[i].Length - 2;
foreach (char c in crypto[i]) {
Write(c);
if (c != ' ') Sleep(1);
}
}
SetCursorPosition(pos.CursorLeft, pos.CursorTop);
}
static void Help() {
Clear();
var help = $@"Welcome to help for {title}
This executable was made to help you encrypt something into the Corpus Cypher
and to give you idea of what the person on the other end was trying to say.
This executable isn't fool proof and some mistakes in the code might've slipped
through my fingers. Still I hope it is atleast somewhat useful.
Encoding: Encoded text takes on the capitalization of the entered text.
Decoding: Decoded text takes on the capitalization of the entered text.
Teaching: First you enter in the encrypted word and then you give it the translation. It will remember the word.";
help = help.Replace("\r\n", "\n");
Utils.LagWrite(help);
}
}
}

View file

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("cce")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("cce")]
[assembly: AssemblyCopyright("Copyright © 2022")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("f8d0ab76-7ac7-4f50-8556-58a2c2255d40")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

286
cce/Transcoder.cs Normal file
View file

@ -0,0 +1,286 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.IO;
using System.Windows.Forms;
using static System.Console;
using static System.Threading.Thread;
namespace cce {
class Transcoder {
static internal string result = "";
static private Dictionary<string, string> extended_dict = null;
static private Dictionary<string, string> common_dict = null;
static private Dictionary<char, char> substitution = new Dictionary<char, char>{
{'a','a' },
{'b','t' },
{'c','y' },
{'d','p' },
{'e','e' },
{'f','t' },
{'g','j' },
{'h','k' },
{'i','i' },
{'j','t' },
{'k','k' },
{'l','p' },
{'m','s' },
{'n','t' },
{'o','o' },
{'p','k' },
{'q','r' },
{'r','t' },
{'s','y' },
{'t','p' },
{'u','u' },
{'v','t' },
{'w','j' },
{'x','k' },
{'y','y' },
{'z','b' }
};
static private Dictionary<char, string> decode_key = new Dictionary<char, string>{
{'a',"a" },
{'t',"bfjnrv"},
{'y',"csy" },
{'p',"dlt" },
{'e',"e" },
{'j',"gw" },
{'k',"hkpx" },
{'i',"i" },
{'s',"m" },
{'o',"o" },
{'r',"q" },
{'u',"u" },
{'b',"z" }
};
static private Dictionary<string, string> path = new Dictionary<string, string>{
{"common","common_dict.json" },
{"extended","extended_dict.json"}
};
static internal void Teacher() {
var pos = CursorTop;
Write("Please enter the encrypted word: ");
var cyphered = Console.ReadLine().ToLower();
if (cyphered == "") return;
CursorTop = pos;
string translation = "";
while (true) {
Write($"Please enter a translation for \"{cyphered}\": ");
translation = ReadLine().ToLower();
if (raw_encode(cyphered).ToLower() == cyphered) {
Console.BackgroundColor = ConsoleColor.Green; Console.ForegroundColor = ConsoleColor.Black;
WriteLine("Cypher Match!"); ResetColor(); break;
}
Console.BackgroundColor = ConsoleColor.Red;
WriteLine("Words don't match");
ResetColor();
}
var entered = false;
char cki;
do {
Utils.LagWrite(@"Where do you want to save the translation?
[1] Common words dictionary
[2] Extended words dictionary
>>> ".Replace("\r\n", "\n"));
cki = ReadKey().KeyChar;
WriteLine();
if (extended_dict == null || common_dict == null) init();
switch (cki) {
case '1':
if (common_dict.ContainsKey(translation)) {
WriteLine("Error: Unable to add a new translation. Translation already present.");
} else common_dict.Add(translation, cyphered);
entered = true;
break;
case '2':
if (extended_dict.ContainsKey(translation)) {
WriteLine("Error: Unable to add a new translation. Translation already present.");
} else extended_dict.Add(translation, cyphered);
entered = true;
break;
default:
CursorLeft--; WriteLine("Not a valid option");
break;
}
} while (!entered);
Console.BackgroundColor = cki == '1' ? ConsoleColor.Green : ConsoleColor.Blue; Console.ForegroundColor = ConsoleColor.Black;
WriteLine("Translation Added"); ResetColor();
update();
}
static internal void Encode(string entry) {
result = raw_encode(entry);
WriteLine("Transcoding:\n{0}\n", entry);
Utils.LagWrite(result);
}
static internal void Decode(string entry) {
var sentence = entry.ToLower();
//120x30, buffer 240x60
if (sentence.Length >= 120) { BufferWidth = sentence.Length * 2; WindowWidth = sentence.Length + 20; }
Clear();
CursorVisible = false;
if (extended_dict == null || common_dict == null) init();
var cleaned = new char[sentence.Length];
var symbols = new char[sentence.Length];
var writeout = new char[sentence.Length];
for (int i = 0; i < sentence.Length; i++) {
if (sentence[i] >= 'a' && sentence[i] <= 'z') { cleaned[i] = sentence[i]; symbols[i] = 'x'; writeout[i] = '_'; } else { writeout[i] = symbols[i] = sentence[i]; cleaned[i] = ' '; }
}
var decode = string.Join("", cleaned).ToLower().Split(' ');
//var decoded = new List<List<string>>();
Console.BackgroundColor = ConsoleColor.Green;
Console.Write(" "); ResetColor(); Console.WriteLine(" Frequent Words");
Console.BackgroundColor = ConsoleColor.Blue;
Console.Write(" "); ResetColor(); Console.WriteLine(" Infrequent Words");
Console.BackgroundColor = ConsoleColor.Red;
Console.Write(" "); ResetColor(); Console.WriteLine(" Letter decypher");
WriteLine("Transcoding:\n{0}\n", entry);
int memTop = CursorTop;
int left = 0;
Write(string.Join("", writeout));
for (int i = 0; i < decode.Length; i++) {
if (symbols[left] != 'x') left++;
//var options = new List<string>();
CursorTop = memTop;
Console.BackgroundColor = ConsoleColor.Green;
Console.ForegroundColor = ConsoleColor.Black;
wordwrite(common_dict, decode[i], entry, left, i);
/*foreach (var item in common_dict) {
if (item.Value == decode[i]) {
CursorLeft = left;
//options.Add(item.Key);
for (int j = 0; j < item.Key.Length; j++) {
Write(Char.IsUpper(entry[i]) ? char.Parse(item.Key[j].ToString().ToUpper()) : char.Parse(item.Key[j].ToString().ToLower()));
}
Write(item.Key.ToUpper());
Sleep(100);
CursorTop++;
}
}*/
Console.BackgroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.Black;
wordwrite(extended_dict, decode[i], entry, left, i);
ResetColor();
List<List<char>> letter_decode = new List<List<char>>();
for (int j = 0; j < decode[i].Length; j++) {
if (decode_key.TryGetValue(decode[i][j], out string substituted)) {
var letterlist = new List<char>();
for (int h = 0; h < substituted.Length; h++) {
letterlist.Add(substituted[h]);
}
letter_decode.Add(letterlist);
} else {
letter_decode.Add(new List<char> { sentence[j] });
}
}
int top = CursorTop;
int letterleft = left;
Console.BackgroundColor = ConsoleColor.Red;
Console.ForegroundColor = ConsoleColor.Black;
for (int j = 0; j < letter_decode.Count; j++) {
for (int h = 0; h < letter_decode[j].Count; h++) {
CursorLeft = letterleft;
Write(Char.IsUpper(entry[CursorLeft]) ? Char.ToUpper(letter_decode[j][h]) : Char.ToLower(letter_decode[j][h]));
Sleep(10);
CursorTop++;
}
CursorTop = top;
letterleft++;
}
Sleep(80);
left += decode[i].Length;
}
ResetColor();
//return string.Join(" ", decoded);
}
static internal void head_transcribe() {
if(!File.Exists("dev")) {
Clear();
BackgroundColor = ConsoleColor.Red;
Utils.LagWrite(" \n" +
" Unable to comply. Not a dev version \n"+
" ", true);
ResetColor();
return;
}
raw_transcribe("common_dict.txt", "common_dict.json");
raw_transcribe("extended_dict.txt", "extended_dict.json");
uniquire();
}
static private void update() {
uniquire();
File.WriteAllText(path["extended"], JsonConvert.SerializeObject(extended_dict));
File.WriteAllText(path["common"], JsonConvert.SerializeObject(common_dict));
}
static private string raw_encode(string entry) {
var sentence = entry.ToLower();
char[] encoded = new char[entry.Length];
for (int i = 0; i < sentence.Length; i++) {
if (substitution.TryGetValue(sentence[i], out char substituted)) {
encoded[i] = Char.IsUpper(entry[i]) ? Char.ToUpper(substituted) : Char.ToLower(substituted);
} else {
encoded[i] = entry[i];
}
}
return String.Join("", encoded);
}
static private void init() {
if (common_dict != null && extended_dict != null) return;
WriteLine("[Loading Dictionary]");
if (File.Exists(path["extended"])) extended_dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(File.ReadAllText(path["extended"]));
else WriteLine("File missing");
if (File.Exists(path["common"])) common_dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(File.ReadAllText(path["common"]));
else WriteLine("File missing");
}
static private void uniquire() {
init();
foreach (var item in common_dict) {
if (extended_dict.ContainsKey(item.Key)) extended_dict.Remove(item.Key);
}
}
static private void raw_transcribe(string input, string output) {
var lines = File.ReadAllLines(input);
for (int i = 0; i < lines.Length; i++) {
lines[i] = lines[i].ToLower();
}
var English = new string[lines.Length];
lines.CopyTo(English, 0);
for (int i = 0; i < English.Length; i++) {
var word = new char[English[i].Length];
for (int j = 0; j < English[i].Length; j++) {
if (substitution.TryGetValue(English[i][j], out char substituted)) {
word[j] = substituted;
}
else {
word[j] = English[i][j];
}
}
lines[i] = String.Join("", word);
WriteLine($"{English[i]}:{lines[i]}");
}
Dictionary<string, string> vals = new Dictionary<string, string>();
for (int i = 0; i < English.Length; i++) {
if (vals.ContainsKey(English[i])) continue;
vals.Add(English[i], lines[i]);
}
File.WriteAllText(output, JsonConvert.SerializeObject(vals));
}
static private void wordwrite(Dictionary<string, string> collection, string decode, string entry,int left, int i) {
foreach (var item in collection) {
if (item.Value == decode) {
CursorLeft = left;
//options.Add(item.Key);
for (int j = 0; j < item.Key.Length; j++) {
Write(Char.IsUpper(entry[CursorLeft]) ? Char.ToUpper(item.Key[j]) : Char.ToLower(item.Key[j]));
}
Utils.VarSleep(10, low: 20,high:100);
CursorTop++;
}
}
}
}
}

58
cce/Utils.cs Normal file
View file

@ -0,0 +1,58 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.IO;
using System.Windows.Forms;
using static System.Console;
using static System.Threading.Thread;
namespace cce {
class Utils {
static private Random rng = new Random();
static internal void VarSleep(int adj, int low = 0, int high = 300, int step = 10,
decimal chance = 0.25m) {
var del = rng.Next(Math.Abs(adj));
if (del <= (int)(adj * chance)) del = low;
else if (del >= adj - (int)(adj * chance)) del = high;
else del = del * step;
Sleep(del);
}
static internal void Clip(string clip) {
WriteLine();
LagWrite("Do you want to copy the result to the Clipboard? [Y/n]: ");
var cki = ReadKey().KeyChar;
WriteLine();
if (Char.ToLower(cki) == 'y') { Clipboard.SetText(clip); WriteLine("Writing to Clipboard: Done!"); } else WriteLine("Writing to Clipboard: Canceled by User");
}
internal static void LagWrite(string input, bool newline = false) {
var phrases = new List<List<string>>();
var lines = input.Split(new char[] { '\n' });
for (int i = 0; i < lines.Length; i++) {
var line = new List<string>();
var split = lines[i].Split(' ');
int min = 4;
int selector = rng.Next(min, split.Length > min + 1 ? split.Length : min + 1);
var selected = new List<string>();
for (int j = 0; j < split.Length; j++) {
selected.Add(split[j]);
if (j != 0 && j % selector == 0) {
line.Add(String.Join(" ", selected));
selected.Clear();
}
}
if (selected.Count > 0) line.Add(String.Join(" ", selected));
phrases.Add(line);
}
for (int i = 0; i < phrases.Count; i++) {
for (int j = 0; j < phrases[i].Count; j++) {
Write(j != phrases[i].Count - 1 ? phrases[i][j] + " " : phrases[i][j]);
VarSleep(22);
}
if (newline || i < phrases.Count - 1) WriteLine();
}
}
}
}

60
cce/cce.csproj Normal file
View file

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{F8D0AB76-7AC7-4F50-8556-58A2C2255D40}</ProjectGuid>
<OutputType>Exe</OutputType>
<RootNamespace>corpus_decoder</RootNamespace>
<AssemblyName>corpus decoder</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Transcoder.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Utils.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

4
cce/packages.config Normal file
View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net472" />
</packages>