Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Name: quine.cpp
- Description: A vastly overcomplicated "quine" program, which is
- a program which outputs its own source code
- Written by: Sam Coppini
- Last Modified: January 20th, 2017
- */
- #include <cstdlib>
- #include <cstring>
- #include <iostream>
- #include <sstream>
- #include <string>
- /*
- Takes a character as a parameter, and returns a string with the
- representation of that character as a char literal
- */
- std::string char_literal(char c)
- {
- switch (c)
- {
- case '\n':
- return "'\\n'";
- case '\'':
- return "'\\''";
- case '\\':
- return "'\\\\'";
- default:
- std::string char_lit(&c, 1);
- return "'" + char_lit + "'";
- }
- }
- /*
- Takes a string, and returns its ROT13 equivalent. If you are unfamilar
- with ROT13, it's basically a simple code which replaces each letter with
- the letter 13 places after it in the alphabet (e.g. 'A' becomes 'N',
- 'B' becomes 'O', and so on)
- */
- std::string rot13(std::string str)
- {
- for (int i = 0; i < str.length(); i++)
- {
- if (str[i] >= 'A' && str[i] <= 'Z')
- {
- str[i] = ((str[i] - 'A' + 13) % 26) + 'A';
- }
- else if (str[i] >= 'a' && str[i] <= 'z')
- {
- str[i] = ((str[i] - 'a' + 13) % 26) + 'a';
- }
- }
- return str;
- }
- /*
- Inserts the source code of this program to the given string stream
- */
- void get_source(std::ostringstream& output)
- {
- char code_string[] = {
- '/', '*', '\n', ' ', ' ', ' ', ' ', 'N', 'a', 'm',
- 'e', ':', ' ', 'q', 'u', 'i', 'n', 'e', '.', 'c',
- 'p', 'p', '\n', ' ', ' ', ' ', ' ', 'D', 'e', 's',
- 'c', 'r', 'i', 'p', 't', 'i', 'o', 'n', ':', ' ',
- 'A', ' ', 'v', 'a', 's', 't', 'l', 'y', ' ', 'o',
- 'v', 'e', 'r', 'c', 'o', 'm', 'p', 'l', 'i', 'c',
- 'a', 't', 'e', 'd', ' ', '"', 'q', 'u', 'i', 'n',
- 'e', '"', ' ', 'p', 'r', 'o', 'g', 'r', 'a', 'm',
- ',', ' ', 'w', 'h', 'i', 'c', 'h', ' ', 'i', 's',
- '\n', ' ', ' ', ' ', ' ', 'a', ' ', 'p', 'r', 'o',
- 'g', 'r', 'a', 'm', ' ', 'w', 'h', 'i', 'c', 'h',
- ' ', 'o', 'u', 't', 'p', 'u', 't', 's', ' ', 'i',
- 't', 's', ' ', 'o', 'w', 'n', ' ', 's', 'o', 'u',
- 'r', 'c', 'e', ' ', 'c', 'o', 'd', 'e', '\n', ' ',
- ' ', ' ', ' ', 'W', 'r', 'i', 't', 't', 'e', 'n',
- ' ', 'b', 'y', ':', ' ', 'S', 'a', 'm', ' ', 'C',
- 'o', 'p', 'p', 'i', 'n', 'i', '\n', ' ', ' ', ' ',
- ' ', 'L', 'a', 's', 't', ' ', 'M', 'o', 'd', 'i',
- 'f', 'i', 'e', 'd', ':', ' ', 'J', 'a', 'n', 'u',
- 'a', 'r', 'y', ' ', '2', '0', 't', 'h', ',', ' ',
- '2', '0', '1', '7', '\n', '*', '/', '\n', '\n', '#',
- 'i', 'n', 'c', 'l', 'u', 'd', 'e', ' ', '<', 'c',
- 's', 't', 'd', 'l', 'i', 'b', '>', '\n', '#', 'i',
- 'n', 'c', 'l', 'u', 'd', 'e', ' ', '<', 'c', 's',
- 't', 'r', 'i', 'n', 'g', '>', '\n', '#', 'i', 'n',
- 'c', 'l', 'u', 'd', 'e', ' ', '<', 'i', 'o', 's',
- 't', 'r', 'e', 'a', 'm', '>', '\n', '#', 'i', 'n',
- 'c', 'l', 'u', 'd', 'e', ' ', '<', 's', 's', 't',
- 'r', 'e', 'a', 'm', '>', '\n', '#', 'i', 'n', 'c',
- 'l', 'u', 'd', 'e', ' ', '<', 's', 't', 'r', 'i',
- 'n', 'g', '>', '\n', '\n', '/', '*', '\n', ' ', ' ',
- ' ', ' ', 'T', 'a', 'k', 'e', 's', ' ', 'a', ' ',
- 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r', ' ',
- 'a', 's', ' ', 'a', ' ', 'p', 'a', 'r', 'a', 'm',
- 'e', 't', 'e', 'r', ',', ' ', 'a', 'n', 'd', ' ',
- 'r', 'e', 't', 'u', 'r', 'n', 's', ' ', 'a', ' ',
- 's', 't', 'r', 'i', 'n', 'g', ' ', 'w', 'i', 't',
- 'h', ' ', 't', 'h', 'e', '\n', ' ', ' ', ' ', ' ',
- 'r', 'e', 'p', 'r', 'e', 's', 'e', 'n', 't', 'a',
- 't', 'i', 'o', 'n', ' ', 'o', 'f', ' ', 't', 'h',
- 'a', 't', ' ', 'c', 'h', 'a', 'r', 'a', 'c', 't',
- 'e', 'r', ' ', 'a', 's', ' ', 'a', ' ', 'c', 'h',
- 'a', 'r', ' ', 'l', 'i', 't', 'e', 'r', 'a', 'l',
- '\n', '*', '/', '\n', 's', 't', 'd', ':', ':', 's',
- 't', 'r', 'i', 'n', 'g', ' ', 'c', 'h', 'a', 'r',
- '_', 'l', 'i', 't', 'e', 'r', 'a', 'l', '(', 'c',
- 'h', 'a', 'r', ' ', 'c', ')', '\n', '{', '\n', ' ',
- ' ', ' ', ' ', 's', 'w', 'i', 't', 'c', 'h', ' ',
- '(', 'c', ')', '\n', ' ', ' ', ' ', ' ', '{', '\n',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'c', 'a',
- 's', 'e', ' ', '\'', '\\', 'n', '\'', ':', '\n', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', 'r', 'e', 't', 'u', 'r', 'n', ' ', '"', '\'',
- '\\', '\\', 'n', '\'', '"', ';', '\n', '\n', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', 'c', 'a', 's', 'e',
- ' ', '\'', '\\', '\'', '\'', ':', '\n', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'r',
- 'e', 't', 'u', 'r', 'n', ' ', '"', '\'', '\\', '\\',
- '\'', '\'', '"', ';', '\n', '\n', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', 'c', 'a', 's', 'e', ' ', '\'',
- '\\', '\\', '\'', ':', '\n', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'r', 'e', 't',
- 'u', 'r', 'n', ' ', '"', '\'', '\\', '\\', '\\', '\\',
- '\'', '"', ';', '\n', '\n', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', 'd', 'e', 'f', 'a', 'u', 'l', 't',
- ':', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', 's', 't', 'd', ':', ':', 's',
- 't', 'r', 'i', 'n', 'g', ' ', 'c', 'h', 'a', 'r',
- '_', 'l', 'i', 't', '(', '&', 'c', ',', ' ', '1',
- ')', ';', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', 'r', 'e', 't', 'u', 'r',
- 'n', ' ', '"', '\'', '"', ' ', '+', ' ', 'c', 'h',
- 'a', 'r', '_', 'l', 'i', 't', ' ', '+', ' ', '"',
- '\'', '"', ';', '\n', ' ', ' ', ' ', ' ', '}', '\n',
- '}', '\n', '\n', '/', '*', '\n', ' ', ' ', ' ', ' ',
- 'T', 'a', 'k', 'e', 's', ' ', 'a', ' ', 's', 't',
- 'r', 'i', 'n', 'g', ',', ' ', 'a', 'n', 'd', ' ',
- 'r', 'e', 't', 'u', 'r', 'n', 's', ' ', 'i', 't',
- 's', ' ', 'R', 'O', 'T', '1', '3', ' ', 'e', 'q',
- 'u', 'i', 'v', 'a', 'l', 'e', 'n', 't', '.', ' ',
- 'I', 'f', ' ', 'y', 'o', 'u', ' ', 'a', 'r', 'e',
- ' ', 'u', 'n', 'f', 'a', 'm', 'i', 'l', 'a', 'r',
- '\n', ' ', ' ', ' ', ' ', 'w', 'i', 't', 'h', ' ',
- 'R', 'O', 'T', '1', '3', ',', ' ', 'i', 't', '\'',
- 's', ' ', 'b', 'a', 's', 'i', 'c', 'a', 'l', 'l',
- 'y', ' ', 'a', ' ', 's', 'i', 'm', 'p', 'l', 'e',
- ' ', 'c', 'o', 'd', 'e', ' ', 'w', 'h', 'i', 'c',
- 'h', ' ', 'r', 'e', 'p', 'l', 'a', 'c', 'e', 's',
- ' ', 'e', 'a', 'c', 'h', ' ', 'l', 'e', 't', 't',
- 'e', 'r', ' ', 'w', 'i', 't', 'h', '\n', ' ', ' ',
- ' ', ' ', 't', 'h', 'e', ' ', 'l', 'e', 't', 't',
- 'e', 'r', ' ', '1', '3', ' ', 'p', 'l', 'a', 'c',
- 'e', 's', ' ', 'a', 'f', 't', 'e', 'r', ' ', 'i',
- 't', ' ', 'i', 'n', ' ', 't', 'h', 'e', ' ', 'a',
- 'l', 'p', 'h', 'a', 'b', 'e', 't', ' ', '(', 'e',
- '.', 'g', '.', ' ', '\'', 'A', '\'', ' ', 'b', 'e',
- 'c', 'o', 'm', 'e', 's', ' ', '\'', 'N', '\'', ',',
- '\n', ' ', ' ', ' ', ' ', '\'', 'B', '\'', ' ', 'b',
- 'e', 'c', 'o', 'm', 'e', 's', ' ', '\'', 'O', '\'',
- ',', ' ', 'a', 'n', 'd', ' ', 's', 'o', ' ', 'o',
- 'n', ')', '\n', '*', '/', '\n', 's', 't', 'd', ':',
- ':', 's', 't', 'r', 'i', 'n', 'g', ' ', 'r', 'o',
- 't', '1', '3', '(', 's', 't', 'd', ':', ':', 's',
- 't', 'r', 'i', 'n', 'g', ' ', 's', 't', 'r', ')',
- '\n', '{', '\n', ' ', ' ', ' ', ' ', 'f', 'o', 'r',
- ' ', '(', 'i', 'n', 't', ' ', 'i', ' ', '=', ' ',
- '0', ';', ' ', 'i', ' ', '<', ' ', 's', 't', 'r',
- '.', 'l', 'e', 'n', 'g', 't', 'h', '(', ')', ';',
- ' ', 'i', '+', '+', ')', '\n', ' ', ' ', ' ', ' ',
- '{', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- 'i', 'f', ' ', '(', 's', 't', 'r', '[', 'i', ']',
- ' ', '>', '=', ' ', '\'', 'A', '\'', ' ', '&', '&',
- ' ', 's', 't', 'r', '[', 'i', ']', ' ', '<', '=',
- ' ', '\'', 'Z', '\'', ')', '\n', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', '{', '\n', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 's', 't',
- 'r', '[', 'i', ']', ' ', '=', ' ', '(', '(', 's',
- 't', 'r', '[', 'i', ']', ' ', '-', ' ', '\'', 'A',
- '\'', ' ', '+', ' ', '1', '3', ')', ' ', '%', ' ',
- '2', '6', ')', ' ', '+', ' ', '\'', 'A', '\'', ';',
- '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '}',
- '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'e',
- 'l', 's', 'e', ' ', 'i', 'f', ' ', '(', 's', 't',
- 'r', '[', 'i', ']', ' ', '>', '=', ' ', '\'', 'a',
- '\'', ' ', '&', '&', ' ', 's', 't', 'r', '[', 'i',
- ']', ' ', '<', '=', ' ', '\'', 'z', '\'', ')', '\n',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '{', '\n',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', 's', 't', 'r', '[', 'i', ']', ' ', '=',
- ' ', '(', '(', 's', 't', 'r', '[', 'i', ']', ' ',
- '-', ' ', '\'', 'a', '\'', ' ', '+', ' ', '1', '3',
- ')', ' ', '%', ' ', '2', '6', ')', ' ', '+', ' ',
- '\'', 'a', '\'', ';', '\n', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', '}', '\n', ' ', ' ', ' ', ' ', '}',
- '\n', '\n', ' ', ' ', ' ', ' ', 'r', 'e', 't', 'u',
- 'r', 'n', ' ', 's', 't', 'r', ';', '\n', '}', '\n',
- '\n', '/', '*', '\n', ' ', ' ', ' ', ' ', 'I', 'n',
- 's', 'e', 'r', 't', 's', ' ', 't', 'h', 'e', ' ',
- 's', 'o', 'u', 'r', 'c', 'e', ' ', 'c', 'o', 'd',
- 'e', ' ', 'o', 'f', ' ', 't', 'h', 'i', 's', ' ',
- 'p', 'r', 'o', 'g', 'r', 'a', 'm', ' ', 't', 'o',
- ' ', 't', 'h', 'e', ' ', 'g', 'i', 'v', 'e', 'n',
- ' ', 's', 't', 'r', 'i', 'n', 'g', ' ', 's', 't',
- 'r', 'e', 'a', 'm', '\n', '*', '/', '\n', 'v', 'o',
- 'i', 'd', ' ', 'g', 'e', 't', '_', 's', 'o', 'u',
- 'r', 'c', 'e', '(', 's', 't', 'd', ':', ':', 'o',
- 's', 't', 'r', 'i', 'n', 'g', 's', 't', 'r', 'e',
- 'a', 'm', '&', ' ', 'o', 'u', 't', 'p', 'u', 't',
- ')', '\n', '{', '\n', ' ', ' ', ' ', ' ', 'c', 'h',
- 'a', 'r', ' ', 'c', 'o', 'd', 'e', '_', 's', 't',
- 'r', 'i', 'n', 'g', '[', ']', ' ', '=', ' ', '{',
- '\n', ' ', ' ', ' ', ' ', '}', ';', '\n', '\n', ' ',
- ' ', ' ', ' ', 'f', 'o', 'r', ' ', '(', 'i', 'n',
- 't', ' ', 'i', ' ', '=', ' ', '0', ';', ' ', 'i',
- ' ', '<', ' ', '1', '5', '1', '0', ';', ' ', 'i',
- '+', '+', ')', '\n', ' ', ' ', ' ', ' ', '{', '\n',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'o', 'u',
- 't', 'p', 'u', 't', ' ', '<', '<', ' ', 'c', 'o',
- 'd', 'e', '_', 's', 't', 'r', 'i', 'n', 'g', '[',
- 'i', ']', ';', '\n', ' ', ' ', ' ', ' ', '}', '\n',
- '\n', ' ', ' ', ' ', ' ', 'f', 'o', 'r', ' ', '(',
- 'i', 'n', 't', ' ', 'i', ' ', '=', ' ', '0', ';',
- ' ', 'i', ' ', '<', ' ', 's', 'i', 'z', 'e', 'o',
- 'f', '(', 'c', 'o', 'd', 'e', '_', 's', 't', 'r',
- 'i', 'n', 'g', ')', ';', ' ', 'i', '+', '+', ')',
- '\n', ' ', ' ', ' ', ' ', '{', '\n', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', 'i', 'f', ' ', '(', 'i',
- ' ', '%', ' ', '1', '0', ' ', '=', '=', ' ', '0',
- ')', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- '{', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', 'o', 'u', 't', 'p', 'u', 't',
- ' ', '<', '<', ' ', '"', '\\', 'n', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', '"', ';', '\n', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', '}', '\n', '\n', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', 's', 't', 'd',
- ':', ':', 's', 't', 'r', 'i', 'n', 'g', ' ', 'l',
- 'i', 't', '_', 's', 't', 'r', 'i', 'n', 'g', ' ',
- '=', ' ', 'c', 'h', 'a', 'r', '_', 'l', 'i', 't',
- 'e', 'r', 'a', 'l', '(', 'c', 'o', 'd', 'e', '_',
- 's', 't', 'r', 'i', 'n', 'g', '[', 'i', ']', ')',
- ';', '\n', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', 'i', 'f', ' ', '(', 'l', 'i', 't', '_', 's',
- 't', 'r', 'i', 'n', 'g', '.', 'l', 'e', 'n', 'g',
- 't', 'h', '(', ')', ' ', '=', '=', ' ', '3', ')',
- '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '{',
- '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', 'o', 'u', 't', 'p', 'u', 't', ' ',
- '<', '<', ' ', '"', ' ', '"', ';', '\n', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', '}', '\n', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', 'o', 'u', 't', 'p',
- 'u', 't', ' ', '<', '<', ' ', '"', ' ', '"', ' ',
- '<', '<', ' ', 'l', 'i', 't', '_', 's', 't', 'r',
- 'i', 'n', 'g', ' ', '<', '<', ' ', '"', ',', '"',
- ';', '\n', ' ', ' ', ' ', ' ', '}', '\n', '\n', ' ',
- ' ', ' ', ' ', 'f', 'o', 'r', ' ', '(', 'i', 'n',
- 't', ' ', 'i', ' ', '=', ' ', '1', '5', '1', '0',
- ';', ' ', 'i', ' ', '<', ' ', 's', 'i', 'z', 'e',
- 'o', 'f', '(', 'c', 'o', 'd', 'e', '_', 's', 't',
- 'r', 'i', 'n', 'g', ')', ';', ' ', 'i', '+', '+',
- ')', '\n', ' ', ' ', ' ', ' ', '{', '\n', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', 'o', 'u', 't', 'p',
- 'u', 't', ' ', '<', '<', ' ', 'c', 'o', 'd', 'e',
- '_', 's', 't', 'r', 'i', 'n', 'g', '[', 'i', ']',
- ';', '\n', ' ', ' ', ' ', ' ', '}', '\n', '}', '\n',
- '\n', 'i', 'n', 't', ' ', 'm', 'a', 'i', 'n', '(',
- 'i', 'n', 't', ' ', 'a', 'r', 'g', 'c', ',', ' ',
- 'c', 'h', 'a', 'r', '*', ' ', 'a', 'r', 'g', 'v',
- '[', ']', ')', '\n', '{', '\n', ' ', ' ', ' ', ' ',
- 's', 't', 'd', ':', ':', 'o', 's', 't', 'r', 'i',
- 'n', 'g', 's', 't', 'r', 'e', 'a', 'm', ' ', 'o',
- 'u', 't', 'p', 'u', 't', ';', '\n', ' ', ' ', ' ',
- ' ', 'b', 'o', 'o', 'l', ' ', 'p', 'r', 'i', 'n',
- 't', '_', 's', 'o', 'u', 'r', 'c', 'e', ' ', '=',
- ' ', 't', 'r', 'u', 'e', ',', ' ', 'r', 'o', 't',
- '1', '3', '_', 'o', 'n', ' ', '=', ' ', 'f', 'a',
- 'l', 's', 'e', ';', '\n', '\n', ' ', ' ', ' ', ' ',
- '/', '*', ' ', 'C', 'h', 'e', 'c', 'k', ' ', 'f',
- 'o', 'r', ' ', 'c', 'o', 'm', 'm', 'a', 'n', 'd',
- '-', 'l', 'i', 'n', 'e', ' ', 'a', 'r', 'g', 'u',
- 'm', 'e', 'n', 't', 's', ' ', '*', '/', '\n', ' ',
- ' ', ' ', ' ', 'f', 'o', 'r', ' ', '(', 'i', 'n',
- 't', ' ', 'i', ' ', '=', ' ', '1', ';', ' ', 'i',
- ' ', '<', ' ', 'a', 'r', 'g', 'c', ';', ' ', 'i',
- '+', '+', ')', '\n', ' ', ' ', ' ', ' ', '{', '\n',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'i', 'f',
- ' ', '(', '!', 's', 't', 'r', 'c', 'm', 'p', '(',
- 'a', 'r', 'g', 'v', '[', 'i', ']', ',', ' ', '"',
- '-', '-', 'h', 'e', 'l', 'p', '"', ')', ' ', '|',
- '|', ' ', '!', 's', 't', 'r', 'c', 'm', 'p', '(',
- 'a', 'r', 'g', 'v', '[', 'i', ']', ',', ' ', '"',
- '-', 'h', '"', ')', ')', '\n', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', '{', '\n', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'i', 'f',
- ' ', '(', 'p', 'r', 'i', 'n', 't', '_', 's', 'o',
- 'u', 'r', 'c', 'e', ')', '\n', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '{', '\n',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', 'o', 'u', 't', 'p',
- 'u', 't', ' ', '<', '<', ' ', '"', 'U', 's', 'a',
- 'g', 'e', ':', ' ', '"', ' ', '<', '<', ' ', 'a',
- 'r', 'g', 'v', '[', '0', ']', ' ', '<', '<', ' ',
- '"', ' ', '[', 'o', 'p', 't', 'i', 'o', 'n', ']',
- ' ', '.', '.', '.', '"', ' ', '<', '<', ' ', 's',
- 't', 'd', ':', ':', 'e', 'n', 'd', 'l', ';', '\n',
- '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'o', 'u', 't',
- 'p', 'u', 't', ' ', '<', '<', ' ', 's', 't', 'd',
- ':', ':', 'e', 'n', 'd', 'l', '\n', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- '<', '<', ' ', '"', 'D', 'e', 's', 'c', 'r', 'i',
- 'p', 't', 'i', 'o', 'n', ':', ' ', '"', ' ', '<',
- '<', ' ', 's', 't', 'd', ':', ':', 'e', 'n', 'd',
- 'l', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', '<', '<', ' ', '"', 'O',
- 'u', 't', 'p', 'u', 't', 's', ' ', 'i', 't', 's',
- ' ', 'o', 'w', 'n', ' ', 's', 'o', 'u', 'r', 'c',
- 'e', ' ', 'c', 'o', 'd', 'e', '.', '"', ' ', '<',
- '<', ' ', 's', 't', 'd', ':', ':', 'e', 'n', 'd',
- 'l', ';', '\n', '\n', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- 'o', 'u', 't', 'p', 'u', 't', ' ', '<', '<', ' ',
- 's', 't', 'd', ':', ':', 'e', 'n', 'd', 'l', '\n',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', '<', '<', ' ', '"', 'C', 'o', 'm',
- 'm', 'a', 'n', 'd', '-', 'l', 'i', 'n', 'e', ' ',
- 'o', 'p', 't', 'i', 'o', 'n', 's', ':', '"', ' ',
- '<', '<', ' ', 's', 't', 'd', ':', ':', 'e', 'n',
- 'd', 'l', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', '<', '<', ' ', '"',
- '-', 'h', ',', ' ', '-', '-', 'h', 'e', 'l', 'p',
- ' ', ' ', ' ', ' ', ':', ' ', '"', '\n', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', '<', '<', ' ', '"', 'p', 'r', 'i', 'n', 't',
- ' ', 't', 'h', 'i', 's', ' ', 'h', 'e', 'l', 'p',
- ' ', 'm', 'e', 's', 's', 'a', 'g', 'e', ' ', 't',
- 'h', 'e', 'n', ' ', 'e', 'x', 'i', 't', '.', '"',
- ' ', '<', '<', ' ', 's', 't', 'd', ':', ':', 'e',
- 'n', 'd', 'l', '\n', '\n', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '<', '<',
- ' ', '"', '-', 'q', ',', ' ', '-', '-', 'q', 'u',
- 'i', 'e', 't', ' ', ' ', ' ', ':', ' ', '"', '\n',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', '<', '<', ' ', '"', 's', 'u', 'p',
- 'p', 'r', 'e', 's', 's', 'e', 's', ' ', 'a', 'l',
- 'l', ' ', 'o', 'u', 't', 'p', 'u', 't', ' ', 'f',
- 'r', 'o', 'm', ' ', 't', 'h', 'e', ' ', 'p', 'r',
- 'o', 'g', 'r', 'a', 'm', '.', '"', '\n', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', '<', '<', ' ', 's', 't', 'd', ':', ':', 'e',
- 'n', 'd', 'l', '\n', '\n', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '<', '<',
- ' ', '"', '-', 'r', ',', ' ', '-', '-', 'r', 'o',
- 't', '1', '3', ' ', ' ', ' ', ':', ' ', '"', '\n',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', '<', '<', ' ', '"', 'p', 'r', 'i',
- 'n', 't', 's', ' ', 'a', 'l', 'l', ' ', 'o', 'u',
- 't', 'p', 'u', 't', ' ', 'a', 's', ' ', 'i', 't',
- 's', ' ', 'R', 'O', 'T', '1', '3', 'e', 'd', ' ',
- 'e', 'q', 'u', 'i', 'v', 'a', 'l', 'e', 'n', 't',
- '"', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', '<', '<', ' ', 's', 't',
- 'd', ':', ':', 'e', 'n', 'd', 'l', '\n', '\n', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', '<', '<', ' ', '"', '-', 'v', ',', ' ',
- '-', '-', 'v', 'e', 'r', 's', 'i', 'o', 'n', ' ',
- ':', ' ', '"', '\n', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', '<', '<', ' ',
- '"', 'p', 'r', 'i', 'n', 't', 's', ' ', 't', 'h',
- 'e', ' ', 'v', 'e', 'r', 's', 'i', 'o', 'n', ' ',
- 's', 't', 'r', 'i', 'n', 'g', ' ', 't', 'h', 'e',
- 'n', ' ', 'e', 'x', 'i', 't', '"', ' ', '<', '<',
- ' ', 's', 't', 'd', ':', ':', 'e', 'n', 'd', 'l',
- ';', '\n', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'p',
- 'r', 'i', 'n', 't', '_', 's', 'o', 'u', 'r', 'c',
- 'e', ' ', '=', ' ', 'f', 'a', 'l', 's', 'e', ';',
- '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', '}', '\n', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', '}', '\n', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', 'e', 'l', 's', 'e', ' ', 'i', 'f',
- ' ', '(', '!', 's', 't', 'r', 'c', 'm', 'p', '(',
- 'a', 'r', 'g', 'v', '[', 'i', ']', ',', ' ', '"',
- '-', '-', 'q', 'u', 'i', 'e', 't', '"', ')', ' ',
- '|', '|', ' ', '!', 's', 't', 'r', 'c', 'm', 'p',
- '(', 'a', 'r', 'g', 'v', '[', 'i', ']', ',', ' ',
- '"', '-', 'q', '"', ')', ')', '\n', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', '{', '\n', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'p',
- 'r', 'i', 'n', 't', '_', 's', 'o', 'u', 'r', 'c',
- 'e', ' ', '=', ' ', 'f', 'a', 'l', 's', 'e', ';',
- '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', 'o', 'u', 't', 'p', 'u', 't', '.',
- 's', 't', 'r', '(', '"', '"', ')', ';', '\n', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', '}', '\n', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'e', 'l', 's',
- 'e', ' ', 'i', 'f', ' ', '(', '!', 's', 't', 'r',
- 'c', 'm', 'p', '(', 'a', 'r', 'g', 'v', '[', 'i',
- ']', ',', ' ', '"', '-', '-', 'r', 'o', 't', '1',
- '3', '"', ')', ' ', '|', '|', ' ', '!', 's', 't',
- 'r', 'c', 'm', 'p', '(', 'a', 'r', 'g', 'v', '[',
- 'i', ']', ',', ' ', '"', '-', 'r', '"', ')', ')',
- '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '{',
- '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', 'r', 'o', 't', '1', '3', '_', 'o',
- 'n', ' ', '=', ' ', 't', 'r', 'u', 'e', ';', '\n',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '}', '\n',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'e', 'l',
- 's', 'e', ' ', 'i', 'f', ' ', '(', '!', 's', 't',
- 'r', 'c', 'm', 'p', '(', 'a', 'r', 'g', 'v', '[',
- 'i', ']', ',', ' ', '"', '-', '-', 'v', 'e', 'r',
- 's', 'i', 'o', 'n', '"', ')', ' ', '|', '|', ' ',
- '!', 's', 't', 'r', 'c', 'm', 'p', '(', 'a', 'r',
- 'g', 'v', '[', 'i', ']', ',', ' ', '"', '-', 'v',
- '"', ')', ')', '\n', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', '{', '\n', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', 'i', 'f', ' ', '(',
- 'p', 'r', 'i', 'n', 't', '_', 's', 'o', 'u', 'r',
- 'c', 'e', ')', '\n', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', '{', '\n', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', 'o', 'u', 't', 'p', 'u', 't',
- ' ', '<', '<', ' ', '"', 'A', 'b', 's', 'u', 'r',
- 'd', 'l', 'y', ' ', 'C', 'o', 'm', 'p', 'l', 'i',
- 'c', 'a', 't', 'e', 'd', ' ', 'C', '+', '+', ' ',
- 'Q', 'u', 'i', 'n', 'e', ' ', 'V', 'e', 'r', 's',
- 'i', 'o', 'n', ' ', '1', '.', '0', '"', ';', '\n',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', 'p', 'r', 'i', 'n',
- 't', '_', 's', 'o', 'u', 'r', 'c', 'e', ' ', '=',
- ' ', 'f', 'a', 'l', 's', 'e', ';', '\n', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- '}', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- '}', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- 'e', 'l', 's', 'e', '\n', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', '{', '\n', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', 's', 't', 'd',
- ':', ':', 'c', 'e', 'r', 'r', ' ', '<', '<', ' ',
- '"', 'U', 'n', 'r', 'e', 'c', 'o', 'g', 'n', 'i',
- 'z', 'e', 'd', ' ', 'c', 'o', 'm', 'm', 'a', 'n',
- 'd', ' ', 'l', 'i', 'n', 'e', ' ', 'a', 'r', 'g',
- 'u', 'm', 'e', 'n', 't', ' ', '\'', '"', ' ', '<',
- '<', ' ', 'a', 'r', 'g', 'v', '[', 'i', ']', '\n',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', '<', '<', ' ', '"', '\'', '"', ' ', '<',
- '<', ' ', 's', 't', 'd', ':', ':', 'e', 'n', 'd',
- 'l', ';', '\n', '\n', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', 'r', 'e', 't', 'u',
- 'r', 'n', ' ', 'E', 'X', 'I', 'T', '_', 'F', 'A',
- 'I', 'L', 'U', 'R', 'E', ';', '\n', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', '}', '\n', ' ', ' ', ' ',
- ' ', '}', '\n', '\n', ' ', ' ', ' ', ' ', 'i', 'f',
- ' ', '(', 'p', 'r', 'i', 'n', 't', '_', 's', 'o',
- 'u', 'r', 'c', 'e', ')', '\n', ' ', ' ', ' ', ' ',
- '{', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- 'g', 'e', 't', '_', 's', 'o', 'u', 'r', 'c', 'e',
- '(', 'o', 'u', 't', 'p', 'u', 't', ')', ';', '\n',
- ' ', ' ', ' ', ' ', '}', '\n', '\n', ' ', ' ', ' ',
- ' ', 's', 't', 'd', ':', ':', 's', 't', 'r', 'i',
- 'n', 'g', ' ', 'o', 'u', 't', '_', 's', 't', 'r',
- ' ', '=', ' ', 'o', 'u', 't', 'p', 'u', 't', '.',
- 's', 't', 'r', '(', ')', ';', '\n', ' ', ' ', ' ',
- ' ', 'i', 'f', ' ', '(', 'r', 'o', 't', '1', '3',
- '_', 'o', 'n', ')', '\n', ' ', ' ', ' ', ' ', '{',
- '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'o',
- 'u', 't', '_', 's', 't', 'r', ' ', '=', ' ', 'r',
- 'o', 't', '1', '3', '(', 'o', 'u', 't', '_', 's',
- 't', 'r', ')', ';', '\n', ' ', ' ', ' ', ' ', '}',
- '\n', '\n', ' ', ' ', ' ', ' ', 's', 't', 'd', ':',
- ':', 'c', 'o', 'u', 't', ' ', '<', '<', ' ', 'o',
- 'u', 't', '_', 's', 't', 'r', ';', '\n', '\n', ' ',
- ' ', ' ', ' ', 'r', 'e', 't', 'u', 'r', 'n', ' ',
- 'E', 'X', 'I', 'T', '_', 'S', 'U', 'C', 'C', 'E',
- 'S', 'S', ';', '\n', '}', '\n',
- };
- for (int i = 0; i < 1510; i++)
- {
- output << code_string[i];
- }
- for (int i = 0; i < sizeof(code_string); i++)
- {
- if (i % 10 == 0)
- {
- output << "\n ";
- }
- std::string lit_string = char_literal(code_string[i]);
- if (lit_string.length() == 3)
- {
- output << " ";
- }
- output << " " << lit_string << ",";
- }
- for (int i = 1510; i < sizeof(code_string); i++)
- {
- output << code_string[i];
- }
- }
- int main(int argc, char* argv[])
- {
- std::ostringstream output;
- bool print_source = true, rot13_on = false;
- /* Check for command-line arguments */
- for (int i = 1; i < argc; i++)
- {
- if (!strcmp(argv[i], "--help") || !strcmp(argv[i], "-h"))
- {
- if (print_source)
- {
- output << "Usage: " << argv[0] << " [option] ..." << std::endl;
- output << std::endl
- << "Description: " << std::endl
- << "Outputs its own source code." << std::endl;
- output << std::endl
- << "Command-line options:" << std::endl
- << "-h, --help : "
- << "print this help message then exit." << std::endl
- << "-q, --quiet : "
- << "suppresses all output from the program."
- << std::endl
- << "-r, --rot13 : "
- << "prints all output as its ROT13ed equivalent"
- << std::endl
- << "-v, --version : "
- << "prints the version string then exit" << std::endl;
- print_source = false;
- }
- }
- else if (!strcmp(argv[i], "--quiet") || !strcmp(argv[i], "-q"))
- {
- print_source = false;
- output.str("");
- }
- else if (!strcmp(argv[i], "--rot13") || !strcmp(argv[i], "-r"))
- {
- rot13_on = true;
- }
- else if (!strcmp(argv[i], "--version") || !strcmp(argv[i], "-v"))
- {
- if (print_source)
- {
- output << "Absurdly Complicated C++ Quine Version 1.0";
- print_source = false;
- }
- }
- else
- {
- std::cerr << "Unrecognized command line argument '" << argv[i]
- << "'" << std::endl;
- return EXIT_FAILURE;
- }
- }
- if (print_source)
- {
- get_source(output);
- }
- std::string out_str = output.str();
- if (rot13_on)
- {
- out_str = rot13(out_str);
- }
- std::cout << out_str;
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement