Fix formatting for printing

This commit is contained in:
2021-10-18 10:38:54 +02:00
parent a68f70122e
commit c96101ad8e
8 changed files with 100 additions and 14 deletions

86
src/Julia/Problem059.jl Normal file
View File

@@ -0,0 +1,86 @@
#=
Created on 17 Oct 2021
@author: David Doblas Jiménez
@email: daviddoji@pm.me
Solution for Problem 59 of Project Euler
https://projecteuler.net/problem=59
=#
using BenchmarkTools
using Combinatorics
using DelimitedFiles
function Problem59()
#=
Each character on a computer is assigned a unique code and the preferred
standard is ASCII (American Standard Code for Information Interchange).
For example, uppercase A = 65, asterisk (*) = 42, and lowercase k = 107.
A modern encryption method is to take a text file, convert the bytes to
ASCII, then XOR each byte with a given value, taken from a secret key.
The advantage with the XOR function is that using the same encryption key
on the cipher text, restores the plain text; for example, 65 XOR 42 = 107,
then 107 XOR 42 = 65.
For unbreakable encryption, the key is the same length as the plain text
message, and the key is made up of random bytes. The user would keep the
encrypted message and the encryption key in different locations, and
without both "halves", it is impossible to decrypt the message.
Unfortunately, this method is impractical for most users, so the modified
method is to use a password as a key. If the password is shorter than the
message, which is likely, the key is repeated cyclically throughout the
message. The balance for this method is using a sufficiently long password
key for security, but short enough to be memorable.
Your task has been made easy, as the encryption key consists of three
lower case characters. Using p059_cipher.txt, a file containing the
encrypted ASCII codes, and the knowledge that the plain text must contain
common English words, decrypt the message and find the sum of the ASCII
values in the original text.
=#
file = "/datos/Scripts/Gitea/Project_Euler/src/files/Problem59.txt"
data = readline(file)
data = parse.(Int, split(data, ","))
# encrypted = readdlm(file, ',', Int)
# print(encrypted)
# with open('../files/Problem59.txt', 'r') as f:
# # encrypted = list(map(int, f.read().split(',')))
# encrypted = [int(char) for char in f.read().split(',')]
# # print(encrypted)
# # print(test)
# plain_text = (length(encrypted) ÷ 3)
# println(plain_text)
# ascii_lowercase = join('a':'z')
# for key in combinations(ascii_lowercase, 3)
# decrypted = ""
# for (k, i) in zip(repeat(key, plain_text), encrypted)
# decrypted += Char(round(BigInt(Int(k) ^ i)))
# end
# # assuming Euler will be in the text
# if "Euler" in decrypted
# return sum([Int(c) for c in decrypted])
# end
# end
ascisum = 0
for shift=0:2, c='a':'z'
decrypted = data[1+shift:3:end] .⊻ Int(c)
if minimum(decrypted) == Int(' ') && maximum(decrypted) <= Int('z')
ascisum += sum(decrypted)
end
end
return ascisum
end
println("Time to evaluate Problem 59:")
@btime Problem59()
println("")
println("Result for Problem 59: ", Problem59())