File tree Expand file tree Collapse file tree 2 files changed +52
-0
lines changed
Expand file tree Collapse file tree 2 files changed +52
-0
lines changed Original file line number Diff line number Diff line change 1+ #include "diamond.h"
2+
3+ #include <stddef.h>
4+ #include <stdlib.h>
5+ #include <string.h>
6+
7+ char * * make_diamond (const char letter ) {
8+ int axis_len = letter - 'A' ;
9+ int line_count = axis_len * 2 + 1 ;
10+ char * * diamond = malloc (line_count * sizeof (char * ));
11+ if (diamond == NULL ) {
12+ return NULL ;
13+ }
14+ for (int i = 0 ; i < line_count ; i ++ ) {
15+ diamond [i ] = malloc (sizeof (char [line_count ]));
16+ if (diamond [i ] == NULL ) {
17+ for (int j = 0 ; j < i ; j ++ ) {
18+ free (diamond [j ]);
19+ free (diamond );
20+ return NULL ;
21+ }
22+ }
23+ for (int j = 0 ; j < line_count ; j ++ ) {
24+ char temp_letter = 'A' + i > letter ? 2 * letter - 'A' - i : 'A' + i ;
25+ int l1 = ((i + j ) == axis_len );
26+ int l2 = ((i + j ) == 3 * axis_len );
27+ int l3 = ((i - j ) == axis_len );
28+ int l4 = ((j - i ) == axis_len );
29+ diamond [i ][j ] = l1 || l2 || l3 || l4 ? temp_letter : ' ' ;
30+ }
31+ diamond [i ][line_count ] = '\0' ;
32+ }
33+ return diamond ;
34+ }
35+
36+ void free_diamond (char * * diamond ) {
37+ if (diamond == NULL ) {
38+ return ;
39+ }
40+ size_t len = strlen (diamond [0 ]);
41+ for (size_t i = 0 ; i < len ; i ++ ) {
42+ free (diamond [i ]);
43+ }
44+ free (diamond );
45+ }
Original file line number Diff line number Diff line change 1+ #ifndef DIAMOND_H
2+ #define DIAMOND_H
3+
4+ char * * make_diamond (const char letter );
5+ void free_diamond (char * * diamond );
6+
7+ #endif
You can’t perform that action at this time.
0 commit comments