-
Notifications
You must be signed in to change notification settings - Fork 0
/
AoC3a.m
81 lines (74 loc) · 3.02 KB
/
AoC3a.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
clear; clc; close all;
binary = fileread('third.txt'); %input který nám dal AoC skopírovaný do .txt souboru
binaryByLine = regexp(binary, '\n', 'split'); %použiju delimiter \n pro rozdělení dat na jednotlivé instrukce
data = regexp(binaryByLine, ' ', 'split'); %rozdělím direction od čísla -> finální data
clear binary binaryByLine;
numberOfCollumns = 12;
numberOfRows = length(data); %1000
count = [0 0 0 0 0 0 0 0 0 0 0 0]; %počet jedniček v každém řádku
gamma = [0 0 0 0 0 0 0 0 0 0 0 0];
epsilon = [0 0 0 0 0 0 0 0 0 0 0 0];
for i = 1:numberOfRows
for j = 1:numberOfCollumns
a = char(data{i});
count(j) = count(j) + str2double(a(j));
end
end
for i = 1:length(count)
if count(i) < numberOfRows/2
gamma(i) = 0;
epsilon(i) = 1;
else
gamma(i) = 1;
epsilon(i) = 0;
end
end
strGamma = num2str(gamma);
strGamma(isspace(strGamma)) = '';
gamma = bin2dec(strGamma);
strEpsilon = num2str(epsilon);
strEpsilon(isspace(strEpsilon)) = '';
epsilon = bin2dec(strEpsilon);
newCount = data;
anotherCount = {};
for j = 1:numberOfCollumns-1
if mod(j, 2) == 1
if count(j) > numberOfRows/2 % pokuď 1 převládaj tak
for i = 1:numberOfRows %zopakuje se pro každej řádek
str = cell2mat(newCount{i});
if str(1) == '1' %pokuď zbývající string začíná jedničkou
smth = cell2mat(newCount{i}); %obsah řádku
anotherCount{length(anotherCount)+1} = smth((j+1):numberOfCollumns); %obsah řádku se dá do nové celly
end
end
else %pokuď 0 převládaj
for i = 1:numberOfRows %zopakuje se pro každej řádek
str = cell2mat(newCount{i});
if str(1) == '0' %pokuď zbývající string začíná nulou
smth = cell2mat(newCount{i});
anotherCount{length(anotherCount)+1} = smth((j+1):numberOfCollumns);
end
end
end
newCount = {};
else
if count(j) > numberOfRows/2 % pokuď 1 převládaj tak
for i = 1:numberOfRows %zopakuje se pro každej řádek
str = cell2mat(anotherCount{i});
if str(1) == '1' %pokuď zbývající string začíná jedničkou
smth = cell2mat(anotherCount{i}); %obsah řádku
newCount{length(newCount)+1} = smth((j+1):numberOfCollumns); %obsah řádku se dá do nové celly
end
end
else %pokuď 0 převládaj
for i = 1:numberOfRows %zopakuje se pro každej řádek
str = cell2mat(anotherCount{i});
if str(1) == '0' %pokuď zbývající string začíná nulou
smth = cell2mat(anotherCount{i});
newCount{length(newCount)+1} = smth((j+1):numberOfCollumns);
end
end
end
anotherCount = {};
end
end