diff --git a/config/stub_templates/clojure/loop.clj.jinja b/config/stub_templates/clojure/loop.clj.jinja new file mode 100644 index 0000000..54623a1 --- /dev/null +++ b/config/stub_templates/clojure/loop.clj.jinja @@ -0,0 +1,3 @@ +(dotimes [{{ index_ident }} {{ count_var }}] + {% for line in inner %}{{line}} + {% endfor %}) diff --git a/config/stub_templates/clojure/loopline.clj.jinja b/config/stub_templates/clojure/loopline.clj.jinja new file mode 100644 index 0000000..a695983 --- /dev/null +++ b/config/stub_templates/clojure/loopline.clj.jinja @@ -0,0 +1,36 @@ +{%- set vars_length = vars | length -%} + +{# SINGLE_TYPE #} +{%- if vars_length == 1 -%} +{%- set var = vars[0] -%} +{%- if var.var_type == "String" or var.var_type == "Word" -%} + {%- set fn = "" -%} +{%- else -%} + {%- set fn = "(map# " ~ type_tokens[var.var_type] ~ ") " -%} +{%- endif -%} + +(doseq + [{{ var.ident }} {{ fn }}(filter #(not-empty %) (str/split (read-line) #" "))] + ( )) +{# MULTIPLE_TYPE #} +{%- else -%} +{%- set idents = vars | map(attribute="ident") | join(sep=" ") -%} +{%- set idents = "[" ~ idents ~ "]" -%} + +{%- set_global fns = [] %} +{%- for var in vars %} + {%- if var.var_type == "String" or var.var_type == "Word" -%} + {%- set fn = var.ident -%} + {%- else -%} + {%- set fn = "(" ~ type_tokens[var.var_type] ~ " " ~ var.ident ~ ")" -%} + {%- endif %} + {%- set_global fns = fns | concat(with=fn) -%} +{%- endfor -%} + +(doseq + [{{ idents }} (map (fn [{{ idents }}] [{{ fns | join(sep=" ") }}]) + (partition {{ vars_length }} (filter #(not-empty %) (str/split (read-line) #" "))) + ] + ( )) + +{%- endif %} \ No newline at end of file diff --git a/config/stub_templates/clojure/main.clj.jinja b/config/stub_templates/clojure/main.clj.jinja new file mode 100644 index 0000000..8f84739 --- /dev/null +++ b/config/stub_templates/clojure/main.clj.jinja @@ -0,0 +1,15 @@ +(ns Solution + (:require [clojure.string :as str]) + (:gen-class)) + +(defn output [msg] (println msg) (flush)) +(defn debug [msg] (binding [*out* *err*] (println msg) (flush))) +{% for line in statement %} +; {{ line }} +{%- endfor %} + +(defn -main [& args] + {%- for line in code_lines %} + {{ line }} + {%- endfor %} +) \ No newline at end of file diff --git a/config/stub_templates/clojure/read_many.clj.jinja b/config/stub_templates/clojure/read_many.clj.jinja new file mode 100644 index 0000000..ce72292 --- /dev/null +++ b/config/stub_templates/clojure/read_many.clj.jinja @@ -0,0 +1,27 @@ +{%- set clj_split = '(filter #(not-empty %) (str/split (read-line) #" "))' -%} +{%- set idents = vars | map(attribute="ident") | join(sep=" ")-%} + +{%- for var in vars %} +{%- if var.input_comment -%}; {{ var.ident }}: {{ var.input_comment }} +{% endif -%} +{% endfor -%} + +{%- if single_type -%} +{%- set var = vars[0] -%} +{%- if var.var_type == "String" or var.var_type == "Word" -%} + {%- set fn = "" -%} +{%- else -%} + {%- set fn = "(map #(" ~ type_tokens[var.var_type] ~ " %) " -%} +{%- endif -%} + +(def [[{{ idents }}] {{ fn }}{{ clj_split }})] +{% else -%} + +(let [{{ idents }}] {{ clj_split }} +{% for var in vars -%} +{%- if var.var_type != "String" and var.var_type != "Word" -%} +(let {{ var.ident }} ({{type_tokens[var.var_type]}} {{var.ident}})) +{% endif -%} +{%- endfor -%} +) +{% endif %} \ No newline at end of file diff --git a/config/stub_templates/clojure/read_one.clj.jinja b/config/stub_templates/clojure/read_one.clj.jinja new file mode 100644 index 0000000..cf7c658 --- /dev/null +++ b/config/stub_templates/clojure/read_one.clj.jinja @@ -0,0 +1,10 @@ +{%- set sym = format_symbols[var.var_type] -%} +{%- if var.var_type == "String" or var.var_type == "Word" -%} + {%- set fn = "(read-line)" -%} +{%- else -%} + {%- set fn = "(" ~ type_tokens[var.var_type] ~ " (read-line))" -%} +{%- endif -%} + +{%- if var.input_comment %}; {{ var.input_comment }} +{% endif -%} +(let [{{ var.ident }} {{ fn }}]) diff --git a/config/stub_templates/clojure/stub_config.toml b/config/stub_templates/clojure/stub_config.toml new file mode 100644 index 0000000..c6bf9fc --- /dev/null +++ b/config/stub_templates/clojure/stub_config.toml @@ -0,0 +1,24 @@ +name = "clojure" +source_file_ext = "clj" + +[type_tokens] +Int = "Integer/parseInt" +Long = "Long/parseLong" +Float = "Float/parseFloat" +Bool = "not= \"0\"" +String = "NONE" +Word = "NONE" + +[variable_name_options] +casing = "camel_case" +allow_uppercase_vars = false +keywords = [ + "auto", "break", "case", "char", + "const", "continue", "default", "do", + "double", "else", "enum", "extern", + "float", "for", "goto", "if", + "int", "register", "return", + "short", "signed", "sizeof", "static", + "struct", "switch", "typedef", "union", + "unsigned", "void", "volatile", "while" +] diff --git a/config/stub_templates/clojure/write.clj.jinja b/config/stub_templates/clojure/write.clj.jinja new file mode 100644 index 0000000..855898d --- /dev/null +++ b/config/stub_templates/clojure/write.clj.jinja @@ -0,0 +1,6 @@ +{%- for line in output_comments %} +; {{ line }} +{% endfor %} +{%- for line in messages -%} +(output "{{line}}") +{% endfor %} \ No newline at end of file diff --git a/config/stub_templates/clojure/write_join.clj.jinja b/config/stub_templates/clojure/write_join.clj.jinja new file mode 100644 index 0000000..74f96cb --- /dev/null +++ b/config/stub_templates/clojure/write_join.clj.jinja @@ -0,0 +1,16 @@ +{%- set_global out = "" -%} +{%- for term in terms -%} + {%- if term.is_variable -%} + {%- set_global out = out ~ term.ident -%} + {%- else -%} + {%- set_global out = out ~ '"' ~ term.ident ~ '"' -%} + {%- endif -%} + {%- if loop.last == false -%} + {%- set_global out = out ~ ' + " " + ' -%} + {%- endif -%} +{%- endfor -%} + +{%- for line in output_comments -%} # {{ line }} +{% endfor -%} +(print {{ out | replace(from='" + "', to="") | replace(from=' +', to="") }}) +(output "")