Quines are named after the American mathematician and logician Willard Van Orman Quine (1908–2000)
- Wikipedia Quibe entry
- Rosetta Code Quine page
- The Quine Page by Gary P. Thompson II
| # http://editorconfig.org | |
| root = true | |
| [*] | |
| indent_style = space | |
| indent_size = 2 | |
| end_of_line = lf | |
| charset = utf-8 | |
| trim_trailing_whitespace = true | |
| insert_final_newline = true | |
| [Makefile] | |
| indent_style = tab | |
| # Use 4 spaces for the Python files | |
| [*.py] | |
| indent_size = 4 | |
| max_line_length = 80 | |
| # The JSON files contain newlines inconsistently | |
| [*.json] | |
| insert_final_newline = ignore | |
| # Minified JavaScript files shouldn't be changed | |
| [*.md] | |
| trim_trailing_whitespace = false |
| output/ |
Quines are named after the American mathematician and logician Willard Van Orman Quine (1908–2000)
| ;(function quine() { | |
| console.log(";(" + quine.toString() + ")()") | |
| })() |
| CODE = "def foo(s) \"\"; end\n\nputs \"CODE = \#{foo(CODE)}\\n\\n\#{CODE}\"" | |
| def foo(s) s.gsub('\\', '\\\\\\').gsub(/\n/, '\n').gsub(/"/, '\"').gsub(/#/, '\#').gsub(/\A|\Z/, '"'); end | |
| puts "CODE = #{foo(CODE)}\n\n#{CODE}" |
| #!/usr/bin/make --warn-undefined-variables | |
| QUINES := $(wildcard *.py *.js *.go *.bash *.c *.rb) | |
| OUTPUTS := $(addprefix output/,$(QUINES)) | |
| QUIET := true | |
| .phony: all | |
| all: $(OUTPUTS) | |
| .phony: diff | |
| diff: $(OUTPUTS) | |
| @for quine in $(QUINES); do diff -us "$$quine" "output/$$quine"; done | |
| .phony: clean | |
| clean: | |
| @rm -f $(OUTPUTS) | |
| .phony: files | |
| files: | |
| @ls -1 Makefile $(QUINES) | |
| .phony: watch | |
| watch: | |
| @while ! (make files | entr -d make diff); do sleep 0.1; done | |
| output/.stamp: | |
| echo narf $@ narf | |
| mkdir -p $(dir $@) | |
| date > output/.stamp | |
| $(OUTPUTS): output/.stamp | |
| output/%.py: %.py | |
| python3 $< > $@ | |
| output/%.rb: %.rb | |
| ruby $< > $@ | |
| output/%.js: %.js | |
| node $< > $@ | |
| output/%.go: %.go | |
| go run $< > $@ | |
| output/%.bash: %.bash | |
| bash $< > $@ | |
| output/%.c: %.c | |
| cc $< -o output/$(basename $<) | |
| output/$(basename $<) > $@ | |
| @rm -f output/$(basename $<) |
| #include <stdio.h> | |
| static char sym[] = "\n\t\\\""; | |
| int main(void) { | |
| const char *code = "#include <stdio.h>%c%cstatic char sym[] = %c%cn%ct%c%c%c%c%c;%c%cint main(void) {%c%cconst char *code = %c%s%c;%c%cprintf(code, sym[0], sym[0], sym[3], sym[2], sym[2], sym[2], sym[2], sym[2], sym[3], sym[3], sym[0], sym[0], sym[0], sym[1], sym[3], code, sym[3], sym[0], sym[1], sym[0], sym[0], sym[1], sym[0], sym[0]);%c%c%creturn 0;%c}%c"; | |
| printf(code, sym[0], sym[0], sym[3], sym[2], sym[2], sym[2], sym[2], sym[2], sym[3], sym[3], sym[0], sym[0], sym[0], sym[1], sym[3], code, sym[3], sym[0], sym[1], sym[0], sym[0], sym[1], sym[0], sym[0]); | |
| return 0; | |
| } |
| package main | |
| import "fmt" | |
| const strStart = 71 | |
| func main() { | |
| code := `package main | |
| import "fmt" | |
| const strStart = 71 | |
| func main() { | |
| code := | |
| fmt.Print(code[:strStart] + " \u0060" + code + "\u0060" + code[strStart:]) | |
| } | |
| ` | |
| fmt.Print(code[:strStart] + " \u0060" + code + "\u0060" + code[strStart:]) | |
| } |
| a = 'print("a = %r" % a)\nprint(a)' | |
| print("a = %r" % a) | |
| print(a) |
| code = "code = %s\n\nputs format(code, code.inspect)" | |
| puts format(code, code.inspect) |