Advertisement
Guest User

Untitled

a guest
Jan 20th, 2017
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 32.91 KB | None | 0 0
  1. /*
  2. Name: quine.cpp
  3. Description: A vastly overcomplicated "quine" program, which is
  4. a program which outputs its own source code
  5. Written by: Sam Coppini
  6. Last Modified: January 20th, 2017
  7. */
  8.  
  9. #include <cstdlib>
  10. #include <cstring>
  11. #include <iostream>
  12. #include <sstream>
  13. #include <string>
  14.  
  15. /*
  16. Takes a character as a parameter, and returns a string with the
  17. representation of that character as a char literal
  18. */
  19. std::string char_literal(char c)
  20. {
  21. switch (c)
  22. {
  23. case '\n':
  24. return "'\\n'";
  25.  
  26. case '\'':
  27. return "'\\''";
  28.  
  29. case '\\':
  30. return "'\\\\'";
  31.  
  32. default:
  33. std::string char_lit(&c, 1);
  34. return "'" + char_lit + "'";
  35. }
  36. }
  37.  
  38. /*
  39. Takes a string, and returns its ROT13 equivalent. If you are unfamilar
  40. with ROT13, it's basically a simple code which replaces each letter with
  41. the letter 13 places after it in the alphabet (e.g. 'A' becomes 'N',
  42. 'B' becomes 'O', and so on)
  43. */
  44. std::string rot13(std::string str)
  45. {
  46. for (int i = 0; i < str.length(); i++)
  47. {
  48. if (str[i] >= 'A' && str[i] <= 'Z')
  49. {
  50. str[i] = ((str[i] - 'A' + 13) % 26) + 'A';
  51. }
  52. else if (str[i] >= 'a' && str[i] <= 'z')
  53. {
  54. str[i] = ((str[i] - 'a' + 13) % 26) + 'a';
  55. }
  56. }
  57.  
  58. return str;
  59. }
  60.  
  61. /*
  62. Inserts the source code of this program to the given string stream
  63. */
  64. void get_source(std::ostringstream& output)
  65. {
  66. char code_string[] = {
  67. '/', '*', '\n', ' ', ' ', ' ', ' ', 'N', 'a', 'm',
  68. 'e', ':', ' ', 'q', 'u', 'i', 'n', 'e', '.', 'c',
  69. 'p', 'p', '\n', ' ', ' ', ' ', ' ', 'D', 'e', 's',
  70. 'c', 'r', 'i', 'p', 't', 'i', 'o', 'n', ':', ' ',
  71. 'A', ' ', 'v', 'a', 's', 't', 'l', 'y', ' ', 'o',
  72. 'v', 'e', 'r', 'c', 'o', 'm', 'p', 'l', 'i', 'c',
  73. 'a', 't', 'e', 'd', ' ', '"', 'q', 'u', 'i', 'n',
  74. 'e', '"', ' ', 'p', 'r', 'o', 'g', 'r', 'a', 'm',
  75. ',', ' ', 'w', 'h', 'i', 'c', 'h', ' ', 'i', 's',
  76. '\n', ' ', ' ', ' ', ' ', 'a', ' ', 'p', 'r', 'o',
  77. 'g', 'r', 'a', 'm', ' ', 'w', 'h', 'i', 'c', 'h',
  78. ' ', 'o', 'u', 't', 'p', 'u', 't', 's', ' ', 'i',
  79. 't', 's', ' ', 'o', 'w', 'n', ' ', 's', 'o', 'u',
  80. 'r', 'c', 'e', ' ', 'c', 'o', 'd', 'e', '\n', ' ',
  81. ' ', ' ', ' ', 'W', 'r', 'i', 't', 't', 'e', 'n',
  82. ' ', 'b', 'y', ':', ' ', 'S', 'a', 'm', ' ', 'C',
  83. 'o', 'p', 'p', 'i', 'n', 'i', '\n', ' ', ' ', ' ',
  84. ' ', 'L', 'a', 's', 't', ' ', 'M', 'o', 'd', 'i',
  85. 'f', 'i', 'e', 'd', ':', ' ', 'J', 'a', 'n', 'u',
  86. 'a', 'r', 'y', ' ', '2', '0', 't', 'h', ',', ' ',
  87. '2', '0', '1', '7', '\n', '*', '/', '\n', '\n', '#',
  88. 'i', 'n', 'c', 'l', 'u', 'd', 'e', ' ', '<', 'c',
  89. 's', 't', 'd', 'l', 'i', 'b', '>', '\n', '#', 'i',
  90. 'n', 'c', 'l', 'u', 'd', 'e', ' ', '<', 'c', 's',
  91. 't', 'r', 'i', 'n', 'g', '>', '\n', '#', 'i', 'n',
  92. 'c', 'l', 'u', 'd', 'e', ' ', '<', 'i', 'o', 's',
  93. 't', 'r', 'e', 'a', 'm', '>', '\n', '#', 'i', 'n',
  94. 'c', 'l', 'u', 'd', 'e', ' ', '<', 's', 's', 't',
  95. 'r', 'e', 'a', 'm', '>', '\n', '#', 'i', 'n', 'c',
  96. 'l', 'u', 'd', 'e', ' ', '<', 's', 't', 'r', 'i',
  97. 'n', 'g', '>', '\n', '\n', '/', '*', '\n', ' ', ' ',
  98. ' ', ' ', 'T', 'a', 'k', 'e', 's', ' ', 'a', ' ',
  99. 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r', ' ',
  100. 'a', 's', ' ', 'a', ' ', 'p', 'a', 'r', 'a', 'm',
  101. 'e', 't', 'e', 'r', ',', ' ', 'a', 'n', 'd', ' ',
  102. 'r', 'e', 't', 'u', 'r', 'n', 's', ' ', 'a', ' ',
  103. 's', 't', 'r', 'i', 'n', 'g', ' ', 'w', 'i', 't',
  104. 'h', ' ', 't', 'h', 'e', '\n', ' ', ' ', ' ', ' ',
  105. 'r', 'e', 'p', 'r', 'e', 's', 'e', 'n', 't', 'a',
  106. 't', 'i', 'o', 'n', ' ', 'o', 'f', ' ', 't', 'h',
  107. 'a', 't', ' ', 'c', 'h', 'a', 'r', 'a', 'c', 't',
  108. 'e', 'r', ' ', 'a', 's', ' ', 'a', ' ', 'c', 'h',
  109. 'a', 'r', ' ', 'l', 'i', 't', 'e', 'r', 'a', 'l',
  110. '\n', '*', '/', '\n', 's', 't', 'd', ':', ':', 's',
  111. 't', 'r', 'i', 'n', 'g', ' ', 'c', 'h', 'a', 'r',
  112. '_', 'l', 'i', 't', 'e', 'r', 'a', 'l', '(', 'c',
  113. 'h', 'a', 'r', ' ', 'c', ')', '\n', '{', '\n', ' ',
  114. ' ', ' ', ' ', 's', 'w', 'i', 't', 'c', 'h', ' ',
  115. '(', 'c', ')', '\n', ' ', ' ', ' ', ' ', '{', '\n',
  116. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'c', 'a',
  117. 's', 'e', ' ', '\'', '\\', 'n', '\'', ':', '\n', ' ',
  118. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  119. ' ', 'r', 'e', 't', 'u', 'r', 'n', ' ', '"', '\'',
  120. '\\', '\\', 'n', '\'', '"', ';', '\n', '\n', ' ', ' ',
  121. ' ', ' ', ' ', ' ', ' ', ' ', 'c', 'a', 's', 'e',
  122. ' ', '\'', '\\', '\'', '\'', ':', '\n', ' ', ' ', ' ',
  123. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'r',
  124. 'e', 't', 'u', 'r', 'n', ' ', '"', '\'', '\\', '\\',
  125. '\'', '\'', '"', ';', '\n', '\n', ' ', ' ', ' ', ' ',
  126. ' ', ' ', ' ', ' ', 'c', 'a', 's', 'e', ' ', '\'',
  127. '\\', '\\', '\'', ':', '\n', ' ', ' ', ' ', ' ', ' ',
  128. ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'r', 'e', 't',
  129. 'u', 'r', 'n', ' ', '"', '\'', '\\', '\\', '\\', '\\',
  130. '\'', '"', ';', '\n', '\n', ' ', ' ', ' ', ' ', ' ',
  131. ' ', ' ', ' ', 'd', 'e', 'f', 'a', 'u', 'l', 't',
  132. ':', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  133. ' ', ' ', ' ', ' ', 's', 't', 'd', ':', ':', 's',
  134. 't', 'r', 'i', 'n', 'g', ' ', 'c', 'h', 'a', 'r',
  135. '_', 'l', 'i', 't', '(', '&', 'c', ',', ' ', '1',
  136. ')', ';', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  137. ' ', ' ', ' ', ' ', ' ', 'r', 'e', 't', 'u', 'r',
  138. 'n', ' ', '"', '\'', '"', ' ', '+', ' ', 'c', 'h',
  139. 'a', 'r', '_', 'l', 'i', 't', ' ', '+', ' ', '"',
  140. '\'', '"', ';', '\n', ' ', ' ', ' ', ' ', '}', '\n',
  141. '}', '\n', '\n', '/', '*', '\n', ' ', ' ', ' ', ' ',
  142. 'T', 'a', 'k', 'e', 's', ' ', 'a', ' ', 's', 't',
  143. 'r', 'i', 'n', 'g', ',', ' ', 'a', 'n', 'd', ' ',
  144. 'r', 'e', 't', 'u', 'r', 'n', 's', ' ', 'i', 't',
  145. 's', ' ', 'R', 'O', 'T', '1', '3', ' ', 'e', 'q',
  146. 'u', 'i', 'v', 'a', 'l', 'e', 'n', 't', '.', ' ',
  147. 'I', 'f', ' ', 'y', 'o', 'u', ' ', 'a', 'r', 'e',
  148. ' ', 'u', 'n', 'f', 'a', 'm', 'i', 'l', 'a', 'r',
  149. '\n', ' ', ' ', ' ', ' ', 'w', 'i', 't', 'h', ' ',
  150. 'R', 'O', 'T', '1', '3', ',', ' ', 'i', 't', '\'',
  151. 's', ' ', 'b', 'a', 's', 'i', 'c', 'a', 'l', 'l',
  152. 'y', ' ', 'a', ' ', 's', 'i', 'm', 'p', 'l', 'e',
  153. ' ', 'c', 'o', 'd', 'e', ' ', 'w', 'h', 'i', 'c',
  154. 'h', ' ', 'r', 'e', 'p', 'l', 'a', 'c', 'e', 's',
  155. ' ', 'e', 'a', 'c', 'h', ' ', 'l', 'e', 't', 't',
  156. 'e', 'r', ' ', 'w', 'i', 't', 'h', '\n', ' ', ' ',
  157. ' ', ' ', 't', 'h', 'e', ' ', 'l', 'e', 't', 't',
  158. 'e', 'r', ' ', '1', '3', ' ', 'p', 'l', 'a', 'c',
  159. 'e', 's', ' ', 'a', 'f', 't', 'e', 'r', ' ', 'i',
  160. 't', ' ', 'i', 'n', ' ', 't', 'h', 'e', ' ', 'a',
  161. 'l', 'p', 'h', 'a', 'b', 'e', 't', ' ', '(', 'e',
  162. '.', 'g', '.', ' ', '\'', 'A', '\'', ' ', 'b', 'e',
  163. 'c', 'o', 'm', 'e', 's', ' ', '\'', 'N', '\'', ',',
  164. '\n', ' ', ' ', ' ', ' ', '\'', 'B', '\'', ' ', 'b',
  165. 'e', 'c', 'o', 'm', 'e', 's', ' ', '\'', 'O', '\'',
  166. ',', ' ', 'a', 'n', 'd', ' ', 's', 'o', ' ', 'o',
  167. 'n', ')', '\n', '*', '/', '\n', 's', 't', 'd', ':',
  168. ':', 's', 't', 'r', 'i', 'n', 'g', ' ', 'r', 'o',
  169. 't', '1', '3', '(', 's', 't', 'd', ':', ':', 's',
  170. 't', 'r', 'i', 'n', 'g', ' ', 's', 't', 'r', ')',
  171. '\n', '{', '\n', ' ', ' ', ' ', ' ', 'f', 'o', 'r',
  172. ' ', '(', 'i', 'n', 't', ' ', 'i', ' ', '=', ' ',
  173. '0', ';', ' ', 'i', ' ', '<', ' ', 's', 't', 'r',
  174. '.', 'l', 'e', 'n', 'g', 't', 'h', '(', ')', ';',
  175. ' ', 'i', '+', '+', ')', '\n', ' ', ' ', ' ', ' ',
  176. '{', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  177. 'i', 'f', ' ', '(', 's', 't', 'r', '[', 'i', ']',
  178. ' ', '>', '=', ' ', '\'', 'A', '\'', ' ', '&', '&',
  179. ' ', 's', 't', 'r', '[', 'i', ']', ' ', '<', '=',
  180. ' ', '\'', 'Z', '\'', ')', '\n', ' ', ' ', ' ', ' ',
  181. ' ', ' ', ' ', ' ', '{', '\n', ' ', ' ', ' ', ' ',
  182. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 's', 't',
  183. 'r', '[', 'i', ']', ' ', '=', ' ', '(', '(', 's',
  184. 't', 'r', '[', 'i', ']', ' ', '-', ' ', '\'', 'A',
  185. '\'', ' ', '+', ' ', '1', '3', ')', ' ', '%', ' ',
  186. '2', '6', ')', ' ', '+', ' ', '\'', 'A', '\'', ';',
  187. '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '}',
  188. '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'e',
  189. 'l', 's', 'e', ' ', 'i', 'f', ' ', '(', 's', 't',
  190. 'r', '[', 'i', ']', ' ', '>', '=', ' ', '\'', 'a',
  191. '\'', ' ', '&', '&', ' ', 's', 't', 'r', '[', 'i',
  192. ']', ' ', '<', '=', ' ', '\'', 'z', '\'', ')', '\n',
  193. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '{', '\n',
  194. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  195. ' ', ' ', 's', 't', 'r', '[', 'i', ']', ' ', '=',
  196. ' ', '(', '(', 's', 't', 'r', '[', 'i', ']', ' ',
  197. '-', ' ', '\'', 'a', '\'', ' ', '+', ' ', '1', '3',
  198. ')', ' ', '%', ' ', '2', '6', ')', ' ', '+', ' ',
  199. '\'', 'a', '\'', ';', '\n', ' ', ' ', ' ', ' ', ' ',
  200. ' ', ' ', ' ', '}', '\n', ' ', ' ', ' ', ' ', '}',
  201. '\n', '\n', ' ', ' ', ' ', ' ', 'r', 'e', 't', 'u',
  202. 'r', 'n', ' ', 's', 't', 'r', ';', '\n', '}', '\n',
  203. '\n', '/', '*', '\n', ' ', ' ', ' ', ' ', 'I', 'n',
  204. 's', 'e', 'r', 't', 's', ' ', 't', 'h', 'e', ' ',
  205. 's', 'o', 'u', 'r', 'c', 'e', ' ', 'c', 'o', 'd',
  206. 'e', ' ', 'o', 'f', ' ', 't', 'h', 'i', 's', ' ',
  207. 'p', 'r', 'o', 'g', 'r', 'a', 'm', ' ', 't', 'o',
  208. ' ', 't', 'h', 'e', ' ', 'g', 'i', 'v', 'e', 'n',
  209. ' ', 's', 't', 'r', 'i', 'n', 'g', ' ', 's', 't',
  210. 'r', 'e', 'a', 'm', '\n', '*', '/', '\n', 'v', 'o',
  211. 'i', 'd', ' ', 'g', 'e', 't', '_', 's', 'o', 'u',
  212. 'r', 'c', 'e', '(', 's', 't', 'd', ':', ':', 'o',
  213. 's', 't', 'r', 'i', 'n', 'g', 's', 't', 'r', 'e',
  214. 'a', 'm', '&', ' ', 'o', 'u', 't', 'p', 'u', 't',
  215. ')', '\n', '{', '\n', ' ', ' ', ' ', ' ', 'c', 'h',
  216. 'a', 'r', ' ', 'c', 'o', 'd', 'e', '_', 's', 't',
  217. 'r', 'i', 'n', 'g', '[', ']', ' ', '=', ' ', '{',
  218. '\n', ' ', ' ', ' ', ' ', '}', ';', '\n', '\n', ' ',
  219. ' ', ' ', ' ', 'f', 'o', 'r', ' ', '(', 'i', 'n',
  220. 't', ' ', 'i', ' ', '=', ' ', '0', ';', ' ', 'i',
  221. ' ', '<', ' ', '1', '5', '1', '0', ';', ' ', 'i',
  222. '+', '+', ')', '\n', ' ', ' ', ' ', ' ', '{', '\n',
  223. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'o', 'u',
  224. 't', 'p', 'u', 't', ' ', '<', '<', ' ', 'c', 'o',
  225. 'd', 'e', '_', 's', 't', 'r', 'i', 'n', 'g', '[',
  226. 'i', ']', ';', '\n', ' ', ' ', ' ', ' ', '}', '\n',
  227. '\n', ' ', ' ', ' ', ' ', 'f', 'o', 'r', ' ', '(',
  228. 'i', 'n', 't', ' ', 'i', ' ', '=', ' ', '0', ';',
  229. ' ', 'i', ' ', '<', ' ', 's', 'i', 'z', 'e', 'o',
  230. 'f', '(', 'c', 'o', 'd', 'e', '_', 's', 't', 'r',
  231. 'i', 'n', 'g', ')', ';', ' ', 'i', '+', '+', ')',
  232. '\n', ' ', ' ', ' ', ' ', '{', '\n', ' ', ' ', ' ',
  233. ' ', ' ', ' ', ' ', ' ', 'i', 'f', ' ', '(', 'i',
  234. ' ', '%', ' ', '1', '0', ' ', '=', '=', ' ', '0',
  235. ')', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  236. '{', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  237. ' ', ' ', ' ', ' ', 'o', 'u', 't', 'p', 'u', 't',
  238. ' ', '<', '<', ' ', '"', '\\', 'n', ' ', ' ', ' ',
  239. ' ', ' ', ' ', ' ', ' ', '"', ';', '\n', ' ', ' ',
  240. ' ', ' ', ' ', ' ', ' ', ' ', '}', '\n', '\n', ' ',
  241. ' ', ' ', ' ', ' ', ' ', ' ', ' ', 's', 't', 'd',
  242. ':', ':', 's', 't', 'r', 'i', 'n', 'g', ' ', 'l',
  243. 'i', 't', '_', 's', 't', 'r', 'i', 'n', 'g', ' ',
  244. '=', ' ', 'c', 'h', 'a', 'r', '_', 'l', 'i', 't',
  245. 'e', 'r', 'a', 'l', '(', 'c', 'o', 'd', 'e', '_',
  246. 's', 't', 'r', 'i', 'n', 'g', '[', 'i', ']', ')',
  247. ';', '\n', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  248. ' ', 'i', 'f', ' ', '(', 'l', 'i', 't', '_', 's',
  249. 't', 'r', 'i', 'n', 'g', '.', 'l', 'e', 'n', 'g',
  250. 't', 'h', '(', ')', ' ', '=', '=', ' ', '3', ')',
  251. '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '{',
  252. '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  253. ' ', ' ', ' ', 'o', 'u', 't', 'p', 'u', 't', ' ',
  254. '<', '<', ' ', '"', ' ', '"', ';', '\n', ' ', ' ',
  255. ' ', ' ', ' ', ' ', ' ', ' ', '}', '\n', ' ', ' ',
  256. ' ', ' ', ' ', ' ', ' ', ' ', 'o', 'u', 't', 'p',
  257. 'u', 't', ' ', '<', '<', ' ', '"', ' ', '"', ' ',
  258. '<', '<', ' ', 'l', 'i', 't', '_', 's', 't', 'r',
  259. 'i', 'n', 'g', ' ', '<', '<', ' ', '"', ',', '"',
  260. ';', '\n', ' ', ' ', ' ', ' ', '}', '\n', '\n', ' ',
  261. ' ', ' ', ' ', 'f', 'o', 'r', ' ', '(', 'i', 'n',
  262. 't', ' ', 'i', ' ', '=', ' ', '1', '5', '1', '0',
  263. ';', ' ', 'i', ' ', '<', ' ', 's', 'i', 'z', 'e',
  264. 'o', 'f', '(', 'c', 'o', 'd', 'e', '_', 's', 't',
  265. 'r', 'i', 'n', 'g', ')', ';', ' ', 'i', '+', '+',
  266. ')', '\n', ' ', ' ', ' ', ' ', '{', '\n', ' ', ' ',
  267. ' ', ' ', ' ', ' ', ' ', ' ', 'o', 'u', 't', 'p',
  268. 'u', 't', ' ', '<', '<', ' ', 'c', 'o', 'd', 'e',
  269. '_', 's', 't', 'r', 'i', 'n', 'g', '[', 'i', ']',
  270. ';', '\n', ' ', ' ', ' ', ' ', '}', '\n', '}', '\n',
  271. '\n', 'i', 'n', 't', ' ', 'm', 'a', 'i', 'n', '(',
  272. 'i', 'n', 't', ' ', 'a', 'r', 'g', 'c', ',', ' ',
  273. 'c', 'h', 'a', 'r', '*', ' ', 'a', 'r', 'g', 'v',
  274. '[', ']', ')', '\n', '{', '\n', ' ', ' ', ' ', ' ',
  275. 's', 't', 'd', ':', ':', 'o', 's', 't', 'r', 'i',
  276. 'n', 'g', 's', 't', 'r', 'e', 'a', 'm', ' ', 'o',
  277. 'u', 't', 'p', 'u', 't', ';', '\n', ' ', ' ', ' ',
  278. ' ', 'b', 'o', 'o', 'l', ' ', 'p', 'r', 'i', 'n',
  279. 't', '_', 's', 'o', 'u', 'r', 'c', 'e', ' ', '=',
  280. ' ', 't', 'r', 'u', 'e', ',', ' ', 'r', 'o', 't',
  281. '1', '3', '_', 'o', 'n', ' ', '=', ' ', 'f', 'a',
  282. 'l', 's', 'e', ';', '\n', '\n', ' ', ' ', ' ', ' ',
  283. '/', '*', ' ', 'C', 'h', 'e', 'c', 'k', ' ', 'f',
  284. 'o', 'r', ' ', 'c', 'o', 'm', 'm', 'a', 'n', 'd',
  285. '-', 'l', 'i', 'n', 'e', ' ', 'a', 'r', 'g', 'u',
  286. 'm', 'e', 'n', 't', 's', ' ', '*', '/', '\n', ' ',
  287. ' ', ' ', ' ', 'f', 'o', 'r', ' ', '(', 'i', 'n',
  288. 't', ' ', 'i', ' ', '=', ' ', '1', ';', ' ', 'i',
  289. ' ', '<', ' ', 'a', 'r', 'g', 'c', ';', ' ', 'i',
  290. '+', '+', ')', '\n', ' ', ' ', ' ', ' ', '{', '\n',
  291. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'i', 'f',
  292. ' ', '(', '!', 's', 't', 'r', 'c', 'm', 'p', '(',
  293. 'a', 'r', 'g', 'v', '[', 'i', ']', ',', ' ', '"',
  294. '-', '-', 'h', 'e', 'l', 'p', '"', ')', ' ', '|',
  295. '|', ' ', '!', 's', 't', 'r', 'c', 'm', 'p', '(',
  296. 'a', 'r', 'g', 'v', '[', 'i', ']', ',', ' ', '"',
  297. '-', 'h', '"', ')', ')', '\n', ' ', ' ', ' ', ' ',
  298. ' ', ' ', ' ', ' ', '{', '\n', ' ', ' ', ' ', ' ',
  299. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'i', 'f',
  300. ' ', '(', 'p', 'r', 'i', 'n', 't', '_', 's', 'o',
  301. 'u', 'r', 'c', 'e', ')', '\n', ' ', ' ', ' ', ' ',
  302. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '{', '\n',
  303. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  304. ' ', ' ', ' ', ' ', ' ', ' ', 'o', 'u', 't', 'p',
  305. 'u', 't', ' ', '<', '<', ' ', '"', 'U', 's', 'a',
  306. 'g', 'e', ':', ' ', '"', ' ', '<', '<', ' ', 'a',
  307. 'r', 'g', 'v', '[', '0', ']', ' ', '<', '<', ' ',
  308. '"', ' ', '[', 'o', 'p', 't', 'i', 'o', 'n', ']',
  309. ' ', '.', '.', '.', '"', ' ', '<', '<', ' ', 's',
  310. 't', 'd', ':', ':', 'e', 'n', 'd', 'l', ';', '\n',
  311. '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  312. ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'o', 'u', 't',
  313. 'p', 'u', 't', ' ', '<', '<', ' ', 's', 't', 'd',
  314. ':', ':', 'e', 'n', 'd', 'l', '\n', ' ', ' ', ' ',
  315. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  316. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  317. '<', '<', ' ', '"', 'D', 'e', 's', 'c', 'r', 'i',
  318. 'p', 't', 'i', 'o', 'n', ':', ' ', '"', ' ', '<',
  319. '<', ' ', 's', 't', 'd', ':', ':', 'e', 'n', 'd',
  320. 'l', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  321. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  322. ' ', ' ', ' ', ' ', ' ', '<', '<', ' ', '"', 'O',
  323. 'u', 't', 'p', 'u', 't', 's', ' ', 'i', 't', 's',
  324. ' ', 'o', 'w', 'n', ' ', 's', 'o', 'u', 'r', 'c',
  325. 'e', ' ', 'c', 'o', 'd', 'e', '.', '"', ' ', '<',
  326. '<', ' ', 's', 't', 'd', ':', ':', 'e', 'n', 'd',
  327. 'l', ';', '\n', '\n', ' ', ' ', ' ', ' ', ' ', ' ',
  328. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  329. 'o', 'u', 't', 'p', 'u', 't', ' ', '<', '<', ' ',
  330. 's', 't', 'd', ':', ':', 'e', 'n', 'd', 'l', '\n',
  331. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  332. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  333. ' ', ' ', ' ', '<', '<', ' ', '"', 'C', 'o', 'm',
  334. 'm', 'a', 'n', 'd', '-', 'l', 'i', 'n', 'e', ' ',
  335. 'o', 'p', 't', 'i', 'o', 'n', 's', ':', '"', ' ',
  336. '<', '<', ' ', 's', 't', 'd', ':', ':', 'e', 'n',
  337. 'd', 'l', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  338. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  339. ' ', ' ', ' ', ' ', ' ', ' ', '<', '<', ' ', '"',
  340. '-', 'h', ',', ' ', '-', '-', 'h', 'e', 'l', 'p',
  341. ' ', ' ', ' ', ' ', ':', ' ', '"', '\n', ' ', ' ',
  342. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  343. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  344. ' ', '<', '<', ' ', '"', 'p', 'r', 'i', 'n', 't',
  345. ' ', 't', 'h', 'i', 's', ' ', 'h', 'e', 'l', 'p',
  346. ' ', 'm', 'e', 's', 's', 'a', 'g', 'e', ' ', 't',
  347. 'h', 'e', 'n', ' ', 'e', 'x', 'i', 't', '.', '"',
  348. ' ', '<', '<', ' ', 's', 't', 'd', ':', ':', 'e',
  349. 'n', 'd', 'l', '\n', '\n', ' ', ' ', ' ', ' ', ' ',
  350. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  351. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '<', '<',
  352. ' ', '"', '-', 'q', ',', ' ', '-', '-', 'q', 'u',
  353. 'i', 'e', 't', ' ', ' ', ' ', ':', ' ', '"', '\n',
  354. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  355. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  356. ' ', ' ', ' ', '<', '<', ' ', '"', 's', 'u', 'p',
  357. 'p', 'r', 'e', 's', 's', 'e', 's', ' ', 'a', 'l',
  358. 'l', ' ', 'o', 'u', 't', 'p', 'u', 't', ' ', 'f',
  359. 'r', 'o', 'm', ' ', 't', 'h', 'e', ' ', 'p', 'r',
  360. 'o', 'g', 'r', 'a', 'm', '.', '"', '\n', ' ', ' ',
  361. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  362. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  363. ' ', '<', '<', ' ', 's', 't', 'd', ':', ':', 'e',
  364. 'n', 'd', 'l', '\n', '\n', ' ', ' ', ' ', ' ', ' ',
  365. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  366. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '<', '<',
  367. ' ', '"', '-', 'r', ',', ' ', '-', '-', 'r', 'o',
  368. 't', '1', '3', ' ', ' ', ' ', ':', ' ', '"', '\n',
  369. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  370. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  371. ' ', ' ', ' ', '<', '<', ' ', '"', 'p', 'r', 'i',
  372. 'n', 't', 's', ' ', 'a', 'l', 'l', ' ', 'o', 'u',
  373. 't', 'p', 'u', 't', ' ', 'a', 's', ' ', 'i', 't',
  374. 's', ' ', 'R', 'O', 'T', '1', '3', 'e', 'd', ' ',
  375. 'e', 'q', 'u', 'i', 'v', 'a', 'l', 'e', 'n', 't',
  376. '"', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  377. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  378. ' ', ' ', ' ', ' ', ' ', '<', '<', ' ', 's', 't',
  379. 'd', ':', ':', 'e', 'n', 'd', 'l', '\n', '\n', ' ',
  380. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  381. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  382. ' ', ' ', '<', '<', ' ', '"', '-', 'v', ',', ' ',
  383. '-', '-', 'v', 'e', 'r', 's', 'i', 'o', 'n', ' ',
  384. ':', ' ', '"', '\n', ' ', ' ', ' ', ' ', ' ', ' ',
  385. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  386. ' ', ' ', ' ', ' ', ' ', ' ', ' ', '<', '<', ' ',
  387. '"', 'p', 'r', 'i', 'n', 't', 's', ' ', 't', 'h',
  388. 'e', ' ', 'v', 'e', 'r', 's', 'i', 'o', 'n', ' ',
  389. 's', 't', 'r', 'i', 'n', 'g', ' ', 't', 'h', 'e',
  390. 'n', ' ', 'e', 'x', 'i', 't', '"', ' ', '<', '<',
  391. ' ', 's', 't', 'd', ':', ':', 'e', 'n', 'd', 'l',
  392. ';', '\n', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  393. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'p',
  394. 'r', 'i', 'n', 't', '_', 's', 'o', 'u', 'r', 'c',
  395. 'e', ' ', '=', ' ', 'f', 'a', 'l', 's', 'e', ';',
  396. '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  397. ' ', ' ', ' ', '}', '\n', ' ', ' ', ' ', ' ', ' ',
  398. ' ', ' ', ' ', '}', '\n', ' ', ' ', ' ', ' ', ' ',
  399. ' ', ' ', ' ', 'e', 'l', 's', 'e', ' ', 'i', 'f',
  400. ' ', '(', '!', 's', 't', 'r', 'c', 'm', 'p', '(',
  401. 'a', 'r', 'g', 'v', '[', 'i', ']', ',', ' ', '"',
  402. '-', '-', 'q', 'u', 'i', 'e', 't', '"', ')', ' ',
  403. '|', '|', ' ', '!', 's', 't', 'r', 'c', 'm', 'p',
  404. '(', 'a', 'r', 'g', 'v', '[', 'i', ']', ',', ' ',
  405. '"', '-', 'q', '"', ')', ')', '\n', ' ', ' ', ' ',
  406. ' ', ' ', ' ', ' ', ' ', '{', '\n', ' ', ' ', ' ',
  407. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'p',
  408. 'r', 'i', 'n', 't', '_', 's', 'o', 'u', 'r', 'c',
  409. 'e', ' ', '=', ' ', 'f', 'a', 'l', 's', 'e', ';',
  410. '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  411. ' ', ' ', ' ', 'o', 'u', 't', 'p', 'u', 't', '.',
  412. 's', 't', 'r', '(', '"', '"', ')', ';', '\n', ' ',
  413. ' ', ' ', ' ', ' ', ' ', ' ', ' ', '}', '\n', ' ',
  414. ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'e', 'l', 's',
  415. 'e', ' ', 'i', 'f', ' ', '(', '!', 's', 't', 'r',
  416. 'c', 'm', 'p', '(', 'a', 'r', 'g', 'v', '[', 'i',
  417. ']', ',', ' ', '"', '-', '-', 'r', 'o', 't', '1',
  418. '3', '"', ')', ' ', '|', '|', ' ', '!', 's', 't',
  419. 'r', 'c', 'm', 'p', '(', 'a', 'r', 'g', 'v', '[',
  420. 'i', ']', ',', ' ', '"', '-', 'r', '"', ')', ')',
  421. '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '{',
  422. '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  423. ' ', ' ', ' ', 'r', 'o', 't', '1', '3', '_', 'o',
  424. 'n', ' ', '=', ' ', 't', 'r', 'u', 'e', ';', '\n',
  425. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '}', '\n',
  426. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'e', 'l',
  427. 's', 'e', ' ', 'i', 'f', ' ', '(', '!', 's', 't',
  428. 'r', 'c', 'm', 'p', '(', 'a', 'r', 'g', 'v', '[',
  429. 'i', ']', ',', ' ', '"', '-', '-', 'v', 'e', 'r',
  430. 's', 'i', 'o', 'n', '"', ')', ' ', '|', '|', ' ',
  431. '!', 's', 't', 'r', 'c', 'm', 'p', '(', 'a', 'r',
  432. 'g', 'v', '[', 'i', ']', ',', ' ', '"', '-', 'v',
  433. '"', ')', ')', '\n', ' ', ' ', ' ', ' ', ' ', ' ',
  434. ' ', ' ', '{', '\n', ' ', ' ', ' ', ' ', ' ', ' ',
  435. ' ', ' ', ' ', ' ', ' ', ' ', 'i', 'f', ' ', '(',
  436. 'p', 'r', 'i', 'n', 't', '_', 's', 'o', 'u', 'r',
  437. 'c', 'e', ')', '\n', ' ', ' ', ' ', ' ', ' ', ' ',
  438. ' ', ' ', ' ', ' ', ' ', ' ', '{', '\n', ' ', ' ',
  439. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  440. ' ', ' ', ' ', ' ', 'o', 'u', 't', 'p', 'u', 't',
  441. ' ', '<', '<', ' ', '"', 'A', 'b', 's', 'u', 'r',
  442. 'd', 'l', 'y', ' ', 'C', 'o', 'm', 'p', 'l', 'i',
  443. 'c', 'a', 't', 'e', 'd', ' ', 'C', '+', '+', ' ',
  444. 'Q', 'u', 'i', 'n', 'e', ' ', 'V', 'e', 'r', 's',
  445. 'i', 'o', 'n', ' ', '1', '.', '0', '"', ';', '\n',
  446. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  447. ' ', ' ', ' ', ' ', ' ', ' ', 'p', 'r', 'i', 'n',
  448. 't', '_', 's', 'o', 'u', 'r', 'c', 'e', ' ', '=',
  449. ' ', 'f', 'a', 'l', 's', 'e', ';', '\n', ' ', ' ',
  450. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  451. '}', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  452. '}', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  453. 'e', 'l', 's', 'e', '\n', ' ', ' ', ' ', ' ', ' ',
  454. ' ', ' ', ' ', '{', '\n', ' ', ' ', ' ', ' ', ' ',
  455. ' ', ' ', ' ', ' ', ' ', ' ', ' ', 's', 't', 'd',
  456. ':', ':', 'c', 'e', 'r', 'r', ' ', '<', '<', ' ',
  457. '"', 'U', 'n', 'r', 'e', 'c', 'o', 'g', 'n', 'i',
  458. 'z', 'e', 'd', ' ', 'c', 'o', 'm', 'm', 'a', 'n',
  459. 'd', ' ', 'l', 'i', 'n', 'e', ' ', 'a', 'r', 'g',
  460. 'u', 'm', 'e', 'n', 't', ' ', '\'', '"', ' ', '<',
  461. '<', ' ', 'a', 'r', 'g', 'v', '[', 'i', ']', '\n',
  462. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  463. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  464. ' ', ' ', '<', '<', ' ', '"', '\'', '"', ' ', '<',
  465. '<', ' ', 's', 't', 'd', ':', ':', 'e', 'n', 'd',
  466. 'l', ';', '\n', '\n', ' ', ' ', ' ', ' ', ' ', ' ',
  467. ' ', ' ', ' ', ' ', ' ', ' ', 'r', 'e', 't', 'u',
  468. 'r', 'n', ' ', 'E', 'X', 'I', 'T', '_', 'F', 'A',
  469. 'I', 'L', 'U', 'R', 'E', ';', '\n', ' ', ' ', ' ',
  470. ' ', ' ', ' ', ' ', ' ', '}', '\n', ' ', ' ', ' ',
  471. ' ', '}', '\n', '\n', ' ', ' ', ' ', ' ', 'i', 'f',
  472. ' ', '(', 'p', 'r', 'i', 'n', 't', '_', 's', 'o',
  473. 'u', 'r', 'c', 'e', ')', '\n', ' ', ' ', ' ', ' ',
  474. '{', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  475. 'g', 'e', 't', '_', 's', 'o', 'u', 'r', 'c', 'e',
  476. '(', 'o', 'u', 't', 'p', 'u', 't', ')', ';', '\n',
  477. ' ', ' ', ' ', ' ', '}', '\n', '\n', ' ', ' ', ' ',
  478. ' ', 's', 't', 'd', ':', ':', 's', 't', 'r', 'i',
  479. 'n', 'g', ' ', 'o', 'u', 't', '_', 's', 't', 'r',
  480. ' ', '=', ' ', 'o', 'u', 't', 'p', 'u', 't', '.',
  481. 's', 't', 'r', '(', ')', ';', '\n', ' ', ' ', ' ',
  482. ' ', 'i', 'f', ' ', '(', 'r', 'o', 't', '1', '3',
  483. '_', 'o', 'n', ')', '\n', ' ', ' ', ' ', ' ', '{',
  484. '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'o',
  485. 'u', 't', '_', 's', 't', 'r', ' ', '=', ' ', 'r',
  486. 'o', 't', '1', '3', '(', 'o', 'u', 't', '_', 's',
  487. 't', 'r', ')', ';', '\n', ' ', ' ', ' ', ' ', '}',
  488. '\n', '\n', ' ', ' ', ' ', ' ', 's', 't', 'd', ':',
  489. ':', 'c', 'o', 'u', 't', ' ', '<', '<', ' ', 'o',
  490. 'u', 't', '_', 's', 't', 'r', ';', '\n', '\n', ' ',
  491. ' ', ' ', ' ', 'r', 'e', 't', 'u', 'r', 'n', ' ',
  492. 'E', 'X', 'I', 'T', '_', 'S', 'U', 'C', 'C', 'E',
  493. 'S', 'S', ';', '\n', '}', '\n',
  494. };
  495.  
  496. for (int i = 0; i < 1510; i++)
  497. {
  498. output << code_string[i];
  499. }
  500.  
  501. for (int i = 0; i < sizeof(code_string); i++)
  502. {
  503. if (i % 10 == 0)
  504. {
  505. output << "\n ";
  506. }
  507.  
  508. std::string lit_string = char_literal(code_string[i]);
  509.  
  510. if (lit_string.length() == 3)
  511. {
  512. output << " ";
  513. }
  514. output << " " << lit_string << ",";
  515. }
  516.  
  517. for (int i = 1510; i < sizeof(code_string); i++)
  518. {
  519. output << code_string[i];
  520. }
  521. }
  522.  
  523. int main(int argc, char* argv[])
  524. {
  525. std::ostringstream output;
  526. bool print_source = true, rot13_on = false;
  527.  
  528. /* Check for command-line arguments */
  529. for (int i = 1; i < argc; i++)
  530. {
  531. if (!strcmp(argv[i], "--help") || !strcmp(argv[i], "-h"))
  532. {
  533. if (print_source)
  534. {
  535. output << "Usage: " << argv[0] << " [option] ..." << std::endl;
  536.  
  537. output << std::endl
  538. << "Description: " << std::endl
  539. << "Outputs its own source code." << std::endl;
  540.  
  541. output << std::endl
  542. << "Command-line options:" << std::endl
  543. << "-h, --help : "
  544. << "print this help message then exit." << std::endl
  545.  
  546. << "-q, --quiet : "
  547. << "suppresses all output from the program."
  548. << std::endl
  549.  
  550. << "-r, --rot13 : "
  551. << "prints all output as its ROT13ed equivalent"
  552. << std::endl
  553.  
  554. << "-v, --version : "
  555. << "prints the version string then exit" << std::endl;
  556.  
  557. print_source = false;
  558. }
  559. }
  560. else if (!strcmp(argv[i], "--quiet") || !strcmp(argv[i], "-q"))
  561. {
  562. print_source = false;
  563. output.str("");
  564. }
  565. else if (!strcmp(argv[i], "--rot13") || !strcmp(argv[i], "-r"))
  566. {
  567. rot13_on = true;
  568. }
  569. else if (!strcmp(argv[i], "--version") || !strcmp(argv[i], "-v"))
  570. {
  571. if (print_source)
  572. {
  573. output << "Absurdly Complicated C++ Quine Version 1.0";
  574. print_source = false;
  575. }
  576. }
  577. else
  578. {
  579. std::cerr << "Unrecognized command line argument '" << argv[i]
  580. << "'" << std::endl;
  581.  
  582. return EXIT_FAILURE;
  583. }
  584. }
  585.  
  586. if (print_source)
  587. {
  588. get_source(output);
  589. }
  590.  
  591. std::string out_str = output.str();
  592. if (rot13_on)
  593. {
  594. out_str = rot13(out_str);
  595. }
  596.  
  597. std::cout << out_str;
  598.  
  599. return EXIT_SUCCESS;
  600. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement