fork download
  1. /*
  2.  * Basically, we are trying to do this in C PreProcessor (a.k.a CPP)::
  3.  *
  4.  * int start = 1;
  5.  * int end = 20;
  6.  * for (i = start; i != end; i ++) {
  7.  * for (j = start; j != end; j ++)
  8.  * printf("%2d x %2d = %3d\n", i, j, (i * j));
  9.  * printf("\n");
  10.  * }
  11.  *
  12.  * References:
  13.  * goo.gl/1HGxJX
  14.  * goo.gl/wcfeFK
  15.  */
  16.  
  17. #define START (1, )
  18. #define END (0, 2) // this is 20
  19. #define PRINT_FORMAT "%2d x %2d = %3d\n"
  20.  
  21. /* Let's start with some utility functions */
  22. #define EAT(...)
  23. #ifndef DEBUG
  24. #define TEST(...) EAT
  25. #endif
  26.  
  27. #define LITERAL(x) #x
  28. #define CAT_0(x, y) x ## y
  29. #define CAT_1(x, y) CAT_0(x, y)
  30. #define CAT(x, y) CAT_1(x, y)
  31.  
  32. #define EXPAND(...) __VA_ARGS__
  33.  
  34. #define EMPTY() // empty
  35. #define DEFER_0(...) __VA_ARGS__ EMPTY() // defer once
  36. #define DEFER_1(...) __VA_ARGS__ DEFER_0(EMPTY) ()
  37. #define DEFER_2(...) __VA_ARGS__ DEFER_1(EMPTY) ()
  38. #define DEFER_3(...) __VA_ARGS__ DEFER_2(EMPTY) ()
  39. #define DEFER_4(...) __VA_ARGS__ DEFER_3(EMPTY) ()
  40. #define DEFER_5(...) __VA_ARGS__ DEFER_4(EMPTY) ()
  41. #define DEFER_6(...) __VA_ARGS__ DEFER_5(EMPTY) ()
  42. #define DEFER_7(...) __VA_ARGS__ DEFER_6(EMPTY) ()
  43. #define DEFER_8(...) __VA_ARGS__ DEFER_7(EMPTY) ()
  44. #define DEFER_9(...) __VA_ARGS__ DEFER_8(EMPTY) ()
  45.  
  46. #define EVAL_1(...) __VA_ARGS__ /* evaluate 1 time */
  47. #define EVAL_2(...) EVAL_1(EVAL_1(EVAL_1(__VA_ARGS__)))
  48. #define EVAL_3(...) EVAL_2(EVAL_2(EVAL_2(__VA_ARGS__)))
  49. #define EVAL_4(...) EVAL_3(EVAL_3(EVAL_3(__VA_ARGS__)))
  50. #define EVAL_5(...) EVAL_4(EVAL_4(EVAL_4(__VA_ARGS__)))
  51. #define EVAL_6(...) EVAL_5(EVAL_5(EVAL_5(__VA_ARGS__)))
  52. #define EVAL_7(...) EVAL_6(EVAL_6(EVAL_6(__VA_ARGS__)))
  53. #define EVAL_8(...) EVAL_7(EVAL_7(EVAL_7(__VA_ARGS__)))
  54. #define EVAL_9(...) EVAL_8(EVAL_8(EVAL_8(__VA_ARGS__)))
  55.  
  56. #define EVAL__1(...) __VA_ARGS__
  57. #define INNER_EVAL(...) EVAL__1(EVAL__1(__VA_ARGS__))
  58.  
  59. #define IF_1(TRUE_BLOCK, ...) TRUE_BLOCK
  60. #define IF_0(TRUE_BLOCK, ...) __VA_ARGS__
  61.  
  62. #define IIF(cond) CAT(IF_, cond)
  63.  
  64. #define CHECK_N(_, n, ...) n
  65. #define CHECK(...) CHECK_N(__VA_ARGS__, 0, 0)
  66. #define PROBE(x) x, 1,
  67.  
  68. /*
  69.  * NOT(0) = 1, NOT(otherwise) = 0
  70.  */
  71. #define NOT(x) CHECK(CAT(NOT_, x))
  72. #define NOT_0 PROBE(~)
  73.  
  74. /*
  75.  * BOOLEAN OPERATIONS
  76.  */
  77. #define XOR(a, b) CHECK(CAT(CAT(XOR_, a), b))
  78. #define XOR_10 PROBE(1)
  79. #define XOR_01 PROBE(1)
  80.  
  81. #define AND(a, b) CHECK(CAT(CAT(AND_, a), b))
  82. #define AND_11 PROBE(1)
  83.  
  84. #define OR(a, b) CHECK(CAT(CAT(OR_, a), b))
  85. #define OR_01 PROBE(1)
  86. #define OR_10 PROBE(1)
  87. #define OR_11 PROBE(1)
  88.  
  89. /* 0 => 1, 1 => 0 */
  90. #define COMP(BIT) CAT(COMP_, BIT)
  91. #define COMP_0 1
  92. #define COMP_1 0
  93. /* END OF BOOLEAN OPERATIONS */
  94.  
  95. /*
  96.  * DECIMAL OPERATIONS
  97.  */
  98. #define DEC_INC(a) CAT(DEC_INC_, a)
  99. #define DEC_INC_0 1
  100. #define DEC_INC_1 2
  101. #define DEC_INC_2 3
  102. #define DEC_INC_3 4
  103. #define DEC_INC_4 5
  104. #define DEC_INC_5 6
  105. #define DEC_INC_6 7
  106. #define DEC_INC_7 8
  107. #define DEC_INC_8 9
  108. #define DEC_INC_9 0
  109.  
  110. #define DEC_EQUIV(a, b) CHECK(CAT(CAT(DEC_EQUIV_, a), b))
  111. #define DEC_EQUIV_00 PROBE(1)
  112. #define DEC_EQUIV_11 PROBE(1)
  113. #define DEC_EQUIV_22 PROBE(1)
  114. #define DEC_EQUIV_33 PROBE(1)
  115. #define DEC_EQUIV_44 PROBE(1)
  116. #define DEC_EQUIV_55 PROBE(1)
  117. #define DEC_EQUIV_66 PROBE(1)
  118. #define DEC_EQUIV_77 PROBE(1)
  119. #define DEC_EQUIV_88 PROBE(1)
  120. #define DEC_EQUIV_99 PROBE(1)
  121. /* END OF DECIMAL OPERATIONS */
  122.  
  123. /* Basically, BOOL(x) := !!x */
  124. #define BOOL(x) COMP(NOT(x))
  125. #define IF(N, ...) IIF(BOOL(N))
  126. #define WHEN(N) IF(N)(EXPAND, EAT)
  127.  
  128. #define EXPAND_TEST_EXISTS(...) GOOD, EXISTS(__VA_ARGS__) ) EAT (
  129. #define DO_EXPAND_TEST_EXISTS(x) (CAT(EXPAND_TEST_, x), DOESNT_EXIST)
  130.  
  131. #define GET_TEST_EXISTS_VALUE_(_, value) value
  132. #define GET_TEST_EXISTS_VALUE(x) GET_TEST_EXISTS_VALUE_ x
  133.  
  134. #define TEST_EXISTS(x) GET_TEST_EXISTS_VALUE ( DO_EXPAND_TEST_EXISTS (x) )
  135.  
  136. TEST(EXISTS) (
  137. EXISTS(FOO) TEST_EXISTS(EXISTS(FOO))
  138. DOESNT_EXIST TEST_EXISTS(FOO)
  139. )
  140.  
  141. #define EXTRACT_VALUE(exist_value) CAT(EXTRACT_VALUE_, exist_value)
  142. #define EXTRACT_VALUE_EXISTS(...) __VA_ARGS__
  143.  
  144. #define CONVERT_EXISTS_TO_BOOL(value) CAT(CONVERT_EXISTS_TO_BOOL_, value)
  145. #define CONVERT_EXISTS_TO_BOOL_EXISTS(...) 1
  146. #define CONVERT_EXISTS_TO_BOOL_DOESNT_EXIST 0
  147.  
  148. #define TRY_EXTRACT_EXISTS(value, ...) \
  149.   IF(CONVERT_EXISTS_TO_BOOL(TEST_EXISTS(value))) \
  150.   (EXTRACT_VALUE(value), __VA_ARGS__)
  151.  
  152. TEST(TRY_EXTRACT_EXISTS) (
  153. FOO TRY_EXTRACT_EXISTS(EXISTS(FOO), DEFAULT)
  154. DEFUALT TRY_EXTRACT_EXISTS(FOO, DEFAULT)
  155. )
  156.  
  157. /*
  158.  * We are going to represent a number by list of digits, e.g.
  159.  *
  160.  * 1 => (1, )
  161.  * 13 => (3, 1)
  162.  *
  163.  * Let's define some list operations.
  164.  */
  165. #define HEAD(head, ...) head
  166. #define TAIL(head, ...) __VA_ARGS__
  167.  
  168. #define ENCLOSE(...) ( __VA_ARGS__ )
  169. #define EXPLODE_(...) __VA_ARGS__
  170. #define EXPLODE(...) EXPLODE_ __VA_ARGS__
  171.  
  172. #define EXPLODE_INDIRECT() EXPLODE_
  173. #define IS_LIST_EMPTY(...) \
  174.   TRY_EXTRACT_EXISTS( \
  175.   DEFER_0(HEAD) (__VA_ARGS__ EXISTS(1)), \
  176.   0)
  177. TEST(IS_LIST_EMPTY) (
  178. 1 IS_LIST_EMPTY()
  179. 0 IS_LIST_EMPTY(0)
  180. 0 IS_LIST_EMPTY(0, 0)
  181. )
  182.  
  183. #define EMPTY_LIST_TO_ZERO(...) \
  184.   IF (IS_LIST_EMPTY(__VA_ARGS__)) ( \
  185.   (0, ), \
  186.   (__VA_ARGS__))
  187.  
  188. /*
  189.  * Now, let's define INCrease function, where,
  190.  *
  191.  * INC LIST_REPR(N) = LIST_REPR(N + 1)
  192.  *
  193.  * E.g.
  194.  *
  195.  * INC(1, ) = (2, )
  196.  * INC(9, ) = (0, 1)
  197.  */
  198. #define INC_INDIRECT() INC_NO_EVAL
  199.  
  200. #define TRY_CARRY(x) CHECK(CAT(TRY_CARRY_, x), x)
  201. #define TRY_CARRY_DEC_INC_ PROBE(~)
  202.  
  203. #define INC_NO_EVAL(head, ...) \
  204.   DEFER_1(EXPLODE_INDIRECT) () \
  205.   IF (DEC_INC(head)) ( \
  206.   (TRY_CARRY(DEC_INC(head)), __VA_ARGS__), \
  207.   (0, DEFER_2(INC_INDIRECT) () (__VA_ARGS__)) \
  208.   )
  209.  
  210. #define INC(...) (INNER_EVAL(INC_NO_EVAL(__VA_ARGS__)))
  211. TEST(INC) (
  212. (1, ) INC(0)
  213. (2, ) INC(1)
  214. (0, 2) INC(9, 1)
  215. /*
  216.   * Oops, this is actually (0, 0, EXPLODE_INDIRECT () (1, ))
  217.   * Can't count to 100 Orz...
  218.   * possible fix is to make INNER_EVAL evaluates more times.
  219.   */
  220. (0, 0, 1) INC(9, 9)
  221. )
  222.  
  223. /*
  224.  * Apply @func_before and @func_after to each elements of a list.
  225.  */
  226. #define FOR_EACH_INDIRECT() FOR_EACH
  227. #define FOR_EACH(func_before, func_after, ...) \
  228.   WHEN (NOT(IS_LIST_EMPTY(__VA_ARGS__))) ( \
  229.   DEFER_1(func_before) (HEAD(__VA_ARGS__)) \
  230.   DEFER_1(FOR_EACH_INDIRECT) () ( \
  231.   func_before, func_after, TAIL(__VA_ARGS__) \
  232.   ) \
  233.   DEFER_1(func_after) (HEAD(__VA_ARGS__)) \
  234.   )
  235.  
  236. TEST(FOR_EACH) (
  237. /* PRINT(1) PRINT(2) PRINT(3) PRINT(4) */
  238. EVAL_7(FOR_EACH(PRINT, EAT, 1, 2, 3, 4))
  239. /* PRINT(4) PRINT(3) PRINT(2) PRINT(1) */
  240. EVAL_7(FOR_EACH(EAT, PRINT, 1, 2, 3, 4))
  241. )
  242.  
  243. #define BOTH_EMPTY(list_a, list_b) \
  244.   AND(IS_LIST_EMPTY list_a, IS_LIST_EMPTY list_b)
  245.  
  246. TEST(BOTH_EMPTY) (
  247. 1 BOTH_EMPTY( ( ), ( ) )
  248. 0 BOTH_EMPTY( (1), ( ) )
  249. 0 BOTH_EMPTY( ( ), (1) )
  250. 0 BOTH_EMPTY( (1), (1) )
  251. )
  252.  
  253. #define IS_HEAD_EQUAL(list_a, list_b) \
  254.   DEC_EQUIV ( HEAD list_a, HEAD list_b )
  255.  
  256. TEST(IS_HEAD_EQUAL) (
  257. 0 IS_HEAD_EQUAL( ( ), ( ) )
  258. 0 IS_HEAD_EQUAL( (1), ( ) )
  259. 0 IS_HEAD_EQUAL( ( ), (1, 1) )
  260. 1 IS_HEAD_EQUAL( (1), (1) )
  261. 0 IS_HEAD_EQUAL( (1), (0) )
  262. 1 IS_HEAD_EQUAL( (1), (1, 0) )
  263. )
  264.  
  265. #define IS_LIST_EQUAL_INDIRECT() IS_LIST_EQUAL_NO_EVAL
  266. #define IS_LIST_EQUAL_NO_EVAL(a, b) \
  267.   IF( BOTH_EMPTY( a, b ) ) ( \
  268.   1, \
  269.   /* else */ \
  270.   IF( IS_HEAD_EQUAL(a, b) ) ( \
  271.   DEFER_2(IS_LIST_EQUAL_INDIRECT) () ((TAIL a), (TAIL b)), \
  272.   0) \
  273.   )
  274. #define IS_LIST_EQUAL(a, b) INNER_EVAL(IS_LIST_EQUAL_NO_EVAL(a, b))
  275. #define IS_LIST_NOT_EQUAL(a, b) NOT(IS_LIST_EQUAL(a, b))
  276.  
  277. TEST(IS_LIST_EQUAL) (
  278. 1 NOT(IS_LIST_EQUAL((1, 2), (1, 3)))
  279. 1 IS_LIST_NOT_EQUAL((1, 2), (1, 3))
  280. 0 IS_LIST_NOT_EQUAL((0, 1), (0, 1))
  281. 1 IS_LIST_NOT_EQUAL((0, 1), (1))
  282. 1 IS_LIST_NOT_EQUAL((), (1))
  283. 1 IS_LIST_NOT_EQUAL((1, 0, 1), (1, 0, 0, 1))
  284. )
  285.  
  286. #define FOLD_INDIRECT() FOLD_NO_EVAL
  287. #define FOLD_NO_EVAL(func, list, init) \
  288.   IF ( IS_LIST_EMPTY list) ( \
  289.   init, \
  290.   DEFER_1(FOLD_INDIRECT) () (func, (TAIL list), func(init, HEAD list)) \
  291.   )
  292. #define FOLD(func, list, init) INNER_EVAL(FOLD_NO_EVAL(func, list, init))
  293.  
  294. #define TAC(x, y) CAT(y, x)
  295. #define TO_INT(list) CAT(, FOLD(TAC, list, ))
  296. TEST(TO_INT) (
  297. 102 TO_INT(INC(1, 0, 1))
  298. )
  299.  
  300. #define IS_LIST_NOT_EQUAL_() IS_LIST_NOT_EQUAL
  301.  
  302. #define FOR_LOOP_INDIRECT() FOR_LOOP_NO_EVAL
  303. #define FOR_LOOP_NO_EVAL(index, max, macro, ...) \
  304.   WHEN ( IS_LIST_NOT_EQUAL (index, max) ) ( \
  305.   DEFER_1(macro) (index, __VA_ARGS__) \
  306.   FOR_LOOP_INDIRECT EMPTY EMPTY () () () ( \
  307.   ENCLOSE( EXPLODE( DEFER_1(INC) index ) ), \
  308.   max, \
  309.   macro, \
  310.   __VA_ARGS__ \
  311.   ) \
  312.   )
  313.  
  314. #define FOR_LOOP(...) EVAL_2(EVAL_1(EVAL_1(FOR_LOOP_NO_EVAL(__VA_ARGS__))))
  315.  
  316. #define PRINT(list_b, list_a) \
  317.   printf(PRINT_FORMAT, \
  318.   TO_INT (list_a), \
  319.   TO_INT (list_b), \
  320.   (TO_INT (list_a)) * (TO_INT (list_b)));
  321.  
  322. #define INNER_LOOP(x, ...) \
  323.   FOR_LOOP_NO_EVAL(START, END, PRINT, x) \
  324.   printf("\n");
  325.  
  326. #ifndef DEBUG
  327. #include <stdio.h>
  328. int main() {
  329. EVAL_7(FOR_LOOP(START, END, INNER_LOOP))
  330. }
  331. #endif
  332.  
Success #stdin #stdout 0s 4400KB
stdin
Standard input is empty
stdout
 1 x  1 =   1
 1 x  2 =   2
 1 x  3 =   3
 1 x  4 =   4
 1 x  5 =   5
 1 x  6 =   6
 1 x  7 =   7
 1 x  8 =   8
 1 x  9 =   9
 1 x 10 =  10
 1 x 11 =  11
 1 x 12 =  12
 1 x 13 =  13
 1 x 14 =  14
 1 x 15 =  15
 1 x 16 =  16
 1 x 17 =  17
 1 x 18 =  18
 1 x 19 =  19

 2 x  1 =   2
 2 x  2 =   4
 2 x  3 =   6
 2 x  4 =   8
 2 x  5 =  10
 2 x  6 =  12
 2 x  7 =  14
 2 x  8 =  16
 2 x  9 =  18
 2 x 10 =  20
 2 x 11 =  22
 2 x 12 =  24
 2 x 13 =  26
 2 x 14 =  28
 2 x 15 =  30
 2 x 16 =  32
 2 x 17 =  34
 2 x 18 =  36
 2 x 19 =  38

 3 x  1 =   3
 3 x  2 =   6
 3 x  3 =   9
 3 x  4 =  12
 3 x  5 =  15
 3 x  6 =  18
 3 x  7 =  21
 3 x  8 =  24
 3 x  9 =  27
 3 x 10 =  30
 3 x 11 =  33
 3 x 12 =  36
 3 x 13 =  39
 3 x 14 =  42
 3 x 15 =  45
 3 x 16 =  48
 3 x 17 =  51
 3 x 18 =  54
 3 x 19 =  57

 4 x  1 =   4
 4 x  2 =   8
 4 x  3 =  12
 4 x  4 =  16
 4 x  5 =  20
 4 x  6 =  24
 4 x  7 =  28
 4 x  8 =  32
 4 x  9 =  36
 4 x 10 =  40
 4 x 11 =  44
 4 x 12 =  48
 4 x 13 =  52
 4 x 14 =  56
 4 x 15 =  60
 4 x 16 =  64
 4 x 17 =  68
 4 x 18 =  72
 4 x 19 =  76

 5 x  1 =   5
 5 x  2 =  10
 5 x  3 =  15
 5 x  4 =  20
 5 x  5 =  25
 5 x  6 =  30
 5 x  7 =  35
 5 x  8 =  40
 5 x  9 =  45
 5 x 10 =  50
 5 x 11 =  55
 5 x 12 =  60
 5 x 13 =  65
 5 x 14 =  70
 5 x 15 =  75
 5 x 16 =  80
 5 x 17 =  85
 5 x 18 =  90
 5 x 19 =  95

 6 x  1 =   6
 6 x  2 =  12
 6 x  3 =  18
 6 x  4 =  24
 6 x  5 =  30
 6 x  6 =  36
 6 x  7 =  42
 6 x  8 =  48
 6 x  9 =  54
 6 x 10 =  60
 6 x 11 =  66
 6 x 12 =  72
 6 x 13 =  78
 6 x 14 =  84
 6 x 15 =  90
 6 x 16 =  96
 6 x 17 = 102
 6 x 18 = 108
 6 x 19 = 114

 7 x  1 =   7
 7 x  2 =  14
 7 x  3 =  21
 7 x  4 =  28
 7 x  5 =  35
 7 x  6 =  42
 7 x  7 =  49
 7 x  8 =  56
 7 x  9 =  63
 7 x 10 =  70
 7 x 11 =  77
 7 x 12 =  84
 7 x 13 =  91
 7 x 14 =  98
 7 x 15 = 105
 7 x 16 = 112
 7 x 17 = 119
 7 x 18 = 126
 7 x 19 = 133

 8 x  1 =   8
 8 x  2 =  16
 8 x  3 =  24
 8 x  4 =  32
 8 x  5 =  40
 8 x  6 =  48
 8 x  7 =  56
 8 x  8 =  64
 8 x  9 =  72
 8 x 10 =  80
 8 x 11 =  88
 8 x 12 =  96
 8 x 13 = 104
 8 x 14 = 112
 8 x 15 = 120
 8 x 16 = 128
 8 x 17 = 136
 8 x 18 = 144
 8 x 19 = 152

 9 x  1 =   9
 9 x  2 =  18
 9 x  3 =  27
 9 x  4 =  36
 9 x  5 =  45
 9 x  6 =  54
 9 x  7 =  63
 9 x  8 =  72
 9 x  9 =  81
 9 x 10 =  90
 9 x 11 =  99
 9 x 12 = 108
 9 x 13 = 117
 9 x 14 = 126
 9 x 15 = 135
 9 x 16 = 144
 9 x 17 = 153
 9 x 18 = 162
 9 x 19 = 171

10 x  1 =  10
10 x  2 =  20
10 x  3 =  30
10 x  4 =  40
10 x  5 =  50
10 x  6 =  60
10 x  7 =  70
10 x  8 =  80
10 x  9 =  90
10 x 10 = 100
10 x 11 = 110
10 x 12 = 120
10 x 13 = 130
10 x 14 = 140
10 x 15 = 150
10 x 16 = 160
10 x 17 = 170
10 x 18 = 180
10 x 19 = 190

11 x  1 =  11
11 x  2 =  22
11 x  3 =  33
11 x  4 =  44
11 x  5 =  55
11 x  6 =  66
11 x  7 =  77
11 x  8 =  88
11 x  9 =  99
11 x 10 = 110
11 x 11 = 121
11 x 12 = 132
11 x 13 = 143
11 x 14 = 154
11 x 15 = 165
11 x 16 = 176
11 x 17 = 187
11 x 18 = 198
11 x 19 = 209

12 x  1 =  12
12 x  2 =  24
12 x  3 =  36
12 x  4 =  48
12 x  5 =  60
12 x  6 =  72
12 x  7 =  84
12 x  8 =  96
12 x  9 = 108
12 x 10 = 120
12 x 11 = 132
12 x 12 = 144
12 x 13 = 156
12 x 14 = 168
12 x 15 = 180
12 x 16 = 192
12 x 17 = 204
12 x 18 = 216
12 x 19 = 228

13 x  1 =  13
13 x  2 =  26
13 x  3 =  39
13 x  4 =  52
13 x  5 =  65
13 x  6 =  78
13 x  7 =  91
13 x  8 = 104
13 x  9 = 117
13 x 10 = 130
13 x 11 = 143
13 x 12 = 156
13 x 13 = 169
13 x 14 = 182
13 x 15 = 195
13 x 16 = 208
13 x 17 = 221
13 x 18 = 234
13 x 19 = 247

14 x  1 =  14
14 x  2 =  28
14 x  3 =  42
14 x  4 =  56
14 x  5 =  70
14 x  6 =  84
14 x  7 =  98
14 x  8 = 112
14 x  9 = 126
14 x 10 = 140
14 x 11 = 154
14 x 12 = 168
14 x 13 = 182
14 x 14 = 196
14 x 15 = 210
14 x 16 = 224
14 x 17 = 238
14 x 18 = 252
14 x 19 = 266

15 x  1 =  15
15 x  2 =  30
15 x  3 =  45
15 x  4 =  60
15 x  5 =  75
15 x  6 =  90
15 x  7 = 105
15 x  8 = 120
15 x  9 = 135
15 x 10 = 150
15 x 11 = 165
15 x 12 = 180
15 x 13 = 195
15 x 14 = 210
15 x 15 = 225
15 x 16 = 240
15 x 17 = 255
15 x 18 = 270
15 x 19 = 285

16 x  1 =  16
16 x  2 =  32
16 x  3 =  48
16 x  4 =  64
16 x  5 =  80
16 x  6 =  96
16 x  7 = 112
16 x  8 = 128
16 x  9 = 144
16 x 10 = 160
16 x 11 = 176
16 x 12 = 192
16 x 13 = 208
16 x 14 = 224
16 x 15 = 240
16 x 16 = 256
16 x 17 = 272
16 x 18 = 288
16 x 19 = 304

17 x  1 =  17
17 x  2 =  34
17 x  3 =  51
17 x  4 =  68
17 x  5 =  85
17 x  6 = 102
17 x  7 = 119
17 x  8 = 136
17 x  9 = 153
17 x 10 = 170
17 x 11 = 187
17 x 12 = 204
17 x 13 = 221
17 x 14 = 238
17 x 15 = 255
17 x 16 = 272
17 x 17 = 289
17 x 18 = 306
17 x 19 = 323

18 x  1 =  18
18 x  2 =  36
18 x  3 =  54
18 x  4 =  72
18 x  5 =  90
18 x  6 = 108
18 x  7 = 126
18 x  8 = 144
18 x  9 = 162
18 x 10 = 180
18 x 11 = 198
18 x 12 = 216
18 x 13 = 234
18 x 14 = 252
18 x 15 = 270
18 x 16 = 288
18 x 17 = 306
18 x 18 = 324
18 x 19 = 342

19 x  1 =  19
19 x  2 =  38
19 x  3 =  57
19 x  4 =  76
19 x  5 =  95
19 x  6 = 114
19 x  7 = 133
19 x  8 = 152
19 x  9 = 171
19 x 10 = 190
19 x 11 = 209
19 x 12 = 228
19 x 13 = 247
19 x 14 = 266
19 x 15 = 285
19 x 16 = 304
19 x 17 = 323
19 x 18 = 342
19 x 19 = 361