[
  {
    "path": ".gitignore",
    "content": "## C and Cpp garbage ignore ##\n\n# Object files\n*.o\n*.ko\n*.obj\n*.elf\n*.slo\n*.lo\n\n\n# Precompiled Headers\n*.gch\n*.pch\n\n# Libraries\n*.lib\n*.a\n*.la\n*.lo\n*.lai\n\n# Fortran module files\n*.mod\n\n# Shared objects (inc. Windows DLLs)\n*.dll\n*.so\n*.so.*\n*.dylib\n\n# Executables\n*.exe\n*.out\n*.app\n*.i*86\n*.x86_64\n*.hex\n\n# Debug files\n*.dSYM/\n\n# tmp files\n*.*~\n\n## Vim ignore ##\n\n# Temp files\n*.swp\n\n## Python garbage ignore ##\n\n# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*.class\n\n# C extensions\n*.so\n\n# Distribution / packaging\n.Python\nenv/\nbuild/\ndevelop-eggs/\ndist/\ndownloads/\neggs/\n.eggs/\nlib/\nlib64/\nparts/\nsdist/\nvar/\n*.egg-info/\n.installed.cfg\n*.egg\n\n# PyInstaller\n#  Usually these files are written by a python script from a template\n#  before PyInstaller builds the exe, so as to inject date/other infos into it.\n*.manifest\n*.spec\n\n# Installer logs\npip-log.txt\npip-delete-this-directory.txt\n\n# Unit test / coverage reports\nhtmlcov/\n.tox/\n.coverage\n.coverage.*\n.cache\nnosetests.xml\ncoverage.xml\n*,cover\n\n# Translations\n*.mo\n*.pot\n\n# Django stuff:\n*.log\n\n# Sphinx documentation\ndocs/_build/\n\n# PyBuilder\ntarget/\n\n## Haskell ignore ##\n\ndist\ncabal-dev\n*.o\n*.hi\n*.chi\n*.chs.h\n*.dyn_o\n*.dyn_hi\n.hpc\n.hsenv\n.cabal-sandbox/\ncabal.sandbox.config\n*.prof\n*.aux\n*.hp\n\n## Alchemist (Elixir) ignore ##\n*.beam\n\n## Custom ##\n\n# Compiled Lua sources\nluac.out\n\n# luarocks build files\n*.src.rock\n*.zip\n*.tar.gz\n\n# My draft folder (ryukinix)\ndraft\n\n# My emacs org-mode file (leorog)\ntodo.org\n\n# Virtualenv\nvenv\n"
  },
  {
    "path": ".travis.yml",
    "content": "sudo: required\n\nservices:\n  - docker\n\nscript:\n  - sudo chmod +x ./test\n  - docker-compose run -e \"TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST\" -e \"TRAVIS_BRANCH=$TRAVIS_BRANCH\" diff-sync\n"
  },
  {
    "path": "Dockerfile",
    "content": "FROM ubuntu:trusty\n\nRUN apt-get update \\\n  && apt-get -y upgrade \\\n  && apt-get install -y\n\nRUN apt-get install -y software-properties-common \\\n                       python-software-properties \\\n                       python3-pip \\\n                       wget\nADD requirements.txt .\nRUN apt-get install cython -y\nRUN pip3 install -r requirements.txt\n# set locale\nRUN locale-gen en_US.UTF-8\nENV LANG en_US.UTF-8\nENV LANGUAGE en_US:en\nENV LC_ALL en_US.UTF-8\n\n# language deps\nRUN wget http://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb\nRUN dpkg -i erlang-solutions_1.0_all.deb\nRUN add-apt-repository ppa:eugenesan/ppa -y\nRUN apt-get update\nRUN apt-get install elixir -y\nRUN apt-get install php5 -y\nRUN apt-get install golang -y\nRUN apt-get install clojure1.4 -y\nRUN apt-get install ghc -y\nRUN apt-get install g++ gcc -y\nRUN apt-get install lua5.2 -y\nRUN apt-get install ruby-full -y\nRUN apt-get install sbcl -y\nRUN apt-get install gawk -y\nRUN apt-get install git -y\nRUN apt-get install racket -y\nRUN apt-get install ocaml -y\nWORKDIR /code\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 A group of problem solvers!\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "Problem001/.hash",
    "content": "e1edf9d1967ca96767dcc2b2d6df69f4"
  },
  {
    "path": "Problem001/Brain/solution_1.brain",
    "content": "++++++++++>+* make the number 999 at cell 1\n[ run while the number is greater than 0 at cell 1\n  >+*>+*>+*>+*>+* copy number to cell 2 3 4 5 and 6\n  <<% go back to cell 4 and mod it with itself because x mod x equal 0\n  <<% go back to cell 2 and mod it with itself\n  +++>% make number 3 at cell 2 and mod it with x at cell 3\n\n  ? if x mod 3 is not equal 0\n    >+++++>%\n    ? \n      > go to cell 6 if not 0\n    : if cell 5 equal zero add it at cell 7\n      >[>+<-]\n    ; \n\n  : if x mod 3 equal 0\n    ?\n      >>> go to cell 6\n    :\n      >>>[>+<-] if cell 3 equal zero add it at cell 7\n    ;\n  ;\n\n  [-]<[-]<[-]<[-]<[-]<- clean and go back to cell 1 and subtract one\n]\n\n"
  },
  {
    "path": "Problem001/C/Makefile",
    "content": "CXX = gcc\nLFLAGS  = -lm -Wall -o\nTARGET  = solution_1\nTARGET2 = solution_2\nEXTENSION_TARGET = c\nEXTENSION_OUT = out\n\n\nall: t1 t2 \n\nt1:\n\t$(CXX) $(LFLAGS) $(TARGET).$(EXTENSION_OUT) $(TARGET).$(EXTENSION_TARGET)\nt2:\n\t$(CXX) $(LFLAGS) $(TARGET2).$(EXTENSION_OUT) $(TARGET2).$(EXTENSION_TARGET)\n\nclean: \n\trm -v *.$(EXTENSION_OUT)\nrun:\n\t./$(TARGET).$(EXTENSION_OUT)\n"
  },
  {
    "path": "Problem001/C/solution_1.c",
    "content": "/*\n * =====================================================================================\n *\n *                      Copyleft 2015 Manoel Vilela\n *\n *\n *       Filename: solution_1.c \n *\n *    Description: Solution for Problem001 of projecteuler\n *\n *         Author: Manoel Vilela\n *        Contact: manoel_vilela@engineer.com\n *   Organization: UFPA\n *\n * =====================================================================================\n**/\n\n\n\n/*\nMultiples of 3 and 5\nProblem 1\n\nIf we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. \nThe sum of these multiples is 23.\n\nFind the sum of all the multiples of 3 or 5 below 1000.\n*/\n\n\n#include <stdio.h>\n#include <stdlib.h>\n#define MAX 1000\n\n/*===================================================\n *\n *      Author: That's it's a very old solution \n *      when i've beginning with programming in C.\n *\n * ==================================================\n**/\n\n// ?\nint sumlista(int* lista, int lenght){\n\tint sum = 0;\n\tfor(int i = 0; i < lenght; i++){\n\t\tsum += lista[i];;\n\t}\n\treturn sum;\n}\n\n// why so much pointers for this?\nvoid increase(int **data, int *lenght){\n\tint size = *lenght + sizeof(int);\n\t*data = (int*) realloc(*data, size * sizeof(int));\n\t*lenght += 1;\n}\n\n//it's really stupid\nint exist(int *lista, int lenght, int num){\n\tint exist = 0;\n\tfor(int i = 0; i <= lenght; i++)\n\t\tif (lista[i] == num)\n\t\t\texist = 1;\n\treturn exist;\n}\n\n// i really doubt my skill for simplify after see my past\nint main(void){\n\tint *lista, lenght = 0;\n\tint multiples[3] = {3, 5, 0};\n\tlista = (int*) malloc(sizeof(int));\n\t\n\tfor(int i = 0; i < MAX; i++){\n\t\tfor (int j = 0; multiples[j] != 0; j++){\n\t\t\tint mult = multiples[j];\n\t\t\tif (i % mult == 0){\n\t\t\t\tif (!exist(lista, lenght, i)){\n\t\t\t\t\tlista[lenght] = i;\n\t\t\t\t\tincrease(&lista, &lenght);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tint sum = sumlista(lista, lenght);\n\t\n    //at least works... right?\n    printf(\"%d\\n\", sum);\n\tfree(lista);\n\n\treturn 0;\n}"
  },
  {
    "path": "Problem001/C/solution_2.c",
    "content": "/*\n * Implementation of solution 1 using Principle of inclusion-exclusion\n * The proof is done on the related pull request.\n * by Luiz Peres\n * Obs.: I'm using a lot of variables in order to make it easy to understand\n */\n\n#include <stdio.h>\n#define LAST_N 999\n\nint main()\n{\n  int div3       = LAST_N / 3;\n  int div5       = LAST_N / 5;\n  int div3Union5 = LAST_N / (3*5);\n  int sumMult3   = 3 * div3 * (div3 + 1) / 2;\n  int sumMult5   = 5 * div5 * (div5 + 1) / 2;\n  int sumMult3Union5 = 3 * 5 * div3Union5 * (div3Union5 + 1) / 2;\n\n  int inc_exc = sumMult3 + sumMult5 - sumMult3Union5;\n  printf(\"%d\\n\", inc_exc);\n\n  return 0;\n}\n"
  },
  {
    "path": "Problem001/C++/Makefile",
    "content": "CXX = g++\nLFLAGS = -lm -Wall -o\nTARGET =  solution_1\nEXTENSION_TARGET = cpp\nEXTENSION_OUT = out\n\n\nall: \n\t$(CXX) $(LFLAGS) $(TARGET).$(EXTENSION_OUT) $(TARGET).$(EXTENSION_TARGET)\nclean: \n\trm -v *.$(EXTENSION_OUT)\nrun:\n\t./$(TARGET).$(EXTENSION_OUT)"
  },
  {
    "path": "Problem001/C++/solution_1.cpp",
    "content": "/*\n * Find the sum of all multiples of 3 and 5 below 1000\n */\n\n#include <iostream>\n#include <cstdlib>\n\nint main(int argc, char* argv[])\n{\n    // upper default limit.\n    const char *limit = \"1000\";\n\n    if (argv[1]) {\n    \tlimit = argv[1];\n    }\n\n    // iterator variable.\n    int i = 0;\n    // resultant sum of all multiples of 3 and 5.\n    int sum = 0;\n    // transform an array of characters into an integer.\n    int number_to = atoi(limit);\n\n    while (i < number_to) {\n\t    if ((i % 3 == 0) && (i % 15 != 0)) {\n\t        sum += i;\n    \t}\n \t    if ((i % 5 == 0)) {\n\t        sum += i;\n\t    }\n\t    i++;\n    }\n\n    std::cout << sum << std::endl;\n\n    return 0;\n}\n"
  },
  {
    "path": "Problem001/Clojure/solution_1.clj",
    "content": ";; My first code in Clojure\n;; Manoel Vilela\n\n;; solution of problem001\n(defn solution [x]\n    (reduce + (filter (fn [n] (or (= (mod n 5) 0) (= (mod n 3) 0))) (range 1 x)))\n)\n\n(println (solution 1000))\n"
  },
  {
    "path": "Problem001/CommonLisp/solution_1.lisp",
    "content": ";; Common Lisp version\n;; Manoel Vilela\n\n\n(defun div (x d)\n  (= (mod x d) 0))\n\n(defun special-sum (n)\n  (reduce '+ (loop for x from 1 to n when (or (div x 5) (div x 3)) collect x)))\n\n(format t \"~d\" (special-sum 999))\n"
  },
  {
    "path": "Problem001/D/solution_1.d",
    "content": "import std.stdio : writeln;\n\nvoid main() \n{\n    int total;\n\n    foreach (n; 1..1000) {\n        if (n % 3 == 0 || n % 5 == 0)\n            total+=n;\n    }\n\n    writeln(total);\n}\n"
  },
  {
    "path": "Problem001/Elixir/solution_1.exs",
    "content": "# Author: G4BB3R\n\n1..999 |> Enum.to_list\n       |> Enum.filter(&(rem(&1, 3) == 0 or rem(&1, 5) == 0))\n       |> Enum.sum\n       |> IO.puts\n\t"
  },
  {
    "path": "Problem001/Erlang/solution_1.erl",
    "content": "%Autor: machad0\n\n-module(solution_1).\n-export([euler001/0]).\n\neuler001() -> \n  lists:sum([Num || Num <- lists:seq(0, 999), (Num rem 3 =:= 0) or (Num rem 4 =:= 0)]).\n"
  },
  {
    "path": "Problem001/Go/solution_1.go",
    "content": "// Copyright 2016 the <project> Authors. All rights reserved\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage main\n\nimport \"fmt\"\n\nfunc main() {\n\tsum := 0\n\tfor i := 1; i < 1000; i++ {\n\t\tif i%3 == 0 || i%5 == 0 {\n\t\t\tsum += i\n\t\t}\n\t}\n\tfmt.Println(sum)\n}\n"
  },
  {
    "path": "Problem001/Haskell/solution_1.hs",
    "content": "{-\nIf we list all the natural numbers below 10 that are multiples of 3 or 5, we get\n3, 5, 6 and 9. The sum of these multiples is 23.\n\nFind the sum of all the multiples of 3 or 5 below 1000.\n-}\n\nmain :: IO ()\nmain = print $ sum [x | x <- [1..999], mod x 3 == 0 || mod x 5 == 0]"
  },
  {
    "path": "Problem001/Java/solution_1.java",
    "content": "public class Main\n{\n\tpublic static void main(String[] args)\n\t{\n\t\tint total = 0;\n\t\tfor(int i = 1; i < 1000; i ++)\n\t\t{\n\t\t\tif(i % 3 == 0 || i % 5 == 0){\n\t\t\t\ttotal += i;\n\t\t\t}\n\t\t}\n\t\tSystem.out.println(total);\n\t}\n}\n"
  },
  {
    "path": "Problem001/JavaScript/solution_1.js",
    "content": "'use strict'\n\nconst sumAllMultiples = limit => {\n\tlet sum = 0\n\n\tfor(let i = 0; i < limit; i++) {\n\t\tif(i % 3 == 0 || i % 5 == 0) {\n\t\t\tsum += i;\n\t\t}\n\t}\n\n\treturn sum;\n}\n\nconsole.log(sumAllMultiples(1000));"
  },
  {
    "path": "Problem001/JavaScript/solution_2.js",
    "content": "'use strict'\n\nconst sumAllMultiples = limit => Array(limit).fill().map((_, i) => i).filter(number => number % 3 == 0 || number % 5 == 0).reduce((total, number) => total + number)\n\nconsole.log(sumAllMultiples(1000))"
  },
  {
    "path": "Problem001/Kotlin/solution_1.kt",
    "content": "fun main(args: Array<String>) {\n  val seq = (1..999)\n            .asSequence()\n            .filter { it % 3 == 0 || it % 5 == 0 }\n            .sum()\n  println(seq)\n}\n"
  },
  {
    "path": "Problem001/Lua/solution_1.lua",
    "content": "-- Author: G4BB3R\n\nlocal resultado = 0\nfor i = 1, 999 do\n\tif i % 5 == 0 or i % 3 == 0 then\n\t\tresultado = resultado + i\n\tend\nend\nprint(resultado)"
  },
  {
    "path": "Problem001/OCaml/solution_1.ml",
    "content": "let check x =\n  if x mod 3 = 0 || x mod 5 = 0 then\n    1\n  else\n    0\n\nlet rec solve current top count =\n  if current = top then count\n  else\n    if check current = 1 then\n      solve (current + 1) top (count + current)\n    else\n      solve (current + 1) top (count);;\n\nlet solution =\n  solve 0 1000 0;;\n\nprint_int (solution);;\nprint_newline ()"
  },
  {
    "path": "Problem001/Objective-C/solution_1.m",
    "content": "#import <Foundation/Foundation.h>\n\nint main (int argc, const char * argv[])\n{\n   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];\n   NSInteger sum = 0;\n   NSInteger i;\n   for (i = 0; i < 1000; i++)\n      if (i % 5 == 0 || i % 3 == 0)\n        sum += i;\n   \n   NSLog (@\"%lu\", sum);\n   [pool drain];\n   return 0;\n}\n"
  },
  {
    "path": "Problem001/PHP/solution_1.php",
    "content": "<?php\n              \n$sum = 0;\n\nforeach(range(1, 999) as $i)\n{\n    if ($i % 5 == 0 || $i % 3 == 0)\n        $sum += $i;\n}\n\necho $sum;\n\n?>\n"
  },
  {
    "path": "Problem001/PHP/solution_2.php",
    "content": "<?php\n\n    \techo array_reduce(range(1, 999), function($carry, $x){\n\t\treturn $carry += (!($x % 3 && $x % 5)) * $x; //Morgan's laws\n    \t});\n\n\n?>\n"
  },
  {
    "path": "Problem001/Python/solution_1.py",
    "content": "print(sum([x for x in range(1000) if (x % 3 == 0) or (x % 5 == 0)]))\n"
  },
  {
    "path": "Problem001/Python/solution_2.py",
    "content": "count = 0\nfor i in range(1000):\n    if (i % 3 == 0) or (i % 5 == 0):\n        count += i\nprint(count)\n"
  },
  {
    "path": "Problem001/R/solution_1.R",
    "content": "vector <- 1:1000\nsum(vector[vector%%3==0 | vector%%5==0])\n\n"
  },
  {
    "path": "Problem001/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=1)\n"
  },
  {
    "path": "Problem001/Racket/solution_1.rkt",
    "content": "(define (mult3-5 x)\n  (or (= (remainder x 3) 0)\n      (= (remainder x 5) 0)))\n\n(define (main)\n  (let ((answer (apply + (filter mult3-5 (range 0 1000)))))\n    (display answer)\n    (newline)))\n\n(main)\n"
  },
  {
    "path": "Problem001/Ruby/solution_1.rb",
    "content": "# Author: tkovs\n\ndef solve\n\t(0..999).select{|n| n % 3 == 0 || n % 5 == 0}.inject(:+)\nend\n\nputs(solve)"
  },
  {
    "path": "Problem001/Rust/solution_1.rs",
    "content": "fn sum_all_multiples(limit: i32) -> i32 {\n    let mut sum = 0;\n\n    for i in 0..limit {\n    \tif i % 3 == 0 || i % 5 == 0 {\n    \t    sum += i;\n    \t}\n    }\n\n    return sum;\n}\n\nfn main() {\n\tprintln!(\"{:?}\", sum_all_multiples(1000));\n}"
  },
  {
    "path": "Problem001/Scheme/solution_1.scm",
    "content": "(define (range a b)\n  (if (>= a b)\n      '()\n      (cons a (range (+ a 1) b))))\n\n(define (filter f l)\n  (cond ((null? l) '())\n        ((f (car l)) (cons (car l) (filter f (cdr l))))\n        (#t (filter f (cdr l)))))\n\n(define (mult3-5 x)\n  (or (= (remainder x 3) 0)\n      (= (remainder x 5) 0)))\n\n(define (sum l)\n  (apply + l))\n\n(define (main)\n  (let ((answer (sum (filter mult3-5 (range 0 1000)))))\n    (display answer)\n    (newline)))\n\n(main)\n\n"
  },
  {
    "path": "Problem001/Scheme/solution_2.scm",
    "content": "(define triangular\n  (lambda (n)\n    (/ (* (+ n 1) n) 2)))\n\n(define sum-multiples-less-than\n  (lambda (n k)\n    (* k (triangular (floor (/ (- n 1) k))))))\n\n(define sum-multiples-of-3-or-5-less-than\n  (lambda (n)\n    (- (+ (sum-multiples-less-than n 3)\n          (sum-multiples-less-than n 5))\n       (sum-multiples-less-than n 15))))\n\n(define solve\n  (let ((input 1000))\n    (sum-multiples-of-3-or-5-less-than input)))\n\n(display solve)\n(newline)\n"
  },
  {
    "path": "Problem001/Shell/solution_1.sh",
    "content": "#!/bin/bash\n\nfor i in {0..999}; do if !(($i%3)) || !(($i%5)); then multiples[$i]=$i; fi; done\nfor j in ${multiples[@]}; do let total+=$j; done; echo $total\n"
  },
  {
    "path": "Problem001/Swift/solution_1.swift",
    "content": "var sum = 0\n\nfor i in 1..<1000\n{\n    if i % 5 == 0 || i % 3 == 0\n    {\n        sum += i\n    }\n}\n\nprint(sum)\n"
  },
  {
    "path": "Problem002/.hash",
    "content": "4194eb91842c8e7e6df099ca73c38f28"
  },
  {
    "path": "Problem002/C/Makefile",
    "content": "GCC = gcc\nLFLAGS = -lm -Wall -o\nTARGET =  solution_1\n\nall: \n\t$(GCC) $(LFLAGS) $(TARGET).out $(TARGET).c\nclean: \n\trm -v *.out\nrun:\n\t./$(TARGET).out"
  },
  {
    "path": "Problem002/C/solution_1.c",
    "content": "/*\nEach new term in the Fibonacci sequence is generated by adding the previous two terms.\nBy starting with 1 and 2, the first 10 terms will be:\n\n1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...\n\nBy considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.\n*/\n\n#include <stdio.h>\n#include <stdlib.h>\n\n#define INT sizeof(int)\n\ntypedef struct fib {\n  int *sequence;\n  int length;\n} _fib;\n\nint even(int);\n_fib fibonacci(int);\n\nint main(void) {\n  _fib numbers;\n  int i, sum_even;\n\n  numbers = fibonacci(4000000);\n\n  sum_even = 0;\n  for (i = 0; i < numbers.length; i++) {\n    if (even(numbers.sequence[i]))\n      sum_even += numbers.sequence[i];\n  }\n\n  printf (\"%d\\n\", sum_even);\n\n  return 0;\n}\n\nint even(int value) {\n  return !(value & 1);\n}\n\n_fib fibonacci(int limit) {\n  _fib numbers;\n  int a, b;\n\n  numbers.sequence = NULL;\n  numbers.length = 0;\n  a = 0;\n  b = 1;\n\n  while ((a+b) < limit) {\n    numbers.sequence = (int *) realloc (numbers.sequence, ++numbers.length * INT);\n    numbers.sequence[numbers.length-1] = a+b;\n\n    a = b;\n    b = numbers.sequence[numbers.length-1];\n  }\n\n  return numbers;\n}"
  },
  {
    "path": "Problem002/C++/Makefile",
    "content": "CXX = g++\nLFLAGS = -lm -Wall -std=c++11 -o\nTARGET =  solution_1\nEXTENSION_TARGET = cpp\nEXTENSION_OUT = out\n\n\nall: \n\t$(CXX) $(LFLAGS) $(TARGET).$(EXTENSION_OUT) $(TARGET).$(EXTENSION_TARGET)\nclean: \n\trm -v *.$(EXTENSION_OUT)\nrun:\n\t./$(TARGET).$(EXTENSION_OUT)\n"
  },
  {
    "path": "Problem002/C++/solution_1.cpp",
    "content": "/**\n * Find the sum of all even fibonacci numbers whose values are  under 4E6.\n */\n\n#include <iostream>\n#include <cstdlib>\n\nint main(int argc, char *argv[])\n{\n    const char *argv_number = \"4000000\";\n\n    if (argv[1]) {\n\targv_number = argv[1];\n    }\n    \n    // sum of all even fibonacci numbers.\n    int sum = 0;\n    \n    int i = 0;\n    int limit_number = atoi(argv_number);\n    int last_fib = 1;\n    int fib_number = 2;\n    int fib_tmp = 0;\n    \n    while (fib_number < limit_number) {\n\tif (fib_number % 2 == 0) {\n\t    sum += fib_number;\n\t}\n\t\n\tfib_tmp = fib_number;\n\tfib_number += last_fib;\n\tlast_fib = fib_tmp;\n\ti++;\n    }\n    \n    std::cout << sum << std::endl;\n    \n    return 0;\n}\n"
  },
  {
    "path": "Problem002/Clojure/solution_1.clj",
    "content": ";; Author: G4BB3R\n\n(def fib (cons 0 (cons 1 (lazy-seq (map + fib (rest fib))))))\n\n(def resultado\n    (reduce + 0 (filter #(== 0 (rem %1 2)) (take-while (fn [a] (<= a 4000000)) fib))))\n\n(println resultado)\n"
  },
  {
    "path": "Problem002/Clojure/solution_2.clj",
    "content": "(def fib\n  (->> [0 1]\n       (iterate (fn [[x y]] [y (+' x y)]))\n       (map first)))\n\n(defn solution []\n  (->> fib\n       (take-while #(< % 4000000))\n       (filter even?)\n       (reduce +')\n       (println)))\n\n(solution)\n"
  },
  {
    "path": "Problem002/CommonLisp/solution_1.lisp",
    "content": ";; Common Lisp Script\n;; Manoel Vilela\n\n(defun fib (n)\n  (labels ((tail-fib (n a b)\n             (if (= n 0)\n                 a\n                 (tail-fib (1- n)\n                           b\n                           (+ a b)))))\n    (tail-fib n 0 1)))\n\n(defun solution ()\n  (format t \"~a~%\" (loop for x from 0\n                          for fib-x = (fib x)\n                          while (< fib-x 4000000)\n                          when (evenp fib-x) sum fib-x)))\n\n(solution)\n"
  },
  {
    "path": "Problem002/D/solution_1.d",
    "content": "import std.stdio : writeln;\nimport std.algorithm : filter, sum;\n\nenum int LIMIT = 50;\n\nulong[] _fibonacci() \n{\n    ulong[] fib;\n    fib.reserve(LIMIT);\n\n    fib ~= 1;\n    fib ~= 2;\n\n    foreach (n; 2 .. LIMIT) \n        fib ~= fib[n-2] + fib[n-1];\n    \n    return fib;\n}\n\nvoid main() \n{\n    ulong[] fibonacci = _fibonacci;\n\n    ulong answer = sum(fibonacci.filter!(a => a % 2 == 0 && a < 4000000));\n    \n    writeln(answer);\n}\n"
  },
  {
    "path": "Problem002/Elixir/solution_1.ex",
    "content": "Stream.unfold({0, 1}, fn {a, b} -> {a, {b, a + b}} end)\n|> Stream.filter(&(rem(&1, 2) == 0))\n|> Enum.reduce_while(0, fn (i, acc) -> if (i < 4_000_000), do: {:cont, acc + i}, else: {:halt, acc} end)\n|> IO.puts\n"
  },
  {
    "path": "Problem002/Go/solution_1.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc p2(n int) int {\n\tsum, a, b, c := 0, 1, 1, 2 // c = a + b\n\tfor c < n {\n\t        if n % 2 == 0 {\n\t  \t        sum += c\n\t        }\n\t\ta = b + c\n\t\tb = c + a\n\t\tc = a + b\n\t}\n\treturn sum\n}\n\nfunc main(){\n    \tfmt.Println(p2(4000000))\n}\n"
  },
  {
    "path": "Problem002/Haskell/solution_1.hs",
    "content": "{-\nEach new term in the Fibonacci sequence is generated by adding the previous two terms.\nBy starting with 1 and 2, the first 10 terms will be:\n\n1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...\n\nBy considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.\n-}\n\nfibs :: [Integer]\nfibs = 0 : 1 : zipWith (+) fibs (tail fibs)\n\nmain :: IO ()\nmain = print . sum . filter even $ takeWhile (< 4000000) fibs"
  },
  {
    "path": "Problem002/JavaScript/solution_1.js",
    "content": "'use strict'\n\nLIMIT = 4000000\n\neven = (b) => b % 2 != 0\n\nfunction sequence_generator(n, filter){\n    a=1;\n    b=1;\n    array = [a, b];\n    while (true){\n        c = a;\n        a = b;\n        b = c + b;\n        if (b > n) {\n            break;\n        }\n        if (filter(b)){\n            array.push(b);\n        }\n    }\n    return array;\n}\n\nvar solution = sequence_generator(LIMIT, even).reduce((a, b) => a + b, 0);\nconsole.log(solution)\n"
  },
  {
    "path": "Problem002/Lua/solution_1.lua",
    "content": "-- Author: G4BB3R\n\n-- Fibonacci function with memoization\nlocal fib_cache = {}\nlocal function fib (n)\n\tif fib_cache[n] then\n\t\treturn fib_cache[n]\n\telseif n <= 1 then\n\t\treturn n\n\tend\n\tlocal result = fib (n - 1) + fib (n - 2)\n\tfib_cache[n] = result\n\treturn result\nend\n\nlocal resultado = 0\nfor i = 1, 1000 do\n\tlocal fib_value = fib(i)\n\tif fib_value > 4000000 then\n\t\tbreak\n\telseif fib_value % 2 == 0 then\n\t\tresultado = resultado + fib_value\n\tend\nend\n\nprint(resultado)"
  },
  {
    "path": "Problem002/OCaml/solution_1.ml",
    "content": "let rec solve a b top sum =\n  if a > top then\n    sum\n  else if b mod 2 = 0 then\n    solve b (a + b) top (sum + b)\n  else\n    solve b (a + b) top sum\n\nlet solution =\n    solve 0 1 4000000 0;;\n\nprint_int (solution);;\n"
  },
  {
    "path": "Problem002/PHP/solution_1.php",
    "content": "<?php\n\n    $fibonacci = array(1, 2);\n\n    array_walk($fibonacci, function($x) use (&$fibonacci){\n        if($x * 2.6180 <= 4000000) // lim Φ²n, n -> ∞\n            array_push( $fibonacci, array_sum(array_slice($fibonacci, -2, 2)));\n    });\n\n    echo array_reduce($fibonacci, function($carry, $x) use (&$fibonacci){\n        return $carry += ($x%2 == 0) * $x;\n    });\n\n?>\n\n"
  },
  {
    "path": "Problem002/Python/solution_1.py",
    "content": "#!/usr/bin/env python\r\n# coding=utf-8\r\n#\r\n#   Python Script\r\n#\r\n#   Copyleft © Manoel Vilela\r\n#\r\n#\r\n\r\n\r\ndef fib_generator(n):\r\n    a, b = 1, 1\r\n    while b <= n:\r\n        a, b = b, a + b\r\n        yield a\r\n\r\n\r\ndef solution(n):\r\n    return sum(i for i in fib_generator(n) if not i % 2)\r\n\r\nif __name__ == '__main__':\r\n    print(solution(4000000))\r\n"
  },
  {
    "path": "Problem002/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=2)\n"
  },
  {
    "path": "Problem002/Ruby/solution_1.rb",
    "content": "# Author: tkovs\n\ndef fib(n)\n    a, b = 0, 1\n    sequence = [a] # initialize\n\n    while (b < n)\n        sequence.push(b)\n        a, b = b, a + b\n    end\n\n    return(sequence)\nend\n\ndef solve\n    fib(4000000).select{|n| n.even?}.inject(:+)\nend\n\nputs(solve)"
  },
  {
    "path": "Problem002/Scheme/solution_1.scm",
    "content": ";;\n;; The even Fibonacci numbers satisfy the recurrence\n;;\n;; A(n+2) = 4*A(n+1) + A(n) if n>0\n;; A(1) = 2, A(2) = 8\n;;\n\n(define next-term\n  (lambda (a1 a2)\n    (+ a1 (* 4 a2))))\n\n(define sum-terms-smaller-than\n  (lambda (acc1 acc2 max sum)\n    (cond\n     ((> acc1 max) sum)\n     (else (sum-terms-smaller-than acc2 (next-term acc1 acc2) max (+ acc1 sum))))))\n\n(define solve\n  (let ((input 4000000))\n    (sum-terms-smaller-than 2 8 input 0)))\n\n(display solve)\n(newline)\n"
  },
  {
    "path": "Problem003/.hash",
    "content": "94c4dd41f9dddce696557d3717d98d82"
  },
  {
    "path": "Problem003/C++/solution_1.cpp",
    "content": "#include<bits/stdc++.h>\nusing namespace std;\n\nlong long int largestPrime(long long int num){\n  int j=2;\n  while(num%j != 0) j+=1;\n  if(num%2 == 0){\n    if(num==2) return 2;\n    else return largestPrime(num/2);\n  }\n  else if(num/j == 1) return num;\n  else return largestPrime(num/j);\n}\n\nint main(){\n  long long int x=600851475143;\n  cout<<((long long int)largestPrime(x))<<endl;\n}\n"
  },
  {
    "path": "Problem003/Clojure/solution_1.clj",
    "content": "(defn is-prime\n  [n]\n  (if (or (= n 1) (= n 4))\n    false\n    (loop [candidates (range 2 (+ 1 (Math/sqrt n)))]\n      (cond\n        (empty? candidates) true\n        (= 0 (rem n (first candidates))) false\n        :else (recur (next candidates))))))\n\n(defn next-prime\n  [n]\n  (loop [candidate n]\n    (if (is-prime candidate)\n      candidate\n      (recur (+ candidate 1)))))\n\n(defn prime-seq\n  ([] (prime-seq 2))\n  ([n] (cons n (lazy-seq (prime-seq (next-prime (+' 1 n )))))))\n\n(defn solution\n  [n]\n  (loop [remaining n prime 1 factors '()]\n    (def p (last (take prime (prime-seq))))\n    (def x (/ remaining p))\n    (cond\n      (= 1 x) (cons p factors)\n      (ratio? x) (recur remaining (+' prime 1) factors)\n      :else (recur x 1 (cons p factors)))))\n\n(println (str (first (solution 600851475143))))\n"
  },
  {
    "path": "Problem003/CommonLisp/solution_1.lisp",
    "content": ";; Common Lisp Script\n;; Manoel Vilela\n\n(defun factors (n)\n  \"Return a list of '(prime factor) for n\n   (factors 100) => ((2 2) (5 2))\n  \"\n  (loop for x from 2\n        while (> n 1)\n        when (= 0 (mod n x))\n          collect (loop for c from 0\n                        while (= 0 (mod n x))\n                        do (setq n (/ n x))\n                        finally (return (list x c)))))\n\n(defun solution ()\n  (caar (last (factors 600851475143))))\n\n(format t \"~a~%\"(solution))\n"
  },
  {
    "path": "Problem003/Elixir/solution_1.exs",
    "content": "defmodule Prime do\n  def solve(num), do: solve(num, 2)\n  defp solve(num, acc) when num <= acc, do: num |> IO.puts()\n  defp solve(num, acc) when num > acc and rem(num, acc) == 0 do\n    num |> div(acc) |> solve(acc + 1)\n  end\n  defp solve(num, acc) when num > acc and rem(num, acc) != 0 do\n    num |> solve(acc + 1)\n  end\nend\n\n600851475143 |> Prime.solve()\n"
  },
  {
    "path": "Problem003/Go/solution_1.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"math\"\n)\n\nconst NUM = 600851475143\n\nvar GrDiv = 1\n\nfunc main() {\n\tfor i := 3; float64(i) < math.Sqrt(float64(NUM)); i += 2 {\n\t\tif NUM%i == 0 && isPrime(uint64(i)) {\n\t\t\tGrDiv = i\n\t\t}\n\t}\n\tfmt.Println(GrDiv)\n}\n\nfunc isPrime(n uint64) bool {\n\tif n < 2 {\n\t\treturn false\n\t} else if n == 2 {\n\t\treturn true\n\t} else if n%2 == 0 {\n\t\treturn false\n\t}\n\n\tfor i := 3; float64(i) <= math.Sqrt(float64(n)); i = i + 2 {\n\t\tif n%uint64(i) == 0 {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n"
  },
  {
    "path": "Problem003/Haskell/solution_1.hs",
    "content": "prime_acc :: Integer -> Integer -> Integer\nprime_acc value acc\n    | acc < value = if mod value acc == 0 then \n                        prime_acc (div value acc) (acc + 1)\n                    else\n                        prime_acc value (acc + 1)\n    | otherwise = acc\n\nprime :: Integer -> Integer\nprime x = prime_acc x 2\n\nmain :: IO ()\nmain = print $ prime 600851475143\n"
  },
  {
    "path": "Problem003/Haskell/solution_2.hs",
    "content": "prime value acc\n    | acc >= value = acc\n    | mod value acc == 0 = prime (div value acc) (acc + 1)\n    | otherwise = prime value (acc + 1)\n\nmain :: IO ()\nmain = print $ prime 600851475143 2\n"
  },
  {
    "path": "Problem003/JavaScript/solution_1.js",
    "content": "'use strict'\n\nconst prime = num => {\n\n\tif(num == 1) {\n\t\treturn 1;\n\t}\n\n\tlet i;\n\n\tfor(i = 2; i < num; i++) {\n\t\tif(num % i == 0) {\n\t\t\tnum /= i;\n\t\t}\n\t}\n\n\treturn i;\n}\n\nconsole.log(prime(600851475143));"
  },
  {
    "path": "Problem003/PHP/solution_1.php",
    "content": "<?php\n\nfunction prime($num)\n{\n    for ($i = 2; $i < $num; $i++) {\n        if ($num % $i == 0) {\n            $num /= $i;\n        }\n    }\n    return $i;\n}\n\necho prime(600851475143);\n"
  },
  {
    "path": "Problem003/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\nfrom sys import version_info\n\nif version_info >= (3, 0):\n    xrange = range\n\n\"\"\"\nLargest prime factor\nProblem 3\nPublished on Friday, 2nd November 2001, 06:00 pm; Solved by 264184\n\nThe prime factors of 13195 are 5, 7, 13 and 29.\n\nWhat is the largest prime factor of the number 600851475143 ?\n\"\"\"\n\n\ndef prime_gen(n):\n    for i in xrange(2, n):\n        prime = True\n        if i % 2 == 0 and i != 2:\n            continue\n        sqrtp = int(i ** 1 / 2)\n        for j in xrange(2, sqrtp):\n            if j % 2 == 0:\n                continue\n            if i % j == 0:\n                prime = False\n                break\n        if prime:\n            yield i\n\nnum = 600851475143\n\nfor i in prime_gen(num):\n    if num % i == 0:\n        num /= i\n    if num <= 1:\n        print(i)\n        break\n"
  },
  {
    "path": "Problem003/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=3)\n"
  },
  {
    "path": "Problem003/Scheme/solution_1.scm",
    "content": "(define divmod\n  (lambda (n d)\n    (let ((q (floor (/ n d)))\n          (r (remainder n d)))\n      (cons q r))))\n\n(define factor\n  (lambda (n)\n    (factor-iter 2 n '())))\n\n(define factor-iter\n  (lambda (p n L)\n    (let ((dm (divmod n p)))\n      (cond\n       ((= n 1) L)\n       ((> p (car dm)) (factor-iter p 1 (append L (list n))))\n       ((= 0 (cdr dm)) (factor-iter p (car dm) (append L (list p))))\n       (else (factor-iter (next p) n L))))))\n\n(define next\n  (lambda (p)\n    (cond\n     ((= p 2) 3)\n     ((= p 3) 5)\n     ((= (remainder p 6) 1) (+ p 4))\n     ((= (remainder p 6) 5) (+ p 2)))))\n\n(define biggest-prime-factor\n  (lambda (n)\n    (car (reverse (factor n)))))\n\n(define solve\n  (let ((input 600851475143))\n    (biggest-prime-factor input)))\n\n(display solve)\n(newline)\n"
  },
  {
    "path": "Problem003/Shell/solution_1.sh",
    "content": "#!/bin/bash\n\nprime () {\n  num=$1\n\n  counter=2\n  while [  $counter -lt $num  ]; do\n    if !(($num % $counter)); then num=$(($num/$counter)); fi\n\n    let counter=counter+1\n  done\n\n  echo $num\n}\n\nprime 600851475143\n"
  },
  {
    "path": "Problem004/.hash",
    "content": "d4cfc27d16ea72a96b83d9bdef6ce2ec"
  },
  {
    "path": "Problem004/C/solution_1.c",
    "content": "#include <stdio.h>\n#include <stdlib.h>\nint main()\n{\n    unsigned long int m=0,n=0, palindrome=0,h;\n    int i=0,j=0;\n    for(i=100;i<=999;++i)\n    {\n        for(j=100;j<=999;++j)\n        {\n            int a=0;\n            m=0;n=0;\n            m=i*j;\n            n=m;\n            h=0;\n            while(m!=0)\n            {\n                a=m%10;\n                m=m/10;                \n                h=h*10 +a;\n            }\n            if(h==n && h>=palindrome)\n            palindrome=h;\n        }\n    }\n    printf(\"%d\",palindrome);\n    return 0;\n}\n"
  },
  {
    "path": "Problem004/Clojure/solution_1.clj",
    "content": "(defn solution\n  []\n  (->>\n   (for [x (range 100 1000) y (range 100 1000)\n         :let [p (* x y)]\n         :when (= (reverse (str p)) (seq (str p)))] p)\n   (apply max)))\n\n(println (solution))\n"
  },
  {
    "path": "Problem004/CommonLisp/solution_1.lisp",
    "content": ";; Common Lisp Script\n;; Manoel Vilela\n\n(defun reverse-digits (n)\n  (labels ((next (n v)\n             (if (zerop n)\n                 v\n                 (multiple-value-bind (q r)\n                     (truncate n 10)\n                   (next q (+ (* v 10) r))))))\n    (next n 0)))\n\n(defun palindromep (n)\n  (= n (reverse-digits n)))\n\n(defun solution()\n  (let ((nums (loop for x from 100 to 999\n                    appending (loop for y from 100 to 999\n                                    collect (* x y)))))\n    (loop for x in (sort nums #'>)\n          when (palindromep x) return x)))\n\n(format t \"~a~%\"(solution))\n\n"
  },
  {
    "path": "Problem004/Elixir/solution_1.exs",
    "content": "isPalindrome = fn num -> num\n\t|> Integer.to_string\n\t|> String.reverse\n\t|> String.to_integer\n\t|> (fn x -> x == num end).()\nend\n\n\tfor x <- 1..999,\n\t    y <- 1..999,\n\t    isPalindrome.(x * y) do\n\t    \tx * y\n\tend\n\t|> Enum.max\n\t|> IO.puts\n\t"
  },
  {
    "path": "Problem004/Go/solution_1.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\nfunc main() {\n\tvar MAX = 10000\n\tfor i := 100; i < 1000; i++ {\n\t\tfor j := 100; j < 1000; j++ {\n\t\t\tif i*j < MAX {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\ta := strconv.Itoa(i * j)\n\t\t\tb := reverse(a)\n\t\t\tif strings.Compare(a, b) == 0 {\n\t\t\t\tMAX = i * j\n\t\t\t}\n\t\t}\n\t}\n\tfmt.Println(MAX)\n}\n\nfunc reverse(s string) (result string) {\n\tfor _, v := range s {\n\t\tresult = string(v) + result\n\t}\n\treturn\n}\n"
  },
  {
    "path": "Problem004/Haskell/solution_1.hs",
    "content": "-- Author: G4BB3R\n\nisPalindrome :: Int -> Bool\nisPalindrome x = show x == (reverse . show $ x)\n\nlargestPalindrome :: Int\nlargestPalindrome = maximum [x * y | x <- [1..999], y <- [1..999], isPalindrome $ x * y]\n\nmain :: IO ()\nmain = print largestPalindrome\n"
  },
  {
    "path": "Problem004/JavaScript/solution_1.js",
    "content": "'use strict'\n\nfunction is_palindrome(s){\n    return s === s.split('').reverse().join('')\n}\n\nfunction find_max_palindrom(){\n    max = 0\n    for (i=100; i<999; i+=1){\n        for (j=100; j<999; j+=1){\n            if (is_palindrome(i*j + '') && i*j > max) {\n                max = i*j;\n            }\n        }\n    }\n    return max;\n}\n\nconsole.log(find_max_palindrom())\n"
  },
  {
    "path": "Problem004/Lua/solution_1.lua",
    "content": "-- Author: G4BB3R\n\nlocal function isPalindrome (x)\n\treturn tonumber(string.reverse(x)) == x\nend\n\nlocal largest = 0\nfor a = 1, 999 do\n\tfor b = 1, 999 do\n\t\tif a * b > largest and isPalindrome(a * b) then\n\t\t\tlargest = a * b\n\t\tend\n\tend\nend\n\nprint(largest)"
  },
  {
    "path": "Problem004/OCaml/solution_1.ml",
    "content": "let rec ispalind s =\n  if String.length s <= 1 then true\n  else if s.[0] = s.[String.length s - 1] then ispalind (String.sub s 1 (String.length s - 2))\n  else false;;\n\nlet solve =\n  let mx= ref 0 in\n  for i = 100 to 999 do\n    for j = 100 to 999 do\n      if ispalind (string_of_int(i * j)) && (i * j) > !mx then mx := (i * j)\n    done\n  done;\n  !mx\n\nlet rec solve i j prod=\n  if i = 100 then\n    prod\n  else if j = 100 then\n    solve (i - 1) 999 prod\n  else\n      if ispalind (string_of_int(i * j)) && (i * j) > prod  then solve i (j-1) (i * j)\n      else solve i (j-1) prod\n\nlet solution =\n  solve 999 999 0;;\n\nprint_int (solution);;\n"
  },
  {
    "path": "Problem004/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\nfrom sys import version_info\n\nif version_info >= (3, 0):\n    xrange = range\n\n\n\"\"\"\nLargest palindrome product\nProblem 4\n\nA palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 x 99.\n\nFind the largest palindrome made from the product of two 3-digit numbers.\n\n\"\"\"\npalindrome = 0\nfor i in xrange(1000):\n    for j in xrange(999, 1,  -1):\n        string = str(i*j)\n        if string == string[::-1]:\n            if palindrome < i * j:\n                palindrome = i * j\n                break\n\nprint(palindrome)"
  },
  {
    "path": "Problem004/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=4)\n"
  },
  {
    "path": "Problem004/Ruby/solution_01.rb",
    "content": "# Author: tkovs\n\ndef palindrome(n)\n    return (n.to_s.eql?(n.to_s.reverse))\nend\n\ndef solve\n    list = (1..999).flat_map{|x| (1..999).map {|y| x * y}}\n    return list.select{|x| palindrome(x).eql?(true)}.max\nend\n\nputs(solve)"
  },
  {
    "path": "Problem005/.hash",
    "content": "bc0d0a22a7a46212135ed0ba77d22f3a"
  },
  {
    "path": "Problem005/C/solution_1.c",
    "content": "#include <stdio.h>\n// Author: tkovs\n// Used lua solution that uses python solution XD\n\nint main(void) {\n    int k, i = 1, j;\n\n    for (k = 1; k <= 20; k++) {\n        if (i % k > 0) {\n            for (j = 1; j <= 20; j++) {\n                if ((i * j) % k == 0) {\n                    i = i * j;\n                    break;\n                }\n            }\n        }\n    }\n\n    printf (\"%d\", i);\n\n    return 0;\n}"
  },
  {
    "path": "Problem005/C++/solution_1.cpp",
    "content": "#include <iostream>\n\nint main(int argc, char **argv)\n{\n\tint number = 2520;\n\n\t// naive solution\n\twhile (true) {\n\t\tfor (int i = 2; i <= 20; i++) {\n\t\t\tif (number % i != 0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse if (i == 20 && number % i == 0) {\n\t\t\t\tstd::cout << number << std::endl;\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t\tnumber++;\n\t}\n\n\treturn 0;\n}\n"
  },
  {
    "path": "Problem005/CommonLisp/solution_1.lisp",
    "content": ";; Common Lisp Script\n;; Manoel Vilela\n\n(format t \"~a~%\" (reduce #'lcm (loop for x from 1 to 20 collect x)))\n"
  },
  {
    "path": "Problem005/Elixir/solution_1.exs",
    "content": "defmodule Solution do\n  def solve(n) do\n    dvs = 2..n |> Enum.to_list\n    find_recur(n, dvs, n)\n  end\n\n  defp find_recur(n, dvs, inc_rate) do\n    if Enum.all?(dvs, &(0 == rem(n, &1))) do\n      n\n    else\n      find_recur(n + inc_rate, dvs, inc_rate)\n    end\n  end\nend\n\nSolution.solve(20) |> IO.puts\n"
  },
  {
    "path": "Problem005/Elixir/solution_2.exs",
    "content": "# Author: lubien\n\ndefmodule Euler5 do\n  def solve(n) do\n    1..n |> Enum.reduce(&lcm/2)\n  end\n\n  def lcm(x, y), do: div(x * y, gcd(x, y))\n\n  def gcd(x, 0), do: x\n  def gcd(x, y) do\n    gcd(y, rem(x, y))\n  end\nend\n\nEuler5.solve(20)\n  |> IO.puts\n\n"
  },
  {
    "path": "Problem005/Elixir/solution_slow_1.exs",
    "content": "# Author: G4BB3R\n\n1..999999999999 |> Enum.find(fn x -> Enum.all? 11..20, &(rem(x, &1) == 0) end)\n                |> IO.puts"
  },
  {
    "path": "Problem005/Haskell/solution_1.hs",
    "content": "-- Author: G4BB3R\n\nimport Data.List (find)\nimport Data.Maybe (fromJust)\n\nsmallest :: Int\nsmallest = fromJust $ find (\\x -> all (\\y -> rem x y == 0) [11..20]) [20, 40..]\n\nmain = print smallest"
  },
  {
    "path": "Problem005/JavaScript/solution_1.js",
    "content": "\"use strict\";\n\nfunction smallest_multiple() {\n  let i = 1;\n  for (let k = 1; k < 21; k++) {\n    if (i % k > 0) {\n      for (let j = 1; j < 21; j++) {\n        if ((i * j) % k == 0) {\n          i *= j;\n          break;\n        }\n      }\n    }\n  }\n  return i;\n}\n\nconsole.log(smallest_multiple());\n"
  },
  {
    "path": "Problem005/Lua/solution_1.lua",
    "content": "-- Author: G4BB3R\n-- Used python solution XD\n\nlocal i = 1\nfor k = 1, 20 do\n\tif i % k > 0 then\n\t\tfor j = 1, 20 do\n\t\t\tif (i * j) % k == 0 then\n\t\t\t\ti = i * j\n\t\t\t\tbreak\n\t\t\tend\n\t\tend\n\tend\nend\nprint(i)"
  },
  {
    "path": "Problem005/OCaml/solution_1.ml",
    "content": "let rec range i j = if i > j then [] else i :: (range (i+1) j)\n\nlet is_prime n =\n  let is_divisor d p =\n    if p mod d = 0 then 1 else 0\n  in\n  let targets = range 2 (int_of_float(sqrt(float_of_int(n))))\n  in\n  let rec test_targets k targets =\n    match targets with\n      | [] -> 1\n      | x::trg -> if is_divisor x k = 1 then 0 else test_targets k trg\n  in\n  test_targets n targets\n\nlet rec mxpow i top prod =\n  if prod > top then\n    (prod / i)\n  else\n    mxpow i top (prod * i)\n\n\nlet rec solve n i prod =\n  if i = n then\n    prod\n  else\n    if (is_prime i) = 1 then solve n (i + 1) (prod * (mxpow i n 1))\n    else solve n (i + 1) prod\n\n\n\nlet solution =\n  solve 20 2 1;;\n\n\nprint_int (solution);;\nprint_newline ();;"
  },
  {
    "path": "Problem005/Python/solution_2.py",
    "content": "#Some milliseconds slower than solution 1\ndef div20(num):\n    return all([num%x==0 for x in range(20, 10, -1)])\nnum = 2520\nwhile True:\n    if div20(num):\n        print(num)\n        break\n    num+=2520\n"
  },
  {
    "path": "Problem005/Python/solution_3.py",
    "content": "# someone in the internet do that\n\ni = 1\nfor k in (range(1, 21)):\n    if i % k > 0:\n        for j in range(1, 21):\n            if (i * j) % k == 0:\n                i *= j\n                break\nprint(i)\n"
  },
  {
    "path": "Problem005/Python/solution_slow_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n\"\"\"\nSmallest multiple\nProblem 5\n\n2520 is the smallest number that can be divided by\neach of the numbers from 1 to 10 without any remainder.\n\nWhat is the smallest positive number that is evenly\ndivisible by all of the numbers from 1 to 20?\n\"\"\"\n\n# my ugly solution D: #brute-force:\ndivisors = [x for x in range(1, 21)]\nx = 1\nwhile True:\n    smallest = True\n    for i in divisors:\n        if x % i != 0:\n            smallest = False\n            break\n    if smallest:\n        print(x)\n        break\n    x += 1\n"
  },
  {
    "path": "Problem005/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=5)\n"
  },
  {
    "path": "Problem005/Scheme/solution_1.scm",
    "content": ";;\n\n(define makelist\n  (lambda (f min max L)\n    (cond\n     ((> min max) L)\n     (else (makelist f (+ min 1) max (append L (list (f min))))))))\n\n(define aggregate\n  (lambda (f n L)\n    (cond\n     ((null? L) n)\n     (else (aggregate f (f n (car L)) (cdr L))))))\n\n(define gcd\n  (lambda (m n)\n    (cond\n     ((= n 0) m)\n     ((= n 1) 1)\n     ((< m n) (gcd n m))\n     (else (gcd n (remainder m n))))))\n\n(define lcm\n (lambda (m n)\n   (cond\n    ((= n 1) m)\n    ((= n 0) 0)\n    (else (/ (* m n) (gcd m n))))))\n\n(define solve\n  (let ((input 20))\n    (aggregate lcm 1 (makelist (lambda (x) x) 2 input '()))))\n\n(display solve)\n(newline)\n"
  },
  {
    "path": "Problem005/go/solution_1.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc smallest_multiple(number int) int {\n\tfor result := 2; ; result++ {\n\t\tfound := true\n\t\tfor i := 2; i <= number; i++ {\n\t\t\tif result%i != 0 {\n\t\t\t\tfound = false\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif found {\n\t\t\treturn result\n\t\t}\n\t}\n}\n\nfunc main() {\n\tfmt.Println(smallest_multiple(20))\n}\n"
  },
  {
    "path": "Problem006/.hash",
    "content": "867380888952c39a131fe1d832246ecc"
  },
  {
    "path": "Problem006/C++/Makefile",
    "content": "CXX = g++\nLFLAGS = -lm -Wall -std=c++0x -o\nTARGET =  solution_01\nEXTENSION_TARGET = cpp\nEXTENSION_OUT = out\n\n\nall:\n\t$(CXX) $(LFLAGS) $(TARGET).$(EXTENSION_OUT) $(TARGET).$(EXTENSION_TARGET)\nclean:\n\trm -v *.$(EXTENSION_OUT)\nrun:\n\t./$(TARGET).$(EXTENSION_OUT)"
  },
  {
    "path": "Problem006/C++/solution_1.cpp",
    "content": "/*\n * Find the difference between the square of the sum and the sum of the squares\n * of the first one hundred numbers.\n *\n * Square sum:\n *\n * (1+2+3+...+98+99+100)^2 = 5050^2 (Thanks Gauss)\n *\n * Sum square:\n *\n * 1^2+2^2+3^2+...+98^2+99^2+100^2\n */\n\n#include <iostream>\n#include <cmath>\n\nlong int sum_of_squares();\n\nint main(int argc, char **argv)\n{\n\t// From math: Sum of n natural numbers is: [n*(n+1)]/2;\n\tlong int square_sum = pow(((100*(100+1))/2), 2);\n\n\tstd::cout << square_sum - sum_of_squares() << std::endl;\n\n\treturn 0;\n}\n\n/*\n * Naive sum of the squares.\n */\nlong int sum_of_squares()\n{\n\tlong int acc = 0;\n\n\tfor (int i = 1; i <= 100; i++) {\n\t\tacc += pow(i, 2);\n\t}\n\n\treturn acc;\n}\n"
  },
  {
    "path": "Problem006/Clojure/solution_1.clj",
    "content": ";Author: tkovs\n\n(defn solve []\n    (let [sum_square (reduce +' (map (fn [x] (* x x)) (range 1 101)))\n          square_sum (* (reduce +' (range 1 101)) (reduce +' (range 1 101)))]\n            (- square_sum sum_square)))\n\n(println(solve))"
  },
  {
    "path": "Problem006/CommonLisp/solution_1.lisp",
    "content": ";; Common Lisp Script\n;; Manoel Vilela\n\n(defun square (x)\n  (* x x))\n\n;; (1 2 3) => 1² + 2² + 3² => 14\n(defun square-sum (list)\n  (reduce #'+ (mapcar #'square\n                      list)))\n\n;; (1 2 3) => (1 + 2 + 3)² => 6² => 36\n(defun sum-square (list)\n  (square (reduce #'+ list)))\n\n(defun solution(n)\n  (let ((numbers (loop for x from 1 to n collect x)))\n    (- (sum-square numbers)\n       (square-sum numbers))))\n\n\n(format t \"~a~%\" (solution 100))\n"
  },
  {
    "path": "Problem006/Elixir/solution_1.exs",
    "content": "# Author: G4BB3R\n\nx = 1..100 |> Enum.sum\n           |> :math.pow(2)\n\t\ny = 1..100 |> Enum.to_list\n\t\t   |> Enum.map(&:math.pow(&1, 2))\n\t\t   |> Enum.sum\n\nIO.puts round(x - y)\n"
  },
  {
    "path": "Problem006/Haskell/solution_1.hs",
    "content": "{-\nThe sum of the squares of the first ten natural numbers is,\n12 + 22 + ... + 102 = 385\n\nThe square of the sum of the first ten natural numbers is,\n(1 + 2 + ... + 10)2 = 552 = 3025\n\nHence the difference between the sum of the squares of the first ten natural\nnumbers and the square of the sum is 3025 − 385 = 2640.\n\nFind the difference between the sum of the squares of the first one hundred\nnatural numbers and the square of the sum.\n-}\n\nmain :: IO ()\nmain = print $ ((sum [1..100]) ^ 2) - (sum $ map (\\x -> x * x) [1..100])"
  },
  {
    "path": "Problem006/LaTeX/solution_1.tex",
    "content": "\\documentclass[a4paper,12pt]{article}\n\\usepackage{amsmath, amssymb, amsthm}\n\\usepackage{mathtools}\n\\usepackage{tabulary}\n\\usepackage{multirow}\n\n\\usepackage{polyglossia}\n\n\\title{Project Euler - Problem 6}\n\\date{}\n\\author{DestructHub}\n\n\\begin{document}\n\n\\maketitle\n\n\\section {Statement}\n\nThe sum of the squares of the first ten natural numbers is\n\n$$ 1^2 + 2^2 + \\ldots + 10^2 = 385 $$\n\nThe square of the sum of the first ten natural numbers is,\n\n$$ (1 + 2 + \\ldots + 10)^2 = 55^2 = 3025 $$\n\nHence the difference between the sum of the squares of the first ten natural\nnumbers and the square of the sum is $$ 3025 - 385 = 2640$$.\n\nFind the difference between the sum of the squares of the first one hundred\nnatural numbers and the square of the sum.\n\n\\section{Solution}\n\nWe can use two simple formulae:\n\n\\begin{align*}\n  1+2+\\ldots+n &= \\frac{n(n+1)}{2}\\\\\n  1^2+2^2+\\ldots+n^2 &= \\frac{n(n+1)(2n+1)}{6}\n\\end{align*}\n\n(They can be easily proved by Induction.)\n\nNow it is a matter of simple calculations:\n\n$$\\left(\\frac{n(n+1)}{2})^2\\right) - \\frac{n(n+1)(2n+1)}{6} = 5050^2-338350 = 25164150$$  \n\n\\end{document}\n\n%%% Compile with lualatex\n\n%%% Local Variables:\n%%% mode: latex\n%%% coding: utf-8-unix\n%%% fill-column: 80\n%%% End:\n"
  },
  {
    "path": "Problem006/OCaml/solution_1.ml",
    "content": "let rec pow n x =\n  if n=0 then 1. else x *. pow (n-1) x;;\n\nlet f x = pow 2 (float_of_int ((x * (x + 1)) / 2))\nlet ff x = (x * (x + 1) * ((2 * x) + 1)) / 6\n\nlet solve n = -(ff n) + (int_of_float (f n))\n\nlet __kappa__ = solve 100;;\n\nprint_int(__kappa__);;\nprint_newline ();;\n"
  },
  {
    "path": "Problem006/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\nfrom functools import reduce\n\nfrom sys import version_info\n\nif version_info >= (3, 0):\n    xrange = range\n\n\"\"\"\nSum square difference\nProblem 6\n\nThe sum of the squares of the first ten natural numbers is,\n12 + 22 + ... + 102 = 385\n\nThe square of the sum of the first ten natural numbers is,\n(1 + 2 + ... + 10)2 = 552 = 3025\n\nHence the difference between the sum of the squares\nof the first ten natural numbers and the square of the\nsum is 3025 − 385 = 2640.\n\nFind the difference between the sum of the squares of\nthe first one hundred natural numbers and the square of the sum\n\n\"\"\"\n\nprint(reduce(lambda x, y: x + y, xrange(1, 101)) ** 2 - reduce(lambda x, y: x + y ** 2, xrange(1, 101)))\n"
  },
  {
    "path": "Problem006/Python/solution_2.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n\n# remove unnecessary range in square of sum (solution inspired by Manoel Vilela)\n\nfrom functools import reduce\n\nfrom sys import version_info\n\nif version_info >= (3, 0):\n    xrange = range\n\nprint(reduce(lambda x, y: x + y, xrange(1, 101)) ** 2 - ((100*101)/2))\n"
  },
  {
    "path": "Problem006/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=6)\n"
  },
  {
    "path": "Problem006/Ruby/solution_1.rb",
    "content": "#Author: tkovs\n\ndef solve\n    sum_square = (1..100).map{|x| x * x}.inject(:+)\n    square_sum = (1..100).inject(:+) * (1..100).inject(:+)\n\n    return(square_sum - sum_square)\nend\n\nputs(solve)"
  },
  {
    "path": "Problem006/Scheme/solution_1.scm",
    "content": "\n(define square-of-sum\n  (lambda (n)\n    (/ (* n n (+ n 1) (+ n 1)) 4)))\n\n(define sum-of-squares\n  (lambda (n)\n    (/ (* n (+ n 1) (+ (* 2 n) 1)) 6)))\n\n(define solve\n  (let ((input 100))\n    (- (square-of-sum input) (sum-of-squares input))))\n\n(display solve)\n(newline)\n"
  },
  {
    "path": "Problem006/go/solution_1.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc sumOfSquare(max int) int {\n\tresult := 1\n\tfor i := 2; i <= max; i++ {\n\t\tresult += i * i\n\t}\n\treturn result\n}\n\nfunc squareOfSum(max int) int {\n\tnumber := (max * (max + 1)) / 2\n\treturn number * number\n}\n\nfunc main() {\n\tnumber := 100\n\n\tfmt.Println(squareOfSum(number) - sumOfSquare(number))\n}\n"
  },
  {
    "path": "Problem007/.hash",
    "content": "8c32ab09ec0210af60d392e9b2009560\n"
  },
  {
    "path": "Problem007/C++/Makefile",
    "content": "CXX = g++\nLFLAGS = -lm -Wall -std=c++0x -o\nTARGET =  solution_01\nEXTENSION_TARGET = cpp\nEXTENSION_OUT = out\n\n\nall:\n\t$(CXX) $(LFLAGS) $(TARGET).$(EXTENSION_OUT) $(TARGET).$(EXTENSION_TARGET)\nclean:\n\trm -v *.$(EXTENSION_OUT)\nrun:\n\t./$(TARGET).$(EXTENSION_OUT)"
  },
  {
    "path": "Problem007/C++/solution_1.cpp",
    "content": "/*\n * Finds the 10001 prime number.\n */\n\n#include <iostream>\n#include <cstdlib>\n\nbool is_prime(int n);\n\nint main(int argc, char **argv)\n{\n\tint n = 0;\n\tint prime_count = 1;\n\n\tint limit = 10001;\n\n\tif (argc > 1) {\n\t\tlimit = std::atoi(argv[1]);\n\t}\n\n\twhile (prime_count <= limit) {\n\t\tif (is_prime(n)) {\n\t\t\t++prime_count;\n\t\t}\n\n\t\tn++;\n\t}\n\n\n\tstd::cout << n-1 << std::endl;\n\n\treturn 0;\n}\n\nbool is_prime(int n)\n{\n\tif (n < 2) {\n\t\treturn false;\n\t}\n\telse if (n == 2 || n == 3) {\n\t\treturn true;\n\t}\n\telse if (n % 2 == 0) {\n\t\treturn false;\n\t}\n\telse  {\n\t\tfor (int i = 2; i*i <= n; i++) {\n\t\t\tif (n % i == 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true;\n}\n"
  },
  {
    "path": "Problem007/Clojure/solution_1.clj",
    "content": "(defn is-prime\n  [n]\n  (if (or (= n 1) (= n 4))\n    false\n    (loop [candidates (range 2 (+ 1 (Math/sqrt n)))]\n      (cond\n        (empty? candidates) true\n        (= 0 (rem n (first candidates))) false\n        :else (recur (next candidates))))))\n\n(defn next-prime\n  [n]\n  (loop [candidate n]\n    (if (is-prime candidate)\n      candidate\n      (recur (+ candidate 1)))))\n\n(defn prime-seq\n  ([] (prime-seq 2))\n  ([n] (cons n (lazy-seq (prime-seq (next-prime (+' 1 n )))))))\n\n(println (str (last (take 10001 (prime-seq)))))\n"
  },
  {
    "path": "Problem007/Clojure/solution_2.clj",
    "content": "(defn prime? [n]\n  (= 1 (->> (range 1 (inc (Math/sqrt n)))\n            (map (partial rem n))\n            (filter (partial = 0))\n            (count))))\n\n(defn next-prime\n  [n]\n  (loop [candidate n]\n    (if (prime? candidate)\n      candidate\n      (recur (+ candidate 1)))))\n\n(defn prime-seq\n  ([] (prime-seq 2))\n  ([n] (cons n (lazy-seq (prime-seq (next-prime (+' 1 n )))))))\n\n(println (str (last (take 10001 (prime-seq)))))\n"
  },
  {
    "path": "Problem007/CommonLisp/solution_1.lisp",
    "content": ";; Common Lisp Script\n;; Manoel Vilela\n\n\n(defun primep (n)\n  (let ((divisors (loop for x from 2 to (floor (1+ (sqrt n)))\n                        collect x)))\n    (loop for d in divisors\n          never (and (= (mod n d) 0)\n                     (not (= n d))))))\n\n(defun solution (n)\n  (loop for x from 2\n        count (primep x) into primes\n        while (< primes n)\n        finally (return x)))\n\n(format t \"~a~%\" (solution 10001))\n"
  },
  {
    "path": "Problem007/Elixir/solution_2.exs",
    "content": "defmodule Solution do\n  def nth_prime(n) do\n    prime_sequence()\n    |> Stream.take(n)\n    |> Enum.to_list\n    |> List.last\n  end\n\n  def prime_sequence do\n    Stream.unfold(2, fn(x) ->\n      if(x |> prime?) do\n        {x, x+1}\n      else\n        {nil, x+1}\n      end\n    end)\n    |> Stream.reject(&is_nil/1)\n  end\n\n  def prime?(x) when x == 2, do: true\n  def prime?(x) when x in [1, 4], do: false\n  def prime?(x) do\n    2..round(:math.sqrt(x))\n    |> Enum.reduce_while(true, fn(e, _) ->\n      if(0 == rem(x, e)) do\n        {:halt, false}\n      else\n        {:cont, true}\n      end\n    end)\n  end\nend\n\nSolution.nth_prime(10_001) |> IO.puts\n"
  },
  {
    "path": "Problem007/Elixir/solution_slow_1.exs",
    "content": "# Author: G4BB3R\n\ndefmodule Problem007 do\n\n\tdef isPrime(1), do: false\n\tdef isPrime(2), do: true\n\tdef isPrime(3), do: true\n\tdef isPrime(n), do: (2..(n - 1)) |> Enum.find(fn x -> rem(n, x) == 0 end) |> (fn found -> found == nil end).()\n\n\tdef prime10001           , do: prime10001(1, 0)\n\tdefp prime10001(x, 10001), do: x + 1\n\tdefp prime10001(x, prime), do: prime10001(x + 1, prime + (if isPrime x do 1 else 0 end))\n\nend\n\n#Enum.map 1..100, &(IO.puts (Integer.to_string(&1) <> \": \" <>  (if Problem007.isPrime &1 do \"SIM\" else \"NAO\" end)))\n\nIO.puts Problem007.prime10001\n"
  },
  {
    "path": "Problem007/Haskell/solution_1.hs",
    "content": "-- Author: G4BB3R\n\nimport Data.List (find)\nimport Data.Maybe (isNothing)\n\nisPrime :: Int -> Bool\nisPrime x\n    | x == 1    = False\n    | x <= 3    = True\n    | otherwise = isNothing $ find ((== 0) . rem x) [2..x - 1]\n\nprime10001 :: Int\nprime10001 = prime' 2 0 where\n    prime' x prime = if prime == 1001 then x + 1 else prime' (x + 1) (prime + (if isPrime x then 1 else 0))\n\nmain :: IO ()\nmain = print prime10001\n\n"
  },
  {
    "path": "Problem007/Lua/solution_1.lua",
    "content": "-- Author: G4BB3R\n\nlocal function isPrime (n)\n\tif n < 2 then\n\t\treturn false\n\telseif n == 2 or n == 3 then\n\t\treturn true\n\telse\n\t\tfor i = 2, n - 1 do\n\t\t\tif n % i == 0 then\n\t\t\t\treturn false\n\t\t\tend\n\t\tend\n\t\treturn true\n\tend\nend\n\nlocal n     = 0\nlocal prime = nil\nfor i = 1, 9999999999 do\n\tif isPrime(i) then\n\t\tn = n + 1\n\tend\n\tif n == 10001 then\n\t\tprime = i\n\t\tbreak\n\tend\nend\n\nprint(prime)"
  },
  {
    "path": "Problem007/Python/primes.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\nfrom sys import version_info\n\nif version_info > (3, 0):\n    xrange = range\n\n\ndef primeGen(n):\n    for i in xrange(2, n):\n        prime = True\n        if i % 2 == 0 and i != 2:\n            continue\n        sqrtp = int(i ** 1 / 2)\n        for j in xrange(2, sqrtp):\n            if j % 2 == 0:\n                continue\n            if i % j == 0:\n                prime = False\n                break\n        if prime:\n            yield i\n\n\ndef primeGenEff(n):\n    pp = 2\n    yield pp\n    pp += 1\n    tp = [pp]\n    ss = [2]\n    while pp < n:\n        pp += ss[0]\n        test = True\n        sqrtpp = pp ** 1/2\n        for a in tp:\n            if a > sqrtpp:\n                break\n            if pp % a == 0:\n                test = False\n                break\n        if test:\n            tp.append(pp)\n            yield pp\n\n\ndef sieve5(n):\n    \"\"\"Return a list of the primes below n.\"\"\"\n    prime = [True] * n\n    result = [2]\n    append = result.append\n    sqrt_n = (int(n ** .5) + 1) | 1    # ensure it's odd\n    for p in range(3, sqrt_n, 2):\n        if prime[p]:\n            append(p)\n            prime[p*p::2*p] = [False] * ((n - p*p - 1) // (2*p) + 1)\n    for p in range(sqrt_n, n, 2):\n        if prime[p]:\n            append(p)\n    return result\n"
  },
  {
    "path": "Problem007/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n\"\"\"\n10001st prime\nProblem 7\n\nBy listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.\n\nWhat is the 10 001st prime number?\n\"\"\"\nfrom primes import primeGenEff\n\nfor p, i in enumerate(primeGenEff(1000000000000)):\n    if p == 10001:\n        print(i)\n        break\n"
  },
  {
    "path": "Problem007/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=7)\n"
  },
  {
    "path": "Problem007/Scheme/solution_1.scm",
    "content": "(require srfi/9) ;; Records\n\n;; begin record :listcount\n\n(define-record-type :listcount\n  (listcount lst cnt)\n  listcount?\n  (lst lst set-lst!)\n  (cnt cnt set-cnt!))\n\n(define listcount-car\n  (lambda (lc)\n    (car (lst lc))))\n\n(define listcount-cdr\n  (lambda (lc)\n    (let ((new-lc-lst (cdr (lst lc)))\n          (new-lc-cnt (- (cnt lc) 1)))\n      (listcount new-lc-lst new-lc-cnt))))       \n\n(define listcount-null?\n  (lambda (lc)\n    (= (cnt lc) 0)))\n\n(define listcount-init\n  (listcount '() 0))\n\n(define append-into-listcount\n  (lambda (n lc)\n    (let ((new-lc-lst (append (lst lc) (list n)))\n          (new-lc-cnt (+ 1 (cnt lc))))\n      (listcount new-lc-lst new-lc-cnt))))\n\n;; end record :listcount\n\n(define square\n  (lambda (n) (* n n)))\n\n(define listcount-has-useful-divisor?\n  (lambda (n lc)\n    (cond\n     ((listcount-null? lc) #f)\n     ((< n (square (listcount-car lc))) #f)\n     ((= (remainder n (listcount-car lc)) 0) #t)\n     (else (listcount-has-useful-divisor? n (listcount-cdr lc))))))\n\n;; begin record :sieve\n\n(define-record-type :sieve\n  (sieve last-unchecked primes)\n  sieve?\n  (last-unchecked last-unchecked set-last-unchecked!)\n  (primes primes set-primes!)) ;; primes is a listcount\n\n(define sieve-init\n  (sieve 5\n   (listcount '(2 3) 2)))\n\n;; end record :sieve\n\n(define next-sieve\n  (lambda (S)\n    (let* ((n (last-unchecked S))\n           (old-primes (primes S))\n           (test-lc (listcount-cdr old-primes)))\n      (if (listcount-has-useful-divisor? n test-lc)\n          (sieve (+ n 2) old-primes)\n          (sieve (+ n 2) (append-into-listcount n old-primes))))))\n\n(define next-sieve-prime\n  (lambda (S)\n    (let ((next-S (next-sieve S)))\n      (cond\n       ((= (cnt (primes S)) (cnt (primes next-S)))\n        (next-sieve-prime next-S))\n       (else next-S)))))\n\n(define collect-primes-acc\n  (lambda (S-acc limit)\n    (cond\n     ((not (> limit (cnt (primes S-acc)))) S-acc)\n     (else (collect-primes-acc (next-sieve-prime S-acc) limit)))))\n\n(define collect-primes\n  (lambda (n)\n    (collect-primes-acc sieve-init n)))\n\n(define solve\n  (let ((input 10001))\n    (- (last-unchecked (collect-primes input)) 2)))\n\n(display solve)\n(newline)\n"
  },
  {
    "path": "Problem008/.hash",
    "content": "0f53ea7949d32ef24f9186207600403c"
  },
  {
    "path": "Problem008/Clojure/solution_slow_1.clj",
    "content": "(def bignumber \"7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450\")\n\n(defn solution\n  []\n  (->> (partition 13 1 bignumber)\n       (remove #(some (partial = \\0) %))\n       (map (partial map #(Character/digit % 10)))\n       (pmap (partial reduce *'))\n       (apply max)))\n\n(println (solution))\n"
  },
  {
    "path": "Problem008/CommonLisp/solution_1.lisp",
    "content": ";; Common Lisp Script\n;; Manoel Vilela\n\n(defparameter *big-num* \"7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450\")\n\n(defparameter *partitions* 13)\n\n\n(defun partitions (s n)\n  (loop for x from 0 to (- (length s) n)\n        collect (subseq s x (+ x n))))\n\n(defun str->list-of-digits (s)\n  (loop for x in (partitions s 1) collect (parse-integer x)))\n\n(defun eval-digits (s)\n  (reduce #'* (str->list-of-digits s)))\n\n(defun solution (str n-partitions)\n  (loop for s in (partitions str n-partitions)\n        maximize (eval-digits s)))\n\n(format t \"~a~%\" (solution *big-num* *partitions*))\n"
  },
  {
    "path": "Problem008/Elixir/solution_1.exs",
    "content": "# Author: lubien\n\ndata = \"7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450\"\n    |> String.graphemes\n    |> Enum.map(&String.to_integer/1)\n\nfor i <- 0..(length(data) - 12) do\n  Enum.slice(data, i..(i + 12))\n    |> Enum.reduce(1, &(&1 * &2))\nend\n  |> Enum.max\n  |> IO.puts\n\n"
  },
  {
    "path": "Problem008/Haskell/solution_1.hs",
    "content": "list :: String\nlist = \"7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450\"\n\npt :: Int\npt = 13 -- ué\n\nsplit_list :: String -> [String]\nsplit_list list\n    | length list > pt = [(take pt list)] ++ split_list (tail list)\n    | otherwise        = [list]\n\nproduct_list :: String -> Integer\nproduct_list = product . map (read . (: []))\n\nmain :: IO ()\nmain = do\n    print . maximum . map product_list . split_list $ list\n"
  },
  {
    "path": "Problem008/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\nfrom functools import reduce\n\n\"\"\"\nLargest product in a series\nProblem 8\n\nThe four adjacent digits in the 1000-digit number\nthat have the greatest product are 9 × 9 × 8 × 9 = 5832.\n\n\nFind the thirteen adjacent digits in the 1000-digit number that have the greatest product.\nWhat is the value of this product?\n\"\"\"\n\ndata = '''\\\n73167176531330624919225119674426574742355349194934\\\n96983520312774506326239578318016984801869478851843\\\n85861560789112949495459501737958331952853208805511\\\n12540698747158523863050715693290963295227443043557\\\n66896648950445244523161731856403098711121722383113\\\n62229893423380308135336276614282806444486645238749\\\n30358907296290491560440772390713810515859307960866\\\n70172427121883998797908792274921901699720888093776\\\n65727333001053367881220235421809751254540594752243\\\n52584907711670556013604839586446706324415722155397\\\n53697817977846174064955149290862569321978468622482\\\n83972241375657056057490261407972968652414535100474\\\n82166370484403199890008895243450658541227588666881\\\n16427171479924442928230863465674813919123162824586\\\n17866458359124566529476545682848912883142607690042\\\n24219022671055626321111109370544217506941658960408\\\n07198403850962455444362981230987879927244284909188\\\n84580156166097919133875499200524063689912560717606\\\n05886116467109405077541002256983155200055935729725\\\n71636269561882670428252483600823257530420752963450\\\n'''\n#method 1\n# greatest = int()\n# for i in range(len(data) - 13):\n# \tproduct = reduce(lambda x, y: x*y, [int(x) for x in data[i:i + 13]])\n# \tif product > greatest:\n# \t\tgreatest = product\n# print greatest\n\n# method 2\ndef product(num): return reduce(lambda x, y: x * y, [int(digit) for digit in num])\nprint(max([product(data[i:i + 13]) for i in range(len(data) - 13)]))\n"
  },
  {
    "path": "Problem008/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=8)\n"
  },
  {
    "path": "Problem009/.hash",
    "content": "24eaa9820350012ff678de47cb85b639"
  },
  {
    "path": "Problem009/CommonLisp/solution_1.lisp",
    "content": ";; Common Lisp Script\n;; Manoel Vilela\n\n(defun pythagorean (a b c)\n  (= (+ (* a a)\n        (* b b))\n     (* c c)))\n\n(defun solution()\n  (loop for a from 1 to 998 do\n    (loop for b from a to 998 do\n      (loop for c from b to 998\n            when (and (= 1000 (+ a b c))\n                      (pythagorean a b c))\n                 do (return-from solution (* a b c))))))\n\n(format t \"~a~%\" (solution))\n"
  },
  {
    "path": "Problem009/Elixir/solution_1.exs",
    "content": "# Author: lubien\n\nfor a <- 1..444,\n    b <- 1..444,\n    c <- [1000 - b - a],\n    a * a + b * b == c * c\n  do a * b * c end\n  |> List.first\n  |> IO.puts\n"
  },
  {
    "path": "Problem009/Haskell/solution_1.hs",
    "content": "-- Author: G4BB3R\n-- Help: tkovs\n\ntriangulo = head [(a, b, c) | a <- [1..444], b <- [a..444], c <- [1000 - b - a], a ^ 2 + b ^ 2 == c ^ 2]\n\nmain = print $ let (a, b, c) = triangulo in a * b * c"
  },
  {
    "path": "Problem009/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\nfrom __future__ import print_function\n\"\"\"\nSpecial Pythagorean triplet\nProblem 9\n\nA Pythagorean triplet is a set of three natural numbers, a < b < c, for which,\na² + b² = c²\n\nFor example, 3² + 4² = 9 + 16 = 25 = 52.\n\nThere exists exactly one Pythagorean triplet for which a + b + c = 1000.\nFind the product abc.\n\n\"\"\"\n\n\ndef decompSum(n):\n    from itertools import combinations\n    m = (x for x in range(1, n // 2))\n    div = [3, 4, 5]\n    comb = combinations((x for x in m if any(d for d in div if not x % d)), 3)\n    for a, b, c in comb:\n        if a + b + c == n and a != b != c:\n            yield sorted((a, b, c))\n\n\ndef pythagorean(a, b, c):\n    return (a ** 2 + b ** 2) == c ** 2\n\n\ndef problem9(n):\n    for a, b, c in decompSum(n):\n        if pythagorean(a, b, c):\n            return a * b * c\n\n\nprint(problem9(1000))\n"
  },
  {
    "path": "Problem009/Python/solution_2.py",
    "content": "#code created by NamanNimmo Gera\n#11:32am, April 30, 2019.\n\nfor i in range(1,1000):\n    for j in range(i+1,1000):\n        k = 1000 - i - j\n        if i ** 2 + j ** 2 == k ** 2: break\n    if i**2 + j**2 == k**2: break\n\nprint(i*j*k)\n"
  },
  {
    "path": "Problem009/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=9)\n"
  },
  {
    "path": "Problem009/Ruby/solution_1.rb",
    "content": "#Author: tkovs\n\ndef solve\n    x = (1..444)\n    x.each{|a| x.each{|b| [1000 - b - a].each{|c| return (a * b * c) if (a*a + b*b == c*c)}}}\nend\n\nputs(solve)"
  },
  {
    "path": "Problem010/.hash",
    "content": "d915b2a9ac8749a6b837404815f1ae25"
  },
  {
    "path": "Problem010/C++/Makefile",
    "content": "CXX = g++\nLFLAGS = -lm -Wall -o\nTARGET =  solution_1\nEXTENSION_TARGET = cpp\nEXTENSION_OUT = out\n\n\nall: \n\t$(CXX) $(LFLAGS) $(TARGET).$(EXTENSION_OUT) $(TARGET).$(EXTENSION_TARGET)\nclean: \n\trm -v *.$(EXTENSION_OUT)\nrun:\n\t./$(TARGET).$(EXTENSION_OUT)"
  },
  {
    "path": "Problem010/C++/solution_1.cpp",
    "content": "/**\n * C++ algorithm to get the sum of all prime numbers between a range of 2 and the number desired. \n */\n\n#include <iostream>\n#include <cstdlib>\n\nbool is_prime(unsigned int number);\n\nint main(int argc, char* argv[])\n{\n    const char *num = \"2000000\";\n\n    if (argv[1]) {\n        num = argv[1];\n    }\n\n    // iteration variables.\n    int i = 1;\n    // the number to reach.\n    int number_to = std::atoi(num);\n\n    long long int sum = 0;\n\n    while (i < number_to) {\n        if (is_prime(i)) {\n            sum += i;\n        }\n        i++;\n    }\n\n    std::cout << sum << std::endl;\n    return 0;\n}\n\nbool is_prime(unsigned int number) \n{ \n    if (number <= 1) {\n        return false;\n    }\n\n    unsigned int i;\n    for (i = 2; i * i <= number; i++) {\n        if (number % i == 0) {\n            return false;\n        }\n    }\n\n    // naive solution\n    /*for (i = 2; i < 10; i++) {\n        if (number % i == 0)\n            return false;\n    }*/\n\n    return true;\n}\n"
  },
  {
    "path": "Problem010/Clojure/solution_1.clj",
    "content": "(defn prime? [n]\n  (.isProbablePrime (BigInteger/valueOf n) 10))\n\n(defn next-prime\n  [n]\n  (loop [candidate n]\n    (if (prime? candidate)\n      candidate\n      (recur (+ candidate 1)))))\n\n(defn prime-seq\n  ([] (prime-seq 2))\n  ([n] (cons n (lazy-seq (prime-seq (next-prime (+' 1 n )))))))\n\n(->> (prime-seq)\n     (take-while (partial > 2000000))\n     (reduce +)\n     (println))\n"
  },
  {
    "path": "Problem010/CommonLisp/solution_1.lisp",
    "content": ";; Common Lisp Script\n;; Manoel Vilela\n\n(defun primep (n)\n  (loop for d from 2 to (floor (1+ (sqrt n)))\n        never (and (= (mod n d) 0)\n                   (not (= n d)))))\n\n\n(defun solution (limit)\n  (+ 2 (loop for x from 3 by 2\n             for prime? = (primep x)\n             count prime? into primes\n             while (< x limit)\n             when prime? sum x)))\n\n\n(format t \"~a~%\" (solution 2000000))\n"
  },
  {
    "path": "Problem010/Haskell/solution_slow_1.hs",
    "content": "-- Author: G4BB3R\n-- Performance: 7643.2s (How to improve ?)\n\nprimes :: [Int]\nprimes = sieve [2..]\n  where sieve :: [Int] -> [Int] ;\n  \t\tsieve (p:xs) = p : sieve [x | x <- xs, x `rem` p /= 0] ;\n  \t\tsieve [] = []\n\nmain :: IO ()\nmain = print $ sum $ takeWhile (< 2000000) primes"
  },
  {
    "path": "Problem010/Haskell/solution_slow_2.hs",
    "content": "-- Author: G4BB3R\n-- Performance: 38.8s (Improved: 196x faster)\n\nprimes = 2 : ([3..] `minus` composites)\n    where composites = union [multiples p | p <- primes]\n\nmultiples n = map (n*) [n..]\n\n(x:xs) `minus` (y:ys) | x < y  = x :   (xs `minus` (y : ys))\n                      | x == y = xs        `minus` ys\n                      | x > y  = (x : xs)  `minus` ys\n\nunion = foldr merge []\n  where\n    merge  (x : xs) ys = x : merge' xs ys\n    merge' (x : xs) (y : ys) | x < y  = x : merge' xs (y : ys)\n                             | x == y = x : merge' xs ys\n                             | x > y  = y : merge' (x : xs) ys\n\nmain :: IO ()\nmain = print $ sum $ takeWhile (< 2000000) primes\n"
  },
  {
    "path": "Problem010/Python/primes.py",
    "content": "def prime_gen(n):\n    for i in xrange(2, n):\n        prime = True\n        if i % 2 == 0 and i != 2:\n            continue\n        sqrtp = int(i ** 1 / 2)\n        for j in xrange(2, sqrtp):\n            if j % 2 == 0:\n                continue\n            if i % j == 0:\n                prime = False\n                break\n        if prime:\n            yield i\n\n\ndef prime_gen_eff(n):\n    pp = 2\n    yield pp\n    pp += 1\n    tp = [pp]\n    ss = [2]\n    while pp < n:\n        pp += ss[0]\n        test = True\n        sqrtpp = pp ** 1/2\n        for a in tp:\n            if a > sqrtpp:\n                break\n            if pp % a == 0:\n                test= False\n                break\n        if test:\n            tp.append(pp)\n            yield pp\ndef primes_list(lim):\n    from math import sqrt\n    \"\"\" Get an upper limit from the user to determine the generator's termination point. \"\"\"\n    sqrtlim=sqrt(float(lim))\n    \"\"\" Get the square root of the upper limit. This will be the upper limit of the test prime array \n    for primes used to verify the primacy of any potential primes up to (lim). Primes greater than \n    (sqrtlim) will be placed in an array for extended primes, (xp), not needed for the verification \n    test. The use of an extended primes array is technically unnecessary, but helps to clarify that we \n    have minimized the size of the test prime array. \"\"\"\n    pp=2\n    \"\"\" Initialize the variable for the potential prime, setting it to begin with the first prime \n    number, (2). \"\"\"\n    ss=[pp]\n    \"\"\" Initialize the array for the skip set, setting it at a single member, being (pp=2). Although \n    the value of the quantity of members in the skip set is never needed in the program, it may be \n    useful to understand that future skip sets will contain more than one member, the quantity of which \n    can be calculated, and is the quantity of members of the previous skip set multiplied by one less \n    than the value of the prime which the new skip set will exclude multiples of. Example - the skip \n    set which eliminates multiples of primes up through 3 will have (3-1)*1=2 members, since the \n    previous skip set had 1 member. The skip set which eliminates multiples of primes up through 5 will \n    have (5-1)*2=8 members, since the previous skip set had 2 members, etc. \"\"\"\n    ep=[pp]\n    \"\"\" Initialize the array for primes which the skip set eliminate multiples of, setting the first \n    member as (pp=2) since the first skip set will eliminate multiples of 2 as potential primes. \"\"\"\n    pp+=1\n    \"\"\" Advance to the first potential prime, which is 3. \"\"\"\n    rss=[ss[0]]\n    \"\"\" Initialize an array for the ranges of each skip set, setting the first member to be the range \n    of the first skip set, which is (ss[0]=2). Future skip sets will have ranges which can be \n    calculated, and are the sum of the members of the skip set. Another method of calculating the range \n    will also be shown below. \"\"\"\n    tp=[pp]\n    \"\"\" Initialize an array for primes which are needed to verify potential primes against, setting the \n    first member as (pp=3), since we do not yet have a skip set that excludes multiples of 3. Also note \n    that 3 is a verified prime, without testing, since there are no primes less than the square root of \n    3. \"\"\"\n    i=0\n    \"\"\" Initialize a variable for keeping track of which skip set range is current. \"\"\"\n    rss.append(rss[i]*tp[0])\n    \"\"\" Add a member to the array of skip set ranges, the value being the value of the previous skip \n    set range, (rss[0]=2), multiplied by the value of the largest prime which the new skip set will \n    exclude multiples of, (tp[0]=3), so 2*3=6. This value is needed to define when to begin \n    constructing the next skip set. \"\"\"\n    xp=[]\n    \"\"\" Initialize an array for extended primes which are larger than the square root of the user \n    defined limit (lim) and not needed to verify potential primes against, leaving it empty for now. \n    Again, the use of an extended primes array is technically unnecessary, but helps to clarify that we \n    have minimized the size of the test prime array. \"\"\"\n    pp+=ss[0]\n    \"\"\" Advance to the next potential prime, which is the previous potential prime, (pp=3), plus the \n    value of the next member of the skip set, which has only one member at this time and whose value is \n    (ss[0]=2), so 3+2=5. \"\"\"\n    npp=pp\n    \"\"\" Initialize a variable for the next potential prime, setting its value as (pp=5). \"\"\"\n    tp.append(npp)\n    \"\"\" Add a member to the array of test primes, the member being the most recently identified prime, \n    (npp=5). Note that 5 is a verified prime without testing, since there are no TEST primes less than \n    the square root of 5. \"\"\"\n    while npp<int(lim):\n        \"\"\" Loop until the user defined upper limit is reached. \"\"\"\n        i+=1\n        \"\"\" Increment the skip set range identifier. \"\"\"\n        while npp<rss[i]+1:\n            \"\"\" Loop until the next skip set range is surpassed, since data through that range is\n            needed before constructing the next skip set. \"\"\"\n            for n in ss:\n                \"\"\" Loop through the current skip set array, assigning the variable (n) the value \n                of the next member of the skip set. \"\"\"\n                npp=pp+n\n                \"\"\" Assign the next potential prime the value of the potential prime plus \n                the value of the current member of the skip set. \"\"\"\n                if npp>int(lim): break\n                \"\"\" If the next potential prime is greater than the user defined limit, \n                then end the 'for n' loop. \"\"\"\n                if npp<=rss[i]+1: pp=npp\n                \"\"\" If the next potential prime is still within the range of the next skip \n                set, then assign the potential prime variable the value of the next \n                potential prime. Otherwise, the potential prime variable is not changed \n                and the current value remains the starting point for constructing the next \n                skip set. \"\"\"\n                sqrtnpp=sqrt(npp)\n                \"\"\" Get the square root of the next potential prime, which will be the \n                limit for the verification process. \"\"\"\n                test=True\n                \"\"\" Set the verification flag to True. \"\"\"\n                for q in tp:\n                    \"\"\" Loop through the array of the primes necessary for verification of the \n                    next potential prime. \"\"\"\n                    if sqrtnpp<q: break\n\n                    elif npp % q == 0:\n                        \"\"\" If the test prime IS a factor of the next potential prime. \"\"\"\n                        test=False\n                        \"\"\" Then set the verification flag to False since the next \n                        potential prime is not a prime number. \"\"\"\n                        break\n                        \"\"\" And end testing through the 'for q' loop. \"\"\"\n                    \"\"\" Otherwise, continue testing through the 'for q' loop. \"\"\"\n                if test:\n                    \"\"\" If the next potential prime has been verified as a prime number. \"\"\"\n                    if npp<=sqrtlim: tp.append(npp)\n                    else: xp.append(npp)\n                    \"\"\" Otherwise, add it to the array of primes not needed to verify \n                    potential primes against. \"\"\"\n                \"\"\" Then continue through the 'for n' loop. \"\"\"\n            if npp>int(lim): break\n            \"\"\" If the next potential prime is greater than the user defined limit, then end \n            the 'while npp<rss[i]+1' loop. \"\"\"\n            \"\"\" Otherwise, continue the 'while npp<rss[i]+1' loop. \"\"\"\n        if npp>int(lim): break\n        \"\"\" If the next potential prime is greater than the user defined limit, then end the 'while \n        npp<int(lim)' loop. \"\"\"\n        \"\"\" At this point, the range of the next skip set has been reached, so we may begin\n        constructing a new skip set which will exclude multiples of primes up through the value of \n        the first member of the test prime set, (tp[0]), from being selected as potential \n        primes. \"\"\"\n        lrpp=pp\n        \"\"\" Initialize a variable for the last relevant potential prime and set its value to the \n        value of the potential prime. \"\"\"\n        nss=[]\n        \"\"\" Initialize an array for the next skip set, leaving it empty for now. \"\"\"\n        while pp<(rss[i]+1)*2-1:\n            \"\"\" Loop until the construction of the new skip set has gone through the range of the new \n            skip set. \"\"\"\n            for n in ss:\n                \"\"\" Loop through the current skip set array. \"\"\"\n                npp=pp+n\n                \"\"\" Assign the next potential prime the value of the potential prime plus \n                the value of the current member of the skip set. \"\"\"\n                if npp>int(lim): break\n                \"\"\" If the next potential prime is greater than the user defined limit, \n                then end the 'for n' loop. \"\"\"\n                sqrtnpp=sqrt(npp)\n                \"\"\" Get the square root of the next potential prime, which will be the \n                limit for the verification process. \"\"\"\n                test=True\n                \"\"\" Set the verification flag to True. \"\"\"\n                for q in tp:\n                    \"\"\" Loop through the array of the primes necessary for verification of the \n                    next potential prime. \"\"\"\n                    \"\"\" If the test prime is greater than the square root of the next \n                    potential prime, then end testing through the 'for q' loop. \"\"\"\n                    if sqrtnpp<q: break\n                    elif npp%q==0:\n                        \"\"\" If the test prime IS a factor of the next potential prime. \"\"\"\n                        test=False\n                        \"\"\" Then set the verification flag to False since the next \n                        potential prime is not a prime number. \"\"\"\n                        break\n                        \"\"\" And end testing through the 'for q' loop. \"\"\"\n                        \"\"\" Otherwise, continue testing through the 'for q' loop. \"\"\"\n                if test:\n                    \"\"\" If the next potential prime has been verified as a prime number. \"\"\"\n                    if npp<=sqrtlim: tp.append(npp)\n                    else: xp.append(npp)\n                    \"\"\" And if the next potential prime is less than or equal to the \n                    square root of the user defined limit, then add it to the array of \n                    primes which potential primes must be tested against. \"\"\"\n                    \n                    \"\"\" Otherwise, add it to the array of primes not needed to verify \n                    potential primes against. \"\"\"\n                if npp%tp[0]!=0:\n                    \"\"\" If the next potential prime was NOT factorable by the first member of \n                    the test array, then it is relevant to the construction of the new skip set \n                    and a member must be included in the new skip set for a potential prime to \n                    be selected. Note that this is the case regardless of whether the next \n                    potential prime was verified as a prime, or not. \"\"\"\n                    nss.append(npp-lrpp)\n                    \"\"\" Add a member to the next skip set, the value of which is the \n                    difference between the last relevant potential prime and the next \n                    potential prime. \"\"\"\n                    lrpp=npp\n                    \"\"\" Assign the variable for the last relevant potential prime the \n                    value of the next potential prime. \"\"\"\n                pp=npp\n                \"\"\" Assign the variable for the potential prime the value of the next \n                potential prime. \"\"\"\n                \"\"\" Then continue through the 'for n' loop. \"\"\"\n            if npp>int(lim): break\n            \"\"\" If the next potential prime is greater than the user defined limit, then end \n            the 'while npp<(rss[i]+1)*2-1' loop. \"\"\"\n            \"\"\" Otherwise, continue the 'while npp<(rss[i]+1)*2-1' loop. \"\"\"\n        if npp>int(lim): break\n        \"\"\" If the next potential prime is greater than the user defined limit, then end the 'while \n        npp<int(lim)' loop. \"\"\"\n        ss=nss\n        \"\"\" Assign the skip set array the value of the new skip set array. \"\"\"\n        ep.append(tp[0])\n        \"\"\" Add a new member to the excluded primes array, since the newly constructed skip set \n        will exclude all multiples of primes through the first member of the test prime array. \"\"\"\n        del tp[0]\n        \"\"\" Delete the first member from the test prime array since future potential primes will \n        not have to be tested against this prime. \"\"\"\n        rss.append(rss[i]*tp[0])\n        \"\"\" Add a member to the skip set range array with the value of the range of the next skip \n        set. \"\"\"\n        npp=lrpp\n        \"\"\" Assign the next potential prime the value of the last relevant potential prime. \"\"\"\n        \"\"\" Then continue through the 'while npp<int(lim)' loop. \"\"\"\n    \"\"\" At this point the user defined upper limit has been reached and the generator has completed \n    finding all of the prime numbers up to the user defined limit. \"\"\"\n    ep.reverse()\n    \"\"\" Flip the array of excluded primes. \"\"\"\n    [tp.insert(0,a) for a in ep]\n    \"\"\" Add each member of the flipped array into the beginning of the test primes array. \"\"\"\n    tp.reverse()\n    \"\"\" Flip the array of test primes. \"\"\"\n    [xp.insert(0,a) for a in tp]\n    \"\"\" Add each member of the flipped array into the beginning of the extended primes array. \"\"\"\n    return xp\n    \"\"\" Send the completed array of all primes up to the user defined limit back to the function call. \"\"\"\n\ndef sieve5(n):\n    \"\"\"Return a list of the primes below n.\"\"\"\n    \"\"\"from http://codereview.stackexchange.com/questions/42420/sieve-of-eratosthenes-python\"\"\"\n    prime = [True] * n\n    result = [2]\n    append = result.append\n    sqrt_n = (int(n ** .5) + 1) | 1    # ensure it's odd\n    for p in range(3, sqrt_n, 2):\n        if prime[p]:\n            append(p)\n            prime[p*p::2*p] = [False] * ((n - p*p - 1) // (2*p) + 1)\n    for p in range(sqrt_n, n, 2):\n        if prime[p]:\n            append(p)\n    return result"
  },
  {
    "path": "Problem010/Python/solution_1.py",
    "content": "#!/usr/bin/env python2\n# coding=utf-8\n\"\"\"\nSummation of primes\nProblem 10\n\nThe sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.\n\nFind the sum of all the primes below two million.\n\"\"\"\nfrom primes import primes_list\nfrom functools import reduce\n\nprint(reduce(lambda x, y: x + y, primes_list(2000000)))\n"
  },
  {
    "path": "Problem010/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=10)\n"
  },
  {
    "path": "Problem011/.hash",
    "content": "678f5d2e1eaa42f04fa53411b4f441ac"
  },
  {
    "path": "Problem011/C++/solution_1.cpp",
    "content": "#include <iostream>\r\nusing namespace std;\r\nint main()\r\n{\r\n\tint i,j,max=0,pro;\r\n\tint a[20][20]={\r\n           \t   {8,2,22,97,38,15,0,40,0,75,4,5,7,78,52,12,50,77,91,8},\r\n\t\t   {49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48,4,56,62,0},\r\n\t\t   {81,49,31,73,55,79,14,29,93,71,40,67,53,88,30,3,49,13,36,65},\r\n\t\t   {52,70,95,23,4,60,11,42,69,24,68,56,1,32,56,71,37,2,36,91},\r\n\t\t   {22,31,16,71,51,67,63,89,41,92,36,54,22,40,40,28,66,33,13,80},\r\n\t\t   {24,47,32,60,99,3,45,2,44,75,33,53,78,36,84,20,35,17,12,50},\r\n\t\t   {32,98,81,28,64,23,67,10,26,38,40,67,59,54,70,66,18,38,64,70},\r\n\t\t   {67,26,20,68,2,62,12,20,95,63,94,39,63,8,40,91,66,49,94,21},\r\n\t\t   {24,55,58,5,66,73,99,26,97,17,78,78,96,83,14,88,34,89,63,72},\r\n\t\t   {21,36,23,9,75,0,76,44,20,45,35,14,0,61,33,97,34,31,33,95},\r\n\t\t   {78,17,53,28,22,75,31,67,15,94,3,80,4,62,16,14,9,53,56,92},\r\n\t\t   {16,39,5,42,96,35,31,47,55,58,88,24,0,17,54,24,36,29,85,57},\r\n\t\t   {86,56,0,48,35,71,89,7,5,44,44,37,44,60,21,58,51,54,17,58},\r\n\t\t   {19,80,81,68,5,94,47,69,28,73,92,13,86,52,17,77,4,89,55,40},\r\n\t\t   {4,52,8,83,97,35,99,16,7,97,57,32,16,26,26,79,33,27,98,66},\r\n\t\t   {88,36,68,87,57,62,20,72,3,46,33,67,46,55,12,32,63,93,53,69},\r\n\t\t   {4,42,16,73,38,25,39,11,24,94,72,18,8,46,29,32,40,62,76,36},\r\n\t\t   {20,69,36,41,72,30,23,88,34,62,99,69,82,67,59,85,74,4,36,16},\r\n\t\t   {20,73,35,29,78,31,90,1,74,31,49,71,48,86,81,16,23,57,5,54},\r\n\t\t   {1,70,54,71,83,51,54,69,16,92,33,48,61,43,52,1,89,19,67,48}};\r\n\tfor(i=0;i<17;++i)\r\n\t{\r\n\t\tfor(j=0;j<20;++j)\r\n\t\t{\r\n\t\t\tpro=a[i][j]*a[i+1][j]*a[i+2][j]*a[i+3][j];\r\n\t\t\tif(max<pro){\r\n\t\t\t\tmax=pro;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tfor(i=0;i<20;++i)\r\n\t{\r\n\t\tfor(j=0;j<17;++j)\r\n\t\t{\r\n\t\t\tpro=a[i][j]*a[i][j+1]*a[i][j+2]*a[i][j+3];\r\n\t\t\tif(max<pro){\r\n\t\t\t\tmax=pro;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tfor(i=0;i<17;++i)\r\n\t{\r\n\t\tfor(j=0;j<17;++j)\r\n\t\t{\r\n\t\t\tpro=a[i][j]*a[i+1][j+1]*a[i+2][j+2]*a[i+3][j+3];\r\n\t\t\tif(max<pro){\r\n\t\t\t\tmax=pro;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tfor(i=19;i>3;--i)\r\n\t{\r\n\t\tfor(j=0;j<17;++j)\r\n\t\t{\r\n\t\t\tpro=a[i][j]*a[i-1][j+1]*a[i-2][j+2]*a[i-3][j+3];\r\n\t\t\tif(max<pro){\r\n\t\t\t\tmax=pro;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tcout<<max;\r\n\treturn 0;\r\n}\r\n"
  },
  {
    "path": "Problem011/Elixir/solution_1.exs",
    "content": "master_grid_array = \"08,02,22,97,38,15,00,40,00,75,04,05,07,78,52,12,50,77,91,08,\n49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48,04,56,62,00,\n81,49,31,73,55,79,14,29,93,71,40,67,53,88,30,03,49,13,36,65,\n52,70,95,23,04,60,11,42,69,24,68,56,01,32,56,71,37,02,36,91,\n22,31,16,71,51,67,63,89,41,92,36,54,22,40,40,28,66,33,13,80,\n24,47,32,60,99,03,45,02,44,75,33,53,78,36,84,20,35,17,12,50,\n32,98,81,28,64,23,67,10,26,38,40,67,59,54,70,66,18,38,64,70,\n67,26,20,68,02,62,12,20,95,63,94,39,63,08,40,91,66,49,94,21,\n24,55,58,05,66,73,99,26,97,17,78,78,96,83,14,88,34,89,63,72,\n21,36,23,09,75,00,76,44,20,45,35,14,00,61,33,97,34,31,33,95,\n78,17,53,28,22,75,31,67,15,94,03,80,04,62,16,14,09,53,56,92,\n16,39,05,42,96,35,31,47,55,58,88,24,00,17,54,24,36,29,85,57,\n86,56,00,48,35,71,89,07,05,44,44,37,44,60,21,58,51,54,17,58,\n19,80,81,68,05,94,47,69,28,73,92,13,86,52,17,77,04,89,55,40,\n04,52,08,83,97,35,99,16,07,97,57,32,16,26,26,79,33,27,98,66,\n88,36,68,87,57,62,20,72,03,46,33,67,46,55,12,32,63,93,53,69,\n04,42,16,73,38,25,39,11,24,94,72,18,08,46,29,32,40,62,76,36,\n20,69,36,41,72,30,23,88,34,62,99,69,82,67,59,85,74,04,36,16,\n20,73,35,29,78,31,90,01,74,31,49,71,48,86,81,16,23,57,05,54,\n01,70,54,71,83,51,54,69,16,92,33,48,61,43,52,01,89,19,67,48\"\n\ndefmodule GridProduct do\n  def search_grid(grid) do\n    horiz_to_right = grid\n      |> String.split(\"\\n\",trim: true)\n      |> Enum.map(fn x -> map_list_to_i(String.split(x,\",\",trim: true)) end)\n\n    down_right_diag = rev_transpose(0..19,horiz_to_right)\n    combinations(horiz_to_right,down_right_diag,0,0,0)\n  end\n\n  def combinations(_,_,outer,_,final) when outer > 19, do: final\n  def combinations(horiz,diag,outer,inner,final) when inner <= 19 do\n    final = find_val(horiz,diag,inner,outer,final)\n    combinations(horiz,diag,outer,inner+1,final)\n  end\n\n  def combinations(horiz,diag,outer,inner,final) when outer <= 19 do\n    final = find_val(horiz,diag,inner,outer,final)\n    combinations(horiz,diag,outer+1,0,final)\n  end\n\n  def find_val(horiz,diag,inner,outer,final) do\n    val_h = find_product_h(horiz,inner,outer)\n    val_d = find_product_d(diag,inner,outer)\n\n    cond do\n      val_h > final && val_h > val_d ->\n        val_h\n      val_d > final && val_d > val_h ->\n        val_d\n      val_d < final && val_h < final ->\n        final\n    end\n  end\n\n  def find_product_h(grid,col,row) do\n    grid\n      |> coord_vals([[row,col],[row,col+1],[row,col+2],[row,col+3]])\n      |> Enum.reduce(1, fn a,b -> a * b end)\n  end\n\n  def find_product_d(grid,col,row) do\n    grid\n      |> coord_vals([[row,col],[row+1,col+1],[row+2,col+2],[row+3,col+3]])\n      |> Enum.reduce(1, fn a,b -> a * b end)\n  end\n\n  def coord_vals(l,i) do\n    i |> Stream.map(fn t_i -> coord_val(l, Enum.at(t_i,0), Enum.at(t_i,1)) end)\n  end\n\n  def coord_val(a,b,c) do\n    a |> Enum.at(b,[]) |> Enum.at(c,0)\n  end\n\n  def map_list_to_i(a) do\n    Enum.map(a, fn b -> String.to_integer(b) end)\n  end\n\n  def rev_transpose(a,b) do\n    Enum.map(a, fn x -> Enum.reverse(Enum.map(b, fn y -> Enum.at(y,x) end)) end)\n  end\nend\n\nIO.puts GridProduct.search_grid(master_grid_array)"
  },
  {
    "path": "Problem011/Haskell/solution_1.hs",
    "content": "list = [08,02,22,97,38,15,00,40,00,75,04,05,07,78,52,12,50,77,91,08,\n        49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48,04,56,62,00,\n        81,49,31,73,55,79,14,29,93,71,40,67,53,88,30,03,49,13,36,65,\n        52,70,95,23,04,60,11,42,69,24,68,56,01,32,56,71,37,02,36,91,\n        22,31,16,71,51,67,63,89,41,92,36,54,22,40,40,28,66,33,13,80,\n        24,47,32,60,99,03,45,02,44,75,33,53,78,36,84,20,35,17,12,50,\n        32,98,81,28,64,23,67,10,26,38,40,67,59,54,70,66,18,38,64,70,\n        67,26,20,68,02,62,12,20,95,63,94,39,63,08,40,91,66,49,94,21,\n        24,55,58,05,66,73,99,26,97,17,78,78,96,83,14,88,34,89,63,72,\n        21,36,23,09,75,00,76,44,20,45,35,14,00,61,33,97,34,31,33,95,\n        78,17,53,28,22,75,31,67,15,94,03,80,04,62,16,14,09,53,56,92,\n        16,39,05,42,96,35,31,47,55,58,88,24,00,17,54,24,36,29,85,57,\n        86,56,00,48,35,71,89,07,05,44,44,37,44,60,21,58,51,54,17,58,\n        19,80,81,68,05,94,47,69,28,73,92,13,86,52,17,77,04,89,55,40,\n        04,52,08,83,97,35,99,16,07,97,57,32,16,26,26,79,33,27,98,66,\n        88,36,68,87,57,62,20,72,03,46,33,67,46,55,12,32,63,93,53,69,\n        04,42,16,73,38,25,39,11,24,94,72,18,08,46,29,32,40,62,76,36,\n        20,69,36,41,72,30,23,88,34,62,99,69,82,67,59,85,74,04,36,16,\n        20,73,35,29,78,31,90,01,74,31,49,71,48,86,81,16,23,57,05,54,\n        01,70,54,71,83,51,54,69,16,92,33,48,61,43,52,01,89,19,67,48] :: [Int]\n\ntype Coord = (Int, Int)\ntype Way   = [Coord]\ntype Table = [[Int]]\n\n-- slice a simple list to a list of sublists\nslice :: Int -> [Int] -> Table\nslice size [] = []\nslice size xs = [take size xs] ++ slice size (drop size xs)\n\n-- left-up right-down\nlurd :: Int -> Int -> [Way]\nlurd limit len = [[(x,y), (x+1,y+1), (x+2,y+2), (x+3,y+3)] | x <- [0..limit - len], y <- [0..limit - len]]\n\n-- left-down right-up\nldru :: Int -> Int -> [Way]\nldru limit len = [[(x,y), (x+1,y-1), (x+2,y-2), (x+3,y-3)] | x <- [0..limit-len], y <- [len..limit-1]]\n\n-- left right\nlr :: Int -> Int -> [Way]\nlr limit len = [[(x,y), (x,y+1), (x,y+2), (x,y+3)] | x <- [0..limit-1], y <- [0..limit-len]]\n\n-- up down\nud :: Int -> Int -> [Way]\nud limit len = [[(x,y), (x+1,y), (x+2,y), (x+3,y)] | x <- [0..limit-len], y <- [0..limit-1]]\n\n-- receives a list of coords and return the matching value in the table\nget_values :: Way -> Table -> [Int]\nget_values _ []             = []\nget_values [] _             = []\nget_values ((x,y):xs) table = ((table !! x) !! y) : get_values xs table\n\nmain :: IO ()\nmain = do\n    let table = slice 20 list\n    let coords = (lurd 20 4) ++ (ldru 20 4) ++ (lr 20 4) ++ (ud 20 4)\n\n    let values = [get_values way table | way <- coords]\n\n    let result = maximum . map product \n    print . result $ values\n"
  },
  {
    "path": "Problem011/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\nimport sys\nif sys.version_info >= (3, 0):\n    from functools import reduce\n\n\ngrid = \"\"\"08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08\n49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00\n81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65\n52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91\n22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80\n24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50\n32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70\n67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21\n24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72\n21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95\n78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92\n16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57\n86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58\n19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40\n04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66\n88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69\n04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36\n20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16\n20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54\n01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48\"\"\"\n\n\ndef arrowsSearch(matrix, n):\n    x_len, y_len = len(matrix[0]), len(matrix)\n    points = []\n    for y in range(x_len):\n        for x in range(y_len):\n            # arrows in diagonals:\n            # (down-up - left-right)\n            if abs(x - x_len) >= n and abs(y - y_len) >= n:\n                points.append([(x + d, y + d) for d in range(0, n)])\n            # (up-down - left-right)\n            # y > x because i want just the left-right diagonals\n            if abs((x - y) - (x_len - y_len)) + 1 >= n and y > x:\n                points.append([(d, y - (d - x)) for d in range(x, x + n)])\n            # arrows in vertical and horizontal:\n            # left-right\n            if abs(x - x_len) >= n:\n                points.append([(new_x, y) for new_x in range(x, x + n)])\n            # down-up\n            if abs(y - y_len) >= n:\n                points.append([(x, new_y) for new_y in range(y, y + n)])\n    return points\n\n\ndef solution(grid, arrow_length):\n    grid = [x for x in map(lambda line: [int(num) for num in line],\n            [y.split() for y in [x for x in grid.split('\\n')]])]\n    arrows = arrowsSearch(grid, arrow_length)\n    answer = max(map(lambda arrow:\n        reduce(lambda a, b: a * b, [grid[y][x] for x, y in arrow]), arrows))\n    return answer\n\nprint(solution(grid, 4))\n"
  },
  {
    "path": "Problem011/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=11)\n"
  },
  {
    "path": "Problem012/.hash",
    "content": "8091de7d285989bbfa9a2f9f3bdcc7c0"
  },
  {
    "path": "Problem012/C++/solution_1.cpp",
    "content": "#include<bits/stdc++.h>\nusing namespace std;\n#define MAX 1000000000\n#define LL long long int\nLL countDivisors(LL n)\n{\n    LL cnt = 0;\n    for (int i = 1; i <= sqrt(n); i++) {\n        if (n % i == 0) {\n            if (n / i == i) cnt++;\n            else cnt+=2;\n        }\n    }\n    return cnt;\n}\nint main()\n{\n    LL i;\n    for(i=1;i<MAX;i++)\n    {\n       LL a = (i*(i+1))/2;\n       LL k = countDivisors(a);\n       if(k>500)\n       {\n           printf(\"%lld\\n\",a);\n           break;\n       }\n    }\n    return 0;\n}\n"
  },
  {
    "path": "Problem012/Elixir/solution_1.exs",
    "content": "# Author: lubien\n\ndefmodule Euler12 do\n  def solve do\n    Stream.iterate(1, &(&1 + 1))\n      |> Stream.scan(&(&1 + &2))\n      |> Stream.drop_while(fn i -> count_divisors(i) < 500 end)\n      |> Enum.take(1)\n      |> hd\n  end\n\n  def count_divisors(n) do\n    sqrt = :math.sqrt(n)\n\n    count = 1..(round(sqrt))\n      |> Stream.filter(fn i -> rem(n, i) == 0 end)\n      |> Enum.count\n\n    if sqrt * sqrt == n do\n      count * 2\n    else\n      count * 2 - 1\n    end\n  end\nend\n\nEuler12.solve\n  |> IO.puts\n\n"
  },
  {
    "path": "Problem012/Haskell/solution_1.hs",
    "content": "triangleList :: [Int]\n--triangleList = map ((\\xs -> (sum xs, xs)) . enumFromTo 1) [1..]\ntriangleList = map (\\n -> n * (n + 1) `div` 2) [1..]\n\nmain :: IO ()\nmain = print $ triangleList !! 501\n\n-- Nao ta dando certo, que houve ? :("
  },
  {
    "path": "Problem012/JavaScript/solution_1.js",
    "content": "\"use strict\"\r\n\r\nfunction checkPrime(input, list) {\r\n    for (let i = 0; i < list.length && list[i] < input ** 0.5; i++) \r\n        if (!(input % list[i])) return 0;\r\n    return 1;\r\n}\r\n\r\nfunction getNumOfDivisor(input) {\r\n    let prime_list = [2,3];\r\n    let numDivisors = 1, counter = 1, k = 1;\r\n    if (!(input % 2)) {\r\n        input /= 2;\r\n        while(!(input%2)) ++counter && (input /= 2);\r\n        numDivisors *= ++counter; \r\n    }\r\n    if (!(input % 3)) {\r\n        (counter = 1) && (input /= 3);\r\n        while(!(input % 3)) ++counter && (input /= 3);\r\n        numDivisors *= ++counter;\r\n    }\r\n    while (6 * k - 1 <= input) {\r\n        if (checkPrime(6 * k - 1, prime_list)) {\r\n            prime_list.push(6 * k - 1);\r\n            if (!(input % (6 * k - 1))) {\r\n                (counter = 1) && (input /= (6 * k  -1));\r\n                while (!(input % (6 * k - 1))) ++counter && (input /= (6 * k -1));\r\n                numDivisors *= ++counter;\r\n            }\r\n        }\r\n        if ((6 * k + 1) <= input && checkPrime(6 * k + 1, prime_list)) {\r\n            prime_list.push(6 * k + 1);\r\n            if (!(input % (6 * k + 1))) {\r\n                (counter = 1) && (input /= (6 * k + 1));\r\n                while (!(input % (6 * k + 1))) ++counter && (input /= (6 * k + 1));\r\n                numDivisors *= ++counter;\r\n            }\r\n        }\r\n        k++;\r\n    }\r\n    return numDivisors;\r\n}\r\n\r\nfunction getTriangleNumber() {\r\n    let n = 45, numDivisors = 0;\r\n    while (numDivisors <= 500) {\r\n        (numDivisors = getNumOfDivisor(n * (n + 1)/2)) && ++n;\r\n    }\r\n    return ((n-1) * n / 2);\r\n}\r\n\r\nconsole.log(getTriangleNumber());\r\n"
  },
  {
    "path": "Problem012/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n# Highly divisible triangular number\n# Problem 12\n\n# The sequence of triangle numbers is generated by adding the natural numbers.\n# So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28.\n# The first ten terms would be:\n\n# 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...\n\n# Let us list the factors of the first seven triangle numbers:\n\n#      1: 1\n#      3: 1,3\n#      6: 1,2,3,6\n#     10: 1,2,5,10\n#     15: 1,3,5,15\n#     21: 1,3,7,21\n#     28: 1,2,4,7,14,28\n\n# We can see that 28 is the first triangle number to have over five divisors.\n\n# What is the value of the first triangle number\n# to have over five hundred divisors?\n\nfrom itertools import combinations, count\nfrom functools import reduce\n\n\ndef trianglenums():\n    for n in count(start=1, step=1):\n        yield n * (n + 1) // 2\n\n\ndef factoring(n):\n    divs = [1]\n    i = 2\n    while n > 1:\n        while not n % i:\n            n /= i\n            divs.append(i)\n        i += 1\n    return divs\n\n\ndef divisors(n):\n    divs = factoring(n)\n    primes = divs[1:]\n\n    for j in range(1, len(primes)):\n        for comb in combinations(primes, j + 1):\n            newdiv = reduce(lambda x, y: x*y, comb)\n            if newdiv <= n and newdiv not in divs:\n                divs.append(newdiv)\n    return len(divs)\n\n\n# external thing whose I found on thread of that problem\n# resuming all (one line! D:) FDP! (divisors + factoring function).\n# The perfomance it's the same\ndef factors(n):\n    return set(reduce(list.__add__, ([i, n//i] for i in range(1, int(n ** 0.5) + 1) if not n % i))) \n\n\nfor i in trianglenums():\n    if divisors(i) > 500:\n        print(i)\n        break\n"
  },
  {
    "path": "Problem012/Python/solution_2.py",
    "content": "# Good Solution found on forum thread in the projecteuler\n\nfrom functools import reduce\n\n\ndef divisors(x):\n    '''\n    exponents(28) --> 6 because 28 = 2**2 * 7*1:\n    total number of divisors of 28: (2+1)*(1+1) = 6\n    '''\n    expList = []\n    count = 0\n    divisor = 2\n    while divisor <= x:\n        while x % divisor == 0:\n            x = x/divisor\n            count += 1\n        if count != 0:\n            expList.append(count+1)\n        divisor += 1\n        count = 0\n    return reduce(lambda x, y: x * y, expList, 1)\n\n\n# Find the first triangle number to have over n divisors\ndef diviTri(n):\n    '''\n    Triangle numbers = sum of all previous the natural numbers\n    Ex: The 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28\n    The first triangular number to have over 5 divisors is 28,\n    whose divisors are 1, 2, 4, 7, 14, 28\n    '''\n\n    natural = 1\n    triangular = 0\n\n    while True:\n        triangular += natural\n        natural += 1\n        if divisors(triangular) > n:\n            break\n    # print \"First triangular number to have over\", n, \"divisors:\",  triangular\n    return triangular\n\nprint(diviTri(500))\n"
  },
  {
    "path": "Problem012/Python/solution_3.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n# Highly divisible triangular number\n# Problem 12\n\n# The sequence of triangle numbers is generated by adding the natural numbers.\n# So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28.\n# The first ten terms would be:\n\n# 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...\n\n# Let us list the factors of the first seven triangle numbers:\n\n#      1: 1\n#      3: 1,3\n#      6: 1,2,3,6\n#     10: 1,2,5,10\n#     15: 1,3,5,15\n#     21: 1,3,7,21\n#     28: 1,2,4,7,14,28\n\n# We can see that 28 is the first triangle number to have over five divisors.\n\n# What is the value of the first triangle number\n# to have over five hundred divisors?\n\nfrom functools import reduce\nfrom itertools import count\n\n\ndef trianglenums():\n    for n in count(start=1, step=1):\n        yield n * (n + 1) // 2\n\n\ndef divisors(n):\n    exps = []\n    i = 2\n    while n > 1:\n        count = 0\n        while n % i == 0:\n            n /= i\n            count += 1\n        if count != 0:\n            exps.append(count + 1)\n        i += 1\n    return reduce(lambda x, y: x * y, exps, 1)\n\n\nfor i in trianglenums():\n    if divisors(i) > 500:\n        print(i)\n        quit()\n"
  },
  {
    "path": "Problem012/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=12)\n"
  },
  {
    "path": "Problem013/.hash",
    "content": "361113f19fd302adc31268f8283a4f2d"
  },
  {
    "path": "Problem013/Elixir/solution_1.exs",
    "content": "# Author: G4BB3R\n\n   [37107287533902102798797998220837590246510135740250,\n    46376937677490009712648124896970078050417018260538,\n    74324986199524741059474233309513058123726617309629,\n    91942213363574161572522430563301811072406154908250,\n    23067588207539346171171980310421047513778063246676,\n    89261670696623633820136378418383684178734361726757,\n    28112879812849979408065481931592621691275889832738,\n    44274228917432520321923589422876796487670272189318,\n    47451445736001306439091167216856844588711603153276,\n    70386486105843025439939619828917593665686757934951,\n    62176457141856560629502157223196586755079324193331,\n    64906352462741904929101432445813822663347944758178,\n    92575867718337217661963751590579239728245598838407,\n    58203565325359399008402633568948830189458628227828,\n    80181199384826282014278194139940567587151170094390,\n    35398664372827112653829987240784473053190104293586,\n    86515506006295864861532075273371959191420517255829,\n    71693888707715466499115593487603532921714970056938,\n    54370070576826684624621495650076471787294438377604,\n    53282654108756828443191190634694037855217779295145,\n    36123272525000296071075082563815656710885258350721,\n    45876576172410976447339110607218265236877223636045,\n    17423706905851860660448207621209813287860733969412,\n    81142660418086830619328460811191061556940512689692,\n    51934325451728388641918047049293215058642563049483,\n    62467221648435076201727918039944693004732956340691,\n    15732444386908125794514089057706229429197107928209,\n    55037687525678773091862540744969844508330393682126,\n    18336384825330154686196124348767681297534375946515,\n    80386287592878490201521685554828717201219257766954,\n    78182833757993103614740356856449095527097864797581,\n    16726320100436897842553539920931837441497806860984,\n    48403098129077791799088218795327364475675590848030,\n    87086987551392711854517078544161852424320693150332,\n    59959406895756536782107074926966537676326235447210,\n    69793950679652694742597709739166693763042633987085,\n    41052684708299085211399427365734116182760315001271,\n    65378607361501080857009149939512557028198746004375,\n    35829035317434717326932123578154982629742552737307,\n    94953759765105305946966067683156574377167401875275,\n    88902802571733229619176668713819931811048770190271,\n    25267680276078003013678680992525463401061632866526,\n    36270218540497705585629946580636237993140746255962,\n    24074486908231174977792365466257246923322810917141,\n    91430288197103288597806669760892938638285025333403,\n    34413065578016127815921815005561868836468420090470,\n    23053081172816430487623791969842487255036638784583,\n    11487696932154902810424020138335124462181441773470,\n    63783299490636259666498587618221225225512486764533,\n    67720186971698544312419572409913959008952310058822,\n    95548255300263520781532296796249481641953868218774,\n    76085327132285723110424803456124867697064507995236,\n    37774242535411291684276865538926205024910326572967,\n    23701913275725675285653248258265463092207058596522,\n    29798860272258331913126375147341994889534765745501,\n    18495701454879288984856827726077713721403798879715,\n    38298203783031473527721580348144513491373226651381,\n    34829543829199918180278916522431027392251122869539,\n    40957953066405232632538044100059654939159879593635,\n    29746152185502371307642255121183693803580388584903,\n    41698116222072977186158236678424689157993532961922,\n    62467957194401269043877107275048102390895523597457,\n    23189706772547915061505504953922979530901129967519,\n    86188088225875314529584099251203829009407770775672,\n    11306739708304724483816533873502340845647058077308,\n    82959174767140363198008187129011875491310547126581,\n    97623331044818386269515456334926366572897563400500,\n    42846280183517070527831839425882145521227251250327,\n    55121603546981200581762165212827652751691296897789,\n    32238195734329339946437501907836945765883352399886,\n    75506164965184775180738168837861091527357929701337,\n    62177842752192623401942399639168044983993173312731,\n    32924185707147349566916674687634660915035914677504,\n    99518671430235219628894890102423325116913619626622,\n    73267460800591547471830798392868535206946944540724,\n    76841822524674417161514036427982273348055556214818,\n    97142617910342598647204516893989422179826088076852,\n    87783646182799346313767754307809363333018982642090,\n    10848802521674670883215120185883543223812876952786,\n    71329612474782464538636993009049310363619763878039,\n    62184073572399794223406235393808339651327408011116,\n    66627891981488087797941876876144230030984490851411,\n    60661826293682836764744779239180335110989069790714,\n    85786944089552990653640447425576083659976645795096,\n    66024396409905389607120198219976047599490197230297,\n    64913982680032973156037120041377903785566085089252,\n    16730939319872750275468906903707539413042652315011,\n    94809377245048795150954100921645863754710598436791,\n    78639167021187492431995700641917969777599028300699,\n    15368713711936614952811305876380278410754449733078,\n    40789923115535562561142322423255033685442488917353,\n    44889911501440648020369068063960672322193204149535,\n    41503128880339536053299340368006977710650566631954,\n    81234880673210146739058568557934581403627822703280,\n    82616570773948327592232845941706525094512325230608,\n    22918802058777319719839450180888072429661980811197,\n    77158542502016545090413245809786882778948721859617,\n    72107838435069186155435662884062257473692284509516,\n    20849603980134001723930671666823555245252804609722,\n    53503534226472524250874054075591789781264330331690]\n\n    |> Enum.sum\n    |> inspect\n    |> String.slice(0, 10)\n    |> IO.puts\n\n"
  },
  {
    "path": "Problem013/Haskell/solution_1.hs",
    "content": "main :: IO ()\nmain = putStr $ take 10 $ show $ sum numbers\n\nnumbers = [37107287533902102798797998220837590246510135740250,\n           46376937677490009712648124896970078050417018260538,\n           74324986199524741059474233309513058123726617309629,\n           91942213363574161572522430563301811072406154908250,\n           23067588207539346171171980310421047513778063246676,\n           89261670696623633820136378418383684178734361726757,\n           28112879812849979408065481931592621691275889832738,\n           44274228917432520321923589422876796487670272189318,\n           47451445736001306439091167216856844588711603153276,\n           70386486105843025439939619828917593665686757934951,\n           62176457141856560629502157223196586755079324193331,\n           64906352462741904929101432445813822663347944758178,\n           92575867718337217661963751590579239728245598838407,\n           58203565325359399008402633568948830189458628227828,\n           80181199384826282014278194139940567587151170094390,\n           35398664372827112653829987240784473053190104293586,\n           86515506006295864861532075273371959191420517255829,\n           71693888707715466499115593487603532921714970056938,\n           54370070576826684624621495650076471787294438377604,\n           53282654108756828443191190634694037855217779295145,\n           36123272525000296071075082563815656710885258350721,\n           45876576172410976447339110607218265236877223636045,\n           17423706905851860660448207621209813287860733969412,\n           81142660418086830619328460811191061556940512689692,\n           51934325451728388641918047049293215058642563049483,\n           62467221648435076201727918039944693004732956340691,\n           15732444386908125794514089057706229429197107928209,\n           55037687525678773091862540744969844508330393682126,\n           18336384825330154686196124348767681297534375946515,\n           80386287592878490201521685554828717201219257766954,\n           78182833757993103614740356856449095527097864797581,\n           16726320100436897842553539920931837441497806860984,\n           48403098129077791799088218795327364475675590848030,\n           87086987551392711854517078544161852424320693150332,\n           59959406895756536782107074926966537676326235447210,\n           69793950679652694742597709739166693763042633987085,\n           41052684708299085211399427365734116182760315001271,\n           65378607361501080857009149939512557028198746004375,\n           35829035317434717326932123578154982629742552737307,\n           94953759765105305946966067683156574377167401875275,\n           88902802571733229619176668713819931811048770190271,\n           25267680276078003013678680992525463401061632866526,\n           36270218540497705585629946580636237993140746255962,\n           24074486908231174977792365466257246923322810917141,\n           91430288197103288597806669760892938638285025333403,\n           34413065578016127815921815005561868836468420090470,\n           23053081172816430487623791969842487255036638784583,\n           11487696932154902810424020138335124462181441773470,\n           63783299490636259666498587618221225225512486764533,\n           67720186971698544312419572409913959008952310058822,\n           95548255300263520781532296796249481641953868218774,\n           76085327132285723110424803456124867697064507995236,\n           37774242535411291684276865538926205024910326572967,\n           23701913275725675285653248258265463092207058596522,\n           29798860272258331913126375147341994889534765745501,\n           18495701454879288984856827726077713721403798879715,\n           38298203783031473527721580348144513491373226651381,\n           34829543829199918180278916522431027392251122869539,\n           40957953066405232632538044100059654939159879593635,\n           29746152185502371307642255121183693803580388584903,\n           41698116222072977186158236678424689157993532961922,\n           62467957194401269043877107275048102390895523597457,\n           23189706772547915061505504953922979530901129967519,\n           86188088225875314529584099251203829009407770775672,\n           11306739708304724483816533873502340845647058077308,\n           82959174767140363198008187129011875491310547126581,\n           97623331044818386269515456334926366572897563400500,\n           42846280183517070527831839425882145521227251250327,\n           55121603546981200581762165212827652751691296897789,\n           32238195734329339946437501907836945765883352399886,\n           75506164965184775180738168837861091527357929701337,\n           62177842752192623401942399639168044983993173312731,\n           32924185707147349566916674687634660915035914677504,\n           99518671430235219628894890102423325116913619626622,\n           73267460800591547471830798392868535206946944540724,\n           76841822524674417161514036427982273348055556214818,\n           97142617910342598647204516893989422179826088076852,\n           87783646182799346313767754307809363333018982642090,\n           10848802521674670883215120185883543223812876952786,\n           71329612474782464538636993009049310363619763878039,\n           62184073572399794223406235393808339651327408011116,\n           66627891981488087797941876876144230030984490851411,\n           60661826293682836764744779239180335110989069790714,\n           85786944089552990653640447425576083659976645795096,\n           66024396409905389607120198219976047599490197230297,\n           64913982680032973156037120041377903785566085089252,\n           16730939319872750275468906903707539413042652315011,\n           94809377245048795150954100921645863754710598436791,\n           78639167021187492431995700641917969777599028300699,\n           15368713711936614952811305876380278410754449733078,\n           40789923115535562561142322423255033685442488917353,\n           44889911501440648020369068063960672322193204149535,\n           41503128880339536053299340368006977710650566631954,\n           81234880673210146739058568557934581403627822703280,\n           82616570773948327592232845941706525094512325230608,\n           22918802058777319719839450180888072429661980811197,\n           77158542502016545090413245809786882778948721859617,\n           72107838435069186155435662884062257473692284509516,\n           20849603980134001723930671666823555245252804609722,\n           53503534226472524250874054075591789781264330331690]"
  },
  {
    "path": "Problem013/Lua/solution_1.lua",
    "content": "-- Author: G4BB3R\n\nnumbers = {37107287533902102798797998220837590246510135740250,\n           46376937677490009712648124896970078050417018260538,\n           74324986199524741059474233309513058123726617309629,\n           91942213363574161572522430563301811072406154908250,\n           23067588207539346171171980310421047513778063246676,\n           89261670696623633820136378418383684178734361726757,\n           28112879812849979408065481931592621691275889832738,\n           44274228917432520321923589422876796487670272189318,\n           47451445736001306439091167216856844588711603153276,\n           70386486105843025439939619828917593665686757934951,\n           62176457141856560629502157223196586755079324193331,\n           64906352462741904929101432445813822663347944758178,\n           92575867718337217661963751590579239728245598838407,\n           58203565325359399008402633568948830189458628227828,\n           80181199384826282014278194139940567587151170094390,\n           35398664372827112653829987240784473053190104293586,\n           86515506006295864861532075273371959191420517255829,\n           71693888707715466499115593487603532921714970056938,\n           54370070576826684624621495650076471787294438377604,\n           53282654108756828443191190634694037855217779295145,\n           36123272525000296071075082563815656710885258350721,\n           45876576172410976447339110607218265236877223636045,\n           17423706905851860660448207621209813287860733969412,\n           81142660418086830619328460811191061556940512689692,\n           51934325451728388641918047049293215058642563049483,\n           62467221648435076201727918039944693004732956340691,\n           15732444386908125794514089057706229429197107928209,\n           55037687525678773091862540744969844508330393682126,\n           18336384825330154686196124348767681297534375946515,\n           80386287592878490201521685554828717201219257766954,\n           78182833757993103614740356856449095527097864797581,\n           16726320100436897842553539920931837441497806860984,\n           48403098129077791799088218795327364475675590848030,\n           87086987551392711854517078544161852424320693150332,\n           59959406895756536782107074926966537676326235447210,\n           69793950679652694742597709739166693763042633987085,\n           41052684708299085211399427365734116182760315001271,\n           65378607361501080857009149939512557028198746004375,\n           35829035317434717326932123578154982629742552737307,\n           94953759765105305946966067683156574377167401875275,\n           88902802571733229619176668713819931811048770190271,\n           25267680276078003013678680992525463401061632866526,\n           36270218540497705585629946580636237993140746255962,\n           24074486908231174977792365466257246923322810917141,\n           91430288197103288597806669760892938638285025333403,\n           34413065578016127815921815005561868836468420090470,\n           23053081172816430487623791969842487255036638784583,\n           11487696932154902810424020138335124462181441773470,\n           63783299490636259666498587618221225225512486764533,\n           67720186971698544312419572409913959008952310058822,\n           95548255300263520781532296796249481641953868218774,\n           76085327132285723110424803456124867697064507995236,\n           37774242535411291684276865538926205024910326572967,\n           23701913275725675285653248258265463092207058596522,\n           29798860272258331913126375147341994889534765745501,\n           18495701454879288984856827726077713721403798879715,\n           38298203783031473527721580348144513491373226651381,\n           34829543829199918180278916522431027392251122869539,\n           40957953066405232632538044100059654939159879593635,\n           29746152185502371307642255121183693803580388584903,\n           41698116222072977186158236678424689157993532961922,\n           62467957194401269043877107275048102390895523597457,\n           23189706772547915061505504953922979530901129967519,\n           86188088225875314529584099251203829009407770775672,\n           11306739708304724483816533873502340845647058077308,\n           82959174767140363198008187129011875491310547126581,\n           97623331044818386269515456334926366572897563400500,\n           42846280183517070527831839425882145521227251250327,\n           55121603546981200581762165212827652751691296897789,\n           32238195734329339946437501907836945765883352399886,\n           75506164965184775180738168837861091527357929701337,\n           62177842752192623401942399639168044983993173312731,\n           32924185707147349566916674687634660915035914677504,\n           99518671430235219628894890102423325116913619626622,\n           73267460800591547471830798392868535206946944540724,\n           76841822524674417161514036427982273348055556214818,\n           97142617910342598647204516893989422179826088076852,\n           87783646182799346313767754307809363333018982642090,\n           10848802521674670883215120185883543223812876952786,\n           71329612474782464538636993009049310363619763878039,\n           62184073572399794223406235393808339651327408011116,\n           66627891981488087797941876876144230030984490851411,\n           60661826293682836764744779239180335110989069790714,\n           85786944089552990653640447425576083659976645795096,\n           66024396409905389607120198219976047599490197230297,\n           64913982680032973156037120041377903785566085089252,\n           16730939319872750275468906903707539413042652315011,\n           94809377245048795150954100921645863754710598436791,\n           78639167021187492431995700641917969777599028300699,\n           15368713711936614952811305876380278410754449733078,\n           40789923115535562561142322423255033685442488917353,\n           44889911501440648020369068063960672322193204149535,\n           41503128880339536053299340368006977710650566631954,\n           81234880673210146739058568557934581403627822703280,\n           82616570773948327592232845941706525094512325230608,\n           22918802058777319719839450180888072429661980811197,\n           77158542502016545090413245809786882778948721859617,\n           72107838435069186155435662884062257473692284509516,\n           20849603980134001723930671666823555245252804609722,\n           53503534226472524250874054075591789781264330331690}\n\nlocal soma = 0\nfor _, v in pairs(numbers) do\n  soma = soma + v\nend\nlocal resultado = string.sub(string.format(\"%18.0f\", soma), 1, 10)\nprint(resultado)\n"
  },
  {
    "path": "Problem013/Python/solution_1.py",
    "content": "# Work out the first ten digits of the sum of the following one-hundred 50-digit numbers.\ndata = '''37107287533902102798797998220837590246510135740250\n46376937677490009712648124896970078050417018260538\n74324986199524741059474233309513058123726617309629\n91942213363574161572522430563301811072406154908250\n23067588207539346171171980310421047513778063246676\n89261670696623633820136378418383684178734361726757\n28112879812849979408065481931592621691275889832738\n44274228917432520321923589422876796487670272189318\n47451445736001306439091167216856844588711603153276\n70386486105843025439939619828917593665686757934951\n62176457141856560629502157223196586755079324193331\n64906352462741904929101432445813822663347944758178\n92575867718337217661963751590579239728245598838407\n58203565325359399008402633568948830189458628227828\n80181199384826282014278194139940567587151170094390\n35398664372827112653829987240784473053190104293586\n86515506006295864861532075273371959191420517255829\n71693888707715466499115593487603532921714970056938\n54370070576826684624621495650076471787294438377604\n53282654108756828443191190634694037855217779295145\n36123272525000296071075082563815656710885258350721\n45876576172410976447339110607218265236877223636045\n17423706905851860660448207621209813287860733969412\n81142660418086830619328460811191061556940512689692\n51934325451728388641918047049293215058642563049483\n62467221648435076201727918039944693004732956340691\n15732444386908125794514089057706229429197107928209\n55037687525678773091862540744969844508330393682126\n18336384825330154686196124348767681297534375946515\n80386287592878490201521685554828717201219257766954\n78182833757993103614740356856449095527097864797581\n16726320100436897842553539920931837441497806860984\n48403098129077791799088218795327364475675590848030\n87086987551392711854517078544161852424320693150332\n59959406895756536782107074926966537676326235447210\n69793950679652694742597709739166693763042633987085\n41052684708299085211399427365734116182760315001271\n65378607361501080857009149939512557028198746004375\n35829035317434717326932123578154982629742552737307\n94953759765105305946966067683156574377167401875275\n88902802571733229619176668713819931811048770190271\n25267680276078003013678680992525463401061632866526\n36270218540497705585629946580636237993140746255962\n24074486908231174977792365466257246923322810917141\n91430288197103288597806669760892938638285025333403\n34413065578016127815921815005561868836468420090470\n23053081172816430487623791969842487255036638784583\n11487696932154902810424020138335124462181441773470\n63783299490636259666498587618221225225512486764533\n67720186971698544312419572409913959008952310058822\n95548255300263520781532296796249481641953868218774\n76085327132285723110424803456124867697064507995236\n37774242535411291684276865538926205024910326572967\n23701913275725675285653248258265463092207058596522\n29798860272258331913126375147341994889534765745501\n18495701454879288984856827726077713721403798879715\n38298203783031473527721580348144513491373226651381\n34829543829199918180278916522431027392251122869539\n40957953066405232632538044100059654939159879593635\n29746152185502371307642255121183693803580388584903\n41698116222072977186158236678424689157993532961922\n62467957194401269043877107275048102390895523597457\n23189706772547915061505504953922979530901129967519\n86188088225875314529584099251203829009407770775672\n11306739708304724483816533873502340845647058077308\n82959174767140363198008187129011875491310547126581\n97623331044818386269515456334926366572897563400500\n42846280183517070527831839425882145521227251250327\n55121603546981200581762165212827652751691296897789\n32238195734329339946437501907836945765883352399886\n75506164965184775180738168837861091527357929701337\n62177842752192623401942399639168044983993173312731\n32924185707147349566916674687634660915035914677504\n99518671430235219628894890102423325116913619626622\n73267460800591547471830798392868535206946944540724\n76841822524674417161514036427982273348055556214818\n97142617910342598647204516893989422179826088076852\n87783646182799346313767754307809363333018982642090\n10848802521674670883215120185883543223812876952786\n71329612474782464538636993009049310363619763878039\n62184073572399794223406235393808339651327408011116\n66627891981488087797941876876144230030984490851411\n60661826293682836764744779239180335110989069790714\n85786944089552990653640447425576083659976645795096\n66024396409905389607120198219976047599490197230297\n64913982680032973156037120041377903785566085089252\n16730939319872750275468906903707539413042652315011\n94809377245048795150954100921645863754710598436791\n78639167021187492431995700641917969777599028300699\n15368713711936614952811305876380278410754449733078\n40789923115535562561142322423255033685442488917353\n44889911501440648020369068063960672322193204149535\n41503128880339536053299340368006977710650566631954\n81234880673210146739058568557934581403627822703280\n82616570773948327592232845941706525094512325230608\n22918802058777319719839450180888072429661980811197\n77158542502016545090413245809786882778948721859617\n72107838435069186155435662884062257473692284509516\n20849603980134001723930671666823555245252804609722\n53503534226472524250874054075591789781264330331690'''\nprint(str(sum([int(num) for num in [x for x in data.split()]]))[0:10])\n"
  },
  {
    "path": "Problem013/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=13)\n"
  },
  {
    "path": "Problem013/Ruby/solution_1.rb",
    "content": "#Author: tkovs\n\n$numbers = [37107287533902102798797998220837590246510135740250,\n           46376937677490009712648124896970078050417018260538,\n           74324986199524741059474233309513058123726617309629,\n           91942213363574161572522430563301811072406154908250,\n           23067588207539346171171980310421047513778063246676,\n           89261670696623633820136378418383684178734361726757,\n           28112879812849979408065481931592621691275889832738,\n           44274228917432520321923589422876796487670272189318,\n           47451445736001306439091167216856844588711603153276,\n           70386486105843025439939619828917593665686757934951,\n           62176457141856560629502157223196586755079324193331,\n           64906352462741904929101432445813822663347944758178,\n           92575867718337217661963751590579239728245598838407,\n           58203565325359399008402633568948830189458628227828,\n           80181199384826282014278194139940567587151170094390,\n           35398664372827112653829987240784473053190104293586,\n           86515506006295864861532075273371959191420517255829,\n           71693888707715466499115593487603532921714970056938,\n           54370070576826684624621495650076471787294438377604,\n           53282654108756828443191190634694037855217779295145,\n           36123272525000296071075082563815656710885258350721,\n           45876576172410976447339110607218265236877223636045,\n           17423706905851860660448207621209813287860733969412,\n           81142660418086830619328460811191061556940512689692,\n           51934325451728388641918047049293215058642563049483,\n           62467221648435076201727918039944693004732956340691,\n           15732444386908125794514089057706229429197107928209,\n           55037687525678773091862540744969844508330393682126,\n           18336384825330154686196124348767681297534375946515,\n           80386287592878490201521685554828717201219257766954,\n           78182833757993103614740356856449095527097864797581,\n           16726320100436897842553539920931837441497806860984,\n           48403098129077791799088218795327364475675590848030,\n           87086987551392711854517078544161852424320693150332,\n           59959406895756536782107074926966537676326235447210,\n           69793950679652694742597709739166693763042633987085,\n           41052684708299085211399427365734116182760315001271,\n           65378607361501080857009149939512557028198746004375,\n           35829035317434717326932123578154982629742552737307,\n           94953759765105305946966067683156574377167401875275,\n           88902802571733229619176668713819931811048770190271,\n           25267680276078003013678680992525463401061632866526,\n           36270218540497705585629946580636237993140746255962,\n           24074486908231174977792365466257246923322810917141,\n           91430288197103288597806669760892938638285025333403,\n           34413065578016127815921815005561868836468420090470,\n           23053081172816430487623791969842487255036638784583,\n           11487696932154902810424020138335124462181441773470,\n           63783299490636259666498587618221225225512486764533,\n           67720186971698544312419572409913959008952310058822,\n           95548255300263520781532296796249481641953868218774,\n           76085327132285723110424803456124867697064507995236,\n           37774242535411291684276865538926205024910326572967,\n           23701913275725675285653248258265463092207058596522,\n           29798860272258331913126375147341994889534765745501,\n           18495701454879288984856827726077713721403798879715,\n           38298203783031473527721580348144513491373226651381,\n           34829543829199918180278916522431027392251122869539,\n           40957953066405232632538044100059654939159879593635,\n           29746152185502371307642255121183693803580388584903,\n           41698116222072977186158236678424689157993532961922,\n           62467957194401269043877107275048102390895523597457,\n           23189706772547915061505504953922979530901129967519,\n           86188088225875314529584099251203829009407770775672,\n           11306739708304724483816533873502340845647058077308,\n           82959174767140363198008187129011875491310547126581,\n           97623331044818386269515456334926366572897563400500,\n           42846280183517070527831839425882145521227251250327,\n           55121603546981200581762165212827652751691296897789,\n           32238195734329339946437501907836945765883352399886,\n           75506164965184775180738168837861091527357929701337,\n           62177842752192623401942399639168044983993173312731,\n           32924185707147349566916674687634660915035914677504,\n           99518671430235219628894890102423325116913619626622,\n           73267460800591547471830798392868535206946944540724,\n           76841822524674417161514036427982273348055556214818,\n           97142617910342598647204516893989422179826088076852,\n           87783646182799346313767754307809363333018982642090,\n           10848802521674670883215120185883543223812876952786,\n           71329612474782464538636993009049310363619763878039,\n           62184073572399794223406235393808339651327408011116,\n           66627891981488087797941876876144230030984490851411,\n           60661826293682836764744779239180335110989069790714,\n           85786944089552990653640447425576083659976645795096,\n           66024396409905389607120198219976047599490197230297,\n           64913982680032973156037120041377903785566085089252,\n           16730939319872750275468906903707539413042652315011,\n           94809377245048795150954100921645863754710598436791,\n           78639167021187492431995700641917969777599028300699,\n           15368713711936614952811305876380278410754449733078,\n           40789923115535562561142322423255033685442488917353,\n           44889911501440648020369068063960672322193204149535,\n           41503128880339536053299340368006977710650566631954,\n           81234880673210146739058568557934581403627822703280,\n           82616570773948327592232845941706525094512325230608,\n           22918802058777319719839450180888072429661980811197,\n           77158542502016545090413245809786882778948721859617,\n           72107838435069186155435662884062257473692284509516,\n           20849603980134001723930671666823555245252804609722,\n           53503534226472524250874054075591789781264330331690]\n\ndef solve\n    return($numbers.inject(:+).to_s[0..9])\nend\n\nputs(solve)"
  },
  {
    "path": "Problem014/.hash",
    "content": "5052c3765262bb2c6be537abd60b305e"
  },
  {
    "path": "Problem014/Clojure/solution_1.clj",
    "content": ";; wrong solution.\n\n(def bignumbers '(37107287533902102798797998220837590246510135740250\n                  46376937677490009712648124896970078050417018260538\n                  74324986199524741059474233309513058123726617309629\n                  91942213363574161572522430563301811072406154908250\n                  23067588207539346171171980310421047513778063246676\n                  89261670696623633820136378418383684178734361726757\n                  28112879812849979408065481931592621691275889832738\n                  44274228917432520321923589422876796487670272189318\n                  47451445736001306439091167216856844588711603153276\n                  70386486105843025439939619828917593665686757934951\n                  62176457141856560629502157223196586755079324193331\n                  64906352462741904929101432445813822663347944758178\n                  92575867718337217661963751590579239728245598838407\n                  58203565325359399008402633568948830189458628227828\n                  80181199384826282014278194139940567587151170094390\n                  35398664372827112653829987240784473053190104293586\n                  86515506006295864861532075273371959191420517255829\n                  71693888707715466499115593487603532921714970056938\n                  54370070576826684624621495650076471787294438377604\n                  53282654108756828443191190634694037855217779295145\n                  36123272525000296071075082563815656710885258350721\n                  45876576172410976447339110607218265236877223636045\n                  17423706905851860660448207621209813287860733969412\n                  81142660418086830619328460811191061556940512689692\n                  51934325451728388641918047049293215058642563049483\n                  62467221648435076201727918039944693004732956340691\n                  15732444386908125794514089057706229429197107928209\n                  55037687525678773091862540744969844508330393682126\n                  18336384825330154686196124348767681297534375946515\n                  80386287592878490201521685554828717201219257766954\n                  78182833757993103614740356856449095527097864797581\n                  16726320100436897842553539920931837441497806860984\n                  48403098129077791799088218795327364475675590848030\n                  87086987551392711854517078544161852424320693150332\n                  59959406895756536782107074926966537676326235447210\n                  69793950679652694742597709739166693763042633987085\n                  41052684708299085211399427365734116182760315001271\n                  65378607361501080857009149939512557028198746004375\n                  35829035317434717326932123578154982629742552737307\n                  94953759765105305946966067683156574377167401875275\n                  88902802571733229619176668713819931811048770190271\n                  25267680276078003013678680992525463401061632866526\n                  36270218540497705585629946580636237993140746255962\n                  24074486908231174977792365466257246923322810917141\n                  91430288197103288597806669760892938638285025333403\n                  34413065578016127815921815005561868836468420090470\n                  23053081172816430487623791969842487255036638784583\n                  11487696932154902810424020138335124462181441773470\n                  63783299490636259666498587618221225225512486764533\n                  67720186971698544312419572409913959008952310058822\n                  95548255300263520781532296796249481641953868218774\n                  76085327132285723110424803456124867697064507995236\n                  37774242535411291684276865538926205024910326572967\n                  23701913275725675285653248258265463092207058596522\n                  29798860272258331913126375147341994889534765745501\n                  18495701454879288984856827726077713721403798879715\n                  38298203783031473527721580348144513491373226651381\n                  34829543829199918180278916522431027392251122869539\n                  40957953066405232632538044100059654939159879593635\n                  29746152185502371307642255121183693803580388584903\n                  41698116222072977186158236678424689157993532961922\n                  62467957194401269043877107275048102390895523597457\n                  23189706772547915061505504953922979530901129967519\n                  86188088225875314529584099251203829009407770775672\n                  11306739708304724483816533873502340845647058077308\n                  82959174767140363198008187129011875491310547126581\n                  97623331044818386269515456334926366572897563400500\n                  42846280183517070527831839425882145521227251250327\n                  55121603546981200581762165212827652751691296897789\n                  32238195734329339946437501907836945765883352399886\n                  75506164965184775180738168837861091527357929701337\n                  62177842752192623401942399639168044983993173312731\n                  32924185707147349566916674687634660915035914677504\n                  99518671430235219628894890102423325116913619626622\n                  73267460800591547471830798392868535206946944540724\n                  76841822524674417161514036427982273348055556214818\n                  97142617910342598647204516893989422179826088076852\n                  87783646182799346313767754307809363333018982642090\n                  10848802521674670883215120185883543223812876952786\n                  71329612474782464538636993009049310363619763878039\n                  62184073572399794223406235393808339651327408011116\n                  66627891981488087797941876876144230030984490851411\n                  60661826293682836764744779239180335110989069790714\n                  85786944089552990653640447425576083659976645795096\n                  66024396409905389607120198219976047599490197230297\n                  64913982680032973156037120041377903785566085089252\n                  16730939319872750275468906903707539413042652315011\n                  94809377245048795150954100921645863754710598436791\n                  78639167021187492431995700641917969777599028300699\n                  15368713711936614952811305876380278410754449733078\n                  40789923115535562561142322423255033685442488917353\n                  44889911501440648020369068063960672322193204149535\n                  41503128880339536053299340368006977710650566631954\n                  81234880673210146739058568557934581403627822703280\n                  82616570773948327592232845941706525094512325230608\n                  22918802058777319719839450180888072429661980811197\n                  77158542502016545090413245809786882778948721859617\n                  72107838435069186155435662884062257473692284509516\n                  20849603980134001723930671666823555245252804609722\n                  53503534226472524250874054075591789781264330331690))\n\n(defn solution\n  []\n  (->> bignumbers\n       (reduce +)\n       (str)\n       ((fn[x] (subs x 0 10)))))\n\n(println (solution))\n"
  },
  {
    "path": "Problem014/Elixir/solution_1.exs",
    "content": "# Author: lubien\n\ndefmodule Euler14 do\n  def solve() do\n    largest_collatz(1, {0, 0})\n  end\n\n  defp largest_collatz(1_000_000, {_size, current}), do: current\n  defp largest_collatz(n, {size, _current} = acc) do\n    current_size = collatz(n)\n\n    if current_size > size do\n      largest_collatz n + 1, {current_size, n}\n    else\n      largest_collatz n + 1, acc\n    end\n  end\n\n  def collatz(n), do: collatz(n, 1)\n\n  defp collatz(1, acc), do: acc\n  defp collatz(n, acc) do\n    next = if rem(n, 2) == 0 do\n      div(n, 2)\n    else\n      (3 * n) + 1\n    end\n\n    collatz(next, acc + 1)\n  end\nend\n\nEuler14.solve\n  |> IO.puts\n\n"
  },
  {
    "path": "Problem014/Haskell/solution_slow_1.hs",
    "content": "-- Author: G4BB3R\n\ngetCollatzSequenceLen :: Int -> Int\ngetCollatzSequenceLen 1 = 1\ngetCollatzSequenceLen x = 1 + getCollatzSequenceLen (if even x then x `div` 2 else 3 * x + 1)\n\ngetHighestCollatz :: (Int, Int)\ngetHighestCollatz = getHighestCollatz' 1 (0, 0) where\n    getHighestCollatz' :: Int -> (Int, Int) -> (Int, Int)\n    getHighestCollatz' 999999 len = len\n    getHighestCollatz' n (index, len) = let len' = getCollatzSequenceLen n in\n        if len' > len then\n            getHighestCollatz' (n + 1) (n, len')\n        else\n            getHighestCollatz' (n + 1) (index, len)\n\n\nmain :: IO ()\nmain = print $ fst getHighestCollatz\n\n"
  },
  {
    "path": "Problem014/Python/solution_slow_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n# problem14.py dumb solution (not efficient)\n\"\"\"\nLongest Collatz sequence\nProblem 14\n\nThe following iterative sequence is defined for the set of positive integers:\n\nn → n/2 (n is even)\nn → 3n + 1 (n is odd)\n\nUsing the rule above and starting with 13, we generate the following sequence:\n13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1\n\nIt can be seen that this sequence\n(starting at 13 and finishing at 1) contains 10 terms.\nAlthough it has not been proved yet (Collatz Problem),\nit is thought that all starting numbers finish at 1.\n\nWhich starting number, under one million, produces the longest chain?\n\nNOTE: Once the chain starts the terms are allowed to go above one million.\n\"\"\"\n\n\ndef sequence(n):\n    terms = 1\n    while n > 1:\n        if n % 2 == 0:\n            n = n / 2\n        else:\n            n = 3 * n + 1\n        terms += 1\n    return terms\n\n\ndef answer():\n    most = 0\n    i = 1\n    while i < 10 ** 6:\n        s = sequence(i)\n        if s > most:\n            most = s\n            value = i\n        i += 1\n\n    return value\n\nprint(answer())\n"
  },
  {
    "path": "Problem014/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=14)\n"
  },
  {
    "path": "Problem015/.hash",
    "content": "928f3957168ac592c4215dcd04e0b678"
  },
  {
    "path": "Problem015/C/solution_1.c",
    "content": "#include<stdio.h>\nunsigned long long g[21][21];\nint main() \n{ \n    int j,i;\n    for ( i = 0; i < 21; ++i) {\n        g[i][0] = 1;\n        g[0][i] = 1;\n    }\n    for (i = 1; i < 21; ++i) {\n        for (j = 1; j < 21; ++j) {\n            g[i][j] = g[i-1][j] + g[i][j-1];\n        }\n    }\n    printf(\"%lld\\n\", g[20][20]);\n    return 0;\n}\n"
  },
  {
    "path": "Problem015/Clojure/solution_1.clj",
    "content": ";; Author: G4BB3R\n\n(defn fat [n]\n    (if (<= n 1)\n        1\n        (* n (fat (- n 1)))))\n\n(defn fatorial [n]\n  (fat (bigint n)))\n\n\n;; (print (/ (fat 40) (Math/pow (fat 20) 2) )) overflow man\n(println (str(bigint (/ (fatorial (bigint 40)) (Math/pow (fat (bigint 20)) 2) ))))\n\n;; print(fat(40) / fat(20) ^ 2)\n"
  },
  {
    "path": "Problem015/Elixir/solution_1.exs",
    "content": "# Author: G4BB3R\n\ndefmodule Fat do\n\n\tdef fatorial(1), do: 1\n\tdef fatorial(n), do: n * fatorial(n - 1)\n\nend\n\n\tIO.puts round(Fat.fatorial(40) / round(:math.pow(Fat.fatorial(20), 2)))\n"
  },
  {
    "path": "Problem015/Haskell/solution_1.hs",
    "content": "{--\nStarting in the top left corner of a 2×2 grid, and only being able to move to\nthe right and down, there are exactly 6 routes to the bottom right corner.\nHow many such routes are there through a 20×20 grid?\n-}\n\nmain :: IO ()\nmain = print $ div (fat 40) ((fat 20)^2)\n         where fat = (\\x -> product [1..x])\n"
  },
  {
    "path": "Problem015/Haskell/solution_2.hs",
    "content": "-- Author: G4BB3R\n\nmain :: IO ()\nmain = print $ div (fat 40 :: Integer) (fat 20 ^ (2 :: Integer))\n         where fat = product . enumFromTo 1"
  },
  {
    "path": "Problem015/Lua/solution_1.lua",
    "content": "-- Author: G4BB3R\n\nlocal function fat (n)\n\treturn n <= 1 and 1 or n * fat(n - 1)\nend\n\n-- print(fat(40) // fat(20) ^ 2) bigint problem\nprint(\"wrong solution\")"
  },
  {
    "path": "Problem015/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n\"\"\"\nLattice paths\nProblem 15\n\nStarting in the top left corner of a 2×2 grid,\nand only being able to move to the right and down,\nhere are exactly 6 routes to the bottom right corner.\n\nHow many such routes are there through a 20×20 grid?\n\"\"\"\n\n# answer: 137846528820\n# c(40,20) = 40!/20!20!\n\n\n# Crazy Pascal Way\ndef pascal(n):\n    line = [1]\n    lines = 0\n    while lines < n:\n        i = 0\n        newline = [1, 1]\n        while len(newline) - 1 <= lines and len(line) - 1 > i:\n            new = line[i] + line[i + 1]\n            newline.insert(i + 1, new)\n            i += 1\n        line = newline\n        lines += 1\n\n    return line\n\n\ndef solution():\n    pascal_line = pascal(40)\n    middle = len(pascal_line) // 2\n    return pascal_line[middle]\n\nprint(solution())\n"
  },
  {
    "path": "Problem015/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=15)\n"
  },
  {
    "path": "Problem015/Ruby/solution_1.rb",
    "content": "#Author: tkovs\n#Translation of the Haskell code P015\n\ndef solve\n    return ((1..40).inject(:*) / ((1..20).inject(:*) ** 2))\nend\n\nputs(solve)"
  },
  {
    "path": "Problem016/.hash",
    "content": "6a5889bb0190d0211a991f47bb19a777"
  },
  {
    "path": "Problem016/Clojure/solution_1.clj",
    "content": "(defn solution\n  []\n  (->>\n   (repeat 1000 2)\n   (reduce *')\n   (str)\n   (seq)\n   (map #(Character/digit % 10))\n   (reduce +)))\n\n(println (solution))\n"
  },
  {
    "path": "Problem016/CommonLisp/solution_1.lisp",
    "content": ";; Common Lisp Script\n;; Manoel Vilela\n\n\n(defun sum-digits (x)\n  (if (< x 10)\n      x\n      (+ (mod x 10) (sum-digits (floor (/ x 10))))))\n\n(format t \"~d~%\" (sum-digits (expt 2 1000)))"
  },
  {
    "path": "Problem016/CommonLisp/solution_2.lisp",
    "content": ";; Common Lisp Script\n;; Manoel Vilela\n\n\n(defun integer-to-list (x)\n  (if (< x 10)\n      (cons x nil)\n      (cons (mod x 10) \n            (integer-to-list (floor (/ x 10))))))\n\n(defun sum (the-list)\n  (reduce '+ the-list))\n\n(defun solution ()\n  (sum (integer-to-list (expt 2 1000))))\n\n\n(princ (solution))"
  },
  {
    "path": "Problem016/Elixir/solution_1.exs",
    "content": ":math.pow(2, 1000) |> round\n                   |> to_charlist\n                   |> Enum.map(fn (c) -> c - hd('0') end)\n                   |> Enum.sum\n                   |> inspect\n                   |> IO.puts\n"
  },
  {
    "path": "Problem016/Haskell/solution_1.hs",
    "content": "import Data.Char (digitToInt)\n\nsumDigits :: Integer -> Int\nsumDigits = sum . map digitToInt . show\n\nmain :: IO ()\nmain = print . sumDigits $ (2 ^ (1000 :: Integer))\n"
  },
  {
    "path": "Problem016/Lua/solution_1.lua",
    "content": "-- Author: G4BB3R\n-- 1386, arrumar D:\n-- Lua tem problema com big int, precisaria usar uma lib externa, depois arrumo isso :( \n\nlocal num_str = string.format(\"%18.0f\", tostring(math.pow(2, 1000)))\n-- print(num_str)\nprint(\"wrong solution\")\nlocal sum = 0\nfor i = 1, num_str:len() do\n\tlocal x = tonumber(string.sub(num_str, i, i))\n\tsum = sum + x\nend\n\n-- Lua 2 ^ 10: (ERRADO)\n-- 10715086071862999163590588820647383440913642575258116846673707622968935536440923279124033348795639682170484286647580752132126263156615800081070401018029722553997945419726202612629300688266739378738989860216968431415297432702434337609682091577392386950658920903538338407947545379998315356201665846837248\n\n-- Era esperado que 2 ^ 10 fosse:\n-- 10715086071862673209484250490600018105510511249361224931983788156958581275940435984577574698574803934567774824230953046474983581941267398767559165543946429831652624386837205668069376\n"
  },
  {
    "path": "Problem016/Python/solution_1.py",
    "content": "#Project euler problem 16\n\nn = 2**1000  \n\ntot=0 \nwhile(n>0):\n    dig=n%10\n    tot=tot+dig\n    n=n//10\nprint(tot)\n"
  },
  {
    "path": "Problem016/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=16)\n"
  },
  {
    "path": "Problem016/Ruby/solution_1.rb",
    "content": "#Author: tkovs\n\ndef solve\n    return((2**1000).to_s.split('').map{|digit| digit.to_i}.inject(:+))\nend\n\nputs(solve)"
  },
  {
    "path": "Problem017/.hash",
    "content": "6a979d4a9cf85135408529edc8a133d0"
  },
  {
    "path": "Problem017/Elixir/solution_1.exs",
    "content": "# Author: lubien\n\ndefmodule Euler17 do\n  def solve(n) do\n    1..n\n      |> Stream.map(&num_to_str/1)\n      |> Stream.map(&String.length/1)\n      |> Enum.reduce(&(&1 + &2))\n  end\n\n  # Since 1_000 isn't parsed right by my rules :p\n  def num_to_str(1000), do: \"onethousand\"\n  # Separate the number in a List of digits\n  def num_to_str(n), do: num_to_str(Integer.digits(n), [])\n\n  # When we've parsed all digits, make the word\n  defp num_to_str([], acc) do\n    case acc do\n      # \"ten_name\" is something like \"twenty\", \"fourty\", \"ninety\"\n      # and \"unit_name\" is empty because of a 0 unit\n      [\"\", ten_name] -> ten_name\n      [unit_name, ten_name] -> ten_name <> \"and\" <> unit_name\n      _ -> acc |> Enum.reduce(&(&1 <> &2))\n    end\n  end\n  # Parse a digit\n  # It's important to you know that whenever we have 2 digits,\n  # we parse both together using ten_text/1\n  # units are only parsed alone for 1 digit sized numbers (1..9)\n  defp num_to_str([x | xs] = digits, acc) do\n    digits_length = length(digits)\n\n    text = case digits_length do\n      3 -> unit(x) <> \"hundred\"\n      2 -> ten_text(digits)\n      1 -> unit(x)\n    end\n\n    # Empty tail when we have 2 digits (see the comment above)\n    tail = if digits_length == 2 do [] else xs end\n\n    num_to_str(tail, [text | acc])\n  end\n\n  # Knowing that there's two digits at the tail\n  # let's parse it\n  defp ten_text([x | xs]) do\n    y = List.first xs\n\n    # For numbers in the \"1y\" pattern\n    if x == 1 do\n      cond do\n        y == 0 -> \"ten\"\n        y == 1 -> \"eleven\"\n        y == 2 -> \"twelve\"\n        y == 3 -> \"thirteen\"\n        y == 5 -> \"fifteen\"\n        y == 8 -> \"eighteen\"\n        y <= 9 -> unit(y) <> \"teen\"\n      end\n    else\n      case y do\n        0 -> ten(x)\n        _ -> ten(x) <> unit(y)\n      end\n    end\n  end\n\n  # Given a number \"n\", return the name of (n * 10)\n  # Excludes: 0, 1\n  def ten(n) do\n    {\"\", \"\", \"twenty\", \"thirty\", \"forty\", \"fifty\", \"sixty\", \"seventy\", \"eighty\", \"ninety\"}\n      |> elem(n)\n  end\n\n  # Given a number, return it's name\n  def unit(n) do\n    {\"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\"}\n      |> elem(n)\n  end\nend\n\nEuler17.solve(1_000)\n  |> IO.inspect\n\n"
  },
  {
    "path": "Problem017/Python/p17_dic.json",
    "content": "{\n\t\"1\":\"one\",\n\t\"2\":\"two\",\n\t\"3\":\"three\",\n\t\"4\":\"four\",\n\t\"5\":\"five\",\n\t\"6\":\"six\",\n\t\"7\":\"seven\",\n\t\"8\":\"eight\",\n\t\"9\":\"nine\",\n\t\"10\":\"ten\",\n\t\"11\":\"eleven\",\n\t\"12\":\"twelve\",\n\t\"13\":\"thirteen\",\n\t\"14\":\"fourteen\",\n\t\"15\":\"fifteen\",\n\t\"16\":\"sixteen\",\n\t\"17\":\"seventeen\",\n\t\"18\":\"eighteen\",\n\t\"19\":\"nineteen\",\n\t\"20\":\"twenty\",\n\t\"30\":\"thirty\",\n\t\"40\":\"forty\",\n\t\"50\":\"fifty\",\n\t\"60\":\"sixty\",\n\t\"70\":\"seventy\",\n\t\"80\":\"eighty\",\n\t\"90\":\"ninety\",\n\t\"100\":\"one hundred\",\n\t\"200\":\"two hundred\",\n\t\"300\":\"three hundred\",\n\t\"400\":\"four hundred\",\n\t\"500\":\"five hundred\",\n\t\"600\":\"six hundred\",\n\t\"700\":\"seven hundred\",\n\t\"800\":\"eight hundred\",\n\t\"900\":\"nine hundred\",\n\t\"1000\":\"one thousand\"\n}"
  },
  {
    "path": "Problem017/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n\"\"\"\nNumber letter counts\nProblem 17\n\nIf the numbers 1 to 5 are written out in words: one, two, three, four, five, then there are 3 + 3 + 5 + 4 + 4 = 19 letters used in total.\n\nIf all the numbers from 1 to 1000 (one thousand) inclusive were written out in words, how many letters would be used?\n\nNOTE: Do not count spaces or hyphens. For example, 342 (three hundred and forty-two) contains 23 letters and 115 (one hundred and fifteen) contains 20 letters. The use of \"and\" when writing out numbers is in compliance with British usage.\n\"\"\"\n\nimport json\nfrom os.path import dirname\nfrom os.path import join\n\n# to work with stats.py\nwith open(join(dirname(__file__), 'p17_dic.json'), 'r') as f:\n    dic = json.load(f)\n\n\ndef parser(string):\n    if len(string) == 3:\n        a, b, c = dic[string[0]], dic[string[1]], dic[string[2]]\n        return a + ' and ' + b + '-' + c\n    elif len(string) == 2:\n        a, b = dic[string[0]], dic[string[1]]\n        if int(string[0]) >= 10 and sum([int(x) for x in string]) > 100:\n            conective = ' and '\n        else:\n            conective = '-'\n        return a + conective + b\n    else:\n        return dic[string[0]]\n\n\ndef decomp(string):\n    end = []\n    if int(string) % 100 in range(10, 20):\n        end = [str(int(string) % 100)]\n        string = str((int(string) // 100) * 100)\n\n    # LOOOOOOOOOOL\n    return [str((int(string[x]) * 10 ** (len(string) - (x  + 1)))) for x in range(len(string)) if int(string[x]) != 0] + end\n\n\ndef clear(num):\n    return (''.join([c for c in num if c not in ' -']))\n\n\ndef solution():\n    nums = (decomp(str(x)) for x in range(1, 1001))\n    cordial = (parser(x) for x in nums)\n    clean = (clear(x) for x in cordial)\n    answer = sum(len(num) for num in clean)\n    return answer\n\nprint(solution())"
  },
  {
    "path": "Problem017/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=17)\n"
  },
  {
    "path": "Problem018/.hash",
    "content": "708f3cf8100d5e71834b1db77dfa15d6"
  },
  {
    "path": "Problem018/Elixir/solution_1.exs",
    "content": "tri_nums = [\n  [\"75\"],\n  [\"95\", \"64\"],\n  [\"17\", \"47\", \"82\"],\n  [\"18\", \"35\", \"87\", \"10\"],\n  [\"20\", \"04\", \"82\", \"47\", \"65\"],\n  [\"19\", \"01\", \"23\", \"75\", \"03\", \"34\"],\n  [\"88\", \"02\", \"77\", \"73\", \"07\", \"63\", \"67\"],\n  [\"99\", \"65\", \"04\", \"28\", \"06\", \"16\", \"70\", \"92\"],\n  [\"41\", \"41\", \"26\", \"56\", \"83\", \"40\", \"80\", \"70\", \"33\"],\n  [\"41\", \"48\", \"72\", \"33\", \"47\", \"32\", \"37\", \"16\", \"94\", \"29\"],\n  [\"53\", \"71\", \"44\", \"65\", \"25\", \"43\", \"91\", \"52\", \"97\", \"51\", \"14\"],\n  [\"70\", \"11\", \"33\", \"28\", \"77\", \"73\", \"17\", \"78\", \"39\", \"68\", \"17\", \"57\"],\n  [\"91\", \"71\", \"52\", \"38\", \"17\", \"14\", \"91\", \"43\", \"58\", \"50\", \"27\", \"29\", \"48\"],\n  [\"63\", \"66\", \"04\", \"68\", \"89\", \"53\", \"67\", \"30\", \"73\", \"16\", \"69\", \"87\", \"40\", \"31\"],\n  [\"04\", \"62\", \"98\", \"27\", \"23\", \"9\", \"70\", \"98\", \"73\", \"93\", \"38\", \"53\", \"60\", \"04\", \"23\"]\n]\n\ndefmodule MaximumPath do\n  def find([left|_]) when length(left) == 1 do\n    left\n  end\n\n  def find([left|[mid|right]]) when length(left) > 0 do\n    mid = for n <- (0..(length(left)-2)), do: Integer.to_string(new_val(left,mid,n))\n    find([mid|right])\n  end\n\n  def new_val(a,b,c), do: String.to_integer(Enum.at(b,c)) + Enum.max([String.to_integer(Enum.at(a,c)),String.to_integer(Enum.at(a,c+1))])\nend\n\nIO.puts MaximumPath.find(Enum.reverse(tri_nums))"
  },
  {
    "path": "Problem018/Python/solution_1.py",
    "content": "#search the biggest sum nums adjacent on the row of the triangle below\n#python3.4\ntriangle = '''\\\n75\n95 64\n17 47 82\n18 35 87 10\n20 04 82 47 65\n19 01 23 75 03 34\n88 02 77 73 07 63 67\n99 65 04 28 06 16 70 92\n41 41 26 56 83 40 80 70 33\n41 48 72 33 47 32 37 16 94 29\n53 71 44 65 25 43 91 52 97 51 14\n70 11 33 28 77 73 17 78 39 68 17 57\n91 71 52 38 17 14 91 43 58 50 27 29 48\n63 66 04 68 89 53 67 30 73 16 69 87 40 31\n04 62 98 27 23 09 70 98 73 93 38 53 60 04 23'''\n\n\ndef int_triangle(data):\n\treturn [[int(x) for x in y.split()] for y in [x for x in data.split('\\n')]]\n\ndef arrows_recursive(data, total = [], main = [], x = 0, y = 0):\n\ttemp = [] + main\n\tif x < len(data) and y < len(data):\n\t\ttemp.append(data[y][x])\n\t\ttotal = arrows_recursive(data, total = total, main = temp, x = x, y = y + 1)\n\t\ttotal = arrows_recursive(data, total = total, main = temp, x = x + 1, y = y + 1)\n\tif len(temp) >= len(data):\n\t\ttotal.append(temp)\t\n\treturn total\n\nif __name__ == '__main__':\n\tlista = int_triangle(triangle)\n\tp = arrows_recursive(lista)\n\tprint(max(map(sum, p)))\n\n"
  },
  {
    "path": "Problem018/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=18)\n"
  },
  {
    "path": "Problem019/.hash",
    "content": "a4a042cf4fd6bfb47701cbc8a1653ada"
  },
  {
    "path": "Problem019/Elixir/solution_1.exs",
    "content": "defmodule Sundays do\n  def count(final,[year|[_|[count|_]]],_) when year == final do\n    count + 1\n  end\n\n  def count(final,[year|[day|count]],months) when year < final do\n    count(final,calendar(year,months, day,List.first(count)), months)\n  end\n\n  def calendar(year,months,day,count) when length(months) <= 0 do\n    [year + 1, day, count]\n  end\n\n  def calendar(year,months,day,count) when length(months) > 0 do\n    [month|rem_months] = months\n    [count|month]      = check_day_and_month(count, day, month, year)\n\n    calendar(year, rem_months, (rem((month + day), 7)), count)\n  end\n\n  def check_day_and_month(count,day,month,year) do\n    count = cond do\n      day == 0 ->\n        count + 1\n      day != 0 ->\n        count\n    end\n\n    month = cond do\n      month == 28 and leap_year?(year) ->\n        29\n      true ->\n        month\n    end\n\n    [count|month]\n  end\n\n  def leap_year?(year) do\n    unless((rem(year, 100) == 0 and rem(year, 400) != 0), do: rem(year, 4) == 0)\n  end\nend\n\nIO.puts Sundays.count(2000,[1901,2,0],[31,28,31,30,31,30,31,31,30,31,30,31])"
  },
  {
    "path": "Problem019/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n\"\"\"\nCounting Sundays\nProblem 19\n\nYou are given the following information, but you may prefer to do some research for yourself.\n\n    1 Jan 1900 was a Monday.\n    Thirty days has September,\n    April, June and November.\n    All the rest have thirty-one,\n    Saving February alone,\n    Which has twenty-eight, rain or shine.\n    And on leap years, twenty-nine.\n    A leap year occurs on any year evenly divisible by 4, but not on a century unless it is divisible by 400.\n\nHow many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to  31 Dec 2000)?\n\"\"\"\n\n\n# 0 - SUNDAY\n# 1 - MONDAY\n# 2 - THIRDDAY\n# 3 - WEDNESDAY\n# 4 - THURSDAY\n# 5 - FRIDAY\n# 6 - SATURDAY\n\ndays_dic = {\n    0: 'SUNDAY',\n    1: 'MONDAY',\n    2: 'THIRDDAY',\n    3: 'WEDNESDAY',\n    4: 'THURSDAY',\n    5: 'FRIDAY',\n    6: 'SATURDAY',\n}\n\n\ndef howmanysundays(days, day):\n    some_incredible_stuff = int(days - (7 - day) > 28 or day == 0 and days > 28)\n    sundays_in_the_month = days // 7 + some_incredible_stuff\n    return sundays_in_the_month\n\n\ndef is_leap(year):\n    return (year % 400 == 0) or (year % 4 == 0 and year % 100 != 0)\n\n\ndef solution(first_day):\n    months_days = {\n        1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30,\n        7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31\n    }\n\n    interval = range(1900, 2000 + 1)\n    day = 1  # MONDAY (first day of year 1900)\n    firsts = 0\n    for year in interval:\n        leap = is_leap(year)\n        for month, days in sorted(months_days.items()):\n            if month == 2 and leap:\n                days += 1\n            if year > 1900 and day == first_day:\n                firsts += 1\n            day += days % 7\n            if day > 6:\n                day -= 7\n    return firsts\n\nprint(solution(0))\n"
  },
  {
    "path": "Problem019/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=19)\n"
  },
  {
    "path": "Problem020/.hash",
    "content": "443cb001c138b2561a0d90720d6ce111"
  },
  {
    "path": "Problem020/Clojure/solution_1.clj",
    "content": ";Author: tkovs\n\n(defn sum [x]\n    (apply + (map #(Integer. (str %)) (str x))))\n\n(defn solve []\n    (sum (reduce *' (range 1 100))))\n\n(println(solve))"
  },
  {
    "path": "Problem020/Clojure/solution_2.clj",
    "content": ";; very very VERY slow solution: take 1min to finish. (hahaha)\n\n(defn solution\n  []\n  (->> (range 1 100)\n       (reduce *')\n       (str)\n       (seq)\n       (pmap #(Character/getNumericValue %))\n       (reduce +)\n       (str)))\n\n(println (solution))\n;; weird bug here: if I don't force exit, the process continue about 1min\n;; without need. Clojure 1.8.0 here. Need report bug?\n(System/exit 0)\n"
  },
  {
    "path": "Problem020/CommonLisp/solution_1.lisp",
    "content": ";; Common Lisp Script\n;; Manoel Vilela\n\n\n(defun integer-to-list (x)\n  (if (< x 10)\n      (cons x nil)\n      (cons (mod x 10) \n            (integer-to-list (floor (/ x 10))))))\n\n(defun sum (the-list)\n  (reduce '+ the-list))\n\n(defun fat (x)\n  (if (<= x 2)\n      x\n      (* x (fat (1- x)))))\n\n(defun solution ()\n  (sum (integer-to-list (fat 100))))\n\n\n(princ (solution))"
  },
  {
    "path": "Problem020/Elixir/solution_1.exs",
    "content": "# Author: lubien\n\n1..100\n  |> Enum.reduce(&(&1 * &2))\n  |> Integer.digits\n  |> Enum.reduce(&(&1 + &2))\n  |> IO.inspect\n\n"
  },
  {
    "path": "Problem020/Haskell/solution_1.hs",
    "content": "{-\nn! means n × (n − 1) × ... × 3 × 2 × 1\n\nFor example, 10! = 10 × 9 × ... × 3 × 2 × 1 = 3628800,\nand the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.\n\nFind the sum of the digits in the number 100!\n-}\n\nimport Data.Char\n\nmain :: IO ()\nmain = print $ sum $ map (digitToInt) $ show $ product [1..100]"
  },
  {
    "path": "Problem020/JavaScript/solution_1.js",
    "content": "\"use strict\";\r\n\r\nfunction getReducedFactorial() {\r\n    let prod = 1n, numOfTwo = 0, numOfFive = 0, num, sum = 0n;\r\n    for (let i = 2; i <= 100; i++) {\r\n        num = i;\r\n        while (!(num % 2) && num >= 2) (num = Math.floor(num / 2)) && ++numOfTwo;\r\n        while (!(num % 5) && num >= 5) (num = Math.floor(num / 5)) && ++numOfFive;\r\n        prod *= BigInt(num);\r\n    }\r\n    prod *= BigInt((numOfTwo > numOfFive) ? 2 ** (numOfTwo - numOfFive) : 5 ** (numOfFive - numOfTwo));\r\n    while (prod) (sum += prod % 10n) && (prod = prod / 10n);\r\n    return sum;\r\n}\r\n\r\nconsole.log(parseInt(getReducedFactorial()));"
  },
  {
    "path": "Problem020/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\nfrom functools import reduce\nimport sys\n\nif sys.version_info > (3, 0):\n    xrange = range\n    long = int\n\n\"\"\"\nFactorial digit sum\nProblem 20\n\nn! means n × (n − 1) × ... × 3 × 2 × 1\n\nFor example, 10! = 10 × 9 × ... × 3 × 2 × 1 = 3628800,\nand the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.\n\nFind the sum of the digits in the number 100!\n\n\"\"\"\n\nprint(reduce(long.__add__, map(long, str(reduce(long.__mul__, map(long, xrange(1, 100)))))))\n"
  },
  {
    "path": "Problem020/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=20)\n"
  },
  {
    "path": "Problem020/Ruby/solution_1.rb",
    "content": "#Author: tkovs\n#Translation of CommonLisp code\n\ndef solve\n    1.upto(100).inject(:*).to_s.split('').map{|x| x.to_i}.inject(:+)\nend\n\nputs(solve)"
  },
  {
    "path": "Problem021/.hash",
    "content": "51e04cd4e55e7e415bf24de9e1b0f3ff"
  },
  {
    "path": "Problem021/Elixir/solution_1.exs",
    "content": "# Author: lubien\n\ndefmodule Euler21 do\n  def solve do\n    1..10_000\n      |> Stream.filter(&amicable/1)\n      |> Enum.reduce(&sum/2)\n  end\n\n  def d(1), do: 1\n  def d(n) do\n    1..(div(n, 2))\n      |> Stream.filter(&(rem(n, &1) == 0))\n      |> Enum.reduce(&sum/2)\n  end\n\n  def amicable(a) do\n    amic = d(a)\n\n    amic != a && d(amic) == a\n  end\n\n  defp sum(x, y), do: x + y\nend\n\nEuler21.solve\n  |> IO.puts\n\n"
  },
  {
    "path": "Problem021/Haskell/solution_slow_1.hs",
    "content": "d :: Int -> Int\nd n = sum [x | x <- [1..div n 2], mod n x == 0]\n\namicable :: Int -> Bool\namicable n = (d n /= n && n == d (d n))\n\nmain :: IO ()\nmain = do\n    print . sum $ filter amicable [1..10000]\n"
  },
  {
    "path": "Problem021/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\nfrom functools import reduce\n\n\"\"\"\nAmicable numbers\nProblem 21\n\nLet d(n) be defined as the sum of proper divisors of n (numbers less than n which divide evenly into n).\nIf d(a) = b and d(b) = a, where a ≠ b, then a and b are an amicable pair and each of a and b are called amicable numbers.\n\nFor example, the proper divisors of 220 are 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 and 110; therefore d(220) = 284. \nThe proper divisors of 284 are 1, 2, 4, 71 and 142; so d(284) = 220.\n\nEvaluate the sum of all the amicable numbers under 10000.\n\n\"\"\"\n\n# FUCK D: ? i WROTE THIS? MY LEVEL OF OBSCURITY IS MORE HIGHER WHOSE I THOUGH...\ndef d(n):\n\treturn sum(sorted(set(reduce(list.__add__, ([i, n//i] for i in range(1, int(n**0.5) + 1) if n % i == 0))))[:-1])\n\nprint(sum(x for x in range(1, 10000) if d(x) > 0 and x != d(x) and x == d(d(x))))"
  },
  {
    "path": "Problem021/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=21)\n"
  },
  {
    "path": "Problem022/.hash",
    "content": "f2c9c91cb025746f781fa4db8be3983f"
  },
  {
    "path": "Problem022/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n\"\"\"\nNames scores\nProblem 22\n\nUsing names.txt (right click and 'Save Link/Target As...'), a 46K text file containing over five-thousand first names, begin by sorting it into alphabetical order. Then working out the alphabetical value for each name, multiply this value by its alphabetical position in the list to obtain a name score.\n\nFor example, when the list is sorted into alphabetical order, COLIN, which is worth 3 + 15 + 12 + 9 + 14 = 53, is the 938th name in the list. So, COLIN would obtain a score of 938 × 53 = 49714.\n\nWhat is the total of all the name scores in the file?\n\"\"\"\n\nfrom os.path import join, dirname\nfrom string import ascii_uppercase as alf\n\nf = open('../p022_names.txt', 'r').read()[:-1]\nl = sorted([x[1:-1] for x in f.split(',')])\ns = lambda x: sum(((alf.index(y) + 1) for y in x))\nprint(sum((s(l[x]) * (x + 1) for x in range(len(l)))))\n"
  },
  {
    "path": "Problem022/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=22)\n"
  },
  {
    "path": "Problem022/p022_names.txt",
    "content": "\"MARY\",\"PATRICIA\",\"LINDA\",\"BARBARA\",\"ELIZABETH\",\"JENNIFER\",\"MARIA\",\"SUSAN\",\"MARGARET\",\"DOROTHY\",\"LISA\",\"NANCY\",\"KAREN\",\"BETTY\",\"HELEN\",\"SANDRA\",\"DONNA\",\"CAROL\",\"RUTH\",\"SHARON\",\"MICHELLE\",\"LAURA\",\"SARAH\",\"KIMBERLY\",\"DEBORAH\",\"JESSICA\",\"SHIRLEY\",\"CYNTHIA\",\"ANGELA\",\"MELISSA\",\"BRENDA\",\"AMY\",\"ANNA\",\"REBECCA\",\"VIRGINIA\",\"KATHLEEN\",\"PAMELA\",\"MARTHA\",\"DEBRA\",\"AMANDA\",\"STEPHANIE\",\"CAROLYN\",\"CHRISTINE\",\"MARIE\",\"JANET\",\"CATHERINE\",\"FRANCES\",\"ANN\",\"JOYCE\",\"DIANE\",\"ALICE\",\"JULIE\",\"HEATHER\",\"TERESA\",\"DORIS\",\"GLORIA\",\"EVELYN\",\"JEAN\",\"CHERYL\",\"MILDRED\",\"KATHERINE\",\"JOAN\",\"ASHLEY\",\"JUDITH\",\"ROSE\",\"JANICE\",\"KELLY\",\"NICOLE\",\"JUDY\",\"CHRISTINA\",\"KATHY\",\"THERESA\",\"BEVERLY\",\"DENISE\",\"TAMMY\",\"IRENE\",\"JANE\",\"LORI\",\"RACHEL\",\"MARILYN\",\"ANDREA\",\"KATHRYN\",\"LOUISE\",\"SARA\",\"ANNE\",\"JACQUELINE\",\"WANDA\",\"BONNIE\",\"JULIA\",\"RUBY\",\"LOIS\",\"TINA\",\"PHYLLIS\",\"NORMA\",\"PAULA\",\"DIANA\",\"ANNIE\",\"LILLIAN\",\"EMILY\",\"ROBIN\",\"PEGGY\",\"CRYSTAL\",\"GLADYS\",\"RITA\",\"DAWN\",\"CONNIE\",\"FLORENCE\",\"TRACY\",\"EDNA\",\"TIFFANY\",\"CARMEN\",\"ROSA\",\"CINDY\",\"GRACE\",\"WENDY\",\"VICTORIA\",\"EDITH\",\"KIM\",\"SHERRY\",\"SYLVIA\",\"JOSEPHINE\",\"THELMA\",\"SHANNON\",\"SHEILA\",\"ETHEL\",\"ELLEN\",\"ELAINE\",\"MARJORIE\",\"CARRIE\",\"CHARLOTTE\",\"MONICA\",\"ESTHER\",\"PAULINE\",\"EMMA\",\"JUANITA\",\"ANITA\",\"RHONDA\",\"HAZEL\",\"AMBER\",\"EVA\",\"DEBBIE\",\"APRIL\",\"LESLIE\",\"CLARA\",\"LUCILLE\",\"JAMIE\",\"JOANNE\",\"ELEANOR\",\"VALERIE\",\"DANIELLE\",\"MEGAN\",\"ALICIA\",\"SUZANNE\",\"MICHELE\",\"GAIL\",\"BERTHA\",\"DARLENE\",\"VERONICA\",\"JILL\",\"ERIN\",\"GERALDINE\",\"LAUREN\",\"CATHY\",\"JOANN\",\"LORRAINE\",\"LYNN\",\"SALLY\",\"REGINA\",\"ERICA\",\"BEATRICE\",\"DOLORES\",\"BERNICE\",\"AUDREY\",\"YVONNE\",\"ANNETTE\",\"JUNE\",\"SAMANTHA\",\"MARION\",\"DANA\",\"STACY\",\"ANA\",\"RENEE\",\"IDA\",\"VIVIAN\",\"ROBERTA\",\"HOLLY\",\"BRITTANY\",\"MELANIE\",\"LORETTA\",\"YOLANDA\",\"JEANETTE\",\"LAURIE\",\"KATIE\",\"KRISTEN\",\"VANESSA\",\"ALMA\",\"SUE\",\"ELSIE\",\"BETH\",\"JEANNE\",\"VICKI\",\"CARLA\",\"TARA\",\"ROSEMARY\",\"EILEEN\",\"TERRI\",\"GERTRUDE\",\"LUCY\",\"TONYA\",\"ELLA\",\"STACEY\",\"WILMA\",\"GINA\",\"KRISTIN\",\"JESSIE\",\"NATALIE\",\"AGNES\",\"VERA\",\"WILLIE\",\"CHARLENE\",\"BESSIE\",\"DELORES\",\"MELINDA\",\"PEARL\",\"ARLENE\",\"MAUREEN\",\"COLLEEN\",\"ALLISON\",\"TAMARA\",\"JOY\",\"GEORGIA\",\"CONSTANCE\",\"LILLIE\",\"CLAUDIA\",\"JACKIE\",\"MARCIA\",\"TANYA\",\"NELLIE\",\"MINNIE\",\"MARLENE\",\"HEIDI\",\"GLENDA\",\"LYDIA\",\"VIOLA\",\"COURTNEY\",\"MARIAN\",\"STELLA\",\"CAROLINE\",\"DORA\",\"JO\",\"VICKIE\",\"MATTIE\",\"TERRY\",\"MAXINE\",\"IRMA\",\"MABEL\",\"MARSHA\",\"MYRTLE\",\"LENA\",\"CHRISTY\",\"DEANNA\",\"PATSY\",\"HILDA\",\"GWENDOLYN\",\"JENNIE\",\"NORA\",\"MARGIE\",\"NINA\",\"CASSANDRA\",\"LEAH\",\"PENNY\",\"KAY\",\"PRISCILLA\",\"NAOMI\",\"CAROLE\",\"BRANDY\",\"OLGA\",\"BILLIE\",\"DIANNE\",\"TRACEY\",\"LEONA\",\"JENNY\",\"FELICIA\",\"SONIA\",\"MIRIAM\",\"VELMA\",\"BECKY\",\"BOBBIE\",\"VIOLET\",\"KRISTINA\",\"TONI\",\"MISTY\",\"MAE\",\"SHELLY\",\"DAISY\",\"RAMONA\",\"SHERRI\",\"ERIKA\",\"KATRINA\",\"CLAIRE\",\"LINDSEY\",\"LINDSAY\",\"GENEVA\",\"GUADALUPE\",\"BELINDA\",\"MARGARITA\",\"SHERYL\",\"CORA\",\"FAYE\",\"ADA\",\"NATASHA\",\"SABRINA\",\"ISABEL\",\"MARGUERITE\",\"HATTIE\",\"HARRIET\",\"MOLLY\",\"CECILIA\",\"KRISTI\",\"BRANDI\",\"BLANCHE\",\"SANDY\",\"ROSIE\",\"JOANNA\",\"IRIS\",\"EUNICE\",\"ANGIE\",\"INEZ\",\"LYNDA\",\"MADELINE\",\"AMELIA\",\"ALBERTA\",\"GENEVIEVE\",\"MONIQUE\",\"JODI\",\"JANIE\",\"MAGGIE\",\"KAYLA\",\"SONYA\",\"JAN\",\"LEE\",\"KRISTINE\",\"CANDACE\",\"FANNIE\",\"MARYANN\",\"OPAL\",\"ALISON\",\"YVETTE\",\"MELODY\",\"LUZ\",\"SUSIE\",\"OLIVIA\",\"FLORA\",\"SHELLEY\",\"KRISTY\",\"MAMIE\",\"LULA\",\"LOLA\",\"VERNA\",\"BEULAH\",\"ANTOINETTE\",\"CANDICE\",\"JUANA\",\"JEANNETTE\",\"PAM\",\"KELLI\",\"HANNAH\",\"WHITNEY\",\"BRIDGET\",\"KARLA\",\"CELIA\",\"LATOYA\",\"PATTY\",\"SHELIA\",\"GAYLE\",\"DELLA\",\"VICKY\",\"LYNNE\",\"SHERI\",\"MARIANNE\",\"KARA\",\"JACQUELYN\",\"ERMA\",\"BLANCA\",\"MYRA\",\"LETICIA\",\"PAT\",\"KRISTA\",\"ROXANNE\",\"ANGELICA\",\"JOHNNIE\",\"ROBYN\",\"FRANCIS\",\"ADRIENNE\",\"ROSALIE\",\"ALEXANDRA\",\"BROOKE\",\"BETHANY\",\"SADIE\",\"BERNADETTE\",\"TRACI\",\"JODY\",\"KENDRA\",\"JASMINE\",\"NICHOLE\",\"RACHAEL\",\"CHELSEA\",\"MABLE\",\"ERNESTINE\",\"MURIEL\",\"MARCELLA\",\"ELENA\",\"KRYSTAL\",\"ANGELINA\",\"NADINE\",\"KARI\",\"ESTELLE\",\"DIANNA\",\"PAULETTE\",\"LORA\",\"MONA\",\"DOREEN\",\"ROSEMARIE\",\"ANGEL\",\"DESIREE\",\"ANTONIA\",\"HOPE\",\"GINGER\",\"JANIS\",\"BETSY\",\"CHRISTIE\",\"FREDA\",\"MERCEDES\",\"MEREDITH\",\"LYNETTE\",\"TERI\",\"CRISTINA\",\"EULA\",\"LEIGH\",\"MEGHAN\",\"SOPHIA\",\"ELOISE\",\"ROCHELLE\",\"GRETCHEN\",\"CECELIA\",\"RAQUEL\",\"HENRIETTA\",\"ALYSSA\",\"JANA\",\"KELLEY\",\"GWEN\",\"KERRY\",\"JENNA\",\"TRICIA\",\"LAVERNE\",\"OLIVE\",\"ALEXIS\",\"TASHA\",\"SILVIA\",\"ELVIRA\",\"CASEY\",\"DELIA\",\"SOPHIE\",\"KATE\",\"PATTI\",\"LORENA\",\"KELLIE\",\"SONJA\",\"LILA\",\"LANA\",\"DARLA\",\"MAY\",\"MINDY\",\"ESSIE\",\"MANDY\",\"LORENE\",\"ELSA\",\"JOSEFINA\",\"JEANNIE\",\"MIRANDA\",\"DIXIE\",\"LUCIA\",\"MARTA\",\"FAITH\",\"LELA\",\"JOHANNA\",\"SHARI\",\"CAMILLE\",\"TAMI\",\"SHAWNA\",\"ELISA\",\"EBONY\",\"MELBA\",\"ORA\",\"NETTIE\",\"TABITHA\",\"OLLIE\",\"JAIME\",\"WINIFRED\",\"KRISTIE\",\"MARINA\",\"ALISHA\",\"AIMEE\",\"RENA\",\"MYRNA\",\"MARLA\",\"TAMMIE\",\"LATASHA\",\"BONITA\",\"PATRICE\",\"RONDA\",\"SHERRIE\",\"ADDIE\",\"FRANCINE\",\"DELORIS\",\"STACIE\",\"ADRIANA\",\"CHERI\",\"SHELBY\",\"ABIGAIL\",\"CELESTE\",\"JEWEL\",\"CARA\",\"ADELE\",\"REBEKAH\",\"LUCINDA\",\"DORTHY\",\"CHRIS\",\"EFFIE\",\"TRINA\",\"REBA\",\"SHAWN\",\"SALLIE\",\"AURORA\",\"LENORA\",\"ETTA\",\"LOTTIE\",\"KERRI\",\"TRISHA\",\"NIKKI\",\"ESTELLA\",\"FRANCISCA\",\"JOSIE\",\"TRACIE\",\"MARISSA\",\"KARIN\",\"BRITTNEY\",\"JANELLE\",\"LOURDES\",\"LAUREL\",\"HELENE\",\"FERN\",\"ELVA\",\"CORINNE\",\"KELSEY\",\"INA\",\"BETTIE\",\"ELISABETH\",\"AIDA\",\"CAITLIN\",\"INGRID\",\"IVA\",\"EUGENIA\",\"CHRISTA\",\"GOLDIE\",\"CASSIE\",\"MAUDE\",\"JENIFER\",\"THERESE\",\"FRANKIE\",\"DENA\",\"LORNA\",\"JANETTE\",\"LATONYA\",\"CANDY\",\"MORGAN\",\"CONSUELO\",\"TAMIKA\",\"ROSETTA\",\"DEBORA\",\"CHERIE\",\"POLLY\",\"DINA\",\"JEWELL\",\"FAY\",\"JILLIAN\",\"DOROTHEA\",\"NELL\",\"TRUDY\",\"ESPERANZA\",\"PATRICA\",\"KIMBERLEY\",\"SHANNA\",\"HELENA\",\"CAROLINA\",\"CLEO\",\"STEFANIE\",\"ROSARIO\",\"OLA\",\"JANINE\",\"MOLLIE\",\"LUPE\",\"ALISA\",\"LOU\",\"MARIBEL\",\"SUSANNE\",\"BETTE\",\"SUSANA\",\"ELISE\",\"CECILE\",\"ISABELLE\",\"LESLEY\",\"JOCELYN\",\"PAIGE\",\"JONI\",\"RACHELLE\",\"LEOLA\",\"DAPHNE\",\"ALTA\",\"ESTER\",\"PETRA\",\"GRACIELA\",\"IMOGENE\",\"JOLENE\",\"KEISHA\",\"LACEY\",\"GLENNA\",\"GABRIELA\",\"KERI\",\"URSULA\",\"LIZZIE\",\"KIRSTEN\",\"SHANA\",\"ADELINE\",\"MAYRA\",\"JAYNE\",\"JACLYN\",\"GRACIE\",\"SONDRA\",\"CARMELA\",\"MARISA\",\"ROSALIND\",\"CHARITY\",\"TONIA\",\"BEATRIZ\",\"MARISOL\",\"CLARICE\",\"JEANINE\",\"SHEENA\",\"ANGELINE\",\"FRIEDA\",\"LILY\",\"ROBBIE\",\"SHAUNA\",\"MILLIE\",\"CLAUDETTE\",\"CATHLEEN\",\"ANGELIA\",\"GABRIELLE\",\"AUTUMN\",\"KATHARINE\",\"SUMMER\",\"JODIE\",\"STACI\",\"LEA\",\"CHRISTI\",\"JIMMIE\",\"JUSTINE\",\"ELMA\",\"LUELLA\",\"MARGRET\",\"DOMINIQUE\",\"SOCORRO\",\"RENE\",\"MARTINA\",\"MARGO\",\"MAVIS\",\"CALLIE\",\"BOBBI\",\"MARITZA\",\"LUCILE\",\"LEANNE\",\"JEANNINE\",\"DEANA\",\"AILEEN\",\"LORIE\",\"LADONNA\",\"WILLA\",\"MANUELA\",\"GALE\",\"SELMA\",\"DOLLY\",\"SYBIL\",\"ABBY\",\"LARA\",\"DALE\",\"IVY\",\"DEE\",\"WINNIE\",\"MARCY\",\"LUISA\",\"JERI\",\"MAGDALENA\",\"OFELIA\",\"MEAGAN\",\"AUDRA\",\"MATILDA\",\"LEILA\",\"CORNELIA\",\"BIANCA\",\"SIMONE\",\"BETTYE\",\"RANDI\",\"VIRGIE\",\"LATISHA\",\"BARBRA\",\"GEORGINA\",\"ELIZA\",\"LEANN\",\"BRIDGETTE\",\"RHODA\",\"HALEY\",\"ADELA\",\"NOLA\",\"BERNADINE\",\"FLOSSIE\",\"ILA\",\"GRETA\",\"RUTHIE\",\"NELDA\",\"MINERVA\",\"LILLY\",\"TERRIE\",\"LETHA\",\"HILARY\",\"ESTELA\",\"VALARIE\",\"BRIANNA\",\"ROSALYN\",\"EARLINE\",\"CATALINA\",\"AVA\",\"MIA\",\"CLARISSA\",\"LIDIA\",\"CORRINE\",\"ALEXANDRIA\",\"CONCEPCION\",\"TIA\",\"SHARRON\",\"RAE\",\"DONA\",\"ERICKA\",\"JAMI\",\"ELNORA\",\"CHANDRA\",\"LENORE\",\"NEVA\",\"MARYLOU\",\"MELISA\",\"TABATHA\",\"SERENA\",\"AVIS\",\"ALLIE\",\"SOFIA\",\"JEANIE\",\"ODESSA\",\"NANNIE\",\"HARRIETT\",\"LORAINE\",\"PENELOPE\",\"MILAGROS\",\"EMILIA\",\"BENITA\",\"ALLYSON\",\"ASHLEE\",\"TANIA\",\"TOMMIE\",\"ESMERALDA\",\"KARINA\",\"EVE\",\"PEARLIE\",\"ZELMA\",\"MALINDA\",\"NOREEN\",\"TAMEKA\",\"SAUNDRA\",\"HILLARY\",\"AMIE\",\"ALTHEA\",\"ROSALINDA\",\"JORDAN\",\"LILIA\",\"ALANA\",\"GAY\",\"CLARE\",\"ALEJANDRA\",\"ELINOR\",\"MICHAEL\",\"LORRIE\",\"JERRI\",\"DARCY\",\"EARNESTINE\",\"CARMELLA\",\"TAYLOR\",\"NOEMI\",\"MARCIE\",\"LIZA\",\"ANNABELLE\",\"LOUISA\",\"EARLENE\",\"MALLORY\",\"CARLENE\",\"NITA\",\"SELENA\",\"TANISHA\",\"KATY\",\"JULIANNE\",\"JOHN\",\"LAKISHA\",\"EDWINA\",\"MARICELA\",\"MARGERY\",\"KENYA\",\"DOLLIE\",\"ROXIE\",\"ROSLYN\",\"KATHRINE\",\"NANETTE\",\"CHARMAINE\",\"LAVONNE\",\"ILENE\",\"KRIS\",\"TAMMI\",\"SUZETTE\",\"CORINE\",\"KAYE\",\"JERRY\",\"MERLE\",\"CHRYSTAL\",\"LINA\",\"DEANNE\",\"LILIAN\",\"JULIANA\",\"ALINE\",\"LUANN\",\"KASEY\",\"MARYANNE\",\"EVANGELINE\",\"COLETTE\",\"MELVA\",\"LAWANDA\",\"YESENIA\",\"NADIA\",\"MADGE\",\"KATHIE\",\"EDDIE\",\"OPHELIA\",\"VALERIA\",\"NONA\",\"MITZI\",\"MARI\",\"GEORGETTE\",\"CLAUDINE\",\"FRAN\",\"ALISSA\",\"ROSEANN\",\"LAKEISHA\",\"SUSANNA\",\"REVA\",\"DEIDRE\",\"CHASITY\",\"SHEREE\",\"CARLY\",\"JAMES\",\"ELVIA\",\"ALYCE\",\"DEIRDRE\",\"GENA\",\"BRIANA\",\"ARACELI\",\"KATELYN\",\"ROSANNE\",\"WENDI\",\"TESSA\",\"BERTA\",\"MARVA\",\"IMELDA\",\"MARIETTA\",\"MARCI\",\"LEONOR\",\"ARLINE\",\"SASHA\",\"MADELYN\",\"JANNA\",\"JULIETTE\",\"DEENA\",\"AURELIA\",\"JOSEFA\",\"AUGUSTA\",\"LILIANA\",\"YOUNG\",\"CHRISTIAN\",\"LESSIE\",\"AMALIA\",\"SAVANNAH\",\"ANASTASIA\",\"VILMA\",\"NATALIA\",\"ROSELLA\",\"LYNNETTE\",\"CORINA\",\"ALFREDA\",\"LEANNA\",\"CAREY\",\"AMPARO\",\"COLEEN\",\"TAMRA\",\"AISHA\",\"WILDA\",\"KARYN\",\"CHERRY\",\"QUEEN\",\"MAURA\",\"MAI\",\"EVANGELINA\",\"ROSANNA\",\"HALLIE\",\"ERNA\",\"ENID\",\"MARIANA\",\"LACY\",\"JULIET\",\"JACKLYN\",\"FREIDA\",\"MADELEINE\",\"MARA\",\"HESTER\",\"CATHRYN\",\"LELIA\",\"CASANDRA\",\"BRIDGETT\",\"ANGELITA\",\"JANNIE\",\"DIONNE\",\"ANNMARIE\",\"KATINA\",\"BERYL\",\"PHOEBE\",\"MILLICENT\",\"KATHERYN\",\"DIANN\",\"CARISSA\",\"MARYELLEN\",\"LIZ\",\"LAURI\",\"HELGA\",\"GILDA\",\"ADRIAN\",\"RHEA\",\"MARQUITA\",\"HOLLIE\",\"TISHA\",\"TAMERA\",\"ANGELIQUE\",\"FRANCESCA\",\"BRITNEY\",\"KAITLIN\",\"LOLITA\",\"FLORINE\",\"ROWENA\",\"REYNA\",\"TWILA\",\"FANNY\",\"JANELL\",\"INES\",\"CONCETTA\",\"BERTIE\",\"ALBA\",\"BRIGITTE\",\"ALYSON\",\"VONDA\",\"PANSY\",\"ELBA\",\"NOELLE\",\"LETITIA\",\"KITTY\",\"DEANN\",\"BRANDIE\",\"LOUELLA\",\"LETA\",\"FELECIA\",\"SHARLENE\",\"LESA\",\"BEVERLEY\",\"ROBERT\",\"ISABELLA\",\"HERMINIA\",\"TERRA\",\"CELINA\",\"TORI\",\"OCTAVIA\",\"JADE\",\"DENICE\",\"GERMAINE\",\"SIERRA\",\"MICHELL\",\"CORTNEY\",\"NELLY\",\"DORETHA\",\"SYDNEY\",\"DEIDRA\",\"MONIKA\",\"LASHONDA\",\"JUDI\",\"CHELSEY\",\"ANTIONETTE\",\"MARGOT\",\"BOBBY\",\"ADELAIDE\",\"NAN\",\"LEEANN\",\"ELISHA\",\"DESSIE\",\"LIBBY\",\"KATHI\",\"GAYLA\",\"LATANYA\",\"MINA\",\"MELLISA\",\"KIMBERLEE\",\"JASMIN\",\"RENAE\",\"ZELDA\",\"ELDA\",\"MA\",\"JUSTINA\",\"GUSSIE\",\"EMILIE\",\"CAMILLA\",\"ABBIE\",\"ROCIO\",\"KAITLYN\",\"JESSE\",\"EDYTHE\",\"ASHLEIGH\",\"SELINA\",\"LAKESHA\",\"GERI\",\"ALLENE\",\"PAMALA\",\"MICHAELA\",\"DAYNA\",\"CARYN\",\"ROSALIA\",\"SUN\",\"JACQULINE\",\"REBECA\",\"MARYBETH\",\"KRYSTLE\",\"IOLA\",\"DOTTIE\",\"BENNIE\",\"BELLE\",\"AUBREY\",\"GRISELDA\",\"ERNESTINA\",\"ELIDA\",\"ADRIANNE\",\"DEMETRIA\",\"DELMA\",\"CHONG\",\"JAQUELINE\",\"DESTINY\",\"ARLEEN\",\"VIRGINA\",\"RETHA\",\"FATIMA\",\"TILLIE\",\"ELEANORE\",\"CARI\",\"TREVA\",\"BIRDIE\",\"WILHELMINA\",\"ROSALEE\",\"MAURINE\",\"LATRICE\",\"YONG\",\"JENA\",\"TARYN\",\"ELIA\",\"DEBBY\",\"MAUDIE\",\"JEANNA\",\"DELILAH\",\"CATRINA\",\"SHONDA\",\"HORTENCIA\",\"THEODORA\",\"TERESITA\",\"ROBBIN\",\"DANETTE\",\"MARYJANE\",\"FREDDIE\",\"DELPHINE\",\"BRIANNE\",\"NILDA\",\"DANNA\",\"CINDI\",\"BESS\",\"IONA\",\"HANNA\",\"ARIEL\",\"WINONA\",\"VIDA\",\"ROSITA\",\"MARIANNA\",\"WILLIAM\",\"RACHEAL\",\"GUILLERMINA\",\"ELOISA\",\"CELESTINE\",\"CAREN\",\"MALISSA\",\"LONA\",\"CHANTEL\",\"SHELLIE\",\"MARISELA\",\"LEORA\",\"AGATHA\",\"SOLEDAD\",\"MIGDALIA\",\"IVETTE\",\"CHRISTEN\",\"ATHENA\",\"JANEL\",\"CHLOE\",\"VEDA\",\"PATTIE\",\"TESSIE\",\"TERA\",\"MARILYNN\",\"LUCRETIA\",\"KARRIE\",\"DINAH\",\"DANIELA\",\"ALECIA\",\"ADELINA\",\"VERNICE\",\"SHIELA\",\"PORTIA\",\"MERRY\",\"LASHAWN\",\"DEVON\",\"DARA\",\"TAWANA\",\"OMA\",\"VERDA\",\"CHRISTIN\",\"ALENE\",\"ZELLA\",\"SANDI\",\"RAFAELA\",\"MAYA\",\"KIRA\",\"CANDIDA\",\"ALVINA\",\"SUZAN\",\"SHAYLA\",\"LYN\",\"LETTIE\",\"ALVA\",\"SAMATHA\",\"ORALIA\",\"MATILDE\",\"MADONNA\",\"LARISSA\",\"VESTA\",\"RENITA\",\"INDIA\",\"DELOIS\",\"SHANDA\",\"PHILLIS\",\"LORRI\",\"ERLINDA\",\"CRUZ\",\"CATHRINE\",\"BARB\",\"ZOE\",\"ISABELL\",\"IONE\",\"GISELA\",\"CHARLIE\",\"VALENCIA\",\"ROXANNA\",\"MAYME\",\"KISHA\",\"ELLIE\",\"MELLISSA\",\"DORRIS\",\"DALIA\",\"BELLA\",\"ANNETTA\",\"ZOILA\",\"RETA\",\"REINA\",\"LAURETTA\",\"KYLIE\",\"CHRISTAL\",\"PILAR\",\"CHARLA\",\"ELISSA\",\"TIFFANI\",\"TANA\",\"PAULINA\",\"LEOTA\",\"BREANNA\",\"JAYME\",\"CARMEL\",\"VERNELL\",\"TOMASA\",\"MANDI\",\"DOMINGA\",\"SANTA\",\"MELODIE\",\"LURA\",\"ALEXA\",\"TAMELA\",\"RYAN\",\"MIRNA\",\"KERRIE\",\"VENUS\",\"NOEL\",\"FELICITA\",\"CRISTY\",\"CARMELITA\",\"BERNIECE\",\"ANNEMARIE\",\"TIARA\",\"ROSEANNE\",\"MISSY\",\"CORI\",\"ROXANA\",\"PRICILLA\",\"KRISTAL\",\"JUNG\",\"ELYSE\",\"HAYDEE\",\"ALETHA\",\"BETTINA\",\"MARGE\",\"GILLIAN\",\"FILOMENA\",\"CHARLES\",\"ZENAIDA\",\"HARRIETTE\",\"CARIDAD\",\"VADA\",\"UNA\",\"ARETHA\",\"PEARLINE\",\"MARJORY\",\"MARCELA\",\"FLOR\",\"EVETTE\",\"ELOUISE\",\"ALINA\",\"TRINIDAD\",\"DAVID\",\"DAMARIS\",\"CATHARINE\",\"CARROLL\",\"BELVA\",\"NAKIA\",\"MARLENA\",\"LUANNE\",\"LORINE\",\"KARON\",\"DORENE\",\"DANITA\",\"BRENNA\",\"TATIANA\",\"SAMMIE\",\"LOUANN\",\"LOREN\",\"JULIANNA\",\"ANDRIA\",\"PHILOMENA\",\"LUCILA\",\"LEONORA\",\"DOVIE\",\"ROMONA\",\"MIMI\",\"JACQUELIN\",\"GAYE\",\"TONJA\",\"MISTI\",\"JOE\",\"GENE\",\"CHASTITY\",\"STACIA\",\"ROXANN\",\"MICAELA\",\"NIKITA\",\"MEI\",\"VELDA\",\"MARLYS\",\"JOHNNA\",\"AURA\",\"LAVERN\",\"IVONNE\",\"HAYLEY\",\"NICKI\",\"MAJORIE\",\"HERLINDA\",\"GEORGE\",\"ALPHA\",\"YADIRA\",\"PERLA\",\"GREGORIA\",\"DANIEL\",\"ANTONETTE\",\"SHELLI\",\"MOZELLE\",\"MARIAH\",\"JOELLE\",\"CORDELIA\",\"JOSETTE\",\"CHIQUITA\",\"TRISTA\",\"LOUIS\",\"LAQUITA\",\"GEORGIANA\",\"CANDI\",\"SHANON\",\"LONNIE\",\"HILDEGARD\",\"CECIL\",\"VALENTINA\",\"STEPHANY\",\"MAGDA\",\"KAROL\",\"GERRY\",\"GABRIELLA\",\"TIANA\",\"ROMA\",\"RICHELLE\",\"RAY\",\"PRINCESS\",\"OLETA\",\"JACQUE\",\"IDELLA\",\"ALAINA\",\"SUZANNA\",\"JOVITA\",\"BLAIR\",\"TOSHA\",\"RAVEN\",\"NEREIDA\",\"MARLYN\",\"KYLA\",\"JOSEPH\",\"DELFINA\",\"TENA\",\"STEPHENIE\",\"SABINA\",\"NATHALIE\",\"MARCELLE\",\"GERTIE\",\"DARLEEN\",\"THEA\",\"SHARONDA\",\"SHANTEL\",\"BELEN\",\"VENESSA\",\"ROSALINA\",\"ONA\",\"GENOVEVA\",\"COREY\",\"CLEMENTINE\",\"ROSALBA\",\"RENATE\",\"RENATA\",\"MI\",\"IVORY\",\"GEORGIANNA\",\"FLOY\",\"DORCAS\",\"ARIANA\",\"TYRA\",\"THEDA\",\"MARIAM\",\"JULI\",\"JESICA\",\"DONNIE\",\"VIKKI\",\"VERLA\",\"ROSELYN\",\"MELVINA\",\"JANNETTE\",\"GINNY\",\"DEBRAH\",\"CORRIE\",\"ASIA\",\"VIOLETA\",\"MYRTIS\",\"LATRICIA\",\"COLLETTE\",\"CHARLEEN\",\"ANISSA\",\"VIVIANA\",\"TWYLA\",\"PRECIOUS\",\"NEDRA\",\"LATONIA\",\"LAN\",\"HELLEN\",\"FABIOLA\",\"ANNAMARIE\",\"ADELL\",\"SHARYN\",\"CHANTAL\",\"NIKI\",\"MAUD\",\"LIZETTE\",\"LINDY\",\"KIA\",\"KESHA\",\"JEANA\",\"DANELLE\",\"CHARLINE\",\"CHANEL\",\"CARROL\",\"VALORIE\",\"LIA\",\"DORTHA\",\"CRISTAL\",\"SUNNY\",\"LEONE\",\"LEILANI\",\"GERRI\",\"DEBI\",\"ANDRA\",\"KESHIA\",\"IMA\",\"EULALIA\",\"EASTER\",\"DULCE\",\"NATIVIDAD\",\"LINNIE\",\"KAMI\",\"GEORGIE\",\"CATINA\",\"BROOK\",\"ALDA\",\"WINNIFRED\",\"SHARLA\",\"RUTHANN\",\"MEAGHAN\",\"MAGDALENE\",\"LISSETTE\",\"ADELAIDA\",\"VENITA\",\"TRENA\",\"SHIRLENE\",\"SHAMEKA\",\"ELIZEBETH\",\"DIAN\",\"SHANTA\",\"MICKEY\",\"LATOSHA\",\"CARLOTTA\",\"WINDY\",\"SOON\",\"ROSINA\",\"MARIANN\",\"LEISA\",\"JONNIE\",\"DAWNA\",\"CATHIE\",\"BILLY\",\"ASTRID\",\"SIDNEY\",\"LAUREEN\",\"JANEEN\",\"HOLLI\",\"FAWN\",\"VICKEY\",\"TERESSA\",\"SHANTE\",\"RUBYE\",\"MARCELINA\",\"CHANDA\",\"CARY\",\"TERESE\",\"SCARLETT\",\"MARTY\",\"MARNIE\",\"LULU\",\"LISETTE\",\"JENIFFER\",\"ELENOR\",\"DORINDA\",\"DONITA\",\"CARMAN\",\"BERNITA\",\"ALTAGRACIA\",\"ALETA\",\"ADRIANNA\",\"ZORAIDA\",\"RONNIE\",\"NICOLA\",\"LYNDSEY\",\"KENDALL\",\"JANINA\",\"CHRISSY\",\"AMI\",\"STARLA\",\"PHYLIS\",\"PHUONG\",\"KYRA\",\"CHARISSE\",\"BLANCH\",\"SANJUANITA\",\"RONA\",\"NANCI\",\"MARILEE\",\"MARANDA\",\"CORY\",\"BRIGETTE\",\"SANJUANA\",\"MARITA\",\"KASSANDRA\",\"JOYCELYN\",\"IRA\",\"FELIPA\",\"CHELSIE\",\"BONNY\",\"MIREYA\",\"LORENZA\",\"KYONG\",\"ILEANA\",\"CANDELARIA\",\"TONY\",\"TOBY\",\"SHERIE\",\"OK\",\"MARK\",\"LUCIE\",\"LEATRICE\",\"LAKESHIA\",\"GERDA\",\"EDIE\",\"BAMBI\",\"MARYLIN\",\"LAVON\",\"HORTENSE\",\"GARNET\",\"EVIE\",\"TRESSA\",\"SHAYNA\",\"LAVINA\",\"KYUNG\",\"JEANETTA\",\"SHERRILL\",\"SHARA\",\"PHYLISS\",\"MITTIE\",\"ANABEL\",\"ALESIA\",\"THUY\",\"TAWANDA\",\"RICHARD\",\"JOANIE\",\"TIFFANIE\",\"LASHANDA\",\"KARISSA\",\"ENRIQUETA\",\"DARIA\",\"DANIELLA\",\"CORINNA\",\"ALANNA\",\"ABBEY\",\"ROXANE\",\"ROSEANNA\",\"MAGNOLIA\",\"LIDA\",\"KYLE\",\"JOELLEN\",\"ERA\",\"CORAL\",\"CARLEEN\",\"TRESA\",\"PEGGIE\",\"NOVELLA\",\"NILA\",\"MAYBELLE\",\"JENELLE\",\"CARINA\",\"NOVA\",\"MELINA\",\"MARQUERITE\",\"MARGARETTE\",\"JOSEPHINA\",\"EVONNE\",\"DEVIN\",\"CINTHIA\",\"ALBINA\",\"TOYA\",\"TAWNYA\",\"SHERITA\",\"SANTOS\",\"MYRIAM\",\"LIZABETH\",\"LISE\",\"KEELY\",\"JENNI\",\"GISELLE\",\"CHERYLE\",\"ARDITH\",\"ARDIS\",\"ALESHA\",\"ADRIANE\",\"SHAINA\",\"LINNEA\",\"KAROLYN\",\"HONG\",\"FLORIDA\",\"FELISHA\",\"DORI\",\"DARCI\",\"ARTIE\",\"ARMIDA\",\"ZOLA\",\"XIOMARA\",\"VERGIE\",\"SHAMIKA\",\"NENA\",\"NANNETTE\",\"MAXIE\",\"LOVIE\",\"JEANE\",\"JAIMIE\",\"INGE\",\"FARRAH\",\"ELAINA\",\"CAITLYN\",\"STARR\",\"FELICITAS\",\"CHERLY\",\"CARYL\",\"YOLONDA\",\"YASMIN\",\"TEENA\",\"PRUDENCE\",\"PENNIE\",\"NYDIA\",\"MACKENZIE\",\"ORPHA\",\"MARVEL\",\"LIZBETH\",\"LAURETTE\",\"JERRIE\",\"HERMELINDA\",\"CAROLEE\",\"TIERRA\",\"MIRIAN\",\"META\",\"MELONY\",\"KORI\",\"JENNETTE\",\"JAMILA\",\"ENA\",\"ANH\",\"YOSHIKO\",\"SUSANNAH\",\"SALINA\",\"RHIANNON\",\"JOLEEN\",\"CRISTINE\",\"ASHTON\",\"ARACELY\",\"TOMEKA\",\"SHALONDA\",\"MARTI\",\"LACIE\",\"KALA\",\"JADA\",\"ILSE\",\"HAILEY\",\"BRITTANI\",\"ZONA\",\"SYBLE\",\"SHERRYL\",\"RANDY\",\"NIDIA\",\"MARLO\",\"KANDICE\",\"KANDI\",\"DEB\",\"DEAN\",\"AMERICA\",\"ALYCIA\",\"TOMMY\",\"RONNA\",\"NORENE\",\"MERCY\",\"JOSE\",\"INGEBORG\",\"GIOVANNA\",\"GEMMA\",\"CHRISTEL\",\"AUDRY\",\"ZORA\",\"VITA\",\"VAN\",\"TRISH\",\"STEPHAINE\",\"SHIRLEE\",\"SHANIKA\",\"MELONIE\",\"MAZIE\",\"JAZMIN\",\"INGA\",\"HOA\",\"HETTIE\",\"GERALYN\",\"FONDA\",\"ESTRELLA\",\"ADELLA\",\"SU\",\"SARITA\",\"RINA\",\"MILISSA\",\"MARIBETH\",\"GOLDA\",\"EVON\",\"ETHELYN\",\"ENEDINA\",\"CHERISE\",\"CHANA\",\"VELVA\",\"TAWANNA\",\"SADE\",\"MIRTA\",\"LI\",\"KARIE\",\"JACINTA\",\"ELNA\",\"DAVINA\",\"CIERRA\",\"ASHLIE\",\"ALBERTHA\",\"TANESHA\",\"STEPHANI\",\"NELLE\",\"MINDI\",\"LU\",\"LORINDA\",\"LARUE\",\"FLORENE\",\"DEMETRA\",\"DEDRA\",\"CIARA\",\"CHANTELLE\",\"ASHLY\",\"SUZY\",\"ROSALVA\",\"NOELIA\",\"LYDA\",\"LEATHA\",\"KRYSTYNA\",\"KRISTAN\",\"KARRI\",\"DARLINE\",\"DARCIE\",\"CINDA\",\"CHEYENNE\",\"CHERRIE\",\"AWILDA\",\"ALMEDA\",\"ROLANDA\",\"LANETTE\",\"JERILYN\",\"GISELE\",\"EVALYN\",\"CYNDI\",\"CLETA\",\"CARIN\",\"ZINA\",\"ZENA\",\"VELIA\",\"TANIKA\",\"PAUL\",\"CHARISSA\",\"THOMAS\",\"TALIA\",\"MARGARETE\",\"LAVONDA\",\"KAYLEE\",\"KATHLENE\",\"JONNA\",\"IRENA\",\"ILONA\",\"IDALIA\",\"CANDIS\",\"CANDANCE\",\"BRANDEE\",\"ANITRA\",\"ALIDA\",\"SIGRID\",\"NICOLETTE\",\"MARYJO\",\"LINETTE\",\"HEDWIG\",\"CHRISTIANA\",\"CASSIDY\",\"ALEXIA\",\"TRESSIE\",\"MODESTA\",\"LUPITA\",\"LITA\",\"GLADIS\",\"EVELIA\",\"DAVIDA\",\"CHERRI\",\"CECILY\",\"ASHELY\",\"ANNABEL\",\"AGUSTINA\",\"WANITA\",\"SHIRLY\",\"ROSAURA\",\"HULDA\",\"EUN\",\"BAILEY\",\"YETTA\",\"VERONA\",\"THOMASINA\",\"SIBYL\",\"SHANNAN\",\"MECHELLE\",\"LUE\",\"LEANDRA\",\"LANI\",\"KYLEE\",\"KANDY\",\"JOLYNN\",\"FERNE\",\"EBONI\",\"CORENE\",\"ALYSIA\",\"ZULA\",\"NADA\",\"MOIRA\",\"LYNDSAY\",\"LORRETTA\",\"JUAN\",\"JAMMIE\",\"HORTENSIA\",\"GAYNELL\",\"CAMERON\",\"ADRIA\",\"VINA\",\"VICENTA\",\"TANGELA\",\"STEPHINE\",\"NORINE\",\"NELLA\",\"LIANA\",\"LESLEE\",\"KIMBERELY\",\"ILIANA\",\"GLORY\",\"FELICA\",\"EMOGENE\",\"ELFRIEDE\",\"EDEN\",\"EARTHA\",\"CARMA\",\"BEA\",\"OCIE\",\"MARRY\",\"LENNIE\",\"KIARA\",\"JACALYN\",\"CARLOTA\",\"ARIELLE\",\"YU\",\"STAR\",\"OTILIA\",\"KIRSTIN\",\"KACEY\",\"JOHNETTA\",\"JOEY\",\"JOETTA\",\"JERALDINE\",\"JAUNITA\",\"ELANA\",\"DORTHEA\",\"CAMI\",\"AMADA\",\"ADELIA\",\"VERNITA\",\"TAMAR\",\"SIOBHAN\",\"RENEA\",\"RASHIDA\",\"OUIDA\",\"ODELL\",\"NILSA\",\"MERYL\",\"KRISTYN\",\"JULIETA\",\"DANICA\",\"BREANNE\",\"AUREA\",\"ANGLEA\",\"SHERRON\",\"ODETTE\",\"MALIA\",\"LORELEI\",\"LIN\",\"LEESA\",\"KENNA\",\"KATHLYN\",\"FIONA\",\"CHARLETTE\",\"SUZIE\",\"SHANTELL\",\"SABRA\",\"RACQUEL\",\"MYONG\",\"MIRA\",\"MARTINE\",\"LUCIENNE\",\"LAVADA\",\"JULIANN\",\"JOHNIE\",\"ELVERA\",\"DELPHIA\",\"CLAIR\",\"CHRISTIANE\",\"CHAROLETTE\",\"CARRI\",\"AUGUSTINE\",\"ASHA\",\"ANGELLA\",\"PAOLA\",\"NINFA\",\"LEDA\",\"LAI\",\"EDA\",\"SUNSHINE\",\"STEFANI\",\"SHANELL\",\"PALMA\",\"MACHELLE\",\"LISSA\",\"KECIA\",\"KATHRYNE\",\"KARLENE\",\"JULISSA\",\"JETTIE\",\"JENNIFFER\",\"HUI\",\"CORRINA\",\"CHRISTOPHER\",\"CAROLANN\",\"ALENA\",\"TESS\",\"ROSARIA\",\"MYRTICE\",\"MARYLEE\",\"LIANE\",\"KENYATTA\",\"JUDIE\",\"JANEY\",\"IN\",\"ELMIRA\",\"ELDORA\",\"DENNA\",\"CRISTI\",\"CATHI\",\"ZAIDA\",\"VONNIE\",\"VIVA\",\"VERNIE\",\"ROSALINE\",\"MARIELA\",\"LUCIANA\",\"LESLI\",\"KARAN\",\"FELICE\",\"DENEEN\",\"ADINA\",\"WYNONA\",\"TARSHA\",\"SHERON\",\"SHASTA\",\"SHANITA\",\"SHANI\",\"SHANDRA\",\"RANDA\",\"PINKIE\",\"PARIS\",\"NELIDA\",\"MARILOU\",\"LYLA\",\"LAURENE\",\"LACI\",\"JOI\",\"JANENE\",\"DOROTHA\",\"DANIELE\",\"DANI\",\"CAROLYNN\",\"CARLYN\",\"BERENICE\",\"AYESHA\",\"ANNELIESE\",\"ALETHEA\",\"THERSA\",\"TAMIKO\",\"RUFINA\",\"OLIVA\",\"MOZELL\",\"MARYLYN\",\"MADISON\",\"KRISTIAN\",\"KATHYRN\",\"KASANDRA\",\"KANDACE\",\"JANAE\",\"GABRIEL\",\"DOMENICA\",\"DEBBRA\",\"DANNIELLE\",\"CHUN\",\"BUFFY\",\"BARBIE\",\"ARCELIA\",\"AJA\",\"ZENOBIA\",\"SHAREN\",\"SHAREE\",\"PATRICK\",\"PAGE\",\"MY\",\"LAVINIA\",\"KUM\",\"KACIE\",\"JACKELINE\",\"HUONG\",\"FELISA\",\"EMELIA\",\"ELEANORA\",\"CYTHIA\",\"CRISTIN\",\"CLYDE\",\"CLARIBEL\",\"CARON\",\"ANASTACIA\",\"ZULMA\",\"ZANDRA\",\"YOKO\",\"TENISHA\",\"SUSANN\",\"SHERILYN\",\"SHAY\",\"SHAWANDA\",\"SABINE\",\"ROMANA\",\"MATHILDA\",\"LINSEY\",\"KEIKO\",\"JOANA\",\"ISELA\",\"GRETTA\",\"GEORGETTA\",\"EUGENIE\",\"DUSTY\",\"DESIRAE\",\"DELORA\",\"CORAZON\",\"ANTONINA\",\"ANIKA\",\"WILLENE\",\"TRACEE\",\"TAMATHA\",\"REGAN\",\"NICHELLE\",\"MICKIE\",\"MAEGAN\",\"LUANA\",\"LANITA\",\"KELSIE\",\"EDELMIRA\",\"BREE\",\"AFTON\",\"TEODORA\",\"TAMIE\",\"SHENA\",\"MEG\",\"LINH\",\"KELI\",\"KACI\",\"DANYELLE\",\"BRITT\",\"ARLETTE\",\"ALBERTINE\",\"ADELLE\",\"TIFFINY\",\"STORMY\",\"SIMONA\",\"NUMBERS\",\"NICOLASA\",\"NICHOL\",\"NIA\",\"NAKISHA\",\"MEE\",\"MAIRA\",\"LOREEN\",\"KIZZY\",\"JOHNNY\",\"JAY\",\"FALLON\",\"CHRISTENE\",\"BOBBYE\",\"ANTHONY\",\"YING\",\"VINCENZA\",\"TANJA\",\"RUBIE\",\"RONI\",\"QUEENIE\",\"MARGARETT\",\"KIMBERLI\",\"IRMGARD\",\"IDELL\",\"HILMA\",\"EVELINA\",\"ESTA\",\"EMILEE\",\"DENNISE\",\"DANIA\",\"CARL\",\"CARIE\",\"ANTONIO\",\"WAI\",\"SANG\",\"RISA\",\"RIKKI\",\"PARTICIA\",\"MUI\",\"MASAKO\",\"MARIO\",\"LUVENIA\",\"LOREE\",\"LONI\",\"LIEN\",\"KEVIN\",\"GIGI\",\"FLORENCIA\",\"DORIAN\",\"DENITA\",\"DALLAS\",\"CHI\",\"BILLYE\",\"ALEXANDER\",\"TOMIKA\",\"SHARITA\",\"RANA\",\"NIKOLE\",\"NEOMA\",\"MARGARITE\",\"MADALYN\",\"LUCINA\",\"LAILA\",\"KALI\",\"JENETTE\",\"GABRIELE\",\"EVELYNE\",\"ELENORA\",\"CLEMENTINA\",\"ALEJANDRINA\",\"ZULEMA\",\"VIOLETTE\",\"VANNESSA\",\"THRESA\",\"RETTA\",\"PIA\",\"PATIENCE\",\"NOELLA\",\"NICKIE\",\"JONELL\",\"DELTA\",\"CHUNG\",\"CHAYA\",\"CAMELIA\",\"BETHEL\",\"ANYA\",\"ANDREW\",\"THANH\",\"SUZANN\",\"SPRING\",\"SHU\",\"MILA\",\"LILLA\",\"LAVERNA\",\"KEESHA\",\"KATTIE\",\"GIA\",\"GEORGENE\",\"EVELINE\",\"ESTELL\",\"ELIZBETH\",\"VIVIENNE\",\"VALLIE\",\"TRUDIE\",\"STEPHANE\",\"MICHEL\",\"MAGALY\",\"MADIE\",\"KENYETTA\",\"KARREN\",\"JANETTA\",\"HERMINE\",\"HARMONY\",\"DRUCILLA\",\"DEBBI\",\"CELESTINA\",\"CANDIE\",\"BRITNI\",\"BECKIE\",\"AMINA\",\"ZITA\",\"YUN\",\"YOLANDE\",\"VIVIEN\",\"VERNETTA\",\"TRUDI\",\"SOMMER\",\"PEARLE\",\"PATRINA\",\"OSSIE\",\"NICOLLE\",\"LOYCE\",\"LETTY\",\"LARISA\",\"KATHARINA\",\"JOSELYN\",\"JONELLE\",\"JENELL\",\"IESHA\",\"HEIDE\",\"FLORINDA\",\"FLORENTINA\",\"FLO\",\"ELODIA\",\"DORINE\",\"BRUNILDA\",\"BRIGID\",\"ASHLI\",\"ARDELLA\",\"TWANA\",\"THU\",\"TARAH\",\"SUNG\",\"SHEA\",\"SHAVON\",\"SHANE\",\"SERINA\",\"RAYNA\",\"RAMONITA\",\"NGA\",\"MARGURITE\",\"LUCRECIA\",\"KOURTNEY\",\"KATI\",\"JESUS\",\"JESENIA\",\"DIAMOND\",\"CRISTA\",\"AYANA\",\"ALICA\",\"ALIA\",\"VINNIE\",\"SUELLEN\",\"ROMELIA\",\"RACHELL\",\"PIPER\",\"OLYMPIA\",\"MICHIKO\",\"KATHALEEN\",\"JOLIE\",\"JESSI\",\"JANESSA\",\"HANA\",\"HA\",\"ELEASE\",\"CARLETTA\",\"BRITANY\",\"SHONA\",\"SALOME\",\"ROSAMOND\",\"REGENA\",\"RAINA\",\"NGOC\",\"NELIA\",\"LOUVENIA\",\"LESIA\",\"LATRINA\",\"LATICIA\",\"LARHONDA\",\"JINA\",\"JACKI\",\"HOLLIS\",\"HOLLEY\",\"EMMY\",\"DEEANN\",\"CORETTA\",\"ARNETTA\",\"VELVET\",\"THALIA\",\"SHANICE\",\"NETA\",\"MIKKI\",\"MICKI\",\"LONNA\",\"LEANA\",\"LASHUNDA\",\"KILEY\",\"JOYE\",\"JACQULYN\",\"IGNACIA\",\"HYUN\",\"HIROKO\",\"HENRY\",\"HENRIETTE\",\"ELAYNE\",\"DELINDA\",\"DARNELL\",\"DAHLIA\",\"COREEN\",\"CONSUELA\",\"CONCHITA\",\"CELINE\",\"BABETTE\",\"AYANNA\",\"ANETTE\",\"ALBERTINA\",\"SKYE\",\"SHAWNEE\",\"SHANEKA\",\"QUIANA\",\"PAMELIA\",\"MIN\",\"MERRI\",\"MERLENE\",\"MARGIT\",\"KIESHA\",\"KIERA\",\"KAYLENE\",\"JODEE\",\"JENISE\",\"ERLENE\",\"EMMIE\",\"ELSE\",\"DARYL\",\"DALILA\",\"DAISEY\",\"CODY\",\"CASIE\",\"BELIA\",\"BABARA\",\"VERSIE\",\"VANESA\",\"SHELBA\",\"SHAWNDA\",\"SAM\",\"NORMAN\",\"NIKIA\",\"NAOMA\",\"MARNA\",\"MARGERET\",\"MADALINE\",\"LAWANA\",\"KINDRA\",\"JUTTA\",\"JAZMINE\",\"JANETT\",\"HANNELORE\",\"GLENDORA\",\"GERTRUD\",\"GARNETT\",\"FREEDA\",\"FREDERICA\",\"FLORANCE\",\"FLAVIA\",\"DENNIS\",\"CARLINE\",\"BEVERLEE\",\"ANJANETTE\",\"VALDA\",\"TRINITY\",\"TAMALA\",\"STEVIE\",\"SHONNA\",\"SHA\",\"SARINA\",\"ONEIDA\",\"MICAH\",\"MERILYN\",\"MARLEEN\",\"LURLINE\",\"LENNA\",\"KATHERIN\",\"JIN\",\"JENI\",\"HAE\",\"GRACIA\",\"GLADY\",\"FARAH\",\"ERIC\",\"ENOLA\",\"EMA\",\"DOMINQUE\",\"DEVONA\",\"DELANA\",\"CECILA\",\"CAPRICE\",\"ALYSHA\",\"ALI\",\"ALETHIA\",\"VENA\",\"THERESIA\",\"TAWNY\",\"SONG\",\"SHAKIRA\",\"SAMARA\",\"SACHIKO\",\"RACHELE\",\"PAMELLA\",\"NICKY\",\"MARNI\",\"MARIEL\",\"MAREN\",\"MALISA\",\"LIGIA\",\"LERA\",\"LATORIA\",\"LARAE\",\"KIMBER\",\"KATHERN\",\"KAREY\",\"JENNEFER\",\"JANETH\",\"HALINA\",\"FREDIA\",\"DELISA\",\"DEBROAH\",\"CIERA\",\"CHIN\",\"ANGELIKA\",\"ANDREE\",\"ALTHA\",\"YEN\",\"VIVAN\",\"TERRESA\",\"TANNA\",\"SUK\",\"SUDIE\",\"SOO\",\"SIGNE\",\"SALENA\",\"RONNI\",\"REBBECCA\",\"MYRTIE\",\"MCKENZIE\",\"MALIKA\",\"MAIDA\",\"LOAN\",\"LEONARDA\",\"KAYLEIGH\",\"FRANCE\",\"ETHYL\",\"ELLYN\",\"DAYLE\",\"CAMMIE\",\"BRITTNI\",\"BIRGIT\",\"AVELINA\",\"ASUNCION\",\"ARIANNA\",\"AKIKO\",\"VENICE\",\"TYESHA\",\"TONIE\",\"TIESHA\",\"TAKISHA\",\"STEFFANIE\",\"SINDY\",\"SANTANA\",\"MEGHANN\",\"MANDA\",\"MACIE\",\"LADY\",\"KELLYE\",\"KELLEE\",\"JOSLYN\",\"JASON\",\"INGER\",\"INDIRA\",\"GLINDA\",\"GLENNIS\",\"FERNANDA\",\"FAUSTINA\",\"ENEIDA\",\"ELICIA\",\"DOT\",\"DIGNA\",\"DELL\",\"ARLETTA\",\"ANDRE\",\"WILLIA\",\"TAMMARA\",\"TABETHA\",\"SHERRELL\",\"SARI\",\"REFUGIO\",\"REBBECA\",\"PAULETTA\",\"NIEVES\",\"NATOSHA\",\"NAKITA\",\"MAMMIE\",\"KENISHA\",\"KAZUKO\",\"KASSIE\",\"GARY\",\"EARLEAN\",\"DAPHINE\",\"CORLISS\",\"CLOTILDE\",\"CAROLYNE\",\"BERNETTA\",\"AUGUSTINA\",\"AUDREA\",\"ANNIS\",\"ANNABELL\",\"YAN\",\"TENNILLE\",\"TAMICA\",\"SELENE\",\"SEAN\",\"ROSANA\",\"REGENIA\",\"QIANA\",\"MARKITA\",\"MACY\",\"LEEANNE\",\"LAURINE\",\"KYM\",\"JESSENIA\",\"JANITA\",\"GEORGINE\",\"GENIE\",\"EMIKO\",\"ELVIE\",\"DEANDRA\",\"DAGMAR\",\"CORIE\",\"COLLEN\",\"CHERISH\",\"ROMAINE\",\"PORSHA\",\"PEARLENE\",\"MICHELINE\",\"MERNA\",\"MARGORIE\",\"MARGARETTA\",\"LORE\",\"KENNETH\",\"JENINE\",\"HERMINA\",\"FREDERICKA\",\"ELKE\",\"DRUSILLA\",\"DORATHY\",\"DIONE\",\"DESIRE\",\"CELENA\",\"BRIGIDA\",\"ANGELES\",\"ALLEGRA\",\"THEO\",\"TAMEKIA\",\"SYNTHIA\",\"STEPHEN\",\"SOOK\",\"SLYVIA\",\"ROSANN\",\"REATHA\",\"RAYE\",\"MARQUETTA\",\"MARGART\",\"LING\",\"LAYLA\",\"KYMBERLY\",\"KIANA\",\"KAYLEEN\",\"KATLYN\",\"KARMEN\",\"JOELLA\",\"IRINA\",\"EMELDA\",\"ELENI\",\"DETRA\",\"CLEMMIE\",\"CHERYLL\",\"CHANTELL\",\"CATHEY\",\"ARNITA\",\"ARLA\",\"ANGLE\",\"ANGELIC\",\"ALYSE\",\"ZOFIA\",\"THOMASINE\",\"TENNIE\",\"SON\",\"SHERLY\",\"SHERLEY\",\"SHARYL\",\"REMEDIOS\",\"PETRINA\",\"NICKOLE\",\"MYUNG\",\"MYRLE\",\"MOZELLA\",\"LOUANNE\",\"LISHA\",\"LATIA\",\"LANE\",\"KRYSTA\",\"JULIENNE\",\"JOEL\",\"JEANENE\",\"JACQUALINE\",\"ISAURA\",\"GWENDA\",\"EARLEEN\",\"DONALD\",\"CLEOPATRA\",\"CARLIE\",\"AUDIE\",\"ANTONIETTA\",\"ALISE\",\"ALEX\",\"VERDELL\",\"VAL\",\"TYLER\",\"TOMOKO\",\"THAO\",\"TALISHA\",\"STEVEN\",\"SO\",\"SHEMIKA\",\"SHAUN\",\"SCARLET\",\"SAVANNA\",\"SANTINA\",\"ROSIA\",\"RAEANN\",\"ODILIA\",\"NANA\",\"MINNA\",\"MAGAN\",\"LYNELLE\",\"LE\",\"KARMA\",\"JOEANN\",\"IVANA\",\"INELL\",\"ILANA\",\"HYE\",\"HONEY\",\"HEE\",\"GUDRUN\",\"FRANK\",\"DREAMA\",\"CRISSY\",\"CHANTE\",\"CARMELINA\",\"ARVILLA\",\"ARTHUR\",\"ANNAMAE\",\"ALVERA\",\"ALEIDA\",\"AARON\",\"YEE\",\"YANIRA\",\"VANDA\",\"TIANNA\",\"TAM\",\"STEFANIA\",\"SHIRA\",\"PERRY\",\"NICOL\",\"NANCIE\",\"MONSERRATE\",\"MINH\",\"MELYNDA\",\"MELANY\",\"MATTHEW\",\"LOVELLA\",\"LAURE\",\"KIRBY\",\"KACY\",\"JACQUELYNN\",\"HYON\",\"GERTHA\",\"FRANCISCO\",\"ELIANA\",\"CHRISTENA\",\"CHRISTEEN\",\"CHARISE\",\"CATERINA\",\"CARLEY\",\"CANDYCE\",\"ARLENA\",\"AMMIE\",\"YANG\",\"WILLETTE\",\"VANITA\",\"TUYET\",\"TINY\",\"SYREETA\",\"SILVA\",\"SCOTT\",\"RONALD\",\"PENNEY\",\"NYLA\",\"MICHAL\",\"MAURICE\",\"MARYAM\",\"MARYA\",\"MAGEN\",\"LUDIE\",\"LOMA\",\"LIVIA\",\"LANELL\",\"KIMBERLIE\",\"JULEE\",\"DONETTA\",\"DIEDRA\",\"DENISHA\",\"DEANE\",\"DAWNE\",\"CLARINE\",\"CHERRYL\",\"BRONWYN\",\"BRANDON\",\"ALLA\",\"VALERY\",\"TONDA\",\"SUEANN\",\"SORAYA\",\"SHOSHANA\",\"SHELA\",\"SHARLEEN\",\"SHANELLE\",\"NERISSA\",\"MICHEAL\",\"MERIDITH\",\"MELLIE\",\"MAYE\",\"MAPLE\",\"MAGARET\",\"LUIS\",\"LILI\",\"LEONILA\",\"LEONIE\",\"LEEANNA\",\"LAVONIA\",\"LAVERA\",\"KRISTEL\",\"KATHEY\",\"KATHE\",\"JUSTIN\",\"JULIAN\",\"JIMMY\",\"JANN\",\"ILDA\",\"HILDRED\",\"HILDEGARDE\",\"GENIA\",\"FUMIKO\",\"EVELIN\",\"ERMELINDA\",\"ELLY\",\"DUNG\",\"DOLORIS\",\"DIONNA\",\"DANAE\",\"BERNEICE\",\"ANNICE\",\"ALIX\",\"VERENA\",\"VERDIE\",\"TRISTAN\",\"SHAWNNA\",\"SHAWANA\",\"SHAUNNA\",\"ROZELLA\",\"RANDEE\",\"RANAE\",\"MILAGRO\",\"LYNELL\",\"LUISE\",\"LOUIE\",\"LOIDA\",\"LISBETH\",\"KARLEEN\",\"JUNITA\",\"JONA\",\"ISIS\",\"HYACINTH\",\"HEDY\",\"GWENN\",\"ETHELENE\",\"ERLINE\",\"EDWARD\",\"DONYA\",\"DOMONIQUE\",\"DELICIA\",\"DANNETTE\",\"CICELY\",\"BRANDA\",\"BLYTHE\",\"BETHANN\",\"ASHLYN\",\"ANNALEE\",\"ALLINE\",\"YUKO\",\"VELLA\",\"TRANG\",\"TOWANDA\",\"TESHA\",\"SHERLYN\",\"NARCISA\",\"MIGUELINA\",\"MERI\",\"MAYBELL\",\"MARLANA\",\"MARGUERITA\",\"MADLYN\",\"LUNA\",\"LORY\",\"LORIANN\",\"LIBERTY\",\"LEONORE\",\"LEIGHANN\",\"LAURICE\",\"LATESHA\",\"LARONDA\",\"KATRICE\",\"KASIE\",\"KARL\",\"KALEY\",\"JADWIGA\",\"GLENNIE\",\"GEARLDINE\",\"FRANCINA\",\"EPIFANIA\",\"DYAN\",\"DORIE\",\"DIEDRE\",\"DENESE\",\"DEMETRICE\",\"DELENA\",\"DARBY\",\"CRISTIE\",\"CLEORA\",\"CATARINA\",\"CARISA\",\"BERNIE\",\"BARBERA\",\"ALMETA\",\"TRULA\",\"TEREASA\",\"SOLANGE\",\"SHEILAH\",\"SHAVONNE\",\"SANORA\",\"ROCHELL\",\"MATHILDE\",\"MARGARETA\",\"MAIA\",\"LYNSEY\",\"LAWANNA\",\"LAUNA\",\"KENA\",\"KEENA\",\"KATIA\",\"JAMEY\",\"GLYNDA\",\"GAYLENE\",\"ELVINA\",\"ELANOR\",\"DANUTA\",\"DANIKA\",\"CRISTEN\",\"CORDIE\",\"COLETTA\",\"CLARITA\",\"CARMON\",\"BRYNN\",\"AZUCENA\",\"AUNDREA\",\"ANGELE\",\"YI\",\"WALTER\",\"VERLIE\",\"VERLENE\",\"TAMESHA\",\"SILVANA\",\"SEBRINA\",\"SAMIRA\",\"REDA\",\"RAYLENE\",\"PENNI\",\"PANDORA\",\"NORAH\",\"NOMA\",\"MIREILLE\",\"MELISSIA\",\"MARYALICE\",\"LARAINE\",\"KIMBERY\",\"KARYL\",\"KARINE\",\"KAM\",\"JOLANDA\",\"JOHANA\",\"JESUSA\",\"JALEESA\",\"JAE\",\"JACQUELYNE\",\"IRISH\",\"ILUMINADA\",\"HILARIA\",\"HANH\",\"GENNIE\",\"FRANCIE\",\"FLORETTA\",\"EXIE\",\"EDDA\",\"DREMA\",\"DELPHA\",\"BEV\",\"BARBAR\",\"ASSUNTA\",\"ARDELL\",\"ANNALISA\",\"ALISIA\",\"YUKIKO\",\"YOLANDO\",\"WONDA\",\"WEI\",\"WALTRAUD\",\"VETA\",\"TEQUILA\",\"TEMEKA\",\"TAMEIKA\",\"SHIRLEEN\",\"SHENITA\",\"PIEDAD\",\"OZELLA\",\"MIRTHA\",\"MARILU\",\"KIMIKO\",\"JULIANE\",\"JENICE\",\"JEN\",\"JANAY\",\"JACQUILINE\",\"HILDE\",\"FE\",\"FAE\",\"EVAN\",\"EUGENE\",\"ELOIS\",\"ECHO\",\"DEVORAH\",\"CHAU\",\"BRINDA\",\"BETSEY\",\"ARMINDA\",\"ARACELIS\",\"APRYL\",\"ANNETT\",\"ALISHIA\",\"VEOLA\",\"USHA\",\"TOSHIKO\",\"THEOLA\",\"TASHIA\",\"TALITHA\",\"SHERY\",\"RUDY\",\"RENETTA\",\"REIKO\",\"RASHEEDA\",\"OMEGA\",\"OBDULIA\",\"MIKA\",\"MELAINE\",\"MEGGAN\",\"MARTIN\",\"MARLEN\",\"MARGET\",\"MARCELINE\",\"MANA\",\"MAGDALEN\",\"LIBRADA\",\"LEZLIE\",\"LEXIE\",\"LATASHIA\",\"LASANDRA\",\"KELLE\",\"ISIDRA\",\"ISA\",\"INOCENCIA\",\"GWYN\",\"FRANCOISE\",\"ERMINIA\",\"ERINN\",\"DIMPLE\",\"DEVORA\",\"CRISELDA\",\"ARMANDA\",\"ARIE\",\"ARIANE\",\"ANGELO\",\"ANGELENA\",\"ALLEN\",\"ALIZA\",\"ADRIENE\",\"ADALINE\",\"XOCHITL\",\"TWANNA\",\"TRAN\",\"TOMIKO\",\"TAMISHA\",\"TAISHA\",\"SUSY\",\"SIU\",\"RUTHA\",\"ROXY\",\"RHONA\",\"RAYMOND\",\"OTHA\",\"NORIKO\",\"NATASHIA\",\"MERRIE\",\"MELVIN\",\"MARINDA\",\"MARIKO\",\"MARGERT\",\"LORIS\",\"LIZZETTE\",\"LEISHA\",\"KAILA\",\"KA\",\"JOANNIE\",\"JERRICA\",\"JENE\",\"JANNET\",\"JANEE\",\"JACINDA\",\"HERTA\",\"ELENORE\",\"DORETTA\",\"DELAINE\",\"DANIELL\",\"CLAUDIE\",\"CHINA\",\"BRITTA\",\"APOLONIA\",\"AMBERLY\",\"ALEASE\",\"YURI\",\"YUK\",\"WEN\",\"WANETA\",\"UTE\",\"TOMI\",\"SHARRI\",\"SANDIE\",\"ROSELLE\",\"REYNALDA\",\"RAGUEL\",\"PHYLICIA\",\"PATRIA\",\"OLIMPIA\",\"ODELIA\",\"MITZIE\",\"MITCHELL\",\"MISS\",\"MINDA\",\"MIGNON\",\"MICA\",\"MENDY\",\"MARIVEL\",\"MAILE\",\"LYNETTA\",\"LAVETTE\",\"LAURYN\",\"LATRISHA\",\"LAKIESHA\",\"KIERSTEN\",\"KARY\",\"JOSPHINE\",\"JOLYN\",\"JETTA\",\"JANISE\",\"JACQUIE\",\"IVELISSE\",\"GLYNIS\",\"GIANNA\",\"GAYNELLE\",\"EMERALD\",\"DEMETRIUS\",\"DANYELL\",\"DANILLE\",\"DACIA\",\"CORALEE\",\"CHER\",\"CEOLA\",\"BRETT\",\"BELL\",\"ARIANNE\",\"ALESHIA\",\"YUNG\",\"WILLIEMAE\",\"TROY\",\"TRINH\",\"THORA\",\"TAI\",\"SVETLANA\",\"SHERIKA\",\"SHEMEKA\",\"SHAUNDA\",\"ROSELINE\",\"RICKI\",\"MELDA\",\"MALLIE\",\"LAVONNA\",\"LATINA\",\"LARRY\",\"LAQUANDA\",\"LALA\",\"LACHELLE\",\"KLARA\",\"KANDIS\",\"JOHNA\",\"JEANMARIE\",\"JAYE\",\"HANG\",\"GRAYCE\",\"GERTUDE\",\"EMERITA\",\"EBONIE\",\"CLORINDA\",\"CHING\",\"CHERY\",\"CAROLA\",\"BREANN\",\"BLOSSOM\",\"BERNARDINE\",\"BECKI\",\"ARLETHA\",\"ARGELIA\",\"ARA\",\"ALITA\",\"YULANDA\",\"YON\",\"YESSENIA\",\"TOBI\",\"TASIA\",\"SYLVIE\",\"SHIRL\",\"SHIRELY\",\"SHERIDAN\",\"SHELLA\",\"SHANTELLE\",\"SACHA\",\"ROYCE\",\"REBECKA\",\"REAGAN\",\"PROVIDENCIA\",\"PAULENE\",\"MISHA\",\"MIKI\",\"MARLINE\",\"MARICA\",\"LORITA\",\"LATOYIA\",\"LASONYA\",\"KERSTIN\",\"KENDA\",\"KEITHA\",\"KATHRIN\",\"JAYMIE\",\"JACK\",\"GRICELDA\",\"GINETTE\",\"ERYN\",\"ELINA\",\"ELFRIEDA\",\"DANYEL\",\"CHEREE\",\"CHANELLE\",\"BARRIE\",\"AVERY\",\"AURORE\",\"ANNAMARIA\",\"ALLEEN\",\"AILENE\",\"AIDE\",\"YASMINE\",\"VASHTI\",\"VALENTINE\",\"TREASA\",\"TORY\",\"TIFFANEY\",\"SHERYLL\",\"SHARIE\",\"SHANAE\",\"SAU\",\"RAISA\",\"PA\",\"NEDA\",\"MITSUKO\",\"MIRELLA\",\"MILDA\",\"MARYANNA\",\"MARAGRET\",\"MABELLE\",\"LUETTA\",\"LORINA\",\"LETISHA\",\"LATARSHA\",\"LANELLE\",\"LAJUANA\",\"KRISSY\",\"KARLY\",\"KARENA\",\"JON\",\"JESSIKA\",\"JERICA\",\"JEANELLE\",\"JANUARY\",\"JALISA\",\"JACELYN\",\"IZOLA\",\"IVEY\",\"GREGORY\",\"EUNA\",\"ETHA\",\"DREW\",\"DOMITILA\",\"DOMINICA\",\"DAINA\",\"CREOLA\",\"CARLI\",\"CAMIE\",\"BUNNY\",\"BRITTNY\",\"ASHANTI\",\"ANISHA\",\"ALEEN\",\"ADAH\",\"YASUKO\",\"WINTER\",\"VIKI\",\"VALRIE\",\"TONA\",\"TINISHA\",\"THI\",\"TERISA\",\"TATUM\",\"TANEKA\",\"SIMONNE\",\"SHALANDA\",\"SERITA\",\"RESSIE\",\"REFUGIA\",\"PAZ\",\"OLENE\",\"NA\",\"MERRILL\",\"MARGHERITA\",\"MANDIE\",\"MAN\",\"MAIRE\",\"LYNDIA\",\"LUCI\",\"LORRIANE\",\"LORETA\",\"LEONIA\",\"LAVONA\",\"LASHAWNDA\",\"LAKIA\",\"KYOKO\",\"KRYSTINA\",\"KRYSTEN\",\"KENIA\",\"KELSI\",\"JUDE\",\"JEANICE\",\"ISOBEL\",\"GEORGIANN\",\"GENNY\",\"FELICIDAD\",\"EILENE\",\"DEON\",\"DELOISE\",\"DEEDEE\",\"DANNIE\",\"CONCEPTION\",\"CLORA\",\"CHERILYN\",\"CHANG\",\"CALANDRA\",\"BERRY\",\"ARMANDINA\",\"ANISA\",\"ULA\",\"TIMOTHY\",\"TIERA\",\"THERESSA\",\"STEPHANIA\",\"SIMA\",\"SHYLA\",\"SHONTA\",\"SHERA\",\"SHAQUITA\",\"SHALA\",\"SAMMY\",\"ROSSANA\",\"NOHEMI\",\"NERY\",\"MORIAH\",\"MELITA\",\"MELIDA\",\"MELANI\",\"MARYLYNN\",\"MARISHA\",\"MARIETTE\",\"MALORIE\",\"MADELENE\",\"LUDIVINA\",\"LORIA\",\"LORETTE\",\"LORALEE\",\"LIANNE\",\"LEON\",\"LAVENIA\",\"LAURINDA\",\"LASHON\",\"KIT\",\"KIMI\",\"KEILA\",\"KATELYNN\",\"KAI\",\"JONE\",\"JOANE\",\"JI\",\"JAYNA\",\"JANELLA\",\"JA\",\"HUE\",\"HERTHA\",\"FRANCENE\",\"ELINORE\",\"DESPINA\",\"DELSIE\",\"DEEDRA\",\"CLEMENCIA\",\"CARRY\",\"CAROLIN\",\"CARLOS\",\"BULAH\",\"BRITTANIE\",\"BOK\",\"BLONDELL\",\"BIBI\",\"BEAULAH\",\"BEATA\",\"ANNITA\",\"AGRIPINA\",\"VIRGEN\",\"VALENE\",\"UN\",\"TWANDA\",\"TOMMYE\",\"TOI\",\"TARRA\",\"TARI\",\"TAMMERA\",\"SHAKIA\",\"SADYE\",\"RUTHANNE\",\"ROCHEL\",\"RIVKA\",\"PURA\",\"NENITA\",\"NATISHA\",\"MING\",\"MERRILEE\",\"MELODEE\",\"MARVIS\",\"LUCILLA\",\"LEENA\",\"LAVETA\",\"LARITA\",\"LANIE\",\"KEREN\",\"ILEEN\",\"GEORGEANN\",\"GENNA\",\"GENESIS\",\"FRIDA\",\"EWA\",\"EUFEMIA\",\"EMELY\",\"ELA\",\"EDYTH\",\"DEONNA\",\"DEADRA\",\"DARLENA\",\"CHANELL\",\"CHAN\",\"CATHERN\",\"CASSONDRA\",\"CASSAUNDRA\",\"BERNARDA\",\"BERNA\",\"ARLINDA\",\"ANAMARIA\",\"ALBERT\",\"WESLEY\",\"VERTIE\",\"VALERI\",\"TORRI\",\"TATYANA\",\"STASIA\",\"SHERISE\",\"SHERILL\",\"SEASON\",\"SCOTTIE\",\"SANDA\",\"RUTHE\",\"ROSY\",\"ROBERTO\",\"ROBBI\",\"RANEE\",\"QUYEN\",\"PEARLY\",\"PALMIRA\",\"ONITA\",\"NISHA\",\"NIESHA\",\"NIDA\",\"NEVADA\",\"NAM\",\"MERLYN\",\"MAYOLA\",\"MARYLOUISE\",\"MARYLAND\",\"MARX\",\"MARTH\",\"MARGENE\",\"MADELAINE\",\"LONDA\",\"LEONTINE\",\"LEOMA\",\"LEIA\",\"LAWRENCE\",\"LAURALEE\",\"LANORA\",\"LAKITA\",\"KIYOKO\",\"KETURAH\",\"KATELIN\",\"KAREEN\",\"JONIE\",\"JOHNETTE\",\"JENEE\",\"JEANETT\",\"IZETTA\",\"HIEDI\",\"HEIKE\",\"HASSIE\",\"HAROLD\",\"GIUSEPPINA\",\"GEORGANN\",\"FIDELA\",\"FERNANDE\",\"ELWANDA\",\"ELLAMAE\",\"ELIZ\",\"DUSTI\",\"DOTTY\",\"CYNDY\",\"CORALIE\",\"CELESTA\",\"ARGENTINA\",\"ALVERTA\",\"XENIA\",\"WAVA\",\"VANETTA\",\"TORRIE\",\"TASHINA\",\"TANDY\",\"TAMBRA\",\"TAMA\",\"STEPANIE\",\"SHILA\",\"SHAUNTA\",\"SHARAN\",\"SHANIQUA\",\"SHAE\",\"SETSUKO\",\"SERAFINA\",\"SANDEE\",\"ROSAMARIA\",\"PRISCILA\",\"OLINDA\",\"NADENE\",\"MUOI\",\"MICHELINA\",\"MERCEDEZ\",\"MARYROSE\",\"MARIN\",\"MARCENE\",\"MAO\",\"MAGALI\",\"MAFALDA\",\"LOGAN\",\"LINN\",\"LANNIE\",\"KAYCE\",\"KAROLINE\",\"KAMILAH\",\"KAMALA\",\"JUSTA\",\"JOLINE\",\"JENNINE\",\"JACQUETTA\",\"IRAIDA\",\"GERALD\",\"GEORGEANNA\",\"FRANCHESCA\",\"FAIRY\",\"EMELINE\",\"ELANE\",\"EHTEL\",\"EARLIE\",\"DULCIE\",\"DALENE\",\"CRIS\",\"CLASSIE\",\"CHERE\",\"CHARIS\",\"CAROYLN\",\"CARMINA\",\"CARITA\",\"BRIAN\",\"BETHANIE\",\"AYAKO\",\"ARICA\",\"AN\",\"ALYSA\",\"ALESSANDRA\",\"AKILAH\",\"ADRIEN\",\"ZETTA\",\"YOULANDA\",\"YELENA\",\"YAHAIRA\",\"XUAN\",\"WENDOLYN\",\"VICTOR\",\"TIJUANA\",\"TERRELL\",\"TERINA\",\"TERESIA\",\"SUZI\",\"SUNDAY\",\"SHERELL\",\"SHAVONDA\",\"SHAUNTE\",\"SHARDA\",\"SHAKITA\",\"SENA\",\"RYANN\",\"RUBI\",\"RIVA\",\"REGINIA\",\"REA\",\"RACHAL\",\"PARTHENIA\",\"PAMULA\",\"MONNIE\",\"MONET\",\"MICHAELE\",\"MELIA\",\"MARINE\",\"MALKA\",\"MAISHA\",\"LISANDRA\",\"LEO\",\"LEKISHA\",\"LEAN\",\"LAURENCE\",\"LAKENDRA\",\"KRYSTIN\",\"KORTNEY\",\"KIZZIE\",\"KITTIE\",\"KERA\",\"KENDAL\",\"KEMBERLY\",\"KANISHA\",\"JULENE\",\"JULE\",\"JOSHUA\",\"JOHANNE\",\"JEFFREY\",\"JAMEE\",\"HAN\",\"HALLEY\",\"GIDGET\",\"GALINA\",\"FREDRICKA\",\"FLETA\",\"FATIMAH\",\"EUSEBIA\",\"ELZA\",\"ELEONORE\",\"DORTHEY\",\"DORIA\",\"DONELLA\",\"DINORAH\",\"DELORSE\",\"CLARETHA\",\"CHRISTINIA\",\"CHARLYN\",\"BONG\",\"BELKIS\",\"AZZIE\",\"ANDERA\",\"AIKO\",\"ADENA\",\"YER\",\"YAJAIRA\",\"WAN\",\"VANIA\",\"ULRIKE\",\"TOSHIA\",\"TIFANY\",\"STEFANY\",\"SHIZUE\",\"SHENIKA\",\"SHAWANNA\",\"SHAROLYN\",\"SHARILYN\",\"SHAQUANA\",\"SHANTAY\",\"SEE\",\"ROZANNE\",\"ROSELEE\",\"RICKIE\",\"REMONA\",\"REANNA\",\"RAELENE\",\"QUINN\",\"PHUNG\",\"PETRONILA\",\"NATACHA\",\"NANCEY\",\"MYRL\",\"MIYOKO\",\"MIESHA\",\"MERIDETH\",\"MARVELLA\",\"MARQUITTA\",\"MARHTA\",\"MARCHELLE\",\"LIZETH\",\"LIBBIE\",\"LAHOMA\",\"LADAWN\",\"KINA\",\"KATHELEEN\",\"KATHARYN\",\"KARISA\",\"KALEIGH\",\"JUNIE\",\"JULIEANN\",\"JOHNSIE\",\"JANEAN\",\"JAIMEE\",\"JACKQUELINE\",\"HISAKO\",\"HERMA\",\"HELAINE\",\"GWYNETH\",\"GLENN\",\"GITA\",\"EUSTOLIA\",\"EMELINA\",\"ELIN\",\"EDRIS\",\"DONNETTE\",\"DONNETTA\",\"DIERDRE\",\"DENAE\",\"DARCEL\",\"CLAUDE\",\"CLARISA\",\"CINDERELLA\",\"CHIA\",\"CHARLESETTA\",\"CHARITA\",\"CELSA\",\"CASSY\",\"CASSI\",\"CARLEE\",\"BRUNA\",\"BRITTANEY\",\"BRANDE\",\"BILLI\",\"BAO\",\"ANTONETTA\",\"ANGLA\",\"ANGELYN\",\"ANALISA\",\"ALANE\",\"WENONA\",\"WENDIE\",\"VERONIQUE\",\"VANNESA\",\"TOBIE\",\"TEMPIE\",\"SUMIKO\",\"SULEMA\",\"SPARKLE\",\"SOMER\",\"SHEBA\",\"SHAYNE\",\"SHARICE\",\"SHANEL\",\"SHALON\",\"SAGE\",\"ROY\",\"ROSIO\",\"ROSELIA\",\"RENAY\",\"REMA\",\"REENA\",\"PORSCHE\",\"PING\",\"PEG\",\"OZIE\",\"ORETHA\",\"ORALEE\",\"ODA\",\"NU\",\"NGAN\",\"NAKESHA\",\"MILLY\",\"MARYBELLE\",\"MARLIN\",\"MARIS\",\"MARGRETT\",\"MARAGARET\",\"MANIE\",\"LURLENE\",\"LILLIA\",\"LIESELOTTE\",\"LAVELLE\",\"LASHAUNDA\",\"LAKEESHA\",\"KEITH\",\"KAYCEE\",\"KALYN\",\"JOYA\",\"JOETTE\",\"JENAE\",\"JANIECE\",\"ILLA\",\"GRISEL\",\"GLAYDS\",\"GENEVIE\",\"GALA\",\"FREDDA\",\"FRED\",\"ELMER\",\"ELEONOR\",\"DEBERA\",\"DEANDREA\",\"DAN\",\"CORRINNE\",\"CORDIA\",\"CONTESSA\",\"COLENE\",\"CLEOTILDE\",\"CHARLOTT\",\"CHANTAY\",\"CECILLE\",\"BEATRIS\",\"AZALEE\",\"ARLEAN\",\"ARDATH\",\"ANJELICA\",\"ANJA\",\"ALFREDIA\",\"ALEISHA\",\"ADAM\",\"ZADA\",\"YUONNE\",\"XIAO\",\"WILLODEAN\",\"WHITLEY\",\"VENNIE\",\"VANNA\",\"TYISHA\",\"TOVA\",\"TORIE\",\"TONISHA\",\"TILDA\",\"TIEN\",\"TEMPLE\",\"SIRENA\",\"SHERRIL\",\"SHANTI\",\"SHAN\",\"SENAIDA\",\"SAMELLA\",\"ROBBYN\",\"RENDA\",\"REITA\",\"PHEBE\",\"PAULITA\",\"NOBUKO\",\"NGUYET\",\"NEOMI\",\"MOON\",\"MIKAELA\",\"MELANIA\",\"MAXIMINA\",\"MARG\",\"MAISIE\",\"LYNNA\",\"LILLI\",\"LAYNE\",\"LASHAUN\",\"LAKENYA\",\"LAEL\",\"KIRSTIE\",\"KATHLINE\",\"KASHA\",\"KARLYN\",\"KARIMA\",\"JOVAN\",\"JOSEFINE\",\"JENNELL\",\"JACQUI\",\"JACKELYN\",\"HYO\",\"HIEN\",\"GRAZYNA\",\"FLORRIE\",\"FLORIA\",\"ELEONORA\",\"DWANA\",\"DORLA\",\"DONG\",\"DELMY\",\"DEJA\",\"DEDE\",\"DANN\",\"CRYSTA\",\"CLELIA\",\"CLARIS\",\"CLARENCE\",\"CHIEKO\",\"CHERLYN\",\"CHERELLE\",\"CHARMAIN\",\"CHARA\",\"CAMMY\",\"BEE\",\"ARNETTE\",\"ARDELLE\",\"ANNIKA\",\"AMIEE\",\"AMEE\",\"ALLENA\",\"YVONE\",\"YUKI\",\"YOSHIE\",\"YEVETTE\",\"YAEL\",\"WILLETTA\",\"VONCILE\",\"VENETTA\",\"TULA\",\"TONETTE\",\"TIMIKA\",\"TEMIKA\",\"TELMA\",\"TEISHA\",\"TAREN\",\"TA\",\"STACEE\",\"SHIN\",\"SHAWNTA\",\"SATURNINA\",\"RICARDA\",\"POK\",\"PASTY\",\"ONIE\",\"NUBIA\",\"MORA\",\"MIKE\",\"MARIELLE\",\"MARIELLA\",\"MARIANELA\",\"MARDELL\",\"MANY\",\"LUANNA\",\"LOISE\",\"LISABETH\",\"LINDSY\",\"LILLIANA\",\"LILLIAM\",\"LELAH\",\"LEIGHA\",\"LEANORA\",\"LANG\",\"KRISTEEN\",\"KHALILAH\",\"KEELEY\",\"KANDRA\",\"JUNKO\",\"JOAQUINA\",\"JERLENE\",\"JANI\",\"JAMIKA\",\"JAME\",\"HSIU\",\"HERMILA\",\"GOLDEN\",\"GENEVIVE\",\"EVIA\",\"EUGENA\",\"EMMALINE\",\"ELFREDA\",\"ELENE\",\"DONETTE\",\"DELCIE\",\"DEEANNA\",\"DARCEY\",\"CUC\",\"CLARINDA\",\"CIRA\",\"CHAE\",\"CELINDA\",\"CATHERYN\",\"CATHERIN\",\"CASIMIRA\",\"CARMELIA\",\"CAMELLIA\",\"BREANA\",\"BOBETTE\",\"BERNARDINA\",\"BEBE\",\"BASILIA\",\"ARLYNE\",\"AMAL\",\"ALAYNA\",\"ZONIA\",\"ZENIA\",\"YURIKO\",\"YAEKO\",\"WYNELL\",\"WILLOW\",\"WILLENA\",\"VERNIA\",\"TU\",\"TRAVIS\",\"TORA\",\"TERRILYN\",\"TERICA\",\"TENESHA\",\"TAWNA\",\"TAJUANA\",\"TAINA\",\"STEPHNIE\",\"SONA\",\"SOL\",\"SINA\",\"SHONDRA\",\"SHIZUKO\",\"SHERLENE\",\"SHERICE\",\"SHARIKA\",\"ROSSIE\",\"ROSENA\",\"RORY\",\"RIMA\",\"RIA\",\"RHEBA\",\"RENNA\",\"PETER\",\"NATALYA\",\"NANCEE\",\"MELODI\",\"MEDA\",\"MAXIMA\",\"MATHA\",\"MARKETTA\",\"MARICRUZ\",\"MARCELENE\",\"MALVINA\",\"LUBA\",\"LOUETTA\",\"LEIDA\",\"LECIA\",\"LAURAN\",\"LASHAWNA\",\"LAINE\",\"KHADIJAH\",\"KATERINE\",\"KASI\",\"KALLIE\",\"JULIETTA\",\"JESUSITA\",\"JESTINE\",\"JESSIA\",\"JEREMY\",\"JEFFIE\",\"JANYCE\",\"ISADORA\",\"GEORGIANNE\",\"FIDELIA\",\"EVITA\",\"EURA\",\"EULAH\",\"ESTEFANA\",\"ELSY\",\"ELIZABET\",\"ELADIA\",\"DODIE\",\"DION\",\"DIA\",\"DENISSE\",\"DELORAS\",\"DELILA\",\"DAYSI\",\"DAKOTA\",\"CURTIS\",\"CRYSTLE\",\"CONCHA\",\"COLBY\",\"CLARETTA\",\"CHU\",\"CHRISTIA\",\"CHARLSIE\",\"CHARLENA\",\"CARYLON\",\"BETTYANN\",\"ASLEY\",\"ASHLEA\",\"AMIRA\",\"AI\",\"AGUEDA\",\"AGNUS\",\"YUETTE\",\"VINITA\",\"VICTORINA\",\"TYNISHA\",\"TREENA\",\"TOCCARA\",\"TISH\",\"THOMASENA\",\"TEGAN\",\"SOILA\",\"SHILOH\",\"SHENNA\",\"SHARMAINE\",\"SHANTAE\",\"SHANDI\",\"SEPTEMBER\",\"SARAN\",\"SARAI\",\"SANA\",\"SAMUEL\",\"SALLEY\",\"ROSETTE\",\"ROLANDE\",\"REGINE\",\"OTELIA\",\"OSCAR\",\"OLEVIA\",\"NICHOLLE\",\"NECOLE\",\"NAIDA\",\"MYRTA\",\"MYESHA\",\"MITSUE\",\"MINTA\",\"MERTIE\",\"MARGY\",\"MAHALIA\",\"MADALENE\",\"LOVE\",\"LOURA\",\"LOREAN\",\"LEWIS\",\"LESHA\",\"LEONIDA\",\"LENITA\",\"LAVONE\",\"LASHELL\",\"LASHANDRA\",\"LAMONICA\",\"KIMBRA\",\"KATHERINA\",\"KARRY\",\"KANESHA\",\"JULIO\",\"JONG\",\"JENEVA\",\"JAQUELYN\",\"HWA\",\"GILMA\",\"GHISLAINE\",\"GERTRUDIS\",\"FRANSISCA\",\"FERMINA\",\"ETTIE\",\"ETSUKO\",\"ELLIS\",\"ELLAN\",\"ELIDIA\",\"EDRA\",\"DORETHEA\",\"DOREATHA\",\"DENYSE\",\"DENNY\",\"DEETTA\",\"DAINE\",\"CYRSTAL\",\"CORRIN\",\"CAYLA\",\"CARLITA\",\"CAMILA\",\"BURMA\",\"BULA\",\"BUENA\",\"BLAKE\",\"BARABARA\",\"AVRIL\",\"AUSTIN\",\"ALAINE\",\"ZANA\",\"WILHEMINA\",\"WANETTA\",\"VIRGIL\",\"VI\",\"VERONIKA\",\"VERNON\",\"VERLINE\",\"VASILIKI\",\"TONITA\",\"TISA\",\"TEOFILA\",\"TAYNA\",\"TAUNYA\",\"TANDRA\",\"TAKAKO\",\"SUNNI\",\"SUANNE\",\"SIXTA\",\"SHARELL\",\"SEEMA\",\"RUSSELL\",\"ROSENDA\",\"ROBENA\",\"RAYMONDE\",\"PEI\",\"PAMILA\",\"OZELL\",\"NEIDA\",\"NEELY\",\"MISTIE\",\"MICHA\",\"MERISSA\",\"MAURITA\",\"MARYLN\",\"MARYETTA\",\"MARSHALL\",\"MARCELL\",\"MALENA\",\"MAKEDA\",\"MADDIE\",\"LOVETTA\",\"LOURIE\",\"LORRINE\",\"LORILEE\",\"LESTER\",\"LAURENA\",\"LASHAY\",\"LARRAINE\",\"LAREE\",\"LACRESHA\",\"KRISTLE\",\"KRISHNA\",\"KEVA\",\"KEIRA\",\"KAROLE\",\"JOIE\",\"JINNY\",\"JEANNETTA\",\"JAMA\",\"HEIDY\",\"GILBERTE\",\"GEMA\",\"FAVIOLA\",\"EVELYNN\",\"ENDA\",\"ELLI\",\"ELLENA\",\"DIVINA\",\"DAGNY\",\"COLLENE\",\"CODI\",\"CINDIE\",\"CHASSIDY\",\"CHASIDY\",\"CATRICE\",\"CATHERINA\",\"CASSEY\",\"CAROLL\",\"CARLENA\",\"CANDRA\",\"CALISTA\",\"BRYANNA\",\"BRITTENY\",\"BEULA\",\"BARI\",\"AUDRIE\",\"AUDRIA\",\"ARDELIA\",\"ANNELLE\",\"ANGILA\",\"ALONA\",\"ALLYN\",\"DOUGLAS\",\"ROGER\",\"JONATHAN\",\"RALPH\",\"NICHOLAS\",\"BENJAMIN\",\"BRUCE\",\"HARRY\",\"WAYNE\",\"STEVE\",\"HOWARD\",\"ERNEST\",\"PHILLIP\",\"TODD\",\"CRAIG\",\"ALAN\",\"PHILIP\",\"EARL\",\"DANNY\",\"BRYAN\",\"STANLEY\",\"LEONARD\",\"NATHAN\",\"MANUEL\",\"RODNEY\",\"MARVIN\",\"VINCENT\",\"JEFFERY\",\"JEFF\",\"CHAD\",\"JACOB\",\"ALFRED\",\"BRADLEY\",\"HERBERT\",\"FREDERICK\",\"EDWIN\",\"DON\",\"RICKY\",\"RANDALL\",\"BARRY\",\"BERNARD\",\"LEROY\",\"MARCUS\",\"THEODORE\",\"CLIFFORD\",\"MIGUEL\",\"JIM\",\"TOM\",\"CALVIN\",\"BILL\",\"LLOYD\",\"DEREK\",\"WARREN\",\"DARRELL\",\"JEROME\",\"FLOYD\",\"ALVIN\",\"TIM\",\"GORDON\",\"GREG\",\"JORGE\",\"DUSTIN\",\"PEDRO\",\"DERRICK\",\"ZACHARY\",\"HERMAN\",\"GLEN\",\"HECTOR\",\"RICARDO\",\"RICK\",\"BRENT\",\"RAMON\",\"GILBERT\",\"MARC\",\"REGINALD\",\"RUBEN\",\"NATHANIEL\",\"RAFAEL\",\"EDGAR\",\"MILTON\",\"RAUL\",\"BEN\",\"CHESTER\",\"DUANE\",\"FRANKLIN\",\"BRAD\",\"RON\",\"ROLAND\",\"ARNOLD\",\"HARVEY\",\"JARED\",\"ERIK\",\"DARRYL\",\"NEIL\",\"JAVIER\",\"FERNANDO\",\"CLINTON\",\"TED\",\"MATHEW\",\"TYRONE\",\"DARREN\",\"LANCE\",\"KURT\",\"ALLAN\",\"NELSON\",\"GUY\",\"CLAYTON\",\"HUGH\",\"MAX\",\"DWAYNE\",\"DWIGHT\",\"ARMANDO\",\"FELIX\",\"EVERETT\",\"IAN\",\"WALLACE\",\"KEN\",\"BOB\",\"ALFREDO\",\"ALBERTO\",\"DAVE\",\"IVAN\",\"BYRON\",\"ISAAC\",\"MORRIS\",\"CLIFTON\",\"WILLARD\",\"ROSS\",\"ANDY\",\"SALVADOR\",\"KIRK\",\"SERGIO\",\"SETH\",\"KENT\",\"TERRANCE\",\"EDUARDO\",\"TERRENCE\",\"ENRIQUE\",\"WADE\",\"STUART\",\"FREDRICK\",\"ARTURO\",\"ALEJANDRO\",\"NICK\",\"LUTHER\",\"WENDELL\",\"JEREMIAH\",\"JULIUS\",\"OTIS\",\"TREVOR\",\"OLIVER\",\"LUKE\",\"HOMER\",\"GERARD\",\"DOUG\",\"KENNY\",\"HUBERT\",\"LYLE\",\"MATT\",\"ALFONSO\",\"ORLANDO\",\"REX\",\"CARLTON\",\"ERNESTO\",\"NEAL\",\"PABLO\",\"LORENZO\",\"OMAR\",\"WILBUR\",\"GRANT\",\"HORACE\",\"RODERICK\",\"ABRAHAM\",\"WILLIS\",\"RICKEY\",\"ANDRES\",\"CESAR\",\"JOHNATHAN\",\"MALCOLM\",\"RUDOLPH\",\"DAMON\",\"KELVIN\",\"PRESTON\",\"ALTON\",\"ARCHIE\",\"MARCO\",\"WM\",\"PETE\",\"RANDOLPH\",\"GARRY\",\"GEOFFREY\",\"JONATHON\",\"FELIPE\",\"GERARDO\",\"ED\",\"DOMINIC\",\"DELBERT\",\"COLIN\",\"GUILLERMO\",\"EARNEST\",\"LUCAS\",\"BENNY\",\"SPENCER\",\"RODOLFO\",\"MYRON\",\"EDMUND\",\"GARRETT\",\"SALVATORE\",\"CEDRIC\",\"LOWELL\",\"GREGG\",\"SHERMAN\",\"WILSON\",\"SYLVESTER\",\"ROOSEVELT\",\"ISRAEL\",\"JERMAINE\",\"FORREST\",\"WILBERT\",\"LELAND\",\"SIMON\",\"CLARK\",\"IRVING\",\"BRYANT\",\"OWEN\",\"RUFUS\",\"WOODROW\",\"KRISTOPHER\",\"MACK\",\"LEVI\",\"MARCOS\",\"GUSTAVO\",\"JAKE\",\"LIONEL\",\"GILBERTO\",\"CLINT\",\"NICOLAS\",\"ISMAEL\",\"ORVILLE\",\"ERVIN\",\"DEWEY\",\"AL\",\"WILFRED\",\"JOSH\",\"HUGO\",\"IGNACIO\",\"CALEB\",\"TOMAS\",\"SHELDON\",\"ERICK\",\"STEWART\",\"DOYLE\",\"DARREL\",\"ROGELIO\",\"TERENCE\",\"SANTIAGO\",\"ALONZO\",\"ELIAS\",\"BERT\",\"ELBERT\",\"RAMIRO\",\"CONRAD\",\"NOAH\",\"GRADY\",\"PHIL\",\"CORNELIUS\",\"LAMAR\",\"ROLANDO\",\"CLAY\",\"PERCY\",\"DEXTER\",\"BRADFORD\",\"DARIN\",\"AMOS\",\"MOSES\",\"IRVIN\",\"SAUL\",\"ROMAN\",\"RANDAL\",\"TIMMY\",\"DARRIN\",\"WINSTON\",\"BRENDAN\",\"ABEL\",\"DOMINICK\",\"BOYD\",\"EMILIO\",\"ELIJAH\",\"DOMINGO\",\"EMMETT\",\"MARLON\",\"EMANUEL\",\"JERALD\",\"EDMOND\",\"EMIL\",\"DEWAYNE\",\"WILL\",\"OTTO\",\"TEDDY\",\"REYNALDO\",\"BRET\",\"JESS\",\"TRENT\",\"HUMBERTO\",\"EMMANUEL\",\"STEPHAN\",\"VICENTE\",\"LAMONT\",\"GARLAND\",\"MILES\",\"EFRAIN\",\"HEATH\",\"RODGER\",\"HARLEY\",\"ETHAN\",\"ELDON\",\"ROCKY\",\"PIERRE\",\"JUNIOR\",\"FREDDY\",\"ELI\",\"BRYCE\",\"ANTOINE\",\"STERLING\",\"CHASE\",\"GROVER\",\"ELTON\",\"CLEVELAND\",\"DYLAN\",\"CHUCK\",\"DAMIAN\",\"REUBEN\",\"STAN\",\"AUGUST\",\"LEONARDO\",\"JASPER\",\"RUSSEL\",\"ERWIN\",\"BENITO\",\"HANS\",\"MONTE\",\"BLAINE\",\"ERNIE\",\"CURT\",\"QUENTIN\",\"AGUSTIN\",\"MURRAY\",\"JAMAL\",\"ADOLFO\",\"HARRISON\",\"TYSON\",\"BURTON\",\"BRADY\",\"ELLIOTT\",\"WILFREDO\",\"BART\",\"JARROD\",\"VANCE\",\"DENIS\",\"DAMIEN\",\"JOAQUIN\",\"HARLAN\",\"DESMOND\",\"ELLIOT\",\"DARWIN\",\"GREGORIO\",\"BUDDY\",\"XAVIER\",\"KERMIT\",\"ROSCOE\",\"ESTEBAN\",\"ANTON\",\"SOLOMON\",\"SCOTTY\",\"NORBERT\",\"ELVIN\",\"WILLIAMS\",\"NOLAN\",\"ROD\",\"QUINTON\",\"HAL\",\"BRAIN\",\"ROB\",\"ELWOOD\",\"KENDRICK\",\"DARIUS\",\"MOISES\",\"FIDEL\",\"THADDEUS\",\"CLIFF\",\"MARCEL\",\"JACKSON\",\"RAPHAEL\",\"BRYON\",\"ARMAND\",\"ALVARO\",\"JEFFRY\",\"DANE\",\"JOESPH\",\"THURMAN\",\"NED\",\"RUSTY\",\"MONTY\",\"FABIAN\",\"REGGIE\",\"MASON\",\"GRAHAM\",\"ISAIAH\",\"VAUGHN\",\"GUS\",\"LOYD\",\"DIEGO\",\"ADOLPH\",\"NORRIS\",\"MILLARD\",\"ROCCO\",\"GONZALO\",\"DERICK\",\"RODRIGO\",\"WILEY\",\"RIGOBERTO\",\"ALPHONSO\",\"TY\",\"NOE\",\"VERN\",\"REED\",\"JEFFERSON\",\"ELVIS\",\"BERNARDO\",\"MAURICIO\",\"HIRAM\",\"DONOVAN\",\"BASIL\",\"RILEY\",\"NICKOLAS\",\"MAYNARD\",\"SCOT\",\"VINCE\",\"QUINCY\",\"EDDY\",\"SEBASTIAN\",\"FEDERICO\",\"ULYSSES\",\"HERIBERTO\",\"DONNELL\",\"COLE\",\"DAVIS\",\"GAVIN\",\"EMERY\",\"WARD\",\"ROMEO\",\"JAYSON\",\"DANTE\",\"CLEMENT\",\"COY\",\"MAXWELL\",\"JARVIS\",\"BRUNO\",\"ISSAC\",\"DUDLEY\",\"BROCK\",\"SANFORD\",\"CARMELO\",\"BARNEY\",\"NESTOR\",\"STEFAN\",\"DONNY\",\"ART\",\"LINWOOD\",\"BEAU\",\"WELDON\",\"GALEN\",\"ISIDRO\",\"TRUMAN\",\"DELMAR\",\"JOHNATHON\",\"SILAS\",\"FREDERIC\",\"DICK\",\"IRWIN\",\"MERLIN\",\"CHARLEY\",\"MARCELINO\",\"HARRIS\",\"CARLO\",\"TRENTON\",\"KURTIS\",\"HUNTER\",\"AURELIO\",\"WINFRED\",\"VITO\",\"COLLIN\",\"DENVER\",\"CARTER\",\"LEONEL\",\"EMORY\",\"PASQUALE\",\"MOHAMMAD\",\"MARIANO\",\"DANIAL\",\"LANDON\",\"DIRK\",\"BRANDEN\",\"ADAN\",\"BUFORD\",\"GERMAN\",\"WILMER\",\"EMERSON\",\"ZACHERY\",\"FLETCHER\",\"JACQUES\",\"ERROL\",\"DALTON\",\"MONROE\",\"JOSUE\",\"EDWARDO\",\"BOOKER\",\"WILFORD\",\"SONNY\",\"SHELTON\",\"CARSON\",\"THERON\",\"RAYMUNDO\",\"DAREN\",\"HOUSTON\",\"ROBBY\",\"LINCOLN\",\"GENARO\",\"BENNETT\",\"OCTAVIO\",\"CORNELL\",\"HUNG\",\"ARRON\",\"ANTONY\",\"HERSCHEL\",\"GIOVANNI\",\"GARTH\",\"CYRUS\",\"CYRIL\",\"RONNY\",\"LON\",\"FREEMAN\",\"DUNCAN\",\"KENNITH\",\"CARMINE\",\"ERICH\",\"CHADWICK\",\"WILBURN\",\"RUSS\",\"REID\",\"MYLES\",\"ANDERSON\",\"MORTON\",\"JONAS\",\"FOREST\",\"MITCHEL\",\"MERVIN\",\"ZANE\",\"RICH\",\"JAMEL\",\"LAZARO\",\"ALPHONSE\",\"RANDELL\",\"MAJOR\",\"JARRETT\",\"BROOKS\",\"ABDUL\",\"LUCIANO\",\"SEYMOUR\",\"EUGENIO\",\"MOHAMMED\",\"VALENTIN\",\"CHANCE\",\"ARNULFO\",\"LUCIEN\",\"FERDINAND\",\"THAD\",\"EZRA\",\"ALDO\",\"RUBIN\",\"ROYAL\",\"MITCH\",\"EARLE\",\"ABE\",\"WYATT\",\"MARQUIS\",\"LANNY\",\"KAREEM\",\"JAMAR\",\"BORIS\",\"ISIAH\",\"EMILE\",\"ELMO\",\"ARON\",\"LEOPOLDO\",\"EVERETTE\",\"JOSEF\",\"ELOY\",\"RODRICK\",\"REINALDO\",\"LUCIO\",\"JERROD\",\"WESTON\",\"HERSHEL\",\"BARTON\",\"PARKER\",\"LEMUEL\",\"BURT\",\"JULES\",\"GIL\",\"ELISEO\",\"AHMAD\",\"NIGEL\",\"EFREN\",\"ANTWAN\",\"ALDEN\",\"MARGARITO\",\"COLEMAN\",\"DINO\",\"OSVALDO\",\"LES\",\"DEANDRE\",\"NORMAND\",\"KIETH\",\"TREY\",\"NORBERTO\",\"NAPOLEON\",\"JEROLD\",\"FRITZ\",\"ROSENDO\",\"MILFORD\",\"CHRISTOPER\",\"ALFONZO\",\"LYMAN\",\"JOSIAH\",\"BRANT\",\"WILTON\",\"RICO\",\"JAMAAL\",\"DEWITT\",\"BRENTON\",\"OLIN\",\"FOSTER\",\"FAUSTINO\",\"CLAUDIO\",\"JUDSON\",\"GINO\",\"EDGARDO\",\"ALEC\",\"TANNER\",\"JARRED\",\"DONN\",\"TAD\",\"PRINCE\",\"PORFIRIO\",\"ODIS\",\"LENARD\",\"CHAUNCEY\",\"TOD\",\"MEL\",\"MARCELO\",\"KORY\",\"AUGUSTUS\",\"KEVEN\",\"HILARIO\",\"BUD\",\"SAL\",\"ORVAL\",\"MAURO\",\"ZACHARIAH\",\"OLEN\",\"ANIBAL\",\"MILO\",\"JED\",\"DILLON\",\"AMADO\",\"NEWTON\",\"LENNY\",\"RICHIE\",\"HORACIO\",\"BRICE\",\"MOHAMED\",\"DELMER\",\"DARIO\",\"REYES\",\"MAC\",\"JONAH\",\"JERROLD\",\"ROBT\",\"HANK\",\"RUPERT\",\"ROLLAND\",\"KENTON\",\"DAMION\",\"ANTONE\",\"WALDO\",\"FREDRIC\",\"BRADLY\",\"KIP\",\"BURL\",\"WALKER\",\"TYREE\",\"JEFFEREY\",\"AHMED\",\"WILLY\",\"STANFORD\",\"OREN\",\"NOBLE\",\"MOSHE\",\"MIKEL\",\"ENOCH\",\"BRENDON\",\"QUINTIN\",\"JAMISON\",\"FLORENCIO\",\"DARRICK\",\"TOBIAS\",\"HASSAN\",\"GIUSEPPE\",\"DEMARCUS\",\"CLETUS\",\"TYRELL\",\"LYNDON\",\"KEENAN\",\"WERNER\",\"GERALDO\",\"COLUMBUS\",\"CHET\",\"BERTRAM\",\"MARKUS\",\"HUEY\",\"HILTON\",\"DWAIN\",\"DONTE\",\"TYRON\",\"OMER\",\"ISAIAS\",\"HIPOLITO\",\"FERMIN\",\"ADALBERTO\",\"BO\",\"BARRETT\",\"TEODORO\",\"MCKINLEY\",\"MAXIMO\",\"GARFIELD\",\"RALEIGH\",\"LAWERENCE\",\"ABRAM\",\"RASHAD\",\"KING\",\"EMMITT\",\"DARON\",\"SAMUAL\",\"MIQUEL\",\"EUSEBIO\",\"DOMENIC\",\"DARRON\",\"BUSTER\",\"WILBER\",\"RENATO\",\"JC\",\"HOYT\",\"HAYWOOD\",\"EZEKIEL\",\"CHAS\",\"FLORENTINO\",\"ELROY\",\"CLEMENTE\",\"ARDEN\",\"NEVILLE\",\"EDISON\",\"DESHAWN\",\"NATHANIAL\",\"JORDON\",\"DANILO\",\"CLAUD\",\"SHERWOOD\",\"RAYMON\",\"RAYFORD\",\"CRISTOBAL\",\"AMBROSE\",\"TITUS\",\"HYMAN\",\"FELTON\",\"EZEQUIEL\",\"ERASMO\",\"STANTON\",\"LONNY\",\"LEN\",\"IKE\",\"MILAN\",\"LINO\",\"JAROD\",\"HERB\",\"ANDREAS\",\"WALTON\",\"RHETT\",\"PALMER\",\"DOUGLASS\",\"CORDELL\",\"OSWALDO\",\"ELLSWORTH\",\"VIRGILIO\",\"TONEY\",\"NATHANAEL\",\"DEL\",\"BENEDICT\",\"MOSE\",\"JOHNSON\",\"ISREAL\",\"GARRET\",\"FAUSTO\",\"ASA\",\"ARLEN\",\"ZACK\",\"WARNER\",\"MODESTO\",\"FRANCESCO\",\"MANUAL\",\"GAYLORD\",\"GASTON\",\"FILIBERTO\",\"DEANGELO\",\"MICHALE\",\"GRANVILLE\",\"WES\",\"MALIK\",\"ZACKARY\",\"TUAN\",\"ELDRIDGE\",\"CRISTOPHER\",\"CORTEZ\",\"ANTIONE\",\"MALCOM\",\"LONG\",\"KOREY\",\"JOSPEH\",\"COLTON\",\"WAYLON\",\"VON\",\"HOSEA\",\"SHAD\",\"SANTO\",\"RUDOLF\",\"ROLF\",\"REY\",\"RENALDO\",\"MARCELLUS\",\"LUCIUS\",\"KRISTOFER\",\"BOYCE\",\"BENTON\",\"HAYDEN\",\"HARLAND\",\"ARNOLDO\",\"RUEBEN\",\"LEANDRO\",\"KRAIG\",\"JERRELL\",\"JEROMY\",\"HOBERT\",\"CEDRICK\",\"ARLIE\",\"WINFORD\",\"WALLY\",\"LUIGI\",\"KENETH\",\"JACINTO\",\"GRAIG\",\"FRANKLYN\",\"EDMUNDO\",\"SID\",\"PORTER\",\"LEIF\",\"JERAMY\",\"BUCK\",\"WILLIAN\",\"VINCENZO\",\"SHON\",\"LYNWOOD\",\"JERE\",\"HAI\",\"ELDEN\",\"DORSEY\",\"DARELL\",\"BRODERICK\",\"ALONSO\"\n"
  },
  {
    "path": "Problem023/.hash",
    "content": "2c8258c0604152962f7787571511cf28"
  },
  {
    "path": "Problem023/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n\"\"\"\n\nA perfect number is a number for which the sum of its proper divisors is exactly equal to the number. \nFor example, the sum of the proper divisors of 28 would be 1 + 2 + 4 + 7 + 14 = 28, which means that 28 is a perfect number.\n\nA number n is called deficient if the sum of its proper divisors is less than n and it is called abundant if this sum exceeds n.\n\nAs 12 is the smallest abundant number, 1 + 2 + 3 + 4 + 6 = 16, the smallest number that can be written as the sum of two abundant numbers is 24. \nBy mathematical analysis, it can be shown that all integers greater than 28123 can be written as the sum of two abundant numbers. \nHowever, this upper limit cannot be reduced any further by analysis even though it is known that the greatest number that cannot be expressed as the sum of two abundant numbers is less than this limit.\n\nFind the sum of all the positive integers which cannot be written as the sum of two abundant numbers.\n\n\"\"\"\nfrom functools import reduce\nfrom itertools import combinations_with_replacement as combinations\nmax_num = 28123\n\n\ndef divisors(num):\n    return set(reduce(list.__add__, [[div, num//div] for div in range(2, int(num**0.5) + 1) if num % div == 0] + [[1]]))\n\n\ndef abundant(num):\n    return sum(divisors(num)) > num\n\nabundant_nums = (n for n in range(1, max_num) if abundant(n))\nsum_of_two_abundants = set(a + b for a, b in combinations(abundant_nums, 2))\nnot_abundant_nums = (x for x in range(max_num) if x not in sum_of_two_abundants)\nprint(sum(not_abundant_nums))\n"
  },
  {
    "path": "Problem023/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=23)\n"
  },
  {
    "path": "Problem024/.hash",
    "content": "7f155b45cb3f0a6e518d59ec348bff84"
  },
  {
    "path": "Problem024/C++/solution_1.cpp",
    "content": "#include<bits/stdc++.h>\nusing namespace std;\n\nint main() {\n  char numbers[] = \"0123456789\";\n  for(int i=1;i<1000000;i++) {\n    next_permutation(numbers,numbers+10); \n  }\n  cout << numbers << endl;\n}\n"
  },
  {
    "path": "Problem024/Haskell/solution_1.hs",
    "content": "import Data.List (permutations, sort)\nimport Data.Char (intToDigit)\n\nmain :: IO ()\nmain = do\n    putStr $ map intToDigit list\n      where list = (sort . permutations $ [0..9]) !! 999999\n"
  },
  {
    "path": "Problem024/Python/solution_1.py",
    "content": "#!/usr/bin/env python\r\n# coding=utf-8\r\n#   Python Script\r\n#\r\n#   Copyleft © Manoel Vilela\r\n#\r\n#\r\n\r\n\"\"\"\r\n\r\nLexicographic permutations\r\nProblem 24\r\n\r\nA permutation is an ordered arrangement of objects.\r\nFor example, 3124 is one possible permutation of the\r\ndigits 1, 2, 3 and 4. If all of the permutations are\r\nlisted numerically or alphabetically, we call it lexicographic order.\r\nThe lexicographic permutations of 0, 1 and 2 are:\r\n\r\n012   021   102   120   201   210\r\n\r\nWhat is the millionth lexicographic permutation of the\r\ndigits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9?\r\n\r\n\"\"\"\r\n\r\n\r\ndef factorial(n):\r\n    return 1 if n < 1 else n * factorial(n - 1)\r\n\r\n\r\n# let the entry of element number of the sorted element\r\ndef problem24(element):\r\n    from string import digits\r\n    answer = ''\r\n    nums = list(digits)\r\n    while len(nums) != 0:\r\n        # calculate the periodic of the unitary decimal actual\r\n        factor_num = factorial(len(nums) - 1)\r\n        # verify which must be the number of digit actual\r\n        order = element//factor_num\r\n        if element % factor_num != 0:\r\n            order = element//factor_num + 1\r\n        # keep only the rest of periodicity, whose we say which number is.\r\n        order %= len(nums)\r\n        # insert the value on final of string\r\n        answer += nums.pop(order - 1)\r\n\r\n    return answer\r\n\r\nprint(problem24(10 ** 6))\r\n"
  },
  {
    "path": "Problem024/Python/solution_2.py",
    "content": "#code created by NamanNimmo Gera\n#12:42pm, April 10, 2019.\n\nfrom itertools import permutations\n\nperm = permutations([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])\nfor count, item in enumerate(perm):\n    #to find the millionth permutation\n    if count == 999999:\n        tup_join = item;\n        str_join = \"\".join(str(x) for x in tup_join)\n        print(str_join);\n        break;                    \n"
  },
  {
    "path": "Problem024/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=24)\n"
  },
  {
    "path": "Problem024/Ruby/solution_1.rb",
    "content": "puts (0..9)\n       .to_a\n       .permutation\n       .sort[999999]\n       .join\n"
  },
  {
    "path": "Problem025/.hash",
    "content": "a376802c0811f1b9088828288eb0d3f0"
  },
  {
    "path": "Problem025/Clojure/solution_1.clj",
    "content": "(defn fib-seq\n  ([] (fib-seq (bigint 0) (bigint 1)))\n  ([a b] (lazy-seq (cons b (fib-seq b (+ a b))))))\n\n(defn solution\n  []\n  (->> (fib-seq)\n       (take-while #(< (count (str %)) 1000))\n       (count)\n       (+ 1)))\n\n(println (solution))\n"
  },
  {
    "path": "Problem025/Elixir/solution_1.exs",
    "content": "# Author: lubien\n\nStream.unfold(\n  {1, 1}, fn {a, b} ->\n    next = a + b;\n    case length(Integer.digits(a)) do\n      1_000 -> nil\n      _ -> {next, {next, a}}\n    end\n  end\n)\n  |> Stream.with_index\n  |> Enum.to_list\n  |> List.last\n  |> elem(1)\n  |> (fn x -> x + 3 end).()\n  |> IO.inspect\n"
  },
  {
    "path": "Problem025/Python/solution_1.py",
    "content": "#How the term of the first 1000-digit number in the fibonacci sequence?\n#answer: 4782\ndef fib(max_lenght):\n\ta, b = 1, 1\n\tterm = 1\n\twhile len(str(a)) < max_lenght:\n\t\tterm += 1\n\t\ta, b = b, a + b\n\treturn term\nprint(fib(1000))"
  },
  {
    "path": "Problem025/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=25)\n"
  },
  {
    "path": "Problem026/.hash",
    "content": "6aab1270668d8cac7cef2566a1c5f569"
  },
  {
    "path": "Problem026/C++/Makefile",
    "content": "CXX = g++\nLFLAGS = -lm -Wall -o\nTARGET =  solution_1\nEXTENSION_TARGET = cpp\nEXTENSION_OUT = out\n\n\nall: \n\t$(CXX) $(LFLAGS) $(TARGET).$(EXTENSION_OUT) $(TARGET).$(EXTENSION_TARGET)\nclean: \n\trm -v *.$(EXTENSION_OUT)\nrun:\n\t./$(TARGET).$(EXTENSION_OUT)"
  },
  {
    "path": "Problem026/C++/solution_1.cpp",
    "content": "#include <stdio.h>\n#include <string.h>\n#define max(x,y) (x)>(y)?(x):(y)\n#define D 1000\n\nint remainders[D];\n\nint get_max_rec(int n)\n{\n    int times = 1,dividend = 1;\n    memset(remainders, 0, D * sizeof(int));\n    //printf(\"-----------------------------\\n\");\n    //printf(\"%d\\n\",n);\n    //printf(\"-----------------------------\\n\");\n    for(; dividend!=0 ;)\n    {\n        //printf(\"%d %d\\n\",dividend,times);\n        if (remainders[dividend])\n            return times - remainders[dividend];\n        remainders[dividend] = times++;\n        if (dividend < n)\n            dividend *= 10;\n        dividend = dividend % n;\n    }\n    return 0;\n}\n\nint main(int argc, char *argv[])\n{\n    int max_rec = 0, d, d_max;\n    for( d = 3 ; d < D ; d++)\n    {\n        int new_max_rec = get_max_rec(d);\n        //printf( \"%d : %d\\n\",d , new_max_rec(d) );\n        if (new_max_rec > max_rec) {\n            max_rec = new_max_rec;\n            d_max = d;\n        }\n    }\n    printf(\"%d\\n\", d_max);\n    return 0;\n}\n"
  },
  {
    "path": "Problem026/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n# A unit fraction contains 1 in the numerator.\n# The decimal representation of the unit fractions\n# with denominators 2 to 10 are given:\n\n#     1/2   =  0.5\n#     1/3   =  0.(3)\n#     1/4   =  0.25\n#     1/5   =  0.2\n#     1/6   =  0.1(6)\n#     1/7   =  0.(142857)\n#     1/8   =  0.125\n#     1/9   =  0.(1)\n#     1/10  =  0.1\n\n# 0.142857... = x\n# 0.142857... * 1000000 = 1000000x\n# 142857.142857... -0.142857... = 1000000x - x\n# 142857 = 999999x\n# x = 142857/999999\n\n\n# Where 0.1(6) means 0.166666..., and has a 1-digit recurring cycle.\n# It can be seen that 1/7 has a 6-digit recurring cycle.\n\n# Find the value of d < 1000 for which 1/d contains the longest\n# recurring cycle in its decimal fraction part.\n\n# replicação crua do algoritmo de divisão\n# manualmente, aplica uma memória dos divisores já efetuados\n# quando resto da divisão chegar num ponto onde se repete\n# retorna a quantidade de divisões menos a quantidade de vezes\n# que se repetiu\n\n# Exemplo     [1/7]\n#\n#    10    |7\n#     30   |_______\n#      28  0,(1434851)...\n#       20\n#       14\n#        60\n#        56\n#         40\n#         35\n#          50\n#           49\n#           (1) <= chegou ao remainder\n# retorna a função menos o número de iterações.\n# para o último dividendo\n# se resto for zero, retorna zero, pois não há recurring cycle\n# exemplos: 1/2, 1/4, 1/8\n\n# only odd numbers need to be compute\ndef get_rec_cycle(n):\n    \"\"\"1/x get the max abc recurring cycle length of 0.(abc) num\"\"\"\n\n    dividend, times = 1, 1\n    remainder = [0 for x in range(n + 1)]\n    while dividend != 0:\n        times += 1\n        if (remainder[dividend]):\n            return times - remainder[dividend]\n\n        remainder[dividend] += times\n        if dividend == 0:\n            break\n        if dividend < n:\n            dividend *= 10\n        dividend %= n\n\n    return 0\n\n\ndef get_max_rec(limit):\n    return max([x for x in range(3, limit, 2)], key=get_rec_cycle)\n\ntest = get_rec_cycle(7)\nassert test == 6, \"Some wrong; got {},  expected 6.\".format(test)\n\nif __name__ == '__main__':\n    print(get_max_rec(1000))\n"
  },
  {
    "path": "Problem026/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=26)\n"
  },
  {
    "path": "Problem027/.hash",
    "content": "69d9e3218fd7abb6ff453ea96505183d"
  },
  {
    "path": "Problem027/C/Makefile",
    "content": "CXX = gcc\nLFLAGS = -lm -Wall -o\nTARGET =  solution_1\nEXTENSION_TARGET = c\nEXTENSION_OUT = out\n\n\nall: \n\t$(CXX) $(LFLAGS) $(TARGET).$(EXTENSION_OUT) $(TARGET).$(EXTENSION_TARGET)\nclean: \n\trm -v *.$(EXTENSION_OUT)\nrun:\n\t./$(TARGET).$(EXTENSION_OUT)"
  },
  {
    "path": "Problem027/C/solution_1.c",
    "content": "/*\n * =====================================================================================\n *\n *                      Copyleft 2016 Manoel Vilela\n *\n *         Author: Manoel Vilela\n *        Contact: manoel_vilela@engineer.com\n *   Organization: UFPA\n *\n * =====================================================================================\n**/\n\n#include <stdio.h>\n#include <math.h>\n#include <stdbool.h>\n#define LIMIT 1000\n\n\ntypedef struct {\n    int primes;\n    int a;\n    int b;\n} Result;\n\n\nint quadratic(int n, int a, int b) {\n    return n*n + a*n + b; \n}\n\n// simple function\n// to check if is a prime\nint is_prime(int n) {\n    if (n < 2) {\n        return false;\n    }\n    for (int q = 2; q < sqrt(n) + 1; q++) {\n        if (n % q == 0) {\n            return false;\n        }\n    }\n\n    return true;\n}\n\n// func evaluation n² + an + b\n// return the n primes generate without gaps\n// between [0, n]\nint eval_func(int a, int b){\n    int n = 0;\n    while (true) {\n        if (is_prime(quadratic(n, a, b))){\n            n += 1;\n        } else {\n            break;\n        }\n    }\n    return n;\n}\n\n// get the optimal a, b\n// and the nPrimes for\n// equation f(n) = n² + an + b\n// whose  f(n) -> [0, N]\n// and N is MAX for LIMIT\nvoid get_result(Result *r) {\n    r->a = 0; r->b = 0; r->primes=0;\n    for (int i = -LIMIT; i < LIMIT; i++) {\n        for (int j = -LIMIT; j < LIMIT; j++ ) {\n            int n = eval_func(i, j);\n            if (n > r->primes) {\n                r->a = i;\n                r->b = j;\n                r->primes = n;;\n            }\n        }\n    }\n    // save\n    \n}\n\nint main(int argc, char *argv[]) {\n    Result r;\n    get_result(&r);\n    printf(\"%d\\n\", r.a * r.b);\n}\n"
  },
  {
    "path": "Problem027/CommonLisp/solution_1.lisp",
    "content": ";; Common Lisp version\n;; Manoel Vilela\n\n\n(defun primep (n)\n  (loop for d from 2 to (1+ (isqrt N))\n        never (and (= (mod n d) 0)\n                   (/= n d))))\n\n\n(defun funcprimes (a b)\n  (do* ((n 0 (+ n 1)))\n       ((if (not (primep (abs (+ (* n n) ( * a n) b))))\n             (return n)))))\n\n(defun solution ()\n  (let (a b n (primes 0))\n    (do ((x -1000 (1+ x))) ((= x 1000))\n      (do ((y -1000 (1+ y))) ((= y 1000))\n        (setf n (funcprimes x y))\n        (when (> n primes)\n          (setf a x\n                b y\n                primes n)))) (* a b)))\n\n(format t \"~d~%\" (solution))\n"
  },
  {
    "path": "Problem027/Go/solution_1.go",
    "content": "// Copyleft 2016 the DestructHub Authors. All rights reserved\n// Use of this source code is governed by a MIT\n// license that can be found in the LICENSE file.\n\n// solution for the problem 27 of Project Euler\n// concurrent solution: take about 3.5~4 seconds (about 3x faster from python version)\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"math\"\n)\n\nconst (\n\tlimit    = 1000 // a, b limits to search\n\tnThreads = 16   // number of nThreads\n)\n\ntype result struct {\n\tprimes int\n\ta      int\n\tb      int\n}\n\nvar (\n\tresultchan = make(chan result, nThreads) // used to get results concurrently\n\tmemory     = make(map[int]bool)          // memory for primes numbers\n)\n\n// quadratic function generator\n// n² + an + b\nfunc quadratic(a, b int) func(int) int {\n\treturn func(n int) int {\n\t\treturn n*n + a*n + b\n\t}\n}\n\n// decorator workaround on Go\n// check if the value was be computed before\n// return if exists, else compute\nfunc memo(f func(int) bool) func(int) bool {\n\treturn func(n int) bool {\n\t\tif val, exists := memory[n]; exists {\n\t\t\treturn val\n\t\t} else {\n\t\t\treturn f(n)\n\t\t}\n\t}\n}\n\n// simple function\n// to check if is a prime\nfunc isPrime(n int) bool {\n\tif n < 2 {\n\t\treturn false\n\t}\n\tfor q := 2; float64(q) <= math.Floor(math.Sqrt(float64(n))); q++ {\n\t\tif n%q == 0 {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n// func evaluation n² + an + b\n// return the n primes generate without gaps\n// between [0, n]\nfunc evalFunc(f func(int) int) int {\n\tn := 0\n\tfor {\n\t\tif memo(isPrime)(f(n)) {\n\t\t\tn += 1\n\t\t} else {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn n\n}\n\n// make concurrent evaluation\n// of the equation whose have\n// generate more primes\nfunc worker(split int) {\n\tlimitSplited := split * limit / nThreads\n\ta, b, nPrimes := 0, 0, 0\n\tfor i := -limitSplited; i < limitSplited; i++ {\n\t\tfor j := -limit; j < limit; j++ {\n\t\t\tif n := evalFunc(quadratic(i, j)); n > nPrimes {\n\t\t\t\ta, b = i, j\n\t\t\t\tnPrimes = n\n\t\t\t}\n\t\t}\n\t}\n\n\tresultchan <- result{nPrimes, a, b}\n}\n\n// receiver the results\n// from workers\nfunc receiver() (a int, b int, nPrimes int) {\n\ta, b, nPrimes = 0, 0, 0\n\tfor i := 0; i < nThreads; i++ {\n\t\tresult := <-resultchan\n\t\tif result.primes > nPrimes {\n\t\t\ta, b = result.a, result.b\n\t\t\tnPrimes = result.primes\n\t\t}\n\t}\n\treturn a, b, nPrimes\n}\n\nfunc main() {\n\tfor part := 1; part <= nThreads; part++ {\n\t\tgo worker(part)\n\t}\n\n\ta, b, _ := receiver()\n\tfmt.Printf(\"%v\\n\", a*b)\n}\n"
  },
  {
    "path": "Problem027/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\nfrom functools import wraps\nfrom itertools import combinations as comb\n\nLIMIT = 1000\n\n\ndef memo(fn):\n    \"\"\"Memorization decorator\"\"\"\n\n    cache = {}\n    miss = object()\n\n    @wraps(fn)\n    def wrapper(*args, **kwargs):\n        result = cache.get(args, miss)\n        if result is miss:\n            result = fn(*args)\n            cache[args] = result\n        return result\n    return wrapper\n\n\ndef quadratic(a, b):\n    \"\"\"quadratic function abstraction\"\"\"\n    def func(n):\n        return n * n + a * n + b\n    return func\n\n\n@memo\ndef isprime(n):\n    \"\"\"memorized prime evaluation, 2x more faster on that algorithm\"\"\"\n    for p in range(2, int(abs(n) ** 0.5) + 1):\n        if n % p == 0:\n            return False\n\n    return True\n\n\ndef eval_func(func):\n    \"\"\"eval func which primes will generate\"\"\"\n    n = 0\n    while True:\n        prime = isprime(func(n))\n        if prime:\n            n += 1\n        else:\n            return n\n\n\ndef search(limit):\n    \"\"\"search for the best a, b coefficients for a quadratic func prime gen\"\"\"\n    coffs = {}\n    for t in comb(range(-limit, limit + 1), 2):\n        coffs[t] = max([eval_func(quadratic(a, b)) for a, b in [t, t[::-1]]])\n\n    return max(coffs, key=lambda x: coffs[x])\n\n\ndef main():\n    from functools import reduce\n    print(reduce(int.__mul__, search(LIMIT)))\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "Problem027/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=27)\n"
  },
  {
    "path": "Problem028/.hash",
    "content": "0d53425bd7c5bf9919df3718c8e49fa6"
  },
  {
    "path": "Problem028/C/solution_1.c",
    "content": "#include<stdio.h>\nlong long int g[1001][1001];\nint main() \n{ \n\tlong long int i=1,m=500,n=500,sum=0,j;\n\tg[m][n++]=i++;\n\twhile(i<=1002001)\n\t{\n\t\tg[m++][n]=i++;\n\t\twhile(m<n)\n\t\t{\n\t\t\tg[m++][n]=i++;\n\t\t}\n\t\tg[m][n--]=i++;\n\t\twhile(m+n > 1000)\n\t\t{\n\t\t\tg[m][n]=i++;\n\t\t\t--n;\n\t\t}\n\t\tg[m--][n]=i++;\n\t\twhile(m>n)\n\t\t{\n\t\t\tg[m][n]=i++;\n\t\t\t--m;\n\t\t}\n\t\tg[m][n++]=i++;\n\t\twhile(m+n < 1000)\n\t\t{\n\t\t\tg[m][n]=i++;\n\t\t\t++n;\n\t\t}\n\t\tg[m][n++]=i++;\n\t}\n\tfor(i=0;i<1001;++i)\n\t{\n\t\tfor(j=0;j<1001;++j)\n\t\t{\n\t\t\tif(j==i || j+i==1000)\n\t\t\tsum=sum+g[i][j];\n\t\t}\n\t}\n\tprintf(\"%lld\",sum);\n\treturn 0;\n}\n"
  },
  {
    "path": "Problem028/Elixir/solution_1.exs",
    "content": "box = fn b -> (4 * (round(:math.pow(((2 * b) + 1), 2))) - (12 * b)) end\n\nEnum.map(1..500, fn x -> box.(x) end)\n  |> Enum.reduce(fn c,d -> c + d end)\n  |> Kernel.+(1)\n  |> IO.puts"
  },
  {
    "path": "Problem028/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n\"\"\"\nNumber spiral diagonals\nProblem 28\nStarting with the number 1 and moving to the right in a\nclockwise direction a 5 by 5 spiral is formed as follows:\n\n21 22 23 24 25\n20  7  8  9 10\n19  6  1  2 11\n18  5  4  3 12\n17 16 15 14 13\n\nIt can be verified that the sum of the numbers on the diagonals is 101.\n\nWhat is the sum of the numbers on the diagonals in a\n1001 by 1001 spiral formed in the same way?\n\"\"\"\n\n# 1 +3 + 5 + 7 + 9 = 25\n# (25) + 25 + 13 + 17 + 21 = 101\n# 669171001\n\n# LOOOOOOOOOOOOOOOOOOOOL, try understand this! I don't believe I wrote that...\n# the worse part is the solutions are right!\nblack = lambda x: (num for num in range(x * x - 3 * (x - 1), x * x + 1, x - 1))\nmagic = sum(sum(black(i))for i in range(3, 1001 + 1, + 2)) + 1\nprint(magic)\n"
  },
  {
    "path": "Problem028/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=28)\n"
  },
  {
    "path": "Problem029/.hash",
    "content": "6f0ca67289d79eb35d19decbc0a08453"
  },
  {
    "path": "Problem029/Elixir/solution_1.exs",
    "content": "# Author: lubien\n\n(\n  for a <- 2..100,\n      b <- 2..100,\n  do: :math.pow(a, b) |> round\n)\n  |> Stream.uniq\n  |> Enum.count\n  |> IO.puts\n"
  },
  {
    "path": "Problem029/Haskell/solution_1.hs",
    "content": "import Data.List\n\nlist :: [Integer] -- Not Int\nlist = [a ^ b | a <- [2..100], b <- [2..100]]\n\nmain :: IO ()\nmain = print . length $ f list\n         where f = map head . group . sort\n"
  },
  {
    "path": "Problem029/Python/solution_1.py",
    "content": "#!/usr/bin/env python\r\n# coding=utf-8\r\n#   Python Script\r\n#\r\n#   Copyleft © Manoel Vilela\r\n#\r\n#\r\n\r\n\"\"\"\r\nConsider all integer combinations of ab for 2 ≤ a ≤ 5 and 2 ≤ b ≤ 5:\r\n\r\n22=4, 23=8, 24=16, 25=32\r\n32=9, 33=27, 34=81, 35=243\r\n42=16, 43=64, 44=256, 45=1024\r\n52=25, 53=125, 54=625, 55=3125\r\nIf they are then placed in numerical order, with any repeats removed, we get the following sequence of 15 distinct terms:\r\n\r\n4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125\r\n\r\nHow many distinct terms are in the sequence generated by ab for 2 ≤ a ≤ 100 and 2 ≤ b ≤ 100?\r\n\"\"\"\r\n\r\nnums_distinct = []\r\nfor x in range(2, 101):\r\n    for y in range(2, 101):\r\n        num = x ** y\r\n        if num not in nums_distinct:\r\n            nums_distinct.append(num)\r\n\r\nprint(len(nums_distinct))\r\n\r\n"
  },
  {
    "path": "Problem029/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=29)\n"
  },
  {
    "path": "Problem030/.hash",
    "content": "27a1779a8a8c323a307ac8a70bc4489d\n"
  },
  {
    "path": "Problem030/Elixir/solution_1.exs",
    "content": "defmodule DigitPowers do\n  def fifth(num,lim,sum) when num > lim, do: sum\n  def fifth(num,lim,sum) when num <= lim do\n    val = if digit_power?(num), do: num, else: 0\n    fifth(num+1,lim,sum+val)\n  end\n\n  def digit_power?(n) do\n    n == Integer.to_string(n)\n      |> String.split(\"\", trim: true)\n      |> Enum.map(fn x -> round(:math.pow(String.to_integer(x),5)) end)\n      |> Enum.reduce(fn a,b -> a + b end)\n  end\nend\n\nIO.puts DigitPowers.fifth(2,round(:math.pow(9,6)),0)\n"
  },
  {
    "path": "Problem030/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\nfrom functools import reduce\n\n\"\"\"\nDigit fifth powers\nProblem 30\n\nSurprisingly there are only three numbers that can be written as the sum of fourth powers of their digits:\n\n    1634 = 1^4 + 6^4 + 3^4 + 4^4\n    8208 = 8^4 + 2^4 + 0^4 + 8^4\n    9474 = 9^4 + 4^4 + 7^4 + 4^4\n\nAs 1 = 14 is not a sum it is not included.\n\nThe sum of these numbers is 1634 + 8208 + 9474 = 19316.\n\nFind the sum of all the numbers that can be written as the sum of fifth powers of their digits.\n\"\"\"\n\n\"\"\" Prova de um cara lá no fórum do PE sobre apenas ser necessário considerar números de 6 dígitos ou menos.\nProof that one need only consider numbers 6 digits or less:  \nIf N has n digits, then 10^{n-1} <= N.  \nIf N is the sum of the 5th powers of its digits, N <= n*9^5.  Thus, 10^{n-1} <= n*9^5.\n\nWe now show by induction that if n>=7, then 10^{n-6} > n.\n1) Basis step (n=7):  10^{7-6} = 10 > 7.\n2) Induction step:  suppose 10^{n-6} > n for some n>=7.  Show this true for n+1 too.  Well,\n     10^{(n+1)-6} = 10*10^{n-6} > 10n > 2n > n+1\nQED.\n\nIt follows that if n>=7, then \n     10^{n-1} = 10^{n-6}*10^5 > n * 10^5 > n*9^5.  \n\nHence the only way we can have 10^{n-1} <= n*9^5 is for n<=6.  \n\"\"\"\n\n# Aqui foi pura sorte.\n# Inicialmente tentei pensar num limite para testes, seria o tamanho*9**5, mas não consegui deduzir o maior tamanho possível\n# Desse jeito, fiz alguns testes e descobri que a ocorrência de números que poderiam ser escritos como a soma de potência(5)\n# Era no tamanho intervalo de [4, 7)\nfrom itertools import combinations_with_replacement as c; from string import digits as d\nn = lambda num, digits: sorted(str(num)) == sorted(digits)\np = lambda comb: sum([int(n) ** 5 for n in comb])\nprint(sum(set(reduce(list.__add__, ([p(cb) for cb in c(d, x) if n(p(cb), cb)] for x in range(7))))))"
  },
  {
    "path": "Problem030/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=30)\n"
  },
  {
    "path": "Problem030/Ruby/solution_1.rb",
    "content": "def sum_digits(value)\n  value.to_s\n       .chars\n       .map{|x| x.to_i ** 5}\n       .reduce(:+)\nend\n\nputs (2..200000).to_a\n                .select{|x| sum_digits(x) == x}\n                .reduce(:+)\n"
  },
  {
    "path": "Problem031/.hash",
    "content": "142dfe4a33d624d2b830a9257e96726d"
  },
  {
    "path": "Problem031/C/Makefile",
    "content": "GCC = gcc\nLFLAGS = -lm -Wall -o\nTARGET =  solution_1\nDEBUG = --debug\n\nall: \n\t$(GCC) $(LFLAGS) $(TARGET).out $(TARGET).c\ndebug:\n\t$(GCC) $(DEBUG) $(LFLAGS) $(TARGET).out $(TARGET).c\nclean: \n\trm -v *.out\nrun:\n\t./$(TARGET).out\n"
  },
  {
    "path": "Problem031/C/solution_1.c",
    "content": "/*\n * =====================================================================================\n *\n *                      Copyleft 2015 Manoel Vilela\n *\n *\n *       Filename: solution_1.c\n *\n *    Description: Solution for Problem031 of ProjectEuler\n *\n *         Author: Manoel Vilela\n *        Contact: manoel_vilela@engineer.com\n *   Organization: UFPA\n *     Perfomance: 0.02s | Intel E7400 @ 3.5Ghz\n *\n * =====================================================================================\n**/\n\n#include <stdio.h>\n\nint different_ways(int money, int *coins, int n_coins) {\n    int max_coin = money / (*coins);\n    int n, ways = 0;\n    for (n = 0; n <= max_coin; n++) {\n        int new_money = (*coins) * n;\n\n        if (n_coins > 1 && new_money < money)\n            ways += different_ways(money - new_money, coins + 1, n_coins - 1);\n\n        if (new_money == money) {\n            ways++;\n            break;\n        }\n    }\n\n    return ways;\n}\n\n\nint main(int argc, char **argv){\n    int coins[] = {200, 100, 50, 20, 10, 5, 2, 1};\n    int lenght = sizeof(coins) / sizeof(int);\n    int money = 200;\n    int answer = different_ways(money, coins, lenght);\n\n    printf(\"%d\\n\", answer);\n    return 0;\n}"
  },
  {
    "path": "Problem031/Elixir/solution_1.exs",
    "content": "defmodule Coins do\n  def count([],_,vals),  do: vals\n  def count([coin|coins],lim,vals) when length(coins) >= 0 do\n    count(coins,lim,ways(coin,coin,lim,vals))\n  end\n\n  def ways(num,_,   lim,vals) when num > lim, do: vals\n  def ways(num,coin,lim,vals) when num <= lim do\n    ways(num+1,coin,lim,ad(coin,num,vals))\n  end\n\n  def ad(a,b,c), do: Map.put(c,b,(Map.get(c,b) + Map.get(c,(b-a))))\nend\n\nvals = Map.put(Enum.into(Enum.zip(Enum.to_list(0..200),List.duplicate(0,201)),Map.new),0,1)\nCoins.count([1,2,5,10,20,50,100,200],200,vals)\n  |> Map.values()\n  |> Enum.max()\n  |> IO.inspect\n"
  },
  {
    "path": "Problem031/Haskell/solution_slow_1.hs",
    "content": "-- Solução muito porca, performance bem ruim, preciso refazer D:\n-- Author: G4BB3R\n\ngetTupleValue :: (Int, Int, Int, Int, Int, Int, Int, Int) -> Int\ngetTupleValue (p1, p2, p5, p10, p20, p50, l1, l2) =\n    p1        +\n    p2  *  2  +\n    p5  *  5  +\n    p10 * 10  +\n    p20 * 20  +\n    p50 * 50  +\n    l1  * 100 +\n    l2  * 200\n\ncoinsPermutations :: [(Int, Int, Int, Int, Int, Int, Int, Int)]\ncoinsPermutations = [(p1, p2, p5, p10, p20, p50, l1, l2) | p1  <- [1..200 `div` 1]\n                                                         , p2  <- [1..200 `div` 2]\n                                                         , p5  <- [1..200 `div` 5]\n                                                         , p10 <- [1..200 `div` 10]\n                                                         , p20 <- [1..200 `div` 20]\n                                                         , p50 <- [1..200 `div` 50]\n                                                         , l1  <- [1..200 `div` 100]\n                                                         , l2  <- [1..200 `div` 200]\n                                                         ]\n\npermutationsWith200p :: Int\npermutationsWith200p = foldr (\\tuple acc -> acc + if getTupleValue tuple == 200 then 1 else 0) 0 coinsPermutations\n\nmain :: IO ()\nmain = print permutationsWith200p\n"
  },
  {
    "path": "Problem031/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n#   Answer: 73682 @ 0.6s\n#   Hardware:Intel E7400 @ 3.5Ghz\n\n\n# black magic recursive\ndef different_ways(money, coins, summation=0):\n    ways = 0\n    max_coins_head = money // coins[0]\n    for n in range(max_coins_head + 1):\n        new_money = n * coins[0]\n        if len(coins) > 1 and new_money < money:\n            ways += different_ways(money - new_money, coins[1:], new_money)\n        if new_money == money:\n            ways += 1\n            break\n    return ways\n\n\ndef main():\n    coins = [200, 100, 50, 20, 10, 5, 2, 1]\n    money = 200\n    solution = different_ways(money, coins)\n    print(solution)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "Problem031/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=31)\n"
  },
  {
    "path": "Problem032/.hash",
    "content": "100f6e37d0b0564490a2ee27eff0660d"
  },
  {
    "path": "Problem032/Clojure/solution_1.clj",
    "content": "(def xs (for [ x (range 1 (inc 9999))\n               y (range 1 (inc 99))\n               :let [xy (* x y)]\n               :when (= \"123456789\" (apply str(sort (str x y xy))))\n             ] xy))\n           \n(println (reduce + (distinct xs)))\n"
  },
  {
    "path": "Problem032/CommonLisp/solution_1.lisp",
    "content": ";; Common Lisp Script\n;; Manoel Vilela\n\n\n(defun cat (&rest strings)\n  (apply #'concatenate (cons 'string strings)))\n\n(defun string-to-list (string)\n  (loop for c across string collect (parse-integer (string c))))\n\n\n(defun nums-to-string (&rest x)\n  (apply #'cat (mapcar #'write-to-string x)))\n\n\n(defun ordered-digits (&rest x)\n  (apply #'nums-to-string (sort (string-to-list (apply #'nums-to-string x)) #'<)))\n\n\n(defun solution ()\n  (loop with pandigitals-table = (make-hash-table)\n        with pandigitals = 0\n        for x from 1 to 9999\n        do (loop for y from 1 to 99\n                 for xy = (* x y)\n                 unless (nth-value 1 (gethash xy pandigitals-table))\n                   when (equalp \"123456789\" (ordered-digits x y xy))\n                     do (progn (setf pandigitals (+ xy pandigitals))\n                               (setf (gethash xy pandigitals-table) t)))\n        finally (return pandigitals)))\n\n(prin1 (solution))\n"
  },
  {
    "path": "Problem032/Elixir/solution_1.exs",
    "content": "# Author: G4BB3R\n\n\tfor x <- 1..9999,\n\t\ty <- 1..99,\n\t\txy = x * y,\n\t\t'123456789' == Enum.sort(to_charlist(Integer.to_string(x) <> Integer.to_string(y) <> Integer.to_string(xy)))\n\tdo xy end\n\n\t|> Enum.uniq\n\t|> Enum.sum\n\t|> IO.puts\n"
  },
  {
    "path": "Problem032/Haskell/solution_1.hs",
    "content": "-- Author: G4BB3R\n\nimport Data.List (sort, nub)\n\nmain :: IO ()\nmain = print $ sum $ nub [ xy | x <- [1..9999 :: Int]\n                              , y <- [1..99   :: Int]\n                              , let xy = x * y\n                              , (== \"123456789\") . sort $ show x ++ show y ++ show xy\n                              ]"
  },
  {
    "path": "Problem032/Lua/solution_1.lua",
    "content": "table.find = function (xs, x)\n\tfor _, v in pairs(xs) do\n\t\tif x == v then\n\t\t\treturn true\n\t\tend\n\tend\n\treturn false\nend\n\nlocal function sort (str)\n\tlocal xs = {}\n\tstr:gsub(\".\",function (c) table.insert(xs, c) end)\n\ttable.sort(xs)\n\treturn table.concat(xs, \"\")\nend\n\nlocal function get_pandigal_products_sum ()\n\tlocal sum = 0\n\tlocal xs  = {}\n\tfor x = 1, 9999 do\n\t\tfor y = 1, 99 do\n\t\t\tlocal xy = x * y\n\t\t\tif sort(x .. y .. xy) == \"123456789\" then\n\t\t\t\tif not table.find(xs, xy) then\n\t\t\t\t\tsum = sum + xy\n\t\t\t\t\ttable.insert(xs, xy)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\treturn sum\nend\n\nprint(get_pandigal_products_sum())\n"
  },
  {
    "path": "Problem032/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=32)\n"
  },
  {
    "path": "Problem033/.hash",
    "content": "f899139df5e1059396431415e770c6dd"
  },
  {
    "path": "Problem033/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\nlimit = 100\n\n\ndef mdc(a, b):\n    if (b == 0):\n        return a\n    else:\n        return mdc(b, a % b)\n\n\nclass fraction(object):\n\n    def __init__(self, x, y):\n        self.num = x\n        self.den = y\n        self.factored = False\n\n    def __repr__(self):\n        return '{}/{}'.format(self.num, self.den)\n\n    def __mul__(self, frac):\n        self.num *= frac.num\n        self.den *= frac.den\n\n        return self\n\n    __rmul__ = __mul__\n\n    @property\n    def mfact(self):\n        a, b = self.num, self.den\n        for x in self.cross:\n            self.factored = True\n            a = self.new(self.num, x)\n            b = self.new(self.den, x)\n        d = mdc(a, b)\n        return (a // d, b // d)\n\n    @property\n    def cfact(self):\n        return (self.num // self.mdc, self.den // self.mdc)\n\n    @property\n    def fact(self):\n        return fraction(*self.cfact)\n\n    @property\n    def mdc(self):\n        return mdc(self.num, self.den)\n\n    def new(self, w, z):\n        v = ''.join([x for x in str(w) if x != z])\n        if len(v) > 0:\n            return int(v)\n        else:\n            return -1\n\n    def get(self, num):\n        return set(str(num))\n\n    @property\n    def cross(self):\n        return self.get(self.num) & self.get(self.den)\n\n    @property\n    def nums(self):\n        return (self.num, self.den)\n\n    @property\n    def non_trivial(self):\n        nzeronegative = all(False for x in self.nums if x < 1)\n        nontrivial = all(False for x in self.nums if x % 10 == 0)\n        return nzeronegative and nontrivial and self.factored\n\n    @property\n    def curious(self):\n        return self.non_trivial and (self.mfact == self.cfact)\n\n\ndef solution():\n    from functools import reduce\n    fracs = []\n    for up in range(limit):\n        for down in range(limit):\n            if up < down:\n                f = fraction(up, down)\n                f.mfact\n                if f.curious:\n                    fracs.append(f)\n\n    return reduce(lambda x, y: x * y, fracs).fact.den\n\nif __name__ == '__main__':\n    print(solution())\n"
  },
  {
    "path": "Problem033/Python/solution_2.py",
    "content": "import math\n\n\nfrac=1.0\n\nfor b in range(1,10):\n    for a in range(1,b):\n        for c in range(1,10):\n            if (a*10+b)/(b*10+c)==a/c:\n                frac*=(a/c)\n                \nprint(math.ceil(1/frac))\n"
  },
  {
    "path": "Problem033/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=33)\n"
  },
  {
    "path": "Problem034/.hash",
    "content": "60803ea798a0c0dfb7f36397d8d4d772"
  },
  {
    "path": "Problem034/C/solution_1.c",
    "content": "#include <stdio.h>\n \nint main()\n {\n\tint fact=1,m,i,n,j,temp,sum=0,sum1=0;\n\tfor(i=3;i<1000000;++i)\n\t{\n\t\ttemp=i;\n\t\tn=i;\n\t\tsum=0;\n\t\twhile(temp>0)\n\t\t{\n\t\t\tm=temp%10;\n\t\t\tfact=1;\n\t\t\tfor(j=1;j<=m;++j){\n\t\t\t\tfact*=j;\n\t\t\t}\n\t\t\tsum+=fact;\n\t\t\ttemp=temp/10;\n\t\t}\n\t\tif(sum==n){\n\t\t\tsum1+=n;\n\t\t}\n\t}\n\tprintf(\"%d\",sum1);\n\treturn 0;\n}\n"
  },
  {
    "path": "Problem034/Elixir/solution_1.exs",
    "content": "defmodule Factorial do \n  def find(count,facts) when count > 9, do: [Enum.reverse(facts),facts]\n  def find(count,[last|facts]) when count <= 9 do\n    find(count + 1,[count*last] ++ [last] ++ facts)\n  end\nend\n\ndefmodule DigitFactorials do\n  def find(count,_,lim,sum) when count > lim do\n    sum\n  end\n\n  def find(count,facts,lim,sum) when count <= lim do\n    sum = cond do\n      digit_factorial?(count,facts) ->\n        sum + count\n      true ->\n        count\n    end\n\n    find(count + 1,facts,lim,sum)\n  end\n\n  def digit_factorial?(num,facts) do\n    num == Integer.to_string(num)\n      |> String.split(\"\",trim: true)\n      |> Enum.map(fn n -> Enum.at(facts,String.to_integer(n)) end)\n      |> Enum.reduce(fn a,b -> a + b end)\n  end\nend\n\n[facts,[lim|_]] = Factorial.find(1,[1])\nIO.puts DigitFactorials.find(3,facts,lim,0)"
  },
  {
    "path": "Problem034/Haskell/solution_1.hs",
    "content": "import Data.Char (digitToInt)\n\nfat :: Int -> Int\nfat n = product [1..n]\n\ncheck :: Int -> Bool\ncheck n = (n == m)\n  where m = sum . map fat $ map digitToInt $ show n\n\nmain :: IO ()\nmain = do\n    print . sum $ filter check [3..50000]\n"
  },
  {
    "path": "Problem034/Python/solution_2.py",
    "content": "#code created by NamanNimmo Gera\n#3:31pm, April 12, 2019.\n\nimport math\n\ndef findsum(n):\n    smallsum = 0\n    while(n>0):\n        smallsum = smallsum + math.factorial(n%10)\n        n = n//10\n    return(smallsum)    \n\ntot = 0\nfor i in range(10,50000): #see why this upper bound is being chosen ;)\n    if findsum(i)==i:\n        tot = tot + i\nprint(tot) #145+40585\n"
  },
  {
    "path": "Problem034/Python/solution_slow_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n# get @90s to terminated, slow solution\n\nfrom functools import reduce\n\n\"\"\"\nDigit factorials\nProblem 34\n\n145 is a curious number, as 1! + 4! + 5! = 1 + 24 + 120 = 145.\n\nFind the sum of all numbers which are equal to the sum of the factorial of their digits.\n\nNote: as 1! = 1 and 2! = 2 are not sums they are not included.\n\"\"\"\n\nf = lambda n: reduce(lambda a, b: a * b, [u for u in range(n + 1) if u != 0] + [1])\nc = lambda x: sum([f(int(n)) for n in str(x)]) == x\nfiltered_range = lambda i: filter(lambda x: not bool(sum([int(n) for n in str(x)]) & x), range(3, i)) \ngen = lambda y: (x for x in filtered_range(y) if c(x))\ng = gen(10 ** 7) # because 9!*7 < 99999999\ns = sum(x for x in g)\nprint(s)"
  },
  {
    "path": "Problem034/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=34)\n"
  },
  {
    "path": "Problem034/Ruby/solution_1.rb",
    "content": "def fat(n)\n    return 1 if n == 0\n\n    (1..n).to_a\n          .reduce(:*)\n          .to_i\nend\n\ndef check(n)\n    m = n.to_s\n         .chars\n         .map{|x| fat(x.to_i)}\n         .reduce(:+)\n\n    n == m\nend\n\nputs (3..50000).to_a.select{|x| check(x)}.reduce(:+)\n"
  },
  {
    "path": "Problem035/.hash",
    "content": "b53b3a3d6ab90ce0268229151c9bde11"
  },
  {
    "path": "Problem035/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n\ndef is_prime(n):\n    if n <= 3:\n        return n >= 2\n    if n % 2 == 0 or n % 3 == 0:\n        return False\n    for i in range(5, int(n ** 0.5) + 1, 6):\n        if n % i == 0 or n % (i + 2) == 0:\n            return False\n    return True\n\n\ndef circPrime(n):\n    n1 = str(n)*2\n    for i in range(len(str(n))):\n        if not is_prime(int(n1[i:len(str(n))+i])):\n            return False\n    return True\nprint(len([x for x in range(1000000) if circPrime(x)]))\n"
  },
  {
    "path": "Problem035/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=35)\n"
  },
  {
    "path": "Problem036/.hash",
    "content": "0e175dc2f28833885f62e7345addff03"
  },
  {
    "path": "Problem036/CommonLisp/solution_1.lisp",
    "content": ";; Common Lisp Script\n;; Manoel Vilela\n\n(defun palindromep (s)\n  (equal s\n         (reverse s)))\n\n(defun bin (n)\n  (format nil \"~b\" n))\n\n(defun solution (n)\n  (loop for x from 0 below n\n        when (and (palindromep (write-to-string x))\n                  (palindromep (bin x)))\n          sum x))\n\n(format t \"~a~%\" (solution 1000000))\n"
  },
  {
    "path": "Problem036/Elixir/solution_1.exs",
    "content": "defmodule DoubleBase do\n  def palindrome(lim) do\n    (1..lim)\n      |> Stream.map(fn a -> Integer.to_string(a) end)\n      |> Stream.filter(fn b -> pal?(b) end)\n      |> Stream.map(fn c -> Integer.to_string(String.to_integer(c),2) end)\n      |> Stream.filter(fn d -> pal?(d) end)\n      |> Stream.map(fn e -> String.to_integer(e,2) end)\n      |> Enum.reduce(fn f,g -> f + g end)\n      |> IO.inspect\n  end\n\n  def pal?(n) do\n    n == String.split(n,\"\",trim: true)\n      |> Enum.reverse()\n      |> Enum.join()\n  end\nend\n\nDoubleBase.palindrome(1_000_000)"
  },
  {
    "path": "Problem036/Go/solution_1.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n)\n\nfunc isPalindrome(s string) bool {\n\tfor i := 0; i < len(s)/2; i++ {\n\t\tif s[i] != s[len(s)-i-1] {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nvar binary = func(i int64) string { return strconv.FormatInt(i, 2) }\n\nfunc main() {\n\tnumber := 0\n\tfor i := 0; i < 1000000; i++ {\n\t\tif isPalindrome(strconv.Itoa(i)) && isPalindrome(binary(int64(i))) {\n\t\t\tnumber += i\n\t\t}\n\t}\n\tfmt.Println(number)\n}\n"
  },
  {
    "path": "Problem036/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n\ndef isPal(n):\n    return str(n) == str(n)[::-1]\n\n\ndef binDecPal(x):\n    if isPal(x):\n        n = bin(x)[2:]\n        if isPal(n):\n            return True\n    return False\n\nprint(sum([x for x in range(1000000) if binDecPal(x)]))"
  },
  {
    "path": "Problem036/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=36)\n"
  },
  {
    "path": "Problem036/Ruby/solution_1.rb",
    "content": "def binary(value)\n    value.to_s(2)\nend\n\ndef palindrome(value)\n    value.to_s.eql?(value.to_s.reverse)\nend\n\ndef double_base(value)\n    palindrome(value) && palindrome(binary(value))\nend\n\nputs (0..999999)\n        .to_a\n        .select{|x| double_base(x)}\n        .reduce(:+)\n"
  },
  {
    "path": "Problem037/.hash",
    "content": "cace46c61b00de1b60874936a093981d"
  },
  {
    "path": "Problem037/C++/solution_1.cpp",
    "content": "#include<bits/stdc++.h>\nusing namespace std;\n\nconst int much = 1000000;\nbool is_prime[much];\n\nvoid sieve(){\n\tmemset (is_prime, true, sizeof(is_prime));\n\tis_prime[0] = is_prime[1] = false;\n\tfor (int i = 2; i < much; ++i) {\n\t\tfor (int j = (i << 1); j < much; j += i) {\n\t\t\tis_prime[j] = false;\n\t\t}\n\t}\n}\n\nbool test(int t)\n{\n\tint orig = t, cnt = 0, tmp10 = 1;\n\twhile (t > 0) {\n\t\tif (!is_prime[t]) {\n\t\t\treturn false;\n\t\t}\n\t\tt /= 10;\n\t\t++cnt;\n\t\ttmp10 *= 10;\n\t}\n\twhile(orig > 0) {\n\t\tif (!is_prime[orig]) {\n\t\t\treturn false;\n\t\t}\n\t\torig = (orig % (tmp10 /= 10));\n\t}\n\treturn true;\n}\n\nint main()\n{\n\tlong long sum = 0;\n\tsieve ();\n\tfor (int i = 10; i < much; ++i) {\n\t\tif (test(i)) {\n\t\t\tsum += i;\n\t\t}\n\t}\n\tcout << sum << '\\n';\n\treturn 0;\n}\n"
  },
  {
    "path": "Problem037/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\nfrom functools import wraps\n\n\ndef memo(fn):\n    \"\"\"Memorization decorator\"\"\"\n\n    cache = {}\n    miss = object()\n\n    @wraps(fn)\n    def wrapper(*args, **kwargs):\n        result = cache.get(args, miss)\n        if result is miss:\n            result = fn(*args)\n            cache[args] = result\n        return result\n    return wrapper\n\n\nclass TruncatePrime(int):\n\n    \"\"\"\n        Class to verify  if a prime is a truncate:\n        Truncate prime example:  3797\n        pop left: 3797 -> 379 -> 37 -> 3\n        pop right: 3797 -> 797 -> 97 -> 7\n    \"\"\"\n\n    def __init__(self, x):\n        self.num = x\n        self.string = str(x)\n        self.len = len(self.string)\n\n    def __add__(self, other):\n        return self.num + other\n\n    @property\n    def left(self):\n        return all([self.is_prime(x) for x in self.walk('left')])\n\n    @property\n    def right(self):\n        return all([self.is_prime(x) for x in self.walk('right')])\n\n    @property\n    def self(self):\n        return self.is_prime(self.num)\n\n    def walk(self, orientation):\n        if orientation is 'right':\n            return (int(self.string[:x]) for x in range(1, self.len))\n        elif orientation is 'left':\n            return (int(self.string[x:]) for x in range(1, self.len))\n\n    @memo\n    def is_prime(self, x):\n        if x < 2:\n            return False\n        for d in range(2, int(x ** 0.5) + 1):\n            if x % d == 0:\n                return False\n        return True\n\n    @property\n    def is_truncate(self):\n        if len(self.string) < 2:\n            return False\n\n        return self.self and self.left and self.right\n\n\ndef search_truncate(until=11):\n    n = 0\n    truncate_primes = []\n    while len(truncate_primes) < until:\n        t = TruncatePrime(n)\n        if t.is_truncate:\n            truncate_primes.append(t)\n        n += 1\n    return sum(truncate_primes)\n\nif __name__ == '__main__':\n    print(search_truncate())\n"
  },
  {
    "path": "Problem037/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=37)\n"
  },
  {
    "path": "Problem038/.hash",
    "content": "f2a29ede8dc9fae7926dc7a4357ac25e"
  },
  {
    "path": "Problem038/Elixir/solution_1.exs",
    "content": "defmodule Pandigital do\n  def multiples(current,lim,pandigitals) when current > lim do\n    pandigitals\n      |> Enum.max()\n  end\n\n  def multiples(current,lim,pandigitals) when current <= lim do\n    multiples(current+1,lim,products(2,4,Integer.to_string(current),pandigitals))\n  end\n\n  def products(start,finish,_,pandigitals) when start > finish do\n    pandigitals\n  end\n\n  def products(start,finish,current,pandigitals) when start <= finish do\n    pan = current <> Integer.to_string(start*String.to_integer(current))\n    \n    pandigitals = cond do\n      pandigital?(pan) ->\n        [pan] ++ pandigitals\n      true -> \n        pandigitals\n    end\n\n    products(start+1,finish,pan,pandigitals)\n  end\n\n  def pandigital?(n) do\n    ~w(1 2 3 4 5 6 7 8 9) == n\n      |> String.split(\"\", trim: true)\n      |> Enum.sort()\n  end\nend\n\nIO.puts Pandigital.multiples(9_000,9_999,[])"
  },
  {
    "path": "Problem038/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\nfrom collections import Counter\n\n\nclass PanDigital(int):\n\n    dig = ''\n    iteration = 1\n\n    def map(self, x):\n        return str(self * x)\n\n    def concat(self, digits):\n        return self.dig + digits\n\n    @property\n    def can_continue(self):\n        return len(self.dig) < 10 and self.count\n\n    @property\n    def count(self):\n        return all(False for x in Counter(self.dig).values() if x > 1)\n\n    @property\n    def sorted(self):\n        return ''.join(map(str, sorted(map(int, self.dig))))\n\n    @property\n    def ispandig(self):\n        return self.sorted == '123456789'\n\n    def transform(self):\n        while self.can_continue:\n            self.dig = self.concat(self.map(self.iteration))\n            if self.ispandig:\n                return self.dig\n            self.iteration += 1\n\n        return None\n\n    @property\n    def value(self):\n        v = self.transform()\n        if v is not None:\n            return int(v)\n        return None\n\np = PanDigital\nprint(max(p(x).value for x in range(10000) if p(x).value))\n"
  },
  {
    "path": "Problem038/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=38)\n"
  },
  {
    "path": "Problem038/Swift/solution_1.swift",
    "content": "import Glibc\n\nfunc is9Pandigital(value:String) -> Bool\n{\n  return String(value.characters.sort()) == \"123456789\"\n}\n\nfunc nDigitsInMult(n1:Int, n2:Int) -> Int\n{\n  return Int(floor((log10(Double(n1) + log10(Double(n2))) + 1)))\n}\n\nvar max9Pandigital = -1\nvar i = 1\nlet maxNumber = Int(pow(10, 9 / 2))\n\nwhile i < maxNumber \n{\n  var concat = \"\"\n  for j in 1...9\n  {\n    if concat.characters.count + nDigitsInMult(i, n2:j) > 9\n    {\n      break\n    }\n    \n    concat += String(i * j)\n    if (is9Pandigital(concat))\n    {\n      max9Pandigital = max(max9Pandigital, Int(concat)!)\n    }\n  }\n\n  i+=1\n}\n\nprint (max9Pandigital)\n"
  },
  {
    "path": "Problem039/.hash",
    "content": "fa83a11a198d5a7f0bf77a1987bcd006"
  },
  {
    "path": "Problem039/C/Makefile",
    "content": "CXX = gcc\nLFLAGS = -lm -Wall -o\nTARGET =  solution_1\nEXTENSION_TARGET = c\nEXTENSION_OUT = out\n\n\nall: \n\t$(CXX) $(LFLAGS) $(TARGET).$(EXTENSION_OUT) $(TARGET).$(EXTENSION_TARGET)\nclean: \n\trm -v *.$(EXTENSION_OUT)\nrun:\n\t./$(TARGET).$(EXTENSION_OUT)\n"
  },
  {
    "path": "Problem039/C/solution_1.c",
    "content": "#include <stdio.h>\n#define MAX 1000\n\nint main() {\n    int i, j , k, maxP = 1;\n    int ps[1001];\n\n    for (i=0; i <= MAX; ps[++i] =0);\n\n    for(i = 1; i <= MAX; i++) {\n        for(j = i;j <= MAX; j++) {\n            for(k = j; (k * k) < (i * i + j * j); k++);\n            if((i * i + j * j) == (k * k) && (i + j + k) <= MAX) {\n                ps[i+j+k] += 1;\n            }\n        }\n    }\n\n    for(i = 1; i <= MAX; i++) {\n        if(ps[maxP] < ps[i])\n            maxP = i;\n    }\n\n    printf(\"%d\\n\",maxP);\n\n    return 0;\n}\n"
  },
  {
    "path": "Problem039/CommonLisp/solution_1.lisp",
    "content": ";; Common Lisp Script\n;; Manoel Vilela\n\n\n(defparameter *max-perimeter* 1000)\n(defparameter *perimeter-solutions* (make-array (1+ *max-perimeter*) :initial-element 0))\n;; (1+ *max-perimeter*) is just to avoid decrement later to access the index by perimeter-solution\n\n(defun pythagoreanp (a b c)\n  (= (* a a)\n     (+ (* b b)\n        (* c c))))\n\n(defun <=-perimeter (a b c)\n  (<= (+ a b c) *max-perimeter*))\n\n(defun solution ()\n  (loop for c from 1 to *max-perimeter*\n        do (loop for b from c to *max-perimeter*\n                 for a = (loop for x from b\n                               while (< (* x x) (+ (* b b)\n                                                   (* c c)))\n                               finally (return x))\n                 when (and (pythagoreanp a b c)\n                           (<=-perimeter a b c))\n                   do (setf (aref *perimeter-solutions* (+ a b c))\n                            (1+ (aref *perimeter-solutions* (+ a b c))))))\n  (loop with max-perimeter = 0\n        for i from 1 to *max-perimeter*\n        when (> (aref *perimeter-solutions* i)\n                (aref *perimeter-solutions* max-perimeter))\n             do (setf max-perimeter i)\n        finally (return max-perimeter)))\n\n\n(format t \"~a~%\" (solution))\n"
  },
  {
    "path": "Problem039/Elixir/solution_1.exs",
    "content": "defmodule RightInteger do\n  def ways(vals,i,_,_) when i > 399 do\n    vals\n  end\n\n  def ways(vals,i,j,_) when j > 399 do\n    ways(vals,i+1,i+1,i+1)\n  end\n\n  def ways(vals,i,j,k) when k > 399 do\n    ways(vals,i,j+1,j+1)\n  end\n\n  def ways(vals,i,j,k) when k <= 399 do\n    vals = cond do\n      ((i*i) + (j*j) == (k*k)) and ((i+j+k) < 1_000) ->\n        ad((i+j+k),vals)\n      true ->\n        vals\n    end\n\n    ways(vals,i,j,k+1)\n  end\n\n  def ad(a,b), do: Map.put(b,a,(Map.get(b,a) + 1))\nend\n\nEnum.into(Enum.zip(Enum.to_list(1..1_000),List.duplicate(0,1_000)),Map.new)\n  |> RightInteger.ways(1,1,1)\n  |> Enum.max_by(fn {_,y} -> y end)\n  |> elem(0)\n  |> IO.puts"
  },
  {
    "path": "Problem039/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=39)\n"
  },
  {
    "path": "Problem040/.hash",
    "content": "6f3ef77ac0e3619e98159e9b6febf557"
  },
  {
    "path": "Problem040/Elixir/solution_1.exs",
    "content": "defmodule Champernowne do\n  def constant(lim) do\n    (0..lim)\n      |> Enum.map(fn x -> Integer.to_string(x) end)\n      |> Enum.join()\n      |> String.codepoints\n      |> find(0,1,1)\n      |> IO.inspect\n  end\n\n  def find(_,_,tens,final) when tens > 1_000_000 do\n    final\n  end\n\n  def find([digit|digits],count,tens,final) when tens <= 1_000_000 do\n    [final|tens] = cond do\n      count == tens ->\n        [final * String.to_integer(digit)|tens  * 10]\n      true ->\n        [final|tens]\n    end\n\n    find(digits,count+1,tens,final)\n  end\nend\n\nChampernowne.constant(1_000_000)\n"
  },
  {
    "path": "Problem040/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\nfrom functools import reduce\nfrom itertools import count\n\n\ndef frac_series_generator():\n    '''each n after 0.1 from 0.12345678910111213...'''\n    for w in count(start=1, step=1):\n        for s in str(w):\n            yield s\n\n\ndef search_digit_by_index(indexes):\n    '''get the digits of indexes of frac_series'''\n    limit = max(indexes)\n    digits = {x: 0 for x in indexes}\n    for c, n in enumerate(frac_series_generator()):\n        if c + 1 in digits:\n            digits[c + 1] = int(n)\n        if c + 1 >= limit:\n            break\n    return digits.values()\n\n\ndef main():\n    indexes = [1, 10, 100, 1000, 10000, 100000, 1000000]\n    print(reduce(int.__mul__, search_digit_by_index(indexes)))\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "Problem040/Python/solution_2.py",
    "content": "\n#code created by NamanNimmo Gera\n#1:20pm, April 15, 2019.\n\nstring = \"\"\n\nfor i in range(1,1000000):\n    string = string + str(i)\nprint(int(string[0])*int(string[9])*int(string[99])*int(string[999])*int(string[9999])*int(string[99999])*int(string[999999])) \n"
  },
  {
    "path": "Problem040/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=40)\n"
  },
  {
    "path": "Problem041/.hash",
    "content": "d0a1bd6ab4229b2d0754be8923431404"
  },
  {
    "path": "Problem041/CommonLisp/solution_1.lisp",
    "content": ";; Common Lisp Script\n;; Manoel Vilela\n\n\n;; next lexicographical permutation of a vector\n;; borrowed from http://rosettacode.org/wiki/Permutations#Common_Lisp\n;; (next-perm #(9 8 7 6 5 4 3 2 1)) => #(9 8 7 6 5 4 3 1 2)\n(defun next-perm (vec &optional (cmp '>))  ; modify vector\n  (declare (type (simple-array * (*)) vec))\n  (macrolet ((el (i) `(aref vec ,i))\n             (cmp (i j) `(funcall cmp (el ,i) (el ,j))))\n    (loop with len = (1- (length vec))\n          for i from (1- len) downto 0\n          when (cmp i (1+ i)) do\n            (loop for k from len downto i\n                  when (cmp i k) do\n                    (rotatef (el i) (el k))\n                    (setf k (1+ len))\n                    (loop while (< (incf i) (decf k)) do\n                      (rotatef (el i) (el k)))\n                    (return-from next-perm vec)))))\n\n;; check if n is prime\n(defun primep (n)\n  (loop for d from 2 to (1+ (isqrt n))\n        never (and (= (mod n d) 0)\n                   (/= n d))))\n\n;; vector of digits => integer\n;; (vec->int #(9 8 7 6 5 4 3 2 1)) => 987654321\n(defun vec->int (vec)\n  (loop for d across vec\n        for pos from (1- (length vec)) downto -1\n        sum (* (expt 10 pos)\n               d)))\n\n;; loop from the biggest to small pandigital,\n;; get the first pandigital prime\n(defun solution (vec)\n  (loop for pandigital = (vec->int vec)\n        when (primep pandigital)\n          return pandigital\n        when (null (next-perm vec))\n          return (if (< (length vec) 2) ;; if is only #(1), calling solution again will make a infinity loop\n                     nil\n                     (solution (subseq (reverse vec) 1)))))\n\n\n(format t \"~a~%\" (solution #(9 8 7 6 5 4 3 2 1)))\n"
  },
  {
    "path": "Problem041/Python/solution_slow_1.py",
    "content": "from collections import Counter\n\ndef isPrime(n) : \n    if (n <= 1) : \n        return False                #this is my brute force approach, if  I see a better solutionin the PE forum, will edit this :)\n    if (n <= 3) :                   # EDIT: A much better approach: https://www.xarg.org/puzzle/project-euler/problem-41/\n        return True\n    if (n % 2 == 0 or n % 3 == 0) : \n        return False\n    i = 5\n    while(i * i <= n) : \n        if (n % i == 0 or n % (i + 2) == 0) : \n            return False\n        i = i + 6\n    return True\n    \ndef checker(a): #function to check if the number has zero in it or not\n    for i in str(a):\n        if str(i)=='0':\n            return 1\n    return 0       \n\ndef repeatCheck(a): #function to check if there is any repeating digit or not\n    c = Counter(str(a))\n    if any(value > 1 for value in c.values()):\n        return 1\n    else:\n        return 0\n\nhighest = 0\nfor j in range(1000000,10000000): #the highest number below 1million is 4231\n    if isPrime(j) and (checker(j)==0) and (repeatCheck(j)==0):\n        a = len(str(j))\n        k = (a*(a+1))/2\n        if sum(int(digit) for digit in str(j))==k:\n            if j>highest:\n                highest = j\nprint(highest)            \n        \n"
  },
  {
    "path": "Problem041/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=41)\n"
  },
  {
    "path": "Problem041/Swift/solution_1.swift",
    "content": "import Glibc\n\nfunc swap (str:[Character], i:Int, j:Int) -> [Character]\n{\n  var newStr = str\n  let c = str[i]\n  newStr.removeAtIndex(i)\n  newStr.insert(str[j], atIndex:i)\n  newStr.removeAtIndex(j)\n  newStr.insert(c, atIndex:j)\n  return newStr\n}\n\nfunc isPandigitalPrimeTest(n:Double) -> Bool\n{\n  if n % 2 == 0\n  {\n    return false\n  }\n  else\n  {\n    let end = sqrt(n)\n    var i = Double(3)\n    while i <= end\n    {\n      if (n % i == 0)\n      {\n        return false\n      }\n      i += 2\n    }\n  }\n\n  return true\n} \n\nfunc newStringScope(n:Int) -> String \n{\n  var i = n - 1\n  var scope = \"\"\n\n  while i > 0\n  {\n    scope += String(i)\n    i -= 1\n  }\n\n  return scope \n}\n\nvar maxPandigitalPrime = -1\n\nfunc permuteString(str:[Character], i:Int, length:Int) \n{\n  if length == i\n  {\n    if (isPandigitalPrimeTest(Double(String(str))!))\n    {\n      maxPandigitalPrime = max (maxPandigitalPrime, Int(String(str))!)\n    }\n\n    return\n  }\n\n  var newStr = str;\n\n  for j in i..<length\n  {\n    newStr = swap(newStr, i:i, j:j)\n    permuteString(newStr, i:i+1, length:length)\n    newStr = swap(newStr, i:i, j:j) \n  }\n\n  return\n}\n\nvar idx = 9 \nwhile idx > 0\n{\n  var fixedScope = Array((String(idx) + newStringScope(idx)).characters)\n  \n  permuteString(fixedScope, i:1, length:fixedScope.count)\n\n  idx -= 1\n} \n\nprint (maxPandigitalPrime) \n"
  },
  {
    "path": "Problem042/.hash",
    "content": "82aa4b0af34c2313a562076992e50aa3"
  },
  {
    "path": "Problem042/Elixir/solution_1.exs",
    "content": "a_z_key = %{\n  \"A\" => 1,\n  \"B\" => 2,\n  \"C\" => 3,\n  \"D\" => 4,\n  \"E\" => 5,\n  \"F\" => 6,\n  \"G\" => 7,\n  \"H\" => 8,\n  \"I\" => 9,\n  \"J\" => 10,\n  \"K\" => 11,\n  \"L\" => 12,\n  \"M\" => 13,\n  \"N\" => 14,\n  \"O\" => 15,\n  \"P\" => 16,\n  \"Q\" => 17,\n  \"R\" => 18,\n  \"S\" => 19,\n  \"T\" => 20,\n  \"U\" => 21,\n  \"V\" => 22,\n  \"W\" => 23,\n  \"X\" => 24,\n  \"Y\" => 25,\n  \"Z\" => 26\n}\n\ndefmodule TriangleWords do\n  def words(file,a_z_key) do\n    case File.read(file) do\n      {:ok, body}     ->\n        body\n         |> parse(a_z_key)\n         |> IO.inspect\n      {:error,reason} ->\n        :file.format_error(reason)\n    end\n  end\n\n  def parse(body,a_z_key) do\n    body\n      |> String.replace(~r/\\W+/,\",\")\n      |> String.split(\",\")\n      |> Enum.slice(1,2000)\n      |> Stream.map(fn x -> String.split(x, \"\", trim: true) end)\n      |> Enum.map(fn y -> Enum.map(y, fn z -> a_z_key[z]  end)\n        |> Enum.reduce(0,fn a,b -> a + b end) end)\n      |> triangle_numbers()\n  end\n\n  def find([],count,_), do: count\n  def find([word|words],count,tri_nums) when length(words) >= 0 do\n    find(words,triangle?(word,tri_nums,count),tri_nums)\n  end\n\n  def triangle_numbers(words) do\n    tri_nums = for n <- (1..round(:math.sqrt(Enum.max(words)*2))), do: div(((n*n)+n),2)\n    find(words,0,tri_nums)\n  end\n\n  def triangle?(word,tri_nums,count) do\n    cond do\n      Enum.member?(tri_nums,word) ->\n        count + 1\n      true ->\n        count\n      end\n  end\nend\n\nTriangleWords.words(\"../p042_words.txt\",a_z_key)\n"
  },
  {
    "path": "Problem042/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\nfrom functools import wraps\nfrom os.path import dirname, join\n\n\ndef memo(fn):\n    cache = {}\n    miss = object()\n\n    @wraps(fn)\n    def wrapper(*args, **kwargs):\n        result = cache.get(args, miss)\n        if result is miss:\n            result = fn(*args)\n            cache[args] = result\n        return result\n    return wrapper\n\n\ndef load_words():\n    with open(\"../p042_words.txt\") as f:\n        words = f.read().strip(\"\\n\").split(\",\")\n    return [x.lower().strip(\"\\\"\") for x in words]\n\n\ndef string_to_num(string):\n    from string import ascii_lowercase as alpha\n    return sum([alpha.index(x) + 1 for x in string])\n\n\ndef triangles():\n    from itertools import count\n    for n in count(start=1, step=1):\n        yield ((n + 1) * n) // 2\n\n\n@memo\ndef is_triangle(num):\n    for t in triangles():\n        if num == t:\n            return True\n        if t > num:\n            return False\n\n\ndef solution():\n    return sum(1 for x in load_words() if is_triangle(string_to_num(x)))\n\n\nif __name__ == '__main__':\n    print(solution())\n"
  },
  {
    "path": "Problem042/Python/solution_2.py",
    "content": "#code created by NamanNimmo Gera\n#8:07pm, April 13, 2019.\n\nlist = [\"A\",\"ABILITY\",\"ABLE\",\"ABOUT\",\"ABOVE\",\"ABSENCE\",\"ABSOLUTELY\",\"ACADEMIC\",\"ACCEPT\",\"ACCESS\",\"ACCIDENT\",\"ACCOMPANY\",\"ACCORDING\",\"ACCOUNT\",\"ACHIEVE\",\"ACHIEVEMENT\",\"ACID\",\"ACQUIRE\",\"ACROSS\",\"ACT\",\"ACTION\",\"ACTIVE\",\"ACTIVITY\",\"ACTUAL\",\"ACTUALLY\",\"ADD\",\"ADDITION\",\"ADDITIONAL\",\"ADDRESS\",\"ADMINISTRATION\",\"ADMIT\",\"ADOPT\",\"ADULT\",\"ADVANCE\",\"ADVANTAGE\",\"ADVICE\",\"ADVISE\",\"AFFAIR\",\"AFFECT\",\"AFFORD\",\"AFRAID\",\"AFTER\",\"AFTERNOON\",\"AFTERWARDS\",\"AGAIN\",\"AGAINST\",\"AGE\",\"AGENCY\",\"AGENT\",\"AGO\",\"AGREE\",\"AGREEMENT\",\"AHEAD\",\"AID\",\"AIM\",\"AIR\",\"AIRCRAFT\",\"ALL\",\"ALLOW\",\"ALMOST\",\"ALONE\",\"ALONG\",\"ALREADY\",\"ALRIGHT\",\"ALSO\",\"ALTERNATIVE\",\"ALTHOUGH\",\"ALWAYS\",\"AMONG\",\"AMONGST\",\"AMOUNT\",\"AN\",\"ANALYSIS\",\"ANCIENT\",\"AND\",\"ANIMAL\",\"ANNOUNCE\",\"ANNUAL\",\"ANOTHER\",\"ANSWER\",\"ANY\",\"ANYBODY\",\"ANYONE\",\"ANYTHING\",\"ANYWAY\",\"APART\",\"APPARENT\",\"APPARENTLY\",\"APPEAL\",\"APPEAR\",\"APPEARANCE\",\"APPLICATION\",\"APPLY\",\"APPOINT\",\"APPOINTMENT\",\"APPROACH\",\"APPROPRIATE\",\"APPROVE\",\"AREA\",\"ARGUE\",\"ARGUMENT\",\"ARISE\",\"ARM\",\"ARMY\",\"AROUND\",\"ARRANGE\",\"ARRANGEMENT\",\"ARRIVE\",\"ART\",\"ARTICLE\",\"ARTIST\",\"AS\",\"ASK\",\"ASPECT\",\"ASSEMBLY\",\"ASSESS\",\"ASSESSMENT\",\"ASSET\",\"ASSOCIATE\",\"ASSOCIATION\",\"ASSUME\",\"ASSUMPTION\",\"AT\",\"ATMOSPHERE\",\"ATTACH\",\"ATTACK\",\"ATTEMPT\",\"ATTEND\",\"ATTENTION\",\"ATTITUDE\",\"ATTRACT\",\"ATTRACTIVE\",\"AUDIENCE\",\"AUTHOR\",\"AUTHORITY\",\"AVAILABLE\",\"AVERAGE\",\"AVOID\",\"AWARD\",\"AWARE\",\"AWAY\",\"AYE\",\"BABY\",\"BACK\",\"BACKGROUND\",\"BAD\",\"BAG\",\"BALANCE\",\"BALL\",\"BAND\",\"BANK\",\"BAR\",\"BASE\",\"BASIC\",\"BASIS\",\"BATTLE\",\"BE\",\"BEAR\",\"BEAT\",\"BEAUTIFUL\",\"BECAUSE\",\"BECOME\",\"BED\",\"BEDROOM\",\"BEFORE\",\"BEGIN\",\"BEGINNING\",\"BEHAVIOUR\",\"BEHIND\",\"BELIEF\",\"BELIEVE\",\"BELONG\",\"BELOW\",\"BENEATH\",\"BENEFIT\",\"BESIDE\",\"BEST\",\"BETTER\",\"BETWEEN\",\"BEYOND\",\"BIG\",\"BILL\",\"BIND\",\"BIRD\",\"BIRTH\",\"BIT\",\"BLACK\",\"BLOCK\",\"BLOOD\",\"BLOODY\",\"BLOW\",\"BLUE\",\"BOARD\",\"BOAT\",\"BODY\",\"BONE\",\"BOOK\",\"BORDER\",\"BOTH\",\"BOTTLE\",\"BOTTOM\",\"BOX\",\"BOY\",\"BRAIN\",\"BRANCH\",\"BREAK\",\"BREATH\",\"BRIDGE\",\"BRIEF\",\"BRIGHT\",\"BRING\",\"BROAD\",\"BROTHER\",\"BUDGET\",\"BUILD\",\"BUILDING\",\"BURN\",\"BUS\",\"BUSINESS\",\"BUSY\",\"BUT\",\"BUY\",\"BY\",\"CABINET\",\"CALL\",\"CAMPAIGN\",\"CAN\",\"CANDIDATE\",\"CAPABLE\",\"CAPACITY\",\"CAPITAL\",\"CAR\",\"CARD\",\"CARE\",\"CAREER\",\"CAREFUL\",\"CAREFULLY\",\"CARRY\",\"CASE\",\"CASH\",\"CAT\",\"CATCH\",\"CATEGORY\",\"CAUSE\",\"CELL\",\"CENTRAL\",\"CENTRE\",\"CENTURY\",\"CERTAIN\",\"CERTAINLY\",\"CHAIN\",\"CHAIR\",\"CHAIRMAN\",\"CHALLENGE\",\"CHANCE\",\"CHANGE\",\"CHANNEL\",\"CHAPTER\",\"CHARACTER\",\"CHARACTERISTIC\",\"CHARGE\",\"CHEAP\",\"CHECK\",\"CHEMICAL\",\"CHIEF\",\"CHILD\",\"CHOICE\",\"CHOOSE\",\"CHURCH\",\"CIRCLE\",\"CIRCUMSTANCE\",\"CITIZEN\",\"CITY\",\"CIVIL\",\"CLAIM\",\"CLASS\",\"CLEAN\",\"CLEAR\",\"CLEARLY\",\"CLIENT\",\"CLIMB\",\"CLOSE\",\"CLOSELY\",\"CLOTHES\",\"CLUB\",\"COAL\",\"CODE\",\"COFFEE\",\"COLD\",\"COLLEAGUE\",\"COLLECT\",\"COLLECTION\",\"COLLEGE\",\"COLOUR\",\"COMBINATION\",\"COMBINE\",\"COME\",\"COMMENT\",\"COMMERCIAL\",\"COMMISSION\",\"COMMIT\",\"COMMITMENT\",\"COMMITTEE\",\"COMMON\",\"COMMUNICATION\",\"COMMUNITY\",\"COMPANY\",\"COMPARE\",\"COMPARISON\",\"COMPETITION\",\"COMPLETE\",\"COMPLETELY\",\"COMPLEX\",\"COMPONENT\",\"COMPUTER\",\"CONCENTRATE\",\"CONCENTRATION\",\"CONCEPT\",\"CONCERN\",\"CONCERNED\",\"CONCLUDE\",\"CONCLUSION\",\"CONDITION\",\"CONDUCT\",\"CONFERENCE\",\"CONFIDENCE\",\"CONFIRM\",\"CONFLICT\",\"CONGRESS\",\"CONNECT\",\"CONNECTION\",\"CONSEQUENCE\",\"CONSERVATIVE\",\"CONSIDER\",\"CONSIDERABLE\",\"CONSIDERATION\",\"CONSIST\",\"CONSTANT\",\"CONSTRUCTION\",\"CONSUMER\",\"CONTACT\",\"CONTAIN\",\"CONTENT\",\"CONTEXT\",\"CONTINUE\",\"CONTRACT\",\"CONTRAST\",\"CONTRIBUTE\",\"CONTRIBUTION\",\"CONTROL\",\"CONVENTION\",\"CONVERSATION\",\"COPY\",\"CORNER\",\"CORPORATE\",\"CORRECT\",\"COS\",\"COST\",\"COULD\",\"COUNCIL\",\"COUNT\",\"COUNTRY\",\"COUNTY\",\"COUPLE\",\"COURSE\",\"COURT\",\"COVER\",\"CREATE\",\"CREATION\",\"CREDIT\",\"CRIME\",\"CRIMINAL\",\"CRISIS\",\"CRITERION\",\"CRITICAL\",\"CRITICISM\",\"CROSS\",\"CROWD\",\"CRY\",\"CULTURAL\",\"CULTURE\",\"CUP\",\"CURRENT\",\"CURRENTLY\",\"CURRICULUM\",\"CUSTOMER\",\"CUT\",\"DAMAGE\",\"DANGER\",\"DANGEROUS\",\"DARK\",\"DATA\",\"DATE\",\"DAUGHTER\",\"DAY\",\"DEAD\",\"DEAL\",\"DEATH\",\"DEBATE\",\"DEBT\",\"DECADE\",\"DECIDE\",\"DECISION\",\"DECLARE\",\"DEEP\",\"DEFENCE\",\"DEFENDANT\",\"DEFINE\",\"DEFINITION\",\"DEGREE\",\"DELIVER\",\"DEMAND\",\"DEMOCRATIC\",\"DEMONSTRATE\",\"DENY\",\"DEPARTMENT\",\"DEPEND\",\"DEPUTY\",\"DERIVE\",\"DESCRIBE\",\"DESCRIPTION\",\"DESIGN\",\"DESIRE\",\"DESK\",\"DESPITE\",\"DESTROY\",\"DETAIL\",\"DETAILED\",\"DETERMINE\",\"DEVELOP\",\"DEVELOPMENT\",\"DEVICE\",\"DIE\",\"DIFFERENCE\",\"DIFFERENT\",\"DIFFICULT\",\"DIFFICULTY\",\"DINNER\",\"DIRECT\",\"DIRECTION\",\"DIRECTLY\",\"DIRECTOR\",\"DISAPPEAR\",\"DISCIPLINE\",\"DISCOVER\",\"DISCUSS\",\"DISCUSSION\",\"DISEASE\",\"DISPLAY\",\"DISTANCE\",\"DISTINCTION\",\"DISTRIBUTION\",\"DISTRICT\",\"DIVIDE\",\"DIVISION\",\"DO\",\"DOCTOR\",\"DOCUMENT\",\"DOG\",\"DOMESTIC\",\"DOOR\",\"DOUBLE\",\"DOUBT\",\"DOWN\",\"DRAW\",\"DRAWING\",\"DREAM\",\"DRESS\",\"DRINK\",\"DRIVE\",\"DRIVER\",\"DROP\",\"DRUG\",\"DRY\",\"DUE\",\"DURING\",\"DUTY\",\"EACH\",\"EAR\",\"EARLY\",\"EARN\",\"EARTH\",\"EASILY\",\"EAST\",\"EASY\",\"EAT\",\"ECONOMIC\",\"ECONOMY\",\"EDGE\",\"EDITOR\",\"EDUCATION\",\"EDUCATIONAL\",\"EFFECT\",\"EFFECTIVE\",\"EFFECTIVELY\",\"EFFORT\",\"EGG\",\"EITHER\",\"ELDERLY\",\"ELECTION\",\"ELEMENT\",\"ELSE\",\"ELSEWHERE\",\"EMERGE\",\"EMPHASIS\",\"EMPLOY\",\"EMPLOYEE\",\"EMPLOYER\",\"EMPLOYMENT\",\"EMPTY\",\"ENABLE\",\"ENCOURAGE\",\"END\",\"ENEMY\",\"ENERGY\",\"ENGINE\",\"ENGINEERING\",\"ENJOY\",\"ENOUGH\",\"ENSURE\",\"ENTER\",\"ENTERPRISE\",\"ENTIRE\",\"ENTIRELY\",\"ENTITLE\",\"ENTRY\",\"ENVIRONMENT\",\"ENVIRONMENTAL\",\"EQUAL\",\"EQUALLY\",\"EQUIPMENT\",\"ERROR\",\"ESCAPE\",\"ESPECIALLY\",\"ESSENTIAL\",\"ESTABLISH\",\"ESTABLISHMENT\",\"ESTATE\",\"ESTIMATE\",\"EVEN\",\"EVENING\",\"EVENT\",\"EVENTUALLY\",\"EVER\",\"EVERY\",\"EVERYBODY\",\"EVERYONE\",\"EVERYTHING\",\"EVIDENCE\",\"EXACTLY\",\"EXAMINATION\",\"EXAMINE\",\"EXAMPLE\",\"EXCELLENT\",\"EXCEPT\",\"EXCHANGE\",\"EXECUTIVE\",\"EXERCISE\",\"EXHIBITION\",\"EXIST\",\"EXISTENCE\",\"EXISTING\",\"EXPECT\",\"EXPECTATION\",\"EXPENDITURE\",\"EXPENSE\",\"EXPENSIVE\",\"EXPERIENCE\",\"EXPERIMENT\",\"EXPERT\",\"EXPLAIN\",\"EXPLANATION\",\"EXPLORE\",\"EXPRESS\",\"EXPRESSION\",\"EXTEND\",\"EXTENT\",\"EXTERNAL\",\"EXTRA\",\"EXTREMELY\",\"EYE\",\"FACE\",\"FACILITY\",\"FACT\",\"FACTOR\",\"FACTORY\",\"FAIL\",\"FAILURE\",\"FAIR\",\"FAIRLY\",\"FAITH\",\"FALL\",\"FAMILIAR\",\"FAMILY\",\"FAMOUS\",\"FAR\",\"FARM\",\"FARMER\",\"FASHION\",\"FAST\",\"FATHER\",\"FAVOUR\",\"FEAR\",\"FEATURE\",\"FEE\",\"FEEL\",\"FEELING\",\"FEMALE\",\"FEW\",\"FIELD\",\"FIGHT\",\"FIGURE\",\"FILE\",\"FILL\",\"FILM\",\"FINAL\",\"FINALLY\",\"FINANCE\",\"FINANCIAL\",\"FIND\",\"FINDING\",\"FINE\",\"FINGER\",\"FINISH\",\"FIRE\",\"FIRM\",\"FIRST\",\"FISH\",\"FIT\",\"FIX\",\"FLAT\",\"FLIGHT\",\"FLOOR\",\"FLOW\",\"FLOWER\",\"FLY\",\"FOCUS\",\"FOLLOW\",\"FOLLOWING\",\"FOOD\",\"FOOT\",\"FOOTBALL\",\"FOR\",\"FORCE\",\"FOREIGN\",\"FOREST\",\"FORGET\",\"FORM\",\"FORMAL\",\"FORMER\",\"FORWARD\",\"FOUNDATION\",\"FREE\",\"FREEDOM\",\"FREQUENTLY\",\"FRESH\",\"FRIEND\",\"FROM\",\"FRONT\",\"FRUIT\",\"FUEL\",\"FULL\",\"FULLY\",\"FUNCTION\",\"FUND\",\"FUNNY\",\"FURTHER\",\"FUTURE\",\"GAIN\",\"GAME\",\"GARDEN\",\"GAS\",\"GATE\",\"GATHER\",\"GENERAL\",\"GENERALLY\",\"GENERATE\",\"GENERATION\",\"GENTLEMAN\",\"GET\",\"GIRL\",\"GIVE\",\"GLASS\",\"GO\",\"GOAL\",\"GOD\",\"GOLD\",\"GOOD\",\"GOVERNMENT\",\"GRANT\",\"GREAT\",\"GREEN\",\"GREY\",\"GROUND\",\"GROUP\",\"GROW\",\"GROWING\",\"GROWTH\",\"GUEST\",\"GUIDE\",\"GUN\",\"HAIR\",\"HALF\",\"HALL\",\"HAND\",\"HANDLE\",\"HANG\",\"HAPPEN\",\"HAPPY\",\"HARD\",\"HARDLY\",\"HATE\",\"HAVE\",\"HE\",\"HEAD\",\"HEALTH\",\"HEAR\",\"HEART\",\"HEAT\",\"HEAVY\",\"HELL\",\"HELP\",\"HENCE\",\"HER\",\"HERE\",\"HERSELF\",\"HIDE\",\"HIGH\",\"HIGHLY\",\"HILL\",\"HIM\",\"HIMSELF\",\"HIS\",\"HISTORICAL\",\"HISTORY\",\"HIT\",\"HOLD\",\"HOLE\",\"HOLIDAY\",\"HOME\",\"HOPE\",\"HORSE\",\"HOSPITAL\",\"HOT\",\"HOTEL\",\"HOUR\",\"HOUSE\",\"HOUSEHOLD\",\"HOUSING\",\"HOW\",\"HOWEVER\",\"HUGE\",\"HUMAN\",\"HURT\",\"HUSBAND\",\"I\",\"IDEA\",\"IDENTIFY\",\"IF\",\"IGNORE\",\"ILLUSTRATE\",\"IMAGE\",\"IMAGINE\",\"IMMEDIATE\",\"IMMEDIATELY\",\"IMPACT\",\"IMPLICATION\",\"IMPLY\",\"IMPORTANCE\",\"IMPORTANT\",\"IMPOSE\",\"IMPOSSIBLE\",\"IMPRESSION\",\"IMPROVE\",\"IMPROVEMENT\",\"IN\",\"INCIDENT\",\"INCLUDE\",\"INCLUDING\",\"INCOME\",\"INCREASE\",\"INCREASED\",\"INCREASINGLY\",\"INDEED\",\"INDEPENDENT\",\"INDEX\",\"INDICATE\",\"INDIVIDUAL\",\"INDUSTRIAL\",\"INDUSTRY\",\"INFLUENCE\",\"INFORM\",\"INFORMATION\",\"INITIAL\",\"INITIATIVE\",\"INJURY\",\"INSIDE\",\"INSIST\",\"INSTANCE\",\"INSTEAD\",\"INSTITUTE\",\"INSTITUTION\",\"INSTRUCTION\",\"INSTRUMENT\",\"INSURANCE\",\"INTEND\",\"INTENTION\",\"INTEREST\",\"INTERESTED\",\"INTERESTING\",\"INTERNAL\",\"INTERNATIONAL\",\"INTERPRETATION\",\"INTERVIEW\",\"INTO\",\"INTRODUCE\",\"INTRODUCTION\",\"INVESTIGATE\",\"INVESTIGATION\",\"INVESTMENT\",\"INVITE\",\"INVOLVE\",\"IRON\",\"IS\",\"ISLAND\",\"ISSUE\",\"IT\",\"ITEM\",\"ITS\",\"ITSELF\",\"JOB\",\"JOIN\",\"JOINT\",\"JOURNEY\",\"JUDGE\",\"JUMP\",\"JUST\",\"JUSTICE\",\"KEEP\",\"KEY\",\"KID\",\"KILL\",\"KIND\",\"KING\",\"KITCHEN\",\"KNEE\",\"KNOW\",\"KNOWLEDGE\",\"LABOUR\",\"LACK\",\"LADY\",\"LAND\",\"LANGUAGE\",\"LARGE\",\"LARGELY\",\"LAST\",\"LATE\",\"LATER\",\"LATTER\",\"LAUGH\",\"LAUNCH\",\"LAW\",\"LAWYER\",\"LAY\",\"LEAD\",\"LEADER\",\"LEADERSHIP\",\"LEADING\",\"LEAF\",\"LEAGUE\",\"LEAN\",\"LEARN\",\"LEAST\",\"LEAVE\",\"LEFT\",\"LEG\",\"LEGAL\",\"LEGISLATION\",\"LENGTH\",\"LESS\",\"LET\",\"LETTER\",\"LEVEL\",\"LIABILITY\",\"LIBERAL\",\"LIBRARY\",\"LIE\",\"LIFE\",\"LIFT\",\"LIGHT\",\"LIKE\",\"LIKELY\",\"LIMIT\",\"LIMITED\",\"LINE\",\"LINK\",\"LIP\",\"LIST\",\"LISTEN\",\"LITERATURE\",\"LITTLE\",\"LIVE\",\"LIVING\",\"LOAN\",\"LOCAL\",\"LOCATION\",\"LONG\",\"LOOK\",\"LORD\",\"LOSE\",\"LOSS\",\"LOT\",\"LOVE\",\"LOVELY\",\"LOW\",\"LUNCH\",\"MACHINE\",\"MAGAZINE\",\"MAIN\",\"MAINLY\",\"MAINTAIN\",\"MAJOR\",\"MAJORITY\",\"MAKE\",\"MALE\",\"MAN\",\"MANAGE\",\"MANAGEMENT\",\"MANAGER\",\"MANNER\",\"MANY\",\"MAP\",\"MARK\",\"MARKET\",\"MARRIAGE\",\"MARRIED\",\"MARRY\",\"MASS\",\"MASTER\",\"MATCH\",\"MATERIAL\",\"MATTER\",\"MAY\",\"MAYBE\",\"ME\",\"MEAL\",\"MEAN\",\"MEANING\",\"MEANS\",\"MEANWHILE\",\"MEASURE\",\"MECHANISM\",\"MEDIA\",\"MEDICAL\",\"MEET\",\"MEETING\",\"MEMBER\",\"MEMBERSHIP\",\"MEMORY\",\"MENTAL\",\"MENTION\",\"MERELY\",\"MESSAGE\",\"METAL\",\"METHOD\",\"MIDDLE\",\"MIGHT\",\"MILE\",\"MILITARY\",\"MILK\",\"MIND\",\"MINE\",\"MINISTER\",\"MINISTRY\",\"MINUTE\",\"MISS\",\"MISTAKE\",\"MODEL\",\"MODERN\",\"MODULE\",\"MOMENT\",\"MONEY\",\"MONTH\",\"MORE\",\"MORNING\",\"MOST\",\"MOTHER\",\"MOTION\",\"MOTOR\",\"MOUNTAIN\",\"MOUTH\",\"MOVE\",\"MOVEMENT\",\"MUCH\",\"MURDER\",\"MUSEUM\",\"MUSIC\",\"MUST\",\"MY\",\"MYSELF\",\"NAME\",\"NARROW\",\"NATION\",\"NATIONAL\",\"NATURAL\",\"NATURE\",\"NEAR\",\"NEARLY\",\"NECESSARILY\",\"NECESSARY\",\"NECK\",\"NEED\",\"NEGOTIATION\",\"NEIGHBOUR\",\"NEITHER\",\"NETWORK\",\"NEVER\",\"NEVERTHELESS\",\"NEW\",\"NEWS\",\"NEWSPAPER\",\"NEXT\",\"NICE\",\"NIGHT\",\"NO\",\"NOBODY\",\"NOD\",\"NOISE\",\"NONE\",\"NOR\",\"NORMAL\",\"NORMALLY\",\"NORTH\",\"NORTHERN\",\"NOSE\",\"NOT\",\"NOTE\",\"NOTHING\",\"NOTICE\",\"NOTION\",\"NOW\",\"NUCLEAR\",\"NUMBER\",\"NURSE\",\"OBJECT\",\"OBJECTIVE\",\"OBSERVATION\",\"OBSERVE\",\"OBTAIN\",\"OBVIOUS\",\"OBVIOUSLY\",\"OCCASION\",\"OCCUR\",\"ODD\",\"OF\",\"OFF\",\"OFFENCE\",\"OFFER\",\"OFFICE\",\"OFFICER\",\"OFFICIAL\",\"OFTEN\",\"OIL\",\"OKAY\",\"OLD\",\"ON\",\"ONCE\",\"ONE\",\"ONLY\",\"ONTO\",\"OPEN\",\"OPERATE\",\"OPERATION\",\"OPINION\",\"OPPORTUNITY\",\"OPPOSITION\",\"OPTION\",\"OR\",\"ORDER\",\"ORDINARY\",\"ORGANISATION\",\"ORGANISE\",\"ORGANIZATION\",\"ORIGIN\",\"ORIGINAL\",\"OTHER\",\"OTHERWISE\",\"OUGHT\",\"OUR\",\"OURSELVES\",\"OUT\",\"OUTCOME\",\"OUTPUT\",\"OUTSIDE\",\"OVER\",\"OVERALL\",\"OWN\",\"OWNER\",\"PACKAGE\",\"PAGE\",\"PAIN\",\"PAINT\",\"PAINTING\",\"PAIR\",\"PANEL\",\"PAPER\",\"PARENT\",\"PARK\",\"PARLIAMENT\",\"PART\",\"PARTICULAR\",\"PARTICULARLY\",\"PARTLY\",\"PARTNER\",\"PARTY\",\"PASS\",\"PASSAGE\",\"PAST\",\"PATH\",\"PATIENT\",\"PATTERN\",\"PAY\",\"PAYMENT\",\"PEACE\",\"PENSION\",\"PEOPLE\",\"PER\",\"PERCENT\",\"PERFECT\",\"PERFORM\",\"PERFORMANCE\",\"PERHAPS\",\"PERIOD\",\"PERMANENT\",\"PERSON\",\"PERSONAL\",\"PERSUADE\",\"PHASE\",\"PHONE\",\"PHOTOGRAPH\",\"PHYSICAL\",\"PICK\",\"PICTURE\",\"PIECE\",\"PLACE\",\"PLAN\",\"PLANNING\",\"PLANT\",\"PLASTIC\",\"PLATE\",\"PLAY\",\"PLAYER\",\"PLEASE\",\"PLEASURE\",\"PLENTY\",\"PLUS\",\"POCKET\",\"POINT\",\"POLICE\",\"POLICY\",\"POLITICAL\",\"POLITICS\",\"POOL\",\"POOR\",\"POPULAR\",\"POPULATION\",\"POSITION\",\"POSITIVE\",\"POSSIBILITY\",\"POSSIBLE\",\"POSSIBLY\",\"POST\",\"POTENTIAL\",\"POUND\",\"POWER\",\"POWERFUL\",\"PRACTICAL\",\"PRACTICE\",\"PREFER\",\"PREPARE\",\"PRESENCE\",\"PRESENT\",\"PRESIDENT\",\"PRESS\",\"PRESSURE\",\"PRETTY\",\"PREVENT\",\"PREVIOUS\",\"PREVIOUSLY\",\"PRICE\",\"PRIMARY\",\"PRIME\",\"PRINCIPLE\",\"PRIORITY\",\"PRISON\",\"PRISONER\",\"PRIVATE\",\"PROBABLY\",\"PROBLEM\",\"PROCEDURE\",\"PROCESS\",\"PRODUCE\",\"PRODUCT\",\"PRODUCTION\",\"PROFESSIONAL\",\"PROFIT\",\"PROGRAM\",\"PROGRAMME\",\"PROGRESS\",\"PROJECT\",\"PROMISE\",\"PROMOTE\",\"PROPER\",\"PROPERLY\",\"PROPERTY\",\"PROPORTION\",\"PROPOSE\",\"PROPOSAL\",\"PROSPECT\",\"PROTECT\",\"PROTECTION\",\"PROVE\",\"PROVIDE\",\"PROVIDED\",\"PROVISION\",\"PUB\",\"PUBLIC\",\"PUBLICATION\",\"PUBLISH\",\"PULL\",\"PUPIL\",\"PURPOSE\",\"PUSH\",\"PUT\",\"QUALITY\",\"QUARTER\",\"QUESTION\",\"QUICK\",\"QUICKLY\",\"QUIET\",\"QUITE\",\"RACE\",\"RADIO\",\"RAILWAY\",\"RAIN\",\"RAISE\",\"RANGE\",\"RAPIDLY\",\"RARE\",\"RATE\",\"RATHER\",\"REACH\",\"REACTION\",\"READ\",\"READER\",\"READING\",\"READY\",\"REAL\",\"REALISE\",\"REALITY\",\"REALIZE\",\"REALLY\",\"REASON\",\"REASONABLE\",\"RECALL\",\"RECEIVE\",\"RECENT\",\"RECENTLY\",\"RECOGNISE\",\"RECOGNITION\",\"RECOGNIZE\",\"RECOMMEND\",\"RECORD\",\"RECOVER\",\"RED\",\"REDUCE\",\"REDUCTION\",\"REFER\",\"REFERENCE\",\"REFLECT\",\"REFORM\",\"REFUSE\",\"REGARD\",\"REGION\",\"REGIONAL\",\"REGULAR\",\"REGULATION\",\"REJECT\",\"RELATE\",\"RELATION\",\"RELATIONSHIP\",\"RELATIVE\",\"RELATIVELY\",\"RELEASE\",\"RELEVANT\",\"RELIEF\",\"RELIGION\",\"RELIGIOUS\",\"RELY\",\"REMAIN\",\"REMEMBER\",\"REMIND\",\"REMOVE\",\"REPEAT\",\"REPLACE\",\"REPLY\",\"REPORT\",\"REPRESENT\",\"REPRESENTATION\",\"REPRESENTATIVE\",\"REQUEST\",\"REQUIRE\",\"REQUIREMENT\",\"RESEARCH\",\"RESOURCE\",\"RESPECT\",\"RESPOND\",\"RESPONSE\",\"RESPONSIBILITY\",\"RESPONSIBLE\",\"REST\",\"RESTAURANT\",\"RESULT\",\"RETAIN\",\"RETURN\",\"REVEAL\",\"REVENUE\",\"REVIEW\",\"REVOLUTION\",\"RICH\",\"RIDE\",\"RIGHT\",\"RING\",\"RISE\",\"RISK\",\"RIVER\",\"ROAD\",\"ROCK\",\"ROLE\",\"ROLL\",\"ROOF\",\"ROOM\",\"ROUND\",\"ROUTE\",\"ROW\",\"ROYAL\",\"RULE\",\"RUN\",\"RURAL\",\"SAFE\",\"SAFETY\",\"SALE\",\"SAME\",\"SAMPLE\",\"SATISFY\",\"SAVE\",\"SAY\",\"SCALE\",\"SCENE\",\"SCHEME\",\"SCHOOL\",\"SCIENCE\",\"SCIENTIFIC\",\"SCIENTIST\",\"SCORE\",\"SCREEN\",\"SEA\",\"SEARCH\",\"SEASON\",\"SEAT\",\"SECOND\",\"SECONDARY\",\"SECRETARY\",\"SECTION\",\"SECTOR\",\"SECURE\",\"SECURITY\",\"SEE\",\"SEEK\",\"SEEM\",\"SELECT\",\"SELECTION\",\"SELL\",\"SEND\",\"SENIOR\",\"SENSE\",\"SENTENCE\",\"SEPARATE\",\"SEQUENCE\",\"SERIES\",\"SERIOUS\",\"SERIOUSLY\",\"SERVANT\",\"SERVE\",\"SERVICE\",\"SESSION\",\"SET\",\"SETTLE\",\"SETTLEMENT\",\"SEVERAL\",\"SEVERE\",\"SEX\",\"SEXUAL\",\"SHAKE\",\"SHALL\",\"SHAPE\",\"SHARE\",\"SHE\",\"SHEET\",\"SHIP\",\"SHOE\",\"SHOOT\",\"SHOP\",\"SHORT\",\"SHOT\",\"SHOULD\",\"SHOULDER\",\"SHOUT\",\"SHOW\",\"SHUT\",\"SIDE\",\"SIGHT\",\"SIGN\",\"SIGNAL\",\"SIGNIFICANCE\",\"SIGNIFICANT\",\"SILENCE\",\"SIMILAR\",\"SIMPLE\",\"SIMPLY\",\"SINCE\",\"SING\",\"SINGLE\",\"SIR\",\"SISTER\",\"SIT\",\"SITE\",\"SITUATION\",\"SIZE\",\"SKILL\",\"SKIN\",\"SKY\",\"SLEEP\",\"SLIGHTLY\",\"SLIP\",\"SLOW\",\"SLOWLY\",\"SMALL\",\"SMILE\",\"SO\",\"SOCIAL\",\"SOCIETY\",\"SOFT\",\"SOFTWARE\",\"SOIL\",\"SOLDIER\",\"SOLICITOR\",\"SOLUTION\",\"SOME\",\"SOMEBODY\",\"SOMEONE\",\"SOMETHING\",\"SOMETIMES\",\"SOMEWHAT\",\"SOMEWHERE\",\"SON\",\"SONG\",\"SOON\",\"SORRY\",\"SORT\",\"SOUND\",\"SOURCE\",\"SOUTH\",\"SOUTHERN\",\"SPACE\",\"SPEAK\",\"SPEAKER\",\"SPECIAL\",\"SPECIES\",\"SPECIFIC\",\"SPEECH\",\"SPEED\",\"SPEND\",\"SPIRIT\",\"SPORT\",\"SPOT\",\"SPREAD\",\"SPRING\",\"STAFF\",\"STAGE\",\"STAND\",\"STANDARD\",\"STAR\",\"START\",\"STATE\",\"STATEMENT\",\"STATION\",\"STATUS\",\"STAY\",\"STEAL\",\"STEP\",\"STICK\",\"STILL\",\"STOCK\",\"STONE\",\"STOP\",\"STORE\",\"STORY\",\"STRAIGHT\",\"STRANGE\",\"STRATEGY\",\"STREET\",\"STRENGTH\",\"STRIKE\",\"STRONG\",\"STRONGLY\",\"STRUCTURE\",\"STUDENT\",\"STUDIO\",\"STUDY\",\"STUFF\",\"STYLE\",\"SUBJECT\",\"SUBSTANTIAL\",\"SUCCEED\",\"SUCCESS\",\"SUCCESSFUL\",\"SUCH\",\"SUDDENLY\",\"SUFFER\",\"SUFFICIENT\",\"SUGGEST\",\"SUGGESTION\",\"SUITABLE\",\"SUM\",\"SUMMER\",\"SUN\",\"SUPPLY\",\"SUPPORT\",\"SUPPOSE\",\"SURE\",\"SURELY\",\"SURFACE\",\"SURPRISE\",\"SURROUND\",\"SURVEY\",\"SURVIVE\",\"SWITCH\",\"SYSTEM\",\"TABLE\",\"TAKE\",\"TALK\",\"TALL\",\"TAPE\",\"TARGET\",\"TASK\",\"TAX\",\"TEA\",\"TEACH\",\"TEACHER\",\"TEACHING\",\"TEAM\",\"TEAR\",\"TECHNICAL\",\"TECHNIQUE\",\"TECHNOLOGY\",\"TELEPHONE\",\"TELEVISION\",\"TELL\",\"TEMPERATURE\",\"TEND\",\"TERM\",\"TERMS\",\"TERRIBLE\",\"TEST\",\"TEXT\",\"THAN\",\"THANK\",\"THANKS\",\"THAT\",\"THE\",\"THEATRE\",\"THEIR\",\"THEM\",\"THEME\",\"THEMSELVES\",\"THEN\",\"THEORY\",\"THERE\",\"THEREFORE\",\"THESE\",\"THEY\",\"THIN\",\"THING\",\"THINK\",\"THIS\",\"THOSE\",\"THOUGH\",\"THOUGHT\",\"THREAT\",\"THREATEN\",\"THROUGH\",\"THROUGHOUT\",\"THROW\",\"THUS\",\"TICKET\",\"TIME\",\"TINY\",\"TITLE\",\"TO\",\"TODAY\",\"TOGETHER\",\"TOMORROW\",\"TONE\",\"TONIGHT\",\"TOO\",\"TOOL\",\"TOOTH\",\"TOP\",\"TOTAL\",\"TOTALLY\",\"TOUCH\",\"TOUR\",\"TOWARDS\",\"TOWN\",\"TRACK\",\"TRADE\",\"TRADITION\",\"TRADITIONAL\",\"TRAFFIC\",\"TRAIN\",\"TRAINING\",\"TRANSFER\",\"TRANSPORT\",\"TRAVEL\",\"TREAT\",\"TREATMENT\",\"TREATY\",\"TREE\",\"TREND\",\"TRIAL\",\"TRIP\",\"TROOP\",\"TROUBLE\",\"TRUE\",\"TRUST\",\"TRUTH\",\"TRY\",\"TURN\",\"TWICE\",\"TYPE\",\"TYPICAL\",\"UNABLE\",\"UNDER\",\"UNDERSTAND\",\"UNDERSTANDING\",\"UNDERTAKE\",\"UNEMPLOYMENT\",\"UNFORTUNATELY\",\"UNION\",\"UNIT\",\"UNITED\",\"UNIVERSITY\",\"UNLESS\",\"UNLIKELY\",\"UNTIL\",\"UP\",\"UPON\",\"UPPER\",\"URBAN\",\"US\",\"USE\",\"USED\",\"USEFUL\",\"USER\",\"USUAL\",\"USUALLY\",\"VALUE\",\"VARIATION\",\"VARIETY\",\"VARIOUS\",\"VARY\",\"VAST\",\"VEHICLE\",\"VERSION\",\"VERY\",\"VIA\",\"VICTIM\",\"VICTORY\",\"VIDEO\",\"VIEW\",\"VILLAGE\",\"VIOLENCE\",\"VISION\",\"VISIT\",\"VISITOR\",\"VITAL\",\"VOICE\",\"VOLUME\",\"VOTE\",\"WAGE\",\"WAIT\",\"WALK\",\"WALL\",\"WANT\",\"WAR\",\"WARM\",\"WARN\",\"WASH\",\"WATCH\",\"WATER\",\"WAVE\",\"WAY\",\"WE\",\"WEAK\",\"WEAPON\",\"WEAR\",\"WEATHER\",\"WEEK\",\"WEEKEND\",\"WEIGHT\",\"WELCOME\",\"WELFARE\",\"WELL\",\"WEST\",\"WESTERN\",\"WHAT\",\"WHATEVER\",\"WHEN\",\"WHERE\",\"WHEREAS\",\"WHETHER\",\"WHICH\",\"WHILE\",\"WHILST\",\"WHITE\",\"WHO\",\"WHOLE\",\"WHOM\",\"WHOSE\",\"WHY\",\"WIDE\",\"WIDELY\",\"WIFE\",\"WILD\",\"WILL\",\"WIN\",\"WIND\",\"WINDOW\",\"WINE\",\"WING\",\"WINNER\",\"WINTER\",\"WISH\",\"WITH\",\"WITHDRAW\",\"WITHIN\",\"WITHOUT\",\"WOMAN\",\"WONDER\",\"WONDERFUL\",\"WOOD\",\"WORD\",\"WORK\",\"WORKER\",\"WORKING\",\"WORKS\",\"WORLD\",\"WORRY\",\"WORTH\",\"WOULD\",\"WRITE\",\"WRITER\",\"WRITING\",\"WRONG\",\"YARD\",\"YEAH\",\"YEAR\",\"YES\",\"YESTERDAY\",\"YET\",\"YOU\",\"YOUNG\",\"YOUR\",\"YOURSELF\",\"YOUTH\"]\n\nnewlist = []\nfor j in range(1,1000): #precomputing the values and appending into a list\n    newlist.append((j*(j+1))/2)\n\ntot=0 #this will be our final answer below\nfor i in list:\n    summ = 0\n    for j in i:\n        summ = summ + (ord(str(j))-64)\n    if summ in newlist:\n        tot = tot + 1\nprint(tot)\n"
  },
  {
    "path": "Problem042/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=42)\n"
  },
  {
    "path": "Problem042/p042_words.txt",
    "content": "\"A\",\"ABILITY\",\"ABLE\",\"ABOUT\",\"ABOVE\",\"ABSENCE\",\"ABSOLUTELY\",\"ACADEMIC\",\"ACCEPT\",\"ACCESS\",\"ACCIDENT\",\"ACCOMPANY\",\"ACCORDING\",\"ACCOUNT\",\"ACHIEVE\",\"ACHIEVEMENT\",\"ACID\",\"ACQUIRE\",\"ACROSS\",\"ACT\",\"ACTION\",\"ACTIVE\",\"ACTIVITY\",\"ACTUAL\",\"ACTUALLY\",\"ADD\",\"ADDITION\",\"ADDITIONAL\",\"ADDRESS\",\"ADMINISTRATION\",\"ADMIT\",\"ADOPT\",\"ADULT\",\"ADVANCE\",\"ADVANTAGE\",\"ADVICE\",\"ADVISE\",\"AFFAIR\",\"AFFECT\",\"AFFORD\",\"AFRAID\",\"AFTER\",\"AFTERNOON\",\"AFTERWARDS\",\"AGAIN\",\"AGAINST\",\"AGE\",\"AGENCY\",\"AGENT\",\"AGO\",\"AGREE\",\"AGREEMENT\",\"AHEAD\",\"AID\",\"AIM\",\"AIR\",\"AIRCRAFT\",\"ALL\",\"ALLOW\",\"ALMOST\",\"ALONE\",\"ALONG\",\"ALREADY\",\"ALRIGHT\",\"ALSO\",\"ALTERNATIVE\",\"ALTHOUGH\",\"ALWAYS\",\"AMONG\",\"AMONGST\",\"AMOUNT\",\"AN\",\"ANALYSIS\",\"ANCIENT\",\"AND\",\"ANIMAL\",\"ANNOUNCE\",\"ANNUAL\",\"ANOTHER\",\"ANSWER\",\"ANY\",\"ANYBODY\",\"ANYONE\",\"ANYTHING\",\"ANYWAY\",\"APART\",\"APPARENT\",\"APPARENTLY\",\"APPEAL\",\"APPEAR\",\"APPEARANCE\",\"APPLICATION\",\"APPLY\",\"APPOINT\",\"APPOINTMENT\",\"APPROACH\",\"APPROPRIATE\",\"APPROVE\",\"AREA\",\"ARGUE\",\"ARGUMENT\",\"ARISE\",\"ARM\",\"ARMY\",\"AROUND\",\"ARRANGE\",\"ARRANGEMENT\",\"ARRIVE\",\"ART\",\"ARTICLE\",\"ARTIST\",\"AS\",\"ASK\",\"ASPECT\",\"ASSEMBLY\",\"ASSESS\",\"ASSESSMENT\",\"ASSET\",\"ASSOCIATE\",\"ASSOCIATION\",\"ASSUME\",\"ASSUMPTION\",\"AT\",\"ATMOSPHERE\",\"ATTACH\",\"ATTACK\",\"ATTEMPT\",\"ATTEND\",\"ATTENTION\",\"ATTITUDE\",\"ATTRACT\",\"ATTRACTIVE\",\"AUDIENCE\",\"AUTHOR\",\"AUTHORITY\",\"AVAILABLE\",\"AVERAGE\",\"AVOID\",\"AWARD\",\"AWARE\",\"AWAY\",\"AYE\",\"BABY\",\"BACK\",\"BACKGROUND\",\"BAD\",\"BAG\",\"BALANCE\",\"BALL\",\"BAND\",\"BANK\",\"BAR\",\"BASE\",\"BASIC\",\"BASIS\",\"BATTLE\",\"BE\",\"BEAR\",\"BEAT\",\"BEAUTIFUL\",\"BECAUSE\",\"BECOME\",\"BED\",\"BEDROOM\",\"BEFORE\",\"BEGIN\",\"BEGINNING\",\"BEHAVIOUR\",\"BEHIND\",\"BELIEF\",\"BELIEVE\",\"BELONG\",\"BELOW\",\"BENEATH\",\"BENEFIT\",\"BESIDE\",\"BEST\",\"BETTER\",\"BETWEEN\",\"BEYOND\",\"BIG\",\"BILL\",\"BIND\",\"BIRD\",\"BIRTH\",\"BIT\",\"BLACK\",\"BLOCK\",\"BLOOD\",\"BLOODY\",\"BLOW\",\"BLUE\",\"BOARD\",\"BOAT\",\"BODY\",\"BONE\",\"BOOK\",\"BORDER\",\"BOTH\",\"BOTTLE\",\"BOTTOM\",\"BOX\",\"BOY\",\"BRAIN\",\"BRANCH\",\"BREAK\",\"BREATH\",\"BRIDGE\",\"BRIEF\",\"BRIGHT\",\"BRING\",\"BROAD\",\"BROTHER\",\"BUDGET\",\"BUILD\",\"BUILDING\",\"BURN\",\"BUS\",\"BUSINESS\",\"BUSY\",\"BUT\",\"BUY\",\"BY\",\"CABINET\",\"CALL\",\"CAMPAIGN\",\"CAN\",\"CANDIDATE\",\"CAPABLE\",\"CAPACITY\",\"CAPITAL\",\"CAR\",\"CARD\",\"CARE\",\"CAREER\",\"CAREFUL\",\"CAREFULLY\",\"CARRY\",\"CASE\",\"CASH\",\"CAT\",\"CATCH\",\"CATEGORY\",\"CAUSE\",\"CELL\",\"CENTRAL\",\"CENTRE\",\"CENTURY\",\"CERTAIN\",\"CERTAINLY\",\"CHAIN\",\"CHAIR\",\"CHAIRMAN\",\"CHALLENGE\",\"CHANCE\",\"CHANGE\",\"CHANNEL\",\"CHAPTER\",\"CHARACTER\",\"CHARACTERISTIC\",\"CHARGE\",\"CHEAP\",\"CHECK\",\"CHEMICAL\",\"CHIEF\",\"CHILD\",\"CHOICE\",\"CHOOSE\",\"CHURCH\",\"CIRCLE\",\"CIRCUMSTANCE\",\"CITIZEN\",\"CITY\",\"CIVIL\",\"CLAIM\",\"CLASS\",\"CLEAN\",\"CLEAR\",\"CLEARLY\",\"CLIENT\",\"CLIMB\",\"CLOSE\",\"CLOSELY\",\"CLOTHES\",\"CLUB\",\"COAL\",\"CODE\",\"COFFEE\",\"COLD\",\"COLLEAGUE\",\"COLLECT\",\"COLLECTION\",\"COLLEGE\",\"COLOUR\",\"COMBINATION\",\"COMBINE\",\"COME\",\"COMMENT\",\"COMMERCIAL\",\"COMMISSION\",\"COMMIT\",\"COMMITMENT\",\"COMMITTEE\",\"COMMON\",\"COMMUNICATION\",\"COMMUNITY\",\"COMPANY\",\"COMPARE\",\"COMPARISON\",\"COMPETITION\",\"COMPLETE\",\"COMPLETELY\",\"COMPLEX\",\"COMPONENT\",\"COMPUTER\",\"CONCENTRATE\",\"CONCENTRATION\",\"CONCEPT\",\"CONCERN\",\"CONCERNED\",\"CONCLUDE\",\"CONCLUSION\",\"CONDITION\",\"CONDUCT\",\"CONFERENCE\",\"CONFIDENCE\",\"CONFIRM\",\"CONFLICT\",\"CONGRESS\",\"CONNECT\",\"CONNECTION\",\"CONSEQUENCE\",\"CONSERVATIVE\",\"CONSIDER\",\"CONSIDERABLE\",\"CONSIDERATION\",\"CONSIST\",\"CONSTANT\",\"CONSTRUCTION\",\"CONSUMER\",\"CONTACT\",\"CONTAIN\",\"CONTENT\",\"CONTEXT\",\"CONTINUE\",\"CONTRACT\",\"CONTRAST\",\"CONTRIBUTE\",\"CONTRIBUTION\",\"CONTROL\",\"CONVENTION\",\"CONVERSATION\",\"COPY\",\"CORNER\",\"CORPORATE\",\"CORRECT\",\"COS\",\"COST\",\"COULD\",\"COUNCIL\",\"COUNT\",\"COUNTRY\",\"COUNTY\",\"COUPLE\",\"COURSE\",\"COURT\",\"COVER\",\"CREATE\",\"CREATION\",\"CREDIT\",\"CRIME\",\"CRIMINAL\",\"CRISIS\",\"CRITERION\",\"CRITICAL\",\"CRITICISM\",\"CROSS\",\"CROWD\",\"CRY\",\"CULTURAL\",\"CULTURE\",\"CUP\",\"CURRENT\",\"CURRENTLY\",\"CURRICULUM\",\"CUSTOMER\",\"CUT\",\"DAMAGE\",\"DANGER\",\"DANGEROUS\",\"DARK\",\"DATA\",\"DATE\",\"DAUGHTER\",\"DAY\",\"DEAD\",\"DEAL\",\"DEATH\",\"DEBATE\",\"DEBT\",\"DECADE\",\"DECIDE\",\"DECISION\",\"DECLARE\",\"DEEP\",\"DEFENCE\",\"DEFENDANT\",\"DEFINE\",\"DEFINITION\",\"DEGREE\",\"DELIVER\",\"DEMAND\",\"DEMOCRATIC\",\"DEMONSTRATE\",\"DENY\",\"DEPARTMENT\",\"DEPEND\",\"DEPUTY\",\"DERIVE\",\"DESCRIBE\",\"DESCRIPTION\",\"DESIGN\",\"DESIRE\",\"DESK\",\"DESPITE\",\"DESTROY\",\"DETAIL\",\"DETAILED\",\"DETERMINE\",\"DEVELOP\",\"DEVELOPMENT\",\"DEVICE\",\"DIE\",\"DIFFERENCE\",\"DIFFERENT\",\"DIFFICULT\",\"DIFFICULTY\",\"DINNER\",\"DIRECT\",\"DIRECTION\",\"DIRECTLY\",\"DIRECTOR\",\"DISAPPEAR\",\"DISCIPLINE\",\"DISCOVER\",\"DISCUSS\",\"DISCUSSION\",\"DISEASE\",\"DISPLAY\",\"DISTANCE\",\"DISTINCTION\",\"DISTRIBUTION\",\"DISTRICT\",\"DIVIDE\",\"DIVISION\",\"DO\",\"DOCTOR\",\"DOCUMENT\",\"DOG\",\"DOMESTIC\",\"DOOR\",\"DOUBLE\",\"DOUBT\",\"DOWN\",\"DRAW\",\"DRAWING\",\"DREAM\",\"DRESS\",\"DRINK\",\"DRIVE\",\"DRIVER\",\"DROP\",\"DRUG\",\"DRY\",\"DUE\",\"DURING\",\"DUTY\",\"EACH\",\"EAR\",\"EARLY\",\"EARN\",\"EARTH\",\"EASILY\",\"EAST\",\"EASY\",\"EAT\",\"ECONOMIC\",\"ECONOMY\",\"EDGE\",\"EDITOR\",\"EDUCATION\",\"EDUCATIONAL\",\"EFFECT\",\"EFFECTIVE\",\"EFFECTIVELY\",\"EFFORT\",\"EGG\",\"EITHER\",\"ELDERLY\",\"ELECTION\",\"ELEMENT\",\"ELSE\",\"ELSEWHERE\",\"EMERGE\",\"EMPHASIS\",\"EMPLOY\",\"EMPLOYEE\",\"EMPLOYER\",\"EMPLOYMENT\",\"EMPTY\",\"ENABLE\",\"ENCOURAGE\",\"END\",\"ENEMY\",\"ENERGY\",\"ENGINE\",\"ENGINEERING\",\"ENJOY\",\"ENOUGH\",\"ENSURE\",\"ENTER\",\"ENTERPRISE\",\"ENTIRE\",\"ENTIRELY\",\"ENTITLE\",\"ENTRY\",\"ENVIRONMENT\",\"ENVIRONMENTAL\",\"EQUAL\",\"EQUALLY\",\"EQUIPMENT\",\"ERROR\",\"ESCAPE\",\"ESPECIALLY\",\"ESSENTIAL\",\"ESTABLISH\",\"ESTABLISHMENT\",\"ESTATE\",\"ESTIMATE\",\"EVEN\",\"EVENING\",\"EVENT\",\"EVENTUALLY\",\"EVER\",\"EVERY\",\"EVERYBODY\",\"EVERYONE\",\"EVERYTHING\",\"EVIDENCE\",\"EXACTLY\",\"EXAMINATION\",\"EXAMINE\",\"EXAMPLE\",\"EXCELLENT\",\"EXCEPT\",\"EXCHANGE\",\"EXECUTIVE\",\"EXERCISE\",\"EXHIBITION\",\"EXIST\",\"EXISTENCE\",\"EXISTING\",\"EXPECT\",\"EXPECTATION\",\"EXPENDITURE\",\"EXPENSE\",\"EXPENSIVE\",\"EXPERIENCE\",\"EXPERIMENT\",\"EXPERT\",\"EXPLAIN\",\"EXPLANATION\",\"EXPLORE\",\"EXPRESS\",\"EXPRESSION\",\"EXTEND\",\"EXTENT\",\"EXTERNAL\",\"EXTRA\",\"EXTREMELY\",\"EYE\",\"FACE\",\"FACILITY\",\"FACT\",\"FACTOR\",\"FACTORY\",\"FAIL\",\"FAILURE\",\"FAIR\",\"FAIRLY\",\"FAITH\",\"FALL\",\"FAMILIAR\",\"FAMILY\",\"FAMOUS\",\"FAR\",\"FARM\",\"FARMER\",\"FASHION\",\"FAST\",\"FATHER\",\"FAVOUR\",\"FEAR\",\"FEATURE\",\"FEE\",\"FEEL\",\"FEELING\",\"FEMALE\",\"FEW\",\"FIELD\",\"FIGHT\",\"FIGURE\",\"FILE\",\"FILL\",\"FILM\",\"FINAL\",\"FINALLY\",\"FINANCE\",\"FINANCIAL\",\"FIND\",\"FINDING\",\"FINE\",\"FINGER\",\"FINISH\",\"FIRE\",\"FIRM\",\"FIRST\",\"FISH\",\"FIT\",\"FIX\",\"FLAT\",\"FLIGHT\",\"FLOOR\",\"FLOW\",\"FLOWER\",\"FLY\",\"FOCUS\",\"FOLLOW\",\"FOLLOWING\",\"FOOD\",\"FOOT\",\"FOOTBALL\",\"FOR\",\"FORCE\",\"FOREIGN\",\"FOREST\",\"FORGET\",\"FORM\",\"FORMAL\",\"FORMER\",\"FORWARD\",\"FOUNDATION\",\"FREE\",\"FREEDOM\",\"FREQUENTLY\",\"FRESH\",\"FRIEND\",\"FROM\",\"FRONT\",\"FRUIT\",\"FUEL\",\"FULL\",\"FULLY\",\"FUNCTION\",\"FUND\",\"FUNNY\",\"FURTHER\",\"FUTURE\",\"GAIN\",\"GAME\",\"GARDEN\",\"GAS\",\"GATE\",\"GATHER\",\"GENERAL\",\"GENERALLY\",\"GENERATE\",\"GENERATION\",\"GENTLEMAN\",\"GET\",\"GIRL\",\"GIVE\",\"GLASS\",\"GO\",\"GOAL\",\"GOD\",\"GOLD\",\"GOOD\",\"GOVERNMENT\",\"GRANT\",\"GREAT\",\"GREEN\",\"GREY\",\"GROUND\",\"GROUP\",\"GROW\",\"GROWING\",\"GROWTH\",\"GUEST\",\"GUIDE\",\"GUN\",\"HAIR\",\"HALF\",\"HALL\",\"HAND\",\"HANDLE\",\"HANG\",\"HAPPEN\",\"HAPPY\",\"HARD\",\"HARDLY\",\"HATE\",\"HAVE\",\"HE\",\"HEAD\",\"HEALTH\",\"HEAR\",\"HEART\",\"HEAT\",\"HEAVY\",\"HELL\",\"HELP\",\"HENCE\",\"HER\",\"HERE\",\"HERSELF\",\"HIDE\",\"HIGH\",\"HIGHLY\",\"HILL\",\"HIM\",\"HIMSELF\",\"HIS\",\"HISTORICAL\",\"HISTORY\",\"HIT\",\"HOLD\",\"HOLE\",\"HOLIDAY\",\"HOME\",\"HOPE\",\"HORSE\",\"HOSPITAL\",\"HOT\",\"HOTEL\",\"HOUR\",\"HOUSE\",\"HOUSEHOLD\",\"HOUSING\",\"HOW\",\"HOWEVER\",\"HUGE\",\"HUMAN\",\"HURT\",\"HUSBAND\",\"I\",\"IDEA\",\"IDENTIFY\",\"IF\",\"IGNORE\",\"ILLUSTRATE\",\"IMAGE\",\"IMAGINE\",\"IMMEDIATE\",\"IMMEDIATELY\",\"IMPACT\",\"IMPLICATION\",\"IMPLY\",\"IMPORTANCE\",\"IMPORTANT\",\"IMPOSE\",\"IMPOSSIBLE\",\"IMPRESSION\",\"IMPROVE\",\"IMPROVEMENT\",\"IN\",\"INCIDENT\",\"INCLUDE\",\"INCLUDING\",\"INCOME\",\"INCREASE\",\"INCREASED\",\"INCREASINGLY\",\"INDEED\",\"INDEPENDENT\",\"INDEX\",\"INDICATE\",\"INDIVIDUAL\",\"INDUSTRIAL\",\"INDUSTRY\",\"INFLUENCE\",\"INFORM\",\"INFORMATION\",\"INITIAL\",\"INITIATIVE\",\"INJURY\",\"INSIDE\",\"INSIST\",\"INSTANCE\",\"INSTEAD\",\"INSTITUTE\",\"INSTITUTION\",\"INSTRUCTION\",\"INSTRUMENT\",\"INSURANCE\",\"INTEND\",\"INTENTION\",\"INTEREST\",\"INTERESTED\",\"INTERESTING\",\"INTERNAL\",\"INTERNATIONAL\",\"INTERPRETATION\",\"INTERVIEW\",\"INTO\",\"INTRODUCE\",\"INTRODUCTION\",\"INVESTIGATE\",\"INVESTIGATION\",\"INVESTMENT\",\"INVITE\",\"INVOLVE\",\"IRON\",\"IS\",\"ISLAND\",\"ISSUE\",\"IT\",\"ITEM\",\"ITS\",\"ITSELF\",\"JOB\",\"JOIN\",\"JOINT\",\"JOURNEY\",\"JUDGE\",\"JUMP\",\"JUST\",\"JUSTICE\",\"KEEP\",\"KEY\",\"KID\",\"KILL\",\"KIND\",\"KING\",\"KITCHEN\",\"KNEE\",\"KNOW\",\"KNOWLEDGE\",\"LABOUR\",\"LACK\",\"LADY\",\"LAND\",\"LANGUAGE\",\"LARGE\",\"LARGELY\",\"LAST\",\"LATE\",\"LATER\",\"LATTER\",\"LAUGH\",\"LAUNCH\",\"LAW\",\"LAWYER\",\"LAY\",\"LEAD\",\"LEADER\",\"LEADERSHIP\",\"LEADING\",\"LEAF\",\"LEAGUE\",\"LEAN\",\"LEARN\",\"LEAST\",\"LEAVE\",\"LEFT\",\"LEG\",\"LEGAL\",\"LEGISLATION\",\"LENGTH\",\"LESS\",\"LET\",\"LETTER\",\"LEVEL\",\"LIABILITY\",\"LIBERAL\",\"LIBRARY\",\"LIE\",\"LIFE\",\"LIFT\",\"LIGHT\",\"LIKE\",\"LIKELY\",\"LIMIT\",\"LIMITED\",\"LINE\",\"LINK\",\"LIP\",\"LIST\",\"LISTEN\",\"LITERATURE\",\"LITTLE\",\"LIVE\",\"LIVING\",\"LOAN\",\"LOCAL\",\"LOCATION\",\"LONG\",\"LOOK\",\"LORD\",\"LOSE\",\"LOSS\",\"LOT\",\"LOVE\",\"LOVELY\",\"LOW\",\"LUNCH\",\"MACHINE\",\"MAGAZINE\",\"MAIN\",\"MAINLY\",\"MAINTAIN\",\"MAJOR\",\"MAJORITY\",\"MAKE\",\"MALE\",\"MAN\",\"MANAGE\",\"MANAGEMENT\",\"MANAGER\",\"MANNER\",\"MANY\",\"MAP\",\"MARK\",\"MARKET\",\"MARRIAGE\",\"MARRIED\",\"MARRY\",\"MASS\",\"MASTER\",\"MATCH\",\"MATERIAL\",\"MATTER\",\"MAY\",\"MAYBE\",\"ME\",\"MEAL\",\"MEAN\",\"MEANING\",\"MEANS\",\"MEANWHILE\",\"MEASURE\",\"MECHANISM\",\"MEDIA\",\"MEDICAL\",\"MEET\",\"MEETING\",\"MEMBER\",\"MEMBERSHIP\",\"MEMORY\",\"MENTAL\",\"MENTION\",\"MERELY\",\"MESSAGE\",\"METAL\",\"METHOD\",\"MIDDLE\",\"MIGHT\",\"MILE\",\"MILITARY\",\"MILK\",\"MIND\",\"MINE\",\"MINISTER\",\"MINISTRY\",\"MINUTE\",\"MISS\",\"MISTAKE\",\"MODEL\",\"MODERN\",\"MODULE\",\"MOMENT\",\"MONEY\",\"MONTH\",\"MORE\",\"MORNING\",\"MOST\",\"MOTHER\",\"MOTION\",\"MOTOR\",\"MOUNTAIN\",\"MOUTH\",\"MOVE\",\"MOVEMENT\",\"MUCH\",\"MURDER\",\"MUSEUM\",\"MUSIC\",\"MUST\",\"MY\",\"MYSELF\",\"NAME\",\"NARROW\",\"NATION\",\"NATIONAL\",\"NATURAL\",\"NATURE\",\"NEAR\",\"NEARLY\",\"NECESSARILY\",\"NECESSARY\",\"NECK\",\"NEED\",\"NEGOTIATION\",\"NEIGHBOUR\",\"NEITHER\",\"NETWORK\",\"NEVER\",\"NEVERTHELESS\",\"NEW\",\"NEWS\",\"NEWSPAPER\",\"NEXT\",\"NICE\",\"NIGHT\",\"NO\",\"NOBODY\",\"NOD\",\"NOISE\",\"NONE\",\"NOR\",\"NORMAL\",\"NORMALLY\",\"NORTH\",\"NORTHERN\",\"NOSE\",\"NOT\",\"NOTE\",\"NOTHING\",\"NOTICE\",\"NOTION\",\"NOW\",\"NUCLEAR\",\"NUMBER\",\"NURSE\",\"OBJECT\",\"OBJECTIVE\",\"OBSERVATION\",\"OBSERVE\",\"OBTAIN\",\"OBVIOUS\",\"OBVIOUSLY\",\"OCCASION\",\"OCCUR\",\"ODD\",\"OF\",\"OFF\",\"OFFENCE\",\"OFFER\",\"OFFICE\",\"OFFICER\",\"OFFICIAL\",\"OFTEN\",\"OIL\",\"OKAY\",\"OLD\",\"ON\",\"ONCE\",\"ONE\",\"ONLY\",\"ONTO\",\"OPEN\",\"OPERATE\",\"OPERATION\",\"OPINION\",\"OPPORTUNITY\",\"OPPOSITION\",\"OPTION\",\"OR\",\"ORDER\",\"ORDINARY\",\"ORGANISATION\",\"ORGANISE\",\"ORGANIZATION\",\"ORIGIN\",\"ORIGINAL\",\"OTHER\",\"OTHERWISE\",\"OUGHT\",\"OUR\",\"OURSELVES\",\"OUT\",\"OUTCOME\",\"OUTPUT\",\"OUTSIDE\",\"OVER\",\"OVERALL\",\"OWN\",\"OWNER\",\"PACKAGE\",\"PAGE\",\"PAIN\",\"PAINT\",\"PAINTING\",\"PAIR\",\"PANEL\",\"PAPER\",\"PARENT\",\"PARK\",\"PARLIAMENT\",\"PART\",\"PARTICULAR\",\"PARTICULARLY\",\"PARTLY\",\"PARTNER\",\"PARTY\",\"PASS\",\"PASSAGE\",\"PAST\",\"PATH\",\"PATIENT\",\"PATTERN\",\"PAY\",\"PAYMENT\",\"PEACE\",\"PENSION\",\"PEOPLE\",\"PER\",\"PERCENT\",\"PERFECT\",\"PERFORM\",\"PERFORMANCE\",\"PERHAPS\",\"PERIOD\",\"PERMANENT\",\"PERSON\",\"PERSONAL\",\"PERSUADE\",\"PHASE\",\"PHONE\",\"PHOTOGRAPH\",\"PHYSICAL\",\"PICK\",\"PICTURE\",\"PIECE\",\"PLACE\",\"PLAN\",\"PLANNING\",\"PLANT\",\"PLASTIC\",\"PLATE\",\"PLAY\",\"PLAYER\",\"PLEASE\",\"PLEASURE\",\"PLENTY\",\"PLUS\",\"POCKET\",\"POINT\",\"POLICE\",\"POLICY\",\"POLITICAL\",\"POLITICS\",\"POOL\",\"POOR\",\"POPULAR\",\"POPULATION\",\"POSITION\",\"POSITIVE\",\"POSSIBILITY\",\"POSSIBLE\",\"POSSIBLY\",\"POST\",\"POTENTIAL\",\"POUND\",\"POWER\",\"POWERFUL\",\"PRACTICAL\",\"PRACTICE\",\"PREFER\",\"PREPARE\",\"PRESENCE\",\"PRESENT\",\"PRESIDENT\",\"PRESS\",\"PRESSURE\",\"PRETTY\",\"PREVENT\",\"PREVIOUS\",\"PREVIOUSLY\",\"PRICE\",\"PRIMARY\",\"PRIME\",\"PRINCIPLE\",\"PRIORITY\",\"PRISON\",\"PRISONER\",\"PRIVATE\",\"PROBABLY\",\"PROBLEM\",\"PROCEDURE\",\"PROCESS\",\"PRODUCE\",\"PRODUCT\",\"PRODUCTION\",\"PROFESSIONAL\",\"PROFIT\",\"PROGRAM\",\"PROGRAMME\",\"PROGRESS\",\"PROJECT\",\"PROMISE\",\"PROMOTE\",\"PROPER\",\"PROPERLY\",\"PROPERTY\",\"PROPORTION\",\"PROPOSE\",\"PROPOSAL\",\"PROSPECT\",\"PROTECT\",\"PROTECTION\",\"PROVE\",\"PROVIDE\",\"PROVIDED\",\"PROVISION\",\"PUB\",\"PUBLIC\",\"PUBLICATION\",\"PUBLISH\",\"PULL\",\"PUPIL\",\"PURPOSE\",\"PUSH\",\"PUT\",\"QUALITY\",\"QUARTER\",\"QUESTION\",\"QUICK\",\"QUICKLY\",\"QUIET\",\"QUITE\",\"RACE\",\"RADIO\",\"RAILWAY\",\"RAIN\",\"RAISE\",\"RANGE\",\"RAPIDLY\",\"RARE\",\"RATE\",\"RATHER\",\"REACH\",\"REACTION\",\"READ\",\"READER\",\"READING\",\"READY\",\"REAL\",\"REALISE\",\"REALITY\",\"REALIZE\",\"REALLY\",\"REASON\",\"REASONABLE\",\"RECALL\",\"RECEIVE\",\"RECENT\",\"RECENTLY\",\"RECOGNISE\",\"RECOGNITION\",\"RECOGNIZE\",\"RECOMMEND\",\"RECORD\",\"RECOVER\",\"RED\",\"REDUCE\",\"REDUCTION\",\"REFER\",\"REFERENCE\",\"REFLECT\",\"REFORM\",\"REFUSE\",\"REGARD\",\"REGION\",\"REGIONAL\",\"REGULAR\",\"REGULATION\",\"REJECT\",\"RELATE\",\"RELATION\",\"RELATIONSHIP\",\"RELATIVE\",\"RELATIVELY\",\"RELEASE\",\"RELEVANT\",\"RELIEF\",\"RELIGION\",\"RELIGIOUS\",\"RELY\",\"REMAIN\",\"REMEMBER\",\"REMIND\",\"REMOVE\",\"REPEAT\",\"REPLACE\",\"REPLY\",\"REPORT\",\"REPRESENT\",\"REPRESENTATION\",\"REPRESENTATIVE\",\"REQUEST\",\"REQUIRE\",\"REQUIREMENT\",\"RESEARCH\",\"RESOURCE\",\"RESPECT\",\"RESPOND\",\"RESPONSE\",\"RESPONSIBILITY\",\"RESPONSIBLE\",\"REST\",\"RESTAURANT\",\"RESULT\",\"RETAIN\",\"RETURN\",\"REVEAL\",\"REVENUE\",\"REVIEW\",\"REVOLUTION\",\"RICH\",\"RIDE\",\"RIGHT\",\"RING\",\"RISE\",\"RISK\",\"RIVER\",\"ROAD\",\"ROCK\",\"ROLE\",\"ROLL\",\"ROOF\",\"ROOM\",\"ROUND\",\"ROUTE\",\"ROW\",\"ROYAL\",\"RULE\",\"RUN\",\"RURAL\",\"SAFE\",\"SAFETY\",\"SALE\",\"SAME\",\"SAMPLE\",\"SATISFY\",\"SAVE\",\"SAY\",\"SCALE\",\"SCENE\",\"SCHEME\",\"SCHOOL\",\"SCIENCE\",\"SCIENTIFIC\",\"SCIENTIST\",\"SCORE\",\"SCREEN\",\"SEA\",\"SEARCH\",\"SEASON\",\"SEAT\",\"SECOND\",\"SECONDARY\",\"SECRETARY\",\"SECTION\",\"SECTOR\",\"SECURE\",\"SECURITY\",\"SEE\",\"SEEK\",\"SEEM\",\"SELECT\",\"SELECTION\",\"SELL\",\"SEND\",\"SENIOR\",\"SENSE\",\"SENTENCE\",\"SEPARATE\",\"SEQUENCE\",\"SERIES\",\"SERIOUS\",\"SERIOUSLY\",\"SERVANT\",\"SERVE\",\"SERVICE\",\"SESSION\",\"SET\",\"SETTLE\",\"SETTLEMENT\",\"SEVERAL\",\"SEVERE\",\"SEX\",\"SEXUAL\",\"SHAKE\",\"SHALL\",\"SHAPE\",\"SHARE\",\"SHE\",\"SHEET\",\"SHIP\",\"SHOE\",\"SHOOT\",\"SHOP\",\"SHORT\",\"SHOT\",\"SHOULD\",\"SHOULDER\",\"SHOUT\",\"SHOW\",\"SHUT\",\"SIDE\",\"SIGHT\",\"SIGN\",\"SIGNAL\",\"SIGNIFICANCE\",\"SIGNIFICANT\",\"SILENCE\",\"SIMILAR\",\"SIMPLE\",\"SIMPLY\",\"SINCE\",\"SING\",\"SINGLE\",\"SIR\",\"SISTER\",\"SIT\",\"SITE\",\"SITUATION\",\"SIZE\",\"SKILL\",\"SKIN\",\"SKY\",\"SLEEP\",\"SLIGHTLY\",\"SLIP\",\"SLOW\",\"SLOWLY\",\"SMALL\",\"SMILE\",\"SO\",\"SOCIAL\",\"SOCIETY\",\"SOFT\",\"SOFTWARE\",\"SOIL\",\"SOLDIER\",\"SOLICITOR\",\"SOLUTION\",\"SOME\",\"SOMEBODY\",\"SOMEONE\",\"SOMETHING\",\"SOMETIMES\",\"SOMEWHAT\",\"SOMEWHERE\",\"SON\",\"SONG\",\"SOON\",\"SORRY\",\"SORT\",\"SOUND\",\"SOURCE\",\"SOUTH\",\"SOUTHERN\",\"SPACE\",\"SPEAK\",\"SPEAKER\",\"SPECIAL\",\"SPECIES\",\"SPECIFIC\",\"SPEECH\",\"SPEED\",\"SPEND\",\"SPIRIT\",\"SPORT\",\"SPOT\",\"SPREAD\",\"SPRING\",\"STAFF\",\"STAGE\",\"STAND\",\"STANDARD\",\"STAR\",\"START\",\"STATE\",\"STATEMENT\",\"STATION\",\"STATUS\",\"STAY\",\"STEAL\",\"STEP\",\"STICK\",\"STILL\",\"STOCK\",\"STONE\",\"STOP\",\"STORE\",\"STORY\",\"STRAIGHT\",\"STRANGE\",\"STRATEGY\",\"STREET\",\"STRENGTH\",\"STRIKE\",\"STRONG\",\"STRONGLY\",\"STRUCTURE\",\"STUDENT\",\"STUDIO\",\"STUDY\",\"STUFF\",\"STYLE\",\"SUBJECT\",\"SUBSTANTIAL\",\"SUCCEED\",\"SUCCESS\",\"SUCCESSFUL\",\"SUCH\",\"SUDDENLY\",\"SUFFER\",\"SUFFICIENT\",\"SUGGEST\",\"SUGGESTION\",\"SUITABLE\",\"SUM\",\"SUMMER\",\"SUN\",\"SUPPLY\",\"SUPPORT\",\"SUPPOSE\",\"SURE\",\"SURELY\",\"SURFACE\",\"SURPRISE\",\"SURROUND\",\"SURVEY\",\"SURVIVE\",\"SWITCH\",\"SYSTEM\",\"TABLE\",\"TAKE\",\"TALK\",\"TALL\",\"TAPE\",\"TARGET\",\"TASK\",\"TAX\",\"TEA\",\"TEACH\",\"TEACHER\",\"TEACHING\",\"TEAM\",\"TEAR\",\"TECHNICAL\",\"TECHNIQUE\",\"TECHNOLOGY\",\"TELEPHONE\",\"TELEVISION\",\"TELL\",\"TEMPERATURE\",\"TEND\",\"TERM\",\"TERMS\",\"TERRIBLE\",\"TEST\",\"TEXT\",\"THAN\",\"THANK\",\"THANKS\",\"THAT\",\"THE\",\"THEATRE\",\"THEIR\",\"THEM\",\"THEME\",\"THEMSELVES\",\"THEN\",\"THEORY\",\"THERE\",\"THEREFORE\",\"THESE\",\"THEY\",\"THIN\",\"THING\",\"THINK\",\"THIS\",\"THOSE\",\"THOUGH\",\"THOUGHT\",\"THREAT\",\"THREATEN\",\"THROUGH\",\"THROUGHOUT\",\"THROW\",\"THUS\",\"TICKET\",\"TIME\",\"TINY\",\"TITLE\",\"TO\",\"TODAY\",\"TOGETHER\",\"TOMORROW\",\"TONE\",\"TONIGHT\",\"TOO\",\"TOOL\",\"TOOTH\",\"TOP\",\"TOTAL\",\"TOTALLY\",\"TOUCH\",\"TOUR\",\"TOWARDS\",\"TOWN\",\"TRACK\",\"TRADE\",\"TRADITION\",\"TRADITIONAL\",\"TRAFFIC\",\"TRAIN\",\"TRAINING\",\"TRANSFER\",\"TRANSPORT\",\"TRAVEL\",\"TREAT\",\"TREATMENT\",\"TREATY\",\"TREE\",\"TREND\",\"TRIAL\",\"TRIP\",\"TROOP\",\"TROUBLE\",\"TRUE\",\"TRUST\",\"TRUTH\",\"TRY\",\"TURN\",\"TWICE\",\"TYPE\",\"TYPICAL\",\"UNABLE\",\"UNDER\",\"UNDERSTAND\",\"UNDERSTANDING\",\"UNDERTAKE\",\"UNEMPLOYMENT\",\"UNFORTUNATELY\",\"UNION\",\"UNIT\",\"UNITED\",\"UNIVERSITY\",\"UNLESS\",\"UNLIKELY\",\"UNTIL\",\"UP\",\"UPON\",\"UPPER\",\"URBAN\",\"US\",\"USE\",\"USED\",\"USEFUL\",\"USER\",\"USUAL\",\"USUALLY\",\"VALUE\",\"VARIATION\",\"VARIETY\",\"VARIOUS\",\"VARY\",\"VAST\",\"VEHICLE\",\"VERSION\",\"VERY\",\"VIA\",\"VICTIM\",\"VICTORY\",\"VIDEO\",\"VIEW\",\"VILLAGE\",\"VIOLENCE\",\"VISION\",\"VISIT\",\"VISITOR\",\"VITAL\",\"VOICE\",\"VOLUME\",\"VOTE\",\"WAGE\",\"WAIT\",\"WALK\",\"WALL\",\"WANT\",\"WAR\",\"WARM\",\"WARN\",\"WASH\",\"WATCH\",\"WATER\",\"WAVE\",\"WAY\",\"WE\",\"WEAK\",\"WEAPON\",\"WEAR\",\"WEATHER\",\"WEEK\",\"WEEKEND\",\"WEIGHT\",\"WELCOME\",\"WELFARE\",\"WELL\",\"WEST\",\"WESTERN\",\"WHAT\",\"WHATEVER\",\"WHEN\",\"WHERE\",\"WHEREAS\",\"WHETHER\",\"WHICH\",\"WHILE\",\"WHILST\",\"WHITE\",\"WHO\",\"WHOLE\",\"WHOM\",\"WHOSE\",\"WHY\",\"WIDE\",\"WIDELY\",\"WIFE\",\"WILD\",\"WILL\",\"WIN\",\"WIND\",\"WINDOW\",\"WINE\",\"WING\",\"WINNER\",\"WINTER\",\"WISH\",\"WITH\",\"WITHDRAW\",\"WITHIN\",\"WITHOUT\",\"WOMAN\",\"WONDER\",\"WONDERFUL\",\"WOOD\",\"WORD\",\"WORK\",\"WORKER\",\"WORKING\",\"WORKS\",\"WORLD\",\"WORRY\",\"WORTH\",\"WOULD\",\"WRITE\",\"WRITER\",\"WRITING\",\"WRONG\",\"YARD\",\"YEAH\",\"YEAR\",\"YES\",\"YESTERDAY\",\"YET\",\"YOU\",\"YOUNG\",\"YOUR\",\"YOURSELF\",\"YOUTH\"\n"
  },
  {
    "path": "Problem043/.hash",
    "content": "115253b7721af0fdff25cd391dfc70cf"
  },
  {
    "path": "Problem043/CommonLisp/solution_1.lisp",
    "content": ";; Common Lisp Script\n;; Manoel Vilela\n;; Based on my own solution for Problem041\n;; borrowed functions: next-perm, primep, vec->int\n\n\n;; next lexicographical permutation of a vector\n;; borrowed from http://rosettacode.org/wiki/Permutations#Common_Lisp\n;; (next-perm #(9 8 7 6 5 4 3 2 1)) => #(9 8 7 6 5 4 3 1 2)\n(defun next-perm (vec &optional (cmp '>))  ; modify vector\n  (declare (type (simple-array * (*)) vec))\n  (macrolet ((el (i) `(aref vec ,i))\n             (cmp (i j) `(funcall cmp (el ,i) (el ,j))))\n    (loop with len = (1- (length vec))\n          for i from (1- len) downto 0\n          when (cmp i (1+ i)) do\n            (loop for k from len downto i\n                  when (cmp i k) do\n                    (rotatef (el i) (el k))\n                    (setf k (1+ len))\n                    (loop while (< (incf i) (decf k)) do\n                      (rotatef (el i) (el k)))\n                    (return-from next-perm vec)))))\n\n;; check if n is prime\n(defun primep (n)\n  (loop for d from 2 to (1+ (isqrt n))\n        never (and (= (mod n d) 0)\n                   (/= n d))))\n\n;; vector of digits => integer\n;; (vec->int #(9 8 7 6 5 4 3 2 1)) => 987654321\n(defun vec->int (vec)\n  (loop for d across vec\n        for pos from (1- (length vec)) downto -1\n        sum (* (expt 10 pos)\n               d)))\n\n(defvar *primes* '(2 3 5 7 11 13 17))\n(defun sub-prime-divisible (vec)\n  (loop for prime in *primes*\n        for index from 1 to 7\n        for slice = (vec->int (subseq vec index (+ index 3)))\n        always (= (mod slice prime) 0)))\n\n;; loop from the biggest to small pandigital,\n;; get the first pandigital prime\n(defun solution (vec)\n  (loop when (sub-prime-divisible vec)\n          sum (vec->int vec) into special-primes\n        when (null (next-perm vec)) ;; permutations is finished\n          return special-primes))\n\n\n(format t \"~a~%\" (solution #(9 8 7 6 5 4 3 2 1 0)))\n"
  },
  {
    "path": "Problem043/Python/solution_slow_1.py",
    "content": "\n#code created by NamanNimmo Gera\n#2:21pm, April 18, 2019.\n\nfrom itertools import permutations\n\nperm = permutations([0,1,2,3,4,5,6,7,8,9])\nprime_list = [2,3,5,7,11,13,17]\ntot=0\n\nfor i in list(perm):\n    prime = 0\n    flag = 1\n    for j in range(1,8):\n        string = \"\"\n        string = string + str(i[j]) + str(i[j+1]) + str(i[j+2])\n        if int(string)%(prime_list[prime]) != 0:\n            flag = 0\n            break\n        else:\n            prime = prime + 1\n    if flag == 1:\n        tot = tot + int(''.join(map(str, i)))\nprint(tot)\n"
  },
  {
    "path": "Problem043/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=43)\n"
  },
  {
    "path": "Problem043/Swift/solution_1.swift",
    "content": "// send the items from the right to the left \nfunc permute(array:[Int]) -> [Int]\n{\n  var mutArr = array\n  var i = mutArr.count - 2\n  loop: while true\n  {\n    switch i\n    {\n      case let x where x < 0: return [] \n      case let x where mutArr[x] < mutArr[x+1]: break loop\n      default: i -= 1\n    }\n  }\n\n  var j = 1\n  while j + i < mutArr.count - j\n  {\n    let n = mutArr[j + i]\n    mutArr[j + i] = mutArr[mutArr.count - j]\n    mutArr[mutArr.count - j] = n\n    j += 1\n  }\n\n  j = i + 1\n  while mutArr[j] <= mutArr[i]\n  {\n    j += 1\n  }\n\n  let n = mutArr[i]\n  mutArr[i] = mutArr[j]\n  mutArr[j] = n\n\n  return mutArr\n}\n\nlet primes = [2, 3, 5, 7, 11, 13, 17]\nlet numbers = Array(\"0123456789\".characters).map{Int(String($0))!}\nvar arr = permute(numbers)\nvar sum:UInt64 = 0\n\nwhile !arr.isEmpty  \n{\n  var i = 0\n\n  while i < primes.count\n  {\n    let n1 = Int(arr[i + 1]) * 100\n    let n2 = Int(arr[i + 2]) * 10\n    let n3 = Int(arr[i + 3])\n\n    if (n1+n2+n3) % primes[i] != 0\n    {\n      break \n    }\n\n    i += 1\n  }\n\n  if (i == primes.count)\n  {\n    var str = arr.map { String($0) }.joinWithSeparator(\"\")\n    sum += UInt64(str)!\n  }\n\n  arr = permute(arr)\n}\n\nprint(sum)\n"
  },
  {
    "path": "Problem044/.hash",
    "content": "2c2556cb85621309ca647465ffa62370"
  },
  {
    "path": "Problem044/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n\"\"\"\nPentagonal numbers are generated by the formula, Pn=n(3n−1)/2.\nThe first ten pentagonal numbers are:\n\n1, 5, 12, 22, 35, 51, 70, 92, 117, 145, ...\n\nIt can be seen that P4 + P7 = 22 + 70 = 92 = P8.\nHowever, their difference, 70 − 22 = 48, is not pentagonal.\n\nFind the pair of pentagonal numbers, Pj and Pk,\nfor which their sum and difference are pentagonal and D = |Pk − Pj|\nis minimised; what is the value of D?\"\"\"\n\n\nfrom itertools import combinations\nfrom operator import add, sub\n\n\ndef pentagonal(n):\n    return (n * (3 * n - 1)) // 2\n\n\ndef pentagonal_list(n):\n    return [pentagonal(x) for x in range(1, n)]\n\n\ndef solution():\n    # lol, if i don't use 'set', the time explode!\n    # the most curious is the list already uniq!\n    # p = pentagonal_list(3000); len(p) == len(set(p)) => True!!!\n    # My guess is combinations had some optimizations for set\n    # set type doesn't ordered too...\n\n    pentagonals = set(pentagonal_list(3000))\n    for c in combinations(pentagonals, 2):\n        if add(*c) in pentagonals and abs(sub(*c)) in pentagonals:\n            return abs(sub(*c))\n\nif __name__ == '__main__':\n    print(solution())\n"
  },
  {
    "path": "Problem044/Python/solution_2.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Unknown Author\n#\n#\n\nfrom itertools import count\n\n\ndef int_sqrt(n):\n    # An integer-arithmetic variant of the Babylonian method for\n    # calculating square roots.  Given a non-negative integer n, we find\n    # the greatest non-negative integer k such that k*k <= n.\n    #\n    # Suppose k > 0 is an integer such that k*k > n.  Then\n    # k + n//k < 2*k, and because 2*k is even it follows that\n    # (k + n//k)//2 < k.  Furthermore,\n    #\n    #     (k + n/k)**2\n    #         == k**2 + 2*n + (n/k)**2\n    #         == k**2 - 2*n + (n/k)**2 + 4*n\n    #         == (k - n/k)**2 + 4*n\n    #         > 4*n\n    #\n    # so\n    #\n    #     (k + n/k)/2 > sqrt(4*n)/2 == sqrt(n)\n    #         => (k + n//k)//2 >= int_sqrt(n).\n    #\n    # Thus, by starting with k such that k*k >= n and iteratively\n    # replacing k with (k + n//k)//2 while k*k > n we will eventually\n    # reach a point where k*k <= n.  At this point, it must be that\n    # k == int_sqrt(n).\n    #\n    # k = n is a natural starting point.  Instead, we will take\n    #\n    #     k = 1 << -(-n.bit_length()//2)\n    #\n    # which is a much better initial approximation and so will result in\n    # fewer iterations.  Note the use of the idiom -(-x//y) for \"divide\n    # x by y and round up\".  Note also that\n    #\n    #     k*k\n    #         == (1 << -(-n.bit_length()//2))**2\n    #         == 1 << (-(-n.bit_length()//2))*2\n    #         >= 1 << n.bit_length()\n    #         > n,\n    #\n    # satisfying the algorithmic requirement that k*k >= n initially.\n    #\n    k = 1 << -(-n.bit_length()//2)\n    while k*k > n:\n        k = (k + n//k)//2\n    return k\n\n\ndef pentagonal_number(n):\n    return n*(3*n - 1)//2\n\n\ndef is_pentagonal(n):\n    # If n is pentagonal then there exists k such that\n    #\n    #     n == pentagonal_number(k)\n    #         =>  n == k*(3*k - 1)/2\n    #         =>  2*n == 3*k**2 - k\n    #         =>  24*n == (6*k)**2 - 12*k\n    #         =>  24*n + 1 == (6*k - 1)**2\n    #         =>  int_sqrt(24*n + 1) == 6*k - 1\n    #         =>  (int_sqrt(24*n + 1) + 1)//6 == k\n    #\n    # Thus, n is pentagonal if and only if it is the kth pentagonal\n    # number where\n    #\n    #     k = (int_sqrt(24*n + 1) + 1)//6.\n    #\n    k = (int_sqrt(24*n + 1) + 1)//6\n    return pentagonal_number(k) == n\n\n\ndef answer():\n    # If p[j], p[k] are two pentagonal numbers with j < k then\n    #\n    #    p[k] - p[j]\n    #        == k*(3*k - 1)/2 - j*(3*j - 1)/2\n    #        == (3*k*k - k - 3*j*j + j)/2\n    #        == (3*k*k - 6*k*j + 3*j*j - k + j + 6*k*j - 6*j*j)/2\n    #        == (3*(k-j)**2 - (k-j) + 6*j*(k-j))/2\n    #        == p[k-j] + 3*j*(k-j).\n    #\n    # We are interested only in pairs (j, k) where this differences is\n    # itself a pentagonal number, p[t] say.  Setting s = k - j we have\n    #\n    #     p[t] == p[s] + 3*j*s.\n    #\n    # Thus, it suffices to consider only pairs (s, t) with s < t for\n    # which p[t] - p[s] is a multiple of 3*s.  Any such pair\n    # automatically yields j and k such that p[k] - p[j] == p[t] leaving\n    # us needing only to check that p[j] + p[k] is pentagonal.\n    #\n    # Because we want the minimum p[t] with the above properties, we\n    # consider each s < t before moving on to t + 1.  Given the relative\n    # expense of calculating (p[t] - p[s]) % (3*s) we first screen\n    # candidate values of s in view of the following.\n    #\n    # (1) For all non-negative integers n,\n    #\n    #     (p[n] - n)%3\n    #         == (n*(3*n - 1)/2 - n)%3\n    #         == (n*(3*n - 3)/2)%3\n    #         == 0\n    #\n    # Thus, if (p[t] - p[s]) % (3*s) == 0 then we must have that\n    # (t - s)%3 == 0.\n    #\n    # (2) If (p[t] - p[s]) % (3*s) == 0 then\n    #\n    #     (p[t] - p[s]) % s == 0\n    #         => (2*p[t] - 2*p[s]) % s == 0\n    #         => (2*p[t] - s*(3*s - 1)) % s == 0\n    #         => 2*p[t] % s == 0\n    #\n    p = {}\n    for t in count():\n        p[t] = pentagonal_number(t)\n        double_p_t = 2 * p[t]\n        for s in range(t - 3, 0, -3):\n            if not double_p_t % s and not (p[t] - p[s]) % (3*s):\n                j = (p[t] - p[s]) // (3*s)\n                if is_pentagonal(p[t] + 2*pentagonal_number(j)):\n                    return p[t]\n\n\nprint(answer())"
  },
  {
    "path": "Problem044/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=44)\n"
  },
  {
    "path": "Problem045/.hash",
    "content": "30dfe3e3b286add9d12e493ca7be63fc"
  },
  {
    "path": "Problem045/C/Makefile",
    "content": "CXX = gcc\nLFLAGS = -O3 -lm -Wall -o\nTARGET =  solution_1\nEXTENSION_TARGET = c\nEXTENSION_OUT = out\n\n\nall: \n\t$(CXX) $(TARGET).$(EXTENSION_TARGET) $(LFLAGS) $(TARGET).$(EXTENSION_OUT)\nclean: \n\trm -v *.$(EXTENSION_OUT)\nrun:\n\t./$(TARGET).$(EXTENSION_OUT)\n"
  },
  {
    "path": "Problem045/C/solution_1.c",
    "content": "/*\n * ===========================================================\n *\n *                      Copyleft 2016 Manoel Vilela\n *\n *\n *       Filename: solution_1.c\n *\n *    Description: Solution of Problem045 of the ProjectEuler\n *\n *         Author: Manoel Vilela\n *        Contact: manoel_vilela@engineer.com\n *   Organization: UFPA\n *\n * ============================================================\n**/\n\n// created by Manoel Vilela\n\n#include <stdio.h>\n#include <math.h>\n#define BModule 1\n\ntypedef struct {\n\tdouble a;\n\tdouble c;\n} Polynom;\n\nint main(int argc, char *argv[]) {\n\tPolynom P = {3, 2};\n\tPolynom H = {2, 1};\n\n\tdouble last_triangle = 285;\n\n\twhile (1) {\n\t\tlast_triangle += 1;\n\t\tdouble t = (pow(last_triangle, 2) + last_triangle) / 2;\n\t\tdouble Pn = (BModule + sqrt(BModule + 4 * P.a * P.c * t)) / (2 * P.a);\t\n \t\tdouble Hn = (BModule + sqrt(BModule + 4 * H.a * H.c * t)) / (2 * H.a);\t\n\n\t\tif (floor(Pn) == Pn && floor(Hn) == Hn) {\n\t\t\tprintf(\"%.0f\\n\", t);\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn 0;\n}\n"
  },
  {
    "path": "Problem045/CommonLisp/solution_1.lisp",
    "content": ";;; Common Lisp version\n;;; Manoel Vilela\n\n;; ProjectEuler Problem045 solution\n\n\n(defun quadratic (a b c)\n  (/ ( + (- b) (sqrt (coerce (- (* b b) (* 4 a c))\n                             'long-float))) (* 2 a)))\n\n;; x² + x => x * (x + 1)\n(defun triangle (x)\n  (/ (* (+ x 1) x) 2))\n\n(defun hexagonalp (x)\n  (quadratic 2 -1 (* -1 x)))\n\n(defun pentagonalp (x)\n  (quadratic 3 -1 (* -2 x)))\n\n(defun solution ()\n  (loop for last from 286\n        for tr = (triangle last)\n        for hp = (hexagonalp tr)\n        for tp = (pentagonalp tr)\n        when (and (equalp (floor hp) hp)\n                  (equalp (floor tp) tp))\n          return tr))\n\n(format t \"~a\" (solution))\n"
  },
  {
    "path": "Problem045/Elixir/solution_1.exs",
    "content": "defmodule PolygonNumbers do\n  def tri_pent_hex(_,final) when final > 0,  do: final\n  def tri_pent_hex(i,final) when final == 0  do\n    hex   = gen(i)\n    final = cond do\n      pent?(hex) ->\n        hex\n      true ->\n        final \n    end\n\n    tri_pent_hex(i+1,final)\n  end\n\n  def gen(n),  do: n * ((n * 2) - 1)\n  def pent?(n) do\n    m = (:math.sqrt((24 * n) + 1) + 1)\n    (rem(round(Float.floor(m)),6) == 0) and (rem(round(Float.ceil(m)),6) == 0)\n  end\nend\n\nIO.inspect PolygonNumbers.tri_pent_hex(144,0)"
  },
  {
    "path": "Problem045/Go/solution_1.go",
    "content": "// Copyright 2016 the DestructHub Authors. All rights reserved\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// created by Manoel Vilela\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"math\"\n)\n\ntype Polynom struct {\n\ta, b, c float64\n}\n\nvar P = Polynom{a: 3, c: 2}\nvar H = Polynom{a: 2, c: 1}\nvar B float64 = 1\n\nfunc main() {\n\tlastTriangle := 285.0\n\tfor {\n\t\tlastTriangle += 1\n\t\tt := (math.Pow(lastTriangle, 2) + lastTriangle) / 2\n\t\tp := (B + math.Sqrt(B+4*P.a*P.c*t)) / (2 * P.a)\n\t\th := (B + math.Sqrt(B+4*H.a*H.c*t)) / (2 * H.a)\n\n\t\tif math.Floor(p) == p && math.Floor(h) == h {\n\t\t\tfmt.Printf(\"%.0f\\n\", t)\n\t\t\tbreak\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Problem045/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\nfrom math import floor\nfrom itertools import count\n\n\n# triangle\n# -> t = n² + n: n² + n - t = 0\n\n# pentagonal (I)\n# -> p = (3n² - n) / 2: 3n² - n -2p = 0\n\n# hexagonal (II)\n# -> h = (2n² - n) / 1: 2n² -n  -h = 0\n\n# for t = p = h, we have to found the root of equations (I)\n# and (II), whose are positive and integer. The root points\n# to the n when p, h, or t exists for integers.\n# so we compute the triangle nums after the last (285)\n# and considering p = t, and h = t.\n\ndef quadratic(a, b, c):\n    return (-b + (b ** 2 - 4 * a * c) ** 0.5) / (2 * a)\n\n\ndef solution():\n    for x in count(start=286, step=1):\n        t = (x * x + x) // 2\n        p = quadratic(3, -1, -2 * t)\n        h = quadratic(2, -1, -1 * t)\n\n        if floor(p) == p and floor(h) == h:\n            return t\n\nif __name__ == '__main__':\n    print(solution())\n"
  },
  {
    "path": "Problem045/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=45)\n"
  },
  {
    "path": "Problem045/Ruby/solution_1.rb",
    "content": "class Integer\n  def is_pentagonal? # Inverse of pentagonal function\n    ((Math.sqrt((24 * self) + 1) + 1) % 6) == 0\n  end\n\n  def generate_hexagonal\n    self * ((self * 2) - 1)\n  end\nend\n\nclass TrianglePentagonHexagon\n  attr_accessor :final\n  def initialize\n    @final = 0\n  end\n\n  def find_pentagonal # All hexagonal are triagonal\n    counter = 144\n    until final > 0\n      hex = counter.generate_hexagonal\n      @final = hex if hex.is_pentagonal?\n      counter += 1\n    end\n  end\nend\n\neuler = TrianglePentagonHexagon.new\neuler.find_pentagonal\np euler.final"
  },
  {
    "path": "Problem045/Swift/solution_1.swift",
    "content": "import Foundation\n\nvar lastTriangleValue:Double = 285\nvar res:Double = 0\n\ntypealias Polynomial = (a:Double, c:Double)\n\nlet P:Polynomial = (a:3, c:2)\nlet H:Polynomial = (a:2, c:1)\nlet PH_bModule:Double = 1\n\nwhile true\n{\n  lastTriangleValue += 1 \n  res = (pow(lastTriangleValue, 2) + lastTriangleValue) / 2\n  let Pn = (PH_bModule + sqrt(PH_bModule + 4 * P.a * (P.c * res))) / (2 * P.a)\n  let Hn = (PH_bModule + sqrt(PH_bModule + 4 * H.a * (H.c * res))) / (2 * H.a)\n\n  if floor(Pn) == Pn && floor(Hn) == Hn\n  { \n    break\n  }\n}\n\n#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) \n  print(String(format: \"%.0f\", res))\n#else\n  print(NSString(format: \"%.0f\", res))\n#endif\n\n"
  },
  {
    "path": "Problem046/.hash",
    "content": "89abe98de6071178edb1b28901a8f459"
  },
  {
    "path": "Problem046/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n\ndef sieve5(n):  # from primes algorithms on problem10\n    \"\"\"Return a list of the primes below n.\"\"\"\n    prime = [True] * n\n    result = [2]\n    append = result.append\n    sqrt_n = (int(n ** .5) + 1) | 1    # ensure it's odd\n    for p in range(3, sqrt_n, 2):\n        if prime[p]:\n            append(p)\n            prime[p * p::2 * p] = [False] * ((n - p * p - 1) // (2 * p) + 1)\n    for p in range(sqrt_n, n, 2):\n        if prime[p]:\n            append(p)\n    return result\n\n\ndef goldbach(odd, p):\n    \"\"\"check if some odd composite can be equal with p prime\n    whose follow the equation: odd_composite == prime + 2 * x²\n    \"\"\"\n    # that part is a analytical solution for get the x num:\n    # the possible numbers to odd composite (not prime odd) is:\n    # :: odd = prime  + 2 * x²\n    # so, x = sqrt((odd - prime) / 2), whose prime + 2 < odd.\n\n    # simplification can be done yet, but I will keep that way\n    return odd == (p + 2 * int(((odd - p) / 2) ** 0.5) ** 2)\n\n\ndef solution(heuristic_start=10000):\n    # i don't know the limit, so we start until 10.000 primes and composites\n    primes = sieve5(heuristic_start)\n    # n > 1 & doesn't primes\n    composites = set(range(2, heuristic_start)) - set(primes)\n    for odd in filter(lambda x: x % 2 != 0, composites):\n        filtered_primes = filter(lambda x: odd > x - 2, primes)\n        if not any(goldbach(odd, p) for p in filtered_primes):\n            return odd\n\n    return solution(heuristic_start*2)  # if don't find, try other ranges\n\nif __name__ == '__main__':\n    print(solution())\n"
  },
  {
    "path": "Problem046/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=46)\n"
  },
  {
    "path": "Problem046/Ruby/solution_1.rb",
    "content": "class Goldbach\n  attr_accessor :prime_array,:square_array,:sums\n  attr_reader   :finish,:all_composites,:squared_double,:composite\n  def initialize(finish)\n    @finish      = finish\n    @composite   = 0\n    @prime_array = (3..finish).step(2).to_a.insert(0,2)\n  end\n\n  def find_goldbach\n    @composite = all_composites.find { |n| !sums.include?(n) }\n  end\n\n  def sieve_of_eratosthenes\n    (4..prime_array.last).each { |i| prime_array.delete_if { |num| num % i == 0 && num > i } }\n  end\n  \n  def generate_composites\n    @all_composites = (2..finish).select { |n| n.odd? && !prime_array.include?(n) }\n  end\n\n  def generate_squares\n    @squared_double = (0..(finish/100)).map { |n| 2*(n**2) }\n  end\n\n  def sum_primes_and_squares\n    @sums = prime_array.flat_map { |i| squared_double.map { |j| i + j } }\n  end\nend\n\neuler = Goldbach.new(10000)\neuler.sieve_of_eratosthenes\neuler.generate_composites\neuler.generate_squares\neuler.sum_primes_and_squares\neuler.find_goldbach\np euler.composite"
  },
  {
    "path": "Problem047/.hash",
    "content": "748f517ecdc29106e2738f88aa7530f4"
  },
  {
    "path": "Problem047/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\nfrom itertools import count\nfrom sympy.ntheory import factorint\n\n\ndef solution(q):\n    c = 0\n    for p in count(start=1, step=1):\n        if len(factorint(p)) == q:\n            c += 1\n            if c == 1:\n                last = p\n        else:\n            c = 0\n\n        if c == q:\n            return last\n\n\nprint(solution(4))\n"
  },
  {
    "path": "Problem047/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=47)\n"
  },
  {
    "path": "Problem047/Swift/solution_1.swift",
    "content": "var nextNumber = 1  \nvar primeArr:[Int] = [2,3,5,7]\nvar checkArr:[Int] = [] \n\nloop:while true\n{\n  nextNumber += 1\n  var remainder = nextNumber \n  var count = 0\n \n  for i in 0..<primeArr.count\n  {\n    if remainder % primeArr[i] == 0\n    { \n      while remainder % primeArr[i] == 0 { remainder /= primeArr[i] }\n      count += 1\n      if remainder == 1 && count == 4 \n      {\n        if checkArr.count < 3  { checkArr.append(nextNumber) }\n        else if nextNumber - 1 == checkArr[2] && nextNumber - 2 == checkArr[1] && nextNumber - 3 == checkArr[0] \n        {\n          print(checkArr[0])\n          break loop\n        }\n        else\n        {\n          checkArr.removeAtIndex(0)\n          checkArr.append(nextNumber)\n        }\n      }\n      else if remainder == 1\n      {\n        break\n      } \n    } \n  }\n\n  if remainder == nextNumber { primeArr.append(remainder); }\n}\n"
  },
  {
    "path": "Problem048/.hash",
    "content": "0829124724747ae1c65da8cae5263346"
  },
  {
    "path": "Problem048/C/Makefile",
    "content": "CXX = gcc\nLFLAGS = -lm -Wall -o\nTARGET =  solution_1\nEXTENSION_TARGET = c\nEXTENSION_OUT = out\n\n\nall: \n\t$(CXX) $(LFLAGS) $(TARGET).$(EXTENSION_OUT) $(TARGET).$(EXTENSION_TARGET)\nclean: \n\trm -v *.$(EXTENSION_OUT)\nrun:\n\t./$(TARGET).$(EXTENSION_OUT)"
  },
  {
    "path": "Problem048/C/solution_1.c",
    "content": "/*\n * =============================================================================\n *\n *                      Copyright 2016 Manoel Vilela\n *\n *         Author: Manoel Vilela\n *        Contact: manoel_vilela@engineer.com\n *   Organization: UFPA\n *\n * =============================================================================\n**/\n\n\n/*\n\nA solução para uma computação eficiente disso é saber como fatorar rapidamente\numa expressão do tipo: A ^ B mod C = x\n\n=> (A_1 * A_2 * A_3 ... A_B) mod C                 (exponentiation definition)\n=> ((A_1 mod C) * (A_2 mod C) * ... (A_B mod C))   (distributive mod property)\n=> (A mod C) ^ B                                   (exponentiation definition)\n\n*/\n\n#include <stdio.h>\n#include <math.h>\n#include <string.h>\n#include <stdlib.h>\n#include <stdint.h>\n\n\nuint64_t pow_mod(uint64_t x, uint64_t e, uint64_t mod) {\n    uint64_t result = 1;\n    x %= mod;\n    while(e--) {\n        result = (result % mod) * x;\n    }\n\n    return result;\n}\n\nint main(void) {\n    uint64_t num = 0;\n    uint64_t mod = (uint64_t) 1E10;\n    for (uint64_t i = 1; i <= 1000; i++){\n        num = (num + pow_mod(i, i, mod)) % mod;\n    }\n\n    printf(\"%lu\\n\", num);\n    return 0;\n}\n"
  },
  {
    "path": "Problem048/Clojure/solution_1.clj",
    "content": ";; Clojure version of problem048\n;; Manoel Vilela\n\n(defn exp [x n]\n   (reduce *' (repeat n x)))\n\n(defn series [x]\n   (reduce +' (map (fn [x]  (exp x x)) (range 1 (+ x 1)) )))\n\n(defn answer []\n  (let [x (series 1000)]\n    (mod x (exp 10 10))))\n\n(println (str (answer)))\n"
  },
  {
    "path": "Problem048/CommonLisp/solution_1.lisp",
    "content": ";; Problem 048\n;; Common Lisp\n\n\n#| The series, 1¹ + 2¹ + 3³ + ... + 10^10 = 10405071317.\n   Find the last ten digits of the series, 1¹ + 2² + 3³ + ... + 1000^1000.\n |#\n\n\n(defun series (x)\n  (reduce '+ (loop for x from 1 to x collect (expt x x))))\n\n(defun solution ()\n  (let (answer)\n    (setf answer (series 1000))\n    (mod answer (expt 10 10))))\n\n\n(format t \"~d\" (solution))"
  },
  {
    "path": "Problem048/Go/solution_1.go",
    "content": "// Copyright 2016 the DestructHub Authors. All rights reserved\n// Use of this source code is governed by a MIT-style\n// license that can be found in the LICENSE file.\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"math\"\n)\n\nfunc powMod(a float64, b float64, mod float64) float64 {\n\tvar result float64 = 1\n\ta = math.Mod(a, mod)\n\tfor i := 1.0; i <= b; i++ {\n\t\tresult = math.Mod((a * result), mod)\n\t}\n\n\treturn result\n}\n\nfunc main() {\n\tvar answer float64 = 0\n\tvar mod float64 = 1E10\n\n\tfor i := 1.0; i <= 1000; i++ {\n\t\tanswer = math.Mod(powMod(i, i, mod)+answer, mod)\n\t}\n\n\tfmt.Println(int(answer))\n}\n"
  },
  {
    "path": "Problem048/Haskell/solution_1.hs",
    "content": "{-\nThe series, 1¹ + 2¹ + 3³ + ... + 10^10 = 10405071317.\nFind the last ten digits of the series, 1¹ + 2² + 3³ + ... + 1000^1000.\n-}\n\nmain :: IO ()\nmain = putStrLn . reverse . take 10 . reverse . show . sum $ map (\\x -> x^x) [1..1000]"
  },
  {
    "path": "Problem048/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyright © Manoel Vilela\n#\n#\n\nprint(sum(map(lambda x: x ** x, range(1, 1000))) % 10 ** 10)\n"
  },
  {
    "path": "Problem048/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=48)"
  },
  {
    "path": "Problem048/Ruby/solution_1.rb",
    "content": "#Author: tkovs\n\ndef solve\n    return (1..1000).map{|x| x ** x}.inject(:+).modulo(10 ** 10)\nend\n\nputs (solve)"
  },
  {
    "path": "Problem049/.hash",
    "content": "0b99933d3e2a9addccbb663d46cbb592"
  },
  {
    "path": "Problem049/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\nfrom itertools import permutations, chain\nfrom sympy.ntheory import Sieve\n\n\nclass PrimePermutations(int):\n\n    \"\"\"\n        Class to verify if a prime can be had prime permutation itself:\n        permutations primes:\n    \"\"\"\n\n    # class global variable, i only do that one time\n    _primes = list(Sieve().primerange(1000, 9999))\n\n    def __init__(self, x, min_permutations=3):\n        self.num = x\n        self.min = min_permutations\n\n    @property\n    def permutations(self):\n        return set(map(int, (''.join(x) for x in permutations(str(self)))))\n\n    @property\n    def primes(self):\n        return sorted([p for p in self.permutations if p in self._primes])\n\n    @property\n    def is_candidate(self):\n        return len(self.primes) >= self.min\n\n    def _zip(self, content):\n        return zip(content, content[1:])\n\n    @property\n    def had_some_sequence(self):\n        return any(x == y for x, y in self._zip(self.diff))\n\n    @property\n    def sequence(self):\n        return [(x, y) for x, y in self._zip(self.primes) if y - x == self.max]\n\n    @property\n    def max(self):\n        return max(self.diff, key=self.diff.count)\n\n    @property\n    def diff(self):\n        return [y - x for x, y in self._zip(self.primes)]\n\n    @property\n    def concat(self):\n        return ''.join(map(str, sorted(set(chain(*self.sequence)))))  # lol\n\n    @classmethod\n    def solution(cls):\n        to_check = cls._primes.copy()  # make copy to not fuck the _primes\n        while any(to_check):  # if not all check\n            p = cls(to_check.pop())  # instantiate last prime\n            if p.is_candidate:  # had at least 3 permutable primes?\n                if p.had_some_sequence:  # had some sequence between?\n                    return p.concat  # is the answer, concat\n                for x in p.primes:  # remove checked primes\n                    if x in to_check:  # remove checked primes\n                        to_check.remove(x)\n\n\nif __name__ == '__main__':\n    print(PrimePermutations.solution())\n"
  },
  {
    "path": "Problem049/Python/solution_2.py",
    "content": "#code created by NamanNimmo Gera\n#12:28pm, April 19, 2019.\n\ndef isPrime(n) :\n    if (n <= 1) :\n        return False\n    if (n <= 3) :\n        return True\n    if (n % 2 == 0 or n % 3 == 0) :\n        return False\n    i = 5\n    while(i * i <= n) :\n        if (n % i == 0 or n % (i + 2) == 0) :\n            return False\n        i = i + 6\n    return True\n\nfor i in range(1001,3338):\n    if isPrime(i) and isPrime(i+3330) and isPrime(i + 2*3330):\n        if set(list(str(i))) == set(list(str(i+3330))) == set(list(str(i + 2*3330))):\n            if i!=1487:\n                string = \"\"\n                string = string + str(i) + str(i+3330)+ str(i + 2*3330)\n                print(string)\n                exit()\n"
  },
  {
    "path": "Problem049/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=49)\n"
  },
  {
    "path": "Problem050/.hash",
    "content": "73229bab6c5dc1c7cf7a4fa123caf6bc"
  },
  {
    "path": "Problem050/Python/solution_slow_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n# problem50.py\n# solution not efficient D: much more 10min to process, i want a solution whose take below 1 minute of time.\n\"\"\"\nThe prime 41, can be written as the sum of six consecutive primes:\n41 = 2 + 3 + 5 + 7 + 11 + 13\n\nThis is the longest sum of consecutive primes that adds to a prime below one-hundred.\n\nThe longest sum of consecutive primes below one-thousand that adds to a prime, contains 21 terms, and is equal to 953.\n\nWhich prime, below one-million, can be written as the sum of the most consecutive primes?\n\n\"\"\"\n\nfrom primes import primeGen\n\nmax_n = 10 ** 6\n\n\ndef sumOfPrimes(primes):\n    i = 0\n    prime = primes[-1]\n    rangeTest = prime ** 1/2\n    while primes[i] < rangeTest:\n        j = i\n        sumTemp = 0\n        while primes[j] < rangeTest:\n            sumTemp += primes[j]\n            if sumTemp == prime:\n                return prime, abs(j - i) + 1\n            j += 1\n        i += 1\n    return 0, 0\n\n\ndef main(n):\n    primes = []\n    mostConsecutivePrime, mostSums = 0, 0\n    for prime in primeGen(n):\n        primes.append(prime)\n        prime, sums = sumOfPrimes(primes)\n        if mostSums < sums:\n            mostConsecutivePrime, mostSums = prime, sums\n\n    print(mostConsecutivePrime)\n\nmain(max_n)"
  },
  {
    "path": "Problem050/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=50)\n"
  },
  {
    "path": "Problem052/.hash",
    "content": "a420384997c8a1a93d5a84046117c2aa"
  },
  {
    "path": "Problem052/Haskell/solution_1.hs",
    "content": "{-- Author: Manoel Vilela\nIt can be seen that the number, 125874, and its double, 251748, contain exactly\nthe same digits, but in a different order.\n\nFind the smallest positive integer, x, such that\n2x, 3x, 4x, 5x, and 6x, contain the same digits.\n--}\n\n\nimport Data.List (sort, nub)\n\nsameDigits :: Integer -> Integer -> Bool\nsameDigits x y = f x == f y\n  where f k = sort $ nub $ show k\n\ncheck :: Integer -> Bool\ncheck x = all (sameDigits x) $  map (* x) [2..6]\n\nsolution :: Integer\nsolution = head [x | x <- [1..], check x]\n\nmain :: IO()\nmain = print solution\n"
  },
  {
    "path": "Problem052/Python/solution_1.py",
    "content": "for i in range(101,1000000): #bruuuuuute force \n  if set(list(str(i))) == set(list(str(2*i))) == set(list(str(3*i))) == set(list(str(4*i))) == set(list(str(5*i))) == set(list(str(6*i))):\n    print(i)\n    break\n"
  },
  {
    "path": "Problem052/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=52)\n"
  },
  {
    "path": "Problem052/Ruby/solution_1.rb",
    "content": "class PermutationMultiples\n  attr_accessor :prime_array,:lowest\n  attr_reader   :finish\n  def initialize(finish)\n    @finish = finish\n  end\n\n  def find_permutations # Chose arbitrary number range => only checks until is true\n    (1).upto(finish) { |num| return @lowest = num if six_time_permutation?(num) }\n  end\n\n  def six_time_permutation?(num) # Only check if each proceeding multiple is a permutation\n    sorted = num.to_s.split(\"\").sort\n    (2..6).each { |n| return nil unless sorted == (n*num).to_s.split(\"\").sort }\n  end\nend\n\neuler = PermutationMultiples.new(1000000)\neuler.find_permutations\np euler.lowest"
  },
  {
    "path": "Problem053/.hash",
    "content": "e3b21256183cf7c2c7a66be163579d37"
  },
  {
    "path": "Problem053/Haskell/solution_1.hs",
    "content": "{-- Author: Manoel Vilela --}\n\nfat :: (Num b, Enum b) => b -> b\nfat n = product [1..n]\n\nchoose :: (RealFrac a, Enum a, Integral b) => a -> a -> b\nchoose n k = floor $ fat n /(fat k * fat (n - k))\n\nbigCombs :: (RealFrac t, Enum t) => t -> Int\nbigCombs n = length [x | k <- [1..n], let x = choose n k, x > 1000000]\n\nsolution :: Int\nsolution = sum [k | n <- [1..100], let k = bigCombs n]\n\nmain :: IO()\nmain = print solution\n"
  },
  {
    "path": "Problem053/Python/solution_1.py",
    "content": "count=0\nfor i in range (1,101):\n\tfor j in range(0,i):\n\t\tfactn=factr=fact=1\n\t\tncr=0\n\t\tm=i-j\n\t\tfor x in range(1,i+1):\n\t\t\tfactn*=x\n\t\tif j==0 or j==1:\n\t\t\tfactr=1\n\t\telse:\n\t\t\tfor x in range(2,j+1):\n\t\t\t\tfactr*=x\n\t\tfor x in range(2,m+1):\n\t\t\tfact*=x\n\t\tncr= factn / factr / fact\n\t\tif ncr>1000000:\n\t\t\tcount+=1\nprint(count)\n"
  },
  {
    "path": "Problem053/Python/solution_2.py",
    "content": "\n#code created by NamanNimmo Gera\n#3:49pm, May 1, 2019.\n\n\nimport math\ncount = 0\nfor i in range(1,101):\n    for j in range(0,i+1):\n        if ((math.factorial(i))//(math.factorial(i-j)*math.factorial(j)))>1000000:\n            count += 1\nprint(count) \n"
  },
  {
    "path": "Problem053/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=53)\n"
  },
  {
    "path": "Problem054/.hash",
    "content": "142949df56ea8ae0be8b5306971900a4 -\n"
  },
  {
    "path": "Problem054/Python/solution_1.py",
    "content": "from collections import Counter\n\nhands = [line.split(' ') for line in open('../p054_poker.txt')]\n\nvalues = {'2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, 'T': 10, 'J': 11, 'Q': 12, 'K': 13, 'A': 14}\nstraights = [(v, v - 1, v - 2, v - 3, v - 4) for v in range(14, 5, -1)]\nranks = [(1, 1, 1, 1, 1), (2, 1, 1, 1), (2, 2, 1), (3, 1, 1), (3, 2), (4, 1)]\n\ndef calculate_rank(hand):\n    score = list(zip(*sorted(((v, values[k]) for k, v in Counter(x[0] for x in hand).items()), reverse=True)))\n    score[0] = ranks.index(score[0])\n    if len(set(card[1] for card in hand)) == 1:\n        score[0] = 5  # flush\n    if score[1] in straights:\n        score[0] = 4  # straight\n    return score\n\np1_wins = sum(calculate_rank(hand[:5]) > calculate_rank(hand[5:]) for hand in hands)\n\nprint(p1_wins)\n"
  },
  {
    "path": "Problem054/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=54)\n"
  },
  {
    "path": "Problem054/p054_poker.txt",
    "content": "8C TS KC 9H 4S 7D 2S 5D 3S AC\n5C AD 5D AC 9C 7C 5H 8D TD KS\n3H 7H 6S KC JS QH TD JC 2D 8S\nTH 8H 5C QS TC 9H 4D JC KS JS\n7C 5H KC QH JD AS KH 4C AD 4S\n5H KS 9C 7D 9H 8D 3S 5D 5C AH\n6H 4H 5C 3H 2H 3S QH 5S 6S AS\nTD 8C 4H 7C TC KC 4C 3H 7S KS\n7C 9C 6D KD 3H 4C QS QC AC KH\nJC 6S 5H 2H 2D KD 9D 7C AS JS\nAD QH TH 9D 8H TS 6D 3S AS AC\n2H 4S 5C 5S TC KC JD 6C TS 3C\nQD AS 6H JS 2C 3D 9H KC 4H 8S\nKD 8S 9S 7C 2S 3S 6D 6S 4H KC\n3C 8C 2D 7D 4D 9S 4S QH 4H JD\n8C KC 7S TC 2D TS 8H QD AC 5C\n3D KH QD 6C 6S AD AS 8H 2H QS\n6S 8D 4C 8S 6C QH TC 6D 7D 9D\n2S 8D 8C 4C TS 9S 9D 9C AC 3D\n3C QS 2S 4H JH 3D 2D TD 8S 9H\n5H QS 8S 6D 3C 8C JD AS 7H 7D\n6H TD 9D AS JH 6C QC 9S KD JC\nAH 8S QS 4D TH AC TS 3C 3D 5C\n5S 4D JS 3D 8H 6C TS 3S AD 8C\n6D 7C 5D 5H 3S 5C JC 2H 5S 3D\n5H 6H 2S KS 3D 5D JD 7H JS 8H\nKH 4H AS JS QS QC TC 6D 7C KS\n3D QS TS 2H JS 4D AS 9S JC KD\nQD 5H 4D 5D KH 7H 3D JS KD 4H\n2C 9H 6H 5C 9D 6C JC 2D TH 9S\n7D 6D AS QD JH 4D JS 7C QS 5C\n3H KH QD AD 8C 8H 3S TH 9D 5S\nAH 9S 4D 9D 8S 4H JS 3C TC 8D\n2C KS 5H QD 3S TS 9H AH AD 8S\n5C 7H 5D KD 9H 4D 3D 2D KS AD\nKS KC 9S 6D 2C QH 9D 9H TS TC\n9C 6H 5D QH 4D AD 6D QC JS KH\n9S 3H 9D JD 5C 4D 9H AS TC QH\n2C 6D JC 9C 3C AD 9S KH 9D 7D\nKC 9C 7C JC JS KD 3H AS 3C 7D\nQD KH QS 2C 3S 8S 8H 9H 9C JC\nQH 8D 3C KC 4C 4H 6D AD 9H 9D\n3S KS QS 7H KH 7D 5H 5D JD AD\n2H 2C 6H TH TC 7D 8D 4H 8C AS\n4S 2H AC QC 3S 6D TH 4D 4C KH\n4D TC KS AS 7C 3C 6D 2D 9H 6C\n8C TD 5D QS 2C 7H 4C 9C 3H 9H\n5H JH TS 7S TD 6H AD QD 8H 8S\n5S AD 9C 8C 7C 8D 5H 9D 8S 2S\n4H KH KS 9S 2S KC 5S AD 4S 7D\nQS 9C QD 6H JS 5D AC 8D 2S AS\nKH AC JC 3S 9D 9S 3C 9C 5S JS\nAD 3C 3D KS 3S 5C 9C 8C TS 4S\nJH 8D 5D 6H KD QS QD 3D 6C KC\n8S JD 6C 3S 8C TC QC 3C QH JS\nKC JC 8H 2S 9H 9C JH 8S 8C 9S\n8S 2H QH 4D QC 9D KC AS TH 3C\n8S 6H TH 7C 2H 6S 3C 3H AS 7S\nQH 5S JS 4H 5H TS 8H AH AC JC\n9D 8H 2S 4S TC JC 3C 7H 3H 5C\n3D AD 3C 3S 4C QC AS 5D TH 8C\n6S 9D 4C JS KH AH TS JD 8H AD\n4C 6S 9D 7S AC 4D 3D 3S TC JD\nAD 7H 6H 4H JH KC TD TS 7D 6S\n8H JH TC 3S 8D 8C 9S 2C 5C 4D\n2C 9D KC QH TH QS JC 9C 4H TS\nQS 3C QD 8H KH 4H 8D TD 8S AC\n7C 3C TH 5S 8H 8C 9C JD TC KD\nQC TC JD TS 8C 3H 6H KD 7C TD\nJH QS KS 9C 6D 6S AS 9H KH 6H\n2H 4D AH 2D JH 6H TD 5D 4H JD\nKD 8C 9S JH QD JS 2C QS 5C 7C\n4S TC 7H 8D 2S 6H 7S 9C 7C KC\n8C 5D 7H 4S TD QC 8S JS 4H KS\nAD 8S JH 6D TD KD 7C 6C 2D 7D\nJC 6H 6S JS 4H QH 9H AH 4C 3C\n6H 5H AS 7C 7S 3D KH KC 5D 5C\nJC 3D TD AS 4D 6D 6S QH JD KS\n8C 7S 8S QH 2S JD 5C 7H AH QD\n8S 3C 6H 6C 2C 8D TD 7D 4C 4D\n5D QH KH 7C 2S 7H JS 6D QC QD\nAD 6C 6S 7D TH 6H 2H 8H KH 4H\nKS JS KD 5D 2D KH 7D 9C 8C 3D\n9C 6D QD 3C KS 3S 7S AH JD 2D\nAH QH AS JC 8S 8H 4C KC TH 7D\nJC 5H TD 7C 5D KD 4C AD 8H JS\nKC 2H AC AH 7D JH KH 5D 7S 6D\n9S 5S 9C 6H 8S TD JD 9H 6C AC\n7D 8S 6D TS KD 7H AC 5S 7C 5D\nAH QC JC 4C TC 8C 2H TS 2C 7D\nKD KC 6S 3D 7D 2S 8S 3H 5S 5C\n8S 5D 8H 4C 6H KC 3H 7C 5S KD\nJH 8C 3D 3C 6C KC TD 7H 7C 4C\nJC KC 6H TS QS TD KS 8H 8C 9S\n6C 5S 9C QH 7D AH KS KC 9S 2C\n4D 4S 8H TD 9C 3S 7D 9D AS TH\n6S 7D 3C 6H 5D KD 2C 5C 9D 9C\n2H KC 3D AD 3H QD QS 8D JC 4S\n8C 3H 9C 7C AD 5D JC 9D JS AS\n5D 9H 5C 7H 6S 6C QC JC QD 9S\nJC QS JH 2C 6S 9C QC 3D 4S TC\n4H 5S 8D 3D 4D 2S KC 2H JS 2C\nTD 3S TH KD 4D 7H JH JS KS AC\n7S 8C 9S 2D 8S 7D 5C AD 9D AS\n8C 7H 2S 6C TH 3H 4C 3S 8H AC\nKD 5H JC 8H JD 2D 4H TD JH 5C\n3D AS QH KS 7H JD 8S 5S 6D 5H\n9S 6S TC QS JC 5C 5D 9C TH 8C\n5H 3S JH 9H 2S 2C 6S 7S AS KS\n8C QD JC QS TC QC 4H AC KH 6C\nTC 5H 7D JH 4H 2H 8D JC KS 4D\n5S 9C KH KD 9H 5C TS 3D 7D 2D\n5H AS TC 4D 8C 2C TS 9D 3H 8D\n6H 8D 2D 9H JD 6C 4S 5H 5S 6D\nAD 9C JC 7D 6H 9S 6D JS 9H 3C\nAD JH TC QS 4C 5D 9S 7C 9C AH\nKD 6H 2H TH 8S QD KS 9D 9H AS\n4H 8H 8D 5H 6C AH 5S AS AD 8S\nQS 5D 4S 2H TD KS 5H AC 3H JC\n9C 7D QD KD AC 6D 5H QH 6H 5S\nKC AH QH 2H 7D QS 3H KS 7S JD\n6C 8S 3H 6D KS QD 5D 5C 8H TC\n9H 4D 4S 6S 9D KH QC 4H 6C JD\nTD 2D QH 4S 6H JH KD 3C QD 8C\n4S 6H 7C QD 9D AS AH 6S AD 3C\n2C KC TH 6H 8D AH 5C 6D 8S 5D\nTD TS 7C AD JC QD 9H 3C KC 7H\n5D 4D 5S 8H 4H 7D 3H JD KD 2D\nJH TD 6H QS 4S KD 5C 8S 7D 8H\nAC 3D AS 8C TD 7H KH 5D 6C JD\n9D KS 7C 6D QH TC JD KD AS KC\nJH 8S 5S 7S 7D AS 2D 3D AD 2H\n2H 5D AS 3C QD KC 6H 9H 9S 2C\n9D 5D TH 4C JH 3H 8D TC 8H 9H\n6H KD 2C TD 2H 6C 9D 2D JS 8C\nKD 7S 3C 7C AS QH TS AD 8C 2S\nQS 8H 6C JS 4C 9S QC AD TD TS\n2H 7C TS TC 8C 3C 9H 2D 6D JC\nTC 2H 8D JH KS 6D 3H TD TH 8H\n9D TD 9H QC 5D 6C 8H 8C KC TS\n2H 8C 3D AH 4D TH TC 7D 8H KC\nTS 5C 2D 8C 6S KH AH 5H 6H KC\n5S 5D AH TC 4C JD 8D 6H 8C 6C\nKC QD 3D 8H 2D JC 9H 4H AD 2S\nTD 6S 7D JS KD 4H QS 2S 3S 8C\n4C 9H JH TS 3S 4H QC 5S 9S 9C\n2C KD 9H JS 9S 3H JC TS 5D AC\nAS 2H 5D AD 5H JC 7S TD JS 4C\n2D 4S 8H 3D 7D 2C AD KD 9C TS\n7H QD JH 5H JS AC 3D TH 4C 8H\n6D KH KC QD 5C AD 7C 2D 4H AC\n3D 9D TC 8S QD 2C JC 4H JD AH\n6C TD 5S TC 8S AH 2C 5D AS AC\nTH 7S 3D AS 6C 4C 7H 7D 4H AH\n5C 2H KS 6H 7S 4H 5H 3D 3C 7H\n3C 9S AC 7S QH 2H 3D 6S 3S 3H\n2D 3H AS 2C 6H TC JS 6S 9C 6C\nQH KD QD 6D AC 6H KH 2C TS 8C\n8H 7D 3S 9H 5D 3H 4S QC 9S 5H\n2D 9D 7H 6H 3C 8S 5H 4D 3S 4S\nKD 9S 4S TC 7S QC 3S 8S 2H 7H\nTC 3D 8C 3H 6C 2H 6H KS KD 4D\nKC 3D 9S 3H JS 4S 8H 2D 6C 8S\n6H QS 6C TC QD 9H 7D 7C 5H 4D\nTD 9D 8D 6S 6C TC 5D TS JS 8H\n4H KC JD 9H TC 2C 6S 5H 8H AS\nJS 9C 5C 6S 9D JD 8H KC 4C 6D\n4D 8D 8S 6C 7C 6H 7H 8H 5C KC\nTC 3D JC 6D KS 9S 6H 7S 9C 2C\n6C 3S KD 5H TS 7D 9H 9S 6H KH\n3D QD 4C 6H TS AC 3S 5C 2H KD\n4C AS JS 9S 7C TS 7H 9H JC KS\n4H 8C JD 3H 6H AD 9S 4S 5S KS\n4C 2C 7D 3D AS 9C 2S QS KC 6C\n8S 5H 3D 2S AC 9D 6S 3S 4D TD\nQD TH 7S TS 3D AC 7H 6C 5D QC\nTC QD AD 9C QS 5C 8D KD 3D 3C\n9D 8H AS 3S 7C 8S JD 2D 8D KC\n4C TH AC QH JS 8D 7D 7S 9C KH\n9D 8D 4C JH 2C 2S QD KD TS 4H\n4D 6D 5D 2D JH 3S 8S 3H TC KH\nAD 4D 2C QS 8C KD JH JD AH 5C\n5C 6C 5H 2H JH 4H KS 7C TC 3H\n3C 4C QC 5D JH 9C QD KH 8D TC\n3H 9C JS 7H QH AS 7C 9H 5H JC\n2D 5S QD 4S 3C KC 6S 6C 5C 4C\n5D KH 2D TS 8S 9C AS 9S 7C 4C\n7C AH 8C 8D 5S KD QH QS JH 2C\n8C 9D AH 2H AC QC 5S 8H 7H 2C\nQD 9H 5S QS QC 9C 5H JC TH 4H\n6C 6S 3H 5H 3S 6H KS 8D AC 7S\nAC QH 7H 8C 4S KC 6C 3D 3S TC\n9D 3D JS TH AC 5H 3H 8S 3S TC\nQD KH JS KS 9S QC 8D AH 3C AC\n5H 6C KH 3S 9S JH 2D QD AS 8C\n6C 4D 7S 7H 5S JC 6S 9H 4H JH\nAH 5S 6H 9S AD 3S TH 2H 9D 8C\n4C 8D 9H 7C QC AD 4S 9C KC 5S\n9D 6H 4D TC 4C JH 2S 5D 3S AS\n2H 6C 7C KH 5C AD QS TH JD 8S\n3S 4S 7S AH AS KC JS 2S AD TH\nJS KC 2S 7D 8C 5C 9C TS 5H 9D\n7S 9S 4D TD JH JS KH 6H 5D 2C\nJD JS JC TH 2D 3D QD 8C AC 5H\n7S KH 5S 9D 5D TD 4S 6H 3C 2D\n4S 5D AC 8D 4D 7C AD AS AH 9C\n6S TH TS KS 2C QC AH AS 3C 4S\n2H 8C 3S JC 5C 7C 3H 3C KH JH\n7S 3H JC 5S 6H 4C 2S 4D KC 7H\n4D 7C 4H 9S 8S 6S AD TC 6C JC\nKH QS 3S TC 4C 8H 8S AC 3C TS\nQD QS TH 3C TS 7H 7D AH TD JC\nTD JD QC 4D 9S 7S TS AD 7D AC\nAH 7H 4S 6D 7C 2H 9D KS JC TD\n7C AH JD 4H 6D QS TS 2H 2C 5C\nTC KC 8C 9S 4C JS 3C JC 6S AH\nAS 7D QC 3D 5S JC JD 9D TD KH\nTH 3C 2S 6H AH AC 5H 5C 7S 8H\nQC 2D AC QD 2S 3S JD QS 6S 8H\nKC 4H 3C 9D JS 6H 3S 8S AS 8C\n7H KC 7D JD 2H JC QH 5S 3H QS\n9H TD 3S 8H 7S AC 5C 6C AH 7C\n8D 9H AH JD TD QS 7D 3S 9C 8S\nAH QH 3C JD KC 4S 5S 5D TD KS\n9H 7H 6S JH TH 4C 7C AD 5C 2D\n7C KD 5S TC 9D 6S 6C 5D 2S TH\nKC 9H 8D 5H 7H 4H QC 3D 7C AS\n6S 8S QC TD 4S 5C TH QS QD 2S\n8S 5H TH QC 9H 6S KC 7D 7C 5C\n7H KD AH 4D KH 5C 4S 2D KC QH\n6S 2C TD JC AS 4D 6C 8C 4H 5S\nJC TC JD 5S 6S 8D AS 9D AD 3S\n6D 6H 5D 5S TC 3D 7D QS 9D QD\n4S 6C 8S 3S 7S AD KS 2D 7D 7C\nKC QH JC AC QD 5D 8D QS 7H 7D\nJS AH 8S 5H 3D TD 3H 4S 6C JH\n4S QS 7D AS 9H JS KS 6D TC 5C\n2D 5C 6H TC 4D QH 3D 9H 8S 6C\n6D 7H TC TH 5S JD 5C 9C KS KD\n8D TD QH 6S 4S 6C 8S KC 5C TC\n5S 3D KS AC 4S 7D QD 4C TH 2S\nTS 8H 9S 6S 7S QH 3C AH 7H 8C\n4C 8C TS JS QC 3D 7D 5D 7S JH\n8S 7S 9D QC AC 7C 6D 2H JH KC\nJS KD 3C 6S 4S 7C AH QC KS 5H\nKS 6S 4H JD QS TC 8H KC 6H AS\nKH 7C TC 6S TD JC 5C 7D AH 3S\n3H 4C 4H TC TH 6S 7H 6D 9C QH\n7D 5H 4S 8C JS 4D 3D 8S QH KC\n3H 6S AD 7H 3S QC 8S 4S 7S JS\n3S JD KH TH 6H QS 9C 6C 2D QD\n4S QH 4D 5H KC 7D 6D 8D TH 5S\nTD AD 6S 7H KD KH 9H 5S KC JC\n3H QC AS TS 4S QD KS 9C 7S KC\nTS 6S QC 6C TH TC 9D 5C 5D KD\nJS 3S 4H KD 4C QD 6D 9S JC 9D\n8S JS 6D 4H JH 6H 6S 6C KS KH\nAC 7D 5D TC 9S KH 6S QD 6H AS\nAS 7H 6D QH 8D TH 2S KH 5C 5H\n4C 7C 3D QC TC 4S KH 8C 2D JS\n6H 5D 7S 5H 9C 9H JH 8S TH 7H\nAS JS 2S QD KH 8H 4S AC 8D 8S\n3H 4C TD KD 8C JC 5C QS 2D JD\nTS 7D 5D 6C 2C QS 2H 3C AH KS\n4S 7C 9C 7D JH 6C 5C 8H 9D QD\n2S TD 7S 6D 9C 9S QS KH QH 5C\nJC 6S 9C QH JH 8D 7S JS KH 2H\n8D 5H TH KC 4D 4S 3S 6S 3D QS\n2D JD 4C TD 7C 6D TH 7S JC AH\nQS 7S 4C TH 9D TS AD 4D 3H 6H\n2D 3H 7D JD 3D AS 2S 9C QC 8S\n4H 9H 9C 2C 7S JH KD 5C 5D 6H\nTC 9H 8H JC 3C 9S 8D KS AD KC\nTS 5H JD QS QH QC 8D 5D KH AH\n5D AS 8S 6S 4C AH QC QD TH 7H\n3H 4H 7D 6S 4S 9H AS 8H JS 9D\nJD 8C 2C 9D 7D 5H 5S 9S JC KD\nKD 9C 4S QD AH 7C AD 9D AC TD\n6S 4H 4S 9C 8D KS TC 9D JH 7C\n5S JC 5H 4S QH AC 2C JS 2S 9S\n8C 5H AS QD AD 5C 7D 8S QC TD\nJC 4C 8D 5C KH QS 4D 6H 2H 2C\nTH 4S 2D KC 3H QD AC 7H AD 9D\nKH QD AS 8H TH KC 8D 7S QH 8C\nJC 6C 7D 8C KH AD QS 2H 6S 2D\nJC KH 2D 7D JS QC 5H 4C 5D AD\nTS 3S AD 4S TD 2D TH 6S 9H JH\n9H 2D QS 2C 4S 3D KH AS AC 9D\nKH 6S 8H 4S KD 7D 9D TS QD QC\nJH 5H AH KS AS AD JC QC 5S KH\n5D 7D 6D KS KD 3D 7C 4D JD 3S\nAC JS 8D 5H 9C 3H 4H 4D TS 2C\n6H KS KH 9D 7C 2S 6S 8S 2H 3D\n6H AC JS 7S 3S TD 8H 3H 4H TH\n9H TC QC KC 5C KS 6H 4H AC 8S\nTC 7D QH 4S JC TS 6D 6C AC KH\nQH 7D 7C JH QS QD TH 3H 5D KS\n3D 5S 8D JS 4C 2C KS 7H 9C 4H\n5H 8S 4H TD 2C 3S QD QC 3H KC\nQC JS KD 9C AD 5S 9D 7D 7H TS\n8C JC KH 7C 7S 6C TS 2C QD TH\n5S 9D TH 3C 7S QH 8S 9C 2H 5H\n5D 9H 6H 2S JS KH 3H 7C 2H 5S\nJD 5D 5S 2C TC 2S 6S 6C 3C 8S\n4D KH 8H 4H 2D KS 3H 5C 2S 9H\n3S 2D TD 7H 8S 6H JD KC 9C 8D\n6S QD JH 7C 9H 5H 8S 8H TH TD\nQS 7S TD 7D TS JC KD 7C 3C 2C\n3C JD 8S 4H 2D 2S TD AS 4D AC\nAH KS 6C 4C 4S 7D 8C 9H 6H AS\n5S 3C 9S 2C QS KD 4D 4S AC 5D\n2D TS 2C JS KH QH 5D 8C AS KC\nKD 3H 6C TH 8S 7S KH 6H 9S AC\n6H 7S 6C QS AH 2S 2H 4H 5D 5H\n5H JC QD 2C 2S JD AS QC 6S 7D\n6C TC AS KD 8H 9D 2C 7D JH 9S\n2H 4C 6C AH 8S TD 3H TH 7C TS\nKD 4S TS 6C QH 8D 9D 9C AH 7D\n6D JS 5C QD QC 9C 5D 8C 2H KD\n3C QH JH AD 6S AH KC 8S 6D 6H\n3D 7C 4C 7S 5S 3S 6S 5H JC 3C\nQH 7C 5H 3C 3S 8C TS 4C KD 9C\nQD 3S 7S 5H 7H QH JC 7C 8C KD\n3C KD KH 2S 4C TS AC 6S 2C 7C\n2C KH 3C 4C 6H 4D 5H 5S 7S QD\n4D 7C 8S QD TS 9D KS 6H KD 3C\nQS 4D TS 7S 4C 3H QD 8D 9S TC\nTS QH AC 6S 3C 9H 9D QS 8S 6H\n3S 7S 5D 4S JS 2D 6C QH 6S TH\n4C 4H AS JS 5D 3D TS 9C AC 8S\n6S 9C 7C 3S 5C QS AD AS 6H 3C\n9S 8C 7H 3H 6S 7C AS 9H JD KH\n3D 3H 7S 4D 6C 7C AC 2H 9C TH\n4H 5S 3H AC TC TH 9C 9H 9S 8D\n8D 9H 5H 4D 6C 2H QD 6S 5D 3S\n4C 5C JD QS 4D 3H TH AC QH 8C\nQC 5S 3C 7H AD 4C KS 4H JD 6D\nQS AH 3H KS 9H 2S JS JH 5H 2H\n2H 5S TH 6S TS 3S KS 3C 5H JS\n2D 9S 7H 3D KC JH 6D 7D JS TD\nAC JS 8H 2C 8C JH JC 2D TH 7S\n5D 9S 8H 2H 3D TC AH JC KD 9C\n9D QD JC 2H 6D KH TS 9S QH TH\n2C 8D 4S JD 5H 3H TH TC 9C KC\nAS 3D 9H 7D 4D TH KH 2H 7S 3H\n4H 7S KS 2S JS TS 8S 2H QD 8D\n5S 6H JH KS 8H 2S QC AC 6S 3S\nJC AS AD QS 8H 6C KH 4C 4D QD\n2S 3D TS TD 9S KS 6S QS 5C 8D\n3C 6D 4S QC KC JH QD TH KH AD\n9H AH 4D KS 2S 8D JH JC 7C QS\n2D 6C TH 3C 8H QD QH 2S 3S KS\n6H 5D 9S 4C TS TD JS QD 9D JD\n5H 8H KH 8S KS 7C TD AD 4S KD\n2C 7C JC 5S AS 6C 7D 8S 5H 9C\n6S QD 9S TS KH QS 5S QH 3C KC\n7D 3H 3C KD 5C AS JH 7H 6H JD\n9D 5C 9H KC 8H KS 4S AD 4D 2S\n3S JD QD 8D 2S 7C 5S 6S 5H TS\n6D 9S KC TD 3S 6H QD JD 5C 8D\n5H 9D TS KD 8D 6H TD QC 4C 7D\n6D 4S JD 9D AH 9S AS TD 9H QD\n2D 5S 2H 9C 6H 9S TD QC 7D TC\n3S 2H KS TS 2C 9C 8S JS 9D 7D\n3C KC 6D 5D 6C 6H 8S AS 7S QS\nJH 9S 2H 8D 4C 8H 9H AD TH KH\nQC AS 2S JS 5C 6H KD 3H 7H 2C\nQD 8H 2S 8D 3S 6D AH 2C TC 5C\nJD JS TS 8S 3H 5D TD KC JC 6H\n6S QS TC 3H 5D AH JC 7C 7D 4H\n7C 5D 8H 9C 2H 9H JH KH 5S 2C\n9C 7H 6S TH 3S QC QD 4C AC JD\n2H 5D 9S 7D KC 3S QS 2D AS KH\n2S 4S 2H 7D 5C TD TH QH 9S 4D\n6D 3S TS 6H 4H KS 9D 8H 5S 2D\n9H KS 4H 3S 5C 5D KH 6H 6S JS\nKC AS 8C 4C JC KH QC TH QD AH\n6S KH 9S 2C 5H TC 3C 7H JC 4D\nJD 4S 6S 5S 8D 7H 7S 4D 4C 2H\n7H 9H 5D KH 9C 7C TS TC 7S 5H\n4C 8D QC TS 4S 9H 3D AD JS 7C\n8C QS 5C 5D 3H JS AH KC 4S 9D\nTS JD 8S QS TH JH KH 2D QD JS\nJD QC 5D 6S 9H 3S 2C 8H 9S TS\n2S 4C AD 7H JC 5C 2D 6D 4H 3D\n7S JS 2C 4H 8C AD QD 9C 3S TD\nJD TS 4C 6H 9H 7D QD 6D 3C AS\nAS 7C 4C 6S 5D 5S 5C JS QC 4S\nKD 6S 9S 7C 3C 5S 7D JH QD JS\n4S 7S JH 2C 8S 5D 7H 3D QH AD\nTD 6H 2H 8D 4H 2D 7C AD KH 5D\nTS 3S 5H 2C QD AH 2S 5C KH TD\nKC 4D 8C 5D AS 6C 2H 2S 9H 7C\nKD JS QC TS QS KH JH 2C 5D AD\n3S 5H KC 6C 9H 3H 2H AD 7D 7S\n7S JS JH KD 8S 7D 2S 9H 7C 2H\n9H 2D 8D QC 6S AD AS 8H 5H 6C\n2S 7H 6C 6D 7D 8C 5D 9D JC 3C\n7C 9C 7H JD 2H KD 3S KH AD 4S\nQH AS 9H 4D JD KS KD TS KH 5H\n4C 8H 5S 3S 3D 7D TD AD 7S KC\nJS 8S 5S JC 8H TH 9C 4D 5D KC\n7C 5S 9C QD 2C QH JS 5H 8D KH\nTD 2S KS 3D AD KC 7S TC 3C 5D\n4C 2S AD QS 6C 9S QD TH QH 5C\n8C AD QS 2D 2S KC JD KS 6C JC\n8D 4D JS 2H 5D QD 7S 7D QH TS\n6S 7H 3S 8C 8S 9D QS 8H 6C 9S\n4S TC 2S 5C QD 4D QS 6D TH 6S\n3S 5C 9D 6H 8D 4C 7D TC 7C TD\nAH 6S AS 7H 5S KD 3H 5H AC 4C\n8D 8S AH KS QS 2C AD 6H 7D 5D\n6H 9H 9S 2H QS 8S 9C 5D 2D KD\nTS QC 5S JH 7D 7S TH 9S 9H AC\n7H 3H 6S KC 4D 6D 5C 4S QD TS\nTD 2S 7C QD 3H JH 9D 4H 7S 7H\nKS 3D 4H 5H TC 2S AS 2D 6D 7D\n8H 3C 7H TD 3H AD KC TH 9C KH\nTC 4C 2C 9S 9D 9C 5C 2H JD 3C\n3H AC TS 5D AD 8D 6H QC 6S 8C\n2S TS 3S JD 7H 8S QH 4C 5S 8D\nAC 4S 6C 3C KH 3D 7C 2D 8S 2H\n4H 6C 8S TH 2H 4S 8H 9S 3H 7S\n7C 4C 9C 2C 5C AS 5D KD 4D QH\n9H 4H TS AS 7D 8D 5D 9S 8C 2H\nQC KD AC AD 2H 7S AS 3S 2D 9S\n2H QC 8H TC 6D QD QS 5D KH 3C\nTH JD QS 4C 2S 5S AD 7H 3S AS\n7H JS 3D 6C 3S 6D AS 9S AC QS\n9C TS AS 8C TC 8S 6H 9D 8D 6C\n4D JD 9C KC 7C 6D KS 3S 8C AS\n3H 6S TC 8D TS 3S KC 9S 7C AS\n8C QC 4H 4S 8S 6C 3S TC AH AC\n4D 7D 5C AS 2H 6S TS QC AD TC\nQD QC 8S 4S TH 3D AH TS JH 4H\n5C 2D 9S 2C 3H 3C 9D QD QH 7D\nKC 9H 6C KD 7S 3C 4D AS TC 2D\n3D JS 4D 9D KS 7D TH QC 3H 3C\n8D 5S 2H 9D 3H 8C 4C 4H 3C TH\nJC TH 4S 6S JD 2D 4D 6C 3D 4C\nTS 3S 2D 4H AC 2C 6S 2H JH 6H\nTD 8S AD TC AH AC JH 9S 6S 7S\n6C KC 4S JD 8D 9H 5S 7H QH AH\nKD 8D TS JH 5C 5H 3H AD AS JS\n2D 4H 3D 6C 8C 7S AD 5D 5C 8S\nTD 5D 7S 9C 4S 5H 6C 8C 4C 8S\nJS QH 9C AS 5C QS JC 3D QC 7C\nJC 9C KH JH QS QC 2C TS 3D AD\n5D JH AC 5C 9S TS 4C JD 8C KS\nKC AS 2D KH 9H 2C 5S 4D 3D 6H\nTH AH 2D 8S JC 3D 8C QH 7S 3S\n8H QD 4H JC AS KH KS 3C 9S 6D\n9S QH 7D 9C 4S AC 7H KH 4D KD\nAH AD TH 6D 9C 9S KD KS QH 4H\nQD 6H 9C 7C QS 6D 6S 9D 5S JH\nAH 8D 5H QD 2H JC KS 4H KH 5S\n5C 2S JS 8D 9C 8C 3D AS KC AH\nJD 9S 2H QS 8H 5S 8C TH 5C 4C\nQC QS 8C 2S 2C 3S 9C 4C KS KH\n2D 5D 8S AH AD TD 2C JS KS 8C\nTC 5S 5H 8H QC 9H 6H JD 4H 9S\n3C JH 4H 9H AH 4S 2H 4C 8D AC\n8S TH 4D 7D 6D QD QS 7S TC 7C\nKH 6D 2D JD 5H JS QD JH 4H 4S\n9C 7S JH 4S 3S TS QC 8C TC 4H\nQH 9D 4D JH QS 3S 2C 7C 6C 2D\n4H 9S JD 5C 5H AH 9D TS 2D 4C\nKS JH TS 5D 2D AH JS 7H AS 8D\nJS AH 8C AD KS 5S 8H 2C 6C TH\n2H 5D AD AC KS 3D 8H TS 6H QC\n6D 4H TS 9C 5H JS JH 6S JD 4C\nJH QH 4H 2C 6D 3C 5D 4C QS KC\n6H 4H 6C 7H 6S 2S 8S KH QC 8C\n3H 3D 5D KS 4H TD AD 3S 4D TS\n5S 7C 8S 7D 2C KS 7S 6C 8C JS\n5D 2H 3S 7C 5C QD 5H 6D 9C 9H\nJS 2S KD 9S 8D TD TS AC 8C 9D\n5H QD 2S AC 8C 9H KS 7C 4S 3C\nKH AS 3H 8S 9C JS QS 4S AD 4D\nAS 2S TD AD 4D 9H JC 4C 5H QS\n5D 7C 4H TC 2D 6C JS 4S KC 3S\n4C 2C 5D AC 9H 3D JD 8S QS QH\n2C 8S 6H 3C QH 6D TC KD AC AH\nQC 6C 3S QS 4S AC 8D 5C AD KH\n5S 4C AC KH AS QC 2C 5C 8D 9C\n8H JD 3C KH 8D 5C 9C QD QH 9D\n7H TS 2C 8C 4S TD JC 9C 5H QH\nJS 4S 2C 7C TH 6C AS KS 7S JD\nJH 7C 9H 7H TC 5H 3D 6D 5D 4D\n2C QD JH 2H 9D 5S 3D TD AD KS\nJD QH 3S 4D TH 7D 6S QS KS 4H\nTC KS 5S 8D 8H AD 2S 2D 4C JH\n5S JH TC 3S 2D QS 9D 4C KD 9S\nAC KH 3H AS 9D KC 9H QD 6C 6S\n9H 7S 3D 5C 7D KC TD 8H 4H 6S\n3C 7H 8H TC QD 4D 7S 6S QH 6C\n6D AD 4C QD 6C 5D 7D 9D KS TS\nJH 2H JD 9S 7S TS KH 8D 5D 8H\n2D 9S 4C 7D 9D 5H QD 6D AC 6S\n7S 6D JC QD JH 4C 6S QS 2H 7D\n8C TD JH KD 2H 5C QS 2C JS 7S\nTC 5H 4H JH QD 3S 5S 5D 8S KH\nKS KH 7C 2C 5D JH 6S 9C 6D JC\n5H AH JD 9C JS KC 2H 6H 4D 5S\nAS 3C TH QC 6H 9C 8S 8C TD 7C\nKC 2C QD 9C KH 4D 7S 3C TS 9H\n9C QC 2S TS 8C TD 9S QD 3S 3C\n4D 9D TH JH AH 6S 2S JD QH JS\nQD 9H 6C KD 7D 7H 5D 6S 8H AH\n8H 3C 4S 2H 5H QS QH 7S 4H AC\nQS 3C 7S 9S 4H 3S AH KS 9D 7C\nAD 5S 6S 2H 2D 5H TC 4S 3C 8C\nQH TS 6S 4D JS KS JH AS 8S 6D\n2C 8S 2S TD 5H AS TC TS 6C KC\nKC TS 8H 2H 3H 7C 4C 5S TH TD\nKD AD KH 7H 7S 5D 5H 5S 2D 9C\nAD 9S 3D 7S 8C QC 7C 9C KD KS\n3C QC 9S 8C 4D 5C AS QD 6C 2C\n2H KC 8S JD 7S AC 8D 5C 2S 4D\n9D QH 3D 2S TC 3S KS 3C 9H TD\nKD 6S AC 2C 7H 5H 3S 6C 6H 8C\nQH TC 8S 6S KH TH 4H 5D TS 4D\n8C JS 4H 6H 2C 2H 7D AC QD 3D\nQS KC 6S 2D 5S 4H TD 3H JH 4C\n7S 5H 7H 8H KH 6H QS TH KD 7D\n5H AD KD 7C KH 5S TD 6D 3C 6C\n8C 9C 5H JD 7C KC KH 7H 2H 3S\n7S 4H AD 4D 8S QS TH 3D 7H 5S\n8D TC KS KD 9S 6D AD JD 5C 2S\n7H 8H 6C QD 2H 6H 9D TC 9S 7C\n8D 6D 4C 7C 6C 3C TH KH JS JH\n5S 3S 8S JS 9H AS AD 8H 7S KD\nJH 7C 2C KC 5H AS AD 9C 9S JS\nAD AC 2C 6S QD 7C 3H TH KS KD\n9D JD 4H 8H 4C KH 7S TS 8C KC\n3S 5S 2H 7S 6H 7D KS 5C 6D AD\n5S 8C 9H QS 7H 7S 2H 6C 7D TD\nQS 5S TD AC 9D KC 3D TC 2D 4D\nTD 2H 7D JD QD 4C 7H 5D KC 3D\n4C 3H 8S KD QH 5S QC 9H TC 5H\n9C QD TH 5H TS 5C 9H AH QH 2C\n4D 6S 3C AC 6C 3D 2C 2H TD TH\nAC 9C 5D QC 4D AD 8D 6D 8C KC\nAD 3C 4H AC 8D 8H 7S 9S TD JC\n4H 9H QH JS 2D TH TD TC KD KS\n5S 6S 9S 8D TH AS KH 5H 5C 8S\nJD 2S 9S 6S 5S 8S 5D 7S 7H 9D\n5D 8C 4C 9D AD TS 2C 7D KD TC\n8S QS 4D KC 5C 8D 4S KH JD KD\nAS 5C AD QH 7D 2H 9S 7H 7C TC\n2S 8S JD KH 7S 6C 6D AD 5D QC\n9H 6H 3S 8C 8H AH TC 4H JS TD\n2C TS 4D 7H 2D QC 9C 5D TH 7C\n6C 8H QC 5D TS JH 5C 5H 9H 4S\n2D QC 7H AS JS 8S 2H 4C 4H 8D\nJS 6S AC KD 3D 3C 4S 7H TH KC\nQH KH 6S QS 5S 4H 3C QD 3S 3H\n7H AS KH 8C 4H 9C 5S 3D 6S TS\n9C 7C 3H 5S QD 2C 3D AD AC 5H\nJH TD 2D 4C TS 3H KH AD 3S 7S\nAS 4C 5H 4D 6S KD JC 3C 6H 2D\n3H 6S 8C 2D TH 4S AH QH AD 5H\n7C 2S 9H 7H KC 5C 6D 5S 3H JC\n3C TC 9C 4H QD TD JH 6D 9H 5S\n7C 6S 5C 5D 6C 4S 7H 9H 6H AH\nAD 2H 7D KC 2C 4C 2S 9S 7H 3S\nTH 4C 8S 6S 3S AD KS AS JH TD\n5C TD 4S 4D AD 6S 5D TC 9C 7D\n8H 3S 4D 4S 5S 6H 5C AC 3H 3D\n9H 3C AC 4S QS 8S 9D QH 5H 4D\nJC 6C 5H TS AC 9C JD 8C 7C QD\n8S 8H 9C JD 2D QC QH 6H 3C 8D\nKS JS 2H 6H 5H QH QS 3H 7C 6D\nTC 3H 4S 7H QC 2H 3S 8C JS KH\nAH 8H 5S 4C 9H JD 3H 7S JC AC\n3C 2D 4C 5S 6C 4S QS 3S JD 3D\n5H 2D TC AH KS 6D 7H AD 8C 6H\n6C 7S 3C JD 7C 8H KS KH AH 6D\nAH 7D 3H 8H 8S 7H QS 5H 9D 2D\nJD AC 4H 7S 8S 9S KS AS 9D QH\n7S 2C 8S 5S JH QS JC AH KD 4C\nAH 2S 9H 4H 8D TS TD 6H QH JD\n4H JC 3H QS 6D 7S 9C 8S 9D 8D\n5H TD 4S 9S 4C 8C 8D 7H 3H 3D\nQS KH 3S 2C 2S 3C 7S TD 4S QD\n7C TD 4D 5S KH AC AS 7H 4C 6C\n2S 5H 6D JD 9H QS 8S 2C 2H TD\n2S TS 6H 9H 7S 4H JC 4C 5D 5S\n2C 5H 7D 4H 3S QH JC JS 6D 8H\n4C QH 7C QD 3S AD TH 8S 5S TS\n9H TC 2S TD JC 7D 3S 3D TH QH\n7D 4C 8S 5C JH 8H 6S 3S KC 3H\nJC 3H KH TC QH TH 6H 2C AC 5H\nQS 2H 9D 2C AS 6S 6C 2S 8C 8S\n9H 7D QC TH 4H KD QS AC 7S 3C\n4D JH 6S 5S 8H KS 9S QC 3S AS\nJD 2D 6S 7S TC 9H KC 3H 7D KD\n2H KH 7C 4D 4S 3H JS QD 7D KC\n4C JC AS 9D 3C JS 6C 8H QD 4D\nAH JS 3S 6C 4C 3D JH 6D 9C 9H\n9H 2D 8C 7H 5S KS 6H 9C 2S TC\n6C 8C AD 7H 6H 3D KH AS 5D TH\nKS 8C 3S TS 8S 4D 5S 9S 6C 4H\n9H 4S 4H 5C 7D KC 2D 2H 9D JH\n5C JS TC 9D 9H 5H 7S KH JC 6S\n7C 9H 8H 4D JC KH JD 2H TD TC\n8H 6C 2H 2C KH 6H 9D QS QH 5H\nAC 7D 2S 3D QD JC 2D 8D JD JH\n2H JC 2D 7H 2C 3C 8D KD TD 4H\n3S 4H 6D 8D TS 3H TD 3D 6H TH\nJH JC 3S AC QH 9H 7H 8S QC 2C\n7H TD QS 4S 8S 9C 2S 5D 4D 2H\n3D TS 3H 2S QC 8H 6H KC JC KS\n5D JD 7D TC 8C 6C 9S 3D 8D AC\n8H 6H JH 6C 5D 8D 8S 4H AD 2C\n9D 4H 2D 2C 3S TS AS TC 3C 5D\n4D TH 5H KS QS 6C 4S 2H 3D AD\n5C KC 6H 2C 5S 3C 4D 2D 9H 9S\nJD 4C 3H TH QH 9H 5S AH 8S AC\n7D 9S 6S 2H TD 9C 4H 8H QS 4C\n3C 6H 5D 4H 8C 9C KC 6S QD QS\n3S 9H KD TC 2D JS 8C 6S 4H 4S\n2S 4C 8S QS 6H KH 3H TH 8C 5D\n2C KH 5S 3S 7S 7H 6C 9D QD 8D\n8H KS AC 2D KH TS 6C JS KC 7H\n9C KS 5C TD QC AH 6C 5H 9S 7C\n5D 4D 3H 4H 6S 7C 7S AH QD TD\n2H 7D QC 6S TC TS AH 7S 9D 3H\nTH 5H QD 9S KS 7S 7C 6H 8C TD\nTH 2D 4D QC 5C 7D JD AH 9C 4H\n4H 3H AH 8D 6H QC QH 9H 2H 2C\n2D AD 4C TS 6H 7S TH 4H QS TD\n3C KD 2H 3H QS JD TC QC 5D 8H\nKS JC QD TH 9S KD 8D 8C 2D 9C\n3C QD KD 6D 4D 8D AH AD QC 8S\n8H 3S 9D 2S 3H KS 6H 4C 7C KC\nTH 9S 5C 3D 7D 6H AC 7S 4D 2C\n5C 3D JD 4D 2D 6D 5H 9H 4C KH\nAS 7H TD 6C 2H 3D QD KS 4C 4S\nJC 3C AC 7C JD JS 8H 9S QC 5D\nJD 6S 5S 2H AS 8C 7D 5H JH 3D\n8D TC 5S 9S 8S 3H JC 5H 7S AS\n5C TD 3D 7D 4H 8D 7H 4D 5D JS\nQS 9C KS TD 2S 8S 5C 2H 4H AS\nTH 7S 4H 7D 3H JD KD 5D 2S KC\nJD 7H 4S 8H 4C JS 6H QH 5S 4H\n2C QS 8C 5S 3H QC 2S 6C QD AD\n8C 3D JD TC 4H 2H AD 5S AC 2S\n5D 2C JS 2D AD 9D 3D 4C 4S JH\n8D 5H 5D 6H 7S 4D KS 9D TD JD\n3D 6D 9C 2S AS 7D 5S 5C 8H JD\n7C 8S 3S 6S 5H JD TC AD 7H 7S\n2S 9D TS 4D AC 8D 6C QD JD 3H\n9S KH 2C 3C AC 3D 5H 6H 8D 5D\nKS 3D 2D 6S AS 4C 2S 7C 7H KH\nAC 2H 3S JC 5C QH 4D 2D 5H 7S\nTS AS JD 8C 6H JC 8S 5S 2C 5D\n7S QH 7H 6C QC 8H 2D 7C JD 2S\n2C QD 2S 2H JC 9C 5D 2D JD JH\n7C 5C 9C 8S 7D 6D 8D 6C 9S JH\n2C AD 6S 5H 3S KS 7S 9D KH 4C\n7H 6C 2C 5C TH 9D 8D 3S QC AH\n5S KC 6H TC 5H 8S TH 6D 3C AH\n9C KD 4H AD TD 9S 4S 7D 6H 5D\n7H 5C 5H 6D AS 4C KD KH 4H 9D\n3C 2S 5C 6C JD QS 2H 9D 7D 3H\nAC 2S 6S 7S JS QD 5C QS 6H AD\n5H TH QC 7H TC 3S 7C 6D KC 3D\n4H 3D QC 9S 8H 2C 3S JC KS 5C\n4S 6S 2C 6H 8S 3S 3D 9H 3H JS\n4S 8C 4D 2D 8H 9H 7D 9D AH TS\n9S 2C 9H 4C 8D AS 7D 3D 6D 5S\n6S 4C 7H 8C 3H 5H JC AH 9D 9C\n2S 7C 5S JD 8C 3S 3D 4D 7D 6S\n3C KC 4S 5D 7D 3D JD 7H 3H 4H\n9C 9H 4H 4D TH 6D QD 8S 9S 7S\n2H AC 8S 4S AD 8C 2C AH 7D TC\nTS 9H 3C AD KS TC 3D 8C 8H JD\nQC 8D 2C 3C 7D 7C JD 9H 9C 6C\nAH 6S JS JH 5D AS QC 2C JD TD\n9H KD 2H 5D 2D 3S 7D TC AH TS\nTD 8H AS 5D AH QC AC 6S TC 5H\nKS 4S 7H 4D 8D 9C TC 2H 6H 3H\n3H KD 4S QD QH 3D 8H 8C TD 7S\n8S JD TC AH JS QS 2D KH KS 4D\n3C AD JC KD JS KH 4S TH 9H 2C\nQC 5S JS 9S KS AS 7C QD 2S JD\nKC 5S QS 3S 2D AC 5D 9H 8H KS\n6H 9C TC AD 2C 6D 5S JD 6C 7C\nQS KH TD QD 2C 3H 8S 2S QC AH\n9D 9H JH TC QH 3C 2S JS 5C 7H\n6C 3S 3D 2S 4S QD 2D TH 5D 2C\n2D 6H 6D 2S JC QH AS 7H 4H KH\n5H 6S KS AD TC TS 7C AC 4S 4H\nAD 3C 4H QS 8C 9D KS 2H 2D 4D\n4S 9D 6C 6D 9C AC 8D 3H 7H KD\nJC AH 6C TS JD 6D AD 3S 5D QD\nJC JH JD 3S 7S 8S JS QC 3H 4S\nJD TH 5C 2C AD JS 7H 9S 2H 7S\n8D 3S JH 4D QC AS JD 2C KC 6H\n2C AC 5H KD 5S 7H QD JH AH 2D\nJC QH 8D 8S TC 5H 5C AH 8C 6C\n3H JS 8S QD JH 3C 4H 6D 5C 3S\n6D 4S 4C AH 5H 5S 3H JD 7C 8D\n8H AH 2H 3H JS 3C 7D QC 4H KD\n6S 2H KD 5H 8H 2D 3C 8S 7S QD\n2S 7S KC QC AH TC QS 6D 4C 8D\n5S 9H 2C 3S QD 7S 6C 2H 7C 9D\n3C 6C 5C 5S JD JC KS 3S 5D TS\n7C KS 6S 5S 2S 2D TC 2H 5H QS\nAS 7H 6S TS 5H 9S 9D 3C KD 2H\n4S JS QS 3S 4H 7C 2S AC 6S 9D\n8C JH 2H 5H 7C 5D QH QS KH QC\n3S TD 3H 7C KC 8D 5H 8S KH 8C\n4H KH JD TS 3C 7H AS QC JS 5S\nAH 9D 2C 8D 4D 2D 6H 6C KC 6S\n2S 6H 9D 3S 7H 4D KH 8H KD 3D\n9C TC AC JH KH 4D JD 5H TD 3S\n7S 4H 9D AS 4C 7D QS 9S 2S KH\n3S 8D 8S KS 8C JC 5C KH 2H 5D\n8S QH 2C 4D KC JS QC 9D AC 6H\n8S 8C 7C JS JD 6S 4C 9C AC 4S\nQH 5D 2C 7D JC 8S 2D JS JH 4C\nJS 4C 7S TS JH KC KH 5H QD 4S\nQD 8C 8D 2D 6S TD 9D AC QH 5S\nQH QC JS 3D 3C 5C 4H KH 8S 7H\n7C 2C 5S JC 8S 3H QC 5D 2H KC\n5S 8D KD 6H 4H QD QH 6D AH 3D\n7S KS 6C 2S 4D AC QS 5H TS JD\n7C 2D TC 5D QS AC JS QC 6C KC\n2C KS 4D 3H TS 8S AD 4H 7S 9S\nQD 9H QH 5H 4H 4D KH 3S JC AD\n4D AC KC 8D 6D 4C 2D KH 2C JD\n2C 9H 2D AH 3H 6D 9C 7D TC KS\n8C 3H KD 7C 5C 2S 4S 5H AS AH\nTH JD 4H KD 3H TC 5C 3S AC KH\n6D 7H AH 7S QC 6H 2D TD JD AS\nJH 5D 7H TC 9S 7D JC AS 5S KH\n2H 8C AD TH 6H QD KD 9H 6S 6C\nQH KC 9D 4D 3S JS JH 4H 2C 9H\nTC 7H KH 4H JC 7D 9S 3H QS 7S\nAD 7D JH 6C 7H 4H 3S 3H 4D QH\nJD 2H 5C AS 6C QC 4D 3C TC JH\nAC JD 3H 6H 4C JC AD 7D 7H 9H\n4H TC TS 2C 8C 6S KS 2H JD 9S\n4C 3H QS QC 9S 9H 6D KC 9D 9C\n5C AD 8C 2C QH TH QD JC 8D 8H\nQC 2C 2S QD 9C 4D 3S 8D JH QS\n9D 3S 2C 7S 7C JC TD 3C TC 9H\n3C TS 8H 5C 4C 2C 6S 8D 7C 4H\nKS 7H 2H TC 4H 2C 3S AS AH QS\n8C 2D 2H 2C 4S 4C 6S 7D 5S 3S\nTH QC 5D TD 3C QS KD KC KS AS\n4D AH KD 9H KS 5C 4C 6H JC 7S\nKC 4H 5C QS TC 2H JC 9S AH QH\n4S 9H 3H 5H 3C QD 2H QC JH 8H\n5D AS 7H 2C 3D JH 6H 4C 6S 7D\n9C JD 9H AH JS 8S QH 3H KS 8H\n3S AC QC TS 4D AD 3D AH 8S 9H\n7H 3H QS 9C 9S 5H JH JS AH AC\n8D 3C JD 2H AC 9C 7H 5S 4D 8H\n7C JH 9H 6C JS 9S 7H 8C 9D 4H\n2D AS 9S 6H 4D JS JH 9H AD QD\n6H 7S JH KH AH 7H TD 5S 6S 2C\n8H JH 6S 5H 5S 9D TC 4C QC 9S\n7D 2C KD 3H 5H AS QD 7H JS 4D\nTS QH 6C 8H TH 5H 3C 3H 9C 9D\nAD KH JS 5D 3H AS AC 9S 5C KC\n2C KH 8C JC QS 6D AH 2D KC TC\n9D 3H 2S 7C 4D 6D KH KS 8D 7D\n9H 2S TC JH AC QC 3H 5S 3S 8H\n3S AS KD 8H 4C 3H 7C JH QH TS\n7S 6D 7H 9D JH 4C 3D 3S 6C AS\n4S 2H 2C 4C 8S 5H KC 8C QC QD\n3H 3S 6C QS QC 2D 6S 5D 2C 9D\n2H 8D JH 2S 3H 2D 6C 5C 7S AD\n9H JS 5D QH 8S TS 2H 7S 6S AD\n6D QC 9S 7H 5H 5C 7D KC JD 4H\nQC 5S 9H 9C 4D 6S KS 2S 4C 7C\n9H 7C 4H 8D 3S 6H 5C 8H JS 7S\n2D 6H JS TD 4H 4D JC TH 5H KC\nAC 7C 8D TH 3H 9S 2D 4C KC 4D\nKD QS 9C 7S 3D KS AD TS 4C 4H\nQH 9C 8H 2S 7D KS 7H 5D KD 4C\n9C 2S 2H JC 6S 6C TC QC JH 5C\n7S AC 8H KC 8S 6H QS JC 3D 6S\nJS 2D JH 8C 4S 6H 8H 6D 5D AD\n6H 7D 2S 4H 9H 7C AS AC 8H 5S\n3C JS 4S 6D 5H 2S QH 6S 9C 2C\n3D 5S 6S 9S 4C QS 8D QD 8S TC\n9C 3D AH 9H 5S 2C 7D AD JC 3S\n7H TC AS 3C 6S 6D 7S KH KC 9H\n3S TC 8H 6S 5H JH 8C 7D AC 2S\nQD 9D 9C 3S JC 8C KS 8H 5D 4D\nJS AH JD 6D 9D 8C 9H 9S 8H 3H\n2D 6S 4C 4D 8S AD 4S TC AH 9H\nTS AC QC TH KC 6D 4H 7S 8C 2H\n3C QD JS 9D 5S JC AH 2H TS 9H\n3H 4D QH 5D 9C 5H 7D 4S JC 3S\n8S TH 3H 7C 2H JD JS TS AC 8D\n9C 2H TD KC JD 2S 8C 5S AD 2C\n3D KD 7C 5H 4D QH QD TC 6H 7D\n7H 2C KC 5S KD 6H AH QC 7S QH\n6H 5C AC 5H 2C 9C 2D 7C TD 2S\n4D 9D AH 3D 7C JD 4H 8C 4C KS\nTH 3C JS QH 8H 4C AS 3D QS QC\n4D 7S 5H JH 6D 7D 6H JS KH 3C\nQD 8S 7D 2H 2C 7C JC 2S 5H 8C\nQH 8S 9D TC 2H AD 7C 8D QD 6S\n3S 7C AD 9H 2H 9S JD TS 4C 2D\n3S AS 4H QC 2C 8H 8S 7S TD TC\nJH TH TD 3S 4D 4H 5S 5D QS 2C\n8C QD QH TC 6D 4S 9S 9D 4H QC\n8C JS 9D 6H JD 3H AD 6S TD QC\nKC 8S 3D 7C TD 7D 8D 9H 4S 3S\n6C 4S 3D 9D KD TC KC KS AC 5S\n7C 6S QH 3D JS KD 6H 6D 2D 8C\nJD 2S 5S 4H 8S AC 2D 6S TS 5C\n5H 8C 5S 3C 4S 3D 7C 8D AS 3H\nAS TS 7C 3H AD 7D JC QS 6C 6H\n3S 9S 4C AC QH 5H 5D 9H TS 4H\n6C 5C 7H 7S TD AD JD 5S 2H 2S\n7D 6C KC 3S JD 8D 8S TS QS KH\n8S QS 8D 6C TH AC AH 2C 8H 9S\n7H TD KH QH 8S 3D 4D AH JD AS\nTS 3D 2H JC 2S JH KH 6C QC JS\nKC TH 2D 6H 7S 2S TC 8C 9D QS\n3C 9D 6S KH 8H 6D 5D TH 2C 2H\n6H TC 7D AD 4D 8S TS 9H TD 7S\nJS 6D JD JC 2H AC 6C 3D KH 8D\nKH JD 9S 5D 4H 4C 3H 7S QS 5C\n4H JD 5D 3S 3C 4D KH QH QS 7S\nJD TS 8S QD AH 4C 6H 3S 5S 2C\nQS 3D JD AS 8D TH 7C 6S QC KS\n7S 2H 8C QC 7H AC 6D 2D TH KH\n5S 6C 7H KH 7D AH 8C 5C 7S 3D\n3C KD AD 7D 6C 4D KS 2D 8C 4S\n7C 8D 5S 2D 2S AH AD 2C 9D TD\n3C AD 4S KS JH 7C 5C 8C 9C TH\nAS TD 4D 7C JD 8C QH 3C 5H 9S\n3H 9C 8S 9S 6S QD KS AH 5H JH\nQC 9C 5S 4H 2H TD 7D AS 8C 9D\n8C 2C 9D KD TC 7S 3D KH QC 3C\n4D AS 4C QS 5S 9D 6S JD QH KS\n6D AH 6C 4C 5H TS 9H 7D 3D 5S\nQS JD 7C 8D 9C AC 3S 6S 6C KH\n8H JH 5D 9S 6D AS 6S 3S QC 7H\nQD AD 5C JH 2H AH 4H AS KC 2C\nJH 9C 2C 6H 2D JS 5D 9H KC 6D\n7D 9D KD TH 3H AS 6S QC 6H AD\nJD 4H 7D KC 3H JS 3C TH 3D QS\n4C 3H 8C QD 5H 6H AS 8H AD JD\nTH 8S KD 5D QC 7D JS 5S 5H TS\n7D KC 9D QS 3H 3C 6D TS 7S AH\n7C 4H 7H AH QC AC 4D 5D 6D TH\n3C 4H 2S KD 8H 5H JH TC 6C JD\n4S 8C 3D 4H JS TD 7S JH QS KD\n7C QC KD 4D 7H 6S AD TD TC KH\n5H 9H KC 3H 4D 3D AD 6S QD 6H\nTH 7C 6H TS QH 5S 2C KC TD 6S\n7C 4D 5S JD JH 7D AC KD KH 4H\n7D 6C 8D 8H 5C JH 8S QD TH JD\n8D 7D 6C 7C 9D KD AS 5C QH JH\n9S 2C 8C 3C 4C KS JH 2D 8D 4H\n7S 6C JH KH 8H 3H 9D 2D AH 6D\n4D TC 9C 8D 7H TD KS TH KD 3C\nJD 9H 8D QD AS KD 9D 2C 2S 9C\n8D 3H 5C 7H KS 5H QH 2D 8C 9H\n2D TH 6D QD 6C KC 3H 3S AD 4C\n4H 3H JS 9D 3C TC 5H QH QC JC\n3D 5C 6H 3S 3C JC 5S 7S 2S QH\nAC 5C 8C 4D 5D 4H 2S QD 3C 3H\n2C TD AH 9C KD JS 6S QD 4C QC\nQS 8C 3S 4H TC JS 3H 7C JC AD\n5H 4D 9C KS JC TD 9S TS 8S 9H\nQD TS 7D AS AC 2C TD 6H 8H AH\n6S AD 8C 4S 9H 8D 9D KH 8S 3C\nQS 4D 2D 7S KH JS JC AD 4C 3C\nQS 9S 7H KC TD TH 5H JS AC JH\n6D AC 2S QS 7C AS KS 6S KH 5S\n6D 8H KH 3C QS 2H 5C 9C 9D 6C\nJS 2C 4C 6H 7D JC AC QD TD 3H\n4H QC 8H JD 4C KD KS 5C KC 7S\n6D 2D 3H 2S QD 5S 7H AS TH 6S\nAS 6D 8D 2C 8S TD 8H QD JC AH\n9C 9H 2D TD QH 2H 5C TC 3D 8H\nKC 8S 3D KH 2S TS TC 6S 4D JH\n9H 9D QS AC KC 6H 5D 4D 8D AH\n9S 5C QS 4H 7C 7D 2H 8S AD JS\n3D AC 9S AS 2C 2D 2H 3H JC KH\n7H QH KH JD TC KS 5S 8H 4C 8D\n2H 7H 3S 2S 5H QS 3C AS 9H KD\nAD 3D JD 6H 5S 9C 6D AC 9S 3S\n3D 5D 9C 2D AC 4S 2S AD 6C 6S\nQC 4C 2D 3H 6S KC QH QD 2H JH\nQC 3C 8S 4D 9S 2H 5C 8H QS QD\n6D KD 6S 7H 3S KH 2H 5C JC 6C\n3S 9S TC 6S 8H 2D AD 7S 8S TS\n3C 6H 9C 3H 5C JC 8H QH TD QD\n3C JS QD 5D TD 2C KH 9H TH AS\n9S TC JD 3D 5C 5H AD QH 9H KC\nTC 7H 4H 8H 3H TD 6S AC 7C 2S\nQS 9D 5D 3C JC KS 4D 6C JH 2S\n9S 6S 3C 7H TS 4C KD 6D 3D 9C\n2D 9H AH AC 7H 2S JH 3S 7C QC\nQD 9H 3C 2H AC AS 8S KD 8C KH\n2D 7S TD TH 6D JD 8D 4D 2H 5S\n8S QH KD JD QS JH 4D KC 5H 3S\n3C KH QC 6D 8H 3S AH 7D TD 2D\n5S 9H QH 4S 6S 6C 6D TS TH 7S\n6C 4C 6D QS JS 9C TS 3H 8D 8S\nJS 5C 7S AS 2C AH 2H AD 5S TC\nKD 6C 9C 9D TS 2S JC 4H 2C QD\nQS 9H TC 3H KC KS 4H 3C AD TH\nKH 9C 2H KD 9D TC 7S KC JH 2D\n7C 3S KC AS 8C 5D 9C 9S QH 3H\n2D 8C TD 4C 2H QC 5D TC 2C 7D\nKS 4D 6C QH TD KH 5D 7C AD 8D\n2S 9S 8S 4C 8C 3D 6H QD 7C 7H\n6C 8S QH 5H TS 5C 3C 4S 2S 2H\n8S 6S 2H JC 3S 3H 9D 8C 2S 7H\nQC 2C 8H 9C AC JD 4C 4H 6S 3S\n3H 3S 7D 4C 9S 5H 8H JC 3D TC\nQH 2S 2D 9S KD QD 9H AD 6D 9C\n8D 2D KS 9S JC 4C JD KC 4S TH\nKH TS 6D 4D 5C KD 5H AS 9H AD\nQD JS 7C 6D 5D 5C TH 5H QH QS\n9D QH KH 5H JH 4C 4D TC TH 6C\nKH AS TS 9D KD 9C 7S 4D 8H 5S\nKH AS 2S 7D 9D 4C TS TH AH 7C\nKS 4D AC 8S 9S 8D TH QH 9D 5C\n5D 5C 8C QS TC 4C 3D 3S 2C 8D\n9D KS 2D 3C KC 4S 8C KH 6C JC\n8H AH 6H 7D 7S QD 3C 4C 6C KC\n3H 2C QH 8H AS 7D 4C 8C 4H KC\nQD 5S 4H 2C TD AH JH QH 4C 8S\n3H QS 5S JS 8H 2S 9H 9C 3S 2C\n6H TS 7S JC QD AC TD KC 5S 3H\nQH AS QS 7D JC KC 2C 4C 5C 5S\nQH 3D AS JS 4H 8D 7H JC 2S 9C\n5D 4D 2S 4S 9D 9C 2D QS 8H 7H\n6D 7H 3H JS TS AC 2D JH 7C 8S\nJH 5H KC 3C TC 5S 9H 4C 8H 9D\n8S KC 5H 9H AD KS 9D KH 8D AH\nJC 2H 9H KS 6S 3H QC 5H AH 9C\n5C KH 5S AD 6C JC 9H QC 9C TD\n5S 5D JC QH 2D KS 8H QS 2H TS\nJH 5H 5S AH 7H 3C 8S AS TD KH\n6H 3D JD 2C 4C KC 7S AH 6C JH\n4C KS 9D AD 7S KC 7D 8H 3S 9C\n7H 5C 5H 3C 8H QC 3D KH 6D JC\n2D 4H 5D 7D QC AD AH 9H QH 8H\nKD 8C JS 9D 3S 3C 2H 5D 6D 2S\n8S 6S TS 3C 6H 8D 5S 3H TD 6C\nKS 3D JH 9C 7C 9S QS 5S 4H 6H\n7S 6S TH 4S KC KD 3S JC JH KS\n7C 3C 2S 6D QH 2C 7S 5H 8H AH\nKC 8D QD 6D KH 5C 7H 9D 3D 9C\n6H 2D 8S JS 9S 2S 6D KC 7C TC\nKD 9C JH 7H KC 8S 2S 7S 3D 6H\n4H 9H 2D 4C 8H 7H 5S 8S 2H 8D\nAD 7C 3C 7S 5S 4D 9H 3D JC KH\n5D AS 7D 6D 9C JC 4C QH QS KH\nKD JD 7D 3D QS QC 8S 6D JS QD\n6S 8C 5S QH TH 9H AS AC 2C JD\nQC KS QH 7S 3C 4C 5C KC 5D AH\n6C 4H 9D AH 2C 3H KD 3D TS 5C\nTD 8S QS AS JS 3H KD AC 4H KS\n7D 5D TS 9H 4H 4C 9C 2H 8C QC\n2C 7D 9H 4D KS 4C QH AD KD JS\nQD AD AH KH 9D JS 9H JC KD JD\n8S 3C 4S TS 7S 4D 5C 2S 6H 7C\nJS 7S 5C KD 6D QH 8S TD 2H 6S\nQH 6C TC 6H TD 4C 9D 2H QC 8H\n3D TS 4D 2H 6H 6S 2C 7H 8S 6C\n9H 9D JD JH 3S AH 2C 6S 3H 8S\n2C QS 8C 5S 3H 2S 7D 3C AD 4S\n5C QC QH AS TS 4S 6S 4C 5H JS\nJH 5C TD 4C 6H JS KD KH QS 4H\nTC KH JC 4D 9H 9D 8D KC 3C 8H\n2H TC 8S AD 9S 4H TS 7H 2C 5C\n4H 2S 6C 5S KS AH 9C 7C 8H KD\nTS QH TD QS 3C JH AH 2C 8D 7D\n5D KC 3H 5S AC 4S 7H QS 4C 2H\n3D 7D QC KH JH 6D 6C TD TH KD\n5S 8D TH 6C 9D 7D KH 8C 9S 6D\nJD QS 7S QC 2S QH JC 4S KS 8D\n7S 5S 9S JD KD 9C JC AD 2D 7C\n4S 5H AH JH 9C 5D TD 7C 2D 6S\nKC 6C 7H 6S 9C QD 5S 4H KS TD\n6S 8D KS 2D TH TD 9H JD TS 3S\nKH JS 4H 5D 9D TC TD QC JD TS\nQS QD AC AD 4C 6S 2D AS 3H KC\n4C 7C 3C TD QS 9C KC AS 8D AD\nKC 7H QC 6D 8H 6S 5S AH 7S 8C\n3S AD 9H JC 6D JD AS KH 6S JH\nAD 3D TS KS 7H JH 2D JS QD AC\n9C JD 7C 6D TC 6H 6C JC 3D 3S\nQC KC 3S JC KD 2C 8D AH QS TS\nAS KD 3D JD 8H 7C 8C 5C QD 6C\n"
  },
  {
    "path": "Problem055/.hash",
    "content": "077e29b11be80ab57e1a2ecabb7da330"
  },
  {
    "path": "Problem055/CommonLisp/solution_1.lisp",
    "content": ";; Common Lisp Script\n;; Manoel Vilela\n\n(defmacro memoize (func)\n  `(let ((table (make-hash-table :size 10000))\n         (old-function (symbol-function ',func)))\n     (defun ,func (x &rest tail)\n       (multiple-value-bind\n             (value exists)\n           (gethash x table)\n         (if exists\n             value\n             (setf (gethash x table) (apply old-function (cons x tail))))))))\n\n\n(defun reverse-integer (n)\n  (labels ((next (n v)\n             (if (zerop n)\n                 v\n                 (multiple-value-bind (q r)\n                     (truncate n 10)\n                   (next q (+ (* v 10) r))))))\n    (next n 0)))\n\n(defun palindromep (n)\n  (= (reverse-integer n) n))\n\n\n(defun iterative-palindromep (n &optional (depth 50))\n  (unless (= depth 0)\n    (let ((next (+ n (reverse-integer n))))\n      (if (palindromep next)\n          t\n          (iterative-palindromep next (1- depth))))))\n\n(defun lychrelp (x)\n  (not (iterative-palindromep x)))\n\n\n(defun solution()\n  (memoize palindromep)\n  (memoize iterative-palindromep)\n  (memoize reverse-integer)\n  (loop for x from 1 below 10000\n        when (lychrelp x)\n          count x ))\n\n(princ (solution))\n"
  },
  {
    "path": "Problem055/Python/solution_1.py",
    "content": "#code created by NamanNimmo Gera\n#4:57pm, May 1, 2019.\n\ndef reverse(x):\n    return int(str(x)[::-1])\n\ndef Palindrome(x):\n    if x == reverse(x):\n        return True\n    else:\n        return False\n\n#function to check if a number is a Lychrel number or not\ndef checkLyr(x):\n    tot = 0\n    while True:\n        x  = x + reverse(x)\n        if Palindrome(x):\n            return False\n        else:\n            tot = tot + 1\n        if tot>50:\n            return True\n        \ncount = 0\nfor i in range(1,10000):\n    if checkLyr(i):\n        count = count + 1\nprint(count)        \n    \n"
  },
  {
    "path": "Problem055/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=55)\n"
  },
  {
    "path": "Problem056/.hash",
    "content": "c22abfa379f38b5b0411bc11fa9bf92f"
  },
  {
    "path": "Problem056/Clojure/solution_1.clj",
    "content": ";Author: tkovs\n\n(defn pow [x n]\n   (reduce *' (repeat n x)))\n\n(defn sum [x]\n    (apply + (map #(Integer. (str %)) (str x))))\n\n(defn solve []\n    (let [list (range 1 100)\n          numbers (mapcat (fn [x] (map (fn [y] (pow x y)) list)) list)\n          sumDigits (map sum numbers)]\n            (apply max sumDigits) ))\n\n(println (solve))"
  },
  {
    "path": "Problem056/CommonLisp/solution_1.lisp",
    "content": ";; Common Lisp Script\n;; Manoel Vilela\n\n(defun sum-digits (number &optional (base 10))\n  (loop for n = number then q\n        for (q r) = (multiple-value-list (truncate n base))\n        sum r until (zerop q)))\n\n(defun solution ()\n  (loop for a from 1 to 100\n        maximize (loop for b from 1 to 100\n                       maximize (sum-digits (expt a b)))))\n\n(format t \"~a~%\" (solution))\n"
  },
  {
    "path": "Problem056/Haskell/solution_1.hs",
    "content": "-- Author: tkovs\n\nnumbers :: [Integer]\nnumbers = [a^b | a <- [1..100], b <- [1..100]]\n\nsumDigits :: Integer -> Int\nsumDigits x = sum $ map (\\x -> (fromEnum x) - 48) $ show x\n\nsolve :: Int\nsolve = maximum $ map sumDigits numbers\n\nmain :: IO ()\nmain = do\n    print solve"
  },
  {
    "path": "Problem056/Python/solution_1.py",
    "content": "#code created by NamanNimmo Gera\n#2:25pm, April 12, 2019.\n\nhighest = 0\nfor i in range(90,100):\n    for j in range(90,100): #another brute force :D\n        if sum(map(int, str(i**j)))>highest:\n            highest = sum(map(int, str(i**j)))\n                #to calculate the sum of digits of the number(i**j)\nprint(highest) \n"
  },
  {
    "path": "Problem056/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=56)\n"
  },
  {
    "path": "Problem056/Ruby/solution_1.rb",
    "content": "#Author: tkovs\n\ndef solve\n    #generate list a^b | a <- [1..99] and b <- [1..99]\n    numbers = (1..99).flat_map{|a| (1..99).map{|b| a ** b}}\n    #map digits' sum of each number\n    sumDigits = numbers.map{|element| element.to_s.split('').map{|digit| digit.to_i}.inject(:+)}\n    #return the maximum value\n    return(sumDigits.max)\nend\n\nputs(solve)"
  },
  {
    "path": "Problem057/.hash",
    "content": "b3e3e393c77e35a4a3f3cbd1e429b5dc"
  },
  {
    "path": "Problem057/Haskell/solution_slow_1.hs",
    "content": "-- Author: Manoel Vilela\n-- Time: ~ 51s (how to improve?)\nimport Data.Ratio (numerator, denominator)\n\n-- recursive part\ncontinuedFraction :: Rational -> Rational -> Rational\ncontinuedFraction _ 0 = 0\ncontinuedFraction a 1 = a\ncontinuedFraction a n = a + 1/continuedFraction a (n-1)\n\nsqrt2Recursive :: Integer -> Rational\nsqrt2Recursive 0 = 0\nsqrt2Recursive n = 1 + 1/continuedFraction 2 (toRational n)\n\nnumGreaterThanDen :: Rational -> Bool\nnumGreaterThanDen r = let n = length $ show $ numerator r\n                          d = length $ show $ denominator r\n                       in n > d\n\nmain :: IO()\nmain = print $ length $ filter numGreaterThanDen $ map sqrt2Recursive [1..1000]\n"
  },
  {
    "path": "Problem057/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=57)\n"
  },
  {
    "path": "Problem058/.hash",
    "content": "b62fc92a2561538525c89be63f36bf7b"
  },
  {
    "path": "Problem058/Python/solution_1.py",
    "content": "import math\n\ndef is_prime(n):\n    if n%2 == 0:\n        return False\n    for i in range(3, math.floor(math.sqrt(n)) + 1, 2):\n        if n%i == 0:\n            return False\n    return True\n\n\nclass Problem058(object):\n\n\n    def __init__(self):\n        self.nprimes = 8\n        self.level = 7\n        self.prime_ratio = 0.62\n\n    def _diag_primes(self):\n        # Count primes on top left 3 corners\n        # 3n - k(n + 1) / k => {1, 2, 3}\n        return [is_prime(self.level**2 - self.level + 1),\n                is_prime(self.level**2 - 2*self.level + 2),\n                is_prime(self.level**2 - 3*self.level + 3)].count(True)\n\n    def _record_next_diag_primes(self):\n        self.level += 2\n        self.nprimes += self._diag_primes()\n        self.prime_ratio = self.nprimes / (self.level * 2 - 1)\n\n    def _solve(self, ratio_limit):\n        while self.prime_ratio > ratio_limit:\n            self._record_next_diag_primes()\n        return self.level\n\n    @classmethod\n    def solve(cls):\n        obj = object.__new__(cls)\n        obj.__init__()\n        return obj._solve(0.1)\n\n\nif __name__ == \"__main__\":\n    print(Problem058.solve())\n"
  },
  {
    "path": "Problem058/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=58)\n"
  },
  {
    "path": "Problem059/.hash",
    "content": "68f891fe214e2bfa07c998ad5d0a390f"
  },
  {
    "path": "Problem059/Haskell/solution_1.hs",
    "content": "{-- Author: Manoel Vilela --}\n\nimport Data.Char (chr, ord)\nimport Data.Bits (xor)\n\nparseFile :: String -> [Int]\nparseFile s = read (\"[\" ++ s ++ \"]\")\n\npasswords :: [[Int]]\npasswords = [map ord [a,b,c] | a <- ['a'..'z'],\n                               b <- ['a'..'z'],\n                               c <- ['a'..'z']]\n\napplyKey :: [Int] -> [Int] -> [Int]\napplyKey content pass = [ x `xor` y | (x,y) <- pairs]\n  where pairs = zip content $ concat $ repeat pass\n\n\ncheckIt :: [Int] -> Bool\ncheckIt = all commonAscii\n  where commonAscii x = x `elem` asciiNumbers ++ asciiPunct\n                        || asciiLower x || asciiUpper x\n        asciiNumbers = [48..57]\n        asciiPunct = [32,33,34,39,40,41,44,45,46,58,59]\n        asciiLower x = x >= 97 && x <= 122\n        asciiUpper x = x >= 65 && x <= 90\n\ndecrypt :: [Int] -> [Int]\ndecrypt codes = head [decrypted | pass <- passwords,\n                             let decrypted = applyKey codes pass,\n                             checkIt decrypted]\n\nmain = do content <- readFile \"../p059_cipher.txt\"\n          print $ sum $ decrypt $ parseFile (head (lines content))\n"
  },
  {
    "path": "Problem059/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=59)\n"
  },
  {
    "path": "Problem059/p059_cipher.txt",
    "content": "79,59,12,2,79,35,8,28,20,2,3,68,8,9,68,45,0,12,9,67,68,4,7,5,23,27,1,21,79,85,78,79,85,71,38,10,71,27,12,2,79,6,2,8,13,9,1,13,9,8,68,19,7,1,71,56,11,21,11,68,6,3,22,2,14,0,30,79,1,31,6,23,19,10,0,73,79,44,2,79,19,6,28,68,16,6,16,15,79,35,8,11,72,71,14,10,3,79,12,2,79,19,6,28,68,32,0,0,73,79,86,71,39,1,71,24,5,20,79,13,9,79,16,15,10,68,5,10,3,14,1,10,14,1,3,71,24,13,19,7,68,32,0,0,73,79,87,71,39,1,71,12,22,2,14,16,2,11,68,2,25,1,21,22,16,15,6,10,0,79,16,15,10,22,2,79,13,20,65,68,41,0,16,15,6,10,0,79,1,31,6,23,19,28,68,19,7,5,19,79,12,2,79,0,14,11,10,64,27,68,10,14,15,2,65,68,83,79,40,14,9,1,71,6,16,20,10,8,1,79,19,6,28,68,14,1,68,15,6,9,75,79,5,9,11,68,19,7,13,20,79,8,14,9,1,71,8,13,17,10,23,71,3,13,0,7,16,71,27,11,71,10,18,2,29,29,8,1,1,73,79,81,71,59,12,2,79,8,14,8,12,19,79,23,15,6,10,2,28,68,19,7,22,8,26,3,15,79,16,15,10,68,3,14,22,12,1,1,20,28,72,71,14,10,3,79,16,15,10,68,3,14,22,12,1,1,20,28,68,4,14,10,71,1,1,17,10,22,71,10,28,19,6,10,0,26,13,20,7,68,14,27,74,71,89,68,32,0,0,71,28,1,9,27,68,45,0,12,9,79,16,15,10,68,37,14,20,19,6,23,19,79,83,71,27,11,71,27,1,11,3,68,2,25,1,21,22,11,9,10,68,6,13,11,18,27,68,19,7,1,71,3,13,0,7,16,71,28,11,71,27,12,6,27,68,2,25,1,21,22,11,9,10,68,10,6,3,15,27,68,5,10,8,14,10,18,2,79,6,2,12,5,18,28,1,71,0,2,71,7,13,20,79,16,2,28,16,14,2,11,9,22,74,71,87,68,45,0,12,9,79,12,14,2,23,2,3,2,71,24,5,20,79,10,8,27,68,19,7,1,71,3,13,0,7,16,92,79,12,2,79,19,6,28,68,8,1,8,30,79,5,71,24,13,19,1,1,20,28,68,19,0,68,19,7,1,71,3,13,0,7,16,73,79,93,71,59,12,2,79,11,9,10,68,16,7,11,71,6,23,71,27,12,2,79,16,21,26,1,71,3,13,0,7,16,75,79,19,15,0,68,0,6,18,2,28,68,11,6,3,15,27,68,19,0,68,2,25,1,21,22,11,9,10,72,71,24,5,20,79,3,8,6,10,0,79,16,8,79,7,8,2,1,71,6,10,19,0,68,19,7,1,71,24,11,21,3,0,73,79,85,87,79,38,18,27,68,6,3,16,15,0,17,0,7,68,19,7,1,71,24,11,21,3,0,71,24,5,20,79,9,6,11,1,71,27,12,21,0,17,0,7,68,15,6,9,75,79,16,15,10,68,16,0,22,11,11,68,3,6,0,9,72,16,71,29,1,4,0,3,9,6,30,2,79,12,14,2,68,16,7,1,9,79,12,2,79,7,6,2,1,73,79,85,86,79,33,17,10,10,71,6,10,71,7,13,20,79,11,16,1,68,11,14,10,3,79,5,9,11,68,6,2,11,9,8,68,15,6,23,71,0,19,9,79,20,2,0,20,11,10,72,71,7,1,71,24,5,20,79,10,8,27,68,6,12,7,2,31,16,2,11,74,71,94,86,71,45,17,19,79,16,8,79,5,11,3,68,16,7,11,71,13,1,11,6,1,17,10,0,71,7,13,10,79,5,9,11,68,6,12,7,2,31,16,2,11,68,15,6,9,75,79,12,2,79,3,6,25,1,71,27,12,2,79,22,14,8,12,19,79,16,8,79,6,2,12,11,10,10,68,4,7,13,11,11,22,2,1,68,8,9,68,32,0,0,73,79,85,84,79,48,15,10,29,71,14,22,2,79,22,2,13,11,21,1,69,71,59,12,14,28,68,14,28,68,9,0,16,71,14,68,23,7,29,20,6,7,6,3,68,5,6,22,19,7,68,21,10,23,18,3,16,14,1,3,71,9,22,8,2,68,15,26,9,6,1,68,23,14,23,20,6,11,9,79,11,21,79,20,11,14,10,75,79,16,15,6,23,71,29,1,5,6,22,19,7,68,4,0,9,2,28,68,1,29,11,10,79,35,8,11,74,86,91,68,52,0,68,19,7,1,71,56,11,21,11,68,5,10,7,6,2,1,71,7,17,10,14,10,71,14,10,3,79,8,14,25,1,3,79,12,2,29,1,71,0,10,71,10,5,21,27,12,71,14,9,8,1,3,71,26,23,73,79,44,2,79,19,6,28,68,1,26,8,11,79,11,1,79,17,9,9,5,14,3,13,9,8,68,11,0,18,2,79,5,9,11,68,1,14,13,19,7,2,18,3,10,2,28,23,73,79,37,9,11,68,16,10,68,15,14,18,2,79,23,2,10,10,71,7,13,20,79,3,11,0,22,30,67,68,19,7,1,71,8,8,8,29,29,71,0,2,71,27,12,2,79,11,9,3,29,71,60,11,9,79,11,1,79,16,15,10,68,33,14,16,15,10,22,73\n"
  },
  {
    "path": "Problem062/.hash",
    "content": "8f46b522b5401b8b6df99a7410eea44b"
  },
  {
    "path": "Problem062/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n\"\"\"\nCubic permutations\nProblem 62\n\nThe cube, 41063625 (345^3), can be permuted to produce two other cubes: 56623104 (384^3) and 66430125 (405^3). In fact, 41063625 is the smallest cube which has exactly three permutations of its digits which are also cube.\n\nFind the smallest cube for which exactly five permutations of its digits are cube.\n\"\"\"\n\n\ndef cubesGen(n, start=1):\n    return map(lambda x: str(x*x*x), range(start, n + 1))\n\n\ndef getId(n):\n    return sum([2 ** int(x) for x in n]) * sum([int(x) for x in list(n)])\n\n\ndef isPerm(a, b):\n    for i in a:\n        for j in b:\n            if i not in b or j not in a:\n                return False\n    return getId(a) == getId(b)\n\n\ndef cubeRoot(n):\n    return int(n ** (1/3) + 0.00001)\n\n\ndef mostCube(n):\n    most = int(''.join(sorted(n, reverse=True)))\n    return cubeRoot(most)\n\n\ndef lowerCube(n):\n    lower = int(''.join(sorted(n)))\n    return cubeRoot(lower)\n\n# my_solution... after much hard work the results final is this... \n# i want to break free XD\n\n\ndef solution(max):\n    maxCube = 10 ** 15\n    for cube_a in cubesGen(maxCube):\n        permCubes = 0\n        for cube_b in cubesGen(int(mostCube(cube_a)), start=int(lowerCube(cube_a))):\n            if isPerm(cube_a, cube_b):\n                permCubes += 1\n        if permCubes == max:\n            return cube_a\n\n\n#the solution of one guy, much more efficient.\ndef solution_extern():\n    def cubes():\n        i = 1\n        while True:\n            yield i * i * i\n            i += 1\n\n    cube_dict = {}\n    for c in cubes():\n        digits = ''.join(sorted(str(c)))\n        if digits in cube_dict:\n            cube_list = cube_dict[digits]\n            cube_list.append(c)\n            if(len(cube_list)) == 5:\n                return min(cube_list)\n                break\n        else:\n            cube_dict[digits] = [c]\n\n\nprint(solution_extern())\n\n#wrong answer: 1000600120008 (because its included the self number, this answer contain 6 permutations)\n#correct answer: 127035954683 (5 permutations!)"
  },
  {
    "path": "Problem062/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=62)\n"
  },
  {
    "path": "Problem063/.hash",
    "content": "f457c545a9ded88f18ecee47145a72c0"
  },
  {
    "path": "Problem063/C/Makefile",
    "content": "CXX = gcc\nLFLAGS = -lm -Wall -o\nTARGET =  solution_1\nEXTENSION_TARGET = c\nEXTENSION_OUT = out\n\n\nall:\n\t$(CXX) $(LFLAGS) $(TARGET).$(EXTENSION_OUT) $(TARGET).$(EXTENSION_TARGET)\nclean:\n\trm -v *.$(EXTENSION_OUT)\nrun:\n\t./$(TARGET).$(EXTENSION_OUT)\n"
  },
  {
    "path": "Problem063/C/solution_1.c",
    "content": "#include <stdio.h>\n#include <math.h>\n\nint num_length (double n) {\n    if (n < 10)\n        return 1;\n    else\n        return 1 + num_length(n / 10);\n}\n\n\nint main(int argc, char **argv) {\n    int a, n; \n    int ndigits = 0;\n    for (a = 1; a < 10; a++) {\n        for (n = 1; n < 22; n++) {\n            if (num_length(pow(a,n)) == n) {\n                ndigits += 1;\n            } \n        }\n    }\n\n    printf(\"%d\\n\", ndigits);\n    return 0;\n}"
  },
  {
    "path": "Problem063/CommonLisp/solution_1.lisp",
    "content": "(defun range (n)\n  (loop for x from 1 to n collect x))\n\n(defun ilength (n)\n  (length (write-to-string n)))\n\n(defun solution()\n  (loop\n     for a in (range 9)\n     for tries = (loop\n                    for n in (range 21)\n                    for x = (expt a n)\n                    when (= (ilength x) n)\n                      collect x)\n     sum (length tries)))\n\n\n(princ (solution))\n"
  },
  {
    "path": "Problem063/Elixir/solution_1.exs",
    "content": "defmodule PowerfulDigits do\n  def counts(_,_,count,len_bool) when len_bool == false, do: count\n\n  def counts(exp,num,count,len_bool) when len_bool == true do\n    [num,count] = cond do\n      num != 9 ->\n        exps(num,num,exp,count)\n      true ->\n        [num,count + 1]\n    end\n\n    counts(exp + 1,num,count,same_len?(9,exp))\n  end\n\n  def exps(num,n,_,count) when n > 9 do\n    [num,count]\n  end\n\n  def exps(num,n,exp,count) when n <= 9 do\n    [num|count] = cond do\n      same_len?(n,exp) ->\n        [num|count + 1]\n      true ->\n        greater_than_n?(num,n,count)\n    end\n\n\n    exps(num,n + 1,exp,count)\n  end\n\n  def greater_than_n?(num,n,count) do\n    cond do\n      n > num ->\n        [num|count]\n      true ->\n        [n|count]\n    end\n  end\n\n  def same_len?(n,exp), do: exp == round(:math.pow(n,exp)) |> to_string |> String.length()\nend\n\nIO.puts PowerfulDigits.counts(1,1,0,true)"
  },
  {
    "path": "Problem063/Go/solution_1.go",
    "content": "// Copyright 2017 the DestructHub Authors. (Manoel Vilela wrote this shit)\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"math\"\n)\n\nfunc numLength(n float64) int {\n\tif n < 10 {\n\t\treturn 1\n\t}\n\n\treturn 1 + numLength(n/10)\n}\n\nfunc main() {\n\tndigits := 0\n\tfor a := 1; a <= 9; a += 1 {\n\t\tfor n := 1; n <= 21; n += 1 {\n\t\t\tif numLength(math.Pow(float64(a), float64(n))) == n {\n\t\t\t\tndigits += 1\n\t\t\t}\n\t\t}\n\t}\n\n\tfmt.Println(ndigits)\n\n}\n"
  },
  {
    "path": "Problem063/Haskell/solution_1.hs",
    "content": "{-- Author: Manoel Vilela\n\nTime: 0.003s (3ms) @ Intel E7400 3.5Ghz\n\nThe biggest solution for this problem is the mathematical background.\nThe source code written here is just a straight forward evaluation of it.\n\nWell, to beginning this lets make clear the problem:\n\n:: How many n-digit positive integers exist which are also an nth power?\n\nSo we are looking a arbitrary a^n = k whose k has length n.\nA arbitrary number k has the length n when this constraint is True:\n\n10^(n-1) <= k < 10^n\n\nLet's take a example. For n <- 4 all the n-digits numbers are between\nthat bounds: 10^3 <= k < 10^4 <=> 1000 <= k < 10000\n\nWhich seems true. For this be very trivial, I'll not write a proof here.\nBut which the values possible for `a` and `n`?\n\nTo start, let's look with `a` for k = a^n (more easy):\n\n1 = 1^1\n2 = 2^1\n3 = 3^1\n...\n9 = 9^1\nbut 10 = 10^1, length \"10\" == 2 and n == 1, so `a` cannot be 10.\n\nLooking at this and the constraint k < 10^n, if we write k as a^n, which means\na^n < 10^n, then so the biggest integer for which this is True is when a = 9.\n9^n < 10^n, any a > 9 this statement is false.\n\nSo `a` is on the interval [1,9]\n\nIn another case, which values `n` can assume? Let's look to this\ninequality: 10^(n-1) <= a^n\n\nWhat the max value that n can assumes? Let's assume `a` for the biggest\nvalue possible (9) and the case when this statement is a equality, so then:\n\n10^(n - 1) = 9^n\n\nlog(10^(n-1)) = log(9^n)    {logarithm of base 10 on both sides}\n(n-1)*log(10) = n * log(9)  {logarithm theorem log(a^b) = a * log(a)}\nn - 1 = n * log(3^2)        {log(10)=1 and 9 = 3^2}\nn -1 = n * 2*log(3)         {again logarithm theorem of power}\nn - n*2*log(3) = 1          {sum 1 - 2*log(3) on both sides}\nn(1 - 2*log(3)) = 1         {distributive law of multiplication}\nn = 1/(1 - 2*log(3))        {divide both sides for (1 - 2*log(3))}\nn ~= 21                     {evaluation for n as integer}\n\nThat means so we need look for a <- [1..9] and n <- [1..21].\nThe most simplest implementation on Haskell is given below.\n\n--}\n\nmain :: IO()\nmain = print $ length [x | a <- [1..9], n <- [1..21],\n                           let x = a^n,\n                           n == length (show x)]\n"
  },
  {
    "path": "Problem063/Python/solution_1.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n#\n#    Copyright © Manoel Vilela 2017\n#\n#       @team: DestructHub\n#    @project: ProjectEuler\n#     @author: Manoel Vilela\n#      @email: manoel_vilela@engineer.com\n#\n\n\nprint(len([a ** n\n           for a in range(1, 10)\n           for n in range(1, 22)\n           if len(str(a ** n)) == n]))\n"
  },
  {
    "path": "Problem063/Python/solution_2.py",
    "content": "#code created by NamanNimmo Gera\n#2:34pm, April 15, 2019.\n\nfrom math import log10\ncount = 0\nfor i in range(1,10):\n    count = count + int(1/(1-log10(i))) ##realise that for x > 10, x^n > 10^n\nprint(count)\n"
  },
  {
    "path": "Problem063/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=63)\n"
  },
  {
    "path": "Problem067/.hash",
    "content": "9d702ffd99ad9c70ac37e506facc8c38"
  },
  {
    "path": "Problem067/Elixir/solution_1.exs",
    "content": "defmodule MaximumPath do\n  def find([left|_]) when length(left) == 1 do\n    left\n  end\n\n  def find([left|[mid|right]]) when length(left) > 0 do\n    mid = for n <- (0..(length(left)-2)), do: Integer.to_string(new_val(left,mid,n))\n    find([mid|right])\n  end\n\n  def new_val(a,b,c), do: String.to_integer(Enum.at(b,c)) + Enum.max([String.to_integer(Enum.at(a,c)),String.to_integer(Enum.at(a,c+1))])\nend\n\ndefmodule Triangle do\n  def input(file) do\n    case File.read(file) do\n      {:ok, body}     ->\n        body\n          |> String.split(\"\\n\", trim: true)\n          |> Enum.reverse()\n          |> Enum.map(fn x -> String.split(x,\" \", trim: true) end)\n          |> MaximumPath.find()\n          |> IO.puts\n      {:error,reason} ->\n        :file.format_error(reason)\n    end\n  end\nend\n\nTriangle.input(\"../p067_triangle.txt\")\n"
  },
  {
    "path": "Problem067/Python/solution_1.py",
    "content": "#coding=utf-8\n# search the biggest sum nums adjacent on the row of the triangle below\n# python3.4\n# need a more efficient algorithm to search the biggest sum\n# in a row in the tree binary.\n# The maxarrow function search for or all routes,\n# and the tree as been 100 lines, than have 2 ^ 100 routes!\n# Obviouslly, not is possible use this to solution that problem.\n# It's not possible to trying all routes,\n# it's take veryyyyyyyyyyyyy long time.\n# I used OO concept to construct a clever method! :D\n\n\ndef int_triangle(data):\n    return [[int(x) for x in y.split()] for y in [x for x in data.split('\\n')]]\n\n\nclass Tree(object):\n\n    def __init__(self, data):\n        self.data = data\n        self.index = (0, 0)\n        self.best_ways = {(0, 0): [(0, 0)]}\n        self.sums = {}\n        self.routes = []\n\n    def solution(self):\n        self.search()\n        return max(self.calc_route(route) for route in self.routes)\n\n    def calc_route(self, route):\n        return sum([self.data[y][x] for y, x in route])\n\n    def num(self, index):\n        return self.data.__getitem__(*index)\n\n    def search(self):\n        for y in range(1, len(self.data)):\n            for x in range(y + 1):\n                self.index = (y, x)\n                self.decise()\n\n    def insert_route(self, last):\n        newroute = self.best_ways[last] + [self.index]\n        self.best_ways[self.index] = newroute\n        self.sums[self.index] = self.calc_route(newroute)\n        if len(newroute) == len(self.data):\n            self.routes.append(newroute)\n\n    def decise(self):\n        y, x = self.index\n        if x == y:\n            # left extrem of the Tree, it's just possible to walk by left\n            last = ((y - 1), (x - 1))\n        elif x == 0:\n            # right extrem of the Tree , it's just possible to walk by right\n            last = ((y - 1), x)\n        else:\n            left = ((y - 1), (x - 1))\n            right = ((y - 1), x)\n            if self.sums[left] > self.sums[right]:\n                last = left\n            else:\n                last = right\n\n        self.insert_route(last)\nif __name__ == '__main__':\n    from os.path import join, dirname\n    with open('../p067_triangle.txt') as f:\n        data = int_triangle(f.read()[:-1])\n\n    t = Tree(data)\n    print(t.solution())\n"
  },
  {
    "path": "Problem067/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=67)\n"
  },
  {
    "path": "Problem067/p067_triangle.txt",
    "content": "59\n73 41\n52 40 09\n26 53 06 34\n10 51 87 86 81\n61 95 66 57 25 68\n90 81 80 38 92 67 73\n30 28 51 76 81 18 75 44\n84 14 95 87 62 81 17 78 58\n21 46 71 58 02 79 62 39 31 09\n56 34 35 53 78 31 81 18 90 93 15\n78 53 04 21 84 93 32 13 97 11 37 51\n45 03 81 79 05 18 78 86 13 30 63 99 95\n39 87 96 28 03 38 42 17 82 87 58 07 22 57\n06 17 51 17 07 93 09 07 75 97 95 78 87 08 53\n67 66 59 60 88 99 94 65 55 77 55 34 27 53 78 28\n76 40 41 04 87 16 09 42 75 69 23 97 30 60 10 79 87\n12 10 44 26 21 36 32 84 98 60 13 12 36 16 63 31 91 35\n70 39 06 05 55 27 38 48 28 22 34 35 62 62 15 14 94 89 86\n66 56 68 84 96 21 34 34 34 81 62 40 65 54 62 05 98 03 02 60\n38 89 46 37 99 54 34 53 36 14 70 26 02 90 45 13 31 61 83 73 47\n36 10 63 96 60 49 41 05 37 42 14 58 84 93 96 17 09 43 05 43 06 59\n66 57 87 57 61 28 37 51 84 73 79 15 39 95 88 87 43 39 11 86 77 74 18\n54 42 05 79 30 49 99 73 46 37 50 02 45 09 54 52 27 95 27 65 19 45 26 45\n71 39 17 78 76 29 52 90 18 99 78 19 35 62 71 19 23 65 93 85 49 33 75 09 02\n33 24 47 61 60 55 32 88 57 55 91 54 46 57 07 77 98 52 80 99 24 25 46 78 79 05\n92 09 13 55 10 67 26 78 76 82 63 49 51 31 24 68 05 57 07 54 69 21 67 43 17 63 12\n24 59 06 08 98 74 66 26 61 60 13 03 09 09 24 30 71 08 88 70 72 70 29 90 11 82 41 34\n66 82 67 04 36 60 92 77 91 85 62 49 59 61 30 90 29 94 26 41 89 04 53 22 83 41 09 74 90\n48 28 26 37 28 52 77 26 51 32 18 98 79 36 62 13 17 08 19 54 89 29 73 68 42 14 08 16 70 37\n37 60 69 70 72 71 09 59 13 60 38 13 57 36 09 30 43 89 30 39 15 02 44 73 05 73 26 63 56 86 12\n55 55 85 50 62 99 84 77 28 85 03 21 27 22 19 26 82 69 54 04 13 07 85 14 01 15 70 59 89 95 10 19\n04 09 31 92 91 38 92 86 98 75 21 05 64 42 62 84 36 20 73 42 21 23 22 51 51 79 25 45 85 53 03 43 22\n75 63 02 49 14 12 89 14 60 78 92 16 44 82 38 30 72 11 46 52 90 27 08 65 78 03 85 41 57 79 39 52 33 48\n78 27 56 56 39 13 19 43 86 72 58 95 39 07 04 34 21 98 39 15 39 84 89 69 84 46 37 57 59 35 59 50 26 15 93\n42 89 36 27 78 91 24 11 17 41 05 94 07 69 51 96 03 96 47 90 90 45 91 20 50 56 10 32 36 49 04 53 85 92 25 65\n52 09 61 30 61 97 66 21 96 92 98 90 06 34 96 60 32 69 68 33 75 84 18 31 71 50 84 63 03 03 19 11 28 42 75 45 45\n61 31 61 68 96 34 49 39 05 71 76 59 62 67 06 47 96 99 34 21 32 47 52 07 71 60 42 72 94 56 82 83 84 40 94 87 82 46\n01 20 60 14 17 38 26 78 66 81 45 95 18 51 98 81 48 16 53 88 37 52 69 95 72 93 22 34 98 20 54 27 73 61 56 63 60 34 63\n93 42 94 83 47 61 27 51 79 79 45 01 44 73 31 70 83 42 88 25 53 51 30 15 65 94 80 44 61 84 12 77 02 62 02 65 94 42 14 94\n32 73 09 67 68 29 74 98 10 19 85 48 38 31 85 67 53 93 93 77 47 67 39 72 94 53 18 43 77 40 78 32 29 59 24 06 02 83 50 60 66\n32 01 44 30 16 51 15 81 98 15 10 62 86 79 50 62 45 60 70 38 31 85 65 61 64 06 69 84 14 22 56 43 09 48 66 69 83 91 60 40 36 61\n92 48 22 99 15 95 64 43 01 16 94 02 99 19 17 69 11 58 97 56 89 31 77 45 67 96 12 73 08 20 36 47 81 44 50 64 68 85 40 81 85 52 09\n91 35 92 45 32 84 62 15 19 64 21 66 06 01 52 80 62 59 12 25 88 28 91 50 40 16 22 99 92 79 87 51 21 77 74 77 07 42 38 42 74 83 02 05\n46 19 77 66 24 18 05 32 02 84 31 99 92 58 96 72 91 36 62 99 55 29 53 42 12 37 26 58 89 50 66 19 82 75 12 48 24 87 91 85 02 07 03 76 86\n99 98 84 93 07 17 33 61 92 20 66 60 24 66 40 30 67 05 37 29 24 96 03 27 70 62 13 04 45 47 59 88 43 20 66 15 46 92 30 04 71 66 78 70 53 99\n67 60 38 06 88 04 17 72 10 99 71 07 42 25 54 05 26 64 91 50 45 71 06 30 67 48 69 82 08 56 80 67 18 46 66 63 01 20 08 80 47 07 91 16 03 79 87\n18 54 78 49 80 48 77 40 68 23 60 88 58 80 33 57 11 69 55 53 64 02 94 49 60 92 16 35 81 21 82 96 25 24 96 18 02 05 49 03 50 77 06 32 84 27 18 38\n68 01 50 04 03 21 42 94 53 24 89 05 92 26 52 36 68 11 85 01 04 42 02 45 15 06 50 04 53 73 25 74 81 88 98 21 67 84 79 97 99 20 95 04 40 46 02 58 87\n94 10 02 78 88 52 21 03 88 60 06 53 49 71 20 91 12 65 07 49 21 22 11 41 58 99 36 16 09 48 17 24 52 36 23 15 72 16 84 56 02 99 43 76 81 71 29 39 49 17\n64 39 59 84 86 16 17 66 03 09 43 06 64 18 63 29 68 06 23 07 87 14 26 35 17 12 98 41 53 64 78 18 98 27 28 84 80 67 75 62 10 11 76 90 54 10 05 54 41 39 66\n43 83 18 37 32 31 52 29 95 47 08 76 35 11 04 53 35 43 34 10 52 57 12 36 20 39 40 55 78 44 07 31 38 26 08 15 56 88 86 01 52 62 10 24 32 05 60 65 53 28 57 99\n03 50 03 52 07 73 49 92 66 80 01 46 08 67 25 36 73 93 07 42 25 53 13 96 76 83 87 90 54 89 78 22 78 91 73 51 69 09 79 94 83 53 09 40 69 62 10 79 49 47 03 81 30\n71 54 73 33 51 76 59 54 79 37 56 45 84 17 62 21 98 69 41 95 65 24 39 37 62 03 24 48 54 64 46 82 71 78 33 67 09 16 96 68 52 74 79 68 32 21 13 78 96 60 09 69 20 36\n73 26 21 44 46 38 17 83 65 98 07 23 52 46 61 97 33 13 60 31 70 15 36 77 31 58 56 93 75 68 21 36 69 53 90 75 25 82 39 50 65 94 29 30 11 33 11 13 96 02 56 47 07 49 02\n76 46 73 30 10 20 60 70 14 56 34 26 37 39 48 24 55 76 84 91 39 86 95 61 50 14 53 93 64 67 37 31 10 84 42 70 48 20 10 72 60 61 84 79 69 65 99 73 89 25 85 48 92 56 97 16\n03 14 80 27 22 30 44 27 67 75 79 32 51 54 81 29 65 14 19 04 13 82 04 91 43 40 12 52 29 99 07 76 60 25 01 07 61 71 37 92 40 47 99 66 57 01 43 44 22 40 53 53 09 69 26 81 07\n49 80 56 90 93 87 47 13 75 28 87 23 72 79 32 18 27 20 28 10 37 59 21 18 70 04 79 96 03 31 45 71 81 06 14 18 17 05 31 50 92 79 23 47 09 39 47 91 43 54 69 47 42 95 62 46 32 85\n37 18 62 85 87 28 64 05 77 51 47 26 30 65 05 70 65 75 59 80 42 52 25 20 44 10 92 17 71 95 52 14 77 13 24 55 11 65 26 91 01 30 63 15 49 48 41 17 67 47 03 68 20 90 98 32 04 40 68\n90 51 58 60 06 55 23 68 05 19 76 94 82 36 96 43 38 90 87 28 33 83 05 17 70 83 96 93 06 04 78 47 80 06 23 84 75 23 87 72 99 14 50 98 92 38 90 64 61 58 76 94 36 66 87 80 51 35 61 38\n57 95 64 06 53 36 82 51 40 33 47 14 07 98 78 65 39 58 53 06 50 53 04 69 40 68 36 69 75 78 75 60 03 32 39 24 74 47 26 90 13 40 44 71 90 76 51 24 36 50 25 45 70 80 61 80 61 43 90 64 11\n18 29 86 56 68 42 79 10 42 44 30 12 96 18 23 18 52 59 02 99 67 46 60 86 43 38 55 17 44 93 42 21 55 14 47 34 55 16 49 24 23 29 96 51 55 10 46 53 27 92 27 46 63 57 30 65 43 27 21 20 24 83\n81 72 93 19 69 52 48 01 13 83 92 69 20 48 69 59 20 62 05 42 28 89 90 99 32 72 84 17 08 87 36 03 60 31 36 36 81 26 97 36 48 54 56 56 27 16 91 08 23 11 87 99 33 47 02 14 44 73 70 99 43 35 33\n90 56 61 86 56 12 70 59 63 32 01 15 81 47 71 76 95 32 65 80 54 70 34 51 40 45 33 04 64 55 78 68 88 47 31 47 68 87 03 84 23 44 89 72 35 08 31 76 63 26 90 85 96 67 65 91 19 14 17 86 04 71 32 95\n37 13 04 22 64 37 37 28 56 62 86 33 07 37 10 44 52 82 52 06 19 52 57 75 90 26 91 24 06 21 14 67 76 30 46 14 35 89 89 41 03 64 56 97 87 63 22 34 03 79 17 45 11 53 25 56 96 61 23 18 63 31 37 37 47\n77 23 26 70 72 76 77 04 28 64 71 69 14 85 96 54 95 48 06 62 99 83 86 77 97 75 71 66 30 19 57 90 33 01 60 61 14 12 90 99 32 77 56 41 18 14 87 49 10 14 90 64 18 50 21 74 14 16 88 05 45 73 82 47 74 44\n22 97 41 13 34 31 54 61 56 94 03 24 59 27 98 77 04 09 37 40 12 26 87 09 71 70 07 18 64 57 80 21 12 71 83 94 60 39 73 79 73 19 97 32 64 29 41 07 48 84 85 67 12 74 95 20 24 52 41 67 56 61 29 93 35 72 69\n72 23 63 66 01 11 07 30 52 56 95 16 65 26 83 90 50 74 60 18 16 48 43 77 37 11 99 98 30 94 91 26 62 73 45 12 87 73 47 27 01 88 66 99 21 41 95 80 02 53 23 32 61 48 32 43 43 83 14 66 95 91 19 81 80 67 25 88\n08 62 32 18 92 14 83 71 37 96 11 83 39 99 05 16 23 27 10 67 02 25 44 11 55 31 46 64 41 56 44 74 26 81 51 31 45 85 87 09 81 95 22 28 76 69 46 48 64 87 67 76 27 89 31 11 74 16 62 03 60 94 42 47 09 34 94 93 72\n56 18 90 18 42 17 42 32 14 86 06 53 33 95 99 35 29 15 44 20 49 59 25 54 34 59 84 21 23 54 35 90 78 16 93 13 37 88 54 19 86 67 68 55 66 84 65 42 98 37 87 56 33 28 58 38 28 38 66 27 52 21 81 15 08 22 97 32 85 27\n91 53 40 28 13 34 91 25 01 63 50 37 22 49 71 58 32 28 30 18 68 94 23 83 63 62 94 76 80 41 90 22 82 52 29 12 18 56 10 08 35 14 37 57 23 65 67 40 72 39 93 39 70 89 40 34 07 46 94 22 20 05 53 64 56 30 05 56 61 88 27\n23 95 11 12 37 69 68 24 66 10 87 70 43 50 75 07 62 41 83 58 95 93 89 79 45 39 02 22 05 22 95 43 62 11 68 29 17 40 26 44 25 71 87 16 70 85 19 25 59 94 90 41 41 80 61 70 55 60 84 33 95 76 42 63 15 09 03 40 38 12 03 32\n09 84 56 80 61 55 85 97 16 94 82 94 98 57 84 30 84 48 93 90 71 05 95 90 73 17 30 98 40 64 65 89 07 79 09 19 56 36 42 30 23 69 73 72 07 05 27 61 24 31 43 48 71 84 21 28 26 65 65 59 65 74 77 20 10 81 61 84 95 08 52 23 70\n47 81 28 09 98 51 67 64 35 51 59 36 92 82 77 65 80 24 72 53 22 07 27 10 21 28 30 22 48 82 80 48 56 20 14 43 18 25 50 95 90 31 77 08 09 48 44 80 90 22 93 45 82 17 13 96 25 26 08 73 34 99 06 49 24 06 83 51 40 14 15 10 25 01\n54 25 10 81 30 64 24 74 75 80 36 75 82 60 22 69 72 91 45 67 03 62 79 54 89 74 44 83 64 96 66 73 44 30 74 50 37 05 09 97 70 01 60 46 37 91 39 75 75 18 58 52 72 78 51 81 86 52 08 97 01 46 43 66 98 62 81 18 70 93 73 08 32 46 34\n96 80 82 07 59 71 92 53 19 20 88 66 03 26 26 10 24 27 50 82 94 73 63 08 51 33 22 45 19 13 58 33 90 15 22 50 36 13 55 06 35 47 82 52 33 61 36 27 28 46 98 14 73 20 73 32 16 26 80 53 47 66 76 38 94 45 02 01 22 52 47 96 64 58 52 39\n88 46 23 39 74 63 81 64 20 90 33 33 76 55 58 26 10 46 42 26 74 74 12 83 32 43 09 02 73 55 86 54 85 34 28 23 29 79 91 62 47 41 82 87 99 22 48 90 20 05 96 75 95 04 43 28 81 39 81 01 28 42 78 25 39 77 90 57 58 98 17 36 73 22 63 74 51\n29 39 74 94 95 78 64 24 38 86 63 87 93 06 70 92 22 16 80 64 29 52 20 27 23 50 14 13 87 15 72 96 81 22 08 49 72 30 70 24 79 31 16 64 59 21 89 34 96 91 48 76 43 53 88 01 57 80 23 81 90 79 58 01 80 87 17 99 86 90 72 63 32 69 14 28 88 69\n37 17 71 95 56 93 71 35 43 45 04 98 92 94 84 96 11 30 31 27 31 60 92 03 48 05 98 91 86 94 35 90 90 08 48 19 33 28 68 37 59 26 65 96 50 68 22 07 09 49 34 31 77 49 43 06 75 17 81 87 61 79 52 26 27 72 29 50 07 98 86 01 17 10 46 64 24 18 56\n51 30 25 94 88 85 79 91 40 33 63 84 49 67 98 92 15 26 75 19 82 05 18 78 65 93 61 48 91 43 59 41 70 51 22 15 92 81 67 91 46 98 11 11 65 31 66 10 98 65 83 21 05 56 05 98 73 67 46 74 69 34 08 30 05 52 07 98 32 95 30 94 65 50 24 63 28 81 99 57\n19 23 61 36 09 89 71 98 65 17 30 29 89 26 79 74 94 11 44 48 97 54 81 55 39 66 69 45 28 47 13 86 15 76 74 70 84 32 36 33 79 20 78 14 41 47 89 28 81 05 99 66 81 86 38 26 06 25 13 60 54 55 23 53 27 05 89 25 23 11 13 54 59 54 56 34 16 24 53 44 06\n13 40 57 72 21 15 60 08 04 19 11 98 34 45 09 97 86 71 03 15 56 19 15 44 97 31 90 04 87 87 76 08 12 30 24 62 84 28 12 85 82 53 99 52 13 94 06 65 97 86 09 50 94 68 69 74 30 67 87 94 63 07 78 27 80 36 69 41 06 92 32 78 37 82 30 05 18 87 99 72 19 99\n44 20 55 77 69 91 27 31 28 81 80 27 02 07 97 23 95 98 12 25 75 29 47 71 07 47 78 39 41 59 27 76 13 15 66 61 68 35 69 86 16 53 67 63 99 85 41 56 08 28 33 40 94 76 90 85 31 70 24 65 84 65 99 82 19 25 54 37 21 46 33 02 52 99 51 33 26 04 87 02 08 18 96\n54 42 61 45 91 06 64 79 80 82 32 16 83 63 42 49 19 78 65 97 40 42 14 61 49 34 04 18 25 98 59 30 82 72 26 88 54 36 21 75 03 88 99 53 46 51 55 78 22 94 34 40 68 87 84 25 30 76 25 08 92 84 42 61 40 38 09 99 40 23 29 39 46 55 10 90 35 84 56 70 63 23 91 39\n52 92 03 71 89 07 09 37 68 66 58 20 44 92 51 56 13 71 79 99 26 37 02 06 16 67 36 52 58 16 79 73 56 60 59 27 44 77 94 82 20 50 98 33 09 87 94 37 40 83 64 83 58 85 17 76 53 02 83 52 22 27 39 20 48 92 45 21 09 42 24 23 12 37 52 28 50 78 79 20 86 62 73 20 59\n54 96 80 15 91 90 99 70 10 09 58 90 93 50 81 99 54 38 36 10 30 11 35 84 16 45 82 18 11 97 36 43 96 79 97 65 40 48 23 19 17 31 64 52 65 65 37 32 65 76 99 79 34 65 79 27 55 33 03 01 33 27 61 28 66 08 04 70 49 46 48 83 01 45 19 96 13 81 14 21 31 79 93 85 50 05\n92 92 48 84 59 98 31 53 23 27 15 22 79 95 24 76 05 79 16 93 97 89 38 89 42 83 02 88 94 95 82 21 01 97 48 39 31 78 09 65 50 56 97 61 01 07 65 27 21 23 14 15 80 97 44 78 49 35 33 45 81 74 34 05 31 57 09 38 94 07 69 54 69 32 65 68 46 68 78 90 24 28 49 51 45 86 35\n41 63 89 76 87 31 86 09 46 14 87 82 22 29 47 16 13 10 70 72 82 95 48 64 58 43 13 75 42 69 21 12 67 13 64 85 58 23 98 09 37 76 05 22 31 12 66 50 29 99 86 72 45 25 10 28 19 06 90 43 29 31 67 79 46 25 74 14 97 35 76 37 65 46 23 82 06 22 30 76 93 66 94 17 96 13 20 72\n63 40 78 08 52 09 90 41 70 28 36 14 46 44 85 96 24 52 58 15 87 37 05 98 99 39 13 61 76 38 44 99 83 74 90 22 53 80 56 98 30 51 63 39 44 30 91 91 04 22 27 73 17 35 53 18 35 45 54 56 27 78 48 13 69 36 44 38 71 25 30 56 15 22 73 43 32 69 59 25 93 83 45 11 34 94 44 39 92\n12 36 56 88 13 96 16 12 55 54 11 47 19 78 17 17 68 81 77 51 42 55 99 85 66 27 81 79 93 42 65 61 69 74 14 01 18 56 12 01 58 37 91 22 42 66 83 25 19 04 96 41 25 45 18 69 96 88 36 93 10 12 98 32 44 83 83 04 72 91 04 27 73 07 34 37 71 60 59 31 01 54 54 44 96 93 83 36 04 45\n30 18 22 20 42 96 65 79 17 41 55 69 94 81 29 80 91 31 85 25 47 26 43 49 02 99 34 67 99 76 16 14 15 93 08 32 99 44 61 77 67 50 43 55 87 55 53 72 17 46 62 25 50 99 73 05 93 48 17 31 70 80 59 09 44 59 45 13 74 66 58 94 87 73 16 14 85 38 74 99 64 23 79 28 71 42 20 37 82 31 23\n51 96 39 65 46 71 56 13 29 68 53 86 45 33 51 49 12 91 21 21 76 85 02 17 98 15 46 12 60 21 88 30 92 83 44 59 42 50 27 88 46 86 94 73 45 54 23 24 14 10 94 21 20 34 23 51 04 83 99 75 90 63 60 16 22 33 83 70 11 32 10 50 29 30 83 46 11 05 31 17 86 42 49 01 44 63 28 60 07 78 95 40\n44 61 89 59 04 49 51 27 69 71 46 76 44 04 09 34 56 39 15 06 94 91 75 90 65 27 56 23 74 06 23 33 36 69 14 39 05 34 35 57 33 22 76 46 56 10 61 65 98 09 16 69 04 62 65 18 99 76 49 18 72 66 73 83 82 40 76 31 89 91 27 88 17 35 41 35 32 51 32 67 52 68 74 85 80 57 07 11 62 66 47 22 67\n65 37 19 97 26 17 16 24 24 17 50 37 64 82 24 36 32 11 68 34 69 31 32 89 79 93 96 68 49 90 14 23 04 04 67 99 81 74 70 74 36 96 68 09 64 39 88 35 54 89 96 58 66 27 88 97 32 14 06 35 78 20 71 06 85 66 57 02 58 91 72 05 29 56 73 48 86 52 09 93 22 57 79 42 12 01 31 68 17 59 63 76 07 77\n73 81 14 13 17 20 11 09 01 83 08 85 91 70 84 63 62 77 37 07 47 01 59 95 39 69 39 21 99 09 87 02 97 16 92 36 74 71 90 66 33 73 73 75 52 91 11 12 26 53 05 26 26 48 61 50 90 65 01 87 42 47 74 35 22 73 24 26 56 70 52 05 48 41 31 18 83 27 21 39 80 85 26 08 44 02 71 07 63 22 05 52 19 08 20\n17 25 21 11 72 93 33 49 64 23 53 82 03 13 91 65 85 02 40 05 42 31 77 42 05 36 06 54 04 58 07 76 87 83 25 57 66 12 74 33 85 37 74 32 20 69 03 97 91 68 82 44 19 14 89 28 85 85 80 53 34 87 58 98 88 78 48 65 98 40 11 57 10 67 70 81 60 79 74 72 97 59 79 47 30 20 54 80 89 91 14 05 33 36 79 39\n60 85 59 39 60 07 57 76 77 92 06 35 15 72 23 41 45 52 95 18 64 79 86 53 56 31 69 11 91 31 84 50 44 82 22 81 41 40 30 42 30 91 48 94 74 76 64 58 74 25 96 57 14 19 03 99 28 83 15 75 99 01 89 85 79 50 03 95 32 67 44 08 07 41 62 64 29 20 14 76 26 55 48 71 69 66 19 72 44 25 14 01 48 74 12 98 07\n64 66 84 24 18 16 27 48 20 14 47 69 30 86 48 40 23 16 61 21 51 50 26 47 35 33 91 28 78 64 43 68 04 79 51 08 19 60 52 95 06 68 46 86 35 97 27 58 04 65 30 58 99 12 12 75 91 39 50 31 42 64 70 04 46 07 98 73 98 93 37 89 77 91 64 71 64 65 66 21 78 62 81 74 42 20 83 70 73 95 78 45 92 27 34 53 71 15\n30 11 85 31 34 71 13 48 05 14 44 03 19 67 23 73 19 57 06 90 94 72 57 69 81 62 59 68 88 57 55 69 49 13 07 87 97 80 89 05 71 05 05 26 38 40 16 62 45 99 18 38 98 24 21 26 62 74 69 04 85 57 77 35 58 67 91 79 79 57 86 28 66 34 72 51 76 78 36 95 63 90 08 78 47 63 45 31 22 70 52 48 79 94 15 77 61 67 68\n23 33 44 81 80 92 93 75 94 88 23 61 39 76 22 03 28 94 32 06 49 65 41 34 18 23 08 47 62 60 03 63 33 13 80 52 31 54 73 43 70 26 16 69 57 87 83 31 03 93 70 81 47 95 77 44 29 68 39 51 56 59 63 07 25 70 07 77 43 53 64 03 94 42 95 39 18 01 66 21 16 97 20 50 90 16 70 10 95 69 29 06 25 61 41 26 15 59 63 35\n"
  },
  {
    "path": "Problem069/.hash",
    "content": "bf08b01ead83cbd62a9839ca1cf35ada"
  },
  {
    "path": "Problem069/Python/solution_1.py",
    "content": "import math\n\ndef is_prime(n):\n    if n%2 == 0:\n        return False\n    for i in range(3, math.floor(math.sqrt(n)) + 1, 2):\n        if n%i == 0:\n            return False\n    return True\n\ndef max_phi_ratio(n):\n    k = 3\n    prod = 2\n    while k * prod <= n:\n        if is_prime(k):\n            prod *= k\n        k += 2\n    return prod\n\ndef solve_problem_069():\n    return max_phi_ratio(1000000)\n\nif __name__ == \"__main__\":\n    print(solve_problem_069())\n"
  },
  {
    "path": "Problem069/Python/solution_2.py",
    "content": "#code created by NamanNimmo Gera\n#9:06am, April 16, 2019.\n\nMAX = 1000001\np = []\ndef sieve():  \n    isPrime = [0] * (MAX + 1);  \n    for i in range(2, MAX + 1):  \n        if (isPrime[i] == 0):  \n            p.append(i)\n            j = 2 \n            while (i * j <= MAX):  \n                isPrime[i * j]= 1; \n                j += 1 \n\ndef phi(n): \n    res = n\n    i = 0\n    while (p[i] * p[i] <= n):  \n        if (n % p[i]== 0):  \n            res -= int(res / p[i])\n            while (n % p[i]== 0): \n                n = int(n / p[i]) \n        i += 1\n    if (n > 1): \n        res -= int(res / n)\n    return res  \n\nsieve()\nnbyCount = 1\nmaxi = 1\nfor j in range(2,1000001):\n    if (j/phi(j))>nbyCount:\n        nbyCount = (j/phi(j))\n        maxi = j\n    \nprint(maxi)\n"
  },
  {
    "path": "Problem069/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=69)\n"
  },
  {
    "path": "Problem070/.hash",
    "content": "1884dde67ced589082c8b7043abce181"
  },
  {
    "path": "Problem070/Python/solution_1.py",
    "content": "import math\nfrom collections import Counter\n\ndef _prime_sieve(start, limit):\n    def is_prime(n):\n        if n%2 == 0:\n            return False\n        for i in range(3, math.floor(math.sqrt(n)) + 1, 2):\n            if n%i == 0:\n                return False\n        return True\n    sieve = []\n    if start <= 2: sieve.append(2)\n    for i in range(start, limit, 2):\n        if is_prime(i):\n            sieve.append(i)\n    return sieve\n\ndef _is_permutation(x, y):\n    return Counter(str(x)) == Counter(str(y))\n\ndef min_phi_ratio(limit):\n    sq = math.sqrt(limit)\n    primes = _prime_sieve(math.floor(sq - sq*0.4),\n                          math.floor(sq + sq*0.4))\n    l = len(primes)\n    min_ratio = 2\n    target = None\n    for p in range(0, l):\n        for q in range(p, l):\n            n = primes[p] * primes[q]\n            if n>limit:\n                break;\n            phi = (primes[p] - 1) * (primes[q] - 1)\n            if _is_permutation(n, phi) and n/phi < min_ratio:\n                target = n\n                min_ratio = n/phi\n    return target\n\ndef solve():\n    return min_phi_ratio(10000000)\n\nif __name__ == \"__main__\":\n    print(solve())\n"
  },
  {
    "path": "Problem070/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=70)\n"
  },
  {
    "path": "Problem071/.hash",
    "content": "71f38fa2f04db30be52f883d583bfd6f -\n"
  },
  {
    "path": "Problem071/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=71)\n"
  },
  {
    "path": "Problem071/Scheme/solution_1.scm",
    "content": ";; -*- mode: scheme; coding: utf-8-unix -*-\n\n#|\nAn implementation of Farey Sequence(s)\n\nReferences:\n- Cut the Knot article: https://www.cut-the-knot.org/blue/Farey.shtml\n- Stern-Brocott Tree: https://www.cut-the-knot.org/blue/Stern.shtml\n- Ivan Niven, Herbert S. Zuckerman, Hugh L. Montgomery,\n              \"An introduction to the theory of numbers\", 5th Edition, Wiley, NY\n\nTODO:\n- Documentation\n|#\n\n(require srfi/9)\n\n(define gcd\n  (lambda (m n)\n    (cond\n     ((= n 0) m)\n     ((= n 1) 1)\n     ((< m n) (gcd n m))\n     (else (gcd n (remainder m n))))))\n\n(define-record-type :fraction\n  (fraction numerator denominator)\n  fraction?\n  (numerator numerator set-numerator!)\n  (denominator denominator set-denominator!))\n\n(define pretty-print-fraction\n  (lambda (header f)\n    (display \"Fraction: \")\n    (display header)\n    (newline)\n    (display \"Numerator: \")\n    (display (numerator f))\n    (newline)\n    (display \"Denominator: \")\n    (display (denominator f))\n    (newline)))\n\n(define simplify\n  (lambda (f)\n    (let ((num (numerator f))\n\t  (den (denominator f))\n\t  (g (gcd num den)))\n      (fraction (/ num g) (/ den g)))))\n\n(define smaller?\n  (lambda (f1 f2)\n    (< (* (numerator f1) (denominator f2))\n       (* (numerator f2) (denominator f1)))))\n\n(define bigger?\n  (lambda (f1 f2)\n    (smaller? f2 f1)))\n\n(define equals?\n  (lambda (f1 f2)\n    (not (or (smaller? f1 f2) (bigger? f1 f2)))))\n\n(define zero\n  (fraction 0 1))\n(define one\n  (fraction 1 1))\n\n(define-record-type :interval\n  (interval lower upper)\n  interval?\n  (lower lower set-lower!)\n  (upper upper set-upper!))\n\n(define canonical-order\n  (lambda (i)\n    (let ((low (lower i))\n\t  (upp (upper i)))\n      (if (bigger? low upp)\n\t  (interval upp low)\n\t  (interval low upp)))))\n\n(define pretty-print-interval\n  (lambda (header i)\n    (display \"Interval: \")\n    (display header)\n    (newline)\n    (pretty-print-fraction \"Lower\" (lower i))\n    (pretty-print-fraction \"Upper\" (upper i))))\n\n(define mediant\n  (lambda (i)\n    (let* ((f1 (lower i))\n\t   (f2 (upper i))\n\t   (n (+ (numerator f1) (numerator f2)))\n\t   (d (+ (denominator f1) (denominator f2))))\n      (fraction n d))))\n\n(define lower-mediant-split\n  (lambda (i)\n    (interval (lower i) (mediant i))))\n\n(define upper-mediant-split\n  (lambda (i)\n    (interval (mediant i) (upper i))))\n\n(define zero-one\n  (interval zero one))\n\n(define first-interval-mediant\n  (lambda (f)\n    (define first-interval-mediant-acc\n      (lambda (f acc)\n\t(let* ((med (mediant acc))\n\t       (lower (lower-mediant-split acc))\n\t       (upper (upper-mediant-split acc)))\n\t  (cond\n\t   ((bigger? f med) (first-interval-mediant-acc f upper))\n\t   ((smaller? f med) (first-interval-mediant-acc f lower))\n\t   (else acc)))))\n    (first-interval-mediant-acc f zero-one)))\n\n(define first-interval-upper\n  (lambda (f)\n    (lower-mediant-split (first-interval-mediant f))))\n\n(define first-interval-lower\n  (lambda (f)\n    (upper-mediant-split (first-interval-mediant f))))\n\n(define largest-fraction-inside-with-denominator-below\n  (lambda (i limit)\n    (let ((med (mediant i))\n\t  (up (upper-mediant-split i)))\n      (cond\n       ((> (denominator (lower i)) limit) (lower i))\n       ((> (denominator med) limit) (lower i))\n       (else (largest-fraction-inside-with-denominator-below up limit))))))\n\n(define solve\n  (let ((input1 (fraction 3 7))\n        (input2 1000000))\n    (numerator (largest-fraction-inside-with-denominator-below\n\t\t(first-interval-upper input1) input2))))\n\n(display solve)\n(newline)\n"
  },
  {
    "path": "Problem076/.hash",
    "content": "18ed0f01e082beffe0049ae1272689d2"
  },
  {
    "path": "Problem076/Elixir/solution_1.exs",
    "content": "defmodule Summations do\n  def count([],_,vals),  do: vals\n  def count([way|ways],lim,vals) when length(ways) >= 0 do\n    count(ways,lim,sums(way,way,lim,vals))\n  end\n\n  def sums(num,_,  lim,vals) when num > lim, do: vals\n  def sums(num,way,lim,vals) when num <= lim do\n    sums(num+1,way,lim,ad(way,num,vals))\n  end\n\n  def ad(a,b,c), do: Map.put(c,b,(Map.get(c,b) + Map.get(c,(b-a))))\nend\n\nvals = Map.put(Enum.into(Enum.zip(Enum.to_list(0..100),List.duplicate(0,101)),Map.new),0,1)\n(1..99)\n  |> Enum.to_list()\n  |> Summations.count(100,vals)\n  |> Map.values()\n  |> Enum.max()\n  |> IO.puts\n"
  },
  {
    "path": "Problem076/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=76)"
  },
  {
    "path": "Problem080/.hash",
    "content": "6cc501a25298e4051886ef1a126e9484"
  },
  {
    "path": "Problem080/Python/solution_1.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n#\n#    Copyright © Manoel Vilela 2017\n#\n#       @team: DestructHub\n#    @project: ProjectEuler\n#     @author: Manoel Vilela\n#      @email: manoel_vilela@engineer.com\n#\n\nimport decimal\nimport math\n\n\ndef solution(limit):\n    decimal.getcontext().prec = 102  # more than 100 to avoid round errors\n    result = 0\n    for n in range(limit + 1):\n        if not math.sqrt(n).is_integer():  # check if is irrational\n            # sum digits\n            result += sum(decimal.Decimal(n).sqrt().as_tuple()[1][:100])\n\n    return result\n\n\nif __name__ == '__main__':\n    print(solution(100))\n"
  },
  {
    "path": "Problem080/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=80)\n"
  },
  {
    "path": "Problem081/.hash",
    "content": "f9ffec84499832add77e6a8bb00246ec"
  },
  {
    "path": "Problem081/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\nfrom os.path import dirname, join\n\n\"\"\"\nPath sum: two ways\nProblem 81\n\nIn the 5 by 5 matrix below, the minimal path sum from the top left to the bottom right, by only moving to the right and down, is indicated in bold red and is equal to 2427.\n\nlink: https://projecteuler.net/problem=81\n\nFind the minimal path sum, in matrix.txt (right click and \"Save Link/Target As...\"), a 31K text file containing a 80 by 80 matrix, from the top left to the bottom right by only moving right and down.\n\"\"\"\n\n\ndef parse_grid(data):\n    return [[int(x) for x in y.split(',')] for y in [x for x in data.split('\\n')]]\n\n\nclass Grid(object):\n    # derived from class tree in problem67\n    def __init__(self, data):\n        self.data = data\n        self.index = (0, 0)\n        self.best_ways = {(0, 0): [(0, 0)]}\n        self.sums = {}\n        self.routes = []\n\n    def solution(self):\n        self.search()\n        return min(self.calcroute(route) for route in self.routes)\n\n    def calcroute(self, route):\n        return sum([self.data[y][x] for y, x in route])\n\n    def num(self, index):\n        y, x = index\n        return self.data[y][x]\n\n    def search(self):\n        for y in range(len(self.data)):\n            for x in range(len(self.data)):\n                if (x + y) == 0:\n                    continue\n                self.index = (y, x)\n                self.decise()\n\n    def insert_route(self, last):\n        newroute = self.best_ways[last] + [self.index]\n        self.best_ways[self.index] = newroute\n        self.sums[self.index] = self.calcroute(newroute)\n        if len(newroute) == len(self.data) * 2 - 1:\n            self.routes.append(newroute)\n\n    def decise(self):\n        y, x = self.index\n        if x == 0:\n            # left extrem of the tree, it's just possible to walk by left\n            last = ((y - 1), x)\n        elif y == 0:\n            # right extrem of the tree , it's just possible to walk by right\n            last = (y, (x - 1))\n        else:\n            up = (y, (x - 1))\n            left = ((y - 1), x)\n            if self.sums[up] < self.sums[left]:\n                last = up\n            else:\n                last = left\n        self.insert_route(last)\n\n\ndef run_test():\n    test = [[131, 673, 234, 103, 18],\n            [201, 96, 342, 965, 150],\n            [630, 803, 746, 422, 111],\n            [537, 699, 497, 121, 956],\n            [805, 732, 524, 37, 331]]\n    # 2427 é o mínimo\n\n    return Grid(test).solution()\n\n\ndef solution():\n    with open('../p081_matrix.txt', 'r') as f:\n        data = parse_grid(f.read()[:-1])\n    return Grid(data).solution()\n\nif __name__ == '__main__':\n    print(solution())\n"
  },
  {
    "path": "Problem081/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=81)\n"
  },
  {
    "path": "Problem081/p081_matrix.txt",
    "content": "4445,2697,5115,718,2209,2212,654,4348,3079,6821,7668,3276,8874,4190,3785,2752,9473,7817,9137,496,7338,3434,7152,4355,4552,7917,7827,2460,2350,691,3514,5880,3145,7633,7199,3783,5066,7487,3285,1084,8985,760,872,8609,8051,1134,9536,5750,9716,9371,7619,5617,275,9721,2997,2698,1887,8825,6372,3014,2113,7122,7050,6775,5948,2758,1219,3539,348,7989,2735,9862,1263,8089,6401,9462,3168,2758,3748,5870\n1096,20,1318,7586,5167,2642,1443,5741,7621,7030,5526,4244,2348,4641,9827,2448,6918,5883,3737,300,7116,6531,567,5997,3971,6623,820,6148,3287,1874,7981,8424,7672,7575,6797,6717,1078,5008,4051,8795,5820,346,1851,6463,2117,6058,3407,8211,117,4822,1317,4377,4434,5925,8341,4800,1175,4173,690,8978,7470,1295,3799,8724,3509,9849,618,3320,7068,9633,2384,7175,544,6583,1908,9983,481,4187,9353,9377\n9607,7385,521,6084,1364,8983,7623,1585,6935,8551,2574,8267,4781,3834,2764,2084,2669,4656,9343,7709,2203,9328,8004,6192,5856,3555,2260,5118,6504,1839,9227,1259,9451,1388,7909,5733,6968,8519,9973,1663,5315,7571,3035,4325,4283,2304,6438,3815,9213,9806,9536,196,5542,6907,2475,1159,5820,9075,9470,2179,9248,1828,4592,9167,3713,4640,47,3637,309,7344,6955,346,378,9044,8635,7466,5036,9515,6385,9230\n7206,3114,7760,1094,6150,5182,7358,7387,4497,955,101,1478,7777,6966,7010,8417,6453,4955,3496,107,449,8271,131,2948,6185,784,5937,8001,6104,8282,4165,3642,710,2390,575,715,3089,6964,4217,192,5949,7006,715,3328,1152,66,8044,4319,1735,146,4818,5456,6451,4113,1063,4781,6799,602,1504,6245,6550,1417,1343,2363,3785,5448,4545,9371,5420,5068,4613,4882,4241,5043,7873,8042,8434,3939,9256,2187\n3620,8024,577,9997,7377,7682,1314,1158,6282,6310,1896,2509,5436,1732,9480,706,496,101,6232,7375,2207,2306,110,6772,3433,2878,8140,5933,8688,1399,2210,7332,6172,6403,7333,4044,2291,1790,2446,7390,8698,5723,3678,7104,1825,2040,140,3982,4905,4160,2200,5041,2512,1488,2268,1175,7588,8321,8078,7312,977,5257,8465,5068,3453,3096,1651,7906,253,9250,6021,8791,8109,6651,3412,345,4778,5152,4883,7505\n1074,5438,9008,2679,5397,5429,2652,3403,770,9188,4248,2493,4361,8327,9587,707,9525,5913,93,1899,328,2876,3604,673,8576,6908,7659,2544,3359,3883,5273,6587,3065,1749,3223,604,9925,6941,2823,8767,7039,3290,3214,1787,7904,3421,7137,9560,8451,2669,9219,6332,1576,5477,6755,8348,4164,4307,2984,4012,6629,1044,2874,6541,4942,903,1404,9125,5160,8836,4345,2581,460,8438,1538,5507,668,3352,2678,6942\n4295,1176,5596,1521,3061,9868,7037,7129,8933,6659,5947,5063,3653,9447,9245,2679,767,714,116,8558,163,3927,8779,158,5093,2447,5782,3967,1716,931,7772,8164,1117,9244,5783,7776,3846,8862,6014,2330,6947,1777,3112,6008,3491,1906,5952,314,4602,8994,5919,9214,3995,5026,7688,6809,5003,3128,2509,7477,110,8971,3982,8539,2980,4689,6343,5411,2992,5270,5247,9260,2269,7474,1042,7162,5206,1232,4556,4757\n510,3556,5377,1406,5721,4946,2635,7847,4251,8293,8281,6351,4912,287,2870,3380,3948,5322,3840,4738,9563,1906,6298,3234,8959,1562,6297,8835,7861,239,6618,1322,2553,2213,5053,5446,4402,6500,5182,8585,6900,5756,9661,903,5186,7687,5998,7997,8081,8955,4835,6069,2621,1581,732,9564,1082,1853,5442,1342,520,1737,3703,5321,4793,2776,1508,1647,9101,2499,6891,4336,7012,3329,3212,1442,9993,3988,4930,7706\n9444,3401,5891,9716,1228,7107,109,3563,2700,6161,5039,4992,2242,8541,7372,2067,1294,3058,1306,320,8881,5756,9326,411,8650,8824,5495,8282,8397,2000,1228,7817,2099,6473,3571,5994,4447,1299,5991,543,7874,2297,1651,101,2093,3463,9189,6872,6118,872,1008,1779,2805,9084,4048,2123,5877,55,3075,1737,9459,4535,6453,3644,108,5982,4437,5213,1340,6967,9943,5815,669,8074,1838,6979,9132,9315,715,5048\n3327,4030,7177,6336,9933,5296,2621,4785,2755,4832,2512,2118,2244,4407,2170,499,7532,9742,5051,7687,970,6924,3527,4694,5145,1306,2165,5940,2425,8910,3513,1909,6983,346,6377,4304,9330,7203,6605,3709,3346,970,369,9737,5811,4427,9939,3693,8436,5566,1977,3728,2399,3985,8303,2492,5366,9802,9193,7296,1033,5060,9144,2766,1151,7629,5169,5995,58,7619,7565,4208,1713,6279,3209,4908,9224,7409,1325,8540\n6882,1265,1775,3648,4690,959,5837,4520,5394,1378,9485,1360,4018,578,9174,2932,9890,3696,116,1723,1178,9355,7063,1594,1918,8574,7594,7942,1547,6166,7888,354,6932,4651,1010,7759,6905,661,7689,6092,9292,3845,9605,8443,443,8275,5163,7720,7265,6356,7779,1798,1754,5225,6661,1180,8024,5666,88,9153,1840,3508,1193,4445,2648,3538,6243,6375,8107,5902,5423,2520,1122,5015,6113,8859,9370,966,8673,2442\n7338,3423,4723,6533,848,8041,7921,8277,4094,5368,7252,8852,9166,2250,2801,6125,8093,5738,4038,9808,7359,9494,601,9116,4946,2702,5573,2921,9862,1462,1269,2410,4171,2709,7508,6241,7522,615,2407,8200,4189,5492,5649,7353,2590,5203,4274,710,7329,9063,956,8371,3722,4253,4785,1194,4828,4717,4548,940,983,2575,4511,2938,1827,2027,2700,1236,841,5760,1680,6260,2373,3851,1841,4968,1172,5179,7175,3509\n4420,1327,3560,2376,6260,2988,9537,4064,4829,8872,9598,3228,1792,7118,9962,9336,4368,9189,6857,1829,9863,6287,7303,7769,2707,8257,2391,2009,3975,4993,3068,9835,3427,341,8412,2134,4034,8511,6421,3041,9012,2983,7289,100,1355,7904,9186,6920,5856,2008,6545,8331,3655,5011,839,8041,9255,6524,3862,8788,62,7455,3513,5003,8413,3918,2076,7960,6108,3638,6999,3436,1441,4858,4181,1866,8731,7745,3744,1000\n356,8296,8325,1058,1277,4743,3850,2388,6079,6462,2815,5620,8495,5378,75,4324,3441,9870,1113,165,1544,1179,2834,562,6176,2313,6836,8839,2986,9454,5199,6888,1927,5866,8760,320,1792,8296,7898,6121,7241,5886,5814,2815,8336,1576,4314,3109,2572,6011,2086,9061,9403,3947,5487,9731,7281,3159,1819,1334,3181,5844,5114,9898,4634,2531,4412,6430,4262,8482,4546,4555,6804,2607,9421,686,8649,8860,7794,6672\n9870,152,1558,4963,8750,4754,6521,6256,8818,5208,5691,9659,8377,9725,5050,5343,2539,6101,1844,9700,7750,8114,5357,3001,8830,4438,199,9545,8496,43,2078,327,9397,106,6090,8181,8646,6414,7499,5450,4850,6273,5014,4131,7639,3913,6571,8534,9703,4391,7618,445,1320,5,1894,6771,7383,9191,4708,9706,6939,7937,8726,9382,5216,3685,2247,9029,8154,1738,9984,2626,9438,4167,6351,5060,29,1218,1239,4785\n192,5213,8297,8974,4032,6966,5717,1179,6523,4679,9513,1481,3041,5355,9303,9154,1389,8702,6589,7818,6336,3539,5538,3094,6646,6702,6266,2759,4608,4452,617,9406,8064,6379,444,5602,4950,1810,8391,1536,316,8714,1178,5182,5863,5110,5372,4954,1978,2971,5680,4863,2255,4630,5723,2168,538,1692,1319,7540,440,6430,6266,7712,7385,5702,620,641,3136,7350,1478,3155,2820,9109,6261,1122,4470,14,8493,2095\n1046,4301,6082,474,4974,7822,2102,5161,5172,6946,8074,9716,6586,9962,9749,5015,2217,995,5388,4402,7652,6399,6539,1349,8101,3677,1328,9612,7922,2879,231,5887,2655,508,4357,4964,3554,5930,6236,7384,4614,280,3093,9600,2110,7863,2631,6626,6620,68,1311,7198,7561,1768,5139,1431,221,230,2940,968,5283,6517,2146,1646,869,9402,7068,8645,7058,1765,9690,4152,2926,9504,2939,7504,6074,2944,6470,7859\n4659,736,4951,9344,1927,6271,8837,8711,3241,6579,7660,5499,5616,3743,5801,4682,9748,8796,779,1833,4549,8138,4026,775,4170,2432,4174,3741,7540,8017,2833,4027,396,811,2871,1150,9809,2719,9199,8504,1224,540,2051,3519,7982,7367,2761,308,3358,6505,2050,4836,5090,7864,805,2566,2409,6876,3361,8622,5572,5895,3280,441,7893,8105,1634,2929,274,3926,7786,6123,8233,9921,2674,5340,1445,203,4585,3837\n5759,338,7444,7968,7742,3755,1591,4839,1705,650,7061,2461,9230,9391,9373,2413,1213,431,7801,4994,2380,2703,6161,6878,8331,2538,6093,1275,5065,5062,2839,582,1014,8109,3525,1544,1569,8622,7944,2905,6120,1564,1839,5570,7579,1318,2677,5257,4418,5601,7935,7656,5192,1864,5886,6083,5580,6202,8869,1636,7907,4759,9082,5854,3185,7631,6854,5872,5632,5280,1431,2077,9717,7431,4256,8261,9680,4487,4752,4286\n1571,1428,8599,1230,7772,4221,8523,9049,4042,8726,7567,6736,9033,2104,4879,4967,6334,6716,3994,1269,8995,6539,3610,7667,6560,6065,874,848,4597,1711,7161,4811,6734,5723,6356,6026,9183,2586,5636,1092,7779,7923,8747,6887,7505,9909,1792,3233,4526,3176,1508,8043,720,5212,6046,4988,709,5277,8256,3642,1391,5803,1468,2145,3970,6301,7767,2359,8487,9771,8785,7520,856,1605,8972,2402,2386,991,1383,5963\n1822,4824,5957,6511,9868,4113,301,9353,6228,2881,2966,6956,9124,9574,9233,1601,7340,973,9396,540,4747,8590,9535,3650,7333,7583,4806,3593,2738,8157,5215,8472,2284,9473,3906,6982,5505,6053,7936,6074,7179,6688,1564,1103,6860,5839,2022,8490,910,7551,7805,881,7024,1855,9448,4790,1274,3672,2810,774,7623,4223,4850,6071,9975,4935,1915,9771,6690,3846,517,463,7624,4511,614,6394,3661,7409,1395,8127\n8738,3850,9555,3695,4383,2378,87,6256,6740,7682,9546,4255,6105,2000,1851,4073,8957,9022,6547,5189,2487,303,9602,7833,1628,4163,6678,3144,8589,7096,8913,5823,4890,7679,1212,9294,5884,2972,3012,3359,7794,7428,1579,4350,7246,4301,7779,7790,3294,9547,4367,3549,1958,8237,6758,3497,3250,3456,6318,1663,708,7714,6143,6890,3428,6853,9334,7992,591,6449,9786,1412,8500,722,5468,1371,108,3939,4199,2535\n7047,4323,1934,5163,4166,461,3544,2767,6554,203,6098,2265,9078,2075,4644,6641,8412,9183,487,101,7566,5622,1975,5726,2920,5374,7779,5631,3753,3725,2672,3621,4280,1162,5812,345,8173,9785,1525,955,5603,2215,2580,5261,2765,2990,5979,389,3907,2484,1232,5933,5871,3304,1138,1616,5114,9199,5072,7442,7245,6472,4760,6359,9053,7876,2564,9404,3043,9026,2261,3374,4460,7306,2326,966,828,3274,1712,3446\n3975,4565,8131,5800,4570,2306,8838,4392,9147,11,3911,7118,9645,4994,2028,6062,5431,2279,8752,2658,7836,994,7316,5336,7185,3289,1898,9689,2331,5737,3403,1124,2679,3241,7748,16,2724,5441,6640,9368,9081,5618,858,4969,17,2103,6035,8043,7475,2181,939,415,1617,8500,8253,2155,7843,7974,7859,1746,6336,3193,2617,8736,4079,6324,6645,8891,9396,5522,6103,1857,8979,3835,2475,1310,7422,610,8345,7615\n9248,5397,5686,2988,3446,4359,6634,9141,497,9176,6773,7448,1907,8454,916,1596,2241,1626,1384,2741,3649,5362,8791,7170,2903,2475,5325,6451,924,3328,522,90,4813,9737,9557,691,2388,1383,4021,1609,9206,4707,5200,7107,8104,4333,9860,5013,1224,6959,8527,1877,4545,7772,6268,621,4915,9349,5970,706,9583,3071,4127,780,8231,3017,9114,3836,7503,2383,1977,4870,8035,2379,9704,1037,3992,3642,1016,4303\n5093,138,4639,6609,1146,5565,95,7521,9077,2272,974,4388,2465,2650,722,4998,3567,3047,921,2736,7855,173,2065,4238,1048,5,6847,9548,8632,9194,5942,4777,7910,8971,6279,7253,2516,1555,1833,3184,9453,9053,6897,7808,8629,4877,1871,8055,4881,7639,1537,7701,2508,7564,5845,5023,2304,5396,3193,2955,1088,3801,6203,1748,3737,1276,13,4120,7715,8552,3047,2921,106,7508,304,1280,7140,2567,9135,5266\n6237,4607,7527,9047,522,7371,4883,2540,5867,6366,5301,1570,421,276,3361,527,6637,4861,2401,7522,5808,9371,5298,2045,5096,5447,7755,5115,7060,8529,4078,1943,1697,1764,5453,7085,960,2405,739,2100,5800,728,9737,5704,5693,1431,8979,6428,673,7540,6,7773,5857,6823,150,5869,8486,684,5816,9626,7451,5579,8260,3397,5322,6920,1879,2127,2884,5478,4977,9016,6165,6292,3062,5671,5968,78,4619,4763\n9905,7127,9390,5185,6923,3721,9164,9705,4341,1031,1046,5127,7376,6528,3248,4941,1178,7889,3364,4486,5358,9402,9158,8600,1025,874,1839,1783,309,9030,1843,845,8398,1433,7118,70,8071,2877,3904,8866,6722,4299,10,1929,5897,4188,600,1889,3325,2485,6473,4474,7444,6992,4846,6166,4441,2283,2629,4352,7775,1101,2214,9985,215,8270,9750,2740,8361,7103,5930,8664,9690,8302,9267,344,2077,1372,1880,9550\n5825,8517,7769,2405,8204,1060,3603,7025,478,8334,1997,3692,7433,9101,7294,7498,9415,5452,3850,3508,6857,9213,6807,4412,7310,854,5384,686,4978,892,8651,3241,2743,3801,3813,8588,6701,4416,6990,6490,3197,6838,6503,114,8343,5844,8646,8694,65,791,5979,2687,2621,2019,8097,1423,3644,9764,4921,3266,3662,5561,2476,8271,8138,6147,1168,3340,1998,9874,6572,9873,6659,5609,2711,3931,9567,4143,7833,8887\n6223,2099,2700,589,4716,8333,1362,5007,2753,2848,4441,8397,7192,8191,4916,9955,6076,3370,6396,6971,3156,248,3911,2488,4930,2458,7183,5455,170,6809,6417,3390,1956,7188,577,7526,2203,968,8164,479,8699,7915,507,6393,4632,1597,7534,3604,618,3280,6061,9793,9238,8347,568,9645,2070,5198,6482,5000,9212,6655,5961,7513,1323,3872,6170,3812,4146,2736,67,3151,5548,2781,9679,7564,5043,8587,1893,4531\n5826,3690,6724,2121,9308,6986,8106,6659,2142,1642,7170,2877,5757,6494,8026,6571,8387,9961,6043,9758,9607,6450,8631,8334,7359,5256,8523,2225,7487,1977,9555,8048,5763,2414,4948,4265,2427,8978,8088,8841,9208,9601,5810,9398,8866,9138,4176,5875,7212,3272,6759,5678,7649,4922,5422,1343,8197,3154,3600,687,1028,4579,2084,9467,4492,7262,7296,6538,7657,7134,2077,1505,7332,6890,8964,4879,7603,7400,5973,739\n1861,1613,4879,1884,7334,966,2000,7489,2123,4287,1472,3263,4726,9203,1040,4103,6075,6049,330,9253,4062,4268,1635,9960,577,1320,3195,9628,1030,4092,4979,6474,6393,2799,6967,8687,7724,7392,9927,2085,3200,6466,8702,265,7646,8665,7986,7266,4574,6587,612,2724,704,3191,8323,9523,3002,704,5064,3960,8209,2027,2758,8393,4875,4641,9584,6401,7883,7014,768,443,5490,7506,1852,2005,8850,5776,4487,4269\n4052,6687,4705,7260,6645,6715,3706,5504,8672,2853,1136,8187,8203,4016,871,1809,1366,4952,9294,5339,6872,2645,6083,7874,3056,5218,7485,8796,7401,3348,2103,426,8572,4163,9171,3176,948,7654,9344,3217,1650,5580,7971,2622,76,2874,880,2034,9929,1546,2659,5811,3754,7096,7436,9694,9960,7415,2164,953,2360,4194,2397,1047,2196,6827,575,784,2675,8821,6802,7972,5996,6699,2134,7577,2887,1412,4349,4380\n4629,2234,6240,8132,7592,3181,6389,1214,266,1910,2451,8784,2790,1127,6932,1447,8986,2492,5476,397,889,3027,7641,5083,5776,4022,185,3364,5701,2442,2840,4160,9525,4828,6602,2614,7447,3711,4505,7745,8034,6514,4907,2605,7753,6958,7270,6936,3006,8968,439,2326,4652,3085,3425,9863,5049,5361,8688,297,7580,8777,7916,6687,8683,7141,306,9569,2384,1500,3346,4601,7329,9040,6097,2727,6314,4501,4974,2829\n8316,4072,2025,6884,3027,1808,5714,7624,7880,8528,4205,8686,7587,3230,1139,7273,6163,6986,3914,9309,1464,9359,4474,7095,2212,7302,2583,9462,7532,6567,1606,4436,8981,5612,6796,4385,5076,2007,6072,3678,8331,1338,3299,8845,4783,8613,4071,1232,6028,2176,3990,2148,3748,103,9453,538,6745,9110,926,3125,473,5970,8728,7072,9062,1404,1317,5139,9862,6496,6062,3338,464,1600,2532,1088,8232,7739,8274,3873\n2341,523,7096,8397,8301,6541,9844,244,4993,2280,7689,4025,4196,5522,7904,6048,2623,9258,2149,9461,6448,8087,7245,1917,8340,7127,8466,5725,6996,3421,5313,512,9164,9837,9794,8369,4185,1488,7210,1524,1016,4620,9435,2478,7765,8035,697,6677,3724,6988,5853,7662,3895,9593,1185,4727,6025,5734,7665,3070,138,8469,6748,6459,561,7935,8646,2378,462,7755,3115,9690,8877,3946,2728,8793,244,6323,8666,4271\n6430,2406,8994,56,1267,3826,9443,7079,7579,5232,6691,3435,6718,5698,4144,7028,592,2627,217,734,6194,8156,9118,58,2640,8069,4127,3285,694,3197,3377,4143,4802,3324,8134,6953,7625,3598,3584,4289,7065,3434,2106,7132,5802,7920,9060,7531,3321,1725,1067,3751,444,5503,6785,7937,6365,4803,198,6266,8177,1470,6390,1606,2904,7555,9834,8667,2033,1723,5167,1666,8546,8152,473,4475,6451,7947,3062,3281\n2810,3042,7759,1741,2275,2609,7676,8640,4117,1958,7500,8048,1757,3954,9270,1971,4796,2912,660,5511,3553,1012,5757,4525,6084,7198,8352,5775,7726,8591,7710,9589,3122,4392,6856,5016,749,2285,3356,7482,9956,7348,2599,8944,495,3462,3578,551,4543,7207,7169,7796,1247,4278,6916,8176,3742,8385,2310,1345,8692,2667,4568,1770,8319,3585,4920,3890,4928,7343,5385,9772,7947,8786,2056,9266,3454,2807,877,2660\n6206,8252,5928,5837,4177,4333,207,7934,5581,9526,8906,1498,8411,2984,5198,5134,2464,8435,8514,8674,3876,599,5327,826,2152,4084,2433,9327,9697,4800,2728,3608,3849,3861,3498,9943,1407,3991,7191,9110,5666,8434,4704,6545,5944,2357,1163,4995,9619,6754,4200,9682,6654,4862,4744,5953,6632,1054,293,9439,8286,2255,696,8709,1533,1844,6441,430,1999,6063,9431,7018,8057,2920,6266,6799,356,3597,4024,6665\n3847,6356,8541,7225,2325,2946,5199,469,5450,7508,2197,9915,8284,7983,6341,3276,3321,16,1321,7608,5015,3362,8491,6968,6818,797,156,2575,706,9516,5344,5457,9210,5051,8099,1617,9951,7663,8253,9683,2670,1261,4710,1068,8753,4799,1228,2621,3275,6188,4699,1791,9518,8701,5932,4275,6011,9877,2933,4182,6059,2930,6687,6682,9771,654,9437,3169,8596,1827,5471,8909,2352,123,4394,3208,8756,5513,6917,2056\n5458,8173,3138,3290,4570,4892,3317,4251,9699,7973,1163,1935,5477,6648,9614,5655,9592,975,9118,2194,7322,8248,8413,3462,8560,1907,7810,6650,7355,2939,4973,6894,3933,3784,3200,2419,9234,4747,2208,2207,1945,2899,1407,6145,8023,3484,5688,7686,2737,3828,3704,9004,5190,9740,8643,8650,5358,4426,1522,1707,3613,9887,6956,2447,2762,833,1449,9489,2573,1080,4167,3456,6809,2466,227,7125,2759,6250,6472,8089\n3266,7025,9756,3914,1265,9116,7723,9788,6805,5493,2092,8688,6592,9173,4431,4028,6007,7131,4446,4815,3648,6701,759,3312,8355,4485,4187,5188,8746,7759,3528,2177,5243,8379,3838,7233,4607,9187,7216,2190,6967,2920,6082,7910,5354,3609,8958,6949,7731,494,8753,8707,1523,4426,3543,7085,647,6771,9847,646,5049,824,8417,5260,2730,5702,2513,9275,4279,2767,8684,1165,9903,4518,55,9682,8963,6005,2102,6523\n1998,8731,936,1479,5259,7064,4085,91,7745,7136,3773,3810,730,8255,2705,2653,9790,6807,2342,355,9344,2668,3690,2028,9679,8102,574,4318,6481,9175,5423,8062,2867,9657,7553,3442,3920,7430,3945,7639,3714,3392,2525,4995,4850,2867,7951,9667,486,9506,9888,781,8866,1702,3795,90,356,1483,4200,2131,6969,5931,486,6880,4404,1084,5169,4910,6567,8335,4686,5043,2614,3352,2667,4513,6472,7471,5720,1616\n8878,1613,1716,868,1906,2681,564,665,5995,2474,7496,3432,9491,9087,8850,8287,669,823,347,6194,2264,2592,7871,7616,8508,4827,760,2676,4660,4881,7572,3811,9032,939,4384,929,7525,8419,5556,9063,662,8887,7026,8534,3111,1454,2082,7598,5726,6687,9647,7608,73,3014,5063,670,5461,5631,3367,9796,8475,7908,5073,1565,5008,5295,4457,1274,4788,1728,338,600,8415,8535,9351,7750,6887,5845,1741,125\n3637,6489,9634,9464,9055,2413,7824,9517,7532,3577,7050,6186,6980,9365,9782,191,870,2497,8498,2218,2757,5420,6468,586,3320,9230,1034,1393,9886,5072,9391,1178,8464,8042,6869,2075,8275,3601,7715,9470,8786,6475,8373,2159,9237,2066,3264,5000,679,355,3069,4073,494,2308,5512,4334,9438,8786,8637,9774,1169,1949,6594,6072,4270,9158,7916,5752,6794,9391,6301,5842,3285,2141,3898,8027,4310,8821,7079,1307\n8497,6681,4732,7151,7060,5204,9030,7157,833,5014,8723,3207,9796,9286,4913,119,5118,7650,9335,809,3675,2597,5144,3945,5090,8384,187,4102,1260,2445,2792,4422,8389,9290,50,1765,1521,6921,8586,4368,1565,5727,7855,2003,4834,9897,5911,8630,5070,1330,7692,7557,7980,6028,5805,9090,8265,3019,3802,698,9149,5748,1965,9658,4417,5994,5584,8226,2937,272,5743,1278,5698,8736,2595,6475,5342,6596,1149,6920\n8188,8009,9546,6310,8772,2500,9846,6592,6872,3857,1307,8125,7042,1544,6159,2330,643,4604,7899,6848,371,8067,2062,3200,7295,1857,9505,6936,384,2193,2190,301,8535,5503,1462,7380,5114,4824,8833,1763,4974,8711,9262,6698,3999,2645,6937,7747,1128,2933,3556,7943,2885,3122,9105,5447,418,2899,5148,3699,9021,9501,597,4084,175,1621,1,1079,6067,5812,4326,9914,6633,5394,4233,6728,9084,1864,5863,1225\n9935,8793,9117,1825,9542,8246,8437,3331,9128,9675,6086,7075,319,1334,7932,3583,7167,4178,1726,7720,695,8277,7887,6359,5912,1719,2780,8529,1359,2013,4498,8072,1129,9998,1147,8804,9405,6255,1619,2165,7491,1,8882,7378,3337,503,5758,4109,3577,985,3200,7615,8058,5032,1080,6410,6873,5496,1466,2412,9885,5904,4406,3605,8770,4361,6205,9193,1537,9959,214,7260,9566,1685,100,4920,7138,9819,5637,976\n3466,9854,985,1078,7222,8888,5466,5379,3578,4540,6853,8690,3728,6351,7147,3134,6921,9692,857,3307,4998,2172,5783,3931,9417,2541,6299,13,787,2099,9131,9494,896,8600,1643,8419,7248,2660,2609,8579,91,6663,5506,7675,1947,6165,4286,1972,9645,3805,1663,1456,8853,5705,9889,7489,1107,383,4044,2969,3343,152,7805,4980,9929,5033,1737,9953,7197,9158,4071,1324,473,9676,3984,9680,3606,8160,7384,5432\n1005,4512,5186,3953,2164,3372,4097,3247,8697,3022,9896,4101,3871,6791,3219,2742,4630,6967,7829,5991,6134,1197,1414,8923,8787,1394,8852,5019,7768,5147,8004,8825,5062,9625,7988,1110,3992,7984,9966,6516,6251,8270,421,3723,1432,4830,6935,8095,9059,2214,6483,6846,3120,1587,6201,6691,9096,9627,6671,4002,3495,9939,7708,7465,5879,6959,6634,3241,3401,2355,9061,2611,7830,3941,2177,2146,5089,7079,519,6351\n7280,8586,4261,2831,7217,3141,9994,9940,5462,2189,4005,6942,9848,5350,8060,6665,7519,4324,7684,657,9453,9296,2944,6843,7499,7847,1728,9681,3906,6353,5529,2822,3355,3897,7724,4257,7489,8672,4356,3983,1948,6892,7415,4153,5893,4190,621,1736,4045,9532,7701,3671,1211,1622,3176,4524,9317,7800,5638,6644,6943,5463,3531,2821,1347,5958,3436,1438,2999,994,850,4131,2616,1549,3465,5946,690,9273,6954,7991\n9517,399,3249,2596,7736,2142,1322,968,7350,1614,468,3346,3265,7222,6086,1661,5317,2582,7959,4685,2807,2917,1037,5698,1529,3972,8716,2634,3301,3412,8621,743,8001,4734,888,7744,8092,3671,8941,1487,5658,7099,2781,99,1932,4443,4756,4652,9328,1581,7855,4312,5976,7255,6480,3996,2748,1973,9731,4530,2790,9417,7186,5303,3557,351,7182,9428,1342,9020,7599,1392,8304,2070,9138,7215,2008,9937,1106,7110\n7444,769,9688,632,1571,6820,8743,4338,337,3366,3073,1946,8219,104,4210,6986,249,5061,8693,7960,6546,1004,8857,5997,9352,4338,6105,5008,2556,6518,6694,4345,3727,7956,20,3954,8652,4424,9387,2035,8358,5962,5304,5194,8650,8282,1256,1103,2138,6679,1985,3653,2770,2433,4278,615,2863,1715,242,3790,2636,6998,3088,1671,2239,957,5411,4595,6282,2881,9974,2401,875,7574,2987,4587,3147,6766,9885,2965\n3287,3016,3619,6818,9073,6120,5423,557,2900,2015,8111,3873,1314,4189,1846,4399,7041,7583,2427,2864,3525,5002,2069,748,1948,6015,2684,438,770,8367,1663,7887,7759,1885,157,7770,4520,4878,3857,1137,3525,3050,6276,5569,7649,904,4533,7843,2199,5648,7628,9075,9441,3600,7231,2388,5640,9096,958,3058,584,5899,8150,1181,9616,1098,8162,6819,8171,1519,1140,7665,8801,2632,1299,9192,707,9955,2710,7314\n1772,2963,7578,3541,3095,1488,7026,2634,6015,4633,4370,2762,1650,2174,909,8158,2922,8467,4198,4280,9092,8856,8835,5457,2790,8574,9742,5054,9547,4156,7940,8126,9824,7340,8840,6574,3547,1477,3014,6798,7134,435,9484,9859,3031,4,1502,4133,1738,1807,4825,463,6343,9701,8506,9822,9555,8688,8168,3467,3234,6318,1787,5591,419,6593,7974,8486,9861,6381,6758,194,3061,4315,2863,4665,3789,2201,1492,4416\n126,8927,6608,5682,8986,6867,1715,6076,3159,788,3140,4744,830,9253,5812,5021,7616,8534,1546,9590,1101,9012,9821,8132,7857,4086,1069,7491,2988,1579,2442,4321,2149,7642,6108,250,6086,3167,24,9528,7663,2685,1220,9196,1397,5776,1577,1730,5481,977,6115,199,6326,2183,3767,5928,5586,7561,663,8649,9688,949,5913,9160,1870,5764,9887,4477,6703,1413,4995,5494,7131,2192,8969,7138,3997,8697,646,1028\n8074,1731,8245,624,4601,8706,155,8891,309,2552,8208,8452,2954,3124,3469,4246,3352,1105,4509,8677,9901,4416,8191,9283,5625,7120,2952,8881,7693,830,4580,8228,9459,8611,4499,1179,4988,1394,550,2336,6089,6872,269,7213,1848,917,6672,4890,656,1478,6536,3165,4743,4990,1176,6211,7207,5284,9730,4738,1549,4986,4942,8645,3698,9429,1439,2175,6549,3058,6513,1574,6988,8333,3406,5245,5431,7140,7085,6407\n7845,4694,2530,8249,290,5948,5509,1588,5940,4495,5866,5021,4626,3979,3296,7589,4854,1998,5627,3926,8346,6512,9608,1918,7070,4747,4182,2858,2766,4606,6269,4107,8982,8568,9053,4244,5604,102,2756,727,5887,2566,7922,44,5986,621,1202,374,6988,4130,3627,6744,9443,4568,1398,8679,397,3928,9159,367,2917,6127,5788,3304,8129,911,2669,1463,9749,264,4478,8940,1109,7309,2462,117,4692,7724,225,2312\n4164,3637,2000,941,8903,39,3443,7172,1031,3687,4901,8082,4945,4515,7204,9310,9349,9535,9940,218,1788,9245,2237,1541,5670,6538,6047,5553,9807,8101,1925,8714,445,8332,7309,6830,5786,5736,7306,2710,3034,1838,7969,6318,7912,2584,2080,7437,6705,2254,7428,820,782,9861,7596,3842,3631,8063,5240,6666,394,4565,7865,4895,9890,6028,6117,4724,9156,4473,4552,602,470,6191,4927,5387,884,3146,1978,3000\n4258,6880,1696,3582,5793,4923,2119,1155,9056,9698,6603,3768,5514,9927,9609,6166,6566,4536,4985,4934,8076,9062,6741,6163,7399,4562,2337,5600,2919,9012,8459,1308,6072,1225,9306,8818,5886,7243,7365,8792,6007,9256,6699,7171,4230,7002,8720,7839,4533,1671,478,7774,1607,2317,5437,4705,7886,4760,6760,7271,3081,2997,3088,7675,6208,3101,6821,6840,122,9633,4900,2067,8546,4549,2091,7188,5605,8599,6758,5229\n7854,5243,9155,3556,8812,7047,2202,1541,5993,4600,4760,713,434,7911,7426,7414,8729,322,803,7960,7563,4908,6285,6291,736,3389,9339,4132,8701,7534,5287,3646,592,3065,7582,2592,8755,6068,8597,1982,5782,1894,2900,6236,4039,6569,3037,5837,7698,700,7815,2491,7272,5878,3083,6778,6639,3589,5010,8313,2581,6617,5869,8402,6808,2951,2321,5195,497,2190,6187,1342,1316,4453,7740,4154,2959,1781,1482,8256\n7178,2046,4419,744,8312,5356,6855,8839,319,2962,5662,47,6307,8662,68,4813,567,2712,9931,1678,3101,8227,6533,4933,6656,92,5846,4780,6256,6361,4323,9985,1231,2175,7178,3034,9744,6155,9165,7787,5836,9318,7860,9644,8941,6480,9443,8188,5928,161,6979,2352,5628,6991,1198,8067,5867,6620,3778,8426,2994,3122,3124,6335,3918,8897,2655,9670,634,1088,1576,8935,7255,474,8166,7417,9547,2886,5560,3842\n6957,3111,26,7530,7143,1295,1744,6057,3009,1854,8098,5405,2234,4874,9447,2620,9303,27,7410,969,40,2966,5648,7596,8637,4238,3143,3679,7187,690,9980,7085,7714,9373,5632,7526,6707,3951,9734,4216,2146,3602,5371,6029,3039,4433,4855,4151,1449,3376,8009,7240,7027,4602,2947,9081,4045,8424,9352,8742,923,2705,4266,3232,2264,6761,363,2651,3383,7770,6730,7856,7340,9679,2158,610,4471,4608,910,6241\n4417,6756,1013,8797,658,8809,5032,8703,7541,846,3357,2920,9817,1745,9980,7593,4667,3087,779,3218,6233,5568,4296,2289,2654,7898,5021,9461,5593,8214,9173,4203,2271,7980,2983,5952,9992,8399,3468,1776,3188,9314,1720,6523,2933,621,8685,5483,8986,6163,3444,9539,4320,155,3992,2828,2150,6071,524,2895,5468,8063,1210,3348,9071,4862,483,9017,4097,6186,9815,3610,5048,1644,1003,9865,9332,2145,1944,2213\n9284,3803,4920,1927,6706,4344,7383,4786,9890,2010,5228,1224,3158,6967,8580,8990,8883,5213,76,8306,2031,4980,5639,9519,7184,5645,7769,3259,8077,9130,1317,3096,9624,3818,1770,695,2454,947,6029,3474,9938,3527,5696,4760,7724,7738,2848,6442,5767,6845,8323,4131,2859,7595,2500,4815,3660,9130,8580,7016,8231,4391,8369,3444,4069,4021,556,6154,627,2778,1496,4206,6356,8434,8491,3816,8231,3190,5575,1015\n3787,7572,1788,6803,5641,6844,1961,4811,8535,9914,9999,1450,8857,738,4662,8569,6679,2225,7839,8618,286,2648,5342,2294,3205,4546,176,8705,3741,6134,8324,8021,7004,5205,7032,6637,9442,5539,5584,4819,5874,5807,8589,6871,9016,983,1758,3786,1519,6241,185,8398,495,3370,9133,3051,4549,9674,7311,9738,3316,9383,2658,2776,9481,7558,619,3943,3324,6491,4933,153,9738,4623,912,3595,7771,7939,1219,4405\n2650,3883,4154,5809,315,7756,4430,1788,4451,1631,6461,7230,6017,5751,138,588,5282,2442,9110,9035,6349,2515,1570,6122,4192,4174,3530,1933,4186,4420,4609,5739,4135,2963,6308,1161,8809,8619,2796,3819,6971,8228,4188,1492,909,8048,2328,6772,8467,7671,9068,2226,7579,6422,7056,8042,3296,2272,3006,2196,7320,3238,3490,3102,37,1293,3212,4767,5041,8773,5794,4456,6174,7279,7054,2835,7053,9088,790,6640\n3101,1057,7057,3826,6077,1025,2955,1224,1114,6729,5902,4698,6239,7203,9423,1804,4417,6686,1426,6941,8071,1029,4985,9010,6122,6597,1622,1574,3513,1684,7086,5505,3244,411,9638,4150,907,9135,829,981,1707,5359,8781,9751,5,9131,3973,7159,1340,6955,7514,7993,6964,8198,1933,2797,877,3993,4453,8020,9349,8646,2779,8679,2961,3547,3374,3510,1129,3568,2241,2625,9138,5974,8206,7669,7678,1833,8700,4480\n4865,9912,8038,8238,782,3095,8199,1127,4501,7280,2112,2487,3626,2790,9432,1475,6312,8277,4827,2218,5806,7132,8752,1468,7471,6386,739,8762,8323,8120,5169,9078,9058,3370,9560,7987,8585,8531,5347,9312,1058,4271,1159,5286,5404,6925,8606,9204,7361,2415,560,586,4002,2644,1927,2824,768,4409,2942,3345,1002,808,4941,6267,7979,5140,8643,7553,9438,7320,4938,2666,4609,2778,8158,6730,3748,3867,1866,7181\n171,3771,7134,8927,4778,2913,3326,2004,3089,7853,1378,1729,4777,2706,9578,1360,5693,3036,1851,7248,2403,2273,8536,6501,9216,613,9671,7131,7719,6425,773,717,8803,160,1114,7554,7197,753,4513,4322,8499,4533,2609,4226,8710,6627,644,9666,6260,4870,5744,7385,6542,6203,7703,6130,8944,5589,2262,6803,6381,7414,6888,5123,7320,9392,9061,6780,322,8975,7050,5089,1061,2260,3199,1150,1865,5386,9699,6501\n3744,8454,6885,8277,919,1923,4001,6864,7854,5519,2491,6057,8794,9645,1776,5714,9786,9281,7538,6916,3215,395,2501,9618,4835,8846,9708,2813,3303,1794,8309,7176,2206,1602,1838,236,4593,2245,8993,4017,10,8215,6921,5206,4023,5932,6997,7801,262,7640,3107,8275,4938,7822,2425,3223,3886,2105,8700,9526,2088,8662,8034,7004,5710,2124,7164,3574,6630,9980,4242,2901,9471,1491,2117,4562,1130,9086,4117,6698\n2810,2280,2331,1170,4554,4071,8387,1215,2274,9848,6738,1604,7281,8805,439,1298,8318,7834,9426,8603,6092,7944,1309,8828,303,3157,4638,4439,9175,1921,4695,7716,1494,1015,1772,5913,1127,1952,1950,8905,4064,9890,385,9357,7945,5035,7082,5369,4093,6546,5187,5637,2041,8946,1758,7111,6566,1027,1049,5148,7224,7248,296,6169,375,1656,7993,2816,3717,4279,4675,1609,3317,42,6201,3100,3144,163,9530,4531\n7096,6070,1009,4988,3538,5801,7149,3063,2324,2912,7911,7002,4338,7880,2481,7368,3516,2016,7556,2193,1388,3865,8125,4637,4096,8114,750,3144,1938,7002,9343,4095,1392,4220,3455,6969,9647,1321,9048,1996,1640,6626,1788,314,9578,6630,2813,6626,4981,9908,7024,4355,3201,3521,3864,3303,464,1923,595,9801,3391,8366,8084,9374,1041,8807,9085,1892,9431,8317,9016,9221,8574,9981,9240,5395,2009,6310,2854,9255\n8830,3145,2960,9615,8220,6061,3452,2918,6481,9278,2297,3385,6565,7066,7316,5682,107,7646,4466,68,1952,9603,8615,54,7191,791,6833,2560,693,9733,4168,570,9127,9537,1925,8287,5508,4297,8452,8795,6213,7994,2420,4208,524,5915,8602,8330,2651,8547,6156,1812,6271,7991,9407,9804,1553,6866,1128,2119,4691,9711,8315,5879,9935,6900,482,682,4126,1041,428,6247,3720,5882,7526,2582,4327,7725,3503,2631\n2738,9323,721,7434,1453,6294,2957,3786,5722,6019,8685,4386,3066,9057,6860,499,5315,3045,5194,7111,3137,9104,941,586,3066,755,4177,8819,7040,5309,3583,3897,4428,7788,4721,7249,6559,7324,825,7311,3760,6064,6070,9672,4882,584,1365,9739,9331,5783,2624,7889,1604,1303,1555,7125,8312,425,8936,3233,7724,1480,403,7440,1784,1754,4721,1569,652,3893,4574,5692,9730,4813,9844,8291,9199,7101,3391,8914\n6044,2928,9332,3328,8588,447,3830,1176,3523,2705,8365,6136,5442,9049,5526,8575,8869,9031,7280,706,2794,8814,5767,4241,7696,78,6570,556,5083,1426,4502,3336,9518,2292,1885,3740,3153,9348,9331,8051,2759,5407,9028,7840,9255,831,515,2612,9747,7435,8964,4971,2048,4900,5967,8271,1719,9670,2810,6777,1594,6367,6259,8316,3815,1689,6840,9437,4361,822,9619,3065,83,6344,7486,8657,8228,9635,6932,4864\n8478,4777,6334,4678,7476,4963,6735,3096,5860,1405,5127,7269,7793,4738,227,9168,2996,8928,765,733,1276,7677,6258,1528,9558,3329,302,8901,1422,8277,6340,645,9125,8869,5952,141,8141,1816,9635,4025,4184,3093,83,2344,2747,9352,7966,1206,1126,1826,218,7939,2957,2729,810,8752,5247,4174,4038,8884,7899,9567,301,5265,5752,7524,4381,1669,3106,8270,6228,6373,754,2547,4240,2313,5514,3022,1040,9738\n2265,8192,1763,1369,8469,8789,4836,52,1212,6690,5257,8918,6723,6319,378,4039,2421,8555,8184,9577,1432,7139,8078,5452,9628,7579,4161,7490,5159,8559,1011,81,478,5840,1964,1334,6875,8670,9900,739,1514,8692,522,9316,6955,1345,8132,2277,3193,9773,3923,4177,2183,1236,6747,6575,4874,6003,6409,8187,745,8776,9440,7543,9825,2582,7381,8147,7236,5185,7564,6125,218,7991,6394,391,7659,7456,5128,5294\n2132,8992,8160,5782,4420,3371,3798,5054,552,5631,7546,4716,1332,6486,7892,7441,4370,6231,4579,2121,8615,1145,9391,1524,1385,2400,9437,2454,7896,7467,2928,8400,3299,4025,7458,4703,7206,6358,792,6200,725,4275,4136,7390,5984,4502,7929,5085,8176,4600,119,3568,76,9363,6943,2248,9077,9731,6213,5817,6729,4190,3092,6910,759,2682,8380,1254,9604,3011,9291,5329,9453,9746,2739,6522,3765,5634,1113,5789\n5304,5499,564,2801,679,2653,1783,3608,7359,7797,3284,796,3222,437,7185,6135,8571,2778,7488,5746,678,6140,861,7750,803,9859,9918,2425,3734,2698,9005,4864,9818,6743,2475,132,9486,3825,5472,919,292,4411,7213,7699,6435,9019,6769,1388,802,2124,1345,8493,9487,8558,7061,8777,8833,2427,2238,5409,4957,8503,3171,7622,5779,6145,2417,5873,5563,5693,9574,9491,1937,7384,4563,6842,5432,2751,3406,7981\n"
  },
  {
    "path": "Problem085/.hash",
    "content": "92bf5e6240737e0326ea59846a83e076\n"
  },
  {
    "path": "Problem085/Python/solution_1.py",
    "content": "\nLIMIT = 2000000;\n\ndef solve(limit):\n    a = 0\n    dam = limit\n    for i in range(2, 101):\n        for j in range(i, 101):\n            d = abs(i*(i + 1) * j*(j + 1)/4 - limit)\n            if d < dam:\n                a, dam = i * j, d\n    return a\n\nif __name__ == \"__main__\":\n    print(solve(LIMIT))\n"
  },
  {
    "path": "Problem085/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=85)\n"
  },
  {
    "path": "Problem087/.hash",
    "content": "e7fb7907f1af626cc42e787e367ec602\n"
  },
  {
    "path": "Problem087/Python/solution_1.py",
    "content": "import math\n\ndef _prime_sieve(start, limit):\n    def is_prime(n):\n        if n%2 == 0:\n            return False\n        for i in range(3, int(math.sqrt(n)) + 1, 2):\n            if n%i == 0:\n                return False\n        return True\n    sieve = []\n    if start <= 2: sieve.append(2)\n    for i in range(start, limit):\n        if is_prime(i):\n            sieve.append(i)\n    return sieve\n\nLIMIT = 50000000\n\ns = lambda x: int(math.sqrt(x))\n\ndef solve(limit):\n    numbers = {}\n    primes_2 = _prime_sieve(2, s(limit))\n    primes_3 = _prime_sieve(2, int(limit**(1/3))+1)\n    primes_4 = _prime_sieve(2, s(s(limit))+1)\n    for i in primes_2:\n        for j in primes_3:\n            for k in primes_4:\n                n = i**2 + j**3 + k**4\n                if n >= limit:\n                    break\n                else:\n                    numbers[n] = 0\n    return len(numbers)\n\n\nif __name__ == \"__main__\":\n    print(solve(LIMIT))\n"
  },
  {
    "path": "Problem087/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=87)\n"
  },
  {
    "path": "Problem089/.hash",
    "content": "5c572eca050594c7bc3c36e7e8ab9550"
  },
  {
    "path": "Problem089/Elixir/solution_1.exs",
    "content": "defmodule RomanNumerals do\n  def convert(file) do\n    case File.read(file) do\n      {:ok, body}     ->\n        trunc_nums(body)\n      {:error,reason} ->\n        :file.format_error(reason)\n    end\n  end\n\n  def trunc_nums(file) do\n    file\n      |> String.replace(~r/CCCC|XXXX|IIII|LXXXX|DCCCC|VIIII/,\"**\")\n      |> String.length()\n      |> diff(String.length(file))\n      |> IO.puts\n  end\n\n  def diff(replaced,original), do: original - replaced\nend\n\nRomanNumerals.convert(\"../p089_romans.txt\")\n"
  },
  {
    "path": "Problem089/Python/solution_1.py",
    "content": "from collections import Counter\nfrom operator import itemgetter\n\nunits = {\n    'I': 1,\n    'V': 5,\n    'X': 10,\n    'L': 50,\n    'C': 100,\n    'D': 500,\n    'M': 1000\n}\n\n\ndef check_valid_roman(string: str) -> int:\n    c = Counter(string)\n    only_once = ['D', 'L', 'V']\n    invalid = {\n        'IIIIIIIIII',\n        'XXXXXXXXXX',\n        'CCCCCCCCCC',\n        'VV',\n        'DD',\n        'LL',\n    }\n\n    for k in only_once:\n        if c.get(k, 0) > 1:\n            return False\n\n    for rule in invalid:\n        unit = rule[0]\n        if c.get(unit, 0) >= len(rule):\n            return False\n\n    return True\n\n\ndef parse_roman(string: str) -> int:\n    codification = list(map(units.get, string))\n    signal = []\n    for i in range(len(codification) - 1):\n        if codification[i] >= codification[i+1]:\n            signal.append(+1)\n        else:\n            signal.append(-1)\n    signal.append(1)\n    number = 0\n    for c, s in zip(codification, signal):\n        number += c * s\n\n    return number\n\n\ndef to_roman(integer: int) -> str:\n    characters_by_unit = sorted(units.items(),\n                                reverse=True,\n                                key=itemgetter(1))\n    roman = ''\n    for c, unit in characters_by_unit:\n        while integer - unit >= 0:\n            roman += c\n            integer -= unit\n        if c in ('X', 'V') and integer - unit + 1 >= 0:\n            roman += 'I' + c\n            integer -= units[c] - 1\n        elif c in ('L', 'C') and integer - unit + 10 >= 0:\n            roman += 'X' + c\n            integer -= units[c] - 10\n        elif c in ('D', 'M') and integer - unit + 100 >= 0:\n            roman += 'C' + c\n            integer -= units[c] - 100\n\n        if integer == 0:\n            break\n\n    return roman\n\n\ndef main():\n    with open('../p089_romans.txt') as f:\n        romans = list(map(str.strip, f.readlines()))\n        reduced = [to_roman(parse_roman(r)) for r in romans]\n\n        # # inconsistency check\n        # for r1, r2 in zip(romans, reduced):\n        #     v1, v2 = parse_roman(r1), parse_roman(r2)\n        #     if v1 != v2:\n        #         print(r1, r2, parse_roman(r1), parse_roman(r2))\n\n        print(len(''.join(romans)) - len(''.join(reduced)))\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "Problem089/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=89)"
  },
  {
    "path": "Problem089/p089_romans.txt",
    "content": "MMMMDCLXXII\nMMDCCCLXXXIII\nMMMDLXVIIII\nMMMMDXCV\nDCCCLXXII\nMMCCCVI\nMMMCDLXXXVII\nMMMMCCXXI\nMMMCCXX\nMMMMDCCCLXXIII\nMMMCCXXXVII\nMMCCCLXXXXIX\nMDCCCXXIIII\nMMCXCVI\nCCXCVIII\nMMMCCCXXXII\nMDCCXXX\nMMMDCCCL\nMMMMCCLXXXVI\nMMDCCCXCVI\nMMMDCII\nMMMCCXII\nMMMMDCCCCI\nMMDCCCXCII\nMDCXX\nCMLXXXVII\nMMMXXI\nMMMMCCCXIV\nMLXXII\nMCCLXXVIIII\nMMMMCCXXXXI\nMMDCCCLXXII\nMMMMXXXI\nMMMDCCLXXX\nMMDCCCLXXIX\nMMMMLXXXV\nMCXXI\nMDCCCXXXVII\nMMCCCLXVII\nMCDXXXV\nCCXXXIII\nCMXX\nMMMCLXIV\nMCCCLXXXVI\nDCCCXCVIII\nMMMDCCCCXXXIV\nCDXVIIII\nMMCCXXXV\nMDCCCXXXII\nMMMMD\nMMDCCLXIX\nMMMMCCCLXXXXVI\nMMDCCXLII\nMMMDCCCVIIII\nDCCLXXXIIII\nMDCCCCXXXII\nMMCXXVII\nDCCCXXX\nCCLXIX\nMMMXI\nMMMMCMLXXXXVIII\nMMMMDLXXXVII\nMMMMDCCCLX\nMMCCLIV\nCMIX\nMMDCCCLXXXIIII\nCLXXXII\nMMCCCCXXXXV\nMMMMDLXXXVIIII\nMMMDCCCXXI\nMMDCCCCLXXVI\nMCCCCLXX\nMMCDLVIIII\nMMMDCCCLIX\nMMMMCCCCXIX\nMMMDCCCLXXV\nXXXI\nCDLXXXIII\nMMMCXV\nMMDCCLXIII\nMMDXXX\nMMMMCCCLVII\nMMMDCI\nMMMMCDLXXXIIII\nMMMMCCCXVI\nCCCLXXXVIII\nMMMMCML\nMMMMXXIV\nMMMCCCCXXX\nDCCX\nMMMCCLX\nMMDXXXIII\nCCCLXIII\nMMDCCXIII\nMMMCCCXLIV\nCLXXXXI\nCXVI\nMMMMCXXXIII\nCLXX\nDCCCXVIII\nMLXVII\nDLXXXX\nMMDXXI\nMMMMDLXXXXVIII\nMXXII\nLXI\nDCCCCXLIII\nMMMMDV\nMMMMXXXIV\nMDCCCLVIII\nMMMCCLXXII\nMMMMDCCXXXVI\nMMMMLXXXIX\nMDCCCLXXXI\nMMMMDCCCXV\nMMMMCCCCXI\nMMMMCCCLIII\nMDCCCLXXI\nMMCCCCXI\nMLXV\nMMCDLXII\nMMMMDXXXXII\nMMMMDCCCXL\nMMMMCMLVI\nCCLXXXIV\nMMMDCCLXXXVI\nMMCLII\nMMMCCCCXV\nMMLXXXIII\nMMMV\nMMMV\nDCCLXII\nMMDCCCCXVI\nMMDCXLVIII\nCCLIIII\nCCCXXV\nMMDCCLXXXVIIII\nMMMMDCLXXVIII\nMMMMDCCCXCI\nMMMMCCCXX\nMMCCXLV\nMMMDCCCLXIX\nMMCCLXIIII\nMMMDCCCXLIX\nMMMMCCCLXIX\nCMLXXXXI\nMCMLXXXIX\nMMCDLXI\nMMDCLXXVIII\nMMMMDCCLXI\nMCDXXV\nDL\nCCCLXXII\nMXVIIII\nMCCCCLXVIII\nCIII\nMMMDCCLXXIIII\nMMMDVIII\nMMMMCCCLXXXXVII\nMMDXXVII\nMMDCCLXXXXV\nMMMMCXLVI\nMMMDCCLXXXII\nMMMDXXXVI\nMCXXII\nCLI\nDCLXXXIX\nMMMCLI\nMDCLXIII\nMMMMDCCXCVII\nMMCCCLXXXV\nMMMDCXXVIII\nMMMCDLX\nMMMCMLII\nMMMIV\nMMMMDCCCLVIII\nMMMDLXXXVIII\nMCXXIV\nMMMMLXXVI\nCLXXIX\nMMMCCCCXXVIIII\nDCCLXXXV\nMMMDCCCVI\nLI\nCLXXXVI\nMMMMCCCLXXVI\nMCCCLXVI\nCCXXXIX\nMMDXXXXI\nMMDCCCXLI\nDCCCLXXXVIII\nMMMMDCCCIV\nMDCCCCXV\nMMCMVI\nMMMMCMLXXXXV\nMMDCCLVI\nMMMMCCXLVIII\nDCCCCIIII\nMMCCCCIII\nMMMDCCLXXXVIIII\nMDCCCLXXXXV\nDVII\nMMMV\nDCXXV\nMMDCCCXCV\nDCVIII\nMMCDLXVI\nMCXXVIII\nMDCCXCVIII\nMMDCLX\nMMMDCCLXIV\nMMCDLXXVII\nMMDLXXXIIII\nMMMMCCCXXII\nMMMDCCCXLIIII\nDCCCCLXVII\nMMMCLXXXXIII\nMCCXV\nMMMMDCXI\nMMMMDCLXXXXV\nMMMCCCLII\nMMCMIX\nMMDCCXXV\nMMDLXXXVI\nMMMMDCXXVIIII\nDCCCCXXXVIIII\nMMCCXXXIIII\nMMDCCLXXVIII\nMDCCLXVIIII\nMMCCLXXXV\nMMMMDCCCLXXXVIII\nMMCMXCI\nMDXLII\nMMMMDCCXIV\nMMMMLI\nDXXXXIII\nMMDCCXI\nMMMMCCLXXXIII\nMMMDCCCLXXIII\nMDCLVII\nMMCD\nMCCCXXVII\nMMMMDCCIIII\nMMMDCCXLVI\nMMMCLXXXVII\nMMMCCVIIII\nMCCCCLXXIX\nDL\nDCCCLXXVI\nMMDXCI\nMMMMDCCCCXXXVI\nMMCII\nMMMDCCCXXXXV\nMMMCDXLV\nMMDCXXXXIV\nMMD\nMDCCCLXXXX\nMMDCXLIII\nMMCCXXXII\nMMDCXXXXVIIII\nDCCCLXXI\nMDXCVIIII\nMMMMCCLXXVIII\nMDCLVIIII\nMMMCCCLXXXIX\nMDCLXXXV\nMDLVIII\nMMMMCCVII\nMMMMDCXIV\nMMMCCCLXIIII\nMMIIII\nMMMMCCCLXXIII\nCCIII\nMMMCCLV\nMMMDXIII\nMMMCCCXC\nMMMDCCCXXI\nMMMMCCCCXXXII\nCCCLVI\nMMMCCCLXXXVI\nMXVIIII\nMMMCCCCXIIII\nCLXVII\nMMMCCLXX\nCCCCLXIV\nMMXXXXII\nMMMMCCLXXXX\nMXL\nCCXVI\nCCCCLVIIII\nMMCCCII\nMCCCLVIII\nMMMMCCCX\nMCDLXXXXIV\nMDCCCXIII\nMMDCCCXL\nMMMMCCCXXIII\nDXXXIV\nCVI\nMMMMDCLXXX\nDCCCVII\nMMCMLXIIII\nMMMDCCCXXXIII\nDCCC\nMDIII\nMMCCCLXVI\nMMMCCCCLXXI\nMMDCCCCXVIII\nCCXXXVII\nCCCXXV\nMDCCCXII\nMMMCMV\nMMMMCMXV\nMMMMDCXCI\nDXXI\nMMCCXLVIIII\nMMMMCMLII\nMDLXXX\nMMDCLXVI\nCXXI\nMMMDCCCLIIII\nMMMCXXI\nMCCIII\nMMDCXXXXI\nCCXCII\nMMMMDXXXV\nMMMCCCLXV\nMMMMDLXV\nMMMCCCCXXXII\nMMMCCCVIII\nDCCCCLXXXXII\nMMCLXIV\nMMMMCXI\nMLXXXXVII\nMMMCDXXXVIII\nMDXXII\nMLV\nMMMMDLXVI\nMMMCXII\nXXXIII\nMMMMDCCCXXVI\nMMMLXVIIII\nMMMLX\nMMMCDLXVII\nMDCCCLVII\nMMCXXXVII\nMDCCCCXXX\nMMDCCCLXIII\nMMMMDCXLIX\nMMMMCMXLVIII\nDCCCLXXVIIII\nMDCCCLIII\nMMMCMLXI\nMMMMCCLXI\nMMDCCCLIII\nMMMDCCCVI\nMMDXXXXIX\nMMCLXXXXV\nMMDXXX\nMMMXIII\nDCLXXIX\nDCCLXII\nMMMMDCCLXVIII\nMDCCXXXXIII\nCCXXXII\nMMMMDCXXV\nMMMCCCXXVIII\nMDCVIII\nMMMCLXXXXIIII\nCLXXXI\nMDCCCCXXXIII\nMMMMDCXXX\nMMMDCXXIV\nMMMCCXXXVII\nMCCCXXXXIIII\nCXVIII\nMMDCCCCIV\nMMMMCDLXXV\nMMMDLXIV\nMDXCIII\nMCCLXXXI\nMMMDCCCXXIV\nMCXLIII\nMMMDCCCI\nMCCLXXX\nCCXV\nMMDCCLXXI\nMMDLXXXIII\nMMMMDCXVII\nMMMCMLXV\nMCLXVIII\nMMMMCCLXXVI\nMMMDCCLXVIIII\nMMMMDCCCIX\nDLXXXXIX\nDCCCXXII\nMMMMIII\nMMMMCCCLXXVI\nDCCCXCIII\nDXXXI\nMXXXIIII\nCCXII\nMMMDCCLXXXIIII\nMMMCXX\nMMMCMXXVII\nDCCCXXXX\nMMCDXXXVIIII\nMMMMDCCXVIII\nLV\nMMMDCCCCVI\nMCCCII\nMMCMLXVIIII\nMDCCXI\nMMMMDLXVII\nMMCCCCLXI\nMMDCCV\nMMMCCCXXXIIII\nMMMMDI\nMMMDCCCXCV\nMMDCCLXXXXI\nMMMDXXVI\nMMMDCCCLVI\nMMDCXXX\nMCCCVII\nMMMMCCCLXII\nMMMMXXV\nMMCMXXV\nMMLVI\nMMDXXX\nMMMMCVII\nMDC\nMCCIII\nMMMMDCC\nMMCCLXXV\nMMDCCCXXXXVI\nMMMMCCCLXV\nCDXIIII\nMLXIIII\nCCV\nMMMCMXXXI\nCCCCLXVI\nMDXXXII\nMMMMCCCLVIII\nMMV\nMMMCLII\nMCMLI\nMMDCCXX\nMMMMCCCCXXXVI\nMCCLXXXI\nMMMCMVI\nDCCXXX\nMMMMCCCLXV\nDCCCXI\nMMMMDCCCXIV\nCCCXXI\nMMDLXXV\nCCCCLXXXX\nMCCCLXXXXII\nMMDCIX\nDCCXLIIII\nDXIV\nMMMMCLII\nCDLXI\nMMMCXXVII\nMMMMDCCCCLXIII\nMMMDCLIIII\nMCCCCXXXXII\nMMCCCLX\nCCCCLIII\nMDCCLXXVI\nMCMXXIII\nMMMMDLXXVIII\nMMDCCCCLX\nMMMCCCLXXXX\nMMMCDXXVI\nMMMDLVIII\nCCCLXI\nMMMMDCXXII\nMMDCCCXXI\nMMDCCXIII\nMMMMCLXXXVI\nMDCCCCXXVI\nMDV\nMMDCCCCLXXVI\nMMMMCCXXXVII\nMMMDCCLXXVIIII\nMMMCCCCLXVII\nDCCXLI\nMMCLXXXVIII\nMCCXXXVI\nMMDCXLVIII\nMMMMCXXXII\nMMMMDCCLXVI\nMMMMCMLI\nMMMMCLXV\nMMMMDCCCXCIV\nMCCLXXVII\nLXXVIIII\nDCCLII\nMMMCCCXCVI\nMMMCLV\nMMDCCCXXXXVIII\nDCCCXV\nMXC\nMMDCCLXXXXVII\nMMMMCML\nMMDCCCLXXVIII\nDXXI\nMCCCXLI\nDCLXXXXI\nMMCCCLXXXXVIII\nMDCCCCLXXVIII\nMMMMDXXV\nMMMDCXXXVI\nMMMCMXCVII\nMMXVIIII\nMMMDCCLXXIV\nMMMCXXV\nDXXXVIII\nMMMMCLXVI\nMDXII\nMMCCCLXX\nCCLXXI\nDXIV\nMMMCLIII\nDLII\nMMMCCCXLIX\nMMCCCCXXVI\nMMDCXLIII\nMXXXXII\nCCCLXXXV\nMDCLXXVI\nMDCXII\nMMMCCCLXXXIII\nMMDCCCCLXXXII\nMMMMCCCLXXXV\nMMDCXXI\nDCCCXXX\nMMMDCCCCLII\nMMMDCCXXII\nMMMMCDXCVIII\nMMMCCLXVIIII\nMMXXV\nMMMMCDXIX\nMMMMCCCX\nMMMCCCCLXVI\nMMMMDCLXXVIIII\nMMMMDCXXXXIV\nMMMCMXII\nMMMMXXXIII\nMMMMDLXXXII\nDCCCLIV\nMDXVIIII\nMMMCLXXXXV\nCCCCXX\nMMDIX\nMMCMLXXXVIII\nDCCXLIII\nDCCLX\nD\nMCCCVII\nMMMMCCCLXXXIII\nMDCCCLXXIIII\nMMMDCCCCLXXXVII\nMMMMCCCVII\nMMMDCCLXXXXVI\nCDXXXIV\nMCCLXVIII\nMMMMDLX\nMMMMDXII\nMMMMCCCCLIIII\nMCMLXXXXIII\nMMMMDCCCIII\nMMDCLXXXIII\nMDCCCXXXXIV\nXXXXVII\nMMMDCCCXXXII\nMMMDCCCXLII\nMCXXXV\nMDCXXVIIII\nMMMCXXXXIIII\nMMMMCDXVII\nMMMDXXIII\nMMMMCCCCLXI\nDCLXXXXVIIII\nLXXXXI\nCXXXIII\nMCDX\nMCCLVII\nMDCXXXXII\nMMMCXXIV\nMMMMLXXXX\nMMDCCCCXLV\nMLXXX\nMMDCCCCLX\nMCDLIII\nMMMCCCLXVII\nMMMMCCCLXXIV\nMMMDCVIII\nDCCCCXXIII\nMMXCI\nMMDCCIV\nMMMMDCCCXXXIV\nCCCLXXI\nMCCLXXXII\nMCMIII\nCCXXXI\nDCCXXXVIII\nMMMMDCCXLVIIII\nMMMMCMXXXV\nDCCCLXXV\nDCCXCI\nMMMMDVII\nMMMMDCCCLXVIIII\nCCCXCV\nMMMMDCCXX\nMCCCCII\nMMMCCCXC\nMMMCCCII\nMMDCCLXXVII\nMMDCLIIII\nCCXLIII\nMMMDCXVIII\nMMMCCCIX\nMCXV\nMMCCXXV\nMLXXIIII\nMDCCXXVI\nMMMCCCXX\nMMDLXX\nMMCCCCVI\nMMDCCXX\nMMMMDCCCCXCV\nMDCCCXXXII\nMMMMDCCCCXXXX\nXCIV\nMMCCCCLX\nMMXVII\nMLXXI\nMMMDXXVIII\nMDCCCCII\nMMMCMLVII\nMMCLXXXXVIII\nMDCCCCLV\nMCCCCLXXIIII\nMCCCLII\nMCDXLVI\nMMMMDXVIII\nDCCLXXXIX\nMMMDCCLXIV\nMDCCCCXLIII\nCLXXXXV\nMMMMCCXXXVI\nMMMDCCCXXI\nMMMMCDLXXVII\nMCDLIII\nMMCCXLVI\nDCCCLV\nMCDLXX\nDCLXXVIII\nMMDCXXXIX\nMMMMDCLX\nMMDCCLI\nMMCXXXV\nMMMCCXII\nMMMMCMLXII\nMMMMCCV\nMCCCCLXIX\nMMMMCCIII\nCLXVII\nMCCCLXXXXIIII\nMMMMDCVIII\nMMDCCCLXI\nMMLXXIX\nCMLXIX\nMMDCCCXLVIIII\nDCLXII\nMMMCCCXLVII\nMDCCCXXXV\nMMMMDCCXCVI\nDCXXX\nXXVI\nMMLXIX\nMMCXI\nDCXXXVII\nMMMMCCCXXXXVIII\nMMMMDCLXI\nMMMMDCLXXIIII\nMMMMVIII\nMMMMDCCCLXII\nMDCXCI\nMMCCCXXIIII\nCCCCXXXXV\nMMDCCCXXI\nMCVI\nMMDCCLXVIII\nMMMMCXL\nMLXVIII\nCMXXVII\nCCCLV\nMDCCLXXXIX\nMMMCCCCLXV\nMMDCCLXII\nMDLXVI\nMMMCCCXVIII\nMMMMCCLXXXI\nMMCXXVII\nMMDCCCLXVIII\nMMMCXCII\nMMMMDCLVIII\nMMMMDCCCXXXXII\nMMDCCCCLXXXXVI\nMDCCXL\nMDCCLVII\nMMMMDCCCLXXXVI\nDCCXXXIII\nMMMMDCCCCLXXXV\nMMCCXXXXVIII\nMMMCCLXXVIII\nMMMDCLXXVIII\nDCCCI\nMMMMLXXXXVIIII\nMMMCCCCLXXII\nMMCLXXXVII\nCCLXVI\nMCDXLIII\nMMCXXVIII\nMDXIV\nCCCXCVIII\nCLXXVIII\nMMCXXXXVIIII\nMMMDCLXXXIV\nCMLVIII\nMCDLIX\nMMMMDCCCXXXII\nMMMMDCXXXIIII\nMDCXXI\nMMMDCXLV\nMCLXXVIII\nMCDXXII\nIV\nMCDLXXXXIII\nMMMMDCCLXV\nCCLI\nMMMMDCCCXXXVIII\nDCLXII\nMCCCLXVII\nMMMMDCCCXXXVI\nMMDCCXLI\nMLXI\nMMMCDLXVIII\nMCCCCXCIII\nXXXIII\nMMMDCLXIII\nMMMMDCL\nDCCCXXXXIIII\nMMDLVII\nDXXXVII\nMCCCCXXIIII\nMCVII\nMMMMDCCXL\nMMMMCXXXXIIII\nMCCCCXXIV\nMMCLXVIII\nMMXCIII\nMDCCLXXX\nMCCCLIIII\nMMDCLXXI\nMXI\nMCMLIV\nMMMCCIIII\nDCCLXXXVIIII\nMDCLIV\nMMMDCXIX\nCMLXXXI\nDCCLXXXVII\nXXV\nMMMXXXVI\nMDVIIII\nCLXIII\nMMMCDLVIIII\nMMCCCCVII\nMMMLXX\nMXXXXII\nMMMMCCCLXVIII\nMMDCCCXXVIII\nMMMMDCXXXXI\nMMMMDCCCXXXXV\nMMMXV\nMMMMCCXVIIII\nMMDCCXIIII\nMMMXXVII\nMDCCLVIIII\nMMCXXIIII\nMCCCLXXIV\nDCLVIII\nMMMLVII\nMMMCXLV\nMMXCVII\nMMMCCCLXXXVII\nMMMMCCXXII\nDXII\nMMMDLV\nMCCCLXXVIII\nMMMCLIIII\nMMMMCLXXXX\nMMMCLXXXIIII\nMDCXXIII\nMMMMCCXVI\nMMMMDLXXXIII\nMMMDXXXXIII\nMMMMCCCCLV\nMMMDLXXXI\nMMMCCLXXVI\nMMMMXX\nMMMMDLVI\nMCCCCLXXX\nMMMXXII\nMMXXII\nMMDCCCCXXXI\nMMMDXXV\nMMMDCLXXXVIIII\nMMMDLXXXXVII\nMDLXIIII\nCMXC\nMMMXXXVIII\nMDLXXXVIII\nMCCCLXXVI\nMMCDLIX\nMMDCCCXVIII\nMDCCCXXXXVI\nMMMMCMIV\nMMMMDCIIII\nMMCCXXXV\nXXXXVI\nMMMMCCXVII\nMMCCXXIV\nMCMLVIIII\nMLXXXIX\nMMMMLXXXIX\nCLXXXXIX\nMMMDCCCCLVIII\nMMMMCCLXXIII\nMCCCC\nDCCCLIX\nMMMCCCLXXXII\nMMMCCLXVIIII\nMCLXXXV\nCDLXXXVII\nDCVI\nMMX\nMMCCXIII\nMMMMDCXX\nMMMMXXVIII\nDCCCLXII\nMMMMCCCXLIII\nMMMMCLXV\nDXCI\nMMMMCLXXX\nMMMDCCXXXXI\nMMMMXXXXVI\nDCLX\nMMMCCCXI\nMCCLXXX\nMMCDLXXII\nDCCLXXI\nMMMCCCXXXVI\nMCCCCLXXXVIIII\nCDLVIII\nDCCLVI\nMMMMDCXXXVIII\nMMCCCLXXXIII\nMMMMDCCLXXV\nMMMXXXVI\nCCCLXXXXIX\nCV\nCCCCXIII\nCCCCXVI\nMDCCCLXXXIIII\nMMDCCLXXXII\nMMMMCCCCLXXXI\nMXXV\nMMCCCLXXVIIII\nMMMCCXII\nMMMMCCXXXIII\nMMCCCLXXXVI\nMMMDCCCLVIIII\nMCCXXXVII\nMDCLXXV\nXXXV\nMMDLI\nMMMCCXXX\nMMMMCXXXXV\nCCCCLIX\nMMMMDCCCLXXIII\nMMCCCXVII\nDCCCXVI\nMMMCCCXXXXV\nMDCCCCXCV\nCLXXXI\nMMMMDCCLXX\nMMMDCCCIII\nMMCLXXVII\nMMMDCCXXIX\nMMDCCCXCIIII\nMMMCDXXIIII\nMMMMXXVIII\nMMMMDCCCCLXVIII\nMDCCCXX\nMMMMCDXXI\nMMMMDLXXXIX\nCCXVI\nMDVIII\nMMCCLXXI\nMMMDCCCLXXI\nMMMCCCLXXVI\nMMCCLXI\nMMMMDCCCXXXIV\nDLXXXVI\nMMMMDXXXII\nMMMXXIIII\nMMMMCDIV\nMMMMCCCXLVIII\nMMMMCXXXVIII\nMMMCCCLXVI\nMDCCXVIII\nMMCXX\nCCCLIX\nMMMMDCCLXXII\nMDCCCLXXV\nMMMMDCCCXXIV\nDCCCXXXXVIII\nMMMDCCCCXXXVIIII\nMMMMCCXXXV\nMDCLXXXIII\nMMCCLXXXIV\nMCLXXXXIIII\nDXXXXIII\nMCCCXXXXVIII\nMMCLXXIX\nMMMMCCLXIV\nMXXII\nMMMCXIX\nMDCXXXVII\nMMDCCVI\nMCLXXXXVIII\nMMMCXVI\nMCCCLX\nMMMCDX\nCCLXVIIII\nMMMCCLX\nMCXXVIII\nLXXXII\nMCCCCLXXXI\nMMMI\nMMMCCCLXIV\nMMMCCCXXVIIII\nCXXXVIII\nMMCCCXX\nMMMCCXXVIIII\nMCCLXVI\nMMMCCCCXXXXVI\nMMDCCXCIX\nMCMLXXI\nMMCCLXVIII\nCDLXXXXIII\nMMMMDCCXXII\nMMMMDCCLXXXVII\nMMMDCCLIV\nMMCCLXIII\nMDXXXVII\nDCCXXXIIII\nMCII\nMMMDCCCLXXI\nMMMLXXIII\nMDCCCLIII\nMMXXXVIII\nMDCCXVIIII\nMDCCCCXXXVII\nMMCCCXVI\nMCMXXII\nMMMCCCLVIII\nMMMMDCCCXX\nMCXXIII\nMMMDLXI\nMMMMDXXII\nMDCCCX\nMMDXCVIIII\nMMMDCCCCVIII\nMMMMDCCCCXXXXVI\nMMDCCCXXXV\nMMCXCIV\nMCMLXXXXIII\nMMMCCCLXXVI\nMMMMDCLXXXV\nCMLXIX\nDCXCII\nMMXXVIII\nMMMMCCCXXX\nXXXXVIIII"
  },
  {
    "path": "Problem092/.hash",
    "content": "6cee918c0612bccc2dac03d05e07035f"
  },
  {
    "path": "Problem092/Python/solution_slow_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n\"\"\"\nSquare digit chains\nProblem 92\n\nA number chain is created by continuously adding the square of the digits in a number to form a new number until it has been seen before.\n\nFor example,\n\n44 → 32 → 13 → 10 → 1 → 1\n85 → 89 → 145 → 42 → 20 → 4 → 16 → 37 → 58 → 89\n\nTherefore any chain that arrives at 1 or 89 will become stuck in an endless loop. What is most amazing is that EVERY starting number will eventually arrive at 1 or 89.\n\nHow many starting numbers below ten million will arrive at 89?\n\"\"\"\n# answer: 8581146\n# primeiro algoritmo:230s+- (brute-force super simples)\n# outra versão usando lista = 314s #\n# usando dic(atual): 65s\n\n\ndef sequence_end(n, finalnum):\n    start = 0\n    dic = {}\n    end_count = 0\n\n    while start + 1 < n:\n        start += 1\n        if start in dic:\n            if dic[start] == finalnum:\n                end_count += 1\n                continue\n            else:\n                continue\n        end = start\n        nums = [end]\n        while end != 1 and end != 89:\n            end = sum(map(lambda x: x * x, (int(x) for x in str(end))))\n            if end in dic:\n                end = dic[end]\n                break\n            else:\n                nums.append(end)\n\n        for num in nums:\n            dic[num] = end\n\n        if end == finalnum:\n            end_count += 1\n\n    return end_count\n\ntotal = sequence_end(10 ** 7, 89)\nprint(total)\n"
  },
  {
    "path": "Problem092/Python/solution_slow_2.py",
    "content": "#coding=utf-8\n\"\"\"\nSquare digit chains\nProblem 92\n\nA number chain is created by continuously adding the square of the digits in a number to form a new number until it has been seen before.\n\nFor example,\n\n44 → 32 → 13 → 10 → 1 → 1\n85 → 89 → 145 → 42 → 20 → 4 → 16 → 37 → 58 → 89\n\nTherefore any chain that arrives at 1 or 89 will become stuck in an endless loop. What is most amazing is that EVERY starting number will eventually arrive at 1 or 89.\n\nHow many starting numbers below ten million will arrive at 89?\n\"\"\"\n#simple version, not optmized.\n#230s+-\ndef sequence_end(start):\n\tend = start\n\twhile end != 1 and end != 89:\n\t\tend = sum(map(lambda x: x * x, [int(x) for x in str(end)]))\n\treturn end\n\ntotal = 0\n[total.__add__(1) for x in range(1, 10**7) if sequence_end(x) == 89]\nprint(total)"
  },
  {
    "path": "Problem092/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=92)\n"
  },
  {
    "path": "Problem097/.hash",
    "content": "68c8c919526039022b923a72d5cc12b1"
  },
  {
    "path": "Problem097/CommonLisp/solution_1.lisp",
    "content": ";; Common Lisp Script\n;; Manoel Vilela\n\n(format t \"~a~%\" (mod (+ 1 (* 28433 (expt 2 7830457)))\n                      (expt 10 10)))\n"
  },
  {
    "path": "Problem097/Haskell/solution_1.hs",
    "content": "main :: IO ()\nmain = putStrLn . reverse . take 10 . reverse $ x\n    where x = show (28433 * 2^7830457 + 1)\n"
  },
  {
    "path": "Problem097/Python/solution_1.py",
    "content": "\nif __name__ == \"__main__\":\n    mersen_n = 28433 * (2 ** 7830457) + 1\n    print(mersen_n % 10**10)\n"
  },
  {
    "path": "Problem097/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=97)\n"
  },
  {
    "path": "Problem097/Ruby/solution_slow_1.rb",
    "content": "x = (28433 * 2 ** 7830457) + 1\n\nputs x.to_s.reverse[0..9].reverse\n"
  },
  {
    "path": "Problem099/.hash",
    "content": "1ecfb463472ec9115b10c292ef8bc986"
  },
  {
    "path": "Problem099/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n\n\"\"\"\nLargest exponential\nProblem 99\n\nComparing two numbers written in index form like 211 and 37 is not difficult,\nas any calculator would confirm that 211 = 2048 < 37 = 2187.\n\nHowever, confirming that 632382518061 > 519432525806\nwould be much more difficult, as both numbers\ncontain over three million digits.\n\nUsing base_exp.txt (right click and 'Save Link/Target As...'),\na 22K text file containing one thousand lines with a base/exponent\npair on each line,\ndetermine which line number has the greatest numerical value.\n\nNOTE: The first two lines in the file represent the\nnumbers in the example given above.\n\"\"\"\nfrom math import log\nfrom os.path import dirname, join\n\nfiledic = join('../p099_base_exp.txt')\n\ndic_evalued = {}\nwith open(filedic, 'r') as f:\n    nums = f.readlines()\n    for line in range(len(nums)):\n        num = nums[line].strip()\n        base, exp = num.split(',')\n        value = log(int(base)) * int(exp)\n        dic_evalued[value] = line + 1\n\nprint(dic_evalued[max(dic_evalued)])\n"
  },
  {
    "path": "Problem099/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=99)\n"
  },
  {
    "path": "Problem099/p099_base_exp.txt",
    "content": "519432,525806\n632382,518061\n78864,613712\n466580,530130\n780495,510032\n525895,525320\n15991,714883\n960290,502358\n760018,511029\n166800,575487\n210884,564478\n555151,523163\n681146,515199\n563395,522587\n738250,512126\n923525,503780\n595148,520429\n177108,572629\n750923,511482\n440902,532446\n881418,505504\n422489,534197\n979858,501616\n685893,514935\n747477,511661\n167214,575367\n234140,559696\n940238,503122\n728969,512609\n232083,560102\n900971,504694\n688801,514772\n189664,569402\n891022,505104\n445689,531996\n119570,591871\n821453,508118\n371084,539600\n911745,504251\n623655,518600\n144361,582486\n352442,541775\n420726,534367\n295298,549387\n6530,787777\n468397,529976\n672336,515696\n431861,533289\n84228,610150\n805376,508857\n444409,532117\n33833,663511\n381850,538396\n402931,536157\n92901,604930\n304825,548004\n731917,512452\n753734,511344\n51894,637373\n151578,580103\n295075,549421\n303590,548183\n333594,544123\n683952,515042\n60090,628880\n951420,502692\n28335,674991\n714940,513349\n343858,542826\n549279,523586\n804571,508887\n260653,554881\n291399,549966\n402342,536213\n408889,535550\n40328,652524\n375856,539061\n768907,510590\n165993,575715\n976327,501755\n898500,504795\n360404,540830\n478714,529095\n694144,514472\n488726,528258\n841380,507226\n328012,544839\n22389,690868\n604053,519852\n329514,544641\n772965,510390\n492798,527927\n30125,670983\n895603,504906\n450785,531539\n840237,507276\n380711,538522\n63577,625673\n76801,615157\n502694,527123\n597706,520257\n310484,547206\n944468,502959\n121283,591152\n451131,531507\n566499,522367\n425373,533918\n40240,652665\n39130,654392\n714926,513355\n469219,529903\n806929,508783\n287970,550487\n92189,605332\n103841,599094\n671839,515725\n452048,531421\n987837,501323\n935192,503321\n88585,607450\n613883,519216\n144551,582413\n647359,517155\n213902,563816\n184120,570789\n258126,555322\n502546,527130\n407655,535678\n401528,536306\n477490,529193\n841085,507237\n732831,512408\n833000,507595\n904694,504542\n581435,521348\n455545,531110\n873558,505829\n94916,603796\n720176,513068\n545034,523891\n246348,557409\n556452,523079\n832015,507634\n173663,573564\n502634,527125\n250732,556611\n569786,522139\n216919,563178\n521815,525623\n92304,605270\n164446,576167\n753413,511364\n11410,740712\n448845,531712\n925072,503725\n564888,522477\n7062,780812\n641155,517535\n738878,512100\n636204,517828\n372540,539436\n443162,532237\n571192,522042\n655350,516680\n299741,548735\n581914,521307\n965471,502156\n513441,526277\n808682,508700\n237589,559034\n543300,524025\n804712,508889\n247511,557192\n543486,524008\n504383,526992\n326529,545039\n792493,509458\n86033,609017\n126554,589005\n579379,521481\n948026,502823\n404777,535969\n265767,554022\n266876,553840\n46631,643714\n492397,527958\n856106,506581\n795757,509305\n748946,511584\n294694,549480\n409781,535463\n775887,510253\n543747,523991\n210592,564536\n517119,525990\n520253,525751\n247926,557124\n592141,520626\n346580,542492\n544969,523902\n506501,526817\n244520,557738\n144745,582349\n69274,620858\n292620,549784\n926027,503687\n736320,512225\n515528,526113\n407549,535688\n848089,506927\n24141,685711\n9224,757964\n980684,501586\n175259,573121\n489160,528216\n878970,505604\n969546,502002\n525207,525365\n690461,514675\n156510,578551\n659778,516426\n468739,529945\n765252,510770\n76703,615230\n165151,575959\n29779,671736\n928865,503569\n577538,521605\n927555,503618\n185377,570477\n974756,501809\n800130,509093\n217016,563153\n365709,540216\n774508,510320\n588716,520851\n631673,518104\n954076,502590\n777828,510161\n990659,501222\n597799,520254\n786905,509727\n512547,526348\n756449,511212\n869787,505988\n653747,516779\n84623,609900\n839698,507295\n30159,670909\n797275,509234\n678136,515373\n897144,504851\n989554,501263\n413292,535106\n55297,633667\n788650,509637\n486748,528417\n150724,580377\n56434,632490\n77207,614869\n588631,520859\n611619,519367\n100006,601055\n528924,525093\n190225,569257\n851155,506789\n682593,515114\n613043,519275\n514673,526183\n877634,505655\n878905,505602\n1926,914951\n613245,519259\n152481,579816\n841774,507203\n71060,619442\n865335,506175\n90244,606469\n302156,548388\n399059,536557\n478465,529113\n558601,522925\n69132,620966\n267663,553700\n988276,501310\n378354,538787\n529909,525014\n161733,576968\n758541,511109\n823425,508024\n149821,580667\n269258,553438\n481152,528891\n120871,591322\n972322,501901\n981350,501567\n676129,515483\n950860,502717\n119000,592114\n392252,537272\n191618,568919\n946699,502874\n289555,550247\n799322,509139\n703886,513942\n194812,568143\n261823,554685\n203052,566221\n217330,563093\n734748,512313\n391759,537328\n807052,508777\n564467,522510\n59186,629748\n113447,594545\n518063,525916\n905944,504492\n613922,519213\n439093,532607\n445946,531981\n230530,560399\n297887,549007\n459029,530797\n403692,536075\n855118,506616\n963127,502245\n841711,507208\n407411,535699\n924729,503735\n914823,504132\n333725,544101\n176345,572832\n912507,504225\n411273,535308\n259774,555036\n632853,518038\n119723,591801\n163902,576321\n22691,689944\n402427,536212\n175769,572988\n837260,507402\n603432,519893\n313679,546767\n538165,524394\n549026,523608\n61083,627945\n898345,504798\n992556,501153\n369999,539727\n32847,665404\n891292,505088\n152715,579732\n824104,507997\n234057,559711\n730507,512532\n960529,502340\n388395,537687\n958170,502437\n57105,631806\n186025,570311\n993043,501133\n576770,521664\n215319,563513\n927342,503628\n521353,525666\n39563,653705\n752516,511408\n110755,595770\n309749,547305\n374379,539224\n919184,503952\n990652,501226\n647780,517135\n187177,570017\n168938,574877\n649558,517023\n278126,552016\n162039,576868\n658512,516499\n498115,527486\n896583,504868\n561170,522740\n747772,511647\n775093,510294\n652081,516882\n724905,512824\n499707,527365\n47388,642755\n646668,517204\n571700,522007\n180430,571747\n710015,513617\n435522,532941\n98137,602041\n759176,511070\n486124,528467\n526942,525236\n878921,505604\n408313,535602\n926980,503640\n882353,505459\n566887,522345\n3326,853312\n911981,504248\n416309,534800\n392991,537199\n622829,518651\n148647,581055\n496483,527624\n666314,516044\n48562,641293\n672618,515684\n443676,532187\n274065,552661\n265386,554079\n347668,542358\n31816,667448\n181575,571446\n961289,502320\n365689,540214\n987950,501317\n932299,503440\n27388,677243\n746701,511701\n492258,527969\n147823,581323\n57918,630985\n838849,507333\n678038,515375\n27852,676130\n850241,506828\n818403,508253\n131717,587014\n850216,506834\n904848,504529\n189758,569380\n392845,537217\n470876,529761\n925353,503711\n285431,550877\n454098,531234\n823910,508003\n318493,546112\n766067,510730\n261277,554775\n421530,534289\n694130,514478\n120439,591498\n213308,563949\n854063,506662\n365255,540263\n165437,575872\n662240,516281\n289970,550181\n847977,506933\n546083,523816\n413252,535113\n975829,501767\n361540,540701\n235522,559435\n224643,561577\n736350,512229\n328303,544808\n35022,661330\n307838,547578\n474366,529458\n873755,505819\n73978,617220\n827387,507845\n670830,515791\n326511,545034\n309909,547285\n400970,536363\n884827,505352\n718307,513175\n28462,674699\n599384,520150\n253565,556111\n284009,551093\n343403,542876\n446557,531921\n992372,501160\n961601,502308\n696629,514342\n919537,503945\n894709,504944\n892201,505051\n358160,541097\n448503,531745\n832156,507636\n920045,503924\n926137,503675\n416754,534757\n254422,555966\n92498,605151\n826833,507873\n660716,516371\n689335,514746\n160045,577467\n814642,508425\n969939,501993\n242856,558047\n76302,615517\n472083,529653\n587101,520964\n99066,601543\n498005,527503\n709800,513624\n708000,513716\n20171,698134\n285020,550936\n266564,553891\n981563,501557\n846502,506991\n334,1190800\n209268,564829\n9844,752610\n996519,501007\n410059,535426\n432931,533188\n848012,506929\n966803,502110\n983434,501486\n160700,577267\n504374,526989\n832061,507640\n392825,537214\n443842,532165\n440352,532492\n745125,511776\n13718,726392\n661753,516312\n70500,619875\n436952,532814\n424724,533973\n21954,692224\n262490,554567\n716622,513264\n907584,504425\n60086,628882\n837123,507412\n971345,501940\n947162,502855\n139920,584021\n68330,621624\n666452,516038\n731446,512481\n953350,502619\n183157,571042\n845400,507045\n651548,516910\n20399,697344\n861779,506331\n629771,518229\n801706,509026\n189207,569512\n737501,512168\n719272,513115\n479285,529045\n136046,585401\n896746,504860\n891735,505067\n684771,514999\n865309,506184\n379066,538702\n503117,527090\n621780,518717\n209518,564775\n677135,515423\n987500,501340\n197049,567613\n329315,544673\n236756,559196\n357092,541226\n520440,525733\n213471,563911\n956852,502490\n702223,514032\n404943,535955\n178880,572152\n689477,514734\n691351,514630\n866669,506128\n370561,539656\n739805,512051\n71060,619441\n624861,518534\n261660,554714\n366137,540160\n166054,575698\n601878,519990\n153445,579501\n279899,551729\n379166,538691\n423209,534125\n675310,515526\n145641,582050\n691353,514627\n917468,504026\n284778,550976\n81040,612235\n161699,576978\n616394,519057\n767490,510661\n156896,578431\n427408,533714\n254849,555884\n737217,512182\n897133,504851\n203815,566051\n270822,553189\n135854,585475\n778805,510111\n784373,509847\n305426,547921\n733418,512375\n732087,512448\n540668,524215\n702898,513996\n628057,518328\n640280,517587\n422405,534204\n10604,746569\n746038,511733\n839808,507293\n457417,530938\n479030,529064\n341758,543090\n620223,518824\n251661,556451\n561790,522696\n497733,527521\n724201,512863\n489217,528217\n415623,534867\n624610,518548\n847541,506953\n432295,533249\n400391,536421\n961158,502319\n139173,584284\n421225,534315\n579083,521501\n74274,617000\n701142,514087\n374465,539219\n217814,562985\n358972,540995\n88629,607424\n288597,550389\n285819,550812\n538400,524385\n809930,508645\n738326,512126\n955461,502535\n163829,576343\n826475,507891\n376488,538987\n102234,599905\n114650,594002\n52815,636341\n434037,533082\n804744,508880\n98385,601905\n856620,506559\n220057,562517\n844734,507078\n150677,580387\n558697,522917\n621751,518719\n207067,565321\n135297,585677\n932968,503404\n604456,519822\n579728,521462\n244138,557813\n706487,513800\n711627,513523\n853833,506674\n497220,527562\n59428,629511\n564845,522486\n623621,518603\n242689,558077\n125091,589591\n363819,540432\n686453,514901\n656813,516594\n489901,528155\n386380,537905\n542819,524052\n243987,557841\n693412,514514\n488484,528271\n896331,504881\n336730,543721\n728298,512647\n604215,519840\n153729,579413\n595687,520398\n540360,524240\n245779,557511\n924873,503730\n509628,526577\n528523,525122\n3509,847707\n522756,525555\n895447,504922\n44840,646067\n45860,644715\n463487,530404\n398164,536654\n894483,504959\n619415,518874\n966306,502129\n990922,501212\n835756,507474\n548881,523618\n453578,531282\n474993,529410\n80085,612879\n737091,512193\n50789,638638\n979768,501620\n792018,509483\n665001,516122\n86552,608694\n462772,530469\n589233,520821\n891694,505072\n592605,520594\n209645,564741\n42531,649269\n554376,523226\n803814,508929\n334157,544042\n175836,572970\n868379,506051\n658166,516520\n278203,551995\n966198,502126\n627162,518387\n296774,549165\n311803,547027\n843797,507118\n702304,514032\n563875,522553\n33103,664910\n191932,568841\n543514,524006\n506835,526794\n868368,506052\n847025,506971\n678623,515342\n876139,505726\n571997,521984\n598632,520198\n213590,563892\n625404,518497\n726508,512738\n689426,514738\n332495,544264\n411366,535302\n242546,558110\n315209,546555\n797544,509219\n93889,604371\n858879,506454\n124906,589666\n449072,531693\n235960,559345\n642403,517454\n720567,513047\n705534,513858\n603692,519870\n488137,528302\n157370,578285\n63515,625730\n666326,516041\n619226,518883\n443613,532186\n597717,520257\n96225,603069\n86940,608450\n40725,651929\n460976,530625\n268875,553508\n270671,553214\n363254,540500\n384248,538137\n762889,510892\n377941,538833\n278878,551890\n176615,572755\n860008,506412\n944392,502967\n608395,519571\n225283,561450\n45095,645728\n333798,544090\n625733,518476\n995584,501037\n506135,526853\n238050,558952\n557943,522972\n530978,524938\n634244,517949\n177168,572616\n85200,609541\n953043,502630\n523661,525484\n999295,500902\n840803,507246\n961490,502312\n471747,529685\n380705,538523\n911180,504275\n334149,544046\n478992,529065\n325789,545133\n335884,543826\n426976,533760\n749007,511582\n667067,516000\n607586,519623\n674054,515599\n188534,569675\n565185,522464\n172090,573988\n87592,608052\n907432,504424\n8912,760841\n928318,503590\n757917,511138\n718693,513153\n315141,546566\n728326,512645\n353492,541647\n638429,517695\n628892,518280\n877286,505672\n620895,518778\n385878,537959\n423311,534113\n633501,517997\n884833,505360\n883402,505416\n999665,500894\n708395,513697\n548142,523667\n756491,511205\n987352,501340\n766520,510705\n591775,520647\n833758,507563\n843890,507108\n925551,503698\n74816,616598\n646942,517187\n354923,541481\n256291,555638\n634470,517942\n930904,503494\n134221,586071\n282663,551304\n986070,501394\n123636,590176\n123678,590164\n481717,528841\n423076,534137\n866246,506145\n93313,604697\n783632,509880\n317066,546304\n502977,527103\n141272,583545\n71708,618938\n617748,518975\n581190,521362\n193824,568382\n682368,515131\n352956,541712\n351375,541905\n505362,526909\n905165,504518\n128645,588188\n267143,553787\n158409,577965\n482776,528754\n628896,518282\n485233,528547\n563606,522574\n111001,595655\n115920,593445\n365510,540237\n959724,502374\n938763,503184\n930044,503520\n970959,501956\n913658,504176\n68117,621790\n989729,501253\n567697,522288\n820427,508163\n54236,634794\n291557,549938\n124961,589646\n403177,536130\n405421,535899\n410233,535417\n815111,508403\n213176,563974\n83099,610879\n998588,500934\n513640,526263\n129817,587733\n1820,921851\n287584,550539\n299160,548820\n860621,506386\n529258,525059\n586297,521017\n953406,502616\n441234,532410\n986217,501386\n781938,509957\n461247,530595\n735424,512277\n146623,581722\n839838,507288\n510667,526494\n935085,503327\n737523,512167\n303455,548204\n992779,501145\n60240,628739\n939095,503174\n794368,509370\n501825,527189\n459028,530798\n884641,505363\n512287,526364\n835165,507499\n307723,547590\n160587,577304\n735043,512300\n493289,527887\n110717,595785\n306480,547772\n318593,546089\n179810,571911\n200531,566799\n314999,546580\n197020,567622\n301465,548487\n237808,559000\n131944,586923\n882527,505449\n468117,530003\n711319,513541\n156240,578628\n965452,502162\n992756,501148\n437959,532715\n739938,512046\n614249,519196\n391496,537356\n62746,626418\n688215,514806\n75501,616091\n883573,505412\n558824,522910\n759371,511061\n173913,573489\n891351,505089\n727464,512693\n164833,576051\n812317,508529\n540320,524243\n698061,514257\n69149,620952\n471673,529694\n159092,577753\n428134,533653\n89997,606608\n711061,513557\n779403,510081\n203327,566155\n798176,509187\n667688,515963\n636120,517833\n137410,584913\n217615,563034\n556887,523038\n667229,515991\n672276,515708\n325361,545187\n172115,573985\n13846,725685"
  },
  {
    "path": "Problem102/.hash",
    "content": "74db120f0a8e5646ef5a30154e9f6deb"
  },
  {
    "path": "Problem102/Haskell/solution_1.hs",
    "content": "-- Autor: Manoel Vilela\n\n-- Generate the inequalities as delimiters based on the functions whose coincides with\n-- the segments of the triangle. If a arbitrary point (x,y) is valid for\n-- all delimiters so then the given point is inside of the triangle.\ndelimeters :: (Fractional a, Ord a) => (a,a) -> (a,a) -> (a,a) -> [(a -> a -> Bool)]\ndelimeters a b c = [delimiter x y z | (x,y,z) <- [(a,b,c), (b,c,a), (a,c,b)]]\n    where delimiter (x1,y1) (x2,y2) (cx,cy) = let a = (y1 - y2) / (x1 - x2)\n                                                  b = y1 - (a * x1)\n                                                in if cy > cx * a + b\n                                                      then (\\x y -> y > x * a + b)\n                                                      else (\\x y -> y < x * a + b)\n\n-- Check if given the points a b c, the coordinates (x,y) is inside of the\n-- triangle\ntriangleContains :: (Fractional a, Ord a) => (a,a) -> (a,a) -> (a,a) -> (a,a) -> Bool\ntriangleContains a b c (x,y) = and [delimiter x y | delimiter <- delimeters a b c]\n\n-- Check if the origin, point (0,0), is inside of the triangle ABC\ntriangleContainsOrigin :: (Fractional a, Ord a) => ((a,a),(a,a),(a,a)) -> Bool\ntriangleContainsOrigin (a,b,c) = triangleContains a b c (0,0)\n\n-- below is just parsing the file to compatible data to processing\n-- ugly part :[\nreplace :: Eq a => a -> a -> [a] -> [a]\nreplace a b = map $ \\c -> if c == a then b else c\n\nparseLine :: String -> [Float]\nparseLine s = map read $ words $ replace ',' ' ' s\n\nparseTriangle :: (Fractional a, Ord a) => [a] -> ((a, a), (a, a), (a, a))\nparseTriangle xs = let (x1:y1:x2:y2:x3:y3:[]) = xs\n                    in ((x1,y1),(x2,y2),(x3,y3))\n\nparse = parseTriangle . parseLine\n\nmain = do triangles <- readFile \"../p102_triangles.txt\"\n          print $ length $ filter triangleContainsOrigin $ map parse $ lines triangles\n"
  },
  {
    "path": "Problem102/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=102)\n"
  },
  {
    "path": "Problem102/p102_triangles.txt",
    "content": "-340,495,-153,-910,835,-947\n-175,41,-421,-714,574,-645\n-547,712,-352,579,951,-786\n419,-864,-83,650,-399,171\n-429,-89,-357,-930,296,-29\n-734,-702,823,-745,-684,-62\n-971,762,925,-776,-663,-157\n162,570,628,485,-807,-896\n641,91,-65,700,887,759\n215,-496,46,-931,422,-30\n-119,359,668,-609,-358,-494\n440,929,968,214,760,-857\n-700,785,838,29,-216,411\n-770,-458,-325,-53,-505,633\n-752,-805,349,776,-799,687\n323,5,561,-36,919,-560\n-907,358,264,320,204,274\n-728,-466,350,969,292,-345\n940,836,272,-533,748,185\n411,998,813,520,316,-949\n-152,326,658,-762,148,-651\n330,507,-9,-628,101,174\n551,-496,772,-541,-702,-45\n-164,-489,-90,322,631,-59\n673,366,-4,-143,-606,-704\n428,-609,801,-449,740,-269\n453,-924,-785,-346,-853,111\n-738,555,-181,467,-426,-20\n958,-692,784,-343,505,-569\n620,27,263,54,-439,-726\n804,87,998,859,871,-78\n-119,-453,-709,-292,-115,-56\n-626,138,-940,-476,-177,-274\n-11,160,142,588,446,158\n538,727,550,787,330,810\n420,-689,854,-546,337,516\n872,-998,-607,748,473,-192\n653,440,-516,-985,808,-857\n374,-158,331,-940,-338,-641\n137,-925,-179,771,734,-715\n-314,198,-115,29,-641,-39\n759,-574,-385,355,590,-603\n-189,-63,-168,204,289,305\n-182,-524,-715,-621,911,-255\n331,-816,-833,471,168,126\n-514,581,-855,-220,-731,-507\n129,169,576,651,-87,-458\n783,-444,-881,658,-266,298\n603,-430,-598,585,368,899\n43,-724,962,-376,851,409\n-610,-646,-883,-261,-482,-881\n-117,-237,978,641,101,-747\n579,125,-715,-712,208,534\n672,-214,-762,372,874,533\n-564,965,38,715,367,242\n500,951,-700,-981,-61,-178\n-382,-224,-959,903,-282,-60\n-355,295,426,-331,-591,655\n892,128,958,-271,-993,274\n-454,-619,302,138,-790,-874\n-642,601,-574,159,-290,-318\n266,-109,257,-686,54,975\n162,628,-478,840,264,-266\n466,-280,982,1,904,-810\n721,839,730,-807,777,981\n-129,-430,748,263,943,96\n434,-94,410,-990,249,-704\n237,42,122,-732,44,-51\n909,-116,-229,545,292,717\n824,-768,-807,-370,-262,30\n675,58,332,-890,-651,791\n363,825,-717,254,684,240\n405,-715,900,166,-589,422\n-476,686,-830,-319,634,-807\n633,837,-971,917,-764,207\n-116,-44,-193,-70,908,809\n-26,-252,998,408,70,-713\n-601,645,-462,842,-644,-591\n-160,653,274,113,-138,687\n369,-273,-181,925,-167,-693\n-338,135,480,-967,-13,-840\n-90,-270,-564,695,161,907\n607,-430,869,-713,461,-469\n919,-165,-776,522,606,-708\n-203,465,288,207,-339,-458\n-453,-534,-715,975,838,-677\n-973,310,-350,934,546,-805\n-835,385,708,-337,-594,-772\n-14,914,900,-495,-627,594\n833,-713,-213,578,-296,699\n-27,-748,484,455,915,291\n270,889,739,-57,442,-516\n119,811,-679,905,184,130\n-678,-469,925,553,612,482\n101,-571,-732,-842,644,588\n-71,-737,566,616,957,-663\n-634,-356,90,-207,936,622\n598,443,964,-895,-58,529\n847,-467,929,-742,91,10\n-633,829,-780,-408,222,-30\n-818,57,275,-38,-746,198\n-722,-825,-549,597,-391,99\n-570,908,430,873,-103,-360\n342,-681,512,434,542,-528\n297,850,479,609,543,-357\n9,784,212,548,56,859\n-152,560,-240,-969,-18,713\n140,-133,34,-635,250,-163\n-272,-22,-169,-662,989,-604\n471,-765,355,633,-742,-118\n-118,146,942,663,547,-376\n583,16,162,264,715,-33\n-230,-446,997,-838,561,555\n372,397,-729,-318,-276,649\n92,982,-970,-390,-922,922\n-981,713,-951,-337,-669,670\n-999,846,-831,-504,7,-128\n455,-954,-370,682,-510,45\n822,-960,-892,-385,-662,314\n-668,-686,-367,-246,530,-341\n-723,-720,-926,-836,-142,757\n-509,-134,384,-221,-873,-639\n-803,-52,-706,-669,373,-339\n933,578,631,-616,770,555\n741,-564,-33,-605,-576,275\n-715,445,-233,-730,734,-704\n120,-10,-266,-685,-490,-17\n-232,-326,-457,-946,-457,-116\n811,52,639,826,-200,147\n-329,279,293,612,943,955\n-721,-894,-393,-969,-642,453\n-688,-826,-352,-75,371,79\n-809,-979,407,497,858,-248\n-485,-232,-242,-582,-81,849\n141,-106,123,-152,806,-596\n-428,57,-992,811,-192,478\n864,393,122,858,255,-876\n-284,-780,240,457,354,-107\n956,605,-477,44,26,-678\n86,710,-533,-815,439,327\n-906,-626,-834,763,426,-48\n201,-150,-904,652,475,412\n-247,149,81,-199,-531,-148\n923,-76,-353,175,-121,-223\n427,-674,453,472,-410,585\n931,776,-33,85,-962,-865\n-655,-908,-902,208,869,792\n-316,-102,-45,-436,-222,885\n-309,768,-574,653,745,-975\n896,27,-226,993,332,198\n323,655,-89,260,240,-902\n501,-763,-424,793,813,616\n993,375,-938,-621,672,-70\n-880,-466,-283,770,-824,143\n63,-283,886,-142,879,-116\n-964,-50,-521,-42,-306,-161\n724,-22,866,-871,933,-383\n-344,135,282,966,-80,917\n-281,-189,420,810,362,-582\n-515,455,-588,814,162,332\n555,-436,-123,-210,869,-943\n589,577,232,286,-554,876\n-773,127,-58,-171,-452,125\n-428,575,906,-232,-10,-224\n437,276,-335,-348,605,878\n-964,511,-386,-407,168,-220\n307,513,912,-463,-423,-416\n-445,539,273,886,-18,760\n-396,-585,-670,414,47,364\n143,-506,754,906,-971,-203\n-544,472,-180,-541,869,-465\n-779,-15,-396,890,972,-220\n-430,-564,503,182,-119,456\n89,-10,-739,399,506,499\n954,162,-810,-973,127,870\n890,952,-225,158,828,237\n-868,952,349,465,574,750\n-915,369,-975,-596,-395,-134\n-135,-601,575,582,-667,640\n413,890,-560,-276,-555,-562\n-633,-269,561,-820,-624,499\n371,-92,-784,-593,864,-717\n-971,655,-439,367,754,-951\n172,-347,36,279,-247,-402\n633,-301,364,-349,-683,-387\n-780,-211,-713,-948,-648,543\n72,58,762,-465,-66,462\n78,502,781,-832,713,836\n-431,-64,-484,-392,208,-343\n-64,101,-29,-860,-329,844\n398,391,828,-858,700,395\n578,-896,-326,-604,314,180\n97,-321,-695,185,-357,852\n854,839,283,-375,951,-209\n194,96,-564,-847,162,524\n-354,532,494,621,580,560\n419,-678,-450,926,-5,-924\n-661,905,519,621,-143,394\n-573,268,296,-562,-291,-319\n-211,266,-196,158,564,-183\n18,-585,-398,777,-581,864\n790,-894,-745,-604,-418,70\n848,-339,150,773,11,851\n-954,-809,-53,-20,-648,-304\n658,-336,-658,-905,853,407\n-365,-844,350,-625,852,-358\n986,-315,-230,-159,21,180\n-15,599,45,-286,-941,847\n-613,-68,184,639,-987,550\n334,675,-56,-861,923,340\n-848,-596,960,231,-28,-34\n707,-811,-994,-356,-167,-171\n-470,-764,72,576,-600,-204\n379,189,-542,-576,585,800\n440,540,-445,-563,379,-334\n-155,64,514,-288,853,106\n-304,751,481,-520,-708,-694\n-709,132,594,126,-844,63\n723,471,421,-138,-962,892\n-440,-263,39,513,-672,-954\n775,809,-581,330,752,-107\n-376,-158,335,-708,-514,578\n-343,-769,456,-187,25,413\n548,-877,-172,300,-500,928\n938,-102,423,-488,-378,-969\n-36,564,-55,131,958,-800\n-322,511,-413,503,700,-847\n-966,547,-88,-17,-359,-67\n637,-341,-437,-181,527,-153\n-74,449,-28,3,485,189\n-997,658,-224,-948,702,-807\n-224,736,-896,127,-945,-850\n-395,-106,439,-553,-128,124\n-841,-445,-758,-572,-489,212\n633,-327,13,-512,952,771\n-940,-171,-6,-46,-923,-425\n-142,-442,-817,-998,843,-695\n340,847,-137,-920,-988,-658\n-653,217,-679,-257,651,-719\n-294,365,-41,342,74,-892\n690,-236,-541,494,408,-516\n180,-807,225,790,494,59\n707,605,-246,656,284,271\n65,294,152,824,442,-442\n-321,781,-540,341,316,415\n420,371,-2,545,995,248\n56,-191,-604,971,615,449\n-981,-31,510,592,-390,-362\n-317,-968,913,365,97,508\n832,63,-864,-510,86,202\n-483,456,-636,340,-310,676\n981,-847,751,-508,-962,-31\n-157,99,73,797,63,-172\n220,858,872,924,866,-381\n996,-169,805,321,-164,971\n896,11,-625,-973,-782,76\n578,-280,730,-729,307,-905\n-580,-749,719,-698,967,603\n-821,874,-103,-623,662,-491\n-763,117,661,-644,672,-607\n592,787,-798,-169,-298,690\n296,644,-526,-762,-447,665\n534,-818,852,-120,57,-379\n-986,-549,-329,294,954,258\n-133,352,-660,-77,904,-356\n748,343,215,500,317,-277\n311,7,910,-896,-809,795\n763,-602,-753,313,-352,917\n668,619,-474,-597,-650,650\n-297,563,-701,-987,486,-902\n-461,-740,-657,233,-482,-328\n-446,-250,-986,-458,-629,520\n542,-49,-327,-469,257,-947\n121,-575,-634,-143,-184,521\n30,504,455,-645,-229,-945\n-12,-295,377,764,771,125\n-686,-133,225,-25,-376,-143\n-6,-46,338,270,-405,-872\n-623,-37,582,467,963,898\n-804,869,-477,420,-475,-303\n94,41,-842,-193,-768,720\n-656,-918,415,645,-357,460\n-47,-486,-911,468,-608,-686\n-158,251,419,-394,-655,-895\n272,-695,979,508,-358,959\n-776,650,-918,-467,-690,-534\n-85,-309,-626,167,-366,-429\n-880,-732,-186,-924,970,-875\n517,645,-274,962,-804,544\n721,402,104,640,478,-499\n198,684,-134,-723,-452,-905\n-245,745,239,238,-826,441\n-217,206,-32,462,-981,-895\n-51,989,526,-173,560,-676\n-480,-659,-976,-580,-727,466\n-996,-90,-995,158,-239,642\n302,288,-194,-294,17,924\n-943,969,-326,114,-500,103\n-619,163,339,-880,230,421\n-344,-601,-795,557,565,-779\n590,345,-129,-202,-125,-58\n-777,-195,159,674,775,411\n-939,312,-665,810,121,855\n-971,254,712,815,452,581\n442,-9,327,-750,61,757\n-342,869,869,-160,390,-772\n620,601,565,-169,-69,-183\n-25,924,-817,964,321,-970\n-64,-6,-133,978,825,-379\n601,436,-24,98,-115,940\n-97,502,614,-574,922,513\n-125,262,-946,695,99,-220\n429,-721,719,-694,197,-558\n326,689,-70,-908,-673,338\n-468,-856,-902,-254,-358,305\n-358,530,542,355,-253,-47\n-438,-74,-362,963,988,788\n137,717,467,622,319,-380\n-86,310,-336,851,918,-288\n721,395,646,-53,255,-425\n255,175,912,84,-209,878\n-632,-485,-400,-357,991,-608\n235,-559,992,-297,857,-591\n87,-71,148,130,647,578\n-290,-584,-639,-788,-21,592\n386,984,625,-731,-993,-336\n-538,634,-209,-828,-150,-774\n-754,-387,607,-781,976,-199\n412,-798,-664,295,709,-537\n-412,932,-880,-232,561,852\n-656,-358,-198,-964,-433,-848\n-762,-668,-632,186,-673,-11\n-876,237,-282,-312,-83,682\n403,73,-57,-436,-622,781\n-587,873,798,976,-39,329\n-369,-622,553,-341,817,794\n-108,-616,920,-849,-679,96\n290,-974,234,239,-284,-321\n-22,394,-417,-419,264,58\n-473,-551,69,923,591,-228\n-956,662,-113,851,-581,-794\n-258,-681,413,-471,-637,-817\n-866,926,992,-653,-7,794\n556,-350,602,917,831,-610\n188,245,-906,361,492,174\n-720,384,-818,329,638,-666\n-246,846,890,-325,-59,-850\n-118,-509,620,-762,-256,15\n-787,-536,-452,-338,-399,813\n458,560,525,-311,-608,-419\n494,-811,-825,-127,-812,894\n-801,890,-629,-860,574,925\n-709,-193,-213,138,-410,-403\n861,91,708,-187,5,-222\n789,646,777,154,90,-49\n-267,-830,-114,531,591,-698\n-126,-82,881,-418,82,652\n-894,130,-726,-935,393,-815\n-142,563,654,638,-712,-597\n-759,60,-23,977,100,-765\n-305,595,-570,-809,482,762\n-161,-267,53,963,998,-529\n-300,-57,798,353,703,486\n-990,696,-764,699,-565,719\n-232,-205,566,571,977,369\n740,865,151,-817,-204,-293\n94,445,-768,229,537,-406\n861,620,37,-424,-36,656\n390,-369,952,733,-464,569\n-482,-604,959,554,-705,-626\n-396,-615,-991,108,272,-723\n143,780,535,142,-917,-147\n138,-629,-217,-908,905,115\n915,103,-852,64,-468,-642\n570,734,-785,-268,-326,-759\n738,531,-332,586,-779,24\n870,440,-217,473,-383,415\n-296,-333,-330,-142,-924,950\n118,120,-35,-245,-211,-652\n61,634,153,-243,838,789\n726,-582,210,105,983,537\n-313,-323,758,234,29,848\n-847,-172,-593,733,-56,617\n54,255,-512,156,-575,675\n-873,-956,-148,623,95,200\n700,-370,926,649,-978,157\n-639,-202,719,130,747,222\n194,-33,955,943,505,114\n-226,-790,28,-930,827,783\n-392,-74,-28,714,218,-612\n209,626,-888,-683,-912,495\n487,751,614,933,631,445\n-348,-34,-411,-106,835,321\n-689,872,-29,-800,312,-542\n-52,566,827,570,-862,-77\n471,992,309,-402,389,912\n24,520,-83,-51,555,503\n-265,-317,283,-970,-472,690\n606,526,137,71,-651,150\n217,-518,663,66,-605,-331\n-562,232,-76,-503,205,-323\n842,-521,546,285,625,-186\n997,-927,344,909,-546,974\n-677,419,81,121,-705,771\n719,-379,-944,-797,784,-155\n-378,286,-317,-797,-111,964\n-288,-573,784,80,-532,-646\n-77,407,-248,-797,769,-816\n-24,-637,287,-858,-927,-333\n-902,37,894,-823,141,684\n125,467,-177,-516,686,399\n-321,-542,641,-590,527,-224\n-400,-712,-876,-208,632,-543\n-676,-429,664,-242,-269,922\n-608,-273,-141,930,687,380\n786,-12,498,494,310,326\n-739,-617,606,-960,804,188\n384,-368,-243,-350,-459,31\n-550,397,320,-868,328,-279\n969,-179,853,864,-110,514\n910,793,302,-822,-285,488\n-605,-128,218,-283,-17,-227\n16,324,667,708,750,3\n485,-813,19,585,71,930\n-218,816,-687,-97,-732,-360\n-497,-151,376,-23,3,315\n-412,-989,-610,-813,372,964\n-878,-280,87,381,-311,69\n-609,-90,-731,-679,150,585\n889,27,-162,605,75,-770\n448,617,-988,0,-103,-504\n-800,-537,-69,627,608,-668\n534,686,-664,942,830,920\n-238,775,495,932,-793,497\n-343,958,-914,-514,-691,651\n568,-136,208,359,728,28\n286,912,-794,683,556,-102\n-638,-629,-484,445,-64,-497\n58,505,-801,-110,872,632\n-390,777,353,267,976,369\n-993,515,105,-133,358,-572\n964,996,355,-212,-667,38\n-725,-614,-35,365,132,-196\n237,-536,-416,-302,312,477\n-664,574,-210,224,48,-925\n869,-261,-256,-240,-3,-698\n712,385,32,-34,916,-315\n895,-409,-100,-346,728,-624\n-806,327,-450,889,-781,-939\n-586,-403,698,318,-939,899\n557,-57,-920,659,333,-51\n-441,232,-918,-205,246,1\n783,167,-797,-595,245,-736\n-36,-531,-486,-426,-813,-160\n777,-843,817,313,-228,-572\n735,866,-309,-564,-81,190\n-413,645,101,719,-719,218\n-83,164,767,796,-430,-459\n122,779,-15,-295,-96,-892\n462,379,70,548,834,-312\n-630,-534,124,187,-737,114\n-299,-604,318,-591,936,826\n-879,218,-642,-483,-318,-866\n-691,62,-658,761,-895,-854\n-822,493,687,569,910,-202\n-223,784,304,-5,541,925\n-914,541,737,-662,-662,-195\n-622,615,414,358,881,-878\n339,745,-268,-968,-280,-227\n-364,855,148,-709,-827,472\n-890,-532,-41,664,-612,577\n-702,-859,971,-722,-660,-920\n-539,-605,737,149,973,-802\n800,42,-448,-811,152,511\n-933,377,-110,-105,-374,-937\n-766,152,482,120,-308,390\n-568,775,-292,899,732,890\n-177,-317,-502,-259,328,-511\n612,-696,-574,-660,132,31\n-119,563,-805,-864,179,-672\n425,-627,183,-331,839,318\n-711,-976,-749,152,-916,261\n181,-63,497,211,262,406\n-537,700,-859,-765,-928,77\n892,832,231,-749,-82,613\n816,216,-642,-216,-669,-912\n-6,624,-937,-370,-344,268\n737,-710,-869,983,-324,-274\n565,952,-547,-158,374,-444\n51,-683,645,-845,515,636\n-953,-631,114,-377,-764,-144\n-8,470,-242,-399,-675,-730\n-540,689,-20,47,-607,590\n-329,-710,-779,942,-388,979\n123,829,674,122,203,563\n46,782,396,-33,386,610\n872,-846,-523,-122,-55,-190\n388,-994,-525,974,127,596\n781,-680,796,-34,-959,-62\n-749,173,200,-384,-745,-446\n379,618,136,-250,-224,970\n-58,240,-921,-760,-901,-626\n366,-185,565,-100,515,688\n489,999,-893,-263,-637,816\n838,-496,-316,-513,419,479\n107,676,-15,882,98,-397\n-999,941,-903,-424,670,-325\n171,-979,835,178,169,-984\n-609,-607,378,-681,184,402\n-316,903,-575,-800,224,983\n591,-18,-460,551,-167,918\n-756,405,-117,441,163,-320\n456,24,6,881,-836,-539\n-489,-585,915,651,-892,-382\n-177,-122,73,-711,-386,591\n181,724,530,686,-131,241\n737,288,886,216,233,33\n-548,-386,-749,-153,-85,-982\n-835,227,904,160,-99,25\n-9,-42,-162,728,840,-963\n217,-763,870,771,47,-846\n-595,808,-491,556,337,-900\n-134,281,-724,441,-134,708\n-789,-508,651,-962,661,315\n-839,-923,339,402,41,-487\n300,-790,48,703,-398,-811\n955,-51,462,-685,960,-717\n910,-880,592,-255,-51,-776\n-885,169,-793,368,-565,458\n-905,940,-492,-630,-535,-988\n245,797,763,869,-82,550\n-310,38,-933,-367,-650,824\n-95,32,-83,337,226,990\n-218,-975,-191,-208,-785,-293\n-672,-953,517,-901,-247,465\n681,-148,261,-857,544,-923\n640,341,446,-618,195,769\n384,398,-846,365,671,815\n578,576,-911,907,762,-859\n548,-428,144,-630,-759,-146\n710,-73,-700,983,-97,-889\n-46,898,-973,-362,-817,-717\n151,-81,-125,-900,-478,-154\n483,615,-537,-932,181,-68\n786,-223,518,25,-306,-12\n-422,268,-809,-683,635,468\n983,-734,-694,-608,-110,4\n-786,-196,749,-354,137,-8\n-181,36,668,-200,691,-973\n-629,-838,692,-736,437,-871\n-208,-536,-159,-596,8,197\n-3,370,-686,170,913,-376\n44,-998,-149,-993,-200,512\n-519,136,859,497,536,434\n77,-985,972,-340,-705,-837\n-381,947,250,360,344,322\n-26,131,699,750,707,384\n-914,655,299,193,406,955\n-883,-921,220,595,-546,794\n-599,577,-569,-404,-704,489\n-594,-963,-624,-460,880,-760\n-603,88,-99,681,55,-328\n976,472,139,-453,-531,-860\n192,-290,513,-89,666,432\n417,487,575,293,567,-668\n655,711,-162,449,-980,972\n-505,664,-685,-239,603,-592\n-625,-802,-67,996,384,-636\n365,-593,522,-666,-200,-431\n-868,708,560,-860,-630,-355\n-702,785,-637,-611,-597,960\n-137,-696,-93,-803,408,406\n891,-123,-26,-609,-610,518\n133,-832,-198,555,708,-110\n791,617,-69,487,696,315\n-900,694,-565,517,-269,-416\n914,135,-781,600,-71,-600\n991,-915,-422,-351,-837,313\n-840,-398,-302,21,590,146\n62,-558,-702,-384,-625,831\n-363,-426,-924,-496,792,-908\n73,361,-817,-466,400,922\n-626,-164,-626,860,-524,286\n255,26,-944,809,-606,986\n-457,-256,-103,50,-867,-871\n-223,803,196,480,612,136\n-820,-928,700,780,-977,721\n717,332,53,-933,-128,793\n-602,-648,562,593,890,702\n-469,-875,-527,911,-475,-222\n110,-281,-552,-536,-816,596\n-981,654,413,-981,-75,-95\n-754,-742,-515,894,-220,-344\n795,-52,156,408,-603,76\n474,-157,423,-499,-807,-791\n260,688,40,-52,702,-122\n-584,-517,-390,-881,302,-504\n61,797,665,708,14,668\n366,166,458,-614,564,-983\n72,539,-378,796,381,-824\n-485,201,-588,842,736,379\n-149,-894,-298,705,-303,-406\n660,-935,-580,521,93,633\n-382,-282,-375,-841,-828,171\n-567,743,-100,43,144,122\n-281,-786,-749,-551,296,304\n11,-426,-792,212,857,-175\n594,143,-699,289,315,137\n341,596,-390,107,-631,-804\n-751,-636,-424,-854,193,651\n-145,384,749,675,-786,517\n224,-865,-323,96,-916,258\n-309,403,-388,826,35,-270\n-942,709,222,158,-699,-103\n-589,842,-997,29,-195,-210\n264,426,566,145,-217,623\n217,965,507,-601,-453,507\n-206,307,-982,4,64,-292\n676,-49,-38,-701,550,883\n5,-850,-438,659,745,-773\n933,238,-574,-570,91,-33\n-866,121,-928,358,459,-843\n-568,-631,-352,-580,-349,189\n-737,849,-963,-486,-662,970\n135,334,-967,-71,-365,-792\n789,21,-227,51,990,-275\n240,412,-886,230,591,256\n-609,472,-853,-754,959,661\n401,521,521,314,929,982\n-499,784,-208,71,-302,296\n-557,-948,-553,-526,-864,793\n270,-626,828,44,37,14\n-412,224,617,-593,502,699\n41,-908,81,562,-849,163\n165,917,761,-197,331,-341\n-687,314,799,755,-969,648\n-164,25,578,439,-334,-576\n213,535,874,-177,-551,24\n-689,291,-795,-225,-496,-125\n465,461,558,-118,-568,-909\n567,660,-810,46,-485,878\n-147,606,685,-690,-774,984\n568,-886,-43,854,-738,616\n-800,386,-614,585,764,-226\n-518,23,-225,-732,-79,440\n-173,-291,-689,636,642,-447\n-598,-16,227,410,496,211\n-474,-930,-656,-321,-420,36\n-435,165,-819,555,540,144\n-969,149,828,568,394,648\n65,-848,257,720,-625,-851\n981,899,275,635,465,-877\n80,290,792,760,-191,-321\n-605,-858,594,33,706,593\n585,-472,318,-35,354,-927\n-365,664,803,581,-965,-814\n-427,-238,-480,146,-55,-606\n879,-193,250,-890,336,117\n-226,-322,-286,-765,-836,-218\n-913,564,-667,-698,937,283\n872,-901,810,-623,-52,-709\n473,171,717,38,-429,-644\n225,824,-219,-475,-180,234\n-530,-797,-948,238,851,-623\n85,975,-363,529,598,28\n-799,166,-804,210,-769,851\n-687,-158,885,736,-381,-461\n447,592,928,-514,-515,-661\n-399,-777,-493,80,-544,-78\n-884,631,171,-825,-333,551\n191,268,-577,676,137,-33\n212,-853,709,798,583,-56\n-908,-172,-540,-84,-135,-56\n303,311,406,-360,-240,811\n798,-708,824,59,234,-57\n491,693,-74,585,-85,877\n509,-65,-936,329,-51,722\n-122,858,-52,467,-77,-609\n850,760,547,-495,-953,-952\n-460,-541,890,910,286,724\n-914,843,-579,-983,-387,-460\n989,-171,-877,-326,-899,458\n846,175,-915,540,-1000,-982\n-852,-920,-306,496,530,-18\n338,-991,160,85,-455,-661\n-186,-311,-460,-563,-231,-414\n-932,-302,959,597,793,748\n-366,-402,-788,-279,514,53\n-940,-956,447,-956,211,-285\n564,806,-911,-914,934,754\n575,-858,-277,15,409,-714\n848,462,100,-381,135,242\n330,718,-24,-190,860,-78\n479,458,941,108,-866,-653\n212,980,962,-962,115,841\n-827,-474,-206,881,323,765\n506,-45,-30,-293,524,-133\n832,-173,547,-852,-561,-842\n-397,-661,-708,819,-545,-228\n521,51,-489,852,36,-258\n227,-164,189,465,-987,-882\n-73,-997,641,-995,449,-615\n151,-995,-638,415,257,-400\n-663,-297,-748,537,-734,198\n-585,-401,-81,-782,-80,-105\n99,-21,238,-365,-704,-368\n45,416,849,-211,-371,-1\n-404,-443,795,-406,36,-933\n272,-363,981,-491,-380,77\n713,-342,-366,-849,643,911\n-748,671,-537,813,961,-200\n-194,-909,703,-662,-601,188\n281,500,724,286,267,197\n-832,847,-595,820,-316,637\n520,521,-54,261,923,-10\n4,-808,-682,-258,441,-695\n-793,-107,-969,905,798,446\n-108,-739,-590,69,-855,-365\n380,-623,-930,817,468,713\n759,-849,-236,433,-723,-931\n95,-320,-686,124,-69,-329\n-655,518,-210,-523,284,-866\n144,303,639,70,-171,269\n173,-333,947,-304,55,40\n274,878,-482,-888,-835,375\n-982,-854,-36,-218,-114,-230\n905,-979,488,-485,-479,114\n877,-157,553,-530,-47,-321\n350,664,-881,442,-220,-284\n434,-423,-365,878,-726,584\n535,909,-517,-447,-660,-141\n-966,191,50,353,182,-642\n-785,-634,123,-907,-162,511\n146,-850,-214,814,-704,25\n692,1,521,492,-637,274\n-662,-372,-313,597,983,-647\n-962,-526,68,-549,-819,231\n740,-890,-318,797,-666,948\n-190,-12,-468,-455,948,284\n16,478,-506,-888,628,-154\n272,630,-976,308,433,3\n-169,-391,-132,189,302,-388\n109,-784,474,-167,-265,-31\n-177,-532,283,464,421,-73\n650,635,592,-138,1,-387\n-932,703,-827,-492,-355,686\n586,-311,340,-618,645,-434\n-951,736,647,-127,-303,590\n188,444,903,718,-931,500\n-872,-642,-296,-571,337,241\n23,65,152,125,880,470\n512,823,-42,217,823,-263\n180,-831,-380,886,607,762\n722,443,-149,-216,-115,759\n-19,660,-36,901,923,231\n562,-322,-626,-968,194,-825\n204,-920,938,784,362,150\n-410,-266,-715,559,-672,124\n-198,446,-140,454,-461,-447\n83,-346,830,-493,-759,-382\n-881,601,581,234,-134,-925\n-494,914,-42,899,235,629\n-390,50,956,437,774,-700\n-514,514,44,-512,-576,-313\n63,-688,808,-534,-570,-399\n-726,572,-896,102,-294,-28\n-688,757,401,406,955,-511\n-283,423,-485,480,-767,908\n-541,952,-594,116,-854,451\n-273,-796,236,625,-626,257\n-407,-493,373,826,-309,297\n-750,955,-476,641,-809,713\n8,415,695,226,-111,2\n733,209,152,-920,401,995\n921,-103,-919,66,871,-947\n-907,89,-869,-214,851,-559\n-307,748,524,-755,314,-711\n188,897,-72,-763,482,103\n545,-821,-232,-596,-334,-754\n-217,-788,-820,388,-200,-662\n779,160,-723,-975,-142,-998\n-978,-519,-78,-981,842,904\n-504,-736,-295,21,-472,-482\n391,115,-705,574,652,-446\n813,-988,865,830,-263,487\n194,80,774,-493,-761,-872\n-415,-284,-803,7,-810,670\n-484,-4,881,-872,55,-852\n-379,822,-266,324,-48,748\n-304,-278,406,-60,959,-89\n404,756,577,-643,-332,658\n291,460,125,491,-312,83\n311,-734,-141,582,282,-557\n-450,-661,-981,710,-177,794\n328,264,-787,971,-743,-407\n-622,518,993,-241,-738,229\n273,-826,-254,-917,-710,-111\n809,770,96,368,-818,725\n-488,773,502,-342,534,745\n-28,-414,236,-315,-484,363\n179,-466,-566,713,-683,56\n560,-240,-597,619,916,-940\n893,473,872,-868,-642,-461\n799,489,383,-321,-776,-833\n980,490,-508,764,-512,-426\n917,961,-16,-675,440,559\n-812,212,784,-987,-132,554\n-886,454,747,806,190,231\n910,341,21,-66,708,725\n29,929,-831,-494,-303,389\n-103,492,-271,-174,-515,529\n-292,119,419,788,247,-951\n483,543,-347,-673,664,-549\n-926,-871,-437,337,162,-877\n299,472,-771,5,-88,-643\n-103,525,-725,-998,264,22\n-505,708,550,-545,823,347\n-738,931,59,147,-156,-259\n456,968,-162,889,132,-911\n535,120,968,-517,-864,-541\n24,-395,-593,-766,-565,-332\n834,611,825,-576,280,629\n211,-548,140,-278,-592,929\n-999,-240,-63,-78,793,573\n-573,160,450,987,529,322\n63,353,315,-187,-461,577\n189,-950,-247,656,289,241\n209,-297,397,664,-805,484\n-655,452,435,-556,917,874\n253,-756,262,-888,-778,-214\n793,-451,323,-251,-401,-458\n-396,619,-651,-287,-668,-781\n698,720,-349,742,-807,546\n738,280,680,279,-540,858\n-789,387,530,-36,-551,-491\n162,579,-427,-272,228,710\n689,356,917,-580,729,217\n-115,-638,866,424,-82,-194\n411,-338,-917,172,227,-29\n-612,63,630,-976,-64,-204\n-200,911,583,-571,682,-579\n91,298,396,-183,788,-955\n141,-873,-277,149,-396,916\n321,958,-136,573,541,-777\n797,-909,-469,-877,988,-653\n784,-198,129,883,-203,399\n-68,-810,223,-423,-467,-512\n531,-445,-603,-997,-841,641\n-274,-242,174,261,-636,-158\n-574,494,-796,-798,-798,99\n95,-82,-613,-954,-753,986\n-883,-448,-864,-401,938,-392\n913,930,-542,-988,310,410\n506,-99,43,512,790,-222\n724,31,49,-950,260,-134\n-287,-947,-234,-700,56,588\n-33,782,-144,948,105,-791\n548,-546,-652,-293,881,-520\n691,-91,76,991,-631,742\n-520,-429,-244,-296,724,-48\n778,646,377,50,-188,56\n-895,-507,-898,-165,-674,652\n654,584,-634,177,-349,-620\n114,-980,355,62,182,975\n516,9,-442,-298,274,-579\n-238,262,-431,-896,506,-850\n47,748,846,821,-537,-293\n839,726,593,285,-297,840\n634,-486,468,-304,-887,-567\n-864,914,296,-124,335,233\n88,-253,-523,-956,-554,803\n-587,417,281,-62,-409,-363\n-136,-39,-292,-768,-264,876\n-127,506,-891,-331,-744,-430\n778,584,-750,-129,-479,-94\n-876,-771,-987,-757,180,-641\n-777,-694,411,-87,329,190\n-347,-999,-882,158,-754,232\n-105,918,188,237,-110,-591\n-209,703,-838,77,838,909\n-995,-339,-762,750,860,472\n185,271,-289,173,811,-300\n2,65,-656,-22,36,-139\n765,-210,883,974,961,-905\n-212,295,-615,-840,77,474\n211,-910,-440,703,-11,859\n-559,-4,-196,841,-277,969\n-73,-159,-887,126,978,-371\n-569,633,-423,-33,512,-393\n503,143,-383,-109,-649,-998\n-663,339,-317,-523,-2,596\n690,-380,570,378,-652,132\n72,-744,-930,399,-525,935\n865,-983,115,37,995,826\n594,-621,-872,443,188,-241\n-1000,291,754,234,-435,-869\n-868,901,654,-907,59,181\n-868,-793,-431,596,-446,-564\n900,-944,-680,-796,902,-366\n331,430,943,853,-851,-942\n315,-538,-354,-909,139,721\n170,-884,-225,-818,-808,-657\n-279,-34,-533,-871,-972,552\n691,-986,-800,-950,654,-747\n603,988,899,841,-630,591\n876,-949,809,562,602,-536\n-693,363,-189,495,738,-1000\n-383,431,-633,297,665,959\n-740,686,-207,-803,188,-520\n-820,226,31,-339,10,121\n-312,-844,624,-516,483,621\n-822,-529,69,-278,800,328\n834,-82,-759,420,811,-264\n-960,-240,-921,561,173,46\n-324,909,-790,-814,-2,-785\n976,334,-290,-891,704,-581\n150,-798,689,-823,237,-639\n-551,-320,876,-502,-622,-628\n-136,845,904,595,-702,-261\n-857,-377,-522,-101,-943,-805\n-682,-787,-888,-459,-752,-985\n-571,-81,623,-133,447,643\n-375,-158,72,-387,-324,-696\n-660,-650,340,188,569,526\n727,-218,16,-7,-595,-988\n-966,-684,802,-783,-272,-194\n115,-566,-888,47,712,180\n-237,-69,45,-272,981,-812\n48,897,439,417,50,325\n348,616,180,254,104,-784\n-730,811,-548,612,-736,790\n138,-810,123,930,65,865\n-768,-299,-49,-895,-692,-418\n487,-531,802,-159,-12,634\n808,-179,552,-73,470,717\n720,-644,886,-141,625,144\n-485,-505,-347,-244,-916,66\n600,-565,995,-5,324,227\n-771,-35,904,-482,753,-303\n-701,65,426,-763,-504,-479\n409,733,-823,475,64,718\n865,975,368,893,-413,-433\n812,-597,-970,819,813,624\n193,-642,-381,-560,545,398\n711,28,-316,771,717,-865\n-509,462,809,-136,786,635\n618,-49,484,169,635,547\n-747,685,-882,-496,-332,82\n-501,-851,870,563,290,570\n-279,-829,-509,397,457,816\n-508,80,850,-188,483,-326\n860,-100,360,119,-205,787\n-870,21,-39,-827,-185,932\n826,284,-136,-866,-330,-97\n-944,-82,745,899,-97,365\n929,262,564,632,-115,632\n244,-276,713,330,-897,-214\n-890,-109,664,876,-974,-907\n716,249,816,489,723,141\n-96,-560,-272,45,-70,645\n762,-503,414,-828,-254,-646\n909,-13,903,-422,-344,-10\n658,-486,743,545,50,674\n-241,507,-367,18,-48,-241\n886,-268,884,-762,120,-486\n-412,-528,879,-647,223,-393\n851,810,234,937,-726,797\n-999,942,839,-134,-996,-189\n100,979,-527,-521,378,800\n544,-844,-832,-530,-77,-641\n43,889,31,442,-934,-503\n-330,-370,-309,-439,173,547\n169,945,62,-753,-542,-597\n208,751,-372,-647,-520,70\n765,-840,907,-257,379,918\n334,-135,-689,730,-427,618\n137,-508,66,-695,78,169\n-962,-123,400,-417,151,969\n328,689,666,427,-555,-642\n-907,343,605,-341,-647,582\n-667,-363,-571,818,-265,-399\n525,-938,904,898,725,692\n-176,-802,-858,-9,780,275\n580,170,-740,287,691,-97\n365,557,-375,361,-288,859\n193,737,842,-808,520,282\n-871,65,-799,836,179,-720\n958,-144,744,-789,797,-48\n122,582,662,912,68,757\n595,241,-801,513,388,186\n-103,-677,-259,-731,-281,-857\n921,319,-696,683,-88,-997\n775,200,78,858,648,768\n316,821,-763,68,-290,-741\n564,664,691,504,760,787\n694,-119,973,-385,309,-760\n777,-947,-57,990,74,19\n971,626,-496,-781,-602,-239\n-651,433,11,-339,939,294\n-965,-728,560,569,-708,-247\n"
  },
  {
    "path": "Problem104/.hash",
    "content": "c8771ddd4df191098d70a8e94dd1cde7\n"
  },
  {
    "path": "Problem104/Python/solution_1.py",
    "content": "import math\nimport decimal\n\n# https://en.wikipedia.org/wiki/Fibonacci_number#Closed-form_expression\n\nsqrt = math.sqrt\ndec = decimal.Decimal\n\ndef _is_pandigital(elem):\n    return [str(i) for i in range(1, 10)] == sorted(list(elem))\n\n_PHI = dec((1 + sqrt(5))/2)\n_PSI = dec(1 - _PHI)\n\ndef _fermat_approximation(n):\n    return (_PHI**dec(n) - _PSI**dec(n))/dec(sqrt(dec(5)))\n\ndef _n_digit_of_decimal(d):\n    s = str(d)\n    return s[0] + s[2:10]\n\ndef solve():\n    fa, fb, fc, t = 1, 1, 2, 2\n    while 1:\n        t+=1\n        fc = (fa + fb) % 10 ** 9\n        fa = fb\n        fb = fc\n        if _is_pandigital(str(fc)):\n            s_top = _n_digit_of_decimal(_fermat_approximation(t))\n            if _is_pandigital(s_top):\n                return t\n\nif __name__ == \"__main__\":\n    print(solve())\n"
  },
  {
    "path": "Problem104/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=104)\n"
  },
  {
    "path": "Problem112/.hash",
    "content": "e08c982713a1c2bd3637dd489199722e -\n"
  },
  {
    "path": "Problem112/Python/solution_1.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n#\n#    Copyright © 2019 Manoel Vilela\n#\n#    @project: Project Euler\n#     @author: Manoel Vilela\n#      @email: manoel_vilela@engineer.com\n#\n\n\"\"\"\nWorking from left-to-right if no digit is exceeded by the digit to its\nleft it is called an increasing number; for example, 134468.\n\nSimilarly if no digit is exceeded by the digit to its right it is\ncalled a decreasing number; for example, 66420.\n\nWe shall call a positive integer that is neither increasing nor\ndecreasing a \"bouncy\" number; for example, 155349.\n\nClearly there cannot be any bouncy numbers below one-hundred, but just\nover half of the numbers below one-thousand (525) are bouncy. In fact,\nthe least number for which the proportion of bouncy numbers first\nreaches 50% is 538.\n\nSurprisingly, bouncy numbers become more and more common and by the\ntime we reach 21780 the proportion of bouncy numbers is equal to 90%.\n\nFind the least number for which the proportion of bouncy numbers is\nexactly 99%.\n\"\"\"\n\n\ndef bouncy(num: int) -> bool:\n    digits = str(num)\n    comparisons = set()\n\n    for d1, d2 in zip(digits, digits[1:]):\n        if d1 == d2:\n            continue\n        state = 1 if int(d1) > int(d2) else 0\n        comparisons.add(state)\n        if len(comparisons) == 2:\n            return True\n\n    return False\n\n\ndef bouncy_counter(threshold: float):\n    bouncy_numbers = 0\n    n = 100\n    percentage = 0\n    while percentage < threshold:\n        n += 1\n        if bouncy(n):\n            bouncy_numbers += 1\n        if bouncy_numbers > 0:\n            percentage = bouncy_numbers / n\n    return n\n\n\ndef main():\n    print(bouncy_counter(0.99))\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "Problem112/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=112)\n"
  },
  {
    "path": "Problem145/.hash",
    "content": "705e8444ad9c92e9a7589fb97515a9b6"
  },
  {
    "path": "Problem145/Python/solution_slow_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n\"\"\"\nHow many reversible numbers are there below one-billion?\nProblem 145\n\nSome positive integers n have the property that the sum [ n + reverse(n) ] consists entirely of odd (decimal) digits. \nFor instance, 36 + 63 = 99 and 409 + 904 = 1313. We will call such numbers reversible; so 36, 63, 409, and 904 are reversible. Leading zeroes are not allowed in either n or reverse(n).\n\nThere are 120 reversible numbers below one-thousand.\n\nHow many reversible numbers are there below one-billion (10^9)?\n\"\"\"\nfrom functools import reduce\nfrom itertools import permutations, combinations_with_replacement\n\n# hahahhahaha!! consegui: answer 608720\n# Demorou pra caramba, tem que melhorar ainda... mas funciona!\n\n\ncombs = reduce(list.__add__, [[(x, y) for y in range(0, 10) if (x ^ y) & 1 or (x + y) < 10] for x in range(0, 10)])\n\ndef sumreverse(num):\n\treturn str((int(str(num)[::-1]) + num))\ndef reversible(num):\n\treturn bool(reduce(lambda a, b: a*b, [int(y) for y in sumreverse(num)]) & 1)\n\ndef gen_filtred(n, start = 1): # n - potencia de 10\n\texp = start\n\twhile exp < n:\n\t\ttamanho = (exp + 1)//2\n\t\t# expoente impar na base 10 -> tamanho par\n\t\tfor comb in combinations_with_replacement(combs, tamanho):\n\t\t\tfor perm in sorted(set(permutations(comb))):\n\t\t\t\thead, tail = perm[0]\n\t\t\t\tif head == 0 or tail == 0 or not bool((head + tail) & 1):\n\t\t\t\t\tcontinue\n\t\t\t\tif exp & 1 == 1:\n\t\t\t\t\tindex = exp\n\t\t\t\t\tnewnum = 0\n\t\t\t\t\tfor leftnum, rightnum in perm:\n\t\t\t\t\t\tnewnum += (leftnum * 10 ** index) + (rightnum * 10 ** abs(index - exp))\n\t\t\t\t\t\tindex -= 1\n\t\t\t\t\tyield newnum\n\t\t\t\telse:\n\t\t\t\t\tfor middle in range(10):\n\t\t\t\t\t\tindex = exp\n\t\t\t\t\t\tnewnum = middle * 10 ** (index // 2)\n\t\t\t\t\t\tfor leftnum, rightnum in perm:\n\t\t\t\t\t\t\tnewnum += (leftnum * 10 ** index ) + (rightnum * 10 ** abs(index - exp))\n\t\t\t\t\t\t\tindex -= 1\n\t\t\t\t\t\tyield newnum\n\t\texp += 1\n\n\nrange_x = lambda x: gen_filtred(len(str(x)) - 1)\n\ntest = 100000000\ntotal = 0\nfor i in range_x(test):\n\tif reversible(i):\n\t\ttotal += 1\n\nprint(total)\n\n"
  },
  {
    "path": "Problem145/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=145)\n"
  },
  {
    "path": "Problem206/.hash",
    "content": "09f9d87cb4b1ebb34e1f607e55a351d8"
  },
  {
    "path": "Problem206/Haskell/solution_1.hs",
    "content": "{-- Author: Manoel Vilela\n\nFind the unique positive integer whose square has the form 1_2_3_4_5_6_7_8_9_0,\nwhere each “_” is a single digit.\n\n--}\n\n{--\nSome thoughts:\n\nAs n² = 1_2_3_4_5_6_7_8_9_0 terminates with 0, so then n as well terminates\nwith 0. But any number terminated with 0 and squared will have two zeros.\n(x * 10)^2 = 100 * x^2\n\nSo the number we are looking has the form: 1_2_3_4_5_6_7_8_900\n\nIgnoring the last two zeros we have 1_2_3_4_5_6_7_8_9.\nA number terminated with 9. So the square root of this must\nterminated with a digit 7 or 3 (because 3² => 9 and 7² => 49).\n\nThat way we just look for n values whose the last digits is\n3 or 7.\n\nThe max value to check is sqrt(19293949596979899)\nThe min value to check is sqrt(10203040506070809)\n\nRange of almost 5 millions. But using numbers terminated with 3\nor 7 will cut this to 1/5. So we'll check, in the worst case,\n1 million of numbers. (much better to check 1 billion using brute-force)\n--}\n\n\n-- check if n match on the mask 1_2_3_4_5_6_7_8_9\nnumFitness :: Integer -> Bool\nnumFitness n = and [a == b | (a,b) <- zip ['1'..'9'] num]\n  where num = [str !! k | k <- filter even [0..length str]]\n        str = show n\n\n-- For some reason looking for the maxValue to minValue we got a AWESOME\n-- optimization on final performance\nmagicNum :: Integer\nmagicNum = (* 10) $ head $ filter (numFitness . \\x -> x * x) nums\n  where minv = floor $ (sqrt 10203040506070809)/10\n        maxv = floor $ (sqrt 19293949596979899)/10\n        nums = concatMap (\\n -> [n*10 + 3, n*10 + 7]) [maxv,maxv-1..minv]\n\nmain :: IO()\nmain = print magicNum\n"
  },
  {
    "path": "Problem206/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=206)\n"
  },
  {
    "path": "Problem301/.hash",
    "content": "f47b7d975a5ebd3b66af0968ef5e1cdb"
  },
  {
    "path": "Problem301/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\ndef nim():\n    binary_map = [0,1]\n    total = 3\n    for k in range(28):\n        binary_map_new = []\n        for i in range(0, len(binary_map), 2):\n            if binary_map[i:i+2] == [0,0]:\n                binary_map_new.extend([0,0,0,1])\n                total += 3\n            elif binary_map[i:i+2] == [0,1]:\n                binary_map_new.extend([0,0])\n                total += 2\n\n        binary_map = binary_map_new\n        \n    return total\n\nif __name__ == \"__main__\":\n    print(nim())\n"
  },
  {
    "path": "Problem301/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=301)\n"
  },
  {
    "path": "Problem301/Scheme/solution_1.scm",
    "content": ";; -*- mode: scheme; coding: utf-8-unix -*-\n\n#|\nA somewhat easy to demonstrate theorem:\nthe desired number is a Fibonacci one!\n|#\n\n(define fibonacci\n  (lambda (n)\n    (define fibonacci-acc\n      (lambda (n acc1 acc2)\n\t(cond\n\t ((= n 0) acc1)\n\t ((= n 1) acc2)\n\t (else (fibonacci-acc (- n 1) acc2 (+ acc2 acc1))))))\n    (fibonacci-acc n 0 1)))\n\n(define solve\n  (let ((input 30))\n    (fibonacci (+ input 2))))\n\n(display solve)\n(newline)\n"
  },
  {
    "path": "Problem301/Scheme/solution_2_slow.scm",
    "content": ";; -*- mode: scheme; coding: utf-8-unix -*-\n\n;; Racket doesn't define SRFI-151 (Bitwise Operations) - yet\n;; (require srfi/151)\n\n(define loser?\n  (lambda (n)\n    (= (bitwise-xor n (* 2 n) (* 3 n)) 0)))\n\n(define list-losers-not-greater-than\n  (lambda (n)\n    (define list-losers-not-greater-than-acc\n      (lambda (n acc)\n\t(cond\n\t ((= n 0) acc)\n\t ((loser? n) (list-losers-not-greater-than-acc (- n 1) (append (list n) acc)))\n\t (else (list-losers-not-greater-than-acc (- n 1) acc)))))\n    (list-losers-not-greater-than-acc n '())))\n\n(define count-losers-not-greater-than\n  (lambda (n)\n    (define count-losers-not-greater-than-acc\n      (lambda (n acc)\n\t(cond\n\t ((= n 0) acc)\n\t ((loser? n) (count-losers-not-greater-than-acc (- n 1) (+ acc 1)))\n\t (else (count-losers-not-greater-than-acc (- n 1) acc)))))\n    (count-losers-not-greater-than-acc n 0)))\n\n(define power\n  (lambda (base exp)\n    (define power-acc\n      (lambda (base exp acc)\n\t(cond\n\t ((= exp 0) acc)\n\t (else (power-acc base (- exp 1) (* base acc))))))\n    (power-acc base exp 1)))\n\n(define solve\n  (let ((input 30))\n    (count-losers-not-greater-than (power 2 input))))\n\n(display solve)\n(newline)\n"
  },
  {
    "path": "Problem357/.hash",
    "content": "ed25b13b18a21c1077fed00ef42f503b"
  },
  {
    "path": "Problem357/Python/solution_slow_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n\n\"\"\"\n\n    THAT IS A WRONG APPROACH FOR THIS PROBLEM! SLOWWWWWW\n\n\"\"\"\n\n\n\"\"\"\nConsider the divisors of 30: 1,2,3,5,6,10,15,30.\nIt can be seen that for every divisor d of 30, d+30/d is prime.\n\nFind the sum of all positive integers n not exceeding 100 000 000\nsuch that for every divisor d of n, d+n/d is prime.\n\"\"\"\n\n\n# black magic divisors\ndef divisors(n):\n    from functools import reduce\n    to_reduce = [[i, n // i]\n                 for i in range(1, int(n ** 0.5) + 1) if n % i is 0]\n    return set(reduce(list.__add__, to_reduce))\n\n\ndef hnum(n, d):\n    return d + (n // d)\n\n\nclass prime_divisors(object):\n\n    \"\"\"\n        The solution provider from the depth of hell\n    \"\"\"\n\n    def __init__(self, max_value):\n        self.max = max_value\n        self.primes = [2]\n        self.hell_numbers = []\n        self.run_from_hell()\n\n    @property\n    def sum(self):\n        return sum(self.hell_numbers)\n\n    def is_hell(self, n):\n        return all([0 for d in divisors(n) if hnum(n, d) not in self.primes])\n\n    def next_prime(self):\n        for p in range(3, self.max + 2):\n\n            is_prime = True\n            for prime in self.primes:\n                if p % prime == 0:\n                    is_prime = False\n                    break\n            if is_prime:\n                self.primes += [p]\n            else:\n                continue\n\n            # print('next_prime: {}'.format(p))\n            yield p\n\n    def run_from_hell(self):\n        # it's only possible even numbers, because:\n        # if n = 2k + 1\n        # and d = n\n        # 2k + 1 + [2k + 1]/[2k + 1]\n        # 2k + 1 + 1 => 2k + 2\n        # even + even = even\n        # if even, unique primes is two\n        # but two don't is a hell number: 2 + 1/2: 2.5\n        for n in range(2, self.max + 1, 2):\n            if n > self.primes[-1]:\n                for p in self.next_prime():\n                    if p > n:\n                        break\n            if self.is_hell(n):\n                self.hell_numbers += [n]\n                # print('matched: {}'.format(n))\n\n\ndef main():\n    w = prime_divisors(100000000)\n    print(w.sum)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "Problem357/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=357)\n"
  },
  {
    "path": "Problem439/.hash",
    "content": "5058f1af8388633f609cadb75a75dc9d"
  },
  {
    "path": "Problem439/Python/solution_slow_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n# THAT IS A BOMB!\n\n\"\"\"\nLet d(k) be the sum of all divisors of k.\nWe define the function S(N) = ∑1≤i≤N ∑1≤j≤N d(i·j).\nFor example, S(3) = d(1) + d(2) + d(3) + d(2) + d(4) + d(6) + d(3) + d(6) + d(9) = 59.\n\nYou are given that S(10^3) = 563576517282 and S(10^5) mod 10^9 = 215766508.\nFind S(10^11) mod 10^9 \n\"\"\"\n\nfrom functools import reduce\n\n\ndef gd(k):\n    for x in range(1, k + 1):\n        if k % x == 0:\n            yield x\n\n\ndef d(k):\n    return reduce(lambda x, y: x + y, gd(k))\n\n\ndef g(n):\n    for x in range(1, n + 1):\n        for y in range(1, n + 1):\n            yield x * y\n\n\ndef s(n):\n    dic = {}\n    _sum = 0\n    for i in g(n):\n        if i not in dic:\n            dic[i] = d(i)\n        _sum += dic[i]\n\n    return _sum\n\nprint(s(10 ** 11) % 10 ** 9)\n"
  },
  {
    "path": "Problem439/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=439)\n"
  },
  {
    "path": "Problem473/.hash",
    "content": "835379a1ecfb7d86c9f9c5bc7c1d2d99"
  },
  {
    "path": "Problem473/Python/solution_slow_1.py",
    "content": "# -*- coding: utf-8 -*-\n#problem 473\n\"\"\"\nLet φ be the golden ratio: φ=1+5√2.\nRemarkably it is possible to write every positive integer as a sum of powers of φ even if we require that every power of φ is used at most once in this sum.\nEven then this representation is not unique.\nWe can make it unique by requiring that no powers with consecutive exponents are used and that the representation is finite.\nE.g: 2=φ+φ^-2 and 3=φ^2+φ^-2\n\nTo represent this sum of powers of φ we use a string of 0's and 1's with a point to indicate where the negative exponents start.\nWe call this the representation in the phigital numberbase.\nSo 1=1φ, 2=10.01φ, 3=100.01φ and 14=100100.001001φ.\nThe strings representing 1, 2 and 14 in the phigital number base are palindromic, while the string representating 3 is not.\n(the phigital point is not the middle character).\n\nThe sum of the positive integers not exceeding 1000 whose phigital representation is palindromic is 4345.\n\nFind the sum of the positive integers not exceeding 10^10 whose phigital representation is palindromic. \n\n\"\"\"\nfrom math import *\nfrom string import ascii_lowercase as alf\nfrom random import sample\n#from kbhit_unix import KBHit as kbhit\nphi = ((1+sqrt(5))/2)\n\ndef gen(x, sign = 1, start = 0, reverse = False):\n\tif not reverse:\n\t\ti = start\n\t\twhile i < x:\n\t\t\ti += 1\n\t\t\tyield i * sign\n\telse:\n\t\twhile x > start:\n\t\t\tx -= 1\n\t\t\tyield x * sign\n\ndef phi_index(n, resto = 0, lista = []):\n\tif resto == 0:\n\t\tresto = n\n\n\tlast = 0\n\tfor i in gen(n):\n\t\tif phi ** i > resto:\n\t\t\tlista.append(last)\n\t\t\tbreak\n\t\tlast = i\n\n\tresto -= phi ** last\n\tif resto <= 1:\n\t\tif resto != 0:\n\t\t\treturn suf_phi(n, resto, lista)\n\t\telse:\n\t\t\treturn lista\n\telse:\n\t\treturn phi_index(n, resto, lista)\n\ndef suf_phi(n, resto = 0, lista = []):\n\tif resto == 0:\n\t\tresto = n\n\n\tlast = -n\n\tfor i in gen(n, sign = -1, start = -1, reverse = True):\n\t\tif phi ** i - 0.000001 > resto:\n\t\t\tlista.append(last)\n\t\t\tbreak\n\t\tlast = i\n\n\tresto -= phi ** last\n\tif resto <= 0.000001:\n\t\treturn lista\n\telse:\n\t\treturn suf_phi(n, resto, lista)\n\ndef phibase(n):\n\tindex = phi_index(n, lista = [])\n\tmsb = max(index); lsb = min(index)\n\n\t#Inicializar string a direita (prefixa)\n\tpre = []\n\tfor i in range(msb + 1):\n\t\tpre.append('0')\n\n\t#Inicializar string a esquerda (sufixa)\n\tsuf = []\n\tfor i in range(abs(lsb)):\n\t\tsuf.append('0')\n\n\tfor i in index:\n\t\tif i >= 0:\n\t\t\tpre[i] = '1'\n\t\telse:\n\t\t\tsuf[~i] = '1'\n\n\treturn ''.join(pre[::-1]) + '.' + ''.join(suf)\n\ndef calc(index):\n\t_sum_ = 0\n\tfor i in index:\n\t\t_sum_ += phi ** i\n\n\tif _sum_ + 0.0001 >= int(_sum_):\n\t\treturn int(_sum_)\n\telse:\n\t\treturn _sum_\n\ndef intphi(phinum):\n\tpoint = phinum.find('.')\n\tpre, suf = phinum[:point][::-1], phinum[point + 1:]\n\tindex = []\n\tfor i in range(len(pre)):\n\t\tif pre[i] == '1':\n\t\t\tindex.append(i)\n\tfor i in range(len(suf)):\n\t\tif suf[i] == '1':\n\t\t\tindex.append(~i)\n\n\n\treturn calc(index)\n\ndef gen_palindromic(n):\n\tpass\n\ndef palindromic(string):\n\tif string != None:\n\t\treturn string == string[::-1]\n\ntest = 10 ** 10  #last: 6\nnum = phibase(test)\nwith open('test' +'/'+ 'p473_' + ''.join(sample(alf, 8)) + '.txt', 'x') as f:\n\tf.write(num)"
  },
  {
    "path": "Problem473/Python/solution_slow_2.py",
    "content": "# -*- coding: utf-8 -*-\n#problem 473\n\"\"\"\nLet φ be the golden ratio: φ=1+5√2.\nRemarkably it is possible to write every positive integer as a sum of powers of φ even if we require that every power of φ is used at most once in this sum.\nEven then this representation is not unique.\nWe can make it unique by requiring that no powers with consecutive exponents are used and that the representation is finite.\nE.g: 2=φ+φ^-2 and 3=φ^2+φ^-2\n\nTo represent this sum of powers of φ we use a string of 0's and 1's with a point to indicate where the negative exponents start.\nWe call this the representation in the phigital numberbase.\nSo 1=1φ, 2=10.01φ, 3=100.01φ and 14=100100.001001φ.\nThe strings representing 1, 2 and 14 in the phigital number base are palindromic, while the string representating 3 is not.\n(the phigital point is not the middle character).\n\nThe sum of the positive integers not exceeding 1000 whose phigital representation is palindromic is 4345.\n\nFind the sum of the positive integers not exceeding 10^10 whose phigital representation is palindromic. \n\n\"\"\"\nfrom math import *\nfrom kbhit_unix import KBHit as kbhit\nphi = ((1+sqrt(5))/2)\n\n\ndef phi_pre_gen(n):\n\tresto = n\n\twhile resto >= 1:\n\t\tlast = 0\n\t\tfor i in xrange(n):\n\t\t\tif phi ** i > resto:\n\t\t\t\tbreak\n\t\t\tlast = i\n\t\tresto -= phi ** last\n\t\tyield last\n\tyield resto\ndef phi_suf_gen(n, resto):\n\twhile resto >= 0.0001:\n\t\tlast = -n\n\t\tfor i in xrange(-n, -1):\n\t\t\tif phi ** i - 0.0001 > resto:\n\t\t\t\tbreak\n\t\t\tlast = i\n\t\tresto -= phi ** last\n\t\tyield last\ndef checkpal(n):\n\tif n == 1:\n\t\treturn True\n\n\tpre = [x for x in phi_pre_gen(n)]\n\tpre, resto = pre[:-1], pre[-1]\n\tsuf = [x for x in phi_suf_gen(n, resto)]\n\n\tfor i in xrange(len(pre)):\n\t\ttry:\n\t\t\tif pre[i] != ~suf[~i]:\n\t\t\t\treturn False\n\t\texcept IndexError:\n\t\t\treturn False\n\treturn len(pre) == len(suf)\n\n\n\nsum = 0\nkb = kbhit()\ntotal = 10 ** 10\nfor i in xrange(total):\n\tif checkpal(i):\n\t\tsum += i\n\tif kb.kbhit() and kb.getch():\n\t\tprint 'Atual: %*s / %d | %4.2f %% | Sum: %d' %(len(str(total)), str(i), total, i * 100 / total,  sum)\nprint sum\n"
  },
  {
    "path": "Problem473/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=473)\n"
  },
  {
    "path": "Problem500/.hash",
    "content": "99bbf7af6066bfe2281bb18d667fb87c\n"
  },
  {
    "path": "Problem500/Bash/solution_1.sh",
    "content": "#!/usr/bin/bash\nseq -f '%.0f' 3 2 8000000 | factor | gawk '/ .* /{next} BEGIN{f=0;t=1;fifo[0]=2} {while(fifo[f]<$2){print fifo[f];fifo[t]=fifo[f]**2;f+=1;t+=1}} {print $2; fifo[t]=$2*$2;t+=1}' | head -500500 | gawk 'BEGIN{s=1}{s=(s*$1)%500500507}END{print s}'\n"
  },
  {
    "path": "Problem500/Python/solution_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\nimport heapq\nfrom sympy.ntheory import Sieve, prime  # I tired... more prime algorithms....\n\n\ndef primes_list(n):\n    \"\"\"Return the list of [2,..., n] n-th primes\"\"\"\n    return [x for x in Sieve().primerange(2, prime(n))]\n\n\ndef smallest_integer(k, modulus=None):\n    \"\"\"Calculate the smallest number with 2**k divisors.\n\n    The math stuff about this in a simply way\n\n    The achieve is got the all range of primes [p_0 ** x,  p_n ** z]\n    multiplied with factors minimized, even the smallest.\n\n    For example the 120 on factored prime form is:\n        120 = 2³ * 3¹ * 5¹,\n    by the formula we got the numbers divisors that way:\n    (3 + 1) (1 + 1) (1 + 1) => 4 * 2 * 2 = 16 divisors!\n\n    So the formula is:\n        if p = (a ** x) * (b ** y) * (c ** z)...\n        div(p) = (x + 1) * (y + 1) * (z + 1)...\n\n    Anyway, because 2 ** k, so k = x + y + z.\n\n    Since a_n < b_m and a_n, b_m are primes nums,\n    for a smallest integer with d divisors\n    we want (a_n ** x_i) < (b_m ** y_j)... and existence of\n    primes [a_n, b_m] are maximized.\n    That way, the p num will be minimized.\n\n    Because that, we use a heap queue, to get ever\n    the smallest num and push the used with the cost:\n\n    pop: smallest from primes costed with use\n    push: p ** 2\n\n    That way if the num was selected again,\n    he'll be costed with x ** 2.\n\n    As we have an expected num of 2 ** k divisors, we need\n    iterate the heap k times. For each k, is a operation with more\n    one divisor prime or factor.\n\n    So the algorithm is O(K), considering the prime calculation\n    stuff apart. Runs about 3s (more slow part is prime getting)\n\n    See an iteration for execution of smallest_integer(k=4):\n\n    Initial Heap with 4-th: [2, 3, 5]\n    Heap: [2, 3, 5]\n    Pop: 2 | Push: 4 => n = 1 * 2\n    Heap: [3, 5, 4]\n    Pop: 3 | Push: 9 => n = 2 * 3\n    Heap: [4, 5, 9]\n    Pop: 4 | Push: 16 => n = 6 * 4\n    Heap: [5, 9, 16]\n    Pop: 5 | Push: 25 => n = 24 * 5\n    Answer: 120\n\n    n = 2 * 3 * 4 * 5 = 120! = 2³ * 3 * 5\n\n    Other example smallest_integer(k=6):\n\n    Initial Heap with 6-th: [2, 3, 5, 7, 11]\n    Heap: [2, 3, 5, 7, 11]\n    Pop: 2 | Push: 4 => n = 1 * 2\n    Heap: [3, 4, 5, 11, 7]\n    Pop: 3 | Push: 9 => n = 2 * 3\n    Heap: [4, 7, 5, 11, 9]\n    Pop: 4 | Push: 16 => n = 6 * 4\n    Heap: [5, 7, 9, 11, 16]\n    Pop: 5 | Push: 25 => n = 24 * 5\n    Heap: [7, 11, 9, 16, 25]\n    Pop: 7 | Push: 49 => n = 120 * 7\n    Heap: [9, 11, 25, 16, 49]\n    Pop: 9 | Push: 81 => n = 840 * 9\n    Answer: 7560\n\n    n = 2 * 3 * 4 * 5 * 7 * 9 = 2³ * 3 ³ * 5 * 7\n\n    So well:\n       (3 + 1) (3 + 1) (1 + 1) (1 + 1) = 4 * 4 * 2 * 2\n       => 4² * 2² = 2 ** 6\n\n    CQD.\n\n    \"\"\"\n    n = 1  # our last value\n\n    # condition, that working only for k > 1\n    costs = primes_list(k)  # more than necessary\n    # print(\"Initial Heap with {}-th: {}\".format(k, costs))\n    for i in range(k):\n        # print(\"Heap: {}\".format(costs))\n        # get the minor prime on costs\n        c = heapq.heappop(costs)\n        # set the prime before with c to heap!\n        heapq.heappush(costs, c**2)\n        # print(\"Pop: {} | Push: {} => n = {} * {}\".format(c, c ** 2, n, c))\n        n *= c\n        # that way the n value is small at each iteration\n        # and we calculate more faster so well\n        # try remove that with the block of 'for'\n        # and the time get a worse cost: 3s -> 3min!\n        if modulus:\n            n %= modulus\n\n    # print(\"Answer: {}\".format(n))\n    return n\n\n\ntest = smallest_integer(4)\nassert test == 120, \"solve(4) got {}, expected 120\".format(test)\n\nif __name__ == \"__main__\":\n    print(smallest_integer(500500, 500500507))\n"
  },
  {
    "path": "Problem500/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=500)\n"
  },
  {
    "path": "Problem501/Python/solution_slow_1.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n#\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\n# PROBABLY THAT IS REALLY WRONG\n\n\"\"\"\nEight Divisors\nProblem 501\n\nThe eight divisors of 24 are 1, 2, 3, 4, 6, 8, 12 and 24.\nThe ten numbers not exceeding 100 having exactly eight divisors are 24, 30, 40, 42, 54, 56, 66, 70, 78 and 88.\nLet f(n) be the count of numbers not exceeding n with exactly eight divisors.\nYou are given f(100) = 10, f(1000) = 180 and f(10^6) = 224427.\nFind f(10^12).\n\"\"\"\n\ndef d(n):\n    return set(reduce(list.__add__,  [[i, n//i] for i in range(1, int(n ** 0.5) + 1) if n % i == 0]))\n\ndef f(n):\n    return sum([1 for x in xrange(2, n) if len(d(x)) == 8])\n\ndef f_p(n):\n    last = 0\n    for x in xrange(2, n):\n        if len(d(x)) == 8:\n            print x, (x - last)\n            last = x\n    return last\n\n# Another comment\n\nf_p(10 ** 12)\n"
  },
  {
    "path": "Problem501/README.md",
    "content": "[The original source of problem](https://projecteuler.net/problem=501)\n"
  },
  {
    "path": "README.md",
    "content": "[![Build Status](https://travis-ci.org/DestructHub/ProjectEuler.svg?branch=master)](https://travis-ci.org/DestructHub/ProjectEuler)\n\n[![Telegram Chat](https://patrolavia.github.io/telegram-badge/chat.png)](https://telegram.me/destructhub)\n\n\n# ProjectEuler\nCompilation of some solutions of the challenges existent in the website www.projecteuler.net\n\n## Graphs\n\n![Solutions by Language](data/count.png)\n![Time Execution by Language](data/time.png)\n\n## Test\n\nYou can now test the algoritms just using on our Docker image hosted on\n`destructhub/project_euler` just calling: `docker-compose run async`\nor `docker-compose run sync`.  Assuming of course that you have a\n`docker` installation with `docker-compose`.  On the end of execution,\nwill be print a tabular-like structure with information about problem,\nlanguage, time execution and if the answer is correct.\n\nThe asynchronous build is written in Elixir, the synchronous version\nis written in Python. You can look on both systems at `stats.exs` and `stats.py`.\n\n## Status\n\nCheck the status of our roadmap here: [STATUS.md](STATUS.md)\n\n## Rules\n\nCheck the rules of the repository here:  [RULES.md](RULES.md)\n\n### Authors and Contributors\n\nCheck the ProjectEuler badges and tables by nickname: [SOLVERS.md](SOLVERS.md)\n"
  },
  {
    "path": "RULES.md",
    "content": "# Repository Rules\n\n1. We want good solutions for the problems. A good solution can be relative, but until one minute is acceptable.\nIf your solution breaks the one-minute rule of project euler, the file solution can be pushed with one condition: use the suffix `slow` like  `solution_slow_1.xy`. That way, the `stats.py` will not execute that.\n\n2. Please update the [STATUS.md](STATUS.md) in order for us to know what you are doing. That way we can attack more solutions in parallel. \n\n3. CamelCase for folders and underscore for files. For each solution ensure using the layout of the example on final of this document.\n\n4.  On push if you get  `! [rejected]        master -> master (fetch first)`, **PLEASE**, don't create a useless fucking merge with `git pull`, instead this, execute `git pull --rebase`. The repository's history line will be glad with this.\n\n5. Do not write solutions reading from stdin in any ways! That would make harder to generate a script for time measurement.\n\n6. Optionally send PR with info about your processor and the time in which your solution takes to finish.\n\n7. Add a md5sum hash of your solution on root of the `Problem00x` if no one exists yet.\n\n\n# Example\n```\nProblem00X/\n..\tPython/\n\t..\t solution_1.py\n..\tREADME.md\n..      .hash\n```\n\n``` \n$ cat README.md\n[The original source of problem](https://projecteuler.net/problem=29)\n```\n\nYou can easily add a new template using the `add` script on the root of the repository. Just call:\n\n`./add <problem_num> <answer>`\n"
  },
  {
    "path": "SOLVERS.md",
    "content": "## Solvers!\n\n![[lerax](www.github.com/ryukinix)](https://projecteuler.net/profile/lerax.png)\n![[lubien](www.github.com/lubien)](https://projecteuler.net/profile/lubien.png)\n![[leorog](www.github.com/leorog)](https://projecteuler.net/profile/leorog.png)\n![[tkovs](www.github.com/tkovs)](https://projecteuler.net/profile/tkovs.png)\n![[mateusjatenee](www.github.com/mateusjatenee)](https://projecteuler.net/profile/mateusjatenee.png)\n![[rafaelcn](www.github.com/rafaelcn)](https://projecteuler.net/profile/rafaelcamposn.png)\n![[a-hilaly](www.github.com/a-hilaly)](https://projecteuler.net/profile/mellatora.png)\n\n| Solver Name          | ProjectEuler NickName |\n| :--------------------| :-------------------- |\n| Manoel Vilela        | lerax                 |\n| João Ferreira        | lubien                |\n| Leonardo Rogerio     | leorog                |\n| Vitor Rodrigues      | tkovs                 |\n| Mateus Guimarães     | mateusjatenee         |\n| Rafael Campos Nunes  | rafaelcamposn         |\n| Lucas Machado        | machad0               |\n| M. A. Hilaly         | mellatora             |\n"
  },
  {
    "path": "STATUS.md",
    "content": "- [X] [Problem041](https://projecteuler.net/problem=41)\n\t- [X] Swift, @luizperes\n- [X] [Problem042](https://projecteuler.net/problem=42)\n\t- [X] Python, @ryukinix\n- [X] [Problem043](https://projecteuler.net/problem=43)\n\t- [X] Swift, @luizperes\n- [X] [Problem044](https://projecteuler.net/problem=44)\n\t- [X] Python, @ryukinix\n- [X] [Problem045](https://projecteuler.net/problem=45)\n\t- [X] Swift, @luizperes\n\t- [X] Python, @ryukinix\n\t- [X] C, @ryukinix and @luizperes\n\t- [X] Go, @ryukinix\n\t- [X] CommonLisp, @ryukinix\n- [X] [Problem046](https://projecteuler.net/problem=46)\n\t- [X] Python, @ryukinix\n- [X] [Problem047](https://projecteuler.net/problem=47)\n\t- [X] Swift, @luizperes\n\t- [X] Python, @ryukinix\n- [X] [Problem048](https://projecteuler.net/problem=48)\n\t- [X] Haskell, @tkovs\n\t- [X] Python, @ryukinix\n\t- [X] CommonLisp, @ryukinix\n\t- [X] Clojure, @ryukinix\n\t- [X] Go, @ryukinix\n\t- [X] C, @ryukinix\n- [X] [Problem049](https://projecteuler.net/problem=49)\n\t- [X] Python, @ryukinix\n- [ ] [Problem050](https://projecteuler.net/problem=50)\n"
  },
  {
    "path": "add",
    "content": "#!/bin/bash\n#\n#\n#\t Copyright @ DestructHub Authors\n#\n#\n\n# usage: add <problem-num> <answer>\n\nif [ -x \"$(command -v md5)\" ]; then\n    alias md5sum='xargs md5 -s'\nelif [ ! -x \"$(command -v md5sum)\" ]; then\n    echo \"None of 'md5' and 'md5sum' cmd line are not found\"\n    echo \"Try install coretuils before using this script\"\n    exit 1\nfi\n\nnum=$(expr $1 + 0)\ndir=\"Problem\"$(printf \"%03d\" $num)\nreadme=\"[The original source of problem](https://projecteuler.net/problem=$num)\"\nhash=$(printf $2 | md5sum)\nmkdir -p $dir\necho \"Created folder $dir.\"\necho $hash > $dir/.hash\necho \"$dir/.hash => $hash\"\necho $readme > $dir/README.md\necho \"Created file $dir/README.md\"\necho \"Added solution template for problem $num of ProjectEuler\"\n"
  },
  {
    "path": "docker-compose.yml",
    "content": "version: \"2\"\n\nservices:\n  async:\n    image: destructhub/project_euler\n    entrypoint: elixir --no-halt stats.exs -s python\n                                           -s commonlisp\n                                           -s ruby\n                                           -s haskell\n                                           -s go\n                                           -s php\n                                           -s elixir\n                                           -s lua\n                                           -s c++\n                                           -s bash\n                                           -s clojure\n                                           -s c\n                                           -s ocaml\n    environment:\n      STATS_POOL_SIZE: #{STATS_POOL_SIZE}\n    volumes:\n      - .:/code\n    security_opt:\n      - seccomp:unconfined\n\n  sync:\n    image: destructhub/project_euler\n    command: python3 stats.py --build -s python\n                                      -s commonlisp\n                                      -s ruby\n                                      -s haskell\n                                      -s go\n                                      -s php\n                                      -s elixir\n                                      -s lua\n                                      -s c++\n                                      -s bash\n                                      -s clojure\n                                      -s c\n                                      -s ocaml\n    volumes:\n      - .:/code\n    security_opt:\n      - seccomp:unconfined\n  diff-sync:\n    image: destructhub/project_euler\n    command: ./test\n    volumes:\n      - .:/code\n    security_opt:\n      - seccomp:unconfined\n"
  },
  {
    "path": "requirements.txt",
    "content": "pandas\nnumpy\nsympy"
  },
  {
    "path": "stats.exs",
    "content": "defmodule Settings do\n  def start_link do\n    Agent.start_link &initial_state/0, name: __MODULE__\n  end\n\n  defp initial_state do\n    env = System.get_env(\"STATS_POOL_SIZE\")\n    parsed = env && case Integer.parse(env) do\n      {int, _} -> int\n      :error -> false\n    end\n    pool_size = parsed || 2 * :erlang.system_info(:schedulers_online)\n\n    %{pool_size: pool_size}\n  end\n\n  def get(key) do\n    Agent.get __MODULE__, &(&1[key])\n  end\n\n  def set(key, value) do\n    Agent.update __MODULE__, & Map.put(&1, key, value)\n  end\nend\n\ndefmodule CLI do\n  @parse_opts [\n    strict: [\n      help: :boolean,\n      search: [:string, :keep],\n      pool_size: :integer,\n      all: :boolean,\n      quiet: :boolean\n    ],\n\n    aliases: [\n      h: :help,\n      s: :search,\n      p: :pool_size,\n      a: :all,\n      q: :quiet\n    ]\n  ]\n\n  def run do\n    OptionParser.parse(System.argv(), @parse_opts)\n    |> process\n  end\n\n  def process({[help: true], _, _}) do\n    help()\n  end\n\n  def process({parsed, _, _}) do\n    all_languages? = Keyword.get parsed, :all, false\n    quiet? = Keyword.get parsed, :quiet, false\n    languages = Keyword.get_values(parsed, :search)\n    pool_size = Keyword.get parsed, :pool_size, Settings.get(:pool_size)\n\n    Settings.set(:pool_size, pool_size)\n\n    if not all_languages? and Enum.empty?(languages) do\n      help()\n    else\n      languages\n      |> Enum.map(& String.downcase(&1))\n      |> Producer.start_link(all_languages?)\n\n      Consumer.start_link()\n      Renderer.start_link(quiet?)\n      Manager.start_link()\n      Manager.start_workers()\n    end\n  end\n\n  defp help do\n    IO.puts \"\"\"\n    TODO: help\n    \"\"\"\n\n    System.halt(0)\n  end\nend\n\ndefmodule Producer do\n  use GenServer\n\n  def start_link(languages, all_languages?) do\n    GenServer.start_link __MODULE__, problems(languages, all_languages?), name: __MODULE__\n  end\n\n  def init(problems) do\n    {:ok, problems}\n  end\n\n  def pop do\n    GenServer.call __MODULE__, :pop\n  end\n\n  def handle_call(:pop, _from, [h | t]) do\n    {:reply, {:ok, h}, t}\n  end\n  def handle_call(:pop, _from, []) do\n    {:reply, :error, []}\n  end\n\n  defp problems(languages, all_languages?) do\n    language_filter = if all_languages? do\n      fn _ -> true end\n    else\n      fn language -> Enum.member?(languages, String.downcase(language)) end\n    end\n\n    File.ls!(\".\")\n    |> Enum.filter(& Regex.match?(~r/Problem\\d{1,3}/, &1))\n    |> Enum.flat_map(fn problem ->\n      File.ls!(problem)\n      |> Enum.filter(& problem |> Path.join(&1) |> File.dir?)\n      |> Enum.filter(language_filter)\n      |> Enum.map(fn lang ->\n        File.ls!(Path.join(problem, lang))\n        |> Enum.reject(& Regex.match?(~r/(.+)\\.out$/, &1))\n        |> Enum.filter(& Regex.match?(~r/^solution_\\d+/, &1))\n        |> Enum.map(fn solution ->\n          {lang, solution}\n        end)\n      end)\n      |> Enum.flat_map(fn solutions ->\n        solutions\n        |> Enum.map(fn {lang, solution} ->\n          {problem, lang, solution}\n        end)\n      end)\n    end)\n  end\nend\n\ndefmodule Manager do\n  use GenServer\n\n  def start_link do\n    workers = span_workers(Settings.get(:pool_size))\n    GenServer.start_link __MODULE__, workers, name: __MODULE__\n  end\n\n  def init(workers) do\n    state =\n      workers\n      |> Enum.reduce({[], %{}}, fn ({id, worker}, {xs, map}) ->\n        {[id | xs], Map.put(map, id, worker)}\n      end)\n\n    {:ok, state}\n  end\n\n  def start_workers do\n    :ok = GenServer.cast __MODULE__, :start_workers\n  end\n\n  def next do\n    :ok = GenServer.cast __MODULE__, :next\n  end\n\n  def finished(id, solution, time) do\n    :ok = GenServer.cast __MODULE__, {:finished, id, solution, time}\n  end\n\n  def handle_cast(:start_workers, {workers, _} = state) do\n    for _ <- workers, do: Manager.next()\n    {:noreply, state}\n  end\n  def handle_cast(:next, {[id | available], workers}) do\n    worker = workers[id]\n\n    case Producer.pop() do\n      {:ok, {problem, _, file} = solution} ->\n        Worker.run(worker, solution)\n        Renderer.set_label(id, problem <> \"/\" <> file)\n\n        {:noreply, {available, workers}}\n      _ ->\n        Renderer.set_label(id, \"Finishing last jobs\")\n\n        workers = Map.delete(workers, id)\n\n        if workers == %{} do\n          Consumer.output()\n        end\n\n        {:noreply, {available, workers}}\n    end\n  end\n  def handle_cast({:finished, id, solution, time}, {available, workers}) do\n    Renderer.delete_label(id)\n    Consumer.consume(solution, time)\n    next()\n    {:noreply, {[id | available], workers}}\n  end\n\n  defp span_workers(n) do\n    for id <- 1..n do\n      {:ok, pid} = Worker.start_link(id)\n      {id, pid}\n    end\n  end\nend\n\ndefmodule Worker do\n  use GenServer\n\n  def start_link(id) do\n    GenServer.start_link __MODULE__, id\n  end\n\n  def init(id) do\n    {:ok, id}\n  end\n\n  def run(worker, solution) do\n    :ok = GenServer.cast worker, {:run, solution}\n  end\n\n  def handle_cast({:run, solution}, id) do\n    {time, _} =\n      :timer.tc(fn ->\n        Runner.run(solution)\n      end)\n\n    Manager.finished(id, solution, time)\n\n    {:noreply, id}\n  end\nend\n\ndefmodule Runner do\n  @build_machine %{\n    \"Python\" => %{\n      cmd: \"python3\",\n      builder: :execute\n    },\n\n    \"Elixir\" => %{\n      cmd: \"elixir\",\n      builder: :execute\n    },\n\n    \"Go\" => %{\n      cmd: \"go run\",\n      builder: :execute\n    },\n\n    \"Clojure\" => %{\n      cmd: \"clojure\",\n      builder: :execute\n    },\n\n    \"CommonLisp\" => %{\n      cmd: \"sbcl --script\",\n      builder: :execute\n    },\n\n    \"Scheme\" => %{\n      cmd: \"racket --script\",\n      builder: :execute\n    },\n\n    \"Racket\" => %{\n      cmd: \"racket --script\",\n      builder: :execute\n    },\n\n    \"Haskell\" => %{\n      cmd: \"runhaskell\",\n      builder: :execute\n    },\n\n    \"C\" => %{\n      cmd: \"gcc -std=c99 -lm\",\n      builder: :build\n    },\n\n    \"C++\" => %{\n      cmd: \"g++ -std=c++0x\",\n      builder: :build\n    },\n\n    \"Lua\" => %{\n      cmd: \"lua\",\n      builder: :execute\n    },\n\n    \"Ruby\" => %{\n      cmd: \"ruby\",\n      builder: :execute\n    },\n\n    \"Bash\" => %{\n      cmd: \"bash\",\n      builder: :execute\n    },\n\n    \"Objective-C\" => %{\n      cmd: \"gcc -Wall -lm -lobjc\",\n      builder: :build\n    },\n\n    \"PHP\" => %{\n      cmd: \"php\",\n      builder: :execute\n    },\n\n    \"Swift\" => %{\n      cmd: \"swift\",\n      builder: :execute\n    }\n  }\n\n  def run({problem, lang, file}) do\n    %{cmd: cmd, builder: builder} = @build_machine[lang]\n    run(builder, cmd, {problem, lang, file})\n  end\n\n  defp run(:build, cmd, {problem, lang, file}) do\n    cd = Path.join([\".\", problem, lang])\n    [cmd | flags] = separate_command_from_flags(cmd)\n\n    %{\"name\" => name} = Regex.named_captures(~r/(?<name>.+)\\.(.+)$/, file)\n    outfile = name <> \".out\"\n\n    System.cmd(cmd, [file, \"-o\", outfile] ++ flags, cd: cd, stderr_to_stdout: true)\n    run(:execute, \"bash -c\", {problem, lang, outfile})\n  end\n  defp run(:execute, cmd, {problem, lang, file}) do\n    cd = Path.join([\".\", problem, lang])\n    [cmd | flags] = separate_command_from_flags(cmd)\n\n    # Compiled files when error\n    if not File.exists?(Path.join(cd, file)) do\n      IO.puts \"\\n#{Path.join(cd, file)} does not exists\"\n      System.halt(1)\n    end\n\n    System.cmd cmd, flags ++ [file], cd: cd, stderr_to_stdout: true\n  end\n\n  # Some commands are like \"sbcl --script\" and I need to split those\n  defp separate_command_from_flags(cmd) do\n    String.split(cmd, \" \")\n  end\nend\n\ndefmodule Consumer do\n  use GenServer\n\n  def start_link do\n    GenServer.start_link __MODULE__, %{}, name: __MODULE__\n  end\n\n  def consume({problem, language, file}, time) do\n    GenServer.cast __MODULE__, {problem, language, file, time}\n  end\n\n  def output do\n    GenServer.cast __MODULE__, :output\n  end\n\n  def handle_cast({problem, language, file, time}, state) do\n    nested = Map.put(state[problem] || %{}, language, {file, time})\n    state = Map.put(state, problem, nested)\n    {:noreply, state}\n  end\n  def handle_cast(:output, state) do\n    Renderer.stop()\n    IO.puts \"Finished all tasks\"\n    IO.puts \"\"\n\n    rows =\n      state\n      |> Map.to_list\n      |> Enum.flat_map(fn {problem, languages} ->\n        languages\n        |> Map.to_list\n        |> Enum.map(fn {lang, {solution, time}} ->\n          {problem, lang, solution, time}\n        end)\n      end)\n      |> Enum.sort_by(&(elem(&1, 3)), &>=/2)\n\n    slow = Enum.take_while(rows, & elem(&1, 3) >= 60_000_000) # 1 min\n\n    if not Enum.empty?(slow) do\n      IO.puts \"The following solutions past our time tolerance of one minute:\"\n\n      for {problem, lang, solution, time} <- slow do\n        time =\n          time / 1_000_000\n          |> Float.round(2)\n          |> Float.to_string\n\n        IO.puts \"\\t#{problem}/#{lang}/#{solution} (#{time}s)\"\n      end\n\n      System.halt(1)\n    end\n\n    rows =\n      rows\n      |> Enum.map(fn {problem, lang, solution, time} ->\n        time =\n          time / 1_000_000\n          |> Float.round(2)\n          |> Float.to_string\n\n        [problem, lang, solution, (time) <> \"s\"]\n      end)\n\n    rows =\n      [[\"Problem\", \"Language\", \"File\", \"Timing\"] | rows]\n\n    col_sizes =\n      rows\n      |> Enum.reduce([0, 0, 0, 0], fn (row, acc) ->\n        row\n        |> Enum.map(&String.length/1)\n        |> Zipper.zip_with(acc, &max/2)\n      end)\n\n    rows\n    |> Enum.map(fn row ->\n      row\n      |> Zipper.zip_with(col_sizes, & String.pad_leading(&1, &2))\n      |> Enum.join(\" | \")\n    end)\n    |> Enum.join(\"\\n\")\n    |> IO.puts\n\n    System.halt(0)\n\n    {:noreply, state}\n  end\nend\n\ndefmodule Zipper do\n  def zip_with(as, bs, _f) when length(as) == 0 or length(bs) == 0 do\n    []\n  end\n  def zip_with([a|as], [b|bs], f) do\n    [f.(a, b) | zip_with(as, bs, f)]\n  end\nend\n\ndefmodule Renderer do\n  @spinner_frames [\n    \".  \",\n    \".. \",\n    \"...\",\n    \" ..\",\n    \"  .\"\n  ]\n\n  use GenServer\n\n  def start_link(quiet?) do\n    if quiet? do\n      GenServer.start_link RendererQuiet, nil, name: __MODULE__\n    else\n      pool_size = Settings.get(:pool_size)\n      labels = for _ <- 1..pool_size, do: nil\n      GenServer.start_link __MODULE__, labels, name: __MODULE__\n    end\n  end\n\n  def init(labels) do\n    {rendered, labels} = render_labels(labels)\n    IO.write rendered\n    {:ok, labels}\n  end\n\n  def render do\n    :ok = GenServer.cast __MODULE__, :render\n  end\n\n  def set_label(id, label) do\n    :ok = GenServer.cast __MODULE__, {:set_label, id, label}\n  end\n\n  def delete_label(id) do\n    :ok = GenServer.cast __MODULE__, {:delete_label, id}\n  end\n\n  def stop do\n    :ok = GenServer.cast __MODULE__, :stop\n  end\n\n  def handle_info(:timeout, state) do\n    render()\n    {:noreply, state}\n  end\n\n  def handle_cast(:render, labels) do\n    IO.write Spinner.erase_lines(Enum.count(labels) - 1)\n    {rendered, labels} = render_labels(labels)\n    IO.write rendered\n    {:noreply, labels, 100}\n  end\n  def handle_cast({:set_label, id, label}, labels) do\n    render()\n    {:noreply, List.update_at(labels, id - 1, fn _ -> {@spinner_frames, label} end)}\n  end\n  def handle_cast({:delete_label, id}, labels) do\n    render()\n    {:noreply, List.update_at(labels, id - 1, fn _ -> nil end)}\n  end\n  def handle_cast(:stop, labels) do\n    IO.write Spinner.erase_lines(Enum.count(labels) - 1)\n    {:stop, \"Done\", labels}\n  end\n\n  defp render_labels(labels) do\n    {lines, labels} =\n      labels\n      |> Enum.map_reduce([], fn\n        (nil, acc) ->\n          {\"Waiting\", acc ++ [nil]}\n\n        ({[], label}, acc) ->\n          frame = hd @spinner_frames\n          text = \"#{frame} #{label}\"\n          {text, acc ++ [{tl(@spinner_frames), label}]}\n\n\n        ({[frame | frames], label}, acc) ->\n          text = \"#{frame} #{label}\"\n          {text, acc ++ [{frames, label}]}\n      end)\n\n    {Enum.join(lines, \"\\n\"), labels}\n  end\nend\n\ndefmodule RendererQuiet do\n  use GenServer\n\n  def init(_) do\n    {:ok, nil}\n  end\n\n  def handle_cast(_, _) do\n    {:noreply, nil}\n  end\nend\n\ndefmodule Spinner do\n  @esc \"\\u001B[\"\n  @erase_line @esc <> \"2K\"\n  @cursor_left @esc <> \"G\"\n\n  def cursor_up, do: cursor_up(1)\n  def cursor_up(count) do\n    @esc <> Integer.to_string(count) <> \"A\"\n  end\n\n  def erase_lines(count) do\n    ups =\n      0..count\n      |> Enum.map(fn _ -> @erase_line end)\n      |> Enum.intersperse(cursor_up())\n      |> Enum.join(\"\")\n\n    ups <> @cursor_left\n  end\nend\n\n\nSettings.start_link()\nCLI.run()\n"
  },
  {
    "path": "stats.py",
    "content": "#!/usr/bin/env python3\n# coding=utf-8\n#\n#   Python Script\n#\n#   Copyleft © Manoel Vilela\n#\n#\n\nimport pandas as pd  # sudo pip install pandas\nimport numpy as np  # sudo pip install numpy\n\nfrom distutils.spawn import find_executable\nfrom optparse import OptionParser\nfrom os import path\nimport os\nimport time\nimport itertools\nimport threading\nimport subprocess\nimport re\nimport sys\nimport hashlib\nimport fileinput\nimport signal\n\n# #\n# Bulding classes\n# #\n\n\nSOLUTION_TIMEOUT_VALUE = 60\n\n\nclass TimeOutController:\n    class TimeOut(Exception):\n        pass\n\n    def __init__(self, sec=SOLUTION_TIMEOUT_VALUE):\n        signal.signal(signal.SIGALRM, self.raise_timeout)\n        signal.alarm(sec)\n\n    def cancel(self):\n        signal.alarm(0)  # disable alarm\n\n    def raise_timeout(self, a, n):\n        raise TimeOutController.TimeOut()\n\n\nclass Checker(object):\n\n    checked = []\n\n    def __init__(self, compiler, path):\n        self.compiler = compiler.split()\n        self.path = os.path.abspath(path)\n        self.check()\n\n    def check(self):\n        binary = self.compiler[0]\n        if binary not in self.checked and not find_executable(binary):\n            raise EnvironmentError(\"{!r} not found. Do you have the compilers?\".format(binary))  # noqa\n        elif binary not in self.checked:\n            self.checked += binary\n\n\nclass Execute(Checker):\n\n    \"\"\"Interactive languages building\"\"\"\n\n    def enter_dir(self):\n        self.old_dir = os.getcwd()\n        os.chdir(path.dirname(self.path))\n\n    def exit_dir(self):\n        os.chdir(self.old_dir)\n\n    def execute(self):\n        self.enter_dir()\n        before = time.time()\n        args = self.compiler\n        args += [self.path]\n        try:\n            toc = TimeOutController()\n            program = subprocess.Popen(args, stdout=subprocess.PIPE)\n            out, _ = program.communicate()\n        except TimeOutController.TimeOut:\n            out = b\"TIMEOUT\"\n            program.kill()\n        finally:\n            toc.cancel()\n        time_passed = time.time() - before\n        self.exit_dir()\n        return out, program.returncode, time_passed\n\n\nclass Build(Checker):\n\n    \"\"\"For compiled languages: C++, C for example\"\"\"\n\n    fout = \"compiled.out\"\n\n    def compile(self):\n        args = [self.compiler[0], self.path, \"-o\", self.output] + self.compiler[1:]\n        program = subprocess.Popen(args, stdout=subprocess.PIPE)\n        return program.wait() == 0\n\n    def execute(self):\n        self.output = path.join(path.dirname(self.path), self.fout)\n        if self.compile():\n            compiled = path.abspath(self.output)\n            program = Execute(\"bash -c\", \"{}\".format(compiled))\n            output = program.execute()\n            os.remove(compiled)\n            return output\n\n        return b\"compiles fails\", EnvironmentError, 0\n\n\nERASE_LINE = \"\\x1b[2K\"\nBUILD_SUPPORT = [\n    \"Python\",      # you need python | pacman -Su python\n    \"Go\",          # you need golang | pacman -Su golang\n    \"Clojure\",     # you need clojure | pacman -Su clojure\n    \"CommonLisp\",  # you need clisp | pacman -Su clisp\n    \"Haskell\",     # you need ghc | pacman -Su ghc\n    \"Lua\",         # you need lua | pacman -Su lua5.3\n    \"Ruby\",        # you need ruby | pacman -Su ruby\n    \"C\",           # you need gcc | pacman -Su gcc\n    \"C++\",         # you need | pacman -Su g++\n    \"Elixir\",      # you need elixir | pacman -Su elixir\n    \"PHP\",         # you need php | pacman -Su php\n    # \"Swift\",       # you need swift | yaourt -Su swift\n    # \"Objective-C\",  # you need gcc-objc | pacman -Su gcc-objc\n    \"Scheme\",\n    \"Racket\",\n    \"Bash\",        # hmm, i think you already have this\n    \"OCaml\",\n]\n\nBUILD_FILES = [\"stats.py\", \"stats.exs\", \"test\", \"add\"]\n\nBUILD_MACHINE = {\n\n    \"Python\": {\n        \"cmdline\": \"python3\",\n        \"builder\": Execute\n    },\n\n    \"Go\": {\n        \"cmdline\": \"go run\",\n        \"builder\": Execute\n    },\n\n    \"Clojure\": {\n        \"cmdline\": \"clojure\",\n        \"builder\": Execute\n    },\n\n    \"CommonLisp\": {\n        \"cmdline\": \"sbcl --script\",\n        \"builder\": Execute\n    },\n\n    \"Racket\": {\n        \"cmdline\": \"racket --script\",\n        \"builder\": Execute\n    },\n\n    \"Scheme\": {\n        \"cmdline\": \"racket --script\",\n        \"builder\": Execute\n    },\n\n    \"Haskell\": {\n        \"cmdline\": \"runhaskell\",\n        \"builder\": Execute\n    },\n\n    \"C\": {\n        \"cmdline\": \"gcc -std=c99 -lm\",\n        \"builder\": Build\n    },\n\n    \"C++\": {\n        \"cmdline\": \"g++ -std=c++0x\",\n        \"builder\": Build\n    },\n\n    \"Lua\": {\n        \"cmdline\": \"lua\",\n        \"builder\": Execute\n    },\n\n    \"Ruby\": {\n        \"cmdline\": \"ruby\",\n        \"builder\": Execute\n    },\n\n    \"Bash\": {\n        \"cmdline\": \"bash\",\n        \"builder\": Execute\n    },\n\n    \"Elixir\": {\n        \"cmdline\": \"elixir\",\n        \"builder\": Execute\n    },\n\n    \"Objective-C\": {\n        \"cmdline\": \"gcc -Wall -lm -lobjc\",\n        \"builder\": Build\n    },\n\n    \"PHP\": {\n        \"cmdline\": \"php\",\n        \"builder\": Execute\n    },\n\n    \"Swift\": {\n        \"cmdline\": \"swift\",\n        \"builder\": Execute\n    },\n\n    \"OCaml\" : {\n        \"cmdline\" : \"ocaml\",\n        \"builder\": Execute,\n    }\n\n}\n\n\n# CLI INTERFACE\n# -l (list languages with solutions)\n# -c (do count solutions)\n# -p (print the path)\n# -a all languages selected\n# -s language (search)\n# -b (build)\n\n# Examples of usage:\n# python stats.py --list\n# python stats.py --list --count\n# python stats.py --all --path\n# python stats.py --all --count\n# python stats.py -s Python -s Haskell -c\n\n\n# #\n# Cmdline parsing definitions\n# #\n\ndef _callback(option, opt_str, value, parser):\n    \"\"\"\n    Used to parse several arguments for one option, knowing that arguments\n    never start with a `-` and `--`\n    \"\"\"\n    assert value is None\n    value = []\n    for arg in parser.rargs:\n        # stop on --foo like options\n        if arg[:2] == \"--\" and len(arg) > 2:\n            break\n        if arg[:1] == \"-\" and len(arg) > 1:\n            break\n        value.append(arg)\n    del parser.rargs[:len(value)]\n    setattr(parser.values, option.dest, value)\n\nparser = OptionParser()\n\nparser.add_option(\n    \"-l\", \"--list\",\n    help=\"Print a list of the languages whose have solutions\",\n    dest=\"list\",\n    action=\"store_true\",\n    default=False,\n)\n\nparser.add_option(\n    \"-s\", \"--search\",\n    help=\"Choose the languages for print information\",\n    dest=\"search\",\n    action=\"append\",\n    default=[],\n    nargs=1,\n)\n\nparser.add_option(\n    \"-f\", \"--files\",\n    help=\"Receive a list of file paths to build them\",\n    dest=\"files\",\n    action=\"callback\",\n    callback=_callback,\n)\n\nparser.add_option(\n    \"-c\", \"--count\",\n    help=\"Print the count of each solution\",\n    dest=\"count\",\n    action=\"store_true\",\n    default=False,\n)\n\nparser.add_option(\n    \"-b\", \"--build\",\n    help=\"Execute the solutions and print each solution\",\n    dest=\"build\",\n    action=\"store_true\",\n    default=False,\n)\n\nparser.add_option(\n    \"-p\", \"--path\",\n    help=\"Print the path of each solution\",\n    dest=\"path\",\n    action=\"store_true\",\n    default=False,\n)\n\nparser.add_option(\n    \"-a\", \"--all\",\n    help=\"Select all the languages for search\",\n    dest=\"all\",\n    action=\"store_true\",\n    default=False,\n)\n\n\nparser.add_option(\n    \"-m\", \"--blame\",\n    help=\"Show the slowest solutions that needs help\",\n    dest=\"blame\",\n    action=\"store_true\",\n    default=False,\n)\n\nparser.add_option(\n    \"-g\", \"--graph\",\n    help=\"Make a cool graph with the final DataFrame data\",\n    dest=\"graph\",\n    action=\"store_true\",\n    default=False,\n\n)\n\nparser.usage = \"%prog [-s language] [-al] [-cpb] [--blame] [--files] [-g]\"\n\n\ndef walk_problems(root=\".\"):\n    \"\"\"\n    Function: walk_problems\n    Summary: Walking for repository to get each content of ProblemXXX\n    Examples: Uniq behavior\n    Returns: list of 3-uples of strings <list (\"1\", \"2\", \"3\"), ...>\n    \"\"\"\n    problem = re.compile(\"./Problem[0-9]{3}/\")\n    problems = []\n    for x in os.walk(root):\n        if problem.match(x[0]) and \"pycache\" not in x[0]:\n            problems.append(x)\n    return problems\n\n\ndef read_hashfile(fpath):\n    \"\"\"Read .hash based on fpath and clean the weird chars\"\"\"\n    return open(fpath).read().strip(' -\\n')\n\n\ndef get_problem_hashes():\n    \"\"\"\n    Function: get_problem_hashes\n    Summary: Walking from each problem and return a tuple\n            (problem_name, hash_content)\n    Returns: list of tuples <problem_name: string, hash_content: string>\n    \"\"\"\n    hash_pattern = re.compile(\"./Problem[0-9]{3}\")\n    hashes = {}\n    for file_tuple in os.walk(\".\"):\n        if hash_pattern.match(file_tuple[0]) and \".hash\" in file_tuple[-1]:\n            problem = file_tuple[0]\n            hash_path = path.join(problem, '.hash')\n            hash_content = read_hashfile(hash_path)\n            hashes[problem.strip('./')] = hash_content\n\n    return hashes\n\n\ndef digest_answer(answer):\n    clean_answer = answer.strip(' \\n')\n    return hashlib.md5(clean_answer.encode('utf-8')).hexdigest()\n\n\ndef search_language(query, languages):\n    \"\"\"\n    Function: search_language\n    Summary: Search for languages based on regex\n    Examples:\n        >>> search_language([\"C\"], [\"C\", \"C++\", \"Python\"])\n            [\"C\", \"C++\"]\n    Attributes:\n        @param (query): list of languages for search\n        @param (languages): collections of languages normalized\n    Returns: list of results as strings <list (string)>\n    \"\"\"\n\n    return set(query) & set(languages)\n\n\ndef split_problem_language(path):\n    \"\"\"\n    Function: split_problem_language\n    Summary: Get a path and split into problem and language\n    Examples:\n        >>> split_problem_language(\"./Problem001/Python\")\n        [\"Problem001\", \"Python]\n\n    Attributes:\n        @param (path): path like ./Folder/Language\n    Returns: [Problem, Language] <(string, string)>\n    \"\"\"\n    return path.strip(\"./\").split(\"/\")\n\n\ndef is_solution(string):\n    solution = re.compile(\"solution_+(?!out)\")\n    return solution.match(string)\n\n\ndef parse_solutions(problems):\n    \"\"\"\n    Function: parse_solutions\n    Summary: Organize the solutions of problems\n    Examples: <NONE>\n    Attributes:\n        @param (problems): os.walk functions output\n    Returns: problem:lang -> [solutions] <dict>\n    \"\"\"\n    map_solutions = {}\n    for problem_path, dirs, files in problems:\n        problem, lang = split_problem_language(problem_path)\n        map_solutions.setdefault(problem, {}).setdefault(lang, [])\n        for file in files:\n            if is_solution(file):\n                map_solutions[problem][lang].append(file)\n\n    return map_solutions\n\n\ndef load_dataframe():\n    \"\"\"\n    Function: load_dataframe\n    Summary: Load all solutions of repository at dataframe\n    Examples:\n        >>> df = load_dataframe()[]\n        >>> py = df[\"Python\"]\n                            Python\n            Problem001      [solution_1.py, solution_2.py]\n            Problem002                      [solution_1.py]\n            Problem003                      [solution_1.py]\n            Problem004                      [solution_1.py]\n\n        If you observe: (index + column_name) <- list_solutions -> filepaths!\n    Returns: pd.DataFrame\n    \"\"\"\n    return pd.DataFrame.from_dict(parse_solutions(walk_problems()), \"index\")\n\n\ndef solutions_paths(df, from_files=None):\n    \"\"\"\n    Function: load_filepaths\n    Summary: Get each filepath of solutions based on pd.DataFrame\n    Examples:\n        >>> df = load_dataframe()\n        >>> py = df[[\"CommonLisp\"]]\n        >>> load_filepaths(py)\n        [\"...\"]\n\n    Attributes:\n        @param (df): pd.DataFrame\n    Returns: list of file paths\n    \"\"\"\n    paths = []\n    if from_files:\n        for problem, lang, s in from_files:\n            paths.append((lang, path.join(problem, lang, s)))\n        return paths\n    for column in df.columns:\n        solutions = df[df[column].notnull()][column]\n        lang = solutions.name\n        problems = solutions.index\n        for problem in problems:\n            p = ((lang, path.join(problem, lang, s))\n                 for s in solutions[problem])\n            paths.extend(p)\n    return paths\n\n\ndef count_solutions(df, solutions=True):\n    \"\"\"\n    Function: count_solutions\n    Summary: Count the number of solutions of each problem and language\n    Examples: Iam tired...\n    Attributes:\n        @param (df): pd.DataFrame\n    Returns: pd.DataFrame\n    \"\"\"\n    df = df.dropna(axis=1, how='all')  # columns all nan\n    df = df.dropna(how='all')  # rows all nan\n    df_ = pd.DataFrame()\n    df_ = df.applymap(lambda x: len(x) if x is not np.NAN else 0)\n\n    if len(df.columns) > 1 and solutions:\n        df_[\"Solutions\"] = df_[df_.columns].apply(tuple, axis=1).map(sum)\n        df_ = df_[df_.Solutions > 0]\n\n    return df_\n\ndef handle_files(files):\n    \"\"\"\n    Analyse files to return two lists :\n        - solutions : list of files as 3-uple of strings that are more likely solutions\n          on the format: (ProblemXXX, 'Lang', 'solution_x.y')\n        - build_files : list of files that are more build files (stats.py,\n          stats.exs, ...)\n    \"\"\"\n    solutions = []\n    build_files = []\n    for f in files:\n        if f.count(\"/\") == 2:\n            solutions.append(tuple(f.split(\"/\")))\n        elif f.count(\"/\") == 1 and f.startswith(\"./\"):\n            dic = parse_solutions(walk_problems(f))\n            problem = list(dic.keys())[0]\n            for lang in dic[problem]:\n                for solution in dic[problem][lang]:\n                    solutions.append((problem, lang, solution))\n        elif f.count(\"/\") == 0 and f in BUILD_FILES:\n            build_files.append(f)\n    return list(filter(lambda x: is_solution(x[2]), solutions)), build_files\n\n# docs?\ndef spinner(control):\n    animation = r\"⣾⣽⣻⢿⡿⣟⣯\"\n    sys.stdout.write(3 * \" \")\n    for c in itertools.cycle(animation):\n        current_time = time.time() - control.time\n        message = \"(\" + c + \")\" + \" t: {:.2f}\".format(current_time)\n        sys.stdout.write(message)\n        time.sleep(0.1)\n        sys.stdout.write(len(message) * \"\\010\")\n        sys.stdout.flush()\n        if control.done:\n            break\n\n\n# need docs\ndef choose_builder(lang, fpath):\n    try:\n        if lang in BUILD_MACHINE:\n            builder = BUILD_MACHINE[lang]['builder']\n            cmdline = BUILD_MACHINE[lang]['cmdline']\n            b = builder(cmdline, fpath)\n        else:\n            raise Exception(\"Builder not configured for {!r}! Call the developer\".format(lang))  # noqa\n    except Exception as e:\n        print(\"\\n\", e)\n        os._exit(1)\n    finally:\n        return b\n\n\n# need docs\ndef execute_builder(b):\n    out, err, t = b.execute()\n    answer = out.decode(\"utf-8\").strip(\"\\n\")\n    if err:\n        print(err)\n        os._exit(1)\n    sys.stdout.write(ERASE_LINE)\n    building = \"\\rBuilt {}: Answer: {}: {:.2f}s\\n\".format(b.path, answer, t)\n    sys.stdout.write(building)\n    sys.stdout.flush()\n\n    return answer, t\n\n# need docs\ndef build_result(df, ignore_errors=False, blame=False, only=()):\n\n    class Control:  # to handle the spinner time at each solution\n        time = time.time()\n        done = False\n\n    control = Control()\n    columns = [\"Problem\", \"Language\", \"Time\", \"Answer\", \"Correct\"]\n    data = []\n    hashes = get_problem_hashes()\n    spin_thread = threading.Thread(target=spinner, args=(control,))\n    spin_thread.start()\n    _problems = only if only else solutions_paths(df)\n    for lang, spath in _problems:\n        if \"slow\" in spath and not blame:\n            sys.stdout.write(\"\\rIgnored {}: bad solution (slow).\\n\".format(spath))  # noqa\n            continue\n\n        if lang in BUILD_SUPPORT:\n            sys.stdout.write(\"@Building next {}: {}\".format(spath, 12 * ' '))\n            b = choose_builder(lang, spath)\n            problem = split_problem_language(spath)[0]\n            outtimed = False\n            correct = False\n            control.time = time.time()\n            answer, t = execute_builder(b)\n            outtimed = answer == \"TIMEOUT\"\n            if (not outtimed) and problem in hashes:\n                answer_hash = digest_answer(answer)\n                correct = answer_hash == hashes[problem]\n\n            data.append([problem, lang, t, answer, correct])\n\n        elif not ignore_errors:\n            sys.stdout.write(\"\\r{}: Don't have support yet for {!r}!\\n\".format(spath, lang))  # noqa\n    sys.stdout.write(\"\\r\\n\")\n    sys.stdout.flush()\n    control.done = True\n    spin_thread.join()\n    final_df = pd.DataFrame(data, columns=columns)\n    return final_df.sort_values(\"Problem\")\n\n\ndef list_by_count(df):\n    df_ = count_solutions(df, solutions=False)\n    count = [sum(df_[lang]) for lang in df_.columns]\n    table = pd.DataFrame(count, index=df_.columns,\n                         columns=[\"Solutions\"])\n    return table.sort_values(\"Solutions\", ascending=False)\n\n\ndef blame_solutions(df):\n    df_ = df.applymap(\n        lambda solutions:\n        [x for x in solutions if 'slow' in x] or np.NAN\n        if solutions is not np.NAN else np.NAN\n    )\n\n    return df_\n\n\n# Problem015 -> 15\ndef remove_problem(df):\n    df_ = df\n    df_.Problem = df.Problem.map(lambda x: x.replace(\"Problem\", \"\").strip('0'))\n    return df_\n\n\ndef build_per_language(df):\n    index = df.Problem.map(int).max()\n    languages = set(df.Language)\n\n    data = {lang: np.full(index, np.nan) for lang in languages}\n    for _, row in df.iterrows():\n        data[row['Language']][int(row['Problem']) - 1] = row['Time']\n\n    df_ = pd.DataFrame(data, index=range(1, index + 1)).dropna(how='all')\n    df_.index.name = 'Problems'\n\n    return df_\n\n\ndef header(opts):\n    return \"Command: \" + ' '.join([x.capitalize() for x in opts if opts[x]])\n\n\ndef handle_graph(df, options):\n    import matplotlib.pyplot as plt\n    import matplotlib\n    cicle_colors = itertools.cycle(['b', 'r', 'g', 'y', 'k'])\n    my_colors = itertools.islice(cicle_colors, None, len(df))\n    matplotlib.style.use('ggplot')\n    if options.build:\n        df = build_per_language(remove_problem(df))\n        df.plot()\n    elif options.list and options.count:\n        # Make a list by cycling through the colors you care about\n        # to match the length of your data.\n        df.plot(kind='barh', stacked=True, color=list(my_colors))\n    plt.show()\n\n\ndef handle_options(options):\n    df = load_dataframe()\n    langs = {x.lower(): x for x in df.columns}\n    query = [x.lower() for x in options.search]\n    uncommited_solutions = []\n    uncommited_core_files = []\n    tbsolutions = []\n    count_ws = 0  # wrong solutions\n\n    langs_selected = [langs[x] for x in search_language(query, langs)]\n\n    if options.files:\n        uncommited_solutions, uncommited_core_files = handle_files(options.files)\n        if not uncommited_solutions and uncommited_core_files:\n            sys.stdout.write(\n                \"\\rForced to exit: No solutions to build\\nChanged_core_files : \\n {}\".format(\n                uncommited_core_files)\n            )\n            sys.exit(0)\n        tbsolutions = solutions_paths(df, from_files=uncommited_solutions)\n\n    if options.all:\n        langs_selected = [x for x in langs.values()]\n\n    if options.blame:\n        df = blame_solutions(df)\n\n    if options.list:\n        if options.count:\n            df = list_by_count(df)\n\n        elif options.path:\n            langs_selected = [x for x in langs.values()]\n\n        else:\n            df = '\\n'.join(sorted(df.dropna(axis=1, how='all').columns))\n    else:\n        df = df[langs_selected]\n\n    if options.count and not options.list:\n        df = count_solutions(df)\n\n    elif options.build:\n        try:\n            df = build_result(df[langs_selected],\n                              options.all,\n                              options.blame,\n                              only=tbsolutions)\n            count_ws = list(df[\"Correct\"]).count(False)\n            correct_ratio = 1 - count_ws/len(df) if count_ws else 1\n\n            sys.stdout.write(\n                \"Correct solutions ratio : {0}% \\n\".format(correct_ratio * 100)\n            )\n        except(SystemExit, KeyboardInterrupt):\n            os._exit(1)\n\n    elif options.path:\n        df = '\\n'.join(path for _, path in solutions_paths(df[langs_selected]))\n\n    pd.set_option(\"display.max_rows\", len(df))\n    print(df)\n\n    if count_ws:\n        sys.exit(1)\n\n    if options.graph:\n        handle_graph(df, options)\n\n\ndef main():\n    options, _ = parser.parse_args()\n\n    if not any(options.__dict__.values()):\n        parser.print_help()\n        os._exit(0)\n\n    print(header(options.__dict__))\n    handle_options(options)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "test",
    "content": "#!/bin/bash\n\n\nif [ \"$TRAVIS_PULL_REQUEST\" = \"false\" ]; then\n    if [ \"$TRAVIS_BRANCH\" = \"master\" ]; then\n        elixir --no-halt stats.exs -s python \\\n                                   -s commonlisp \\\n                                   -s ruby \\\n                                   -s haskell \\\n                                   -s go \\\n                                   -s php \\\n                                   -s elixir \\\n                                   -s lua \\\n                                   -s c++ \\\n                                   -s bash \\\n                                   -s clojure \\\n                                   -s c \\\n                                   -q\n        exit $?\n    else # Cancel build if travis is building pushed version\n        echo \"Skipped this build\"\n        exit 0\n    fi\nfi\n\n# only return the arguments which are files that exists on the filesystem\nfunction filter_exists {\n    while read line; do\n        [[ -f \"$line\" ]] && echo $line\n    done\n}\n\nfunction diff_files () {\n    # Return uncommited changes file names\n    git diff origin/master --name-only | filter_exists\n}\n\nfunction staged_files () {\n    # Return staged file names\n    git diff --cached --name-only | filter_exists\n}\n\nfunction build_commited () {\n    # Build only commited changed\n    diff_files | xargs python3 stats.py --build --files\n}\n\nfunction build_staged () {\n    # Build only staged files\n    #NOTE: Run before opening PR on your machine, make sure\n    #      `git add .`\n    staged_files | xargs python3 stats.py --build --files\n}\n\nfunction main () {\n    status=0\n    mode=$1\n    target=$2\n    if [ \"$mode\" = \"\" ]; then\n        build_commited\n        status=$?\n    elif [ \"$mode\" = \"async\" ]; then\n        #TODO: stats.exs --build --files\n        echo \"Not Implemented\"\n        status=1\n    elif [ \"$mode\" = \"sync\" ]; then\n        if [ \"$target\" = \"diff\" ]; then\n            build_commited\n            status=$?\n        elif [ \"$target\" = \"staged\" ]; then\n            build_staged\n            status=$?\n        fi\n    else\n        echo \"Usage : $0 [sync|async] [diff|staged]\"\n        status=1\n    fi\n    exit $status\n}\n\nmain $@\n"
  }
]