2018-12-03 11:19:53 +01:00
# include <stdio.h>
# define SIZE 1000
struct Claim {
int left ;
int top ;
int width ;
int height ;
int id ;
} ;
struct Claim parseClaim ( char line [ 25 ] ) {
struct Claim claim ;
sscanf ( line , " #%d @ %d,%d: %dx%d " , & claim . id , & claim . left , & claim . top , & claim . width , & claim . height ) ;
return claim ;
}
2018-12-03 15:39:10 +01:00
void resetFields ( int fabric [ SIZE ] [ SIZE ] ) {
2018-12-03 16:12:25 +01:00
for ( int i = 0 ; i < SIZE ; i + + ) {
for ( int j = 0 ; j < SIZE ; j + + ) {
2018-12-03 15:39:10 +01:00
fabric [ i ] [ j ] = 0 ;
}
}
}
2018-12-03 11:19:53 +01:00
void setFields ( struct Claim claim , int fabric [ SIZE ] [ SIZE ] ) {
for ( int i = claim . left ; i < claim . left + claim . width ; i + + ) {
for ( int j = claim . top ; j < claim . top + claim . height ; j + + ) {
fabric [ i ] [ j ] + = 1 ;
}
}
}
int countDoubles ( int fabric [ SIZE ] [ SIZE ] ) {
int sum = 0 ;
for ( int i = 0 ; i < SIZE ; i + + ) {
for ( int j = 0 ; j < SIZE ; j + + ) {
if ( fabric [ i ] [ j ] > 1 ) {
2018-12-03 16:12:25 +01:00
sum + + ;
2018-12-03 11:19:53 +01:00
}
}
}
return sum ;
}
int main ( ) {
int fabric [ SIZE ] [ SIZE ] ;
FILE * input = fopen ( " input " , " r " ) ;
char line [ 25 ] ;
2018-12-03 15:39:10 +01:00
resetFields ( fabric ) ;
2018-12-03 11:19:53 +01:00
while ( fgets ( line , sizeof ( line ) , input ) ) {
struct Claim claim = parseClaim ( line ) ;
setFields ( claim , fabric ) ;
}
printf ( " %d \n " , countDoubles ( fabric ) ) ;
return 0 ;
}