Guest User

Untitled

a guest
Dec 16th, 2020
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.75 KB | None | 0 0
  1. clc
  2. clear
  3. close all
  4.  
  5. tic
  6. disp('starting...')
  7.  
  8. % Manually extracted from input
  9. myTicket = [83,53,73,139,127,131,97,113,61,101,107,67,79,137,89,109,103,59,149,71];
  10.  
  11. % Note: Manually split input file into 'rules' and 'other tickets'
  12. x = importdata('rules.txt');
  13. L = size(x,1);
  14. R=[];
  15. for i=1:L
  16.     str = x{i};
  17.     z   = strsplit(str,{': ',' or '});
  18.     N1  = strsplit(z{2},'-');
  19.     N2  = strsplit(z{3},'-');
  20.     R   = [R;[str2double(N1{1}),str2double(N1{2})]];
  21.     R   = [R;[str2double(N2{1}),str2double(N2{2})]];
  22. end
  23.  
  24. invalidSum          = 0;
  25. y                   = importdata('input.txt'); % only other tickets
  26. invalidTicketRow    = zeros(size(y,1),1);
  27. for r=1:size(y,1)
  28.     for c=1:size(y,2)
  29.         valid = 0;
  30.         for j=1:size(R,1)
  31.             if y(r,c)>=R(j,1) && y(r,c)<=R(j,2)
  32.                 valid = 1;
  33.             end
  34.         end
  35.         if valid==0
  36.             invalidSum = invalidSum + y(r,c);
  37.             invalidTicketRow(r) = 1;
  38.         end
  39.     end
  40. end
  41. disp(invalidSum) % Part A
  42.  
  43. %Remove invalid tickets
  44. y = y(~invalidTicketRow,:);
  45.  
  46. % Build matrix M with rules in rows and ticketfield in columns. A true
  47. % entry in M means the ticket field follows a rule.
  48. for rule = 1:20
  49.     for ticketField = 1:20
  50.        if all((y(:,ticketField) >= R((2*rule)-1,1) & y(:,ticketField) <= R((2*rule)-1,2)) | (y(:,ticketField) >= R(2*rule,1) & y(:,ticketField) <= R(2*rule,2)))
  51.            M(rule,ticketField)=true;
  52.        end
  53.     end
  54. end
  55. disp(M)
  56.  
  57. order=zeros(1,20);
  58. for i=1:20
  59.     r = find(sum(M,2)==1);
  60.     c = find(M(r,:));
  61.     order(r)=c;
  62.     M(:,c)=false;
  63. end
  64.    
  65. format long
  66. disp(myTicket(order(1))*myTicket(order(2))*myTicket(order(3))*myTicket(order(4))*myTicket(order(5))*myTicket(order(6)))
  67.  
  68. toc
  69. disp('Finished')
Advertisement
Add Comment
Please, Sign In to add comment