diff --git a/default_arg.c b/c/default_arg.c
similarity index 100%
rename from default_arg.c
rename to c/default_arg.c
diff --git a/machine_learning/mlclass-ex1-008/ex1.pdf b/machine_learning/mlclass-ex1-008/ex1.pdf
new file mode 100644
index 0000000..16b8de1
Binary files /dev/null and b/machine_learning/mlclass-ex1-008/ex1.pdf differ
diff --git a/machine_learning/mlclass-ex1-008/mlclass-ex1/computeCost.m b/machine_learning/mlclass-ex1-008/mlclass-ex1/computeCost.m
new file mode 100644
index 0000000..8cc8323
--- /dev/null
+++ b/machine_learning/mlclass-ex1-008/mlclass-ex1/computeCost.m
@@ -0,0 +1,22 @@
+function J = computeCost(X, y, theta)
+%COMPUTECOST Compute cost for linear regression
+% J = COMPUTECOST(X, y, theta) computes the cost of using theta as the
+% parameter for linear regression to fit the data points in X and y
+
+% Initialize some useful values
+m = length(y); % number of training examples
+
+% You need to return the following variables correctly
+J = 0;
+
+% ====================== YOUR CODE HERE ======================
+% Instructions: Compute the cost of a particular choice of theta
+% You should set J to the cost.
+
+%X = [ones(m,1) X];
+J = sum( (X*theta - y) .^ 2 ) / (2*m);
+
+
+% =========================================================================
+
+end
diff --git a/machine_learning/mlclass-ex1-008/mlclass-ex1/computeCostMulti.m b/machine_learning/mlclass-ex1-008/mlclass-ex1/computeCostMulti.m
new file mode 100644
index 0000000..9c2c881
--- /dev/null
+++ b/machine_learning/mlclass-ex1-008/mlclass-ex1/computeCostMulti.m
@@ -0,0 +1,22 @@
+function J = computeCostMulti(X, y, theta)
+%COMPUTECOSTMULTI Compute cost for linear regression with multiple variables
+% J = COMPUTECOSTMULTI(X, y, theta) computes the cost of using theta as the
+% parameter for linear regression to fit the data points in X and y
+
+% Initialize some useful values
+m = length(y); % number of training examples
+
+% You need to return the following variables correctly
+J = 0;
+
+% ====================== YOUR CODE HERE ======================
+% Instructions: Compute the cost of a particular choice of theta
+% You should set J to the cost.
+
+
+J = sum( (X*theta - y) .^ 2 ) / (2*m);
+
+
+% =========================================================================
+
+end
diff --git a/machine_learning/mlclass-ex1-008/mlclass-ex1/ex1.m b/machine_learning/mlclass-ex1-008/mlclass-ex1/ex1.m
new file mode 100644
index 0000000..33a0a0c
--- /dev/null
+++ b/machine_learning/mlclass-ex1-008/mlclass-ex1/ex1.m
@@ -0,0 +1,122 @@
+%% Machine Learning Online Class - Exercise 1: Linear Regression
+
+% Instructions
+% ------------
+%
+% This file contains code that helps you get started on the
+% linear exercise. You will need to complete the following functions
+% in this exericse:
+%
+% warmUpExercise.m
+% plotData.m
+% gradientDescent.m
+% computeCost.m
+% gradientDescentMulti.m
+% computeCostMulti.m
+% featureNormalize.m
+% normalEqn.m
+%
+% For this exercise, you will not need to change any code in this file,
+% or any other files other than those mentioned above.
+%
+% x refers to the population size in 10,000s
+% y refers to the profit in $10,000s
+%
+
+%% Initialization
+clear ; close all; clc
+
+%% ==================== Part 1: Basic Function ====================
+% Complete warmUpExercise.m
+fprintf('Running warmUpExercise ... \n');
+fprintf('5x5 Identity Matrix: \n');
+warmUpExercise()
+
+fprintf('Program paused. Press enter to continue.\n');
+pause;
+
+
+%% ======================= Part 2: Plotting =======================
+fprintf('Plotting Data ...\n')
+data = load('ex1data1.txt');
+X = data(:, 1); y = data(:, 2);
+m = length(y); % number of training examples
+
+% Plot Data
+% Note: You have to complete the code in plotData.m
+plotData(X, y);
+
+fprintf('Program paused. Press enter to continue.\n');
+pause;
+
+%% =================== Part 3: Gradient descent ===================
+fprintf('Running Gradient Descent ...\n')
+
+X = [ones(m, 1), data(:,1)]; % Add a column of ones to x
+theta = zeros(2, 1); % initialize fitting parameters
+
+% Some gradient descent settings
+iterations = 1500;
+alpha = 0.01;
+
+% compute and display initial cost
+computeCost(X, y, theta)
+
+% run gradient descent
+theta = gradientDescent(X, y, theta, alpha, iterations);
+
+% print theta to screen
+fprintf('Theta found by gradient descent: ');
+fprintf('%f %f \n', theta(1), theta(2));
+
+% Plot the linear fit
+hold on; % keep previous plot visible
+plot(X(:,2), X*theta, '-')
+legend('Training data', 'Linear regression')
+hold off % don't overlay any more plots on this figure
+
+% Predict values for population sizes of 35,000 and 70,000
+predict1 = [1, 3.5] *theta;
+fprintf('For population = 35,000, we predict a profit of %f\n',...
+ predict1*10000);
+predict2 = [1, 7] * theta;
+fprintf('For population = 70,000, we predict a profit of %f\n',...
+ predict2*10000);
+
+fprintf('Program paused. Press enter to continue.\n');
+pause;
+
+%% ============= Part 4: Visualizing J(theta_0, theta_1) =============
+fprintf('Visualizing J(theta_0, theta_1) ...\n')
+
+% Grid over which we will calculate J
+theta0_vals = linspace(-10, 10, 100);
+theta1_vals = linspace(-1, 4, 100);
+
+% initialize J_vals to a matrix of 0's
+J_vals = zeros(length(theta0_vals), length(theta1_vals));
+
+% Fill out J_vals
+for i = 1:length(theta0_vals)
+ for j = 1:length(theta1_vals)
+ t = [theta0_vals(i); theta1_vals(j)];
+ J_vals(i,j) = computeCost(X, y, t);
+ end
+end
+
+
+% Because of the way meshgrids work in the surf command, we need to
+% transpose J_vals before calling surf, or else the axes will be flipped
+J_vals = J_vals';
+% Surface plot
+figure;
+surf(theta0_vals, theta1_vals, J_vals)
+xlabel('\theta_0'); ylabel('\theta_1');
+
+% Contour plot
+figure;
+% Plot J_vals as 15 contours spaced logarithmically between 0.01 and 100
+contour(theta0_vals, theta1_vals, J_vals, logspace(-2, 3, 20))
+xlabel('\theta_0'); ylabel('\theta_1');
+hold on;
+plot(theta(1), theta(2), 'rx', 'MarkerSize', 10, 'LineWidth', 2);
diff --git a/machine_learning/mlclass-ex1-008/mlclass-ex1/ex1_multi.m b/machine_learning/mlclass-ex1-008/mlclass-ex1/ex1_multi.m
new file mode 100644
index 0000000..f733012
--- /dev/null
+++ b/machine_learning/mlclass-ex1-008/mlclass-ex1/ex1_multi.m
@@ -0,0 +1,159 @@
+%% Machine Learning Online Class
+% Exercise 1: Linear regression with multiple variables
+%
+% Instructions
+% ------------
+%
+% This file contains code that helps you get started on the
+% linear regression exercise.
+%
+% You will need to complete the following functions in this
+% exericse:
+%
+% warmUpExercise.m
+% plotData.m
+% gradientDescent.m
+% computeCost.m
+% gradientDescentMulti.m
+% computeCostMulti.m
+% featureNormalize.m
+% normalEqn.m
+%
+% For this part of the exercise, you will need to change some
+% parts of the code below for various experiments (e.g., changing
+% learning rates).
+%
+
+%% Initialization
+
+%% ================ Part 1: Feature Normalization ================
+
+%% Clear and Close Figures
+clear ; close all; clc
+
+fprintf('Loading data ...\n');
+
+%% Load Data
+data = load('ex1data2.txt');
+X = data(:, 1:2);
+y = data(:, 3);
+m = length(y);
+
+% Print out some data points
+fprintf('First 10 examples from the dataset: \n');
+fprintf(' x = [%.0f %.0f], y = %.0f \n', [X(1:10,:) y(1:10,:)]');
+
+fprintf('Program paused. Press enter to continue.\n');
+pause;
+
+% Scale features and set them to zero mean
+fprintf('Normalizing Features ...\n');
+
+[X mu sigma] = featureNormalize(X);
+
+% Add intercept term to X
+X = [ones(m, 1) X];
+
+
+%% ================ Part 2: Gradient Descent ================
+
+% ====================== YOUR CODE HERE ======================
+% Instructions: We have provided you with the following starter
+% code that runs gradient descent with a particular
+% learning rate (alpha).
+%
+% Your task is to first make sure that your functions -
+% computeCost and gradientDescent already work with
+% this starter code and support multiple variables.
+%
+% After that, try running gradient descent with
+% different values of alpha and see which one gives
+% you the best result.
+%
+% Finally, you should complete the code at the end
+% to predict the price of a 1650 sq-ft, 3 br house.
+%
+% Hint: By using the 'hold on' command, you can plot multiple
+% graphs on the same figure.
+%
+% Hint: At prediction, make sure you do the same feature normalization.
+%
+
+fprintf('Running gradient descent ...\n');
+
+% Choose some alpha value
+alpha = 0.01;
+num_iters = 400;
+
+% Init Theta and Run Gradient Descent
+theta = zeros(3, 1);
+[theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters);
+
+% Plot the convergence graph
+figure;
+plot(1:numel(J_history), J_history, '-b', 'LineWidth', 2);
+xlabel('Number of iterations');
+ylabel('Cost J');
+
+% Display gradient descent's result
+fprintf('Theta computed from gradient descent: \n');
+fprintf(' %f \n', theta);
+fprintf('\n');
+
+% Estimate the price of a 1650 sq-ft, 3 br house
+% ====================== YOUR CODE HERE ======================
+% Recall that the first column of X is all-ones. Thus, it does
+% not need to be normalized.
+price = 0; % You should change this
+
+
+% ============================================================
+
+fprintf(['Predicted price of a 1650 sq-ft, 3 br house ' ...
+ '(using gradient descent):\n $%f\n'], price);
+
+fprintf('Program paused. Press enter to continue.\n');
+pause;
+
+%% ================ Part 3: Normal Equations ================
+
+fprintf('Solving with normal equations...\n');
+
+% ====================== YOUR CODE HERE ======================
+% Instructions: The following code computes the closed form
+% solution for linear regression using the normal
+% equations. You should complete the code in
+% normalEqn.m
+%
+% After doing so, you should complete this code
+% to predict the price of a 1650 sq-ft, 3 br house.
+%
+
+%% Load Data
+data = csvread('ex1data2.txt');
+X = data(:, 1:2);
+y = data(:, 3);
+m = length(y);
+
+% Add intercept term to X
+X = [ones(m, 1) X];
+
+% Calculate the parameters from the normal equation
+theta = normalEqn(X, y);
+
+% Display normal equation's result
+fprintf('Theta computed from the normal equations: \n');
+fprintf(' %f \n', theta);
+fprintf('\n');
+
+
+% Estimate the price of a 1650 sq-ft, 3 br house
+% ====================== YOUR CODE HERE ======================
+price = 0; % You should change this
+
+
+% ============================================================
+
+fprintf(['Predicted price of a 1650 sq-ft, 3 br house ' ...
+ '(using normal equations):\n $%f\n'], price);
+
diff --git a/machine_learning/mlclass-ex1-008/mlclass-ex1/ex1data1.txt b/machine_learning/mlclass-ex1-008/mlclass-ex1/ex1data1.txt
new file mode 100644
index 0000000..0f88ccb
--- /dev/null
+++ b/machine_learning/mlclass-ex1-008/mlclass-ex1/ex1data1.txt
@@ -0,0 +1,97 @@
+6.1101,17.592
+5.5277,9.1302
+8.5186,13.662
+7.0032,11.854
+5.8598,6.8233
+8.3829,11.886
+7.4764,4.3483
+8.5781,12
+6.4862,6.5987
+5.0546,3.8166
+5.7107,3.2522
+14.164,15.505
+5.734,3.1551
+8.4084,7.2258
+5.6407,0.71618
+5.3794,3.5129
+6.3654,5.3048
+5.1301,0.56077
+6.4296,3.6518
+7.0708,5.3893
+6.1891,3.1386
+20.27,21.767
+5.4901,4.263
+6.3261,5.1875
+5.5649,3.0825
+18.945,22.638
+12.828,13.501
+10.957,7.0467
+13.176,14.692
+22.203,24.147
+5.2524,-1.22
+6.5894,5.9966
+9.2482,12.134
+5.8918,1.8495
+8.2111,6.5426
+7.9334,4.5623
+8.0959,4.1164
+5.6063,3.3928
+12.836,10.117
+6.3534,5.4974
+5.4069,0.55657
+6.8825,3.9115
+11.708,5.3854
+5.7737,2.4406
+7.8247,6.7318
+7.0931,1.0463
+5.0702,5.1337
+5.8014,1.844
+11.7,8.0043
+5.5416,1.0179
+7.5402,6.7504
+5.3077,1.8396
+7.4239,4.2885
+7.6031,4.9981
+6.3328,1.4233
+6.3589,-1.4211
+6.2742,2.4756
+5.6397,4.6042
+9.3102,3.9624
+9.4536,5.4141
+8.8254,5.1694
+5.1793,-0.74279
+21.279,17.929
+14.908,12.054
+18.959,17.054
+7.2182,4.8852
+8.2951,5.7442
+10.236,7.7754
+5.4994,1.0173
+20.341,20.992
+10.136,6.6799
+7.3345,4.0259
+6.0062,1.2784
+7.2259,3.3411
+5.0269,-2.6807
+6.5479,0.29678
+7.5386,3.8845
+5.0365,5.7014
+10.274,6.7526
+5.1077,2.0576
+5.7292,0.47953
+5.1884,0.20421
+6.3557,0.67861
+9.7687,7.5435
+6.5159,5.3436
+8.5172,4.2415
+9.1802,6.7981
+6.002,0.92695
+5.5204,0.152
+5.0594,2.8214
+5.7077,1.8451
+7.6366,4.2959
+5.8707,7.2029
+5.3054,1.9869
+8.2934,0.14454
+13.394,9.0551
+5.4369,0.61705
diff --git a/machine_learning/mlclass-ex1-008/mlclass-ex1/ex1data2.txt b/machine_learning/mlclass-ex1-008/mlclass-ex1/ex1data2.txt
new file mode 100644
index 0000000..79e9a80
--- /dev/null
+++ b/machine_learning/mlclass-ex1-008/mlclass-ex1/ex1data2.txt
@@ -0,0 +1,47 @@
+2104,3,399900
+1600,3,329900
+2400,3,369000
+1416,2,232000
+3000,4,539900
+1985,4,299900
+1534,3,314900
+1427,3,198999
+1380,3,212000
+1494,3,242500
+1940,4,239999
+2000,3,347000
+1890,3,329999
+4478,5,699900
+1268,3,259900
+2300,4,449900
+1320,2,299900
+1236,3,199900
+2609,4,499998
+3031,4,599000
+1767,3,252900
+1888,2,255000
+1604,3,242900
+1962,4,259900
+3890,3,573900
+1100,3,249900
+1458,3,464500
+2526,3,469000
+2200,3,475000
+2637,3,299900
+1839,2,349900
+1000,1,169900
+2040,4,314900
+3137,3,579900
+1811,4,285900
+1437,3,249900
+1239,3,229900
+2132,4,345000
+4215,4,549000
+2162,4,287000
+1664,2,368500
+2238,3,329900
+2567,4,314000
+1200,3,299000
+852,2,179900
+1852,4,299900
+1203,3,239500
diff --git a/machine_learning/mlclass-ex1-008/mlclass-ex1/featureNormalize.m b/machine_learning/mlclass-ex1-008/mlclass-ex1/featureNormalize.m
new file mode 100644
index 0000000..771e33d
--- /dev/null
+++ b/machine_learning/mlclass-ex1-008/mlclass-ex1/featureNormalize.m
@@ -0,0 +1,39 @@
+function [X_norm, mu, sigma] = featureNormalize(X)
+%FEATURENORMALIZE Normalizes the features in X
+% FEATURENORMALIZE(X) returns a normalized version of X where
+% the mean value of each feature is 0 and the standard deviation
+% is 1. This is often a good preprocessing step to do when
+% working with learning algorithms.
+
+% You need to set these values correctly
+X_norm = X;
+mu = zeros(1, size(X, 2));
+sigma = zeros(1, size(X, 2));
+
+% ====================== YOUR CODE HERE ======================
+% Instructions: First, for each feature dimension, compute the mean
+% of the feature and subtract it from the dataset,
+% storing the mean value in mu. Next, compute the
+% standard deviation of each feature and divide
+% each feature by it's standard deviation, storing
+% the standard deviation in sigma.
+%
+% Note that X is a matrix where each column is a
+% feature and each row is an example. You need
+% to perform the normalization separately for
+% each feature.
+%
+% Hint: You might find the 'mean' and 'std' functions useful.
+%
+
+mu = mean(X);
+sigma = std(X);
+
+X_norm = (X - repmat( mu, size(X,1), 1 )) ./ repmat( sigma, size(X,1), 1 );
+
+
+
+
+% ============================================================
+
+end
diff --git a/machine_learning/mlclass-ex1-008/mlclass-ex1/gradientDescent.m b/machine_learning/mlclass-ex1-008/mlclass-ex1/gradientDescent.m
new file mode 100644
index 0000000..45f829c
--- /dev/null
+++ b/machine_learning/mlclass-ex1-008/mlclass-ex1/gradientDescent.m
@@ -0,0 +1,33 @@
+function [theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters)
+%GRADIENTDESCENT Performs gradient descent to learn theta
+% theta = GRADIENTDESENT(X, y, theta, alpha, num_iters) updates theta by
+% taking num_iters gradient steps with learning rate alpha
+
+% Initialize some useful values
+m = length(y); % number of training examples
+J_history = zeros(num_iters, 1);
+
+for iter = 1:num_iters
+
+ % ====================== YOUR CODE HERE ======================
+ % Instructions: Perform a single gradient step on the parameter vector
+ % theta.
+ %
+ % Hint: While debugging, it can be useful to print out the values
+ % of the cost function (computeCost) and gradient here.
+ %
+
+
+
+ theta = theta - alpha * (X' * (X*theta-y) / m);
+
+
+
+ % ============================================================
+
+ % Save the cost J in every iteration
+ J_history(iter) = computeCost(X, y, theta);
+
+end
+
+end
diff --git a/machine_learning/mlclass-ex1-008/mlclass-ex1/gradientDescentMulti.m b/machine_learning/mlclass-ex1-008/mlclass-ex1/gradientDescentMulti.m
new file mode 100644
index 0000000..4429f90
--- /dev/null
+++ b/machine_learning/mlclass-ex1-008/mlclass-ex1/gradientDescentMulti.m
@@ -0,0 +1,37 @@
+function [theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters)
+%GRADIENTDESCENTMULTI Performs gradient descent to learn theta
+% theta = GRADIENTDESCENTMULTI(x, y, theta, alpha, num_iters) updates theta by
+% taking num_iters gradient steps with learning rate alpha
+
+% Initialize some useful values
+m = length(y); % number of training examples
+J_history = zeros(num_iters, 1);
+
+for iter = 1:num_iters
+
+ % ====================== YOUR CODE HERE ======================
+ % Instructions: Perform a single gradient step on the parameter vector
+ % theta.
+ %
+ % Hint: While debugging, it can be useful to print out the values
+ % of the cost function (computeCostMulti) and gradient here.
+ %
+
+
+
+ theta = theta - alpha * (X' * (X*theta-y) / m);
+
+
+
+
+
+
+
+ % ============================================================
+
+ % Save the cost J in every iteration
+ J_history(iter) = computeCostMulti(X, y, theta);
+
+end
+
+end
diff --git a/machine_learning/mlclass-ex1-008/mlclass-ex1/normalEqn.m b/machine_learning/mlclass-ex1-008/mlclass-ex1/normalEqn.m
new file mode 100644
index 0000000..bcbc135
--- /dev/null
+++ b/machine_learning/mlclass-ex1-008/mlclass-ex1/normalEqn.m
@@ -0,0 +1,23 @@
+function [theta] = normalEqn(X, y)
+%NORMALEQN Computes the closed-form solution to linear regression
+% NORMALEQN(X,y) computes the closed-form solution to linear
+% regression using the normal equations.
+
+theta = zeros(size(X, 2), 1);
+
+% ====================== YOUR CODE HERE ======================
+% Instructions: Complete the code to compute the closed form solution
+% to linear regression and put the result in theta.
+%
+
+% ---------------------- Sample Solution ----------------------
+
+
+theta = pinv(X'*X)*X'*y;
+
+% -------------------------------------------------------------
+
+
+% ============================================================
+
+end
diff --git a/machine_learning/mlclass-ex1-008/mlclass-ex1/plotData.m b/machine_learning/mlclass-ex1-008/mlclass-ex1/plotData.m
new file mode 100644
index 0000000..3a10239
--- /dev/null
+++ b/machine_learning/mlclass-ex1-008/mlclass-ex1/plotData.m
@@ -0,0 +1,26 @@
+function plotData(x, y)
+%PLOTDATA Plots the data points x and y into a new figure
+% PLOTDATA(x,y) plots the data points and gives the figure axes labels of
+% population and profit.
+
+% ====================== YOUR CODE HERE ======================
+% Instructions: Plot the training data into a figure using the
+% "figure" and "plot" commands. Set the axes labels using
+% the "xlabel" and "ylabel" commands. Assume the
+% population and revenue data have been passed in
+% as the x and y arguments of this function.
+%
+% Hint: You can use the 'rx' option with plot to have the markers
+% appear as red crosses. Furthermore, you can make the
+% markers larger by using plot(..., 'rx', 'MarkerSize', 10);
+
+figure; % open a new figure window
+
+
+
+
+
+
+% ============================================================
+
+end
diff --git a/machine_learning/mlclass-ex1-008/mlclass-ex1/submit.m b/machine_learning/mlclass-ex1-008/mlclass-ex1/submit.m
new file mode 100644
index 0000000..59de10a
--- /dev/null
+++ b/machine_learning/mlclass-ex1-008/mlclass-ex1/submit.m
@@ -0,0 +1,577 @@
+function submit(partId, webSubmit)
+%SUBMIT Submit your code and output to the ml-class servers
+% SUBMIT() will connect to the ml-class server and submit your solution
+
+ fprintf('==\n== [ml-class] Submitting Solutions | Programming Exercise %s\n==\n', ...
+ homework_id());
+ if ~exist('partId', 'var') || isempty(partId)
+ partId = promptPart();
+ end
+
+ if ~exist('webSubmit', 'var') || isempty(webSubmit)
+ webSubmit = 0; % submit directly by default
+ end
+
+ % Check valid partId
+ partNames = validParts();
+ if ~isValidPartId(partId)
+ fprintf('!! Invalid homework part selected.\n');
+ fprintf('!! Expected an integer from 1 to %d.\n', numel(partNames) + 1);
+ fprintf('!! Submission Cancelled\n');
+ return
+ end
+
+ if ~exist('ml_login_data.mat','file')
+ [login password] = loginPrompt();
+ save('ml_login_data.mat','login','password');
+ else
+ load('ml_login_data.mat');
+ [login password] = quickLogin(login, password);
+ save('ml_login_data.mat','login','password');
+ end
+
+ if isempty(login)
+ fprintf('!! Submission Cancelled\n');
+ return
+ end
+
+ fprintf('\n== Connecting to ml-class ... ');
+ if exist('OCTAVE_VERSION')
+ fflush(stdout);
+ end
+
+ % Setup submit list
+ if partId == numel(partNames) + 1
+ submitParts = 1:numel(partNames);
+ else
+ submitParts = [partId];
+ end
+
+ for s = 1:numel(submitParts)
+ thisPartId = submitParts(s);
+ if (~webSubmit) % submit directly to server
+ [login, ch, signature, auxstring] = getChallenge(login, thisPartId);
+ if isempty(login) || isempty(ch) || isempty(signature)
+ % Some error occured, error string in first return element.
+ fprintf('\n!! Error: %s\n\n', login);
+ return
+ end
+
+ % Attempt Submission with Challenge
+ ch_resp = challengeResponse(login, password, ch);
+
+ [result, str] = submitSolution(login, ch_resp, thisPartId, ...
+ output(thisPartId, auxstring), source(thisPartId), signature);
+
+ partName = partNames{thisPartId};
+
+ fprintf('\n== [ml-class] Submitted Assignment %s - Part %d - %s\n', ...
+ homework_id(), thisPartId, partName);
+ fprintf('== %s\n', strtrim(str));
+
+ if exist('OCTAVE_VERSION')
+ fflush(stdout);
+ end
+ else
+ [result] = submitSolutionWeb(login, thisPartId, output(thisPartId), ...
+ source(thisPartId));
+ result = base64encode(result);
+
+ fprintf('\nSave as submission file [submit_ex%s_part%d.txt (enter to accept default)]:', ...
+ homework_id(), thisPartId);
+ saveAsFile = input('', 's');
+ if (isempty(saveAsFile))
+ saveAsFile = sprintf('submit_ex%s_part%d.txt', homework_id(), thisPartId);
+ end
+
+ fid = fopen(saveAsFile, 'w');
+ if (fid)
+ fwrite(fid, result);
+ fclose(fid);
+ fprintf('\nSaved your solutions to %s.\n\n', saveAsFile);
+ fprintf(['You can now submit your solutions through the web \n' ...
+ 'form in the programming exercises. Select the corresponding \n' ...
+ 'programming exercise to access the form.\n']);
+
+ else
+ fprintf('Unable to save to %s\n\n', saveAsFile);
+ fprintf(['You can create a submission file by saving the \n' ...
+ 'following text in a file: (press enter to continue)\n\n']);
+ pause;
+ fprintf(result);
+ end
+ end
+ end
+end
+
+% ================== CONFIGURABLES FOR EACH HOMEWORK ==================
+
+function id = homework_id()
+ id = '1';
+end
+
+function [partNames] = validParts()
+ partNames = { 'Warm up exercise ', ...
+ 'Computing Cost (for one variable)', ...
+ 'Gradient Descent (for one variable)', ...
+ 'Feature Normalization', ...
+ 'Computing Cost (for multiple variables)', ...
+ 'Gradient Descent (for multiple variables)', ...
+ 'Normal Equations'};
+end
+
+function srcs = sources()
+ % Separated by part
+ srcs = { { 'warmUpExercise.m' }, ...
+ { 'computeCost.m' }, ...
+ { 'gradientDescent.m' }, ...
+ { 'featureNormalize.m' }, ...
+ { 'computeCostMulti.m' }, ...
+ { 'gradientDescentMulti.m' }, ...
+ { 'normalEqn.m' }, ...
+ };
+end
+
+function out = output(partId, auxstring)
+ % Random Test Cases
+ X1 = [ones(20,1) (exp(1) + exp(2) * (0.1:0.1:2))'];
+ Y1 = X1(:,2) + sin(X1(:,1)) + cos(X1(:,2));
+ X2 = [X1 X1(:,2).^0.5 X1(:,2).^0.25];
+ Y2 = Y1.^0.5 + Y1;
+ if partId == 1
+ out = sprintf('%0.5f ', warmUpExercise());
+ elseif partId == 2
+ out = sprintf('%0.5f ', computeCost(X1, Y1, [0.5 -0.5]'));
+ elseif partId == 3
+ out = sprintf('%0.5f ', gradientDescent(X1, Y1, [0.5 -0.5]', 0.01, 10));
+ elseif partId == 4
+ out = sprintf('%0.5f ', featureNormalize(X2(:,2:4)));
+ elseif partId == 5
+ out = sprintf('%0.5f ', computeCostMulti(X2, Y2, [0.1 0.2 0.3 0.4]'));
+ elseif partId == 6
+ out = sprintf('%0.5f ', gradientDescentMulti(X2, Y2, [-0.1 -0.2 -0.3 -0.4]', 0.01, 10));
+ elseif partId == 7
+ out = sprintf('%0.5f ', normalEqn(X2, Y2));
+ end
+end
+
+% ====================== SERVER CONFIGURATION ===========================
+
+% ***************** REMOVE -staging WHEN YOU DEPLOY *********************
+function url = site_url()
+ url = 'http://class.coursera.org/ml-008';
+end
+
+function url = challenge_url()
+ url = [site_url() '/assignment/challenge'];
+end
+
+function url = submit_url()
+ url = [site_url() '/assignment/submit'];
+end
+
+% ========================= CHALLENGE HELPERS =========================
+
+function src = source(partId)
+ src = '';
+ src_files = sources();
+ if partId <= numel(src_files)
+ flist = src_files{partId};
+ for i = 1:numel(flist)
+ fid = fopen(flist{i});
+ if (fid == -1)
+ error('Error opening %s (is it missing?)', flist{i});
+ end
+ line = fgets(fid);
+ while ischar(line)
+ src = [src line];
+ line = fgets(fid);
+ end
+ fclose(fid);
+ src = [src '||||||||'];
+ end
+ end
+end
+
+function ret = isValidPartId(partId)
+ partNames = validParts();
+ ret = (~isempty(partId)) && (partId >= 1) && (partId <= numel(partNames) + 1);
+end
+
+function partId = promptPart()
+ fprintf('== Select which part(s) to submit:\n');
+ partNames = validParts();
+ srcFiles = sources();
+ for i = 1:numel(partNames)
+ fprintf('== %d) %s [', i, partNames{i});
+ fprintf(' %s ', srcFiles{i}{:});
+ fprintf(']\n');
+ end
+ fprintf('== %d) All of the above \n==\nEnter your choice [1-%d]: ', ...
+ numel(partNames) + 1, numel(partNames) + 1);
+ selPart = input('', 's');
+ partId = str2num(selPart);
+ if ~isValidPartId(partId)
+ partId = -1;
+ end
+end
+
+function [email,ch,signature,auxstring] = getChallenge(email, part)
+ str = urlread(challenge_url(), 'post', {'email_address', email, 'assignment_part_sid', [homework_id() '-' num2str(part)], 'response_encoding', 'delim'});
+
+ str = strtrim(str);
+ r = struct;
+ while(numel(str) > 0)
+ [f, str] = strtok (str, '|');
+ [v, str] = strtok (str, '|');
+ r = setfield(r, f, v);
+ end
+
+ email = getfield(r, 'email_address');
+ ch = getfield(r, 'challenge_key');
+ signature = getfield(r, 'state');
+ auxstring = getfield(r, 'challenge_aux_data');
+end
+
+function [result, str] = submitSolutionWeb(email, part, output, source)
+
+ result = ['{"assignment_part_sid":"' base64encode([homework_id() '-' num2str(part)], '') '",' ...
+ '"email_address":"' base64encode(email, '') '",' ...
+ '"submission":"' base64encode(output, '') '",' ...
+ '"submission_aux":"' base64encode(source, '') '"' ...
+ '}'];
+ str = 'Web-submission';
+end
+
+function [result, str] = submitSolution(email, ch_resp, part, output, ...
+ source, signature)
+
+ params = {'assignment_part_sid', [homework_id() '-' num2str(part)], ...
+ 'email_address', email, ...
+ 'submission', base64encode(output, ''), ...
+ 'submission_aux', base64encode(source, ''), ...
+ 'challenge_response', ch_resp, ...
+ 'state', signature};
+
+ str = urlread(submit_url(), 'post', params);
+
+ % Parse str to read for success / failure
+ result = 0;
+
+end
+
+% =========================== LOGIN HELPERS ===========================
+
+function [login password] = loginPrompt()
+ % Prompt for password
+ [login password] = basicPrompt();
+
+ if isempty(login) || isempty(password)
+ login = []; password = [];
+ end
+end
+
+
+function [login password] = basicPrompt()
+ login = input('Login (Email address): ', 's');
+ password = input('Password: ', 's');
+end
+
+function [login password] = quickLogin(login,password)
+ disp(['You are currently logged in as ' login '.']);
+ cont_token = input('Is this you? (y/n - type n to reenter password)','s');
+ if(isempty(cont_token) || cont_token(1)=='Y'||cont_token(1)=='y')
+ return;
+ else
+ [login password] = loginPrompt();
+ end
+end
+
+function [str] = challengeResponse(email, passwd, challenge)
+ str = sha1([challenge passwd]);
+end
+
+% =============================== SHA-1 ================================
+
+function hash = sha1(str)
+
+ % Initialize variables
+ h0 = uint32(1732584193);
+ h1 = uint32(4023233417);
+ h2 = uint32(2562383102);
+ h3 = uint32(271733878);
+ h4 = uint32(3285377520);
+
+ % Convert to word array
+ strlen = numel(str);
+
+ % Break string into chars and append the bit 1 to the message
+ mC = [double(str) 128];
+ mC = [mC zeros(1, 4-mod(numel(mC), 4), 'uint8')];
+
+ numB = strlen * 8;
+ if exist('idivide')
+ numC = idivide(uint32(numB + 65), 512, 'ceil');
+ else
+ numC = ceil(double(numB + 65)/512);
+ end
+ numW = numC * 16;
+ mW = zeros(numW, 1, 'uint32');
+
+ idx = 1;
+ for i = 1:4:strlen + 1
+ mW(idx) = bitor(bitor(bitor( ...
+ bitshift(uint32(mC(i)), 24), ...
+ bitshift(uint32(mC(i+1)), 16)), ...
+ bitshift(uint32(mC(i+2)), 8)), ...
+ uint32(mC(i+3)));
+ idx = idx + 1;
+ end
+
+ % Append length of message
+ mW(numW - 1) = uint32(bitshift(uint64(numB), -32));
+ mW(numW) = uint32(bitshift(bitshift(uint64(numB), 32), -32));
+
+ % Process the message in successive 512-bit chs
+ for cId = 1 : double(numC)
+ cSt = (cId - 1) * 16 + 1;
+ cEnd = cId * 16;
+ ch = mW(cSt : cEnd);
+
+ % Extend the sixteen 32-bit words into eighty 32-bit words
+ for j = 17 : 80
+ ch(j) = ch(j - 3);
+ ch(j) = bitxor(ch(j), ch(j - 8));
+ ch(j) = bitxor(ch(j), ch(j - 14));
+ ch(j) = bitxor(ch(j), ch(j - 16));
+ ch(j) = bitrotate(ch(j), 1);
+ end
+
+ % Initialize hash value for this ch
+ a = h0;
+ b = h1;
+ c = h2;
+ d = h3;
+ e = h4;
+
+ % Main loop
+ for i = 1 : 80
+ if(i >= 1 && i <= 20)
+ f = bitor(bitand(b, c), bitand(bitcmp(b), d));
+ k = uint32(1518500249);
+ elseif(i >= 21 && i <= 40)
+ f = bitxor(bitxor(b, c), d);
+ k = uint32(1859775393);
+ elseif(i >= 41 && i <= 60)
+ f = bitor(bitor(bitand(b, c), bitand(b, d)), bitand(c, d));
+ k = uint32(2400959708);
+ elseif(i >= 61 && i <= 80)
+ f = bitxor(bitxor(b, c), d);
+ k = uint32(3395469782);
+ end
+
+ t = bitrotate(a, 5);
+ t = bitadd(t, f);
+ t = bitadd(t, e);
+ t = bitadd(t, k);
+ t = bitadd(t, ch(i));
+ e = d;
+ d = c;
+ c = bitrotate(b, 30);
+ b = a;
+ a = t;
+
+ end
+ h0 = bitadd(h0, a);
+ h1 = bitadd(h1, b);
+ h2 = bitadd(h2, c);
+ h3 = bitadd(h3, d);
+ h4 = bitadd(h4, e);
+
+ end
+
+ hash = reshape(dec2hex(double([h0 h1 h2 h3 h4]), 8)', [1 40]);
+
+ hash = lower(hash);
+
+end
+
+function ret = bitadd(iA, iB)
+ ret = double(iA) + double(iB);
+ ret = bitset(ret, 33, 0);
+ ret = uint32(ret);
+end
+
+function ret = bitrotate(iA, places)
+ t = bitshift(iA, places - 32);
+ ret = bitshift(iA, places);
+ ret = bitor(ret, t);
+end
+
+% =========================== Base64 Encoder ============================
+% Thanks to Peter John Acklam
+%
+
+function y = base64encode(x, eol)
+%BASE64ENCODE Perform base64 encoding on a string.
+%
+% BASE64ENCODE(STR, EOL) encode the given string STR. EOL is the line ending
+% sequence to use; it is optional and defaults to '\n' (ASCII decimal 10).
+% The returned encoded string is broken into lines of no more than 76
+% characters each, and each line will end with EOL unless it is empty. Let
+% EOL be empty if you do not want the encoded string broken into lines.
+%
+% STR and EOL don't have to be strings (i.e., char arrays). The only
+% requirement is that they are vectors containing values in the range 0-255.
+%
+% This function may be used to encode strings into the Base64 encoding
+% specified in RFC 2045 - MIME (Multipurpose Internet Mail Extensions). The
+% Base64 encoding is designed to represent arbitrary sequences of octets in a
+% form that need not be humanly readable. A 65-character subset
+% ([A-Za-z0-9+/=]) of US-ASCII is used, enabling 6 bits to be represented per
+% printable character.
+%
+% Examples
+% --------
+%
+% If you want to encode a large file, you should encode it in chunks that are
+% a multiple of 57 bytes. This ensures that the base64 lines line up and
+% that you do not end up with padding in the middle. 57 bytes of data fills
+% one complete base64 line (76 == 57*4/3):
+%
+% If ifid and ofid are two file identifiers opened for reading and writing,
+% respectively, then you can base64 encode the data with
+%
+% while ~feof(ifid)
+% fwrite(ofid, base64encode(fread(ifid, 60*57)));
+% end
+%
+% or, if you have enough memory,
+%
+% fwrite(ofid, base64encode(fread(ifid)));
+%
+% See also BASE64DECODE.
+
+% Author: Peter John Acklam
+% Time-stamp: 2004-02-03 21:36:56 +0100
+% E-mail: pjacklam@online.no
+% URL: http://home.online.no/~pjacklam
+
+ if isnumeric(x)
+ x = num2str(x);
+ end
+
+ % make sure we have the EOL value
+ if nargin < 2
+ eol = sprintf('\n');
+ else
+ if sum(size(eol) > 1) > 1
+ error('EOL must be a vector.');
+ end
+ if any(eol(:) > 255)
+ error('EOL can not contain values larger than 255.');
+ end
+ end
+
+ if sum(size(x) > 1) > 1
+ error('STR must be a vector.');
+ end
+
+ x = uint8(x);
+ eol = uint8(eol);
+
+ ndbytes = length(x); % number of decoded bytes
+ nchunks = ceil(ndbytes / 3); % number of chunks/groups
+ nebytes = 4 * nchunks; % number of encoded bytes
+
+ % add padding if necessary, to make the length of x a multiple of 3
+ if rem(ndbytes, 3)
+ x(end+1 : 3*nchunks) = 0;
+ end
+
+ x = reshape(x, [3, nchunks]); % reshape the data
+ y = repmat(uint8(0), 4, nchunks); % for the encoded data
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Split up every 3 bytes into 4 pieces
+ %
+ % aaaaaabb bbbbcccc ccdddddd
+ %
+ % to form
+ %
+ % 00aaaaaa 00bbbbbb 00cccccc 00dddddd
+ %
+ y(1,:) = bitshift(x(1,:), -2); % 6 highest bits of x(1,:)
+
+ y(2,:) = bitshift(bitand(x(1,:), 3), 4); % 2 lowest bits of x(1,:)
+ y(2,:) = bitor(y(2,:), bitshift(x(2,:), -4)); % 4 highest bits of x(2,:)
+
+ y(3,:) = bitshift(bitand(x(2,:), 15), 2); % 4 lowest bits of x(2,:)
+ y(3,:) = bitor(y(3,:), bitshift(x(3,:), -6)); % 2 highest bits of x(3,:)
+
+ y(4,:) = bitand(x(3,:), 63); % 6 lowest bits of x(3,:)
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Now perform the following mapping
+ %
+ % 0 - 25 -> A-Z
+ % 26 - 51 -> a-z
+ % 52 - 61 -> 0-9
+ % 62 -> +
+ % 63 -> /
+ %
+ % We could use a mapping vector like
+ %
+ % ['A':'Z', 'a':'z', '0':'9', '+/']
+ %
+ % but that would require an index vector of class double.
+ %
+ z = repmat(uint8(0), size(y));
+ i = y <= 25; z(i) = 'A' + double(y(i));
+ i = 26 <= y & y <= 51; z(i) = 'a' - 26 + double(y(i));
+ i = 52 <= y & y <= 61; z(i) = '0' - 52 + double(y(i));
+ i = y == 62; z(i) = '+';
+ i = y == 63; z(i) = '/';
+ y = z;
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Add padding if necessary.
+ %
+ npbytes = 3 * nchunks - ndbytes; % number of padding bytes
+ if npbytes
+ y(end-npbytes+1 : end) = '='; % '=' is used for padding
+ end
+
+ if isempty(eol)
+
+ % reshape to a row vector
+ y = reshape(y, [1, nebytes]);
+
+ else
+
+ nlines = ceil(nebytes / 76); % number of lines
+ neolbytes = length(eol); % number of bytes in eol string
+
+ % pad data so it becomes a multiple of 76 elements
+ y = [y(:) ; zeros(76 * nlines - numel(y), 1)];
+ y(nebytes + 1 : 76 * nlines) = 0;
+ y = reshape(y, 76, nlines);
+
+ % insert eol strings
+ eol = eol(:);
+ y(end + 1 : end + neolbytes, :) = eol(:, ones(1, nlines));
+
+ % remove padding, but keep the last eol string
+ m = nebytes + neolbytes * (nlines - 1);
+ n = (76+neolbytes)*nlines - neolbytes;
+ y(m+1 : n) = '';
+
+ % extract and reshape to row vector
+ y = reshape(y, 1, m+neolbytes);
+
+ end
+
+ % output is a character array
+ y = char(y);
+
+end
diff --git a/machine_learning/mlclass-ex1-008/mlclass-ex1/submitWeb.m b/machine_learning/mlclass-ex1-008/mlclass-ex1/submitWeb.m
new file mode 100644
index 0000000..8611707
--- /dev/null
+++ b/machine_learning/mlclass-ex1-008/mlclass-ex1/submitWeb.m
@@ -0,0 +1,20 @@
+% submitWeb Creates files from your code and output for web submission.
+%
+% If the submit function does not work for you, use the web-submission mechanism.
+% Call this function to produce a file for the part you wish to submit. Then,
+% submit the file to the class servers using the "Web Submission" button on the
+% Programming Exercises page on the course website.
+%
+% You should call this function without arguments (submitWeb), to receive
+% an interactive prompt for submission; optionally you can call it with the partID
+% if you so wish. Make sure your working directory is set to the directory
+% containing the submitWeb.m file and your assignment files.
+
+function submitWeb(partId)
+ if ~exist('partId', 'var') || isempty(partId)
+ partId = [];
+ end
+
+ submit(partId, 1);
+end
+
diff --git a/machine_learning/mlclass-ex1-008/mlclass-ex1/warmUpExercise.m b/machine_learning/mlclass-ex1-008/mlclass-ex1/warmUpExercise.m
new file mode 100644
index 0000000..367c9f5
--- /dev/null
+++ b/machine_learning/mlclass-ex1-008/mlclass-ex1/warmUpExercise.m
@@ -0,0 +1,21 @@
+function A = warmUpExercise()
+%WARMUPEXERCISE Example function in octave
+% A = WARMUPEXERCISE() is an example function that returns the 5x5 identity matrix
+
+A = [];
+% ============= YOUR CODE HERE ==============
+% Instructions: Return the 5x5 identity matrix
+% In octave, we return values by defining which variables
+% represent the return values (at the top of the file)
+% and then set them accordingly.
+
+
+A = eye(5);
+
+
+
+
+% ===========================================
+
+
+end
diff --git a/machine_learning/mlclass-ex2-008/ex2.pdf b/machine_learning/mlclass-ex2-008/ex2.pdf
new file mode 100644
index 0000000..29231cc
Binary files /dev/null and b/machine_learning/mlclass-ex2-008/ex2.pdf differ
diff --git a/machine_learning/mlclass-ex2-008/mlclass-ex2/costFunction.m b/machine_learning/mlclass-ex2-008/mlclass-ex2/costFunction.m
new file mode 100644
index 0000000..f9b971b
--- /dev/null
+++ b/machine_learning/mlclass-ex2-008/mlclass-ex2/costFunction.m
@@ -0,0 +1,30 @@
+function [J, grad] = costFunction(theta, X, y)
+%COSTFUNCTION Compute cost and gradient for logistic regression
+% J = COSTFUNCTION(theta, X, y) computes the cost of using theta as the
+% parameter for logistic regression and the gradient of the cost
+% w.r.t. to the parameters.
+
+% Initialize some useful values
+m = length(y); % number of training examples
+
+% You need to return the following variables correctly
+J = 0;
+grad = zeros(size(theta));
+
+% ====================== YOUR CODE HERE ======================
+% Instructions: Compute the cost of a particular choice of theta.
+% You should set J to the cost.
+% Compute the partial derivatives and set grad to the partial
+% derivatives of the cost w.r.t. each parameter in theta
+%
+% Note: grad should have the same dimensions as theta
+%
+
+h = sigmoid( X*theta );
+o = ones(size(y));
+J = sum( y .* log(h) + (o-y) .* log(o-h) ) / (-m);
+grad = (X'*(h - y)) / m;
+
+% =============================================================
+
+end
diff --git a/machine_learning/mlclass-ex2-008/mlclass-ex2/costFunctionReg.m b/machine_learning/mlclass-ex2-008/mlclass-ex2/costFunctionReg.m
new file mode 100644
index 0000000..c82f431
--- /dev/null
+++ b/machine_learning/mlclass-ex2-008/mlclass-ex2/costFunctionReg.m
@@ -0,0 +1,30 @@
+function [J, grad] = costFunctionReg(theta, X, y, lambda)
+%COSTFUNCTIONREG Compute cost and gradient for logistic regression with regularization
+% J = COSTFUNCTIONREG(theta, X, y, lambda) computes the cost of using
+% theta as the parameter for regularized logistic regression and the
+% gradient of the cost w.r.t. to the parameters.
+
+% Initialize some useful values
+m = length(y); % number of training examples
+
+% You need to return the following variables correctly
+J = 0;
+grad = zeros(size(theta));
+
+% ====================== YOUR CODE HERE ======================
+% Instructions: Compute the cost of a particular choice of theta.
+% You should set J to the cost.
+% Compute the partial derivatives and set grad to the partial
+% derivatives of the cost w.r.t. each parameter in theta
+
+
+h = sigmoid( X*theta );
+o = ones(size(y));
+reg = theta;
+reg(1) = 0;
+J = sum( y .* log(h) + (o-y) .* log(o-h) ) / (-m) + (lambda/(2*m))*sum(reg.^2);
+grad = (X'*(h - y)) / m + (lambda/m) * reg;
+
+% =============================================================
+
+end
diff --git a/machine_learning/mlclass-ex2-008/mlclass-ex2/ex2.m b/machine_learning/mlclass-ex2-008/mlclass-ex2/ex2.m
new file mode 100644
index 0000000..359e01e
--- /dev/null
+++ b/machine_learning/mlclass-ex2-008/mlclass-ex2/ex2.m
@@ -0,0 +1,135 @@
+%% Machine Learning Online Class - Exercise 2: Logistic Regression
+%
+% Instructions
+% ------------
+%
+% This file contains code that helps you get started on the logistic
+% regression exercise. You will need to complete the following functions
+% in this exericse:
+%
+% sigmoid.m
+% costFunction.m
+% predict.m
+% costFunctionReg.m
+%
+% For this exercise, you will not need to change any code in this file,
+% or any other files other than those mentioned above.
+%
+
+%% Initialization
+clear ; close all; clc
+
+%% Load Data
+% The first two columns contains the exam scores and the third column
+% contains the label.
+
+data = load('ex2data1.txt');
+X = data(:, [1, 2]); y = data(:, 3);
+
+%% ==================== Part 1: Plotting ====================
+% We start the exercise by first plotting the data to understand the
+% the problem we are working with.
+
+fprintf(['Plotting data with + indicating (y = 1) examples and o ' ...
+ 'indicating (y = 0) examples.\n']);
+
+%%plotData(X, y);
+
+% Put some labels
+%%hold on;
+% Labels and Legend
+%%xlabel('Exam 1 score')
+%%ylabel('Exam 2 score')
+
+% Specified in plot order
+%%legend('Admitted', 'Not admitted')
+%%hold off;
+
+fprintf('\nProgram paused. Press enter to continue.\n');
+%%pause;
+
+
+%% ============ Part 2: Compute Cost and Gradient ============
+% In this part of the exercise, you will implement the cost and gradient
+% for logistic regression. You neeed to complete the code in
+% costFunction.m
+
+% Setup the data matrix appropriately, and add ones for the intercept term
+[m, n] = size(X);
+
+% Add intercept term to x and X_test
+X = [ones(m, 1) X];
+
+% Initialize fitting parameters
+initial_theta = zeros(n + 1, 1);
+
+% Compute and display initial cost and gradient
+[cost, grad] = costFunction(initial_theta, X, y);
+
+fprintf('Cost at initial theta (zeros): %f\n', cost);
+fprintf('Gradient at initial theta (zeros): \n');
+fprintf(' %f \n', grad);
+
+fprintf('\nProgram paused. Press enter to continue.\n');
+pause;
+
+
+%% ============= Part 3: Optimizing using fminunc =============
+% In this exercise, you will use a built-in function (fminunc) to find the
+% optimal parameters theta.
+
+% Set options for fminunc
+options = optimset('GradObj', 'on', 'MaxIter', 400);
+
+% Run fminunc to obtain the optimal theta
+% This function will return theta and the cost
+[theta, cost] = ...
+ fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);
+
+% Print theta to screen
+fprintf('Cost at theta found by fminunc: %f\n', cost);
+fprintf('theta: \n');
+fprintf(' %f \n', theta);
+
+% Plot Boundary
+plotDecisionBoundary(theta, X, y);
+
+% Put some labels
+hold on;
+% Labels and Legend
+xlabel('Exam 1 score')
+ylabel('Exam 2 score')
+
+% Specified in plot order
+legend('Admitted', 'Not admitted')
+hold off;
+
+fprintf('\nProgram paused. Press enter to continue.\n');
+pause;
+
+%% ============== Part 4: Predict and Accuracies ==============
+% After learning the parameters, you'll like to use it to predict the outcomes
+% on unseen data. In this part, you will use the logistic regression model
+% to predict the probability that a student with score 45 on exam 1 and
+% score 85 on exam 2 will be admitted.
+%
+% Furthermore, you will compute the training and test set accuracies of
+% our model.
+%
+% Your task is to complete the code in predict.m
+
+% Predict probability for a student with score 45 on exam 1
+% and score 85 on exam 2
+
+prob = sigmoid([1 45 85] * theta);
+fprintf(['For a student with scores 45 and 85, we predict an admission ' ...
+ 'probability of %f\n\n'], prob);
+
+% Compute accuracy on our training set
+p = predict(theta, X);
+
+fprintf('Train Accuracy: %f\n', mean(double(p == y)) * 100);
+
+fprintf('\nProgram paused. Press enter to continue.\n');
+pause;
+
diff --git a/machine_learning/mlclass-ex2-008/mlclass-ex2/ex2_reg.m b/machine_learning/mlclass-ex2-008/mlclass-ex2/ex2_reg.m
new file mode 100644
index 0000000..d83dffe
--- /dev/null
+++ b/machine_learning/mlclass-ex2-008/mlclass-ex2/ex2_reg.m
@@ -0,0 +1,116 @@
+%% Machine Learning Online Class - Exercise 2: Logistic Regression
+%
+% Instructions
+% ------------
+%
+% This file contains code that helps you get started on the second part
+% of the exercise which covers regularization with logistic regression.
+%
+% You will need to complete the following functions in this exericse:
+%
+% sigmoid.m
+% costFunction.m
+% predict.m
+% costFunctionReg.m
+%
+% For this exercise, you will not need to change any code in this file,
+% or any other files other than those mentioned above.
+%
+
+%% Initialization
+clear ; close all; clc
+
+%% Load Data
+% The first two columns contains the X values and the third column
+% contains the label (y).
+
+data = load('ex2data2.txt');
+X = data(:, [1, 2]); y = data(:, 3);
+
+plotData(X, y);
+
+% Put some labels
+hold on;
+
+% Labels and Legend
+xlabel('Microchip Test 1')
+ylabel('Microchip Test 2')
+
+% Specified in plot order
+legend('y = 1', 'y = 0')
+hold off;
+
+
+%% =========== Part 1: Regularized Logistic Regression ============
+% In this part, you are given a dataset with data points that are not
+% linearly separable. However, you would still like to use logistic
+% regression to classify the data points.
+%
+% To do so, you introduce more features to use -- in particular, you add
+% polynomial features to our data matrix (similar to polynomial
+% regression).
+%
+
+% Add Polynomial Features
+
+% Note that mapFeature also adds a column of ones for us, so the intercept
+% term is handled
+X = mapFeature(X(:,1), X(:,2));
+
+% Initialize fitting parameters
+initial_theta = zeros(size(X, 2), 1);
+
+% Set regularization parameter lambda to 1
+lambda = 1;
+
+% Compute and display initial cost and gradient for regularized logistic
+% regression
+[cost, grad] = costFunctionReg(initial_theta, X, y, lambda);
+
+fprintf('Cost at initial theta (zeros): %f\n', cost);
+
+fprintf('\nProgram paused. Press enter to continue.\n');
+pause;
+
+%% ============= Part 2: Regularization and Accuracies =============
+% Optional Exercise:
+% In this part, you will get to try different values of lambda and
+% see how regularization affects the decision coundart
+%
+% Try the following values of lambda (0, 1, 10, 100).
+%
+% How does the decision boundary change when you vary lambda? How does
+% the training set accuracy vary?
+%
+
+% Initialize fitting parameters
+initial_theta = zeros(size(X, 2), 1);
+
+% Set regularization parameter lambda to 1 (you should vary this)
+lambda = 1;
+
+% Set Options
+options = optimset('GradObj', 'on', 'MaxIter', 400);
+
+% Optimize
+[theta, J, exit_flag] = ...
+ fminunc(@(t)(costFunctionReg(t, X, y, lambda)), initial_theta, options);
+
+% Plot Boundary
+plotDecisionBoundary(theta, X, y);
+hold on;
+title(sprintf('lambda = %g', lambda))
+
+% Labels and Legend
+xlabel('Microchip Test 1')
+ylabel('Microchip Test 2')
+
+legend('y = 1', 'y = 0', 'Decision boundary')
+hold off;
+
+% Compute accuracy on our training set
+p = predict(theta, X);
+
+fprintf('Train Accuracy: %f\n', mean(double(p == y)) * 100);
+
+
diff --git a/machine_learning/mlclass-ex2-008/mlclass-ex2/ex2data1.txt b/machine_learning/mlclass-ex2-008/mlclass-ex2/ex2data1.txt
new file mode 100644
index 0000000..3a5f952
--- /dev/null
+++ b/machine_learning/mlclass-ex2-008/mlclass-ex2/ex2data1.txt
@@ -0,0 +1,100 @@
+34.62365962451697,78.0246928153624,0
+30.28671076822607,43.89499752400101,0
+35.84740876993872,72.90219802708364,0
+60.18259938620976,86.30855209546826,1
+79.0327360507101,75.3443764369103,1
+45.08327747668339,56.3163717815305,0
+61.10666453684766,96.51142588489624,1
+75.02474556738889,46.55401354116538,1
+76.09878670226257,87.42056971926803,1
+84.43281996120035,43.53339331072109,1
+95.86155507093572,38.22527805795094,0
+75.01365838958247,30.60326323428011,0
+82.30705337399482,76.48196330235604,1
+69.36458875970939,97.71869196188608,1
+39.53833914367223,76.03681085115882,0
+53.9710521485623,89.20735013750205,1
+69.07014406283025,52.74046973016765,1
+67.94685547711617,46.67857410673128,0
+70.66150955499435,92.92713789364831,1
+76.97878372747498,47.57596364975532,1
+67.37202754570876,42.83843832029179,0
+89.67677575072079,65.79936592745237,1
+50.534788289883,48.85581152764205,0
+34.21206097786789,44.20952859866288,0
+77.9240914545704,68.9723599933059,1
+62.27101367004632,69.95445795447587,1
+80.1901807509566,44.82162893218353,1
+93.114388797442,38.80067033713209,0
+61.83020602312595,50.25610789244621,0
+38.78580379679423,64.99568095539578,0
+61.379289447425,72.80788731317097,1
+85.40451939411645,57.05198397627122,1
+52.10797973193984,63.12762376881715,0
+52.04540476831827,69.43286012045222,1
+40.23689373545111,71.16774802184875,0
+54.63510555424817,52.21388588061123,0
+33.91550010906887,98.86943574220611,0
+64.17698887494485,80.90806058670817,1
+74.78925295941542,41.57341522824434,0
+34.1836400264419,75.2377203360134,0
+83.90239366249155,56.30804621605327,1
+51.54772026906181,46.85629026349976,0
+94.44336776917852,65.56892160559052,1
+82.36875375713919,40.61825515970618,0
+51.04775177128865,45.82270145776001,0
+62.22267576120188,52.06099194836679,0
+77.19303492601364,70.45820000180959,1
+97.77159928000232,86.7278223300282,1
+62.07306379667647,96.76882412413983,1
+91.56497449807442,88.69629254546599,1
+79.94481794066932,74.16311935043758,1
+99.2725269292572,60.99903099844988,1
+90.54671411399852,43.39060180650027,1
+34.52451385320009,60.39634245837173,0
+50.2864961189907,49.80453881323059,0
+49.58667721632031,59.80895099453265,0
+97.64563396007767,68.86157272420604,1
+32.57720016809309,95.59854761387875,0
+74.24869136721598,69.82457122657193,1
+71.79646205863379,78.45356224515052,1
+75.3956114656803,85.75993667331619,1
+35.28611281526193,47.02051394723416,0
+56.25381749711624,39.26147251058019,0
+30.05882244669796,49.59297386723685,0
+44.66826172480893,66.45008614558913,0
+66.56089447242954,41.09209807936973,0
+40.45755098375164,97.53518548909936,1
+49.07256321908844,51.88321182073966,0
+80.27957401466998,92.11606081344084,1
+66.74671856944039,60.99139402740988,1
+32.72283304060323,43.30717306430063,0
+64.0393204150601,78.03168802018232,1
+72.34649422579923,96.22759296761404,1
+60.45788573918959,73.09499809758037,1
+58.84095621726802,75.85844831279042,1
+99.82785779692128,72.36925193383885,1
+47.26426910848174,88.47586499559782,1
+50.45815980285988,75.80985952982456,1
+60.45555629271532,42.50840943572217,0
+82.22666157785568,42.71987853716458,0
+88.9138964166533,69.80378889835472,1
+94.83450672430196,45.69430680250754,1
+67.31925746917527,66.58935317747915,1
+57.23870631569862,59.51428198012956,1
+80.36675600171273,90.96014789746954,1
+68.46852178591112,85.59430710452014,1
+42.0754545384731,78.84478600148043,0
+75.47770200533905,90.42453899753964,1
+78.63542434898018,96.64742716885644,1
+52.34800398794107,60.76950525602592,0
+94.09433112516793,77.15910509073893,1
+90.44855097096364,87.50879176484702,1
+55.48216114069585,35.57070347228866,0
+74.49269241843041,84.84513684930135,1
+89.84580670720979,45.35828361091658,1
+83.48916274498238,48.38028579728175,1
+42.2617008099817,87.10385094025457,1
+99.31500880510394,68.77540947206617,1
+55.34001756003703,64.9319380069486,1
+74.77589300092767,89.52981289513276,1
diff --git a/machine_learning/mlclass-ex2-008/mlclass-ex2/ex2data2.txt b/machine_learning/mlclass-ex2-008/mlclass-ex2/ex2data2.txt
new file mode 100644
index 0000000..a888992
--- /dev/null
+++ b/machine_learning/mlclass-ex2-008/mlclass-ex2/ex2data2.txt
@@ -0,0 +1,118 @@
+0.051267,0.69956,1
+-0.092742,0.68494,1
+-0.21371,0.69225,1
+-0.375,0.50219,1
+-0.51325,0.46564,1
+-0.52477,0.2098,1
+-0.39804,0.034357,1
+-0.30588,-0.19225,1
+0.016705,-0.40424,1
+0.13191,-0.51389,1
+0.38537,-0.56506,1
+0.52938,-0.5212,1
+0.63882,-0.24342,1
+0.73675,-0.18494,1
+0.54666,0.48757,1
+0.322,0.5826,1
+0.16647,0.53874,1
+-0.046659,0.81652,1
+-0.17339,0.69956,1
+-0.47869,0.63377,1
+-0.60541,0.59722,1
+-0.62846,0.33406,1
+-0.59389,0.005117,1
+-0.42108,-0.27266,1
+-0.11578,-0.39693,1
+0.20104,-0.60161,1
+0.46601,-0.53582,1
+0.67339,-0.53582,1
+-0.13882,0.54605,1
+-0.29435,0.77997,1
+-0.26555,0.96272,1
+-0.16187,0.8019,1
+-0.17339,0.64839,1
+-0.28283,0.47295,1
+-0.36348,0.31213,1
+-0.30012,0.027047,1
+-0.23675,-0.21418,1
+-0.06394,-0.18494,1
+0.062788,-0.16301,1
+0.22984,-0.41155,1
+0.2932,-0.2288,1
+0.48329,-0.18494,1
+0.64459,-0.14108,1
+0.46025,0.012427,1
+0.6273,0.15863,1
+0.57546,0.26827,1
+0.72523,0.44371,1
+0.22408,0.52412,1
+0.44297,0.67032,1
+0.322,0.69225,1
+0.13767,0.57529,1
+-0.0063364,0.39985,1
+-0.092742,0.55336,1
+-0.20795,0.35599,1
+-0.20795,0.17325,1
+-0.43836,0.21711,1
+-0.21947,-0.016813,1
+-0.13882,-0.27266,1
+0.18376,0.93348,0
+0.22408,0.77997,0
+0.29896,0.61915,0
+0.50634,0.75804,0
+0.61578,0.7288,0
+0.60426,0.59722,0
+0.76555,0.50219,0
+0.92684,0.3633,0
+0.82316,0.27558,0
+0.96141,0.085526,0
+0.93836,0.012427,0
+0.86348,-0.082602,0
+0.89804,-0.20687,0
+0.85196,-0.36769,0
+0.82892,-0.5212,0
+0.79435,-0.55775,0
+0.59274,-0.7405,0
+0.51786,-0.5943,0
+0.46601,-0.41886,0
+0.35081,-0.57968,0
+0.28744,-0.76974,0
+0.085829,-0.75512,0
+0.14919,-0.57968,0
+-0.13306,-0.4481,0
+-0.40956,-0.41155,0
+-0.39228,-0.25804,0
+-0.74366,-0.25804,0
+-0.69758,0.041667,0
+-0.75518,0.2902,0
+-0.69758,0.68494,0
+-0.4038,0.70687,0
+-0.38076,0.91886,0
+-0.50749,0.90424,0
+-0.54781,0.70687,0
+0.10311,0.77997,0
+0.057028,0.91886,0
+-0.10426,0.99196,0
+-0.081221,1.1089,0
+0.28744,1.087,0
+0.39689,0.82383,0
+0.63882,0.88962,0
+0.82316,0.66301,0
+0.67339,0.64108,0
+1.0709,0.10015,0
+-0.046659,-0.57968,0
+-0.23675,-0.63816,0
+-0.15035,-0.36769,0
+-0.49021,-0.3019,0
+-0.46717,-0.13377,0
+-0.28859,-0.060673,0
+-0.61118,-0.067982,0
+-0.66302,-0.21418,0
+-0.59965,-0.41886,0
+-0.72638,-0.082602,0
+-0.83007,0.31213,0
+-0.72062,0.53874,0
+-0.59389,0.49488,0
+-0.48445,0.99927,0
+-0.0063364,0.99927,0
+0.63265,-0.030612,0
diff --git a/machine_learning/mlclass-ex2-008/mlclass-ex2/findmin.m b/machine_learning/mlclass-ex2-008/mlclass-ex2/findmin.m
new file mode 100644
index 0000000..33c34f9
--- /dev/null
+++ b/machine_learning/mlclass-ex2-008/mlclass-ex2/findmin.m
@@ -0,0 +1,28 @@
+function [theta,hist] = findmin(CF, X, y, theta, alpha, num_iters)
+%GRADIENTDESCENTMULTI Performs gradient descent to learn theta
+% theta = GRADIENTDESCENTMULTI(x, y, theta, alpha, num_iters) updates theta by
+% taking num_iters gradient steps with learning rate alpha
+
+hist = zeros(num_iters+1, length(theta));
+hist(1,:) = theta';
+
+for iter = 1:num_iters
+
+ % ====================== YOUR CODE HERE ======================
+ % Instructions: Perform a single gradient step on the parameter vector
+ % theta.
+ %
+ % Hint: While debugging, it can be useful to print out the values
+ % of the cost function (computeCostMulti) and gradient here.
+ %
+
+
+ [J,g] = CF( theta, X, y );
+
+ theta = theta - alpha * g;
+
+ hist(iter+1,:) = theta';
+
+end
+
+end
diff --git a/machine_learning/mlclass-ex2-008/mlclass-ex2/mapFeature.m b/machine_learning/mlclass-ex2-008/mlclass-ex2/mapFeature.m
new file mode 100644
index 0000000..d02a72a
--- /dev/null
+++ b/machine_learning/mlclass-ex2-008/mlclass-ex2/mapFeature.m
@@ -0,0 +1,21 @@
+function out = mapFeature(X1, X2)
+% MAPFEATURE Feature mapping function to polynomial features
+%
+% MAPFEATURE(X1, X2) maps the two input features
+% to quadratic features used in the regularization exercise.
+%
+% Returns a new feature array with more features, comprising of
+% X1, X2, X1.^2, X2.^2, X1*X2, X1*X2.^2, etc..
+%
+% Inputs X1, X2 must be the same size
+%
+
+degree = 6;
+out = ones(size(X1(:,1)));
+for i = 1:degree
+ for j = 0:i
+ out(:, end+1) = (X1.^(i-j)).*(X2.^j);
+ end
+end
+
+end
\ No newline at end of file
diff --git a/machine_learning/mlclass-ex2-008/mlclass-ex2/plotData.m b/machine_learning/mlclass-ex2-008/mlclass-ex2/plotData.m
new file mode 100644
index 0000000..5df9d3f
--- /dev/null
+++ b/machine_learning/mlclass-ex2-008/mlclass-ex2/plotData.m
@@ -0,0 +1,29 @@
+function plotData(X, y)
+%PLOTDATA Plots the data points X and y into a new figure
+% PLOTDATA(x,y) plots the data points with + for the positive examples
+% and o for the negative examples. X is assumed to be a Mx2 matrix.
+
+% Create New Figure
+figure; hold on;
+
+% ====================== YOUR CODE HERE ======================
+% Instructions: Plot the positive and negative examples on a
+% 2D plot, using the option 'k+' for the positive
+% examples and 'ko' for the negative examples.
+%
+
+
+
+
+
+
+
+
+
+% =========================================================================
+
+
+
+hold off;
+
+end
diff --git a/machine_learning/mlclass-ex2-008/mlclass-ex2/plotDecisionBoundary.m b/machine_learning/mlclass-ex2-008/mlclass-ex2/plotDecisionBoundary.m
new file mode 100644
index 0000000..cd36314
--- /dev/null
+++ b/machine_learning/mlclass-ex2-008/mlclass-ex2/plotDecisionBoundary.m
@@ -0,0 +1,48 @@
+function plotDecisionBoundary(theta, X, y)
+%PLOTDECISIONBOUNDARY Plots the data points X and y into a new figure with
+%the decision boundary defined by theta
+% PLOTDECISIONBOUNDARY(theta, X,y) plots the data points with + for the
+% positive examples and o for the negative examples. X is assumed to be
+% a either
+% 1) Mx3 matrix, where the first column is an all-ones column for the
+% intercept.
+% 2) MxN, N>3 matrix, where the first column is all-ones
+
+% Plot Data
+plotData(X(:,2:3), y);
+hold on
+
+if size(X, 2) <= 3
+ % Only need 2 points to define a line, so choose two endpoints
+ plot_x = [min(X(:,2))-2, max(X(:,2))+2];
+
+ % Calculate the decision boundary line
+ plot_y = (-1./theta(3)).*(theta(2).*plot_x + theta(1));
+
+ % Plot, and adjust axes for better viewing
+ plot(plot_x, plot_y)
+
+ % Legend, specific for the exercise
+ legend('Admitted', 'Not admitted', 'Decision Boundary')
+ axis([30, 100, 30, 100])
+else
+ % Here is the grid range
+ u = linspace(-1, 1.5, 50);
+ v = linspace(-1, 1.5, 50);
+
+ z = zeros(length(u), length(v));
+ % Evaluate z = theta*x over the grid
+ for i = 1:length(u)
+ for j = 1:length(v)
+ z(i,j) = mapFeature(u(i), v(j))*theta;
+ end
+ end
+ z = z'; % important to transpose z before calling contour
+
+ % Plot z = 0
+ % Notice you need to specify the range [0, 0]
+ contour(u, v, z, [0, 0], 'LineWidth', 2)
+end
+hold off
+
+end
diff --git a/machine_learning/mlclass-ex2-008/mlclass-ex2/predict.m b/machine_learning/mlclass-ex2-008/mlclass-ex2/predict.m
new file mode 100644
index 0000000..d52b360
--- /dev/null
+++ b/machine_learning/mlclass-ex2-008/mlclass-ex2/predict.m
@@ -0,0 +1,27 @@
+function p = predict(theta, X)
+%PREDICT Predict whether the label is 0 or 1 using learned logistic
+%regression parameters theta
+% p = PREDICT(theta, X) computes the predictions for X using a
+% threshold at 0.5 (i.e., if sigmoid(theta'*x) >= 0.5, predict 1)
+
+m = size(X, 1); % Number of training examples
+
+% You need to return the following variables correctly
+p = zeros(m, 1);
+
+% ====================== YOUR CODE HERE ======================
+% Instructions: Complete the following code to make predictions using
+% your learned logistic regression parameters.
+% You should set p to a vector of 0's and 1's
+%
+
+h = sigmoid( X*theta );
+p = round(h);
+
+
+
+
+% =========================================================================
+
+
+end
diff --git a/machine_learning/mlclass-ex2-008/mlclass-ex2/sigmoid.m b/machine_learning/mlclass-ex2-008/mlclass-ex2/sigmoid.m
new file mode 100644
index 0000000..f131b71
--- /dev/null
+++ b/machine_learning/mlclass-ex2-008/mlclass-ex2/sigmoid.m
@@ -0,0 +1,19 @@
+function g = sigmoid(z)
+%SIGMOID Compute sigmoid functoon
+% J = SIGMOID(z) computes the sigmoid of z.
+
+% You need to return the following variables correctly
+g = zeros(size(z));
+
+% ====================== YOUR CODE HERE ======================
+% Instructions: Compute the sigmoid of each value of z (z can be a matrix,
+% vector or scalar).
+
+
+g = ones(size(z)) ./ (ones(size(z)) + exp(-1*z));
+
+
+
+% =============================================================
+
+end
diff --git a/machine_learning/mlclass-ex2-008/mlclass-ex2/submit.m b/machine_learning/mlclass-ex2-008/mlclass-ex2/submit.m
new file mode 100644
index 0000000..2e76e6e
--- /dev/null
+++ b/machine_learning/mlclass-ex2-008/mlclass-ex2/submit.m
@@ -0,0 +1,574 @@
+function submit(partId, webSubmit)
+%SUBMIT Submit your code and output to the ml-class servers
+% SUBMIT() will connect to the ml-class server and submit your solution
+
+ fprintf('==\n== [ml-class] Submitting Solutions | Programming Exercise %s\n==\n', ...
+ homework_id());
+ if ~exist('partId', 'var') || isempty(partId)
+ partId = promptPart();
+ end
+
+ if ~exist('webSubmit', 'var') || isempty(webSubmit)
+ webSubmit = 0; % submit directly by default
+ end
+
+ % Check valid partId
+ partNames = validParts();
+ if ~isValidPartId(partId)
+ fprintf('!! Invalid homework part selected.\n');
+ fprintf('!! Expected an integer from 1 to %d.\n', numel(partNames) + 1);
+ fprintf('!! Submission Cancelled\n');
+ return
+ end
+
+ if ~exist('ml_login_data.mat','file')
+ [login password] = loginPrompt();
+ save('ml_login_data.mat','login','password');
+ else
+ load('ml_login_data.mat');
+ [login password] = quickLogin(login, password);
+ save('ml_login_data.mat','login','password');
+ end
+
+ if isempty(login)
+ fprintf('!! Submission Cancelled\n');
+ return
+ end
+
+ fprintf('\n== Connecting to ml-class ... ');
+ if exist('OCTAVE_VERSION')
+ fflush(stdout);
+ end
+
+ % Setup submit list
+ if partId == numel(partNames) + 1
+ submitParts = 1:numel(partNames);
+ else
+ submitParts = [partId];
+ end
+
+ for s = 1:numel(submitParts)
+ thisPartId = submitParts(s);
+ if (~webSubmit) % submit directly to server
+ [login, ch, signature, auxstring] = getChallenge(login, thisPartId);
+ if isempty(login) || isempty(ch) || isempty(signature)
+ % Some error occured, error string in first return element.
+ fprintf('\n!! Error: %s\n\n', login);
+ return
+ end
+
+ % Attempt Submission with Challenge
+ ch_resp = challengeResponse(login, password, ch);
+
+ [result, str] = submitSolution(login, ch_resp, thisPartId, ...
+ output(thisPartId, auxstring), source(thisPartId), signature);
+
+ partName = partNames{thisPartId};
+
+ fprintf('\n== [ml-class] Submitted Assignment %s - Part %d - %s\n', ...
+ homework_id(), thisPartId, partName);
+ fprintf('== %s\n', strtrim(str));
+
+ if exist('OCTAVE_VERSION')
+ fflush(stdout);
+ end
+ else
+ [result] = submitSolutionWeb(login, thisPartId, output(thisPartId), ...
+ source(thisPartId));
+ result = base64encode(result);
+
+ fprintf('\nSave as submission file [submit_ex%s_part%d.txt (enter to accept default)]:', ...
+ homework_id(), thisPartId);
+ saveAsFile = input('', 's');
+ if (isempty(saveAsFile))
+ saveAsFile = sprintf('submit_ex%s_part%d.txt', homework_id(), thisPartId);
+ end
+
+ fid = fopen(saveAsFile, 'w');
+ if (fid)
+ fwrite(fid, result);
+ fclose(fid);
+ fprintf('\nSaved your solutions to %s.\n\n', saveAsFile);
+ fprintf(['You can now submit your solutions through the web \n' ...
+ 'form in the programming exercises. Select the corresponding \n' ...
+ 'programming exercise to access the form.\n']);
+
+ else
+ fprintf('Unable to save to %s\n\n', saveAsFile);
+ fprintf(['You can create a submission file by saving the \n' ...
+ 'following text in a file: (press enter to continue)\n\n']);
+ pause;
+ fprintf(result);
+ end
+ end
+ end
+end
+
+% ================== CONFIGURABLES FOR EACH HOMEWORK ==================
+
+function id = homework_id()
+ id = '2';
+end
+
+function [partNames] = validParts()
+ partNames = { 'Sigmoid Function ', ...
+ 'Logistic Regression Cost', ...
+ 'Logistic Regression Gradient', ...
+ 'Predict', ...
+ 'Regularized Logistic Regression Cost' ...
+ 'Regularized Logistic Regression Gradient' ...
+ };
+end
+
+function srcs = sources()
+ % Separated by part
+ srcs = { { 'sigmoid.m' }, ...
+ { 'costFunction.m' }, ...
+ { 'costFunction.m' }, ...
+ { 'predict.m' }, ...
+ { 'costFunctionReg.m' }, ...
+ { 'costFunctionReg.m' } };
+end
+
+function out = output(partId, auxstring)
+ % Random Test Cases
+ X = [ones(20,1) (exp(1) * sin(1:1:20))' (exp(0.5) * cos(1:1:20))'];
+ y = sin(X(:,1) + X(:,2)) > 0;
+ if partId == 1
+ out = sprintf('%0.5f ', sigmoid(X));
+ elseif partId == 2
+ out = sprintf('%0.5f ', costFunction([0.25 0.5 -0.5]', X, y));
+ elseif partId == 3
+ [cost, grad] = costFunction([0.25 0.5 -0.5]', X, y);
+ out = sprintf('%0.5f ', grad);
+ elseif partId == 4
+ out = sprintf('%0.5f ', predict([0.25 0.5 -0.5]', X));
+ elseif partId == 5
+ out = sprintf('%0.5f ', costFunctionReg([0.25 0.5 -0.5]', X, y, 0.1));
+ elseif partId == 6
+ [cost, grad] = costFunctionReg([0.25 0.5 -0.5]', X, y, 0.1);
+ out = sprintf('%0.5f ', grad);
+ end
+end
+
+
+% ====================== SERVER CONFIGURATION ===========================
+
+% ***************** REMOVE -staging WHEN YOU DEPLOY *********************
+function url = site_url()
+ url = 'http://class.coursera.org/ml-008';
+end
+
+function url = challenge_url()
+ url = [site_url() '/assignment/challenge'];
+end
+
+function url = submit_url()
+ url = [site_url() '/assignment/submit'];
+end
+
+% ========================= CHALLENGE HELPERS =========================
+
+function src = source(partId)
+ src = '';
+ src_files = sources();
+ if partId <= numel(src_files)
+ flist = src_files{partId};
+ for i = 1:numel(flist)
+ fid = fopen(flist{i});
+ if (fid == -1)
+ error('Error opening %s (is it missing?)', flist{i});
+ end
+ line = fgets(fid);
+ while ischar(line)
+ src = [src line];
+ line = fgets(fid);
+ end
+ fclose(fid);
+ src = [src '||||||||'];
+ end
+ end
+end
+
+function ret = isValidPartId(partId)
+ partNames = validParts();
+ ret = (~isempty(partId)) && (partId >= 1) && (partId <= numel(partNames) + 1);
+end
+
+function partId = promptPart()
+ fprintf('== Select which part(s) to submit:\n');
+ partNames = validParts();
+ srcFiles = sources();
+ for i = 1:numel(partNames)
+ fprintf('== %d) %s [', i, partNames{i});
+ fprintf(' %s ', srcFiles{i}{:});
+ fprintf(']\n');
+ end
+ fprintf('== %d) All of the above \n==\nEnter your choice [1-%d]: ', ...
+ numel(partNames) + 1, numel(partNames) + 1);
+ selPart = input('', 's');
+ partId = str2num(selPart);
+ if ~isValidPartId(partId)
+ partId = -1;
+ end
+end
+
+function [email,ch,signature,auxstring] = getChallenge(email, part)
+ str = urlread(challenge_url(), 'post', {'email_address', email, 'assignment_part_sid', [homework_id() '-' num2str(part)], 'response_encoding', 'delim'});
+
+ str = strtrim(str);
+ r = struct;
+ while(numel(str) > 0)
+ [f, str] = strtok (str, '|');
+ [v, str] = strtok (str, '|');
+ r = setfield(r, f, v);
+ end
+
+ email = getfield(r, 'email_address');
+ ch = getfield(r, 'challenge_key');
+ signature = getfield(r, 'state');
+ auxstring = getfield(r, 'challenge_aux_data');
+end
+
+function [result, str] = submitSolutionWeb(email, part, output, source)
+
+ result = ['{"assignment_part_sid":"' base64encode([homework_id() '-' num2str(part)], '') '",' ...
+ '"email_address":"' base64encode(email, '') '",' ...
+ '"submission":"' base64encode(output, '') '",' ...
+ '"submission_aux":"' base64encode(source, '') '"' ...
+ '}'];
+ str = 'Web-submission';
+end
+
+function [result, str] = submitSolution(email, ch_resp, part, output, ...
+ source, signature)
+
+ params = {'assignment_part_sid', [homework_id() '-' num2str(part)], ...
+ 'email_address', email, ...
+ 'submission', base64encode(output, ''), ...
+ 'submission_aux', base64encode(source, ''), ...
+ 'challenge_response', ch_resp, ...
+ 'state', signature};
+
+ str = urlread(submit_url(), 'post', params);
+
+ % Parse str to read for success / failure
+ result = 0;
+
+end
+
+% =========================== LOGIN HELPERS ===========================
+
+function [login password] = loginPrompt()
+ % Prompt for password
+ [login password] = basicPrompt();
+
+ if isempty(login) || isempty(password)
+ login = []; password = [];
+ end
+end
+
+
+function [login password] = basicPrompt()
+ login = input('Login (Email address): ', 's');
+ password = input('Password: ', 's');
+end
+
+function [login password] = quickLogin(login,password)
+ disp(['You are currently logged in as ' login '.']);
+ cont_token = input('Is this you? (y/n - type n to reenter password)','s');
+ if(isempty(cont_token) || cont_token(1)=='Y'||cont_token(1)=='y')
+ return;
+ else
+ [login password] = loginPrompt();
+ end
+end
+
+function [str] = challengeResponse(email, passwd, challenge)
+ str = sha1([challenge passwd]);
+end
+
+% =============================== SHA-1 ================================
+
+function hash = sha1(str)
+
+ % Initialize variables
+ h0 = uint32(1732584193);
+ h1 = uint32(4023233417);
+ h2 = uint32(2562383102);
+ h3 = uint32(271733878);
+ h4 = uint32(3285377520);
+
+ % Convert to word array
+ strlen = numel(str);
+
+ % Break string into chars and append the bit 1 to the message
+ mC = [double(str) 128];
+ mC = [mC zeros(1, 4-mod(numel(mC), 4), 'uint8')];
+
+ numB = strlen * 8;
+ if exist('idivide')
+ numC = idivide(uint32(numB + 65), 512, 'ceil');
+ else
+ numC = ceil(double(numB + 65)/512);
+ end
+ numW = numC * 16;
+ mW = zeros(numW, 1, 'uint32');
+
+ idx = 1;
+ for i = 1:4:strlen + 1
+ mW(idx) = bitor(bitor(bitor( ...
+ bitshift(uint32(mC(i)), 24), ...
+ bitshift(uint32(mC(i+1)), 16)), ...
+ bitshift(uint32(mC(i+2)), 8)), ...
+ uint32(mC(i+3)));
+ idx = idx + 1;
+ end
+
+ % Append length of message
+ mW(numW - 1) = uint32(bitshift(uint64(numB), -32));
+ mW(numW) = uint32(bitshift(bitshift(uint64(numB), 32), -32));
+
+ % Process the message in successive 512-bit chs
+ for cId = 1 : double(numC)
+ cSt = (cId - 1) * 16 + 1;
+ cEnd = cId * 16;
+ ch = mW(cSt : cEnd);
+
+ % Extend the sixteen 32-bit words into eighty 32-bit words
+ for j = 17 : 80
+ ch(j) = ch(j - 3);
+ ch(j) = bitxor(ch(j), ch(j - 8));
+ ch(j) = bitxor(ch(j), ch(j - 14));
+ ch(j) = bitxor(ch(j), ch(j - 16));
+ ch(j) = bitrotate(ch(j), 1);
+ end
+
+ % Initialize hash value for this ch
+ a = h0;
+ b = h1;
+ c = h2;
+ d = h3;
+ e = h4;
+
+ % Main loop
+ for i = 1 : 80
+ if(i >= 1 && i <= 20)
+ f = bitor(bitand(b, c), bitand(bitcmp(b), d));
+ k = uint32(1518500249);
+ elseif(i >= 21 && i <= 40)
+ f = bitxor(bitxor(b, c), d);
+ k = uint32(1859775393);
+ elseif(i >= 41 && i <= 60)
+ f = bitor(bitor(bitand(b, c), bitand(b, d)), bitand(c, d));
+ k = uint32(2400959708);
+ elseif(i >= 61 && i <= 80)
+ f = bitxor(bitxor(b, c), d);
+ k = uint32(3395469782);
+ end
+
+ t = bitrotate(a, 5);
+ t = bitadd(t, f);
+ t = bitadd(t, e);
+ t = bitadd(t, k);
+ t = bitadd(t, ch(i));
+ e = d;
+ d = c;
+ c = bitrotate(b, 30);
+ b = a;
+ a = t;
+
+ end
+ h0 = bitadd(h0, a);
+ h1 = bitadd(h1, b);
+ h2 = bitadd(h2, c);
+ h3 = bitadd(h3, d);
+ h4 = bitadd(h4, e);
+
+ end
+
+ hash = reshape(dec2hex(double([h0 h1 h2 h3 h4]), 8)', [1 40]);
+
+ hash = lower(hash);
+
+end
+
+function ret = bitadd(iA, iB)
+ ret = double(iA) + double(iB);
+ ret = bitset(ret, 33, 0);
+ ret = uint32(ret);
+end
+
+function ret = bitrotate(iA, places)
+ t = bitshift(iA, places - 32);
+ ret = bitshift(iA, places);
+ ret = bitor(ret, t);
+end
+
+% =========================== Base64 Encoder ============================
+% Thanks to Peter John Acklam
+%
+
+function y = base64encode(x, eol)
+%BASE64ENCODE Perform base64 encoding on a string.
+%
+% BASE64ENCODE(STR, EOL) encode the given string STR. EOL is the line ending
+% sequence to use; it is optional and defaults to '\n' (ASCII decimal 10).
+% The returned encoded string is broken into lines of no more than 76
+% characters each, and each line will end with EOL unless it is empty. Let
+% EOL be empty if you do not want the encoded string broken into lines.
+%
+% STR and EOL don't have to be strings (i.e., char arrays). The only
+% requirement is that they are vectors containing values in the range 0-255.
+%
+% This function may be used to encode strings into the Base64 encoding
+% specified in RFC 2045 - MIME (Multipurpose Internet Mail Extensions). The
+% Base64 encoding is designed to represent arbitrary sequences of octets in a
+% form that need not be humanly readable. A 65-character subset
+% ([A-Za-z0-9+/=]) of US-ASCII is used, enabling 6 bits to be represented per
+% printable character.
+%
+% Examples
+% --------
+%
+% If you want to encode a large file, you should encode it in chunks that are
+% a multiple of 57 bytes. This ensures that the base64 lines line up and
+% that you do not end up with padding in the middle. 57 bytes of data fills
+% one complete base64 line (76 == 57*4/3):
+%
+% If ifid and ofid are two file identifiers opened for reading and writing,
+% respectively, then you can base64 encode the data with
+%
+% while ~feof(ifid)
+% fwrite(ofid, base64encode(fread(ifid, 60*57)));
+% end
+%
+% or, if you have enough memory,
+%
+% fwrite(ofid, base64encode(fread(ifid)));
+%
+% See also BASE64DECODE.
+
+% Author: Peter John Acklam
+% Time-stamp: 2004-02-03 21:36:56 +0100
+% E-mail: pjacklam@online.no
+% URL: http://home.online.no/~pjacklam
+
+ if isnumeric(x)
+ x = num2str(x);
+ end
+
+ % make sure we have the EOL value
+ if nargin < 2
+ eol = sprintf('\n');
+ else
+ if sum(size(eol) > 1) > 1
+ error('EOL must be a vector.');
+ end
+ if any(eol(:) > 255)
+ error('EOL can not contain values larger than 255.');
+ end
+ end
+
+ if sum(size(x) > 1) > 1
+ error('STR must be a vector.');
+ end
+
+ x = uint8(x);
+ eol = uint8(eol);
+
+ ndbytes = length(x); % number of decoded bytes
+ nchunks = ceil(ndbytes / 3); % number of chunks/groups
+ nebytes = 4 * nchunks; % number of encoded bytes
+
+ % add padding if necessary, to make the length of x a multiple of 3
+ if rem(ndbytes, 3)
+ x(end+1 : 3*nchunks) = 0;
+ end
+
+ x = reshape(x, [3, nchunks]); % reshape the data
+ y = repmat(uint8(0), 4, nchunks); % for the encoded data
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Split up every 3 bytes into 4 pieces
+ %
+ % aaaaaabb bbbbcccc ccdddddd
+ %
+ % to form
+ %
+ % 00aaaaaa 00bbbbbb 00cccccc 00dddddd
+ %
+ y(1,:) = bitshift(x(1,:), -2); % 6 highest bits of x(1,:)
+
+ y(2,:) = bitshift(bitand(x(1,:), 3), 4); % 2 lowest bits of x(1,:)
+ y(2,:) = bitor(y(2,:), bitshift(x(2,:), -4)); % 4 highest bits of x(2,:)
+
+ y(3,:) = bitshift(bitand(x(2,:), 15), 2); % 4 lowest bits of x(2,:)
+ y(3,:) = bitor(y(3,:), bitshift(x(3,:), -6)); % 2 highest bits of x(3,:)
+
+ y(4,:) = bitand(x(3,:), 63); % 6 lowest bits of x(3,:)
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Now perform the following mapping
+ %
+ % 0 - 25 -> A-Z
+ % 26 - 51 -> a-z
+ % 52 - 61 -> 0-9
+ % 62 -> +
+ % 63 -> /
+ %
+ % We could use a mapping vector like
+ %
+ % ['A':'Z', 'a':'z', '0':'9', '+/']
+ %
+ % but that would require an index vector of class double.
+ %
+ z = repmat(uint8(0), size(y));
+ i = y <= 25; z(i) = 'A' + double(y(i));
+ i = 26 <= y & y <= 51; z(i) = 'a' - 26 + double(y(i));
+ i = 52 <= y & y <= 61; z(i) = '0' - 52 + double(y(i));
+ i = y == 62; z(i) = '+';
+ i = y == 63; z(i) = '/';
+ y = z;
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Add padding if necessary.
+ %
+ npbytes = 3 * nchunks - ndbytes; % number of padding bytes
+ if npbytes
+ y(end-npbytes+1 : end) = '='; % '=' is used for padding
+ end
+
+ if isempty(eol)
+
+ % reshape to a row vector
+ y = reshape(y, [1, nebytes]);
+
+ else
+
+ nlines = ceil(nebytes / 76); % number of lines
+ neolbytes = length(eol); % number of bytes in eol string
+
+ % pad data so it becomes a multiple of 76 elements
+ y = [y(:) ; zeros(76 * nlines - numel(y), 1)];
+ y(nebytes + 1 : 76 * nlines) = 0;
+ y = reshape(y, 76, nlines);
+
+ % insert eol strings
+ eol = eol(:);
+ y(end + 1 : end + neolbytes, :) = eol(:, ones(1, nlines));
+
+ % remove padding, but keep the last eol string
+ m = nebytes + neolbytes * (nlines - 1);
+ n = (76+neolbytes)*nlines - neolbytes;
+ y(m+1 : n) = '';
+
+ % extract and reshape to row vector
+ y = reshape(y, 1, m+neolbytes);
+
+ end
+
+ % output is a character array
+ y = char(y);
+
+end
diff --git a/machine_learning/mlclass-ex2-008/mlclass-ex2/submitWeb.m b/machine_learning/mlclass-ex2-008/mlclass-ex2/submitWeb.m
new file mode 100644
index 0000000..8611707
--- /dev/null
+++ b/machine_learning/mlclass-ex2-008/mlclass-ex2/submitWeb.m
@@ -0,0 +1,20 @@
+% submitWeb Creates files from your code and output for web submission.
+%
+% If the submit function does not work for you, use the web-submission mechanism.
+% Call this function to produce a file for the part you wish to submit. Then,
+% submit the file to the class servers using the "Web Submission" button on the
+% Programming Exercises page on the course website.
+%
+% You should call this function without arguments (submitWeb), to receive
+% an interactive prompt for submission; optionally you can call it with the partID
+% if you so wish. Make sure your working directory is set to the directory
+% containing the submitWeb.m file and your assignment files.
+
+function submitWeb(partId)
+ if ~exist('partId', 'var') || isempty(partId)
+ partId = [];
+ end
+
+ submit(partId, 1);
+end
+
diff --git a/machine_learning/mlclass-ex3-008/ex3.pdf b/machine_learning/mlclass-ex3-008/ex3.pdf
new file mode 100644
index 0000000..bac0f5f
Binary files /dev/null and b/machine_learning/mlclass-ex3-008/ex3.pdf differ
diff --git a/machine_learning/mlclass-ex3-008/mlclass-ex3/displayData.m b/machine_learning/mlclass-ex3-008/mlclass-ex3/displayData.m
new file mode 100644
index 0000000..160697e
--- /dev/null
+++ b/machine_learning/mlclass-ex3-008/mlclass-ex3/displayData.m
@@ -0,0 +1,59 @@
+function [h, display_array] = displayData(X, example_width)
+%DISPLAYDATA Display 2D data in a nice grid
+% [h, display_array] = DISPLAYDATA(X, example_width) displays 2D data
+% stored in X in a nice grid. It returns the figure handle h and the
+% displayed array if requested.
+
+% Set example_width automatically if not passed in
+if ~exist('example_width', 'var') || isempty(example_width)
+ example_width = round(sqrt(size(X, 2)));
+end
+
+% Gray Image
+colormap(gray);
+
+% Compute rows, cols
+[m n] = size(X);
+example_height = (n / example_width);
+
+% Compute number of items to display
+display_rows = floor(sqrt(m));
+display_cols = ceil(m / display_rows);
+
+% Between images padding
+pad = 1;
+
+% Setup blank display
+display_array = - ones(pad + display_rows * (example_height + pad), ...
+ pad + display_cols * (example_width + pad));
+
+% Copy each example into a patch on the display array
+curr_ex = 1;
+for j = 1:display_rows
+ for i = 1:display_cols
+ if curr_ex > m,
+ break;
+ end
+ % Copy the patch
+
+ % Get the max value of the patch
+ max_val = max(abs(X(curr_ex, :)));
+ display_array(pad + (j - 1) * (example_height + pad) + (1:example_height), ...
+ pad + (i - 1) * (example_width + pad) + (1:example_width)) = ...
+ reshape(X(curr_ex, :), example_height, example_width) / max_val;
+ curr_ex = curr_ex + 1;
+ end
+ if curr_ex > m,
+ break;
+ end
+end
+
+% Display Image
+h = imagesc(display_array, [-1 1]);
+
+% Do not show axis
+axis image off
+
+drawnow;
+
+end
diff --git a/machine_learning/mlclass-ex3-008/mlclass-ex3/ex3.m b/machine_learning/mlclass-ex3-008/mlclass-ex3/ex3.m
new file mode 100644
index 0000000..5ea40bd
--- /dev/null
+++ b/machine_learning/mlclass-ex3-008/mlclass-ex3/ex3.m
@@ -0,0 +1,69 @@
+%% Machine Learning Online Class - Exercise 3 | Part 1: One-vs-all
+
+% Instructions
+% ------------
+%
+% This file contains code that helps you get started on the
+% linear exercise. You will need to complete the following functions
+% in this exericse:
+%
+% lrCostFunction.m (logistic regression cost function)
+% oneVsAll.m
+% predictOneVsAll.m
+% predict.m
+%
+% For this exercise, you will not need to change any code in this file,
+% or any other files other than those mentioned above.
+%
+
+%% Initialization
+clear ; close all; clc
+
+%% Setup the parameters you will use for this part of the exercise
+input_layer_size = 400; % 20x20 Input Images of Digits
+num_labels = 10; % 10 labels, from 1 to 10
+ % (note that we have mapped "0" to label 10)
+
+%% =========== Part 1: Loading and Visualizing Data =============
+% We start the exercise by first loading and visualizing the dataset.
+% You will be working with a dataset that contains handwritten digits.
+%
+
+% Load Training Data
+fprintf('Loading and Visualizing Data ...\n')
+
+load('ex3data1.mat'); % training data stored in arrays X, y
+m = size(X, 1);
+
+% Randomly select 100 data points to display
+rand_indices = randperm(m);
+sel = X(rand_indices(1:100), :);
+
+%displayData(sel);
+
+fprintf('Program paused. Press enter to continue.\n');
+pause;
+
+%% ============ Part 2: Vectorize Logistic Regression ============
+% In this part of the exercise, you will reuse your logistic regression
+% code from the last exercise. You task here is to make sure that your
+% regularized logistic regression implementation is vectorized. After
+% that, you will implement one-vs-all classification for the handwritten
+% digit dataset.
+%
+
+fprintf('\nTraining One-vs-All Logistic Regression...\n')
+
+lambda = 0.1;
+[all_theta] = oneVsAll(X, y, num_labels, lambda);
+
+fprintf('Program paused. Press enter to continue.\n');
+pause;
+
+
+%% ================ Part 3: Predict for One-Vs-All ================
+% After ...
+pred = predictOneVsAll(all_theta, X);
+
+fprintf('\nTraining Set Accuracy: %f\n', mean(double(pred == y)) * 100);
+
diff --git a/machine_learning/mlclass-ex3-008/mlclass-ex3/ex3_nn.m b/machine_learning/mlclass-ex3-008/mlclass-ex3/ex3_nn.m
new file mode 100644
index 0000000..073bc4d
--- /dev/null
+++ b/machine_learning/mlclass-ex3-008/mlclass-ex3/ex3_nn.m
@@ -0,0 +1,88 @@
+%% Machine Learning Online Class - Exercise 3 | Part 2: Neural Networks
+
+% Instructions
+% ------------
+%
+% This file contains code that helps you get started on the
+% linear exercise. You will need to complete the following functions
+% in this exericse:
+%
+% lrCostFunction.m (logistic regression cost function)
+% oneVsAll.m
+% predictOneVsAll.m
+% predict.m
+%
+% For this exercise, you will not need to change any code in this file,
+% or any other files other than those mentioned above.
+%
+
+%% Initialization
+clear ; close all; clc
+
+%% Setup the parameters you will use for this exercise
+input_layer_size = 400; % 20x20 Input Images of Digits
+hidden_layer_size = 25; % 25 hidden units
+num_labels = 10; % 10 labels, from 1 to 10
+ % (note that we have mapped "0" to label 10)
+
+%% =========== Part 1: Loading and Visualizing Data =============
+% We start the exercise by first loading and visualizing the dataset.
+% You will be working with a dataset that contains handwritten digits.
+%
+
+% Load Training Data
+fprintf('Loading and Visualizing Data ...\n')
+
+load('ex3data1.mat');
+m = size(X, 1);
+
+% Randomly select 100 data points to display
+sel = randperm(size(X, 1));
+sel = sel(1:100);
+
+displayData(X(sel, :));
+
+fprintf('Program paused. Press enter to continue.\n');
+pause;
+
+%% ================ Part 2: Loading Pameters ================
+% In this part of the exercise, we load some pre-initialized
+% neural network parameters.
+
+fprintf('\nLoading Saved Neural Network Parameters ...\n')
+
+% Load the weights into variables Theta1 and Theta2
+load('ex3weights.mat');
+
+%% ================= Part 3: Implement Predict =================
+% After training the neural network, we would like to use it to predict
+% the labels. You will now implement the "predict" function to use the
+% neural network to predict the labels of the training set. This lets
+% you compute the training set accuracy.
+
+pred = predict(Theta1, Theta2, X);
+
+fprintf('\nTraining Set Accuracy: %f\n', mean(double(pred == y)) * 100);
+
+fprintf('Program paused. Press enter to continue.\n');
+pause;
+
+% To give you an idea of the network's output, you can also run
+% through the examples one at the a time to see what it is predicting.
+
+% Randomly permute examples
+rp = randperm(m);
+
+for i = 1:m
+ % Display
+ fprintf('\nDisplaying Example Image\n');
+ displayData(X(rp(i), :));
+
+ pred = predict(Theta1, Theta2, X(rp(i),:));
+ fprintf('\nNeural Network Prediction: %d (digit %d)\n', pred, mod(pred, 10));
+
+ % Pause
+ fprintf('Program paused. Press enter to continue.\n');
+ pause;
+end
+
diff --git a/machine_learning/mlclass-ex3-008/mlclass-ex3/ex3data1.mat b/machine_learning/mlclass-ex3-008/mlclass-ex3/ex3data1.mat
new file mode 100644
index 0000000..371bd0c
Binary files /dev/null and b/machine_learning/mlclass-ex3-008/mlclass-ex3/ex3data1.mat differ
diff --git a/machine_learning/mlclass-ex3-008/mlclass-ex3/ex3weights.mat b/machine_learning/mlclass-ex3-008/mlclass-ex3/ex3weights.mat
new file mode 100644
index 0000000..ace2a09
Binary files /dev/null and b/machine_learning/mlclass-ex3-008/mlclass-ex3/ex3weights.mat differ
diff --git a/machine_learning/mlclass-ex3-008/mlclass-ex3/fmincg.m b/machine_learning/mlclass-ex3-008/mlclass-ex3/fmincg.m
new file mode 100644
index 0000000..34bf539
--- /dev/null
+++ b/machine_learning/mlclass-ex3-008/mlclass-ex3/fmincg.m
@@ -0,0 +1,175 @@
+function [X, fX, i] = fmincg(f, X, options, P1, P2, P3, P4, P5)
+% Minimize a continuous differentialble multivariate function. Starting point
+% is given by "X" (D by 1), and the function named in the string "f", must
+% return a function value and a vector of partial derivatives. The Polack-
+% Ribiere flavour of conjugate gradients is used to compute search directions,
+% and a line search using quadratic and cubic polynomial approximations and the
+% Wolfe-Powell stopping criteria is used together with the slope ratio method
+% for guessing initial step sizes. Additionally a bunch of checks are made to
+% make sure that exploration is taking place and that extrapolation will not
+% be unboundedly large. The "length" gives the length of the run: if it is
+% positive, it gives the maximum number of line searches, if negative its
+% absolute gives the maximum allowed number of function evaluations. You can
+% (optionally) give "length" a second component, which will indicate the
+% reduction in function value to be expected in the first line-search (defaults
+% to 1.0). The function returns when either its length is up, or if no further
+% progress can be made (ie, we are at a minimum, or so close that due to
+% numerical problems, we cannot get any closer). If the function terminates
+% within a few iterations, it could be an indication that the function value
+% and derivatives are not consistent (ie, there may be a bug in the
+% implementation of your "f" function). The function returns the found
+% solution "X", a vector of function values "fX" indicating the progress made
+% and "i" the number of iterations (line searches or function evaluations,
+% depending on the sign of "length") used.
+%
+% Usage: [X, fX, i] = fmincg(f, X, options, P1, P2, P3, P4, P5)
+%
+% See also: checkgrad
+%
+% Copyright (C) 2001 and 2002 by Carl Edward Rasmussen. Date 2002-02-13
+%
+%
+% (C) Copyright 1999, 2000 & 2001, Carl Edward Rasmussen
+%
+% Permission is granted for anyone to copy, use, or modify these
+% programs and accompanying documents for purposes of research or
+% education, provided this copyright notice is retained, and note is
+% made of any changes that have been made.
+%
+% These programs and documents are distributed without any warranty,
+% express or implied. As the programs were written for research
+% purposes only, they have not been tested to the degree that would be
+% advisable in any important application. All use of these programs is
+% entirely at the user's own risk.
+%
+% [ml-class] Changes Made:
+% 1) Function name and argument specifications
+% 2) Output display
+%
+
+% Read options
+if exist('options', 'var') && ~isempty(options) && isfield(options, 'MaxIter')
+ length = options.MaxIter;
+else
+ length = 100;
+end
+
+
+RHO = 0.01; % a bunch of constants for line searches
+SIG = 0.5; % RHO and SIG are the constants in the Wolfe-Powell conditions
+INT = 0.1; % don't reevaluate within 0.1 of the limit of the current bracket
+EXT = 3.0; % extrapolate maximum 3 times the current bracket
+MAX = 20; % max 20 function evaluations per line search
+RATIO = 100; % maximum allowed slope ratio
+
+argstr = ['feval(f, X']; % compose string used to call function
+for i = 1:(nargin - 3)
+ argstr = [argstr, ',P', int2str(i)];
+end
+argstr = [argstr, ')'];
+
+if max(size(length)) == 2, red=length(2); length=length(1); else red=1; end
+S=['Iteration '];
+
+i = 0; % zero the run length counter
+ls_failed = 0; % no previous line search has failed
+fX = [];
+[f1 df1] = eval(argstr); % get function value and gradient
+i = i + (length<0); % count epochs?!
+s = -df1; % search direction is steepest
+d1 = -s'*s; % this is the slope
+z1 = red/(1-d1); % initial step is red/(|s|+1)
+
+while i < abs(length) % while not finished
+ i = i + (length>0); % count iterations?!
+
+ X0 = X; f0 = f1; df0 = df1; % make a copy of current values
+ X = X + z1*s; % begin line search
+ [f2 df2] = eval(argstr);
+ i = i + (length<0); % count epochs?!
+ d2 = df2'*s;
+ f3 = f1; d3 = d1; z3 = -z1; % initialize point 3 equal to point 1
+ if length>0, M = MAX; else M = min(MAX, -length-i); end
+ success = 0; limit = -1; % initialize quanteties
+ while 1
+ while ((f2 > f1+z1*RHO*d1) | (d2 > -SIG*d1)) & (M > 0)
+ limit = z1; % tighten the bracket
+ if f2 > f1
+ z2 = z3 - (0.5*d3*z3*z3)/(d3*z3+f2-f3); % quadratic fit
+ else
+ A = 6*(f2-f3)/z3+3*(d2+d3); % cubic fit
+ B = 3*(f3-f2)-z3*(d3+2*d2);
+ z2 = (sqrt(B*B-A*d2*z3*z3)-B)/A; % numerical error possible - ok!
+ end
+ if isnan(z2) | isinf(z2)
+ z2 = z3/2; % if we had a numerical problem then bisect
+ end
+ z2 = max(min(z2, INT*z3),(1-INT)*z3); % don't accept too close to limits
+ z1 = z1 + z2; % update the step
+ X = X + z2*s;
+ [f2 df2] = eval(argstr);
+ M = M - 1; i = i + (length<0); % count epochs?!
+ d2 = df2'*s;
+ z3 = z3-z2; % z3 is now relative to the location of z2
+ end
+ if f2 > f1+z1*RHO*d1 | d2 > -SIG*d1
+ break; % this is a failure
+ elseif d2 > SIG*d1
+ success = 1; break; % success
+ elseif M == 0
+ break; % failure
+ end
+ A = 6*(f2-f3)/z3+3*(d2+d3); % make cubic extrapolation
+ B = 3*(f3-f2)-z3*(d3+2*d2);
+ z2 = -d2*z3*z3/(B+sqrt(B*B-A*d2*z3*z3)); % num. error possible - ok!
+ if ~isreal(z2) | isnan(z2) | isinf(z2) | z2 < 0 % num prob or wrong sign?
+ if limit < -0.5 % if we have no upper limit
+ z2 = z1 * (EXT-1); % the extrapolate the maximum amount
+ else
+ z2 = (limit-z1)/2; % otherwise bisect
+ end
+ elseif (limit > -0.5) & (z2+z1 > limit) % extraplation beyond max?
+ z2 = (limit-z1)/2; % bisect
+ elseif (limit < -0.5) & (z2+z1 > z1*EXT) % extrapolation beyond limit
+ z2 = z1*(EXT-1.0); % set to extrapolation limit
+ elseif z2 < -z3*INT
+ z2 = -z3*INT;
+ elseif (limit > -0.5) & (z2 < (limit-z1)*(1.0-INT)) % too close to limit?
+ z2 = (limit-z1)*(1.0-INT);
+ end
+ f3 = f2; d3 = d2; z3 = -z2; % set point 3 equal to point 2
+ z1 = z1 + z2; X = X + z2*s; % update current estimates
+ [f2 df2] = eval(argstr);
+ M = M - 1; i = i + (length<0); % count epochs?!
+ d2 = df2'*s;
+ end % end of line search
+
+ if success % if line search succeeded
+ f1 = f2; fX = [fX' f1]';
+ fprintf('%s %4i | Cost: %4.6e\r', S, i, f1);
+ s = (df2'*df2-df1'*df2)/(df1'*df1)*s - df2; % Polack-Ribiere direction
+ tmp = df1; df1 = df2; df2 = tmp; % swap derivatives
+ d2 = df1'*s;
+ if d2 > 0 % new slope must be negative
+ s = -df1; % otherwise use steepest direction
+ d2 = -s'*s;
+ end
+ z1 = z1 * min(RATIO, d1/(d2-realmin)); % slope ratio but max RATIO
+ d1 = d2;
+ ls_failed = 0; % this line search did not fail
+ else
+ X = X0; f1 = f0; df1 = df0; % restore point from before failed line search
+ if ls_failed | i > abs(length) % line search failed twice in a row
+ break; % or we ran out of time, so we give up
+ end
+ tmp = df1; df1 = df2; df2 = tmp; % swap derivatives
+ s = -df1; % try steepest
+ d1 = -s'*s;
+ z1 = 1/(1-d1);
+ ls_failed = 1; % this line search failed
+ end
+ if exist('OCTAVE_VERSION')
+ fflush(stdout);
+ end
+end
+fprintf('\n');
diff --git a/machine_learning/mlclass-ex3-008/mlclass-ex3/lrCostFunction.m b/machine_learning/mlclass-ex3-008/mlclass-ex3/lrCostFunction.m
new file mode 100644
index 0000000..7fd3f7f
--- /dev/null
+++ b/machine_learning/mlclass-ex3-008/mlclass-ex3/lrCostFunction.m
@@ -0,0 +1,58 @@
+function [J, grad] = lrCostFunction(theta, X, y, lambda)
+%LRCOSTFUNCTION Compute cost and gradient for logistic regression with
+%regularization
+% J = LRCOSTFUNCTION(theta, X, y, lambda) computes the cost of using
+% theta as the parameter for regularized logistic regression and the
+% gradient of the cost w.r.t. to the parameters.
+
+% Initialize some useful values
+m = length(y); % number of training examples
+
+% You need to return the following variables correctly
+J = 0;
+grad = zeros(size(theta));
+
+% ====================== YOUR CODE HERE ======================
+% Instructions: Compute the cost of a particular choice of theta.
+% You should set J to the cost.
+% Compute the partial derivatives and set grad to the partial
+% derivatives of the cost w.r.t. each parameter in theta
+%
+% Hint: The computation of the cost function and gradients can be
+% efficiently vectorized. For example, consider the computation
+%
+% sigmoid(X * theta)
+%
+% Each row of the resulting matrix will contain the value of the
+% prediction for that example. You can make use of this to vectorize
+% the cost function and gradient computations.
+%
+% Hint: When computing the gradient of the regularized cost function,
+% there're many possible vectorized solutions, but one solution
+% looks like:
+% grad = (unregularized gradient for logistic regression)
+% temp = theta;
+% temp(1) = 0; % because we don't add anything for j = 0
+% grad = grad + YOUR_CODE_HERE (using the temp variable)
+%
+
+
+h = sigmoid( X*theta );
+o = ones(size(y));
+reg = theta;
+reg(1) = 0;
+J = sum( y .* log(h) + (o-y) .* log(o-h) ) / (-m) + (lambda/(2*m))*sum(reg.^2);
+grad = (X'*(h - y)) / m + (lambda/m) * reg;
+
+
+
+
+
+
+
+
+% =============================================================
+
+grad = grad(:);
+
+end
diff --git a/machine_learning/mlclass-ex3-008/mlclass-ex3/oneVsAll.m b/machine_learning/mlclass-ex3-008/mlclass-ex3/oneVsAll.m
new file mode 100644
index 0000000..96d10aa
--- /dev/null
+++ b/machine_learning/mlclass-ex3-008/mlclass-ex3/oneVsAll.m
@@ -0,0 +1,70 @@
+function [all_theta] = oneVsAll(X, y, num_labels, lambda)
+%ONEVSALL trains multiple logistic regression classifiers and returns all
+%the classifiers in a matrix all_theta, where the i-th row of all_theta
+%corresponds to the classifier for label i
+% [all_theta] = ONEVSALL(X, y, num_labels, lambda) trains num_labels
+% logisitc regression classifiers and returns each of these classifiers
+% in a matrix all_theta, where the i-th row of all_theta corresponds
+% to the classifier for label i
+
+% Some useful variables
+m = size(X, 1);
+n = size(X, 2);
+
+% You need to return the following variables correctly
+all_theta = zeros(num_labels, n + 1);
+
+% Add ones to the X data matrix
+X = [ones(m, 1) X];
+
+% ====================== YOUR CODE HERE ======================
+% Instructions: You should complete the following code to train num_labels
+% logistic regression classifiers with regularization
+% parameter lambda.
+%
+% Hint: theta(:) will return a column vector.
+%
+% Hint: You can use y == c to obtain a vector of 1's and 0's that tell use
+% whether the ground truth is true/false for this class.
+%
+% Note: For this assignment, we recommend using fmincg to optimize the cost
+% function. It is okay to use a for-loop (for c = 1:num_labels) to
+% loop over the different classes.
+%
+% fmincg works similarly to fminunc, but is more efficient when we
+% are dealing with large number of parameters.
+%
+% Example Code for fmincg:
+%
+% % Set Initial theta
+% initial_theta = zeros(n + 1, 1);
+%
+% % Set options for fminunc
+% options = optimset('GradObj', 'on', 'MaxIter', 50);
+%
+% % Run fmincg to obtain the optimal theta
+% % This function will return theta and the cost
+% [theta] = ...
+% fmincg (@(t)(lrCostFunction(t, X, (y == c), lambda)), ...
+% initial_theta, options);
+%
+
+options = optimset('GradObj', 'on', 'MaxIter', 50);
+initial_theta = zeros(n + 1, 1);
+
+for c = 1:num_labels,
+
+
+theta = fmincg (@(t)(lrCostFunction(t, X, (y == c), lambda)), initial_theta, options);
+all_theta(c,:) = theta;
+
+end;
+
+
+
+
+
+% =========================================================================
+
+
+end
diff --git a/machine_learning/mlclass-ex3-008/mlclass-ex3/predict.m b/machine_learning/mlclass-ex3-008/mlclass-ex3/predict.m
new file mode 100644
index 0000000..c326fa3
--- /dev/null
+++ b/machine_learning/mlclass-ex3-008/mlclass-ex3/predict.m
@@ -0,0 +1,33 @@
+function p = predict(Theta1, Theta2, X)
+%PREDICT Predict the label of an input given a trained neural network
+% p = PREDICT(Theta1, Theta2, X) outputs the predicted label of X given the
+% trained weights of a neural network (Theta1, Theta2)
+
+% Useful values
+m = size(X, 1);
+num_labels = size(Theta2, 1);
+
+% You need to return the following variables correctly
+p = zeros(size(X, 1), 1);
+
+% ====================== YOUR CODE HERE ======================
+% Instructions: Complete the following code to make predictions using
+% your learned neural network. You should set p to a
+% vector containing labels between 1 to num_labels.
+%
+% Hint: The max function might come in useful. In particular, the max
+% function can also return the index of the max element, for more
+% information see 'help max'. If your examples are in rows, then, you
+% can use max(A, [], 2) to obtain the max for each row.
+%
+
+X = [ones(m, 1) X];
+a2 = [ones(m,1) sigmoid(X*Theta1')];
+a3 = sigmoid(a2*Theta2');
+
+[m, p] = max( a3, [], 2 );
+
+% =========================================================================
+
+
+end
diff --git a/machine_learning/mlclass-ex3-008/mlclass-ex3/predictOneVsAll.m b/machine_learning/mlclass-ex3-008/mlclass-ex3/predictOneVsAll.m
new file mode 100644
index 0000000..ad553da
--- /dev/null
+++ b/machine_learning/mlclass-ex3-008/mlclass-ex3/predictOneVsAll.m
@@ -0,0 +1,39 @@
+function p = predictOneVsAll(all_theta, X)
+%PREDICT Predict the label for a trained one-vs-all classifier. The labels
+%are in the range 1..K, where K = size(all_theta, 1).
+% p = PREDICTONEVSALL(all_theta, X) will return a vector of predictions
+% for each example in the matrix X. Note that X contains the examples in
+% rows. all_theta is a matrix where the i-th row is a trained logistic
+% regression theta vector for the i-th class. You should set p to a vector
+% of values from 1..K (e.g., p = [1; 3; 1; 2] predicts classes 1, 3, 1, 2
+% for 4 examples)
+
+m = size(X, 1);
+num_labels = size(all_theta, 1);
+
+% You need to return the following variables correctly
+p = zeros(size(X, 1), 1);
+
+% Add ones to the X data matrix
+X = [ones(m, 1) X];
+
+% ====================== YOUR CODE HERE ======================
+% Instructions: Complete the following code to make predictions using
+% your learned logistic regression parameters (one-vs-all).
+% You should set p to a vector of predictions (from 1 to
+% num_labels).
+%
+% Hint: This code can be done all vectorized using the max function.
+% In particular, the max function can also return the index of the
+% max element, for more information see 'help max'. If your examples
+% are in rows, then, you can use max(A, [], 2) to obtain the max
+% for each row.
+%
+
+[m, p] = max( sigmoid( all_theta * X' ) );
+p = p';
+
+% =========================================================================
+
+
+end
diff --git a/machine_learning/mlclass-ex3-008/mlclass-ex3/sigmoid.m b/machine_learning/mlclass-ex3-008/mlclass-ex3/sigmoid.m
new file mode 100644
index 0000000..6deca13
--- /dev/null
+++ b/machine_learning/mlclass-ex3-008/mlclass-ex3/sigmoid.m
@@ -0,0 +1,6 @@
+function g = sigmoid(z)
+%SIGMOID Compute sigmoid functoon
+% J = SIGMOID(z) computes the sigmoid of z.
+
+g = 1.0 ./ (1.0 + exp(-z));
+end
diff --git a/machine_learning/mlclass-ex3-008/mlclass-ex3/submit.m b/machine_learning/mlclass-ex3-008/mlclass-ex3/submit.m
new file mode 100644
index 0000000..e336a9f
--- /dev/null
+++ b/machine_learning/mlclass-ex3-008/mlclass-ex3/submit.m
@@ -0,0 +1,574 @@
+function submit(partId, webSubmit)
+%SUBMIT Submit your code and output to the ml-class servers
+% SUBMIT() will connect to the ml-class server and submit your solution
+
+ fprintf('==\n== [ml-class] Submitting Solutions | Programming Exercise %s\n==\n', ...
+ homework_id());
+ if ~exist('partId', 'var') || isempty(partId)
+ partId = promptPart();
+ end
+
+ if ~exist('webSubmit', 'var') || isempty(webSubmit)
+ webSubmit = 0; % submit directly by default
+ end
+
+ % Check valid partId
+ partNames = validParts();
+ if ~isValidPartId(partId)
+ fprintf('!! Invalid homework part selected.\n');
+ fprintf('!! Expected an integer from 1 to %d.\n', numel(partNames) + 1);
+ fprintf('!! Submission Cancelled\n');
+ return
+ end
+
+ if ~exist('ml_login_data.mat','file')
+ [login password] = loginPrompt();
+ save('ml_login_data.mat','login','password');
+ else
+ load('ml_login_data.mat');
+ [login password] = quickLogin(login, password);
+ save('ml_login_data.mat','login','password');
+ end
+
+ if isempty(login)
+ fprintf('!! Submission Cancelled\n');
+ return
+ end
+
+ fprintf('\n== Connecting to ml-class ... ');
+ if exist('OCTAVE_VERSION')
+ fflush(stdout);
+ end
+
+ % Setup submit list
+ if partId == numel(partNames) + 1
+ submitParts = 1:numel(partNames);
+ else
+ submitParts = [partId];
+ end
+
+ for s = 1:numel(submitParts)
+ thisPartId = submitParts(s);
+ if (~webSubmit) % submit directly to server
+ [login, ch, signature, auxstring] = getChallenge(login, thisPartId);
+ if isempty(login) || isempty(ch) || isempty(signature)
+ % Some error occured, error string in first return element.
+ fprintf('\n!! Error: %s\n\n', login);
+ return
+ end
+
+ % Attempt Submission with Challenge
+ ch_resp = challengeResponse(login, password, ch);
+
+ [result, str] = submitSolution(login, ch_resp, thisPartId, ...
+ output(thisPartId, auxstring), source(thisPartId), signature);
+
+ partName = partNames{thisPartId};
+
+ fprintf('\n== [ml-class] Submitted Assignment %s - Part %d - %s\n', ...
+ homework_id(), thisPartId, partName);
+ fprintf('== %s\n', strtrim(str));
+
+ if exist('OCTAVE_VERSION')
+ fflush(stdout);
+ end
+ else
+ [result] = submitSolutionWeb(login, thisPartId, output(thisPartId), ...
+ source(thisPartId));
+ result = base64encode(result);
+
+ fprintf('\nSave as submission file [submit_ex%s_part%d.txt (enter to accept default)]:', ...
+ homework_id(), thisPartId);
+ saveAsFile = input('', 's');
+ if (isempty(saveAsFile))
+ saveAsFile = sprintf('submit_ex%s_part%d.txt', homework_id(), thisPartId);
+ end
+
+ fid = fopen(saveAsFile, 'w');
+ if (fid)
+ fwrite(fid, result);
+ fclose(fid);
+ fprintf('\nSaved your solutions to %s.\n\n', saveAsFile);
+ fprintf(['You can now submit your solutions through the web \n' ...
+ 'form in the programming exercises. Select the corresponding \n' ...
+ 'programming exercise to access the form.\n']);
+
+ else
+ fprintf('Unable to save to %s\n\n', saveAsFile);
+ fprintf(['You can create a submission file by saving the \n' ...
+ 'following text in a file: (press enter to continue)\n\n']);
+ pause;
+ fprintf(result);
+ end
+ end
+ end
+end
+
+% ================== CONFIGURABLES FOR EACH HOMEWORK ==================
+
+function id = homework_id()
+ id = '3';
+end
+
+function [partNames] = validParts()
+ partNames = { 'Vectorized Logistic Regression ', ...
+ 'One-vs-all classifier training', ...
+ 'One-vs-all classifier prediction', ...
+ 'Neural network prediction function' ...
+ };
+end
+
+function srcs = sources()
+ % Separated by part
+ srcs = { { 'lrCostFunction.m' }, ...
+ { 'oneVsAll.m' }, ...
+ { 'predictOneVsAll.m' }, ...
+ { 'predict.m' } };
+end
+
+function out = output(partId, auxdata)
+ % Random Test Cases
+ X = [ones(20,1) (exp(1) * sin(1:1:20))' (exp(0.5) * cos(1:1:20))'];
+ y = sin(X(:,1) + X(:,2)) > 0;
+ Xm = [ -1 -1 ; -1 -2 ; -2 -1 ; -2 -2 ; ...
+ 1 1 ; 1 2 ; 2 1 ; 2 2 ; ...
+ -1 1 ; -1 2 ; -2 1 ; -2 2 ; ...
+ 1 -1 ; 1 -2 ; -2 -1 ; -2 -2 ];
+ ym = [ 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 ]';
+ t1 = sin(reshape(1:2:24, 4, 3));
+ t2 = cos(reshape(1:2:40, 4, 5));
+
+ if partId == 1
+ [J, grad] = lrCostFunction([0.25 0.5 -0.5]', X, y, 0.1);
+ out = sprintf('%0.5f ', J);
+ out = [out sprintf('%0.5f ', grad)];
+ elseif partId == 2
+ out = sprintf('%0.5f ', oneVsAll(Xm, ym, 4, 0.1));
+ elseif partId == 3
+ out = sprintf('%0.5f ', predictOneVsAll(t1, Xm));
+ elseif partId == 4
+ out = sprintf('%0.5f ', predict(t1, t2, Xm));
+ end
+end
+
+
+% ====================== SERVER CONFIGURATION ===========================
+
+% ***************** REMOVE -staging WHEN YOU DEPLOY *********************
+function url = site_url()
+ url = 'http://class.coursera.org/ml-008';
+end
+
+function url = challenge_url()
+ url = [site_url() '/assignment/challenge'];
+end
+
+function url = submit_url()
+ url = [site_url() '/assignment/submit'];
+end
+
+% ========================= CHALLENGE HELPERS =========================
+
+function src = source(partId)
+ src = '';
+ src_files = sources();
+ if partId <= numel(src_files)
+ flist = src_files{partId};
+ for i = 1:numel(flist)
+ fid = fopen(flist{i});
+ if (fid == -1)
+ error('Error opening %s (is it missing?)', flist{i});
+ end
+ line = fgets(fid);
+ while ischar(line)
+ src = [src line];
+ line = fgets(fid);
+ end
+ fclose(fid);
+ src = [src '||||||||'];
+ end
+ end
+end
+
+function ret = isValidPartId(partId)
+ partNames = validParts();
+ ret = (~isempty(partId)) && (partId >= 1) && (partId <= numel(partNames) + 1);
+end
+
+function partId = promptPart()
+ fprintf('== Select which part(s) to submit:\n');
+ partNames = validParts();
+ srcFiles = sources();
+ for i = 1:numel(partNames)
+ fprintf('== %d) %s [', i, partNames{i});
+ fprintf(' %s ', srcFiles{i}{:});
+ fprintf(']\n');
+ end
+ fprintf('== %d) All of the above \n==\nEnter your choice [1-%d]: ', ...
+ numel(partNames) + 1, numel(partNames) + 1);
+ selPart = input('', 's');
+ partId = str2num(selPart);
+ if ~isValidPartId(partId)
+ partId = -1;
+ end
+end
+
+function [email,ch,signature,auxstring] = getChallenge(email, part)
+ str = urlread(challenge_url(), 'post', {'email_address', email, 'assignment_part_sid', [homework_id() '-' num2str(part)], 'response_encoding', 'delim'});
+
+ str = strtrim(str);
+ r = struct;
+ while(numel(str) > 0)
+ [f, str] = strtok (str, '|');
+ [v, str] = strtok (str, '|');
+ r = setfield(r, f, v);
+ end
+
+ email = getfield(r, 'email_address');
+ ch = getfield(r, 'challenge_key');
+ signature = getfield(r, 'state');
+ auxstring = getfield(r, 'challenge_aux_data');
+end
+
+function [result, str] = submitSolutionWeb(email, part, output, source)
+
+ result = ['{"assignment_part_sid":"' base64encode([homework_id() '-' num2str(part)], '') '",' ...
+ '"email_address":"' base64encode(email, '') '",' ...
+ '"submission":"' base64encode(output, '') '",' ...
+ '"submission_aux":"' base64encode(source, '') '"' ...
+ '}'];
+ str = 'Web-submission';
+end
+
+function [result, str] = submitSolution(email, ch_resp, part, output, ...
+ source, signature)
+
+ params = {'assignment_part_sid', [homework_id() '-' num2str(part)], ...
+ 'email_address', email, ...
+ 'submission', base64encode(output, ''), ...
+ 'submission_aux', base64encode(source, ''), ...
+ 'challenge_response', ch_resp, ...
+ 'state', signature};
+
+ str = urlread(submit_url(), 'post', params);
+
+ % Parse str to read for success / failure
+ result = 0;
+
+end
+
+% =========================== LOGIN HELPERS ===========================
+
+function [login password] = loginPrompt()
+ % Prompt for password
+ [login password] = basicPrompt();
+
+ if isempty(login) || isempty(password)
+ login = []; password = [];
+ end
+end
+
+
+function [login password] = basicPrompt()
+ login = input('Login (Email address): ', 's');
+ password = input('Password: ', 's');
+end
+
+function [login password] = quickLogin(login,password)
+ disp(['You are currently logged in as ' login '.']);
+ cont_token = input('Is this you? (y/n - type n to reenter password)','s');
+ if(isempty(cont_token) || cont_token(1)=='Y'||cont_token(1)=='y')
+ return;
+ else
+ [login password] = loginPrompt();
+ end
+end
+
+function [str] = challengeResponse(email, passwd, challenge)
+ str = sha1([challenge passwd]);
+end
+
+% =============================== SHA-1 ================================
+
+function hash = sha1(str)
+
+ % Initialize variables
+ h0 = uint32(1732584193);
+ h1 = uint32(4023233417);
+ h2 = uint32(2562383102);
+ h3 = uint32(271733878);
+ h4 = uint32(3285377520);
+
+ % Convert to word array
+ strlen = numel(str);
+
+ % Break string into chars and append the bit 1 to the message
+ mC = [double(str) 128];
+ mC = [mC zeros(1, 4-mod(numel(mC), 4), 'uint8')];
+
+ numB = strlen * 8;
+ if exist('idivide')
+ numC = idivide(uint32(numB + 65), 512, 'ceil');
+ else
+ numC = ceil(double(numB + 65)/512);
+ end
+ numW = numC * 16;
+ mW = zeros(numW, 1, 'uint32');
+
+ idx = 1;
+ for i = 1:4:strlen + 1
+ mW(idx) = bitor(bitor(bitor( ...
+ bitshift(uint32(mC(i)), 24), ...
+ bitshift(uint32(mC(i+1)), 16)), ...
+ bitshift(uint32(mC(i+2)), 8)), ...
+ uint32(mC(i+3)));
+ idx = idx + 1;
+ end
+
+ % Append length of message
+ mW(numW - 1) = uint32(bitshift(uint64(numB), -32));
+ mW(numW) = uint32(bitshift(bitshift(uint64(numB), 32), -32));
+
+ % Process the message in successive 512-bit chs
+ for cId = 1 : double(numC)
+ cSt = (cId - 1) * 16 + 1;
+ cEnd = cId * 16;
+ ch = mW(cSt : cEnd);
+
+ % Extend the sixteen 32-bit words into eighty 32-bit words
+ for j = 17 : 80
+ ch(j) = ch(j - 3);
+ ch(j) = bitxor(ch(j), ch(j - 8));
+ ch(j) = bitxor(ch(j), ch(j - 14));
+ ch(j) = bitxor(ch(j), ch(j - 16));
+ ch(j) = bitrotate(ch(j), 1);
+ end
+
+ % Initialize hash value for this ch
+ a = h0;
+ b = h1;
+ c = h2;
+ d = h3;
+ e = h4;
+
+ % Main loop
+ for i = 1 : 80
+ if(i >= 1 && i <= 20)
+ f = bitor(bitand(b, c), bitand(bitcmp(b), d));
+ k = uint32(1518500249);
+ elseif(i >= 21 && i <= 40)
+ f = bitxor(bitxor(b, c), d);
+ k = uint32(1859775393);
+ elseif(i >= 41 && i <= 60)
+ f = bitor(bitor(bitand(b, c), bitand(b, d)), bitand(c, d));
+ k = uint32(2400959708);
+ elseif(i >= 61 && i <= 80)
+ f = bitxor(bitxor(b, c), d);
+ k = uint32(3395469782);
+ end
+
+ t = bitrotate(a, 5);
+ t = bitadd(t, f);
+ t = bitadd(t, e);
+ t = bitadd(t, k);
+ t = bitadd(t, ch(i));
+ e = d;
+ d = c;
+ c = bitrotate(b, 30);
+ b = a;
+ a = t;
+
+ end
+ h0 = bitadd(h0, a);
+ h1 = bitadd(h1, b);
+ h2 = bitadd(h2, c);
+ h3 = bitadd(h3, d);
+ h4 = bitadd(h4, e);
+
+ end
+
+ hash = reshape(dec2hex(double([h0 h1 h2 h3 h4]), 8)', [1 40]);
+
+ hash = lower(hash);
+
+end
+
+function ret = bitadd(iA, iB)
+ ret = double(iA) + double(iB);
+ ret = bitset(ret, 33, 0);
+ ret = uint32(ret);
+end
+
+function ret = bitrotate(iA, places)
+ t = bitshift(iA, places - 32);
+ ret = bitshift(iA, places);
+ ret = bitor(ret, t);
+end
+
+% =========================== Base64 Encoder ============================
+% Thanks to Peter John Acklam
+%
+
+function y = base64encode(x, eol)
+%BASE64ENCODE Perform base64 encoding on a string.
+%
+% BASE64ENCODE(STR, EOL) encode the given string STR. EOL is the line ending
+% sequence to use; it is optional and defaults to '\n' (ASCII decimal 10).
+% The returned encoded string is broken into lines of no more than 76
+% characters each, and each line will end with EOL unless it is empty. Let
+% EOL be empty if you do not want the encoded string broken into lines.
+%
+% STR and EOL don't have to be strings (i.e., char arrays). The only
+% requirement is that they are vectors containing values in the range 0-255.
+%
+% This function may be used to encode strings into the Base64 encoding
+% specified in RFC 2045 - MIME (Multipurpose Internet Mail Extensions). The
+% Base64 encoding is designed to represent arbitrary sequences of octets in a
+% form that need not be humanly readable. A 65-character subset
+% ([A-Za-z0-9+/=]) of US-ASCII is used, enabling 6 bits to be represented per
+% printable character.
+%
+% Examples
+% --------
+%
+% If you want to encode a large file, you should encode it in chunks that are
+% a multiple of 57 bytes. This ensures that the base64 lines line up and
+% that you do not end up with padding in the middle. 57 bytes of data fills
+% one complete base64 line (76 == 57*4/3):
+%
+% If ifid and ofid are two file identifiers opened for reading and writing,
+% respectively, then you can base64 encode the data with
+%
+% while ~feof(ifid)
+% fwrite(ofid, base64encode(fread(ifid, 60*57)));
+% end
+%
+% or, if you have enough memory,
+%
+% fwrite(ofid, base64encode(fread(ifid)));
+%
+% See also BASE64DECODE.
+
+% Author: Peter John Acklam
+% Time-stamp: 2004-02-03 21:36:56 +0100
+% E-mail: pjacklam@online.no
+% URL: http://home.online.no/~pjacklam
+
+ if isnumeric(x)
+ x = num2str(x);
+ end
+
+ % make sure we have the EOL value
+ if nargin < 2
+ eol = sprintf('\n');
+ else
+ if sum(size(eol) > 1) > 1
+ error('EOL must be a vector.');
+ end
+ if any(eol(:) > 255)
+ error('EOL can not contain values larger than 255.');
+ end
+ end
+
+ if sum(size(x) > 1) > 1
+ error('STR must be a vector.');
+ end
+
+ x = uint8(x);
+ eol = uint8(eol);
+
+ ndbytes = length(x); % number of decoded bytes
+ nchunks = ceil(ndbytes / 3); % number of chunks/groups
+ nebytes = 4 * nchunks; % number of encoded bytes
+
+ % add padding if necessary, to make the length of x a multiple of 3
+ if rem(ndbytes, 3)
+ x(end+1 : 3*nchunks) = 0;
+ end
+
+ x = reshape(x, [3, nchunks]); % reshape the data
+ y = repmat(uint8(0), 4, nchunks); % for the encoded data
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Split up every 3 bytes into 4 pieces
+ %
+ % aaaaaabb bbbbcccc ccdddddd
+ %
+ % to form
+ %
+ % 00aaaaaa 00bbbbbb 00cccccc 00dddddd
+ %
+ y(1,:) = bitshift(x(1,:), -2); % 6 highest bits of x(1,:)
+
+ y(2,:) = bitshift(bitand(x(1,:), 3), 4); % 2 lowest bits of x(1,:)
+ y(2,:) = bitor(y(2,:), bitshift(x(2,:), -4)); % 4 highest bits of x(2,:)
+
+ y(3,:) = bitshift(bitand(x(2,:), 15), 2); % 4 lowest bits of x(2,:)
+ y(3,:) = bitor(y(3,:), bitshift(x(3,:), -6)); % 2 highest bits of x(3,:)
+
+ y(4,:) = bitand(x(3,:), 63); % 6 lowest bits of x(3,:)
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Now perform the following mapping
+ %
+ % 0 - 25 -> A-Z
+ % 26 - 51 -> a-z
+ % 52 - 61 -> 0-9
+ % 62 -> +
+ % 63 -> /
+ %
+ % We could use a mapping vector like
+ %
+ % ['A':'Z', 'a':'z', '0':'9', '+/']
+ %
+ % but that would require an index vector of class double.
+ %
+ z = repmat(uint8(0), size(y));
+ i = y <= 25; z(i) = 'A' + double(y(i));
+ i = 26 <= y & y <= 51; z(i) = 'a' - 26 + double(y(i));
+ i = 52 <= y & y <= 61; z(i) = '0' - 52 + double(y(i));
+ i = y == 62; z(i) = '+';
+ i = y == 63; z(i) = '/';
+ y = z;
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Add padding if necessary.
+ %
+ npbytes = 3 * nchunks - ndbytes; % number of padding bytes
+ if npbytes
+ y(end-npbytes+1 : end) = '='; % '=' is used for padding
+ end
+
+ if isempty(eol)
+
+ % reshape to a row vector
+ y = reshape(y, [1, nebytes]);
+
+ else
+
+ nlines = ceil(nebytes / 76); % number of lines
+ neolbytes = length(eol); % number of bytes in eol string
+
+ % pad data so it becomes a multiple of 76 elements
+ y = [y(:) ; zeros(76 * nlines - numel(y), 1)];
+ y(nebytes + 1 : 76 * nlines) = 0;
+ y = reshape(y, 76, nlines);
+
+ % insert eol strings
+ eol = eol(:);
+ y(end + 1 : end + neolbytes, :) = eol(:, ones(1, nlines));
+
+ % remove padding, but keep the last eol string
+ m = nebytes + neolbytes * (nlines - 1);
+ n = (76+neolbytes)*nlines - neolbytes;
+ y(m+1 : n) = '';
+
+ % extract and reshape to row vector
+ y = reshape(y, 1, m+neolbytes);
+
+ end
+
+ % output is a character array
+ y = char(y);
+
+end
diff --git a/machine_learning/mlclass-ex3-008/mlclass-ex3/submitWeb.m b/machine_learning/mlclass-ex3-008/mlclass-ex3/submitWeb.m
new file mode 100644
index 0000000..8611707
--- /dev/null
+++ b/machine_learning/mlclass-ex3-008/mlclass-ex3/submitWeb.m
@@ -0,0 +1,20 @@
+% submitWeb Creates files from your code and output for web submission.
+%
+% If the submit function does not work for you, use the web-submission mechanism.
+% Call this function to produce a file for the part you wish to submit. Then,
+% submit the file to the class servers using the "Web Submission" button on the
+% Programming Exercises page on the course website.
+%
+% You should call this function without arguments (submitWeb), to receive
+% an interactive prompt for submission; optionally you can call it with the partID
+% if you so wish. Make sure your working directory is set to the directory
+% containing the submitWeb.m file and your assignment files.
+
+function submitWeb(partId)
+ if ~exist('partId', 'var') || isempty(partId)
+ partId = [];
+ end
+
+ submit(partId, 1);
+end
+
diff --git a/machine_learning/test.m b/machine_learning/test.m
new file mode 100644
index 0000000..51be435
--- /dev/null
+++ b/machine_learning/test.m
@@ -0,0 +1,164 @@
+%VIM: let g:flags=""
+%
+a = 3
+b = 'hi'
+b
+a = pi
+c = (3 >= 1 )
+disp(sprintf('2 decimals: %0.2f', a ))
+format long
+a
+format short
+a
+
+A = [1 2; 3 4; 5 6] % define matrix
+v = [1 2 3] % row vector
+v = [1; 2; 3] % column vector
+v = 1:0.2:2 % vector from 1 to 2 with 0.2 increments
+v = 1:6 % vector 1 to 6
+
+ones(2,3) % matrix of ones
+2*ones(2,3)
+zeros(3,1) % matrix of zeros
+eye(4) % identity matrix
+rand(2,3) % matrix of random numbers
+randn(2,3) % matrix of normal distribution random numbers
+
+w = -6 + sqrt(10)*randn(1,10000)
+
+hist(w,50) % histogram
+
+size(A) % sizes of matrix as a row vector
+size(A,1) % number of rows
+size(A,2) % number of columns
+length(v) % length of a matrix
+
+%load( 'file name' ) % load data from a file
+
+who % what variables do I have.
+whos % detailed who
+
+%v = priceY(1:10)
+%save savedfile.mat v
+%save savedfile.mat v -ascii
+
+clear % remove variables
+
+A = [1 2; 3 4; 5 6 ]
+A(3,2) % element on third row and second column
+A(3,:) % third row
+A(:,2) % second column
+
+A([1 3], :) % matrix from 1 and 3 rows
+A(:,2) = [10; 11; 12] % assign to second column
+A = [A, [100; 101; 102]] % append to matrix
+
+B = [ 3 3; 5 6; 6 7]
+
+C = [ A B ] % append to the right
+D = [ A; B ] % append at bottom
+
+A' % transpos
+A * B' % matrix mul
+A .* B % element vice mult
+A .^2 % element vice square
+
+v = [ 1; 2; 3 ]
+
+1 ./ v % reciprocal of v
+1 ./ A
+
+log(v) % element vice log
+exp(v)
+abs(v)
+-v
+v + ones(lenght(v), 1)
+v + 1 % same as of above
+
+a = [2 3 4 5]
+max(a) % max element in a
+[val, ind] = max(a) % val = max elem, ind = the index of elem
+
+
+a < 3 % elem vice compare
+find(a < 3)
+
+A = magic(3)
+
+[r,c] = find(A>=7)
+
+sum(a)
+prod(a)
+floor(a)
+ceil(a)
+
+max( rand(3), rand(3) ) % elem vice max of two 3x3 matrices
+
+max ( A, [], 1 ) % row vice max
+max(A) % column vice max
+
+A = magic(9)
+
+sum(A,1)
+
+A .* eye(9)
+
+sum( sum( A.*eye(9))) % sum of diagonal elements
+
+flipud( eye(9)) %flip up down
+
+pinv(A) %pseudo inverse of A
+
+
+%============================
+t=[0:0.01:0.98];
+y1 = sin(2*pi*4*t)
+plot(t,y1);
+y2 = cos(2*pi*4*t)
+plot(t,y1);
+hold on;
+plot(t,y1,r);
+xlabel('time')
+ylabel('value')
+legend('sin','cos')
+title('my plot')
+print -dpng 'myPlot.png'
+close
+
+
+figure(1); plot(t,y1);
+figure(2); plot(t,y2);
+subplot(1,2,1);
+axis
+
+A= magic(5);
+imagesc(A);
+imagesc(A),colorbar,colormap gray;
+
+%============================
+v = zero(10,1)
+for i=1:10,
+ v(i) = 2^i;
+end;
+while i <= 5,
+ v(i) = 100;
+ i = i+1;
+ if i == 4, %elseif else
+ break;
+ end;
+end;
+
+%put into a separate file with the same name
+function y = functionName( x )
+ y = x^2;
+
+function [y1,y2] = functionName( x )
+ y1 = x^2;
+ y2 = x^3;
+
+
+
+
+
+%help eye
+
diff --git a/mergeTwoFiles/mergeTwoFiles.sln b/mergeTwoFiles/mergeTwoFiles.sln
deleted file mode 100644
index 976dd42..0000000
--- a/mergeTwoFiles/mergeTwoFiles.sln
+++ /dev/null
@@ -1,20 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mergeTwoFiles", "mergeTwoFiles.vcproj", "{F07269AD-FE36-43E5-A832-92D5FC475DE2}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {F07269AD-FE36-43E5-A832-92D5FC475DE2}.Debug|Win32.ActiveCfg = Debug|Win32
- {F07269AD-FE36-43E5-A832-92D5FC475DE2}.Debug|Win32.Build.0 = Debug|Win32
- {F07269AD-FE36-43E5-A832-92D5FC475DE2}.Release|Win32.ActiveCfg = Release|Win32
- {F07269AD-FE36-43E5-A832-92D5FC475DE2}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/mergeTwoFiles/mergeTwoFiles.vcproj b/mergeTwoFiles/mergeTwoFiles.vcproj
deleted file mode 100644
index 102ebcd..0000000
--- a/mergeTwoFiles/mergeTwoFiles.vcproj
+++ /dev/null
@@ -1,225 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/mergeTwoFiles/stdafx.cpp b/mergeTwoFiles/stdafx.cpp
deleted file mode 100644
index 96d643d..0000000
--- a/mergeTwoFiles/stdafx.cpp
+++ /dev/null
@@ -1,8 +0,0 @@
-// stdafx.cpp : source file that includes just the standard includes
-// mergeTwoFiles.pch will be the pre-compiled header
-// stdafx.obj will contain the pre-compiled type information
-
-#include "stdafx.h"
-
-// TODO: reference any additional headers you need in STDAFX.H
-// and not in this file
diff --git a/mergeTwoFiles/stdafx.h b/mergeTwoFiles/stdafx.h
deleted file mode 100644
index 0be0e6f..0000000
--- a/mergeTwoFiles/stdafx.h
+++ /dev/null
@@ -1,17 +0,0 @@
-// stdafx.h : include file for standard system include files,
-// or project specific include files that are used frequently, but
-// are changed infrequently
-//
-
-#pragma once
-
-#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later.
-#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.
-#endif
-
-#include
-#include
-
-
-
-// TODO: reference additional headers your program requires here
diff --git a/SSE2_transform.cpp b/misc/SSE2_transform.cpp
similarity index 100%
rename from SSE2_transform.cpp
rename to misc/SSE2_transform.cpp
diff --git a/SSE2_transform.h b/misc/SSE2_transform.h
similarity index 100%
rename from SSE2_transform.h
rename to misc/SSE2_transform.h
diff --git a/SSE_cmplr_abstraction.h b/misc/SSE_cmplr_abstraction.h
similarity index 100%
rename from SSE_cmplr_abstraction.h
rename to misc/SSE_cmplr_abstraction.h
diff --git a/SSE_cmplr_abstraction_GCC.h b/misc/SSE_cmplr_abstraction_GCC.h
similarity index 100%
rename from SSE_cmplr_abstraction_GCC.h
rename to misc/SSE_cmplr_abstraction_GCC.h
diff --git a/SSE_cmplr_abstraction_MSC.h b/misc/SSE_cmplr_abstraction_MSC.h
similarity index 100%
rename from SSE_cmplr_abstraction_MSC.h
rename to misc/SSE_cmplr_abstraction_MSC.h
diff --git a/SSE_cmplr_abstraction_MSC_backup.h b/misc/SSE_cmplr_abstraction_MSC_backup.h
similarity index 100%
rename from SSE_cmplr_abstraction_MSC_backup.h
rename to misc/SSE_cmplr_abstraction_MSC_backup.h
diff --git a/SSE_cmplr_abstraction_MSC_pckdbl.h b/misc/SSE_cmplr_abstraction_MSC_pckdbl.h
similarity index 100%
rename from SSE_cmplr_abstraction_MSC_pckdbl.h
rename to misc/SSE_cmplr_abstraction_MSC_pckdbl.h
diff --git a/SSE_cmplr_abstraction_MSC_pckfloat.h b/misc/SSE_cmplr_abstraction_MSC_pckfloat.h
similarity index 100%
rename from SSE_cmplr_abstraction_MSC_pckfloat.h
rename to misc/SSE_cmplr_abstraction_MSC_pckfloat.h
diff --git a/SSE_cmplr_abstraction_MSC_pckint16.h b/misc/SSE_cmplr_abstraction_MSC_pckint16.h
similarity index 100%
rename from SSE_cmplr_abstraction_MSC_pckint16.h
rename to misc/SSE_cmplr_abstraction_MSC_pckint16.h
diff --git a/SSE_cmplr_abstraction_MSC_pckint32.h b/misc/SSE_cmplr_abstraction_MSC_pckint32.h
similarity index 100%
rename from SSE_cmplr_abstraction_MSC_pckint32.h
rename to misc/SSE_cmplr_abstraction_MSC_pckint32.h
diff --git a/SSE_cmplr_abstraction_MSC_pckint64.h b/misc/SSE_cmplr_abstraction_MSC_pckint64.h
similarity index 100%
rename from SSE_cmplr_abstraction_MSC_pckint64.h
rename to misc/SSE_cmplr_abstraction_MSC_pckint64.h
diff --git a/SSE_cmplr_abstraction_MSC_pckint8.h b/misc/SSE_cmplr_abstraction_MSC_pckint8.h
similarity index 100%
rename from SSE_cmplr_abstraction_MSC_pckint8.h
rename to misc/SSE_cmplr_abstraction_MSC_pckint8.h
diff --git a/SSE_cmplr_abstraction_other.h b/misc/SSE_cmplr_abstraction_other.h
similarity index 100%
rename from SSE_cmplr_abstraction_other.h
rename to misc/SSE_cmplr_abstraction_other.h
diff --git a/SSE_transform.cpp b/misc/SSE_transform.cpp
similarity index 100%
rename from SSE_transform.cpp
rename to misc/SSE_transform.cpp
diff --git a/getcurrenttime.h b/misc/getcurrenttime.h
similarity index 100%
rename from getcurrenttime.h
rename to misc/getcurrenttime.h
diff --git a/getcurrenttime2.h b/misc/getcurrenttime2.h
similarity index 100%
rename from getcurrenttime2.h
rename to misc/getcurrenttime2.h
diff --git a/puzzles/bluefruit/roman_numerals.cpp b/puzzles/bluefruit/roman_numerals.cpp
new file mode 100644
index 0000000..a85fcac
--- /dev/null
+++ b/puzzles/bluefruit/roman_numerals.cpp
@@ -0,0 +1,271 @@
+/*
+VIM: let g:lcppflags="-std=c++11 -O2 -pthread"
+VIM: let g:wcppflags="/O2 /EHsc /DWIN32"
+VIM: let g:argv=""
+
+ID 971852
+*/
+#include
+#include
+
+/*
+Given a Roman number as a string (eg "XX") determine
+its integer value (eg 20).
+
+You cannot write numerals like IM for 999.
+Wikipedia states "Modern Roman numerals are written by
+expressing each digit separately starting with the
+leftmost digit and skipping any digit with a value of zero."
+
+Examples:
+
+ "I" -> 1 | "X" -> 10 | "C" -> 100 | "M" -> 1000
+ "II" -> 2 | "XX" -> 20 | "CC" -> 200 | "MM" -> 2000
+ "III" -> 3 | "XXX" -> 30 | "CCC" -> 300 | "MMM" -> 3000
+ "IV" -> 4 | "XL" -> 40 | "CD" -> 400 | "MMMM" -> 4000
+ "V" -> 5 | "L" -> 50 | "D" -> 500 |
+ "VI" -> 6 | "LX" -> 60 | "DC" -> 600 |
+ "VII" -> 7 | "LXX" -> 70 | "DCC" -> 700 |
+"VIII" -> 8 | "LXXX" -> 80 | "DCCC" -> 800 |
+ "IX" -> 9 | "XC" -> 90 | "CM" -> 900 |
+
+ "MCMXC" -> 1990 ("M" -> 1000 + "CM" -> 900 + "XC" -> 90)
+"MMVIII" -> 2008 ("MM" -> 2000 + "VIII" -> 8)
+ "XCIX" -> 99 ("XC" -> 90 + "IX" -> 9)
+ "XLVII" -> 47 ("XL" -> 40 + "VII" -> 7)
+*/
+int roman2num( const char * roman_num ) {
+ //
+ // Possible digits.
+ //
+ enum digits { D_I = 0, D_V, D_X, D_L, D_C, D_D, D_M, D_ERR };
+ //
+ // The states of parser. The names of states are quite intuitive. The
+ // vI, lX, dC are the states corresponding to patterns VI+, LX+, DC+
+ // when the first I,X,C letters are seen.
+ //
+ enum states {
+ S = 0, /* START state. */
+ I, vI, II, III, IV, V, IX,
+ X, lX, XX, XXX, XL, L, XC,
+ C, dC, CC, CCC, CD, D, CM,
+ M, MM, MMM, MMMM,
+ E /* ERROR state */
+ };
+ //
+ // This table defines state transition for each character seen.
+ //
+ static const char state_table[][8] = {
+ /* I, V, X, L, C, D, M, D_ERR */
+ { I, V, X, L, C, D, M, E}, //S
+
+ { II, IV, IX, E, E, E, E, E}, //I
+ { II, E, E, E, E, E, E, E}, //vI
+ {III, E, E, E, E, E, E, E}, //II
+ { E, E, E, E, E, E, E, E}, //III
+ { E, E, E, E, E, E, E, E}, //IV
+ { vI, E, E, E, E, E, E, E}, //V
+ { E, E, E, E, E, E, E, E}, //IX
+
+ { I, V, XX, XL, XC, E, E, E}, //X
+ { I, V, XX, E, E, E, E, E}, //lX
+ { I, V,XXX, E, E, E, E, E}, //XX
+ { I, V, E, E, E, E, E, E}, //XXX
+ { I, V, E, E, E, E, E, E}, //XL
+ { I, V, lX, E, E, E, E, E}, //L
+ { I, V, E, E, E, E, E, E}, //XC
+
+ { I, V, X, L, CC, CD, CM, E}, //C
+ { I, V, X, L, CC, E, E, E}, //dC
+ { I, V, X, L,CCC, E, E, E}, //CC
+ { I, V, X, L, E, E, E, E}, //CCC
+ { I, V, X, L, E, E, E, E}, //CD
+ { I, V, X, L, dC, E, E, E}, //D
+ { I, V, X, L, E, E, E, E}, //CM
+
+ { I, V, X, L, C, D, MM, E}, //M
+ { I, V, X, L, C, D, MMM, E}, //MM
+ { I, V, X, L, C, D, MMMM, E}, //MMM
+ { I, V, X, L, C, D, E, E}, //MMMM
+
+ { E, E, E, E, E, E, E, E} //E
+ };
+ //
+ // Each state transition causes an increment of the number with
+ // certain value defined in this table.
+ // A state transition happens for each character we read, hence when
+ // defining the increment value of complex states such as II,III,IV,...
+ // please take into consideration what amount increment we already have.
+ // For example the state XL is defined as 30 since we already added 10 when
+ // we see X.
+ //
+ static const short increment[] = {
+ //S This is here to preserve alignment only.
+ 0,
+ // I, vI, II, III, IV, V, IX
+ 1, 1, 1, 1, 3, 5, 8,
+ // X, lX, XX, XXX, XL, L, XC
+ 10, 10, 10, 10, 30, 50, 80,
+ // C, dC, CC, CCC, CD, D, CM,
+ 100, 100, 100, 100, 300, 500, 800,
+ // M, MM, MMM, MMMM */
+ 1000, 1000, 1000, 1000,
+ //E This is the error condition. The value doesn't really matter.
+ 0
+ };
+ //
+ // Ideally this had to be a table based lookup.
+ //
+ auto chr2digit = []( char ch ) {
+ switch (ch) {
+ case 'I' : return D_I;
+ case 'V' : return D_V;
+ case 'X' : return D_X;
+ case 'L' : return D_L;
+ case 'C' : return D_C;
+ case 'D' : return D_D;
+ case 'M' : return D_M;
+ default : return D_ERR;
+ }
+ };
+ //
+ // Here the algorithm begins.
+ //
+ if ( !roman_num )
+ return -1;
+
+ int num = 0;
+ int state = S;
+ for ( const char * e = roman_num; *e && state < E; ++e ) {
+ state = state_table[state][chr2digit(*e)];
+ num += increment[state];
+ }
+ if ( state >= E )
+ return -1;
+ return num;
+}
+
+void ASSERT_EQ( int golden, int ret ) {
+ if ( ret != golden )
+ std::cout << "FAIL: Expected " << golden << " got " << ret << std::endl;
+}
+
+int main ( void )
+{try{
+ ASSERT_EQ(0, roman2num(""));
+ ASSERT_EQ(1, roman2num("I"));
+ ASSERT_EQ(2, roman2num("II"));
+ ASSERT_EQ(3, roman2num("III"));
+ ASSERT_EQ(4, roman2num("IV"));
+ ASSERT_EQ(5, roman2num("V"));
+ ASSERT_EQ(6, roman2num("VI"));
+ ASSERT_EQ(7, roman2num("VII"));
+ ASSERT_EQ(8, roman2num("VIII"));
+ ASSERT_EQ(9, roman2num("IX"));
+
+ ASSERT_EQ(10, roman2num("X"));
+ ASSERT_EQ(20, roman2num("XX"));
+ ASSERT_EQ(30, roman2num("XXX"));
+ ASSERT_EQ(40, roman2num("XL"));
+ ASSERT_EQ(50, roman2num("L"));
+ ASSERT_EQ(60, roman2num("LX"));
+ ASSERT_EQ(70, roman2num("LXX"));
+ ASSERT_EQ(80, roman2num("LXXX"));
+ ASSERT_EQ(90, roman2num("XC"));
+
+ ASSERT_EQ(100, roman2num("C"));
+ ASSERT_EQ(200, roman2num("CC"));
+ ASSERT_EQ(300, roman2num("CCC"));
+ ASSERT_EQ(400, roman2num("CD"));
+ ASSERT_EQ(500, roman2num("D"));
+ ASSERT_EQ(600, roman2num("DC"));
+ ASSERT_EQ(700, roman2num("DCC"));
+ ASSERT_EQ(800, roman2num("DCCC"));
+ ASSERT_EQ(900, roman2num("CM"));
+
+ ASSERT_EQ(1000, roman2num("M"));
+ ASSERT_EQ(2000, roman2num("MM"));
+ ASSERT_EQ(3000, roman2num("MMM"));
+ ASSERT_EQ(4000, roman2num("MMMM"));
+
+ ASSERT_EQ(1990, roman2num("MCMXC"));
+ ASSERT_EQ(2008, roman2num("MMVIII"));
+ ASSERT_EQ(91, roman2num("XCI"));
+ ASSERT_EQ(99, roman2num("XCIX"));
+ ASSERT_EQ(47, roman2num("XLVII"));
+ ASSERT_EQ(3888, roman2num("MMMDCCCLXXXVIII"));
+ ASSERT_EQ(4888, roman2num("MMMMDCCCLXXXVIII"));
+ ASSERT_EQ(4999, roman2num("MMMMCMXCIX"));
+
+ static const char * num [] = {
+ "","I","II","III","IV","V","VI","VII","VIII","IX",
+ "","X","XX","XXX","XL","L","LX","LXX","LXXX","XC",
+ "","C","CC","CCC","CD","D","DC","DCC","DCCC","CM",
+ "","M","MM","MMM","MMMM"
+ };
+ for ( int i = 0; i < 5000; ++i ) {
+ int d4 = i/1000;
+ int d3 = i%1000/100;
+ int d2 = i%100/10;
+ int d1 = i%10;
+
+ std::string test = num[30+d4];
+ test +=num[20+d3];
+ test +=num[10+d2];
+ test +=num[d1];
+
+ ASSERT_EQ(i, roman2num(test.c_str()));
+ }
+
+ //
+ // Negative cases.
+ //
+ ASSERT_EQ(-1, roman2num(0));
+ ASSERT_EQ(-1, roman2num("IXLVII"));
+ ASSERT_EQ(-1, roman2num("IIII"));
+ ASSERT_EQ(-1, roman2num("VV"));
+ ASSERT_EQ(-1, roman2num("XXXX"));
+ ASSERT_EQ(-1, roman2num("LL"));
+ ASSERT_EQ(-1, roman2num("CCCC"));
+ ASSERT_EQ(-1, roman2num("DD"));
+ ASSERT_EQ(-1, roman2num("MMMMM"));
+ ASSERT_EQ(-1, roman2num("IIV"));
+ ASSERT_EQ(-1, roman2num("IVI"));
+ ASSERT_EQ(-1, roman2num("IIX"));
+ ASSERT_EQ(-1, roman2num("IXI"));
+ ASSERT_EQ(-1, roman2num("XXC"));
+ ASSERT_EQ(-1, roman2num("XCX"));
+ ASSERT_EQ(-1, roman2num("XXL"));
+ ASSERT_EQ(-1, roman2num("XLX"));
+ ASSERT_EQ(-1, roman2num("CCM"));
+ ASSERT_EQ(-1, roman2num("CMC"));
+ ASSERT_EQ(-1, roman2num("CCD"));
+ ASSERT_EQ(-1, roman2num("CDC"));
+
+ ASSERT_EQ(-1, roman2num("c"));
+ ASSERT_EQ(-1, roman2num("l"));
+ ASSERT_EQ(-1, roman2num("x"));
+ ASSERT_EQ(-1, roman2num("v"));
+ ASSERT_EQ(-1, roman2num("v"));
+ ASSERT_EQ(-1, roman2num("v"));
+ ASSERT_EQ(-1, roman2num("v"));
+ ASSERT_EQ(-1, roman2num("1"));
+ ASSERT_EQ(-1, roman2num("2"));
+ ASSERT_EQ(-1, roman2num("a"));
+ ASSERT_EQ(-1, roman2num("."));
+
+ return 0;
+}
+catch ( const std::exception& e )
+{
+ std::cerr << std::endl
+ << "std::exception(\"" << e.what() << "\")." << std::endl;
+ return 2;
+}
+catch ( ... )
+{
+ std::cerr << std::endl
+ << "unknown exception." << std::endl;
+ return 1;
+}}
+
diff --git a/google_code_jam/.vimrc.local b/puzzles/google_code_jam/.vimrc.local
similarity index 100%
rename from google_code_jam/.vimrc.local
rename to puzzles/google_code_jam/.vimrc.local
diff --git a/google_code_jam/2013/1A-A-bullseye-sample.in b/puzzles/google_code_jam/2013/1A-A-bullseye-sample.in
similarity index 100%
rename from google_code_jam/2013/1A-A-bullseye-sample.in
rename to puzzles/google_code_jam/2013/1A-A-bullseye-sample.in
diff --git a/google_code_jam/2013/1A-A-bullseye.cpp b/puzzles/google_code_jam/2013/1A-A-bullseye.cpp
similarity index 100%
rename from google_code_jam/2013/1A-A-bullseye.cpp
rename to puzzles/google_code_jam/2013/1A-A-bullseye.cpp
diff --git a/google_code_jam/2013/1A-A-large-practice.in b/puzzles/google_code_jam/2013/1A-A-large-practice.in
similarity index 100%
rename from google_code_jam/2013/1A-A-large-practice.in
rename to puzzles/google_code_jam/2013/1A-A-large-practice.in
diff --git a/google_code_jam/2013/1A-A-small-practice.in b/puzzles/google_code_jam/2013/1A-A-small-practice.in
similarity index 100%
rename from google_code_jam/2013/1A-A-small-practice.in
rename to puzzles/google_code_jam/2013/1A-A-small-practice.in
diff --git a/google_code_jam/2013/1A-B-energy.cpp b/puzzles/google_code_jam/2013/1A-B-energy.cpp
similarity index 100%
rename from google_code_jam/2013/1A-B-energy.cpp
rename to puzzles/google_code_jam/2013/1A-B-energy.cpp
diff --git a/google_code_jam/2013/1A-B-large-practice.in b/puzzles/google_code_jam/2013/1A-B-large-practice.in
similarity index 100%
rename from google_code_jam/2013/1A-B-large-practice.in
rename to puzzles/google_code_jam/2013/1A-B-large-practice.in
diff --git a/google_code_jam/2013/1A-B-sample.in b/puzzles/google_code_jam/2013/1A-B-sample.in
similarity index 100%
rename from google_code_jam/2013/1A-B-sample.in
rename to puzzles/google_code_jam/2013/1A-B-sample.in
diff --git a/google_code_jam/2013/1A-B-small-practice.in b/puzzles/google_code_jam/2013/1A-B-small-practice.in
similarity index 100%
rename from google_code_jam/2013/1A-B-small-practice.in
rename to puzzles/google_code_jam/2013/1A-B-small-practice.in
diff --git a/google_code_jam/2013/1B-A-Osmos.cpp b/puzzles/google_code_jam/2013/1B-A-Osmos.cpp
similarity index 100%
rename from google_code_jam/2013/1B-A-Osmos.cpp
rename to puzzles/google_code_jam/2013/1B-A-Osmos.cpp
diff --git a/google_code_jam/2013/1B-A-large-practice.in b/puzzles/google_code_jam/2013/1B-A-large-practice.in
similarity index 100%
rename from google_code_jam/2013/1B-A-large-practice.in
rename to puzzles/google_code_jam/2013/1B-A-large-practice.in
diff --git a/google_code_jam/2013/1B-A-sample.in b/puzzles/google_code_jam/2013/1B-A-sample.in
similarity index 100%
rename from google_code_jam/2013/1B-A-sample.in
rename to puzzles/google_code_jam/2013/1B-A-sample.in
diff --git a/google_code_jam/2013/1B-A-small-practice.in b/puzzles/google_code_jam/2013/1B-A-small-practice.in
similarity index 100%
rename from google_code_jam/2013/1B-A-small-practice.in
rename to puzzles/google_code_jam/2013/1B-A-small-practice.in
diff --git a/google_code_jam/2013/1B-B-diamonds.cpp b/puzzles/google_code_jam/2013/1B-B-diamonds.cpp
similarity index 100%
rename from google_code_jam/2013/1B-B-diamonds.cpp
rename to puzzles/google_code_jam/2013/1B-B-diamonds.cpp
diff --git a/google_code_jam/2013/1B-B-large-practice.in b/puzzles/google_code_jam/2013/1B-B-large-practice.in
similarity index 100%
rename from google_code_jam/2013/1B-B-large-practice.in
rename to puzzles/google_code_jam/2013/1B-B-large-practice.in
diff --git a/google_code_jam/2013/1B-B-sample.in b/puzzles/google_code_jam/2013/1B-B-sample.in
similarity index 100%
rename from google_code_jam/2013/1B-B-sample.in
rename to puzzles/google_code_jam/2013/1B-B-sample.in
diff --git a/google_code_jam/2013/1B-B-small-practice.in b/puzzles/google_code_jam/2013/1B-B-small-practice.in
similarity index 100%
rename from google_code_jam/2013/1B-B-small-practice.in
rename to puzzles/google_code_jam/2013/1B-B-small-practice.in
diff --git a/google_code_jam/2013/tic_tac_A-large-practice.in b/puzzles/google_code_jam/2013/tic_tac_A-large-practice.in
similarity index 100%
rename from google_code_jam/2013/tic_tac_A-large-practice.in
rename to puzzles/google_code_jam/2013/tic_tac_A-large-practice.in
diff --git a/google_code_jam/2013/tic_tac_A-small-practice.in b/puzzles/google_code_jam/2013/tic_tac_A-small-practice.in
similarity index 100%
rename from google_code_jam/2013/tic_tac_A-small-practice.in
rename to puzzles/google_code_jam/2013/tic_tac_A-small-practice.in
diff --git a/google_code_jam/2013/tic_tac_toy_tomek.cpp b/puzzles/google_code_jam/2013/tic_tac_toy_tomek.cpp
similarity index 100%
rename from google_code_jam/2013/tic_tac_toy_tomek.cpp
rename to puzzles/google_code_jam/2013/tic_tac_toy_tomek.cpp
diff --git a/google_code_jam/2013/tic_tac_toy_tomek.sample_input b/puzzles/google_code_jam/2013/tic_tac_toy_tomek.sample_input
similarity index 100%
rename from google_code_jam/2013/tic_tac_toy_tomek.sample_input
rename to puzzles/google_code_jam/2013/tic_tac_toy_tomek.sample_input
diff --git a/google_code_jam/2014/0-A-magic_trick-sample.in b/puzzles/google_code_jam/2014/0-A-magic_trick-sample.in
similarity index 100%
rename from google_code_jam/2014/0-A-magic_trick-sample.in
rename to puzzles/google_code_jam/2014/0-A-magic_trick-sample.in
diff --git a/google_code_jam/2014/0-A-magic_trick-small-attempt0.in b/puzzles/google_code_jam/2014/0-A-magic_trick-small-attempt0.in
similarity index 100%
rename from google_code_jam/2014/0-A-magic_trick-small-attempt0.in
rename to puzzles/google_code_jam/2014/0-A-magic_trick-small-attempt0.in
diff --git a/google_code_jam/2014/0-A-magic_trick.cpp b/puzzles/google_code_jam/2014/0-A-magic_trick.cpp
similarity index 100%
rename from google_code_jam/2014/0-A-magic_trick.cpp
rename to puzzles/google_code_jam/2014/0-A-magic_trick.cpp
diff --git a/google_code_jam/2014/0-B-cookie-sample.in b/puzzles/google_code_jam/2014/0-B-cookie-sample.in
similarity index 100%
rename from google_code_jam/2014/0-B-cookie-sample.in
rename to puzzles/google_code_jam/2014/0-B-cookie-sample.in
diff --git a/google_code_jam/2014/0-B-cookie.cpp b/puzzles/google_code_jam/2014/0-B-cookie.cpp
similarity index 100%
rename from google_code_jam/2014/0-B-cookie.cpp
rename to puzzles/google_code_jam/2014/0-B-cookie.cpp
diff --git a/google_code_jam/2014/0-B-large.in b/puzzles/google_code_jam/2014/0-B-large.in
similarity index 100%
rename from google_code_jam/2014/0-B-large.in
rename to puzzles/google_code_jam/2014/0-B-large.in
diff --git a/google_code_jam/2014/0-B-small-attempt0.in b/puzzles/google_code_jam/2014/0-B-small-attempt0.in
similarity index 100%
rename from google_code_jam/2014/0-B-small-attempt0.in
rename to puzzles/google_code_jam/2014/0-B-small-attempt0.in
diff --git a/google_code_jam/2014/0-C-large.in b/puzzles/google_code_jam/2014/0-C-large.in
similarity index 100%
rename from google_code_jam/2014/0-C-large.in
rename to puzzles/google_code_jam/2014/0-C-large.in
diff --git a/google_code_jam/2014/0-C-mine-sample.in b/puzzles/google_code_jam/2014/0-C-mine-sample.in
similarity index 100%
rename from google_code_jam/2014/0-C-mine-sample.in
rename to puzzles/google_code_jam/2014/0-C-mine-sample.in
diff --git a/google_code_jam/2014/0-C-mine.cpp b/puzzles/google_code_jam/2014/0-C-mine.cpp
similarity index 100%
rename from google_code_jam/2014/0-C-mine.cpp
rename to puzzles/google_code_jam/2014/0-C-mine.cpp
diff --git a/google_code_jam/2014/0-C-small-attempt0.in b/puzzles/google_code_jam/2014/0-C-small-attempt0.in
similarity index 100%
rename from google_code_jam/2014/0-C-small-attempt0.in
rename to puzzles/google_code_jam/2014/0-C-small-attempt0.in
diff --git a/google_code_jam/2014/0-D-deceitful-sample.in b/puzzles/google_code_jam/2014/0-D-deceitful-sample.in
similarity index 100%
rename from google_code_jam/2014/0-D-deceitful-sample.in
rename to puzzles/google_code_jam/2014/0-D-deceitful-sample.in
diff --git a/google_code_jam/2014/0-D-deceitful.cpp b/puzzles/google_code_jam/2014/0-D-deceitful.cpp
similarity index 100%
rename from google_code_jam/2014/0-D-deceitful.cpp
rename to puzzles/google_code_jam/2014/0-D-deceitful.cpp
diff --git a/google_code_jam/2014/0-D-large.in b/puzzles/google_code_jam/2014/0-D-large.in
similarity index 100%
rename from google_code_jam/2014/0-D-large.in
rename to puzzles/google_code_jam/2014/0-D-large.in
diff --git a/google_code_jam/2014/0-D-small-attempt0.in b/puzzles/google_code_jam/2014/0-D-small-attempt0.in
similarity index 100%
rename from google_code_jam/2014/0-D-small-attempt0.in
rename to puzzles/google_code_jam/2014/0-D-small-attempt0.in
diff --git a/google_code_jam/2014/1A-A-code_jam.cpp b/puzzles/google_code_jam/2014/1A-A-code_jam.cpp
similarity index 100%
rename from google_code_jam/2014/1A-A-code_jam.cpp
rename to puzzles/google_code_jam/2014/1A-A-code_jam.cpp
diff --git a/google_code_jam/2014/1A-A-large-practice.in b/puzzles/google_code_jam/2014/1A-A-large-practice.in
similarity index 100%
rename from google_code_jam/2014/1A-A-large-practice.in
rename to puzzles/google_code_jam/2014/1A-A-large-practice.in
diff --git a/google_code_jam/2014/1A-A-sample.in b/puzzles/google_code_jam/2014/1A-A-sample.in
similarity index 100%
rename from google_code_jam/2014/1A-A-sample.in
rename to puzzles/google_code_jam/2014/1A-A-sample.in
diff --git a/google_code_jam/2014/1A-A-small-practice.in b/puzzles/google_code_jam/2014/1A-A-small-practice.in
similarity index 100%
rename from google_code_jam/2014/1A-A-small-practice.in
rename to puzzles/google_code_jam/2014/1A-A-small-practice.in
diff --git a/google_code_jam/2014/1A-B-code_jam.cpp b/puzzles/google_code_jam/2014/1A-B-code_jam.cpp
similarity index 100%
rename from google_code_jam/2014/1A-B-code_jam.cpp
rename to puzzles/google_code_jam/2014/1A-B-code_jam.cpp
diff --git a/google_code_jam/2014/1A-B-large-practice.in b/puzzles/google_code_jam/2014/1A-B-large-practice.in
similarity index 100%
rename from google_code_jam/2014/1A-B-large-practice.in
rename to puzzles/google_code_jam/2014/1A-B-large-practice.in
diff --git a/google_code_jam/2014/1A-B-sample.in b/puzzles/google_code_jam/2014/1A-B-sample.in
similarity index 100%
rename from google_code_jam/2014/1A-B-sample.in
rename to puzzles/google_code_jam/2014/1A-B-sample.in
diff --git a/google_code_jam/2014/1A-B-small-attempt0.in b/puzzles/google_code_jam/2014/1A-B-small-attempt0.in
similarity index 100%
rename from google_code_jam/2014/1A-B-small-attempt0.in
rename to puzzles/google_code_jam/2014/1A-B-small-attempt0.in
diff --git a/google_code_jam/2014/1A-B-small-attempt1.in b/puzzles/google_code_jam/2014/1A-B-small-attempt1.in
similarity index 100%
rename from google_code_jam/2014/1A-B-small-attempt1.in
rename to puzzles/google_code_jam/2014/1A-B-small-attempt1.in
diff --git a/google_code_jam/2014/1A-B-small-practice.in b/puzzles/google_code_jam/2014/1A-B-small-practice.in
similarity index 100%
rename from google_code_jam/2014/1A-B-small-practice.in
rename to puzzles/google_code_jam/2014/1A-B-small-practice.in
diff --git a/google_code_jam/2014/1A-C-small-practice.in b/puzzles/google_code_jam/2014/1A-C-small-practice.in
similarity index 100%
rename from google_code_jam/2014/1A-C-small-practice.in
rename to puzzles/google_code_jam/2014/1A-C-small-practice.in
diff --git a/google_code_jam/2014/1B-A-large.in b/puzzles/google_code_jam/2014/1B-A-large.in
similarity index 100%
rename from google_code_jam/2014/1B-A-large.in
rename to puzzles/google_code_jam/2014/1B-A-large.in
diff --git a/google_code_jam/2014/1B-A-repeater.cpp b/puzzles/google_code_jam/2014/1B-A-repeater.cpp
similarity index 100%
rename from google_code_jam/2014/1B-A-repeater.cpp
rename to puzzles/google_code_jam/2014/1B-A-repeater.cpp
diff --git a/google_code_jam/2014/1B-A-small-attempt0.in b/puzzles/google_code_jam/2014/1B-A-small-attempt0.in
similarity index 100%
rename from google_code_jam/2014/1B-A-small-attempt0.in
rename to puzzles/google_code_jam/2014/1B-A-small-attempt0.in
diff --git a/google_code_jam/2014/1B-A-small-attempt1.in b/puzzles/google_code_jam/2014/1B-A-small-attempt1.in
similarity index 100%
rename from google_code_jam/2014/1B-A-small-attempt1.in
rename to puzzles/google_code_jam/2014/1B-A-small-attempt1.in
diff --git a/google_code_jam/2014/1B-B-lottery.cpp b/puzzles/google_code_jam/2014/1B-B-lottery.cpp
similarity index 100%
rename from google_code_jam/2014/1B-B-lottery.cpp
rename to puzzles/google_code_jam/2014/1B-B-lottery.cpp
diff --git a/google_code_jam/2014/1B-B-small-attempt0.in b/puzzles/google_code_jam/2014/1B-B-small-attempt0.in
similarity index 100%
rename from google_code_jam/2014/1B-B-small-attempt0.in
rename to puzzles/google_code_jam/2014/1B-B-small-attempt0.in
diff --git a/google_code_jam/2014/1C-A-large.in b/puzzles/google_code_jam/2014/1C-A-large.in
similarity index 100%
rename from google_code_jam/2014/1C-A-large.in
rename to puzzles/google_code_jam/2014/1C-A-large.in
diff --git a/google_code_jam/2014/1C-A-small-attempt0.in b/puzzles/google_code_jam/2014/1C-A-small-attempt0.in
similarity index 100%
rename from google_code_jam/2014/1C-A-small-attempt0.in
rename to puzzles/google_code_jam/2014/1C-A-small-attempt0.in
diff --git a/google_code_jam/2014/1C-A.cpp b/puzzles/google_code_jam/2014/1C-A.cpp
similarity index 100%
rename from google_code_jam/2014/1C-A.cpp
rename to puzzles/google_code_jam/2014/1C-A.cpp
diff --git a/google_code_jam/2014/1C-B-small-attempt0.in b/puzzles/google_code_jam/2014/1C-B-small-attempt0.in
similarity index 100%
rename from google_code_jam/2014/1C-B-small-attempt0.in
rename to puzzles/google_code_jam/2014/1C-B-small-attempt0.in
diff --git a/google_code_jam/2014/1C-B-small-attempt1.in b/puzzles/google_code_jam/2014/1C-B-small-attempt1.in
similarity index 100%
rename from google_code_jam/2014/1C-B-small-attempt1.in
rename to puzzles/google_code_jam/2014/1C-B-small-attempt1.in
diff --git a/google_code_jam/2014/1C-B.cpp b/puzzles/google_code_jam/2014/1C-B.cpp
similarity index 100%
rename from google_code_jam/2014/1C-B.cpp
rename to puzzles/google_code_jam/2014/1C-B.cpp
diff --git a/google_code_jam/2014/2-A-large-practice.in b/puzzles/google_code_jam/2014/2-A-large-practice.in
similarity index 100%
rename from google_code_jam/2014/2-A-large-practice.in
rename to puzzles/google_code_jam/2014/2-A-large-practice.in
diff --git a/google_code_jam/2014/2-A-sample.in b/puzzles/google_code_jam/2014/2-A-sample.in
similarity index 100%
rename from google_code_jam/2014/2-A-sample.in
rename to puzzles/google_code_jam/2014/2-A-sample.in
diff --git a/google_code_jam/2014/2-A-small-practice.in b/puzzles/google_code_jam/2014/2-A-small-practice.in
similarity index 100%
rename from google_code_jam/2014/2-A-small-practice.in
rename to puzzles/google_code_jam/2014/2-A-small-practice.in
diff --git a/google_code_jam/2014/2-A.cpp b/puzzles/google_code_jam/2014/2-A.cpp
similarity index 100%
rename from google_code_jam/2014/2-A.cpp
rename to puzzles/google_code_jam/2014/2-A.cpp
diff --git a/google_code_jam/library.h b/puzzles/google_code_jam/library.h
similarity index 100%
rename from google_code_jam/library.h
rename to puzzles/google_code_jam/library.h
diff --git a/interviews/FacebookInterviewTest.cpp b/puzzles/interviews/FacebookInterviewTest.cpp
similarity index 100%
rename from interviews/FacebookInterviewTest.cpp
rename to puzzles/interviews/FacebookInterviewTest.cpp
diff --git a/interviews/FacebookInterviewTest1.cpp b/puzzles/interviews/FacebookInterviewTest1.cpp
similarity index 100%
rename from interviews/FacebookInterviewTest1.cpp
rename to puzzles/interviews/FacebookInterviewTest1.cpp
diff --git a/interviews/NokiaInterviewTest.cpp b/puzzles/interviews/NokiaInterviewTest.cpp
similarity index 100%
rename from interviews/NokiaInterviewTest.cpp
rename to puzzles/interviews/NokiaInterviewTest.cpp
diff --git a/puzzles/interviews/radley_james/online_test.cpp b/puzzles/interviews/radley_james/online_test.cpp
new file mode 100644
index 0000000..cba4882
--- /dev/null
+++ b/puzzles/interviews/radley_james/online_test.cpp
@@ -0,0 +1,140 @@
+/*
+VIM: let g:lcppflags="-std=c++11 -O2 -pthread"
+VIM: let g:wcppflags="/O2 /EHsc /DWIN32"
+VIM: let g:argv=""
+*/
+#include
+#include
+#include
+#include
+#include
+#include
+
+/*
+#1 print numbers from 1 to N and if i is 3 mutltiple print "Fizz", if 5 multiple "Buzz".
+ If both then "FizzBuzz". Otherwise print number.
+
+ int N;
+ std::cin >> N;
+
+ for (int i = 1; i <= N; i++)
+ {
+ if (!(i % 3))
+ std::cout << "Fizz";
+ if (!(i % 5))
+ std::cout << "Buzz";
+ if ((i % 3) && (i % 5))
+ std::cout << i;
+ std::cout << std::endl;
+ }
+*/
+
+/*
+#2 print complement of N.
+
+ unsigned int c = 1;
+ unsigned int b = N;
+ while (b)
+ {
+ b >>= 1;
+ c <<= 1;
+ }
+ return c-1-N;
+
+alternative:
+ if ( !N )
+ return 0;
+
+ unsigned int b = N;
+ while ((b&(b-1)))
+ auto n = b&(b-1);
+ return (b<<1)-1-N;
+*/
+
+/*
+ #3
+ char a[] = "";
+ sizeof(a)?
+*/
+
+/*
+#4
+struct A {
+ int x;
+ A(int a) : x(a) {}
+ A( const A& a ) { x=a.x; x++; }
+ opertaor = ... { x=a.x; x--; }
+};
+
+A a(4);
+A b = a;
+std::cout << b.x;
+
+3?
+4?
+5?
+*/
+
+/*
+#5
+struct A {
+ int u;
+ int l;
+
+ A(int i) : l(i), u(l + 1) {}
+};
+
+A a(5);
+print a.l a.u
+
+5 6
+compilation fail
+5 garbage ?
+
+*/
+
+//#6
+/*
+struct A {
+ int d;
+ virtual ~A(){}
+};
+sizeof(A)? 8 || 16
+*/
+
+//#7
+/*
+
+conceptual support for function call
+
+system stack
+data segment
+processor's register
+text segment
+heap
+*/
+
+int main ( void )
+{try{
+
+
+ A a(5);
+ std::cout << a.l << ' ' << a.u ;
+
+ char c;
+ std::cin >> c;
+ return 0;
+}
+catch ( const std::exception& e )
+{
+ std::cerr << std::endl
+ << "std::exception(\"" << e.what() << "\")." << std::endl;
+ return 2;
+}
+catch ( ... )
+{
+ std::cerr << std::endl
+ << "unknown exception." << std::endl;
+ return 1;
+}}
+
diff --git a/interviews/think-cell/IntervalMap.cpp b/puzzles/interviews/think-cell/IntervalMap.cpp
similarity index 100%
rename from interviews/think-cell/IntervalMap.cpp
rename to puzzles/interviews/think-cell/IntervalMap.cpp
diff --git a/puzzles/interviews/think-cell/interview.cpp b/puzzles/interviews/think-cell/interview.cpp
new file mode 100644
index 0000000..6f32611
--- /dev/null
+++ b/puzzles/interviews/think-cell/interview.cpp
@@ -0,0 +1,47 @@
+
+//aschoedl@think-cell.com
+
+#include
+#include
+
+template
+int binary_search( IT ib, IT ie, const T& e )
+{
+ if ( ib == ie || e < *ib || *(ie-1) < e )
+ return -1;
+
+ auto base = ib;
+ auto im = (ib+(ie-ib)/2);
+ while ( ib != im )
+ {
+ if ( e < *im )
+ ie = im;
+ else
+ ib = im;
+ im = (ib+(ie-ib)/2);
+ }
+
+ return !(*ib < e) ? (ib - base) : -1;
+}
+
+void main ( void )
+{
+ std::vector v = { 0,1,2,3,4,4,4,4,5,6,7,8,9,11};
+
+ for ( int i = 0; i < v.size(); i++ ) {
+ int j = binary_search( v.begin(), v.end(), v[i] );
+ std::cout << v[i] << "->" << j << std::endl;
+ }
+ std::cout << binary_search( v.begin(), v.end(), 10 ) << std::endl;
+ std::cout << binary_search( v.begin(), v.end(), 12 ) << std::endl;
+ std::cout << binary_search( v.begin(), v.end(), -4 ) << std::endl;
+
+ std::vector v0;
+ std::cout << binary_search( v0.begin(), v0.end(), 10 ) << std::endl;
+
+ std::vector v1 = { 1 };
+ std::cout << binary_search( v1.begin(), v1.end(), -10 ) << std::endl;
+ std::cout << binary_search( v1.begin(), v1.end(), 10 ) << std::endl;
+ std::cout << binary_search( v1.begin(), v1.end(), 1 ) << std::endl;
+}
+
diff --git a/puzzles/interviews/tomtom/tomtom_demo.cpp b/puzzles/interviews/tomtom/tomtom_demo.cpp
new file mode 100644
index 0000000..9cef397
--- /dev/null
+++ b/puzzles/interviews/tomtom/tomtom_demo.cpp
@@ -0,0 +1,52 @@
+/*
+VIM: let g:lcppflags="-std=c++11 -O2 -pthread"
+VIM: let g:wcppflags="/O2 /EHsc /DWIN32"
+VIM: let g:argv=""
+*/
+#include
+#include
+#include
+#include
+#include
+
+int solution( std::vector & a )
+{
+ long long s = 0;
+ for ( auto it = a.begin(), ie=a.end(); it != ie; ++it ) {
+ s += *it;
+ }
+
+ long long t = 0;
+ for ( auto it = a.begin(), ie=a.end(); it != ie; ++it ) {
+ if ( (s-*it)%2 == 0 && t == (s-*it)/2 )
+ return it - a.begin();
+ t += *it;
+ }
+ return -1;
+}
+
+int main ( void )
+{try{
+#if 1
+ std::vector a = {
+ -1,3,-4,5,1,-6,2,1
+ };
+
+ std::cout << solution( a ) << std::endl;
+
+#endif
+ return 0;
+}
+catch ( const std::exception& e )
+{
+ std::cerr << std::endl
+ << "std::exception(\"" << e.what() << "\")." << std::endl;
+ return 2;
+}
+catch ( ... )
+{
+ std::cerr << std::endl
+ << "unknown exception." << std::endl;
+ return 1;
+}}
+
diff --git a/puzzles/interviews/tomtom/tomtom_test1.cpp b/puzzles/interviews/tomtom/tomtom_test1.cpp
new file mode 100644
index 0000000..3b14b48
--- /dev/null
+++ b/puzzles/interviews/tomtom/tomtom_test1.cpp
@@ -0,0 +1,51 @@
+/*
+VIM: let g:lcppflags="-std=c++11 -O2 -pthread"
+VIM: let g:wcppflags="/O2 /EHsc /DWIN32"
+VIM: let g:argv=""
+*/
+#include
+#include
+#include
+#include
+#include
+
+int solution( std::vector & a )
+{
+ auto n = a.size();
+
+ int i = 0;
+ for (int c = 0; c < n; ++c ) {
+ auto new_i = i + a[i];
+ if (new_i < 0 || n <= new_i)
+ return i;
+ i = new_i;
+ }
+
+ return -1;
+}
+
+int main ( void )
+{try{
+#if 1
+ std::vector a = {
+ 2,3,-1,1,-1
+ };
+
+ std::cout << solution( a ) << std::endl;
+
+#endif
+ return 0;
+}
+catch ( const std::exception& e )
+{
+ std::cerr << std::endl
+ << "std::exception(\"" << e.what() << "\")." << std::endl;
+ return 2;
+}
+catch ( ... )
+{
+ std::cerr << std::endl
+ << "unknown exception." << std::endl;
+ return 1;
+}}
+
diff --git a/puzzles/interviews/tomtom/tomtom_test2.cpp b/puzzles/interviews/tomtom/tomtom_test2.cpp
new file mode 100644
index 0000000..597a460
--- /dev/null
+++ b/puzzles/interviews/tomtom/tomtom_test2.cpp
@@ -0,0 +1,57 @@
+/*
+VIM: let g:lcppflags="-std=c++11 -O2 -pthread"
+VIM: let g:wcppflags="/O2 /EHsc /DWIN32"
+VIM: let g:argv=""
+*/
+#include
+#include
+#include
+#include
+#include
+
+int solution( std::vector & a )
+{
+ int max_e = 10001; //
+ std::vector c(max_e, 0);
+
+ for ( auto e : a ) {
+ ++c[e];
+ }
+
+ int m = 0;
+ int mi = 0;
+ for ( auto it = c.begin(); it != c.end(); ++it ) {
+ if (*it > m)
+ {
+ m = *it;
+ mi = it - c.begin();
+ }
+ }
+ return mi;
+}
+
+int main ( void )
+{try{
+#if 1
+ std::vector a = {
+ 0, 0, 1, 2, 0, 10000, 10000, 10000
+ };
+
+ std::cout << solution( a ) << std::endl;
+
+#endif
+ return 0;
+}
+catch ( const std::exception& e )
+{
+ std::cerr << std::endl
+ << "std::exception(\"" << e.what() << "\")." << std::endl;
+ return 2;
+}
+catch ( ... )
+{
+ std::cerr << std::endl
+ << "unknown exception." << std::endl;
+ return 1;
+}}
+
diff --git a/puzzles/interviews/tomtom/tomtom_test3.cpp b/puzzles/interviews/tomtom/tomtom_test3.cpp
new file mode 100644
index 0000000..60df41f
--- /dev/null
+++ b/puzzles/interviews/tomtom/tomtom_test3.cpp
@@ -0,0 +1,88 @@
+/*
+VIM: let g:lcppflags="-std=c++11 -O2 -pthread"
+VIM: let g:wcppflags="/O2 /EHsc /DWIN32"
+VIM: let g:argv=""
+*/
+#include
+#include
+#include
+#include
+#include
+
+/*
+int solution(vector& A) {
+ int n = A.size();
+ int i = n - 1;
+ int result = -1;
+ int k = 0;
+ int maximal = 0;
+ while (i > 0) {
+ if (A[i] == 1) {
+ k = k + 1;
+ if (k >= maximal) {
+ maximal = k;
+ result = i;
+ }
+ }
+ else {
+ k = 0;
+ }
+ i = i - 1;
+ }
+ if (A[i] == 1 && k + 1 > maximal)
+ result = 0;
+ return result;
+}
+*/
+
+using namespace std;
+
+int solution(vector& A) {
+ int n = A.size();
+ int i = n - 1;
+ int result = -1;
+ int k = 0;
+ int maximal = 0;
+ while (i > 0) {
+ if (A[i] == 1) {
+ k = k + 1;
+ if (k >= maximal) {
+ maximal = k;
+ result = i;
+ }
+ }
+ else {
+ k = 0;
+ }
+ i = i - 1;
+ }
+ if (A[i] == 1 && k + 1 >= maximal)
+ result = 0;
+ return result;
+}
+
+int main ( void )
+{try{
+#if 1
+ std::vector a = {
+ 1,1,1,0,1,1,1,0,1
+ };
+
+ std::cout << solution( a ) << std::endl;
+
+#endif
+ return 0;
+}
+catch ( const std::exception& e )
+{
+ std::cerr << std::endl
+ << "std::exception(\"" << e.what() << "\")." << std::endl;
+ return 2;
+}
+catch ( ... )
+{
+ std::cerr << std::endl
+ << "unknown exception." << std::endl;
+ return 1;
+}}
+
diff --git a/project_euler/p001_MultipleOf3and5.cpp b/puzzles/project_euler/p001_MultipleOf3and5.cpp
similarity index 100%
rename from project_euler/p001_MultipleOf3and5.cpp
rename to puzzles/project_euler/p001_MultipleOf3and5.cpp
diff --git a/project_euler/p002_EvenFibNum.cpp b/puzzles/project_euler/p002_EvenFibNum.cpp
similarity index 100%
rename from project_euler/p002_EvenFibNum.cpp
rename to puzzles/project_euler/p002_EvenFibNum.cpp
diff --git a/project_euler/p003_LargestPrimeFactor.cpp b/puzzles/project_euler/p003_LargestPrimeFactor.cpp
similarity index 100%
rename from project_euler/p003_LargestPrimeFactor.cpp
rename to puzzles/project_euler/p003_LargestPrimeFactor.cpp
diff --git a/project_euler/p004_LargestPalindromeProduct.py b/puzzles/project_euler/p004_LargestPalindromeProduct.py
similarity index 100%
rename from project_euler/p004_LargestPalindromeProduct.py
rename to puzzles/project_euler/p004_LargestPalindromeProduct.py
diff --git a/project_euler/p005_SmallestMultiple.cpp b/puzzles/project_euler/p005_SmallestMultiple.cpp
similarity index 100%
rename from project_euler/p005_SmallestMultiple.cpp
rename to puzzles/project_euler/p005_SmallestMultiple.cpp
diff --git a/project_euler/p006_SumSquareDiff.cpp b/puzzles/project_euler/p006_SumSquareDiff.cpp
similarity index 100%
rename from project_euler/p006_SumSquareDiff.cpp
rename to puzzles/project_euler/p006_SumSquareDiff.cpp
diff --git a/project_euler/p007_10001st_prime.cpp b/puzzles/project_euler/p007_10001st_prime.cpp
similarity index 100%
rename from project_euler/p007_10001st_prime.cpp
rename to puzzles/project_euler/p007_10001st_prime.cpp
diff --git a/project_euler/p008_LargestProductInASeries.cpp b/puzzles/project_euler/p008_LargestProductInASeries.cpp
similarity index 100%
rename from project_euler/p008_LargestProductInASeries.cpp
rename to puzzles/project_euler/p008_LargestProductInASeries.cpp
diff --git a/project_euler/p009_SpecialPythagoreanTriplet.py b/puzzles/project_euler/p009_SpecialPythagoreanTriplet.py
similarity index 100%
rename from project_euler/p009_SpecialPythagoreanTriplet.py
rename to puzzles/project_euler/p009_SpecialPythagoreanTriplet.py
diff --git a/project_euler/p010_SummationOfPrimes.cpp b/puzzles/project_euler/p010_SummationOfPrimes.cpp
similarity index 100%
rename from project_euler/p010_SummationOfPrimes.cpp
rename to puzzles/project_euler/p010_SummationOfPrimes.cpp
diff --git a/project_euler/p011_LargestProductInAGrid.py b/puzzles/project_euler/p011_LargestProductInAGrid.py
similarity index 100%
rename from project_euler/p011_LargestProductInAGrid.py
rename to puzzles/project_euler/p011_LargestProductInAGrid.py
diff --git a/project_euler/p012_HighlyDivisibleTriangularNumber.py b/puzzles/project_euler/p012_HighlyDivisibleTriangularNumber.py
similarity index 100%
rename from project_euler/p012_HighlyDivisibleTriangularNumber.py
rename to puzzles/project_euler/p012_HighlyDivisibleTriangularNumber.py
diff --git a/project_euler/p013_LargeSum.py b/puzzles/project_euler/p013_LargeSum.py
similarity index 100%
rename from project_euler/p013_LargeSum.py
rename to puzzles/project_euler/p013_LargeSum.py
diff --git a/project_euler/p014_LongestCollatzSequence.py b/puzzles/project_euler/p014_LongestCollatzSequence.py
similarity index 100%
rename from project_euler/p014_LongestCollatzSequence.py
rename to puzzles/project_euler/p014_LongestCollatzSequence.py
diff --git a/project_euler/p015_LatticePath.py b/puzzles/project_euler/p015_LatticePath.py
similarity index 100%
rename from project_euler/p015_LatticePath.py
rename to puzzles/project_euler/p015_LatticePath.py
diff --git a/project_euler/p016_PowerDigitSum.py b/puzzles/project_euler/p016_PowerDigitSum.py
similarity index 100%
rename from project_euler/p016_PowerDigitSum.py
rename to puzzles/project_euler/p016_PowerDigitSum.py
diff --git a/project_euler/p017_NumberLetterCounts.py b/puzzles/project_euler/p017_NumberLetterCounts.py
similarity index 100%
rename from project_euler/p017_NumberLetterCounts.py
rename to puzzles/project_euler/p017_NumberLetterCounts.py
diff --git a/project_euler/p018_MaximumPathSumI.py b/puzzles/project_euler/p018_MaximumPathSumI.py
similarity index 100%
rename from project_euler/p018_MaximumPathSumI.py
rename to puzzles/project_euler/p018_MaximumPathSumI.py
diff --git a/project_euler/p019_CountingSundays.py b/puzzles/project_euler/p019_CountingSundays.py
similarity index 100%
rename from project_euler/p019_CountingSundays.py
rename to puzzles/project_euler/p019_CountingSundays.py
diff --git a/project_euler/p020_FactorialDigitSum.py b/puzzles/project_euler/p020_FactorialDigitSum.py
similarity index 100%
rename from project_euler/p020_FactorialDigitSum.py
rename to puzzles/project_euler/p020_FactorialDigitSum.py
diff --git a/project_euler/p021_AmicableNumbers.py b/puzzles/project_euler/p021_AmicableNumbers.py
similarity index 100%
rename from project_euler/p021_AmicableNumbers.py
rename to puzzles/project_euler/p021_AmicableNumbers.py
diff --git a/project_euler/p022_NamesScores.py b/puzzles/project_euler/p022_NamesScores.py
similarity index 100%
rename from project_euler/p022_NamesScores.py
rename to puzzles/project_euler/p022_NamesScores.py
diff --git a/project_euler/p023_NonAbundantSums.py b/puzzles/project_euler/p023_NonAbundantSums.py
similarity index 100%
rename from project_euler/p023_NonAbundantSums.py
rename to puzzles/project_euler/p023_NonAbundantSums.py
diff --git a/project_euler/p024_LexicographicPermutations.py b/puzzles/project_euler/p024_LexicographicPermutations.py
similarity index 100%
rename from project_euler/p024_LexicographicPermutations.py
rename to puzzles/project_euler/p024_LexicographicPermutations.py
diff --git a/project_euler/p025_1000DigitFibonacciNumber.py b/puzzles/project_euler/p025_1000DigitFibonacciNumber.py
similarity index 100%
rename from project_euler/p025_1000DigitFibonacciNumber.py
rename to puzzles/project_euler/p025_1000DigitFibonacciNumber.py
diff --git a/project_euler/p026_ReciprocalCycles.py b/puzzles/project_euler/p026_ReciprocalCycles.py
similarity index 100%
rename from project_euler/p026_ReciprocalCycles.py
rename to puzzles/project_euler/p026_ReciprocalCycles.py
diff --git a/project_euler/p027_QuadraticPrimes.py b/puzzles/project_euler/p027_QuadraticPrimes.py
similarity index 100%
rename from project_euler/p027_QuadraticPrimes.py
rename to puzzles/project_euler/p027_QuadraticPrimes.py
diff --git a/project_euler/p028_NumberSpiralDiagonals.py b/puzzles/project_euler/p028_NumberSpiralDiagonals.py
similarity index 100%
rename from project_euler/p028_NumberSpiralDiagonals.py
rename to puzzles/project_euler/p028_NumberSpiralDiagonals.py
diff --git a/project_euler/p029_DistinctPowers.py b/puzzles/project_euler/p029_DistinctPowers.py
similarity index 100%
rename from project_euler/p029_DistinctPowers.py
rename to puzzles/project_euler/p029_DistinctPowers.py
diff --git a/project_euler/p030_DigitFifthPowers.py b/puzzles/project_euler/p030_DigitFifthPowers.py
similarity index 100%
rename from project_euler/p030_DigitFifthPowers.py
rename to puzzles/project_euler/p030_DigitFifthPowers.py
diff --git a/project_euler/p031_CoinSums.py b/puzzles/project_euler/p031_CoinSums.py
similarity index 100%
rename from project_euler/p031_CoinSums.py
rename to puzzles/project_euler/p031_CoinSums.py
diff --git a/project_euler/p032_PandigitalProducts.py b/puzzles/project_euler/p032_PandigitalProducts.py
similarity index 100%
rename from project_euler/p032_PandigitalProducts.py
rename to puzzles/project_euler/p032_PandigitalProducts.py
diff --git a/project_euler/p033_DigitCancelingFractions.py b/puzzles/project_euler/p033_DigitCancelingFractions.py
similarity index 100%
rename from project_euler/p033_DigitCancelingFractions.py
rename to puzzles/project_euler/p033_DigitCancelingFractions.py
diff --git a/project_euler/p034_DigitFactorials.py b/puzzles/project_euler/p034_DigitFactorials.py
similarity index 100%
rename from project_euler/p034_DigitFactorials.py
rename to puzzles/project_euler/p034_DigitFactorials.py
diff --git a/project_euler/p035_CircularPrimes.py b/puzzles/project_euler/p035_CircularPrimes.py
similarity index 100%
rename from project_euler/p035_CircularPrimes.py
rename to puzzles/project_euler/p035_CircularPrimes.py
diff --git a/project_euler/p036_DoubleBasePalindromes.py b/puzzles/project_euler/p036_DoubleBasePalindromes.py
similarity index 100%
rename from project_euler/p036_DoubleBasePalindromes.py
rename to puzzles/project_euler/p036_DoubleBasePalindromes.py
diff --git a/project_euler/p037_TruncatablePrimes.py b/puzzles/project_euler/p037_TruncatablePrimes.py
similarity index 100%
rename from project_euler/p037_TruncatablePrimes.py
rename to puzzles/project_euler/p037_TruncatablePrimes.py
diff --git a/project_euler/p038_PandigitalMultiples.py b/puzzles/project_euler/p038_PandigitalMultiples.py
similarity index 100%
rename from project_euler/p038_PandigitalMultiples.py
rename to puzzles/project_euler/p038_PandigitalMultiples.py
diff --git a/project_euler/p039_IntegerRightTriangles.py b/puzzles/project_euler/p039_IntegerRightTriangles.py
similarity index 100%
rename from project_euler/p039_IntegerRightTriangles.py
rename to puzzles/project_euler/p039_IntegerRightTriangles.py
diff --git a/project_euler/p040_ChampernowneConstant.py b/puzzles/project_euler/p040_ChampernowneConstant.py
similarity index 100%
rename from project_euler/p040_ChampernowneConstant.py
rename to puzzles/project_euler/p040_ChampernowneConstant.py
diff --git a/project_euler/p041_PandigitalPrime.py b/puzzles/project_euler/p041_PandigitalPrime.py
similarity index 100%
rename from project_euler/p041_PandigitalPrime.py
rename to puzzles/project_euler/p041_PandigitalPrime.py
diff --git a/project_euler/p042_CodedTriangleNumbers.py b/puzzles/project_euler/p042_CodedTriangleNumbers.py
similarity index 100%
rename from project_euler/p042_CodedTriangleNumbers.py
rename to puzzles/project_euler/p042_CodedTriangleNumbers.py
diff --git a/project_euler/p043_SubStringDivisibility.py b/puzzles/project_euler/p043_SubStringDivisibility.py
similarity index 100%
rename from project_euler/p043_SubStringDivisibility.py
rename to puzzles/project_euler/p043_SubStringDivisibility.py
diff --git a/project_euler/p044_PentagonNumbers.py b/puzzles/project_euler/p044_PentagonNumbers.py
similarity index 100%
rename from project_euler/p044_PentagonNumbers.py
rename to puzzles/project_euler/p044_PentagonNumbers.py
diff --git a/project_euler/p045_TriangularPentagonalAndHexagonal.py b/puzzles/project_euler/p045_TriangularPentagonalAndHexagonal.py
similarity index 100%
rename from project_euler/p045_TriangularPentagonalAndHexagonal.py
rename to puzzles/project_euler/p045_TriangularPentagonalAndHexagonal.py
diff --git a/project_euler/p046_GoldbachOtherConjecture.py b/puzzles/project_euler/p046_GoldbachOtherConjecture.py
similarity index 100%
rename from project_euler/p046_GoldbachOtherConjecture.py
rename to puzzles/project_euler/p046_GoldbachOtherConjecture.py
diff --git a/project_euler/p047_DistinctPrimesFactors.py b/puzzles/project_euler/p047_DistinctPrimesFactors.py
similarity index 100%
rename from project_euler/p047_DistinctPrimesFactors.py
rename to puzzles/project_euler/p047_DistinctPrimesFactors.py
diff --git a/project_euler/p048_SelfPowers.py b/puzzles/project_euler/p048_SelfPowers.py
similarity index 100%
rename from project_euler/p048_SelfPowers.py
rename to puzzles/project_euler/p048_SelfPowers.py
diff --git a/project_euler/p049_PrimePermutations.py b/puzzles/project_euler/p049_PrimePermutations.py
similarity index 100%
rename from project_euler/p049_PrimePermutations.py
rename to puzzles/project_euler/p049_PrimePermutations.py
diff --git a/project_euler/p050_ConsecutivePrimeSum.py b/puzzles/project_euler/p050_ConsecutivePrimeSum.py
similarity index 100%
rename from project_euler/p050_ConsecutivePrimeSum.py
rename to puzzles/project_euler/p050_ConsecutivePrimeSum.py
diff --git a/project_euler/p051_PrimeDigitReplacements.py b/puzzles/project_euler/p051_PrimeDigitReplacements.py
similarity index 100%
rename from project_euler/p051_PrimeDigitReplacements.py
rename to puzzles/project_euler/p051_PrimeDigitReplacements.py
diff --git a/project_euler/p052_PermutedMultiples.py b/puzzles/project_euler/p052_PermutedMultiples.py
similarity index 100%
rename from project_euler/p052_PermutedMultiples.py
rename to puzzles/project_euler/p052_PermutedMultiples.py
diff --git a/project_euler/p053_CombinatoricSelections.py b/puzzles/project_euler/p053_CombinatoricSelections.py
similarity index 100%
rename from project_euler/p053_CombinatoricSelections.py
rename to puzzles/project_euler/p053_CombinatoricSelections.py
diff --git a/project_euler/p054_PokerHands.py b/puzzles/project_euler/p054_PokerHands.py
similarity index 100%
rename from project_euler/p054_PokerHands.py
rename to puzzles/project_euler/p054_PokerHands.py
diff --git a/project_euler/p055_LychrelNumbers.py b/puzzles/project_euler/p055_LychrelNumbers.py
similarity index 100%
rename from project_euler/p055_LychrelNumbers.py
rename to puzzles/project_euler/p055_LychrelNumbers.py
diff --git a/project_euler/p056_PowerfulDigitSum.py b/puzzles/project_euler/p056_PowerfulDigitSum.py
similarity index 100%
rename from project_euler/p056_PowerfulDigitSum.py
rename to puzzles/project_euler/p056_PowerfulDigitSum.py
diff --git a/project_euler/p057_SquareRootConvergents.py b/puzzles/project_euler/p057_SquareRootConvergents.py
similarity index 100%
rename from project_euler/p057_SquareRootConvergents.py
rename to puzzles/project_euler/p057_SquareRootConvergents.py
diff --git a/project_euler/p058_SpiralPrimes.py b/puzzles/project_euler/p058_SpiralPrimes.py
similarity index 100%
rename from project_euler/p058_SpiralPrimes.py
rename to puzzles/project_euler/p058_SpiralPrimes.py
diff --git a/project_euler/p059_XORDecryption.py b/puzzles/project_euler/p059_XORDecryption.py
similarity index 100%
rename from project_euler/p059_XORDecryption.py
rename to puzzles/project_euler/p059_XORDecryption.py
diff --git a/project_euler/p060_PrimePairSets.py b/puzzles/project_euler/p060_PrimePairSets.py
similarity index 100%
rename from project_euler/p060_PrimePairSets.py
rename to puzzles/project_euler/p060_PrimePairSets.py
diff --git a/project_euler/p061_CyclicalFigurateNumbers.py b/puzzles/project_euler/p061_CyclicalFigurateNumbers.py
similarity index 100%
rename from project_euler/p061_CyclicalFigurateNumbers.py
rename to puzzles/project_euler/p061_CyclicalFigurateNumbers.py
diff --git a/project_euler/p062_CubicPermutations.py b/puzzles/project_euler/p062_CubicPermutations.py
similarity index 100%
rename from project_euler/p062_CubicPermutations.py
rename to puzzles/project_euler/p062_CubicPermutations.py
diff --git a/project_euler/p063_PowerfulDigitCounts.py b/puzzles/project_euler/p063_PowerfulDigitCounts.py
similarity index 100%
rename from project_euler/p063_PowerfulDigitCounts.py
rename to puzzles/project_euler/p063_PowerfulDigitCounts.py
diff --git a/project_euler/p064_OddPeriodSquareRoots.py b/puzzles/project_euler/p064_OddPeriodSquareRoots.py
similarity index 100%
rename from project_euler/p064_OddPeriodSquareRoots.py
rename to puzzles/project_euler/p064_OddPeriodSquareRoots.py
diff --git a/project_euler/p065_ConvergentsOfE.py b/puzzles/project_euler/p065_ConvergentsOfE.py
similarity index 100%
rename from project_euler/p065_ConvergentsOfE.py
rename to puzzles/project_euler/p065_ConvergentsOfE.py
diff --git a/project_euler/p066_DiophantineEquation.py b/puzzles/project_euler/p066_DiophantineEquation.py
similarity index 100%
rename from project_euler/p066_DiophantineEquation.py
rename to puzzles/project_euler/p066_DiophantineEquation.py
diff --git a/project_euler/p067_MaximumPathSumII.py b/puzzles/project_euler/p067_MaximumPathSumII.py
similarity index 100%
rename from project_euler/p067_MaximumPathSumII.py
rename to puzzles/project_euler/p067_MaximumPathSumII.py
diff --git a/project_euler/p067_triangle.txt b/puzzles/project_euler/p067_triangle.txt
similarity index 100%
rename from project_euler/p067_triangle.txt
rename to puzzles/project_euler/p067_triangle.txt
diff --git a/project_euler/p068_Magic5GonRing.py b/puzzles/project_euler/p068_Magic5GonRing.py
similarity index 100%
rename from project_euler/p068_Magic5GonRing.py
rename to puzzles/project_euler/p068_Magic5GonRing.py
diff --git a/project_euler/p069_TotientMaximum.py b/puzzles/project_euler/p069_TotientMaximum.py
similarity index 100%
rename from project_euler/p069_TotientMaximum.py
rename to puzzles/project_euler/p069_TotientMaximum.py
diff --git a/project_euler/p070_TotientPermutation.py b/puzzles/project_euler/p070_TotientPermutation.py
similarity index 100%
rename from project_euler/p070_TotientPermutation.py
rename to puzzles/project_euler/p070_TotientPermutation.py
diff --git a/project_euler/p071_OrderedFractions.py b/puzzles/project_euler/p071_OrderedFractions.py
similarity index 100%
rename from project_euler/p071_OrderedFractions.py
rename to puzzles/project_euler/p071_OrderedFractions.py
diff --git a/project_euler/p072_CountingFractions.py b/puzzles/project_euler/p072_CountingFractions.py
similarity index 100%
rename from project_euler/p072_CountingFractions.py
rename to puzzles/project_euler/p072_CountingFractions.py
diff --git a/project_euler/p073_CountingFractionsInARange.py b/puzzles/project_euler/p073_CountingFractionsInARange.py
similarity index 100%
rename from project_euler/p073_CountingFractionsInARange.py
rename to puzzles/project_euler/p073_CountingFractionsInARange.py
diff --git a/project_euler/p074_DigitFactorialChains.py b/puzzles/project_euler/p074_DigitFactorialChains.py
similarity index 100%
rename from project_euler/p074_DigitFactorialChains.py
rename to puzzles/project_euler/p074_DigitFactorialChains.py
diff --git a/project_euler/p075_SingularIntegerRightTriangles.py b/puzzles/project_euler/p075_SingularIntegerRightTriangles.py
similarity index 100%
rename from project_euler/p075_SingularIntegerRightTriangles.py
rename to puzzles/project_euler/p075_SingularIntegerRightTriangles.py
diff --git a/project_euler/p076_CountingSummations.py b/puzzles/project_euler/p076_CountingSummations.py
similarity index 100%
rename from project_euler/p076_CountingSummations.py
rename to puzzles/project_euler/p076_CountingSummations.py
diff --git a/project_euler/p077_PrimeSummations.py b/puzzles/project_euler/p077_PrimeSummations.py
similarity index 100%
rename from project_euler/p077_PrimeSummations.py
rename to puzzles/project_euler/p077_PrimeSummations.py
diff --git a/project_euler/p078_CoinPartitions.py b/puzzles/project_euler/p078_CoinPartitions.py
similarity index 100%
rename from project_euler/p078_CoinPartitions.py
rename to puzzles/project_euler/p078_CoinPartitions.py
diff --git a/project_euler/p079_PasscodeDerivation.py b/puzzles/project_euler/p079_PasscodeDerivation.py
similarity index 100%
rename from project_euler/p079_PasscodeDerivation.py
rename to puzzles/project_euler/p079_PasscodeDerivation.py
diff --git a/project_euler/p080_SquareRootDigitalExpansion.py b/puzzles/project_euler/p080_SquareRootDigitalExpansion.py
similarity index 100%
rename from project_euler/p080_SquareRootDigitalExpansion.py
rename to puzzles/project_euler/p080_SquareRootDigitalExpansion.py
diff --git a/project_euler/p081_PathSum_2ways.py b/puzzles/project_euler/p081_PathSum_2ways.py
similarity index 100%
rename from project_euler/p081_PathSum_2ways.py
rename to puzzles/project_euler/p081_PathSum_2ways.py
diff --git a/project_euler/p082_PathSum_3ways.py b/puzzles/project_euler/p082_PathSum_3ways.py
similarity index 100%
rename from project_euler/p082_PathSum_3ways.py
rename to puzzles/project_euler/p082_PathSum_3ways.py
diff --git a/project_euler/p083_PathSum_4ways.py b/puzzles/project_euler/p083_PathSum_4ways.py
similarity index 100%
rename from project_euler/p083_PathSum_4ways.py
rename to puzzles/project_euler/p083_PathSum_4ways.py
diff --git a/project_euler/p084_MonopolyOdds.py b/puzzles/project_euler/p084_MonopolyOdds.py
similarity index 100%
rename from project_euler/p084_MonopolyOdds.py
rename to puzzles/project_euler/p084_MonopolyOdds.py
diff --git a/project_euler/p085_CountingRectangles.py b/puzzles/project_euler/p085_CountingRectangles.py
similarity index 100%
rename from project_euler/p085_CountingRectangles.py
rename to puzzles/project_euler/p085_CountingRectangles.py
diff --git a/project_euler/p086_CuboidRoute.py b/puzzles/project_euler/p086_CuboidRoute.py
similarity index 100%
rename from project_euler/p086_CuboidRoute.py
rename to puzzles/project_euler/p086_CuboidRoute.py
diff --git a/project_euler/p087_PrimePowerTriples.py b/puzzles/project_euler/p087_PrimePowerTriples.py
similarity index 100%
rename from project_euler/p087_PrimePowerTriples.py
rename to puzzles/project_euler/p087_PrimePowerTriples.py
diff --git a/project_euler/p088_ProductSumNumbers.py b/puzzles/project_euler/p088_ProductSumNumbers.py
similarity index 100%
rename from project_euler/p088_ProductSumNumbers.py
rename to puzzles/project_euler/p088_ProductSumNumbers.py
diff --git a/project_euler/p089_RomanNumerals.py b/puzzles/project_euler/p089_RomanNumerals.py
similarity index 100%
rename from project_euler/p089_RomanNumerals.py
rename to puzzles/project_euler/p089_RomanNumerals.py
diff --git a/project_euler/p090_CubeDigitPairs.py b/puzzles/project_euler/p090_CubeDigitPairs.py
similarity index 100%
rename from project_euler/p090_CubeDigitPairs.py
rename to puzzles/project_euler/p090_CubeDigitPairs.py
diff --git a/project_euler/p091_RightTrianglesWithIntegerCoordinates.py b/puzzles/project_euler/p091_RightTrianglesWithIntegerCoordinates.py
similarity index 100%
rename from project_euler/p091_RightTrianglesWithIntegerCoordinates.py
rename to puzzles/project_euler/p091_RightTrianglesWithIntegerCoordinates.py
diff --git a/project_euler/p092_SquareDigitChains.py b/puzzles/project_euler/p092_SquareDigitChains.py
similarity index 100%
rename from project_euler/p092_SquareDigitChains.py
rename to puzzles/project_euler/p092_SquareDigitChains.py
diff --git a/project_euler/p093_ArithmeticExpressions.py b/puzzles/project_euler/p093_ArithmeticExpressions.py
similarity index 100%
rename from project_euler/p093_ArithmeticExpressions.py
rename to puzzles/project_euler/p093_ArithmeticExpressions.py
diff --git a/project_euler/p094_AlmostEquilateralTriangles.py b/puzzles/project_euler/p094_AlmostEquilateralTriangles.py
similarity index 100%
rename from project_euler/p094_AlmostEquilateralTriangles.py
rename to puzzles/project_euler/p094_AlmostEquilateralTriangles.py
diff --git a/project_euler/p095_AmicableChains.py b/puzzles/project_euler/p095_AmicableChains.py
similarity index 100%
rename from project_euler/p095_AmicableChains.py
rename to puzzles/project_euler/p095_AmicableChains.py
diff --git a/project_euler/p096_SuDoku.py b/puzzles/project_euler/p096_SuDoku.py
similarity index 100%
rename from project_euler/p096_SuDoku.py
rename to puzzles/project_euler/p096_SuDoku.py
diff --git a/project_euler/p097_LargeNonMersennePrime.py b/puzzles/project_euler/p097_LargeNonMersennePrime.py
similarity index 100%
rename from project_euler/p097_LargeNonMersennePrime.py
rename to puzzles/project_euler/p097_LargeNonMersennePrime.py
diff --git a/project_euler/p098_AnagramicSquares.py b/puzzles/project_euler/p098_AnagramicSquares.py
similarity index 100%
rename from project_euler/p098_AnagramicSquares.py
rename to puzzles/project_euler/p098_AnagramicSquares.py
diff --git a/project_euler/p099_LargestExponential.py b/puzzles/project_euler/p099_LargestExponential.py
similarity index 100%
rename from project_euler/p099_LargestExponential.py
rename to puzzles/project_euler/p099_LargestExponential.py
diff --git a/project_euler/p100_ArrangedProbability.py b/puzzles/project_euler/p100_ArrangedProbability.py
similarity index 100%
rename from project_euler/p100_ArrangedProbability.py
rename to puzzles/project_euler/p100_ArrangedProbability.py
diff --git a/project_euler/p101_OptimumPolynomial.py b/puzzles/project_euler/p101_OptimumPolynomial.py
similarity index 100%
rename from project_euler/p101_OptimumPolynomial.py
rename to puzzles/project_euler/p101_OptimumPolynomial.py
diff --git a/project_euler/p102_TriangleContainment.py b/puzzles/project_euler/p102_TriangleContainment.py
similarity index 100%
rename from project_euler/p102_TriangleContainment.py
rename to puzzles/project_euler/p102_TriangleContainment.py
diff --git a/project_euler/p103_SpecialSubsetSums_optimum.py b/puzzles/project_euler/p103_SpecialSubsetSums_optimum.py
similarity index 100%
rename from project_euler/p103_SpecialSubsetSums_optimum.py
rename to puzzles/project_euler/p103_SpecialSubsetSums_optimum.py
diff --git a/project_euler/p104_PandigitalFibonacciEnds.py b/puzzles/project_euler/p104_PandigitalFibonacciEnds.py
similarity index 100%
rename from project_euler/p104_PandigitalFibonacciEnds.py
rename to puzzles/project_euler/p104_PandigitalFibonacciEnds.py
diff --git a/project_euler/p105_SpecialSubsetSums_testing.py b/puzzles/project_euler/p105_SpecialSubsetSums_testing.py
similarity index 100%
rename from project_euler/p105_SpecialSubsetSums_testing.py
rename to puzzles/project_euler/p105_SpecialSubsetSums_testing.py
diff --git a/project_euler/p106_SpecialSubsetSums_metatesting.py b/puzzles/project_euler/p106_SpecialSubsetSums_metatesting.py
similarity index 100%
rename from project_euler/p106_SpecialSubsetSums_metatesting.py
rename to puzzles/project_euler/p106_SpecialSubsetSums_metatesting.py
diff --git a/project_euler/p107_MinimalNetwork.py b/puzzles/project_euler/p107_MinimalNetwork.py
similarity index 100%
rename from project_euler/p107_MinimalNetwork.py
rename to puzzles/project_euler/p107_MinimalNetwork.py
diff --git a/project_euler/p108_DiophantineReciprocalsI.py b/puzzles/project_euler/p108_DiophantineReciprocalsI.py
similarity index 100%
rename from project_euler/p108_DiophantineReciprocalsI.py
rename to puzzles/project_euler/p108_DiophantineReciprocalsI.py
diff --git a/project_euler/p109_Darts.py b/puzzles/project_euler/p109_Darts.py
similarity index 100%
rename from project_euler/p109_Darts.py
rename to puzzles/project_euler/p109_Darts.py
diff --git a/project_euler/p110_DiophantineReciprocalsII.py b/puzzles/project_euler/p110_DiophantineReciprocalsII.py
similarity index 100%
rename from project_euler/p110_DiophantineReciprocalsII.py
rename to puzzles/project_euler/p110_DiophantineReciprocalsII.py
diff --git a/project_euler/p111_PrimesWithRuns.py b/puzzles/project_euler/p111_PrimesWithRuns.py
similarity index 100%
rename from project_euler/p111_PrimesWithRuns.py
rename to puzzles/project_euler/p111_PrimesWithRuns.py
diff --git a/project_euler/p112_BouncyNumbers.py b/puzzles/project_euler/p112_BouncyNumbers.py
similarity index 100%
rename from project_euler/p112_BouncyNumbers.py
rename to puzzles/project_euler/p112_BouncyNumbers.py
diff --git a/project_euler/p113_NonBouncyNumbers.py b/puzzles/project_euler/p113_NonBouncyNumbers.py
similarity index 100%
rename from project_euler/p113_NonBouncyNumbers.py
rename to puzzles/project_euler/p113_NonBouncyNumbers.py
diff --git a/project_euler/p114_CountingBlockCombinationsI.py b/puzzles/project_euler/p114_CountingBlockCombinationsI.py
similarity index 100%
rename from project_euler/p114_CountingBlockCombinationsI.py
rename to puzzles/project_euler/p114_CountingBlockCombinationsI.py
diff --git a/project_euler/p115_CountingBlockCombinationsII.py b/puzzles/project_euler/p115_CountingBlockCombinationsII.py
similarity index 100%
rename from project_euler/p115_CountingBlockCombinationsII.py
rename to puzzles/project_euler/p115_CountingBlockCombinationsII.py
diff --git a/project_euler/p116_Red,GreenOrBlueTiles.py b/puzzles/project_euler/p116_Red,GreenOrBlueTiles.py
similarity index 100%
rename from project_euler/p116_Red,GreenOrBlueTiles.py
rename to puzzles/project_euler/p116_Red,GreenOrBlueTiles.py
diff --git a/project_euler/p117_Red,Green,AndBlueTiles.py b/puzzles/project_euler/p117_Red,Green,AndBlueTiles.py
similarity index 100%
rename from project_euler/p117_Red,Green,AndBlueTiles.py
rename to puzzles/project_euler/p117_Red,Green,AndBlueTiles.py
diff --git a/project_euler/p118_PandigitalPrimeSets.py b/puzzles/project_euler/p118_PandigitalPrimeSets.py
similarity index 100%
rename from project_euler/p118_PandigitalPrimeSets.py
rename to puzzles/project_euler/p118_PandigitalPrimeSets.py
diff --git a/project_euler/p119_DigitPowerSum.py b/puzzles/project_euler/p119_DigitPowerSum.py
similarity index 100%
rename from project_euler/p119_DigitPowerSum.py
rename to puzzles/project_euler/p119_DigitPowerSum.py
diff --git a/project_euler/p120_SquareRemainders.py b/puzzles/project_euler/p120_SquareRemainders.py
similarity index 100%
rename from project_euler/p120_SquareRemainders.py
rename to puzzles/project_euler/p120_SquareRemainders.py
diff --git a/project_euler/p121_DiscGamePrizeFund.py b/puzzles/project_euler/p121_DiscGamePrizeFund.py
similarity index 100%
rename from project_euler/p121_DiscGamePrizeFund.py
rename to puzzles/project_euler/p121_DiscGamePrizeFund.py
diff --git a/project_euler/p122_EfficientExponentiation.py b/puzzles/project_euler/p122_EfficientExponentiation.py
similarity index 100%
rename from project_euler/p122_EfficientExponentiation.py
rename to puzzles/project_euler/p122_EfficientExponentiation.py
diff --git a/project_euler/p123_PrimeSquareRemainders.py b/puzzles/project_euler/p123_PrimeSquareRemainders.py
similarity index 100%
rename from project_euler/p123_PrimeSquareRemainders.py
rename to puzzles/project_euler/p123_PrimeSquareRemainders.py
diff --git a/project_euler/p124_OrderedRadicals.py b/puzzles/project_euler/p124_OrderedRadicals.py
similarity index 100%
rename from project_euler/p124_OrderedRadicals.py
rename to puzzles/project_euler/p124_OrderedRadicals.py
diff --git a/project_euler/p125_PalindromicSums.py b/puzzles/project_euler/p125_PalindromicSums.py
similarity index 100%
rename from project_euler/p125_PalindromicSums.py
rename to puzzles/project_euler/p125_PalindromicSums.py
diff --git a/project_euler/p126_CuboidLayers.py b/puzzles/project_euler/p126_CuboidLayers.py
similarity index 100%
rename from project_euler/p126_CuboidLayers.py
rename to puzzles/project_euler/p126_CuboidLayers.py
diff --git a/project_euler/p127_abcHits.py b/puzzles/project_euler/p127_abcHits.py
similarity index 100%
rename from project_euler/p127_abcHits.py
rename to puzzles/project_euler/p127_abcHits.py
diff --git a/project_euler/p128_HexagonalTileDifferences.py b/puzzles/project_euler/p128_HexagonalTileDifferences.py
similarity index 100%
rename from project_euler/p128_HexagonalTileDifferences.py
rename to puzzles/project_euler/p128_HexagonalTileDifferences.py
diff --git a/project_euler/p129_RepunitDivisibility.py b/puzzles/project_euler/p129_RepunitDivisibility.py
similarity index 100%
rename from project_euler/p129_RepunitDivisibility.py
rename to puzzles/project_euler/p129_RepunitDivisibility.py
diff --git a/project_euler/p130_CompositesWithPrimeRepunitProperty.py b/puzzles/project_euler/p130_CompositesWithPrimeRepunitProperty.py
similarity index 100%
rename from project_euler/p130_CompositesWithPrimeRepunitProperty.py
rename to puzzles/project_euler/p130_CompositesWithPrimeRepunitProperty.py
diff --git a/project_euler/p131_PrimeCubePartnership.py b/puzzles/project_euler/p131_PrimeCubePartnership.py
similarity index 100%
rename from project_euler/p131_PrimeCubePartnership.py
rename to puzzles/project_euler/p131_PrimeCubePartnership.py
diff --git a/project_euler/p132_LargeRepunitFactors.py b/puzzles/project_euler/p132_LargeRepunitFactors.py
similarity index 100%
rename from project_euler/p132_LargeRepunitFactors.py
rename to puzzles/project_euler/p132_LargeRepunitFactors.py
diff --git a/project_euler/p133_RepunitNonfactors.py b/puzzles/project_euler/p133_RepunitNonfactors.py
similarity index 100%
rename from project_euler/p133_RepunitNonfactors.py
rename to puzzles/project_euler/p133_RepunitNonfactors.py
diff --git a/project_euler/p134_PrimePairConnection.py b/puzzles/project_euler/p134_PrimePairConnection.py
similarity index 100%
rename from project_euler/p134_PrimePairConnection.py
rename to puzzles/project_euler/p134_PrimePairConnection.py
diff --git a/project_euler/p135_SameDifferences.py b/puzzles/project_euler/p135_SameDifferences.py
similarity index 100%
rename from project_euler/p135_SameDifferences.py
rename to puzzles/project_euler/p135_SameDifferences.py
diff --git a/project_euler/p136_SingletonDifference.py b/puzzles/project_euler/p136_SingletonDifference.py
similarity index 100%
rename from project_euler/p136_SingletonDifference.py
rename to puzzles/project_euler/p136_SingletonDifference.py
diff --git a/project_euler/p137_FibonacciGoldenNuggets.py b/puzzles/project_euler/p137_FibonacciGoldenNuggets.py
similarity index 100%
rename from project_euler/p137_FibonacciGoldenNuggets.py
rename to puzzles/project_euler/p137_FibonacciGoldenNuggets.py
diff --git a/project_euler/p138_SpecialIsoscelesTriangles.py b/puzzles/project_euler/p138_SpecialIsoscelesTriangles.py
similarity index 100%
rename from project_euler/p138_SpecialIsoscelesTriangles.py
rename to puzzles/project_euler/p138_SpecialIsoscelesTriangles.py
diff --git a/project_euler/p139_PythagoreanTiles.py b/puzzles/project_euler/p139_PythagoreanTiles.py
similarity index 100%
rename from project_euler/p139_PythagoreanTiles.py
rename to puzzles/project_euler/p139_PythagoreanTiles.py
diff --git a/project_euler/p140_ModifiedFibonacciGoldenNuggets.py b/puzzles/project_euler/p140_ModifiedFibonacciGoldenNuggets.py
similarity index 100%
rename from project_euler/p140_ModifiedFibonacciGoldenNuggets.py
rename to puzzles/project_euler/p140_ModifiedFibonacciGoldenNuggets.py
diff --git a/project_euler/p141_InvestigatingProgressiveNumbers,N,WhichAreAlsoSquare..py b/puzzles/project_euler/p141_InvestigatingProgressiveNumbers,N,WhichAreAlsoSquare..py
similarity index 100%
rename from project_euler/p141_InvestigatingProgressiveNumbers,N,WhichAreAlsoSquare..py
rename to puzzles/project_euler/p141_InvestigatingProgressiveNumbers,N,WhichAreAlsoSquare..py
diff --git a/project_euler/p142_PerfectSquareCollection.py b/puzzles/project_euler/p142_PerfectSquareCollection.py
similarity index 100%
rename from project_euler/p142_PerfectSquareCollection.py
rename to puzzles/project_euler/p142_PerfectSquareCollection.py
diff --git a/project_euler/p143_InvestigatingTheTorricelliPointOfATriangle.py b/puzzles/project_euler/p143_InvestigatingTheTorricelliPointOfATriangle.py
similarity index 100%
rename from project_euler/p143_InvestigatingTheTorricelliPointOfATriangle.py
rename to puzzles/project_euler/p143_InvestigatingTheTorricelliPointOfATriangle.py
diff --git a/project_euler/p144_InvestigatingMultipleReflectionsOfALaserBeam..py b/puzzles/project_euler/p144_InvestigatingMultipleReflectionsOfALaserBeam..py
similarity index 100%
rename from project_euler/p144_InvestigatingMultipleReflectionsOfALaserBeam..py
rename to puzzles/project_euler/p144_InvestigatingMultipleReflectionsOfALaserBeam..py
diff --git a/project_euler/p145_HowManyReversibleNumbersAreThereBelowOneBillion.py b/puzzles/project_euler/p145_HowManyReversibleNumbersAreThereBelowOneBillion.py
similarity index 100%
rename from project_euler/p145_HowManyReversibleNumbersAreThereBelowOneBillion.py
rename to puzzles/project_euler/p145_HowManyReversibleNumbersAreThereBelowOneBillion.py
diff --git a/project_euler/p146_InvestigatingAPrimePattern.py b/puzzles/project_euler/p146_InvestigatingAPrimePattern.py
similarity index 100%
rename from project_euler/p146_InvestigatingAPrimePattern.py
rename to puzzles/project_euler/p146_InvestigatingAPrimePattern.py
diff --git a/project_euler/p147_RectanglesInCrossHatchedGrids.py b/puzzles/project_euler/p147_RectanglesInCrossHatchedGrids.py
similarity index 100%
rename from project_euler/p147_RectanglesInCrossHatchedGrids.py
rename to puzzles/project_euler/p147_RectanglesInCrossHatchedGrids.py
diff --git a/project_euler/p148_ExploringPascalTriangle..py b/puzzles/project_euler/p148_ExploringPascalTriangle..py
similarity index 100%
rename from project_euler/p148_ExploringPascalTriangle..py
rename to puzzles/project_euler/p148_ExploringPascalTriangle..py
diff --git a/project_euler/p149_SearchingForAMaximumSumSubsequence..py b/puzzles/project_euler/p149_SearchingForAMaximumSumSubsequence..py
similarity index 100%
rename from project_euler/p149_SearchingForAMaximumSumSubsequence..py
rename to puzzles/project_euler/p149_SearchingForAMaximumSumSubsequence..py
diff --git a/project_euler/p150_SearchingATriangularArrayForASubTriangleHavingMinimumSum..py b/puzzles/project_euler/p150_SearchingATriangularArrayForASubTriangleHavingMinimumSum..py
similarity index 100%
rename from project_euler/p150_SearchingATriangularArrayForASubTriangleHavingMinimumSum..py
rename to puzzles/project_euler/p150_SearchingATriangularArrayForASubTriangleHavingMinimumSum..py
diff --git a/project_euler/p151_PaperSheetsOfStandardSizes.py b/puzzles/project_euler/p151_PaperSheetsOfStandardSizes.py
similarity index 100%
rename from project_euler/p151_PaperSheetsOfStandardSizes.py
rename to puzzles/project_euler/p151_PaperSheetsOfStandardSizes.py
diff --git a/project_euler/p152_Writing12AsAumAfAnverseSquares.py b/puzzles/project_euler/p152_Writing12AsAumAfAnverseSquares.py
similarity index 100%
rename from project_euler/p152_Writing12AsAumAfAnverseSquares.py
rename to puzzles/project_euler/p152_Writing12AsAumAfAnverseSquares.py
diff --git a/project_euler/p153_InvestigatingGaussianIntegers.py b/puzzles/project_euler/p153_InvestigatingGaussianIntegers.py
similarity index 100%
rename from project_euler/p153_InvestigatingGaussianIntegers.py
rename to puzzles/project_euler/p153_InvestigatingGaussianIntegers.py
diff --git a/project_euler/p154_ExploringPascalPyramid..py b/puzzles/project_euler/p154_ExploringPascalPyramid..py
similarity index 100%
rename from project_euler/p154_ExploringPascalPyramid..py
rename to puzzles/project_euler/p154_ExploringPascalPyramid..py
diff --git a/project_euler/p155_CountingCapacitorCircuits..py b/puzzles/project_euler/p155_CountingCapacitorCircuits..py
similarity index 100%
rename from project_euler/p155_CountingCapacitorCircuits..py
rename to puzzles/project_euler/p155_CountingCapacitorCircuits..py
diff --git a/project_euler/p156_CountingDigits.py b/puzzles/project_euler/p156_CountingDigits.py
similarity index 100%
rename from project_euler/p156_CountingDigits.py
rename to puzzles/project_euler/p156_CountingDigits.py
diff --git a/project_euler/p157_SolvingTheDiophantineEquation.py b/puzzles/project_euler/p157_SolvingTheDiophantineEquation.py
similarity index 100%
rename from project_euler/p157_SolvingTheDiophantineEquation.py
rename to puzzles/project_euler/p157_SolvingTheDiophantineEquation.py
diff --git a/project_euler/p158_ExploringStringsForWhichOnlyOneCharacterComesLexicographicallyAfterItsNeighbourToTheLeft..py b/puzzles/project_euler/p158_ExploringStringsForWhichOnlyOneCharacterComesLexicographicallyAfterItsNeighbourToTheLeft..py
similarity index 100%
rename from project_euler/p158_ExploringStringsForWhichOnlyOneCharacterComesLexicographicallyAfterItsNeighbourToTheLeft..py
rename to puzzles/project_euler/p158_ExploringStringsForWhichOnlyOneCharacterComesLexicographicallyAfterItsNeighbourToTheLeft..py
diff --git a/project_euler/p159_DigitalRootSumsOfFactorisations..py b/puzzles/project_euler/p159_DigitalRootSumsOfFactorisations..py
similarity index 100%
rename from project_euler/p159_DigitalRootSumsOfFactorisations..py
rename to puzzles/project_euler/p159_DigitalRootSumsOfFactorisations..py
diff --git a/project_euler/p160_FactorialTrailingDigits.py b/puzzles/project_euler/p160_FactorialTrailingDigits.py
similarity index 100%
rename from project_euler/p160_FactorialTrailingDigits.py
rename to puzzles/project_euler/p160_FactorialTrailingDigits.py
diff --git a/project_euler/p161_Triominoes.py b/puzzles/project_euler/p161_Triominoes.py
similarity index 100%
rename from project_euler/p161_Triominoes.py
rename to puzzles/project_euler/p161_Triominoes.py
diff --git a/project_euler/p162_HexadecimalNumbers.py b/puzzles/project_euler/p162_HexadecimalNumbers.py
similarity index 100%
rename from project_euler/p162_HexadecimalNumbers.py
rename to puzzles/project_euler/p162_HexadecimalNumbers.py
diff --git a/project_euler/p163_CrossHatchedTriangles.py b/puzzles/project_euler/p163_CrossHatchedTriangles.py
similarity index 100%
rename from project_euler/p163_CrossHatchedTriangles.py
rename to puzzles/project_euler/p163_CrossHatchedTriangles.py
diff --git a/project_euler/p164_NumbersForWhichNoThreeConsecutiveDigitsHaveASumGreaterThanAGivenValue..py b/puzzles/project_euler/p164_NumbersForWhichNoThreeConsecutiveDigitsHaveASumGreaterThanAGivenValue..py
similarity index 100%
rename from project_euler/p164_NumbersForWhichNoThreeConsecutiveDigitsHaveASumGreaterThanAGivenValue..py
rename to puzzles/project_euler/p164_NumbersForWhichNoThreeConsecutiveDigitsHaveASumGreaterThanAGivenValue..py
diff --git a/project_euler/p165_Intersections.py b/puzzles/project_euler/p165_Intersections.py
similarity index 100%
rename from project_euler/p165_Intersections.py
rename to puzzles/project_euler/p165_Intersections.py
diff --git a/project_euler/p166_CrissCross.py b/puzzles/project_euler/p166_CrissCross.py
similarity index 100%
rename from project_euler/p166_CrissCross.py
rename to puzzles/project_euler/p166_CrissCross.py
diff --git a/project_euler/p167_InvestigatingUlamSequences.py b/puzzles/project_euler/p167_InvestigatingUlamSequences.py
similarity index 100%
rename from project_euler/p167_InvestigatingUlamSequences.py
rename to puzzles/project_euler/p167_InvestigatingUlamSequences.py
diff --git a/project_euler/p168_NumberRotations.py b/puzzles/project_euler/p168_NumberRotations.py
similarity index 100%
rename from project_euler/p168_NumberRotations.py
rename to puzzles/project_euler/p168_NumberRotations.py
diff --git a/project_euler/p169_ExploringTheNumberOfDifferentWaysANumberCanBeExpressedAsASumOfPowersOf2..py b/puzzles/project_euler/p169_ExploringTheNumberOfDifferentWaysANumberCanBeExpressedAsASumOfPowersOf2..py
similarity index 100%
rename from project_euler/p169_ExploringTheNumberOfDifferentWaysANumberCanBeExpressedAsASumOfPowersOf2..py
rename to puzzles/project_euler/p169_ExploringTheNumberOfDifferentWaysANumberCanBeExpressedAsASumOfPowersOf2..py
diff --git a/project_euler/p170_FindTheLargest0To9PandigitalThatCanBeFormedByConcatenatingProducts..py b/puzzles/project_euler/p170_FindTheLargest0To9PandigitalThatCanBeFormedByConcatenatingProducts..py
similarity index 100%
rename from project_euler/p170_FindTheLargest0To9PandigitalThatCanBeFormedByConcatenatingProducts..py
rename to puzzles/project_euler/p170_FindTheLargest0To9PandigitalThatCanBeFormedByConcatenatingProducts..py
diff --git a/project_euler/p171_FindingNumbersForWhichTheSumOfTheSquaresOfTheDigitsIsASquare..py b/puzzles/project_euler/p171_FindingNumbersForWhichTheSumOfTheSquaresOfTheDigitsIsASquare..py
similarity index 100%
rename from project_euler/p171_FindingNumbersForWhichTheSumOfTheSquaresOfTheDigitsIsASquare..py
rename to puzzles/project_euler/p171_FindingNumbersForWhichTheSumOfTheSquaresOfTheDigitsIsASquare..py
diff --git a/project_euler/p172_InvestigatingNumbersWithFewRepeatedDigits..py b/puzzles/project_euler/p172_InvestigatingNumbersWithFewRepeatedDigits..py
similarity index 100%
rename from project_euler/p172_InvestigatingNumbersWithFewRepeatedDigits..py
rename to puzzles/project_euler/p172_InvestigatingNumbersWithFewRepeatedDigits..py
diff --git a/project_euler/p173_UsingUpToOneMillionTilesHowManyDifferent_Hollow_SquareLaminaeCanBeFormed.py b/puzzles/project_euler/p173_UsingUpToOneMillionTilesHowManyDifferent_Hollow_SquareLaminaeCanBeFormed.py
similarity index 100%
rename from project_euler/p173_UsingUpToOneMillionTilesHowManyDifferent_Hollow_SquareLaminaeCanBeFormed.py
rename to puzzles/project_euler/p173_UsingUpToOneMillionTilesHowManyDifferent_Hollow_SquareLaminaeCanBeFormed.py
diff --git a/project_euler/p174_CountingTheNumberOf_Hollow_SquareLaminaeThatCanFormOne,Two,Three,...DistinctArrangements..py b/puzzles/project_euler/p174_CountingTheNumberOf_Hollow_SquareLaminaeThatCanFormOne,Two,Three,...DistinctArrangements..py
similarity index 100%
rename from project_euler/p174_CountingTheNumberOf_Hollow_SquareLaminaeThatCanFormOne,Two,Three,...DistinctArrangements..py
rename to puzzles/project_euler/p174_CountingTheNumberOf_Hollow_SquareLaminaeThatCanFormOne,Two,Three,...DistinctArrangements..py
diff --git a/project_euler/p175_FractionsInvolvingTheNumberOfDifferentWaysANumberCanBeExpressedAsASumOfPowersOf2..py b/puzzles/project_euler/p175_FractionsInvolvingTheNumberOfDifferentWaysANumberCanBeExpressedAsASumOfPowersOf2..py
similarity index 100%
rename from project_euler/p175_FractionsInvolvingTheNumberOfDifferentWaysANumberCanBeExpressedAsASumOfPowersOf2..py
rename to puzzles/project_euler/p175_FractionsInvolvingTheNumberOfDifferentWaysANumberCanBeExpressedAsASumOfPowersOf2..py
diff --git a/project_euler/p176_RightAngledTrianglesThatShareACathetus..py b/puzzles/project_euler/p176_RightAngledTrianglesThatShareACathetus..py
similarity index 100%
rename from project_euler/p176_RightAngledTrianglesThatShareACathetus..py
rename to puzzles/project_euler/p176_RightAngledTrianglesThatShareACathetus..py
diff --git a/project_euler/p177_IntegerAngledQuadrilaterals..py b/puzzles/project_euler/p177_IntegerAngledQuadrilaterals..py
similarity index 100%
rename from project_euler/p177_IntegerAngledQuadrilaterals..py
rename to puzzles/project_euler/p177_IntegerAngledQuadrilaterals..py
diff --git a/project_euler/p178_StepNumbers.py b/puzzles/project_euler/p178_StepNumbers.py
similarity index 100%
rename from project_euler/p178_StepNumbers.py
rename to puzzles/project_euler/p178_StepNumbers.py
diff --git a/project_euler/p179_ConsecutivePositiveDivisors.py b/puzzles/project_euler/p179_ConsecutivePositiveDivisors.py
similarity index 100%
rename from project_euler/p179_ConsecutivePositiveDivisors.py
rename to puzzles/project_euler/p179_ConsecutivePositiveDivisors.py
diff --git a/project_euler/p180_RationalZerosOfAFunctionOfThreeVariables..py b/puzzles/project_euler/p180_RationalZerosOfAFunctionOfThreeVariables..py
similarity index 100%
rename from project_euler/p180_RationalZerosOfAFunctionOfThreeVariables..py
rename to puzzles/project_euler/p180_RationalZerosOfAFunctionOfThreeVariables..py
diff --git a/project_euler/p181_InvestigatingInHowManyWaysObjectsOfTwoDifferentColoursCanBeGrouped..py b/puzzles/project_euler/p181_InvestigatingInHowManyWaysObjectsOfTwoDifferentColoursCanBeGrouped..py
similarity index 100%
rename from project_euler/p181_InvestigatingInHowManyWaysObjectsOfTwoDifferentColoursCanBeGrouped..py
rename to puzzles/project_euler/p181_InvestigatingInHowManyWaysObjectsOfTwoDifferentColoursCanBeGrouped..py
diff --git a/project_euler/p182_RSAEncryption.py b/puzzles/project_euler/p182_RSAEncryption.py
similarity index 100%
rename from project_euler/p182_RSAEncryption.py
rename to puzzles/project_euler/p182_RSAEncryption.py
diff --git a/project_euler/p183_MaximumProductOfParts.py b/puzzles/project_euler/p183_MaximumProductOfParts.py
similarity index 100%
rename from project_euler/p183_MaximumProductOfParts.py
rename to puzzles/project_euler/p183_MaximumProductOfParts.py
diff --git a/project_euler/p184_TrianglesContainingTheOrigin..py b/puzzles/project_euler/p184_TrianglesContainingTheOrigin..py
similarity index 100%
rename from project_euler/p184_TrianglesContainingTheOrigin..py
rename to puzzles/project_euler/p184_TrianglesContainingTheOrigin..py
diff --git a/project_euler/p185_NumberMind.py b/puzzles/project_euler/p185_NumberMind.py
similarity index 100%
rename from project_euler/p185_NumberMind.py
rename to puzzles/project_euler/p185_NumberMind.py
diff --git a/project_euler/p186_ConnectednessOfANetwork..py b/puzzles/project_euler/p186_ConnectednessOfANetwork..py
similarity index 100%
rename from project_euler/p186_ConnectednessOfANetwork..py
rename to puzzles/project_euler/p186_ConnectednessOfANetwork..py
diff --git a/project_euler/p187_Semiprimes.py b/puzzles/project_euler/p187_Semiprimes.py
similarity index 100%
rename from project_euler/p187_Semiprimes.py
rename to puzzles/project_euler/p187_Semiprimes.py
diff --git a/project_euler/p188_TheHyperexponentiationOfANumber.py b/puzzles/project_euler/p188_TheHyperexponentiationOfANumber.py
similarity index 100%
rename from project_euler/p188_TheHyperexponentiationOfANumber.py
rename to puzzles/project_euler/p188_TheHyperexponentiationOfANumber.py
diff --git a/project_euler/p189_TriColouringATriangularGrid.py b/puzzles/project_euler/p189_TriColouringATriangularGrid.py
similarity index 100%
rename from project_euler/p189_TriColouringATriangularGrid.py
rename to puzzles/project_euler/p189_TriColouringATriangularGrid.py
diff --git a/project_euler/p190_MaximisingAWeightedProduct.py b/puzzles/project_euler/p190_MaximisingAWeightedProduct.py
similarity index 100%
rename from project_euler/p190_MaximisingAWeightedProduct.py
rename to puzzles/project_euler/p190_MaximisingAWeightedProduct.py
diff --git a/project_euler/p191_PrizeStrings.py b/puzzles/project_euler/p191_PrizeStrings.py
similarity index 100%
rename from project_euler/p191_PrizeStrings.py
rename to puzzles/project_euler/p191_PrizeStrings.py
diff --git a/project_euler/p192_BestApproximations.py b/puzzles/project_euler/p192_BestApproximations.py
similarity index 100%
rename from project_euler/p192_BestApproximations.py
rename to puzzles/project_euler/p192_BestApproximations.py
diff --git a/project_euler/p193_SquarefreeNumbers.py b/puzzles/project_euler/p193_SquarefreeNumbers.py
similarity index 100%
rename from project_euler/p193_SquarefreeNumbers.py
rename to puzzles/project_euler/p193_SquarefreeNumbers.py
diff --git a/project_euler/p194_ColouredConfigurations.py b/puzzles/project_euler/p194_ColouredConfigurations.py
similarity index 100%
rename from project_euler/p194_ColouredConfigurations.py
rename to puzzles/project_euler/p194_ColouredConfigurations.py
diff --git a/project_euler/p195_InscribedCirclesOfTrianglesWithOneAngleOf60Degrees.py b/puzzles/project_euler/p195_InscribedCirclesOfTrianglesWithOneAngleOf60Degrees.py
similarity index 100%
rename from project_euler/p195_InscribedCirclesOfTrianglesWithOneAngleOf60Degrees.py
rename to puzzles/project_euler/p195_InscribedCirclesOfTrianglesWithOneAngleOf60Degrees.py
diff --git a/project_euler/p196_PrimeTriplets.py b/puzzles/project_euler/p196_PrimeTriplets.py
similarity index 100%
rename from project_euler/p196_PrimeTriplets.py
rename to puzzles/project_euler/p196_PrimeTriplets.py
diff --git a/project_euler/p197_InvestigatingTheBehaviourOfARecursivelyDefinedSequence.py b/puzzles/project_euler/p197_InvestigatingTheBehaviourOfARecursivelyDefinedSequence.py
similarity index 100%
rename from project_euler/p197_InvestigatingTheBehaviourOfARecursivelyDefinedSequence.py
rename to puzzles/project_euler/p197_InvestigatingTheBehaviourOfARecursivelyDefinedSequence.py
diff --git a/project_euler/p198_AmbiguousNumbers.py b/puzzles/project_euler/p198_AmbiguousNumbers.py
similarity index 100%
rename from project_euler/p198_AmbiguousNumbers.py
rename to puzzles/project_euler/p198_AmbiguousNumbers.py
diff --git a/project_euler/p199_IterativeCirclePacking.py b/puzzles/project_euler/p199_IterativeCirclePacking.py
similarity index 100%
rename from project_euler/p199_IterativeCirclePacking.py
rename to puzzles/project_euler/p199_IterativeCirclePacking.py
diff --git a/project_euler/p200_FindThe200thPrimeProofSqubeContainingTheContiguousSubString_200_.py b/puzzles/project_euler/p200_FindThe200thPrimeProofSqubeContainingTheContiguousSubString_200_.py
similarity index 100%
rename from project_euler/p200_FindThe200thPrimeProofSqubeContainingTheContiguousSubString_200_.py
rename to puzzles/project_euler/p200_FindThe200thPrimeProofSqubeContainingTheContiguousSubString_200_.py
diff --git a/project_euler/p201_SubsetsWithAUniqueSum.py b/puzzles/project_euler/p201_SubsetsWithAUniqueSum.py
similarity index 100%
rename from project_euler/p201_SubsetsWithAUniqueSum.py
rename to puzzles/project_euler/p201_SubsetsWithAUniqueSum.py
diff --git a/project_euler/p202_Laserbeam.py b/puzzles/project_euler/p202_Laserbeam.py
similarity index 100%
rename from project_euler/p202_Laserbeam.py
rename to puzzles/project_euler/p202_Laserbeam.py
diff --git a/project_euler/p203_SquarefreeBinomialCoefficients.py b/puzzles/project_euler/p203_SquarefreeBinomialCoefficients.py
similarity index 100%
rename from project_euler/p203_SquarefreeBinomialCoefficients.py
rename to puzzles/project_euler/p203_SquarefreeBinomialCoefficients.py
diff --git a/project_euler/p204_GeneralisedHammingNumbers.py b/puzzles/project_euler/p204_GeneralisedHammingNumbers.py
similarity index 100%
rename from project_euler/p204_GeneralisedHammingNumbers.py
rename to puzzles/project_euler/p204_GeneralisedHammingNumbers.py
diff --git a/project_euler/p205_DiceGame.py b/puzzles/project_euler/p205_DiceGame.py
similarity index 100%
rename from project_euler/p205_DiceGame.py
rename to puzzles/project_euler/p205_DiceGame.py
diff --git a/project_euler/p206_ConcealedSquare.py b/puzzles/project_euler/p206_ConcealedSquare.py
similarity index 100%
rename from project_euler/p206_ConcealedSquare.py
rename to puzzles/project_euler/p206_ConcealedSquare.py
diff --git a/project_euler/p207_IntegerPartitionEquations.py b/puzzles/project_euler/p207_IntegerPartitionEquations.py
similarity index 100%
rename from project_euler/p207_IntegerPartitionEquations.py
rename to puzzles/project_euler/p207_IntegerPartitionEquations.py
diff --git a/project_euler/p208_RobotWalks.py b/puzzles/project_euler/p208_RobotWalks.py
similarity index 100%
rename from project_euler/p208_RobotWalks.py
rename to puzzles/project_euler/p208_RobotWalks.py
diff --git a/project_euler/p209_CircularLogic.py b/puzzles/project_euler/p209_CircularLogic.py
similarity index 100%
rename from project_euler/p209_CircularLogic.py
rename to puzzles/project_euler/p209_CircularLogic.py
diff --git a/project_euler/p210_ObtuseAngledTriangles.py b/puzzles/project_euler/p210_ObtuseAngledTriangles.py
similarity index 100%
rename from project_euler/p210_ObtuseAngledTriangles.py
rename to puzzles/project_euler/p210_ObtuseAngledTriangles.py
diff --git a/project_euler/p211_DivisorSquareSum.py b/puzzles/project_euler/p211_DivisorSquareSum.py
similarity index 100%
rename from project_euler/p211_DivisorSquareSum.py
rename to puzzles/project_euler/p211_DivisorSquareSum.py
diff --git a/project_euler/p212_CombinedVolumeOfCuboids.py b/puzzles/project_euler/p212_CombinedVolumeOfCuboids.py
similarity index 100%
rename from project_euler/p212_CombinedVolumeOfCuboids.py
rename to puzzles/project_euler/p212_CombinedVolumeOfCuboids.py
diff --git a/project_euler/p213_FleaCircus.py b/puzzles/project_euler/p213_FleaCircus.py
similarity index 100%
rename from project_euler/p213_FleaCircus.py
rename to puzzles/project_euler/p213_FleaCircus.py
diff --git a/project_euler/p214_TotientChains.py b/puzzles/project_euler/p214_TotientChains.py
similarity index 100%
rename from project_euler/p214_TotientChains.py
rename to puzzles/project_euler/p214_TotientChains.py
diff --git a/project_euler/p215_CrackFreeWalls.py b/puzzles/project_euler/p215_CrackFreeWalls.py
similarity index 100%
rename from project_euler/p215_CrackFreeWalls.py
rename to puzzles/project_euler/p215_CrackFreeWalls.py
diff --git a/project_euler/p216_InvestigatingThePrimalityOfNumbersOfTheForm2n21.py b/puzzles/project_euler/p216_InvestigatingThePrimalityOfNumbersOfTheForm2n21.py
similarity index 100%
rename from project_euler/p216_InvestigatingThePrimalityOfNumbersOfTheForm2n21.py
rename to puzzles/project_euler/p216_InvestigatingThePrimalityOfNumbersOfTheForm2n21.py
diff --git a/project_euler/p217_BalancedNumbers.py b/puzzles/project_euler/p217_BalancedNumbers.py
similarity index 100%
rename from project_euler/p217_BalancedNumbers.py
rename to puzzles/project_euler/p217_BalancedNumbers.py
diff --git a/project_euler/p218_PerfectRightAngledTriangles.py b/puzzles/project_euler/p218_PerfectRightAngledTriangles.py
similarity index 100%
rename from project_euler/p218_PerfectRightAngledTriangles.py
rename to puzzles/project_euler/p218_PerfectRightAngledTriangles.py
diff --git a/project_euler/p219_SkewCostCoding.py b/puzzles/project_euler/p219_SkewCostCoding.py
similarity index 100%
rename from project_euler/p219_SkewCostCoding.py
rename to puzzles/project_euler/p219_SkewCostCoding.py
diff --git a/project_euler/p220_HeighwayDragon.py b/puzzles/project_euler/p220_HeighwayDragon.py
similarity index 100%
rename from project_euler/p220_HeighwayDragon.py
rename to puzzles/project_euler/p220_HeighwayDragon.py
diff --git a/project_euler/p221_AlexandrianIntegers.py b/puzzles/project_euler/p221_AlexandrianIntegers.py
similarity index 100%
rename from project_euler/p221_AlexandrianIntegers.py
rename to puzzles/project_euler/p221_AlexandrianIntegers.py
diff --git a/project_euler/p222_SpherePacking.py b/puzzles/project_euler/p222_SpherePacking.py
similarity index 100%
rename from project_euler/p222_SpherePacking.py
rename to puzzles/project_euler/p222_SpherePacking.py
diff --git a/project_euler/p223_AlmostRightAngledTrianglesI.py b/puzzles/project_euler/p223_AlmostRightAngledTrianglesI.py
similarity index 100%
rename from project_euler/p223_AlmostRightAngledTrianglesI.py
rename to puzzles/project_euler/p223_AlmostRightAngledTrianglesI.py
diff --git a/project_euler/p224_AlmostRightAngledTrianglesII.py b/puzzles/project_euler/p224_AlmostRightAngledTrianglesII.py
similarity index 100%
rename from project_euler/p224_AlmostRightAngledTrianglesII.py
rename to puzzles/project_euler/p224_AlmostRightAngledTrianglesII.py
diff --git a/project_euler/p225_TribonacciNonDivisors.py b/puzzles/project_euler/p225_TribonacciNonDivisors.py
similarity index 100%
rename from project_euler/p225_TribonacciNonDivisors.py
rename to puzzles/project_euler/p225_TribonacciNonDivisors.py
diff --git a/project_euler/p226_AScoopOfBlancmange.py b/puzzles/project_euler/p226_AScoopOfBlancmange.py
similarity index 100%
rename from project_euler/p226_AScoopOfBlancmange.py
rename to puzzles/project_euler/p226_AScoopOfBlancmange.py
diff --git a/project_euler/p227_TheChase.py b/puzzles/project_euler/p227_TheChase.py
similarity index 100%
rename from project_euler/p227_TheChase.py
rename to puzzles/project_euler/p227_TheChase.py
diff --git a/project_euler/p228_MinkowskiSums.py b/puzzles/project_euler/p228_MinkowskiSums.py
similarity index 100%
rename from project_euler/p228_MinkowskiSums.py
rename to puzzles/project_euler/p228_MinkowskiSums.py
diff --git a/project_euler/p229_FourRepresentationsUsingSquares.py b/puzzles/project_euler/p229_FourRepresentationsUsingSquares.py
similarity index 100%
rename from project_euler/p229_FourRepresentationsUsingSquares.py
rename to puzzles/project_euler/p229_FourRepresentationsUsingSquares.py
diff --git a/project_euler/p230_FibonacciWords.py b/puzzles/project_euler/p230_FibonacciWords.py
similarity index 100%
rename from project_euler/p230_FibonacciWords.py
rename to puzzles/project_euler/p230_FibonacciWords.py
diff --git a/project_euler/p231_ThePrimeFactorisationOfBinomialCoefficients.py b/puzzles/project_euler/p231_ThePrimeFactorisationOfBinomialCoefficients.py
similarity index 100%
rename from project_euler/p231_ThePrimeFactorisationOfBinomialCoefficients.py
rename to puzzles/project_euler/p231_ThePrimeFactorisationOfBinomialCoefficients.py
diff --git a/project_euler/p232_TheRace.py b/puzzles/project_euler/p232_TheRace.py
similarity index 100%
rename from project_euler/p232_TheRace.py
rename to puzzles/project_euler/p232_TheRace.py
diff --git a/project_euler/p233_LatticePointsOnACircle.py b/puzzles/project_euler/p233_LatticePointsOnACircle.py
similarity index 100%
rename from project_euler/p233_LatticePointsOnACircle.py
rename to puzzles/project_euler/p233_LatticePointsOnACircle.py
diff --git a/project_euler/p234_SemidivisibleNumbers.py b/puzzles/project_euler/p234_SemidivisibleNumbers.py
similarity index 100%
rename from project_euler/p234_SemidivisibleNumbers.py
rename to puzzles/project_euler/p234_SemidivisibleNumbers.py
diff --git a/project_euler/p235_AnArithmeticGeometricSequence.py b/puzzles/project_euler/p235_AnArithmeticGeometricSequence.py
similarity index 100%
rename from project_euler/p235_AnArithmeticGeometricSequence.py
rename to puzzles/project_euler/p235_AnArithmeticGeometricSequence.py
diff --git a/project_euler/p236_LuxuryHampers.py b/puzzles/project_euler/p236_LuxuryHampers.py
similarity index 100%
rename from project_euler/p236_LuxuryHampers.py
rename to puzzles/project_euler/p236_LuxuryHampers.py
diff --git a/project_euler/p237_ToursOnA4XNPlayingBoard.py b/puzzles/project_euler/p237_ToursOnA4XNPlayingBoard.py
similarity index 100%
rename from project_euler/p237_ToursOnA4XNPlayingBoard.py
rename to puzzles/project_euler/p237_ToursOnA4XNPlayingBoard.py
diff --git a/project_euler/p238_InfiniteStringTour.py b/puzzles/project_euler/p238_InfiniteStringTour.py
similarity index 100%
rename from project_euler/p238_InfiniteStringTour.py
rename to puzzles/project_euler/p238_InfiniteStringTour.py
diff --git a/project_euler/p239_TwentyTwoFoolishPrimes.py b/puzzles/project_euler/p239_TwentyTwoFoolishPrimes.py
similarity index 100%
rename from project_euler/p239_TwentyTwoFoolishPrimes.py
rename to puzzles/project_euler/p239_TwentyTwoFoolishPrimes.py
diff --git a/project_euler/p240_TopDice.py b/puzzles/project_euler/p240_TopDice.py
similarity index 100%
rename from project_euler/p240_TopDice.py
rename to puzzles/project_euler/p240_TopDice.py
diff --git a/project_euler/p241_PerfectionQuotients.py b/puzzles/project_euler/p241_PerfectionQuotients.py
similarity index 100%
rename from project_euler/p241_PerfectionQuotients.py
rename to puzzles/project_euler/p241_PerfectionQuotients.py
diff --git a/project_euler/p242_OddTriplets.py b/puzzles/project_euler/p242_OddTriplets.py
similarity index 100%
rename from project_euler/p242_OddTriplets.py
rename to puzzles/project_euler/p242_OddTriplets.py
diff --git a/project_euler/p243_Resilience.py b/puzzles/project_euler/p243_Resilience.py
similarity index 100%
rename from project_euler/p243_Resilience.py
rename to puzzles/project_euler/p243_Resilience.py
diff --git a/project_euler/p244_Sliders.py b/puzzles/project_euler/p244_Sliders.py
similarity index 100%
rename from project_euler/p244_Sliders.py
rename to puzzles/project_euler/p244_Sliders.py
diff --git a/project_euler/p245_Coresilience.py b/puzzles/project_euler/p245_Coresilience.py
similarity index 100%
rename from project_euler/p245_Coresilience.py
rename to puzzles/project_euler/p245_Coresilience.py
diff --git a/project_euler/p246_TangentsToAnEllipse.py b/puzzles/project_euler/p246_TangentsToAnEllipse.py
similarity index 100%
rename from project_euler/p246_TangentsToAnEllipse.py
rename to puzzles/project_euler/p246_TangentsToAnEllipse.py
diff --git a/project_euler/p247_SquaresUnderAHyperbola.py b/puzzles/project_euler/p247_SquaresUnderAHyperbola.py
similarity index 100%
rename from project_euler/p247_SquaresUnderAHyperbola.py
rename to puzzles/project_euler/p247_SquaresUnderAHyperbola.py
diff --git a/project_euler/p248_NumbersForWhichEulerTotientFunctionEqualsFac13.py b/puzzles/project_euler/p248_NumbersForWhichEulerTotientFunctionEqualsFac13.py
similarity index 100%
rename from project_euler/p248_NumbersForWhichEulerTotientFunctionEqualsFac13.py
rename to puzzles/project_euler/p248_NumbersForWhichEulerTotientFunctionEqualsFac13.py
diff --git a/project_euler/p249_PrimeSubsetSums.py b/puzzles/project_euler/p249_PrimeSubsetSums.py
similarity index 100%
rename from project_euler/p249_PrimeSubsetSums.py
rename to puzzles/project_euler/p249_PrimeSubsetSums.py
diff --git a/project_euler/p250_250250.py b/puzzles/project_euler/p250_250250.py
similarity index 100%
rename from project_euler/p250_250250.py
rename to puzzles/project_euler/p250_250250.py
diff --git a/project_euler/p251_CardanoTriplets.py b/puzzles/project_euler/p251_CardanoTriplets.py
similarity index 100%
rename from project_euler/p251_CardanoTriplets.py
rename to puzzles/project_euler/p251_CardanoTriplets.py
diff --git a/project_euler/p252_ConvexHoles.py b/puzzles/project_euler/p252_ConvexHoles.py
similarity index 100%
rename from project_euler/p252_ConvexHoles.py
rename to puzzles/project_euler/p252_ConvexHoles.py
diff --git a/project_euler/p253_TidyingUp.py b/puzzles/project_euler/p253_TidyingUp.py
similarity index 100%
rename from project_euler/p253_TidyingUp.py
rename to puzzles/project_euler/p253_TidyingUp.py
diff --git a/project_euler/p254_SumsOfDigitFactorials.py b/puzzles/project_euler/p254_SumsOfDigitFactorials.py
similarity index 100%
rename from project_euler/p254_SumsOfDigitFactorials.py
rename to puzzles/project_euler/p254_SumsOfDigitFactorials.py
diff --git a/project_euler/p255_RoundedSquareRoots.py b/puzzles/project_euler/p255_RoundedSquareRoots.py
similarity index 100%
rename from project_euler/p255_RoundedSquareRoots.py
rename to puzzles/project_euler/p255_RoundedSquareRoots.py
diff --git a/project_euler/p256_TatamiFreeRooms.py b/puzzles/project_euler/p256_TatamiFreeRooms.py
similarity index 100%
rename from project_euler/p256_TatamiFreeRooms.py
rename to puzzles/project_euler/p256_TatamiFreeRooms.py
diff --git a/project_euler/p257_AngularBisectors.py b/puzzles/project_euler/p257_AngularBisectors.py
similarity index 100%
rename from project_euler/p257_AngularBisectors.py
rename to puzzles/project_euler/p257_AngularBisectors.py
diff --git a/project_euler/p258_ALaggedFibonacciSequence.py b/puzzles/project_euler/p258_ALaggedFibonacciSequence.py
similarity index 100%
rename from project_euler/p258_ALaggedFibonacciSequence.py
rename to puzzles/project_euler/p258_ALaggedFibonacciSequence.py
diff --git a/project_euler/p259_ReachableNumbers.py b/puzzles/project_euler/p259_ReachableNumbers.py
similarity index 100%
rename from project_euler/p259_ReachableNumbers.py
rename to puzzles/project_euler/p259_ReachableNumbers.py
diff --git a/project_euler/p260_StoneGame.py b/puzzles/project_euler/p260_StoneGame.py
similarity index 100%
rename from project_euler/p260_StoneGame.py
rename to puzzles/project_euler/p260_StoneGame.py
diff --git a/project_euler/p261_PivotalSquareSums.py b/puzzles/project_euler/p261_PivotalSquareSums.py
similarity index 100%
rename from project_euler/p261_PivotalSquareSums.py
rename to puzzles/project_euler/p261_PivotalSquareSums.py
diff --git a/project_euler/p262_MountainRange..py b/puzzles/project_euler/p262_MountainRange..py
similarity index 100%
rename from project_euler/p262_MountainRange..py
rename to puzzles/project_euler/p262_MountainRange..py
diff --git a/project_euler/p263_AnEngineers'DreamComeTrue.py b/puzzles/project_euler/p263_AnEngineers'DreamComeTrue.py
similarity index 100%
rename from project_euler/p263_AnEngineers'DreamComeTrue.py
rename to puzzles/project_euler/p263_AnEngineers'DreamComeTrue.py
diff --git a/project_euler/p264_TriangleCentres.py b/puzzles/project_euler/p264_TriangleCentres.py
similarity index 100%
rename from project_euler/p264_TriangleCentres.py
rename to puzzles/project_euler/p264_TriangleCentres.py
diff --git a/project_euler/p265_BinaryCircles.py b/puzzles/project_euler/p265_BinaryCircles.py
similarity index 100%
rename from project_euler/p265_BinaryCircles.py
rename to puzzles/project_euler/p265_BinaryCircles.py
diff --git a/project_euler/p266_PseudoSquareRoot.py b/puzzles/project_euler/p266_PseudoSquareRoot.py
similarity index 100%
rename from project_euler/p266_PseudoSquareRoot.py
rename to puzzles/project_euler/p266_PseudoSquareRoot.py
diff --git a/project_euler/p267_Billionaire.py b/puzzles/project_euler/p267_Billionaire.py
similarity index 100%
rename from project_euler/p267_Billionaire.py
rename to puzzles/project_euler/p267_Billionaire.py
diff --git a/project_euler/p268_CountingNumbersWithAtLeastFourDistinctPrimeFactorsLessThan100.py b/puzzles/project_euler/p268_CountingNumbersWithAtLeastFourDistinctPrimeFactorsLessThan100.py
similarity index 100%
rename from project_euler/p268_CountingNumbersWithAtLeastFourDistinctPrimeFactorsLessThan100.py
rename to puzzles/project_euler/p268_CountingNumbersWithAtLeastFourDistinctPrimeFactorsLessThan100.py
diff --git a/project_euler/p269_PolynomialsWithAtLeastOneIntegerRoot.py b/puzzles/project_euler/p269_PolynomialsWithAtLeastOneIntegerRoot.py
similarity index 100%
rename from project_euler/p269_PolynomialsWithAtLeastOneIntegerRoot.py
rename to puzzles/project_euler/p269_PolynomialsWithAtLeastOneIntegerRoot.py
diff --git a/project_euler/p270_CuttingSquares.py b/puzzles/project_euler/p270_CuttingSquares.py
similarity index 100%
rename from project_euler/p270_CuttingSquares.py
rename to puzzles/project_euler/p270_CuttingSquares.py
diff --git a/project_euler/p271_ModularCubes,Part1.py b/puzzles/project_euler/p271_ModularCubes,Part1.py
similarity index 100%
rename from project_euler/p271_ModularCubes,Part1.py
rename to puzzles/project_euler/p271_ModularCubes,Part1.py
diff --git a/project_euler/p272_ModularCubes,Part2.py b/puzzles/project_euler/p272_ModularCubes,Part2.py
similarity index 100%
rename from project_euler/p272_ModularCubes,Part2.py
rename to puzzles/project_euler/p272_ModularCubes,Part2.py
diff --git a/project_euler/p273_SumOfSquares.py b/puzzles/project_euler/p273_SumOfSquares.py
similarity index 100%
rename from project_euler/p273_SumOfSquares.py
rename to puzzles/project_euler/p273_SumOfSquares.py
diff --git a/project_euler/p274_DivisibilityMultipliers.py b/puzzles/project_euler/p274_DivisibilityMultipliers.py
similarity index 100%
rename from project_euler/p274_DivisibilityMultipliers.py
rename to puzzles/project_euler/p274_DivisibilityMultipliers.py
diff --git a/project_euler/p275_BalancedSculptures.py b/puzzles/project_euler/p275_BalancedSculptures.py
similarity index 100%
rename from project_euler/p275_BalancedSculptures.py
rename to puzzles/project_euler/p275_BalancedSculptures.py
diff --git a/project_euler/p276_PrimitiveTriangles.py b/puzzles/project_euler/p276_PrimitiveTriangles.py
similarity index 100%
rename from project_euler/p276_PrimitiveTriangles.py
rename to puzzles/project_euler/p276_PrimitiveTriangles.py
diff --git a/project_euler/p277_AModifiedCollatzSequence.py b/puzzles/project_euler/p277_AModifiedCollatzSequence.py
similarity index 100%
rename from project_euler/p277_AModifiedCollatzSequence.py
rename to puzzles/project_euler/p277_AModifiedCollatzSequence.py
diff --git a/project_euler/p278_LinearCombinationsOfSemiprimes.py b/puzzles/project_euler/p278_LinearCombinationsOfSemiprimes.py
similarity index 100%
rename from project_euler/p278_LinearCombinationsOfSemiprimes.py
rename to puzzles/project_euler/p278_LinearCombinationsOfSemiprimes.py
diff --git a/project_euler/p279_TrianglesWithIntegralSidesAndAnIntegralAngle.py b/puzzles/project_euler/p279_TrianglesWithIntegralSidesAndAnIntegralAngle.py
similarity index 100%
rename from project_euler/p279_TrianglesWithIntegralSidesAndAnIntegralAngle.py
rename to puzzles/project_euler/p279_TrianglesWithIntegralSidesAndAnIntegralAngle.py
diff --git a/project_euler/p280_AntAndSeeds.py b/puzzles/project_euler/p280_AntAndSeeds.py
similarity index 100%
rename from project_euler/p280_AntAndSeeds.py
rename to puzzles/project_euler/p280_AntAndSeeds.py
diff --git a/project_euler/p281_PizzaToppings.py b/puzzles/project_euler/p281_PizzaToppings.py
similarity index 100%
rename from project_euler/p281_PizzaToppings.py
rename to puzzles/project_euler/p281_PizzaToppings.py
diff --git a/project_euler/p282_TheAckermannFunction.py b/puzzles/project_euler/p282_TheAckermannFunction.py
similarity index 100%
rename from project_euler/p282_TheAckermannFunction.py
rename to puzzles/project_euler/p282_TheAckermannFunction.py
diff --git a/project_euler/p283_IntegerSidedTrianglesForWhichTheAreaperimeterRatioIsIntegral.py b/puzzles/project_euler/p283_IntegerSidedTrianglesForWhichTheAreaperimeterRatioIsIntegral.py
similarity index 100%
rename from project_euler/p283_IntegerSidedTrianglesForWhichTheAreaperimeterRatioIsIntegral.py
rename to puzzles/project_euler/p283_IntegerSidedTrianglesForWhichTheAreaperimeterRatioIsIntegral.py
diff --git a/project_euler/p284_SteadySquares.py b/puzzles/project_euler/p284_SteadySquares.py
similarity index 100%
rename from project_euler/p284_SteadySquares.py
rename to puzzles/project_euler/p284_SteadySquares.py
diff --git a/project_euler/p285_PythagoreanOdds.py b/puzzles/project_euler/p285_PythagoreanOdds.py
similarity index 100%
rename from project_euler/p285_PythagoreanOdds.py
rename to puzzles/project_euler/p285_PythagoreanOdds.py
diff --git a/project_euler/p286_ScoringProbabilities.py b/puzzles/project_euler/p286_ScoringProbabilities.py
similarity index 100%
rename from project_euler/p286_ScoringProbabilities.py
rename to puzzles/project_euler/p286_ScoringProbabilities.py
diff --git a/project_euler/p287_QuadtreeEncoding(ASimpleCompressionAlgorithm).py b/puzzles/project_euler/p287_QuadtreeEncoding(ASimpleCompressionAlgorithm).py
similarity index 100%
rename from project_euler/p287_QuadtreeEncoding(ASimpleCompressionAlgorithm).py
rename to puzzles/project_euler/p287_QuadtreeEncoding(ASimpleCompressionAlgorithm).py
diff --git a/project_euler/p288_AnEnormousFactorial.py b/puzzles/project_euler/p288_AnEnormousFactorial.py
similarity index 100%
rename from project_euler/p288_AnEnormousFactorial.py
rename to puzzles/project_euler/p288_AnEnormousFactorial.py
diff --git a/project_euler/p289_EulerianCycles.py b/puzzles/project_euler/p289_EulerianCycles.py
similarity index 100%
rename from project_euler/p289_EulerianCycles.py
rename to puzzles/project_euler/p289_EulerianCycles.py
diff --git a/project_euler/p290_DigitalSignature.py b/puzzles/project_euler/p290_DigitalSignature.py
similarity index 100%
rename from project_euler/p290_DigitalSignature.py
rename to puzzles/project_euler/p290_DigitalSignature.py
diff --git a/project_euler/p291_PanaitopolPrimes.py b/puzzles/project_euler/p291_PanaitopolPrimes.py
similarity index 100%
rename from project_euler/p291_PanaitopolPrimes.py
rename to puzzles/project_euler/p291_PanaitopolPrimes.py
diff --git a/project_euler/p292_PythagoreanPolygons.py b/puzzles/project_euler/p292_PythagoreanPolygons.py
similarity index 100%
rename from project_euler/p292_PythagoreanPolygons.py
rename to puzzles/project_euler/p292_PythagoreanPolygons.py
diff --git a/project_euler/p293_PseudoFortunateNumbers.py b/puzzles/project_euler/p293_PseudoFortunateNumbers.py
similarity index 100%
rename from project_euler/p293_PseudoFortunateNumbers.py
rename to puzzles/project_euler/p293_PseudoFortunateNumbers.py
diff --git a/project_euler/p294_SumOfDigitsExperience#23.py b/puzzles/project_euler/p294_SumOfDigitsExperience#23.py
similarity index 100%
rename from project_euler/p294_SumOfDigitsExperience#23.py
rename to puzzles/project_euler/p294_SumOfDigitsExperience#23.py
diff --git a/project_euler/p295_LenticularHoles.py b/puzzles/project_euler/p295_LenticularHoles.py
similarity index 100%
rename from project_euler/p295_LenticularHoles.py
rename to puzzles/project_euler/p295_LenticularHoles.py
diff --git a/project_euler/p296_AngularBisectorAndTangent.py b/puzzles/project_euler/p296_AngularBisectorAndTangent.py
similarity index 100%
rename from project_euler/p296_AngularBisectorAndTangent.py
rename to puzzles/project_euler/p296_AngularBisectorAndTangent.py
diff --git a/project_euler/p297_ZeckendorfRepresentation.py b/puzzles/project_euler/p297_ZeckendorfRepresentation.py
similarity index 100%
rename from project_euler/p297_ZeckendorfRepresentation.py
rename to puzzles/project_euler/p297_ZeckendorfRepresentation.py
diff --git a/project_euler/p298_SelectiveAmnesia.py b/puzzles/project_euler/p298_SelectiveAmnesia.py
similarity index 100%
rename from project_euler/p298_SelectiveAmnesia.py
rename to puzzles/project_euler/p298_SelectiveAmnesia.py
diff --git a/project_euler/p299_ThreeSimilarTriangles.py b/puzzles/project_euler/p299_ThreeSimilarTriangles.py
similarity index 100%
rename from project_euler/p299_ThreeSimilarTriangles.py
rename to puzzles/project_euler/p299_ThreeSimilarTriangles.py
diff --git a/project_euler/p300_ProteinFolding.py b/puzzles/project_euler/p300_ProteinFolding.py
similarity index 100%
rename from project_euler/p300_ProteinFolding.py
rename to puzzles/project_euler/p300_ProteinFolding.py
diff --git a/project_euler/p301_Nim.py b/puzzles/project_euler/p301_Nim.py
similarity index 100%
rename from project_euler/p301_Nim.py
rename to puzzles/project_euler/p301_Nim.py
diff --git a/project_euler/p302_StrongAchillesNumbers.py b/puzzles/project_euler/p302_StrongAchillesNumbers.py
similarity index 100%
rename from project_euler/p302_StrongAchillesNumbers.py
rename to puzzles/project_euler/p302_StrongAchillesNumbers.py
diff --git a/project_euler/p303_MultiplesWithSmallDigits.py b/puzzles/project_euler/p303_MultiplesWithSmallDigits.py
similarity index 100%
rename from project_euler/p303_MultiplesWithSmallDigits.py
rename to puzzles/project_euler/p303_MultiplesWithSmallDigits.py
diff --git a/project_euler/p304_Primonacci.py b/puzzles/project_euler/p304_Primonacci.py
similarity index 100%
rename from project_euler/p304_Primonacci.py
rename to puzzles/project_euler/p304_Primonacci.py
diff --git a/project_euler/p305_ReflexivePosition.py b/puzzles/project_euler/p305_ReflexivePosition.py
similarity index 100%
rename from project_euler/p305_ReflexivePosition.py
rename to puzzles/project_euler/p305_ReflexivePosition.py
diff --git a/project_euler/p306_PaperStripGame.py b/puzzles/project_euler/p306_PaperStripGame.py
similarity index 100%
rename from project_euler/p306_PaperStripGame.py
rename to puzzles/project_euler/p306_PaperStripGame.py
diff --git a/project_euler/p307_ChipDefects.py b/puzzles/project_euler/p307_ChipDefects.py
similarity index 100%
rename from project_euler/p307_ChipDefects.py
rename to puzzles/project_euler/p307_ChipDefects.py
diff --git a/project_euler/p308_AnAmazingPrimeGeneratingAutomaton.py b/puzzles/project_euler/p308_AnAmazingPrimeGeneratingAutomaton.py
similarity index 100%
rename from project_euler/p308_AnAmazingPrimeGeneratingAutomaton.py
rename to puzzles/project_euler/p308_AnAmazingPrimeGeneratingAutomaton.py
diff --git a/project_euler/p309_IntegerLadders.py b/puzzles/project_euler/p309_IntegerLadders.py
similarity index 100%
rename from project_euler/p309_IntegerLadders.py
rename to puzzles/project_euler/p309_IntegerLadders.py
diff --git a/project_euler/p310_NimSquare.py b/puzzles/project_euler/p310_NimSquare.py
similarity index 100%
rename from project_euler/p310_NimSquare.py
rename to puzzles/project_euler/p310_NimSquare.py
diff --git a/project_euler/p311_BiclinicIntegralQuadrilaterals.py b/puzzles/project_euler/p311_BiclinicIntegralQuadrilaterals.py
similarity index 100%
rename from project_euler/p311_BiclinicIntegralQuadrilaterals.py
rename to puzzles/project_euler/p311_BiclinicIntegralQuadrilaterals.py
diff --git a/project_euler/p312_CyclicPathsOnSierpinskiGraphs.py b/puzzles/project_euler/p312_CyclicPathsOnSierpinskiGraphs.py
similarity index 100%
rename from project_euler/p312_CyclicPathsOnSierpinskiGraphs.py
rename to puzzles/project_euler/p312_CyclicPathsOnSierpinskiGraphs.py
diff --git a/project_euler/p313_SlidingGame.py b/puzzles/project_euler/p313_SlidingGame.py
similarity index 100%
rename from project_euler/p313_SlidingGame.py
rename to puzzles/project_euler/p313_SlidingGame.py
diff --git a/project_euler/p314_TheMouseOnTheMoon.py b/puzzles/project_euler/p314_TheMouseOnTheMoon.py
similarity index 100%
rename from project_euler/p314_TheMouseOnTheMoon.py
rename to puzzles/project_euler/p314_TheMouseOnTheMoon.py
diff --git a/project_euler/p315_DigitalRootClocks.py b/puzzles/project_euler/p315_DigitalRootClocks.py
similarity index 100%
rename from project_euler/p315_DigitalRootClocks.py
rename to puzzles/project_euler/p315_DigitalRootClocks.py
diff --git a/project_euler/p316_NumbersInDecimalExpansions.py b/puzzles/project_euler/p316_NumbersInDecimalExpansions.py
similarity index 100%
rename from project_euler/p316_NumbersInDecimalExpansions.py
rename to puzzles/project_euler/p316_NumbersInDecimalExpansions.py
diff --git a/project_euler/p317_Firecracker.py b/puzzles/project_euler/p317_Firecracker.py
similarity index 100%
rename from project_euler/p317_Firecracker.py
rename to puzzles/project_euler/p317_Firecracker.py
diff --git a/project_euler/p318_2011Nines.py b/puzzles/project_euler/p318_2011Nines.py
similarity index 100%
rename from project_euler/p318_2011Nines.py
rename to puzzles/project_euler/p318_2011Nines.py
diff --git a/project_euler/p319_BoundedSequences.py b/puzzles/project_euler/p319_BoundedSequences.py
similarity index 100%
rename from project_euler/p319_BoundedSequences.py
rename to puzzles/project_euler/p319_BoundedSequences.py
diff --git a/project_euler/p320_FactorialsDivisibleByAHugeInteger.py b/puzzles/project_euler/p320_FactorialsDivisibleByAHugeInteger.py
similarity index 100%
rename from project_euler/p320_FactorialsDivisibleByAHugeInteger.py
rename to puzzles/project_euler/p320_FactorialsDivisibleByAHugeInteger.py
diff --git a/project_euler/p321_SwappingCounters.py b/puzzles/project_euler/p321_SwappingCounters.py
similarity index 100%
rename from project_euler/p321_SwappingCounters.py
rename to puzzles/project_euler/p321_SwappingCounters.py
diff --git a/project_euler/p322_BinomialCoefficientsDivisibleBy10.py b/puzzles/project_euler/p322_BinomialCoefficientsDivisibleBy10.py
similarity index 100%
rename from project_euler/p322_BinomialCoefficientsDivisibleBy10.py
rename to puzzles/project_euler/p322_BinomialCoefficientsDivisibleBy10.py
diff --git a/project_euler/p323_BitwiseOROperationsOnRandomIntegers.py b/puzzles/project_euler/p323_BitwiseOROperationsOnRandomIntegers.py
similarity index 100%
rename from project_euler/p323_BitwiseOROperationsOnRandomIntegers.py
rename to puzzles/project_euler/p323_BitwiseOROperationsOnRandomIntegers.py
diff --git a/project_euler/p324_BuildingATower.py b/puzzles/project_euler/p324_BuildingATower.py
similarity index 100%
rename from project_euler/p324_BuildingATower.py
rename to puzzles/project_euler/p324_BuildingATower.py
diff --git a/project_euler/p325_StoneGameII.py b/puzzles/project_euler/p325_StoneGameII.py
similarity index 100%
rename from project_euler/p325_StoneGameII.py
rename to puzzles/project_euler/p325_StoneGameII.py
diff --git a/project_euler/p326_ModuloSummations.py b/puzzles/project_euler/p326_ModuloSummations.py
similarity index 100%
rename from project_euler/p326_ModuloSummations.py
rename to puzzles/project_euler/p326_ModuloSummations.py
diff --git a/project_euler/p327_RoomsOfDoom.py b/puzzles/project_euler/p327_RoomsOfDoom.py
similarity index 100%
rename from project_euler/p327_RoomsOfDoom.py
rename to puzzles/project_euler/p327_RoomsOfDoom.py
diff --git a/project_euler/p328_LowestCostSearch.py b/puzzles/project_euler/p328_LowestCostSearch.py
similarity index 100%
rename from project_euler/p328_LowestCostSearch.py
rename to puzzles/project_euler/p328_LowestCostSearch.py
diff --git a/project_euler/p329_PrimeFrog.py b/puzzles/project_euler/p329_PrimeFrog.py
similarity index 100%
rename from project_euler/p329_PrimeFrog.py
rename to puzzles/project_euler/p329_PrimeFrog.py
diff --git a/project_euler/p330_EulerNumber.py b/puzzles/project_euler/p330_EulerNumber.py
similarity index 100%
rename from project_euler/p330_EulerNumber.py
rename to puzzles/project_euler/p330_EulerNumber.py
diff --git a/project_euler/p331_CrossFlips.py b/puzzles/project_euler/p331_CrossFlips.py
similarity index 100%
rename from project_euler/p331_CrossFlips.py
rename to puzzles/project_euler/p331_CrossFlips.py
diff --git a/project_euler/p332_SphericalTriangles.py b/puzzles/project_euler/p332_SphericalTriangles.py
similarity index 100%
rename from project_euler/p332_SphericalTriangles.py
rename to puzzles/project_euler/p332_SphericalTriangles.py
diff --git a/project_euler/p333_SpecialPartitions.py b/puzzles/project_euler/p333_SpecialPartitions.py
similarity index 100%
rename from project_euler/p333_SpecialPartitions.py
rename to puzzles/project_euler/p333_SpecialPartitions.py
diff --git a/project_euler/p334_SpillingTheBeans.py b/puzzles/project_euler/p334_SpillingTheBeans.py
similarity index 100%
rename from project_euler/p334_SpillingTheBeans.py
rename to puzzles/project_euler/p334_SpillingTheBeans.py
diff --git a/project_euler/p335_GatheringTheBeans.py b/puzzles/project_euler/p335_GatheringTheBeans.py
similarity index 100%
rename from project_euler/p335_GatheringTheBeans.py
rename to puzzles/project_euler/p335_GatheringTheBeans.py
diff --git a/project_euler/p336_MaximixArrangements.py b/puzzles/project_euler/p336_MaximixArrangements.py
similarity index 100%
rename from project_euler/p336_MaximixArrangements.py
rename to puzzles/project_euler/p336_MaximixArrangements.py
diff --git a/project_euler/p337_TotientStairstepSequences.py b/puzzles/project_euler/p337_TotientStairstepSequences.py
similarity index 100%
rename from project_euler/p337_TotientStairstepSequences.py
rename to puzzles/project_euler/p337_TotientStairstepSequences.py
diff --git a/project_euler/p338_CuttingRectangularGridPaper.py b/puzzles/project_euler/p338_CuttingRectangularGridPaper.py
similarity index 100%
rename from project_euler/p338_CuttingRectangularGridPaper.py
rename to puzzles/project_euler/p338_CuttingRectangularGridPaper.py
diff --git a/project_euler/p339_PeredurFabEfrawg.py b/puzzles/project_euler/p339_PeredurFabEfrawg.py
similarity index 100%
rename from project_euler/p339_PeredurFabEfrawg.py
rename to puzzles/project_euler/p339_PeredurFabEfrawg.py
diff --git a/project_euler/p340_CrazyFunction.py b/puzzles/project_euler/p340_CrazyFunction.py
similarity index 100%
rename from project_euler/p340_CrazyFunction.py
rename to puzzles/project_euler/p340_CrazyFunction.py
diff --git a/project_euler/p341_GolombSelfDescribingSequence.py b/puzzles/project_euler/p341_GolombSelfDescribingSequence.py
similarity index 100%
rename from project_euler/p341_GolombSelfDescribingSequence.py
rename to puzzles/project_euler/p341_GolombSelfDescribingSequence.py
diff --git a/project_euler/p342_TheTotientOfASquareIsACube.py b/puzzles/project_euler/p342_TheTotientOfASquareIsACube.py
similarity index 100%
rename from project_euler/p342_TheTotientOfASquareIsACube.py
rename to puzzles/project_euler/p342_TheTotientOfASquareIsACube.py
diff --git a/project_euler/p343_FractionalSequences.py b/puzzles/project_euler/p343_FractionalSequences.py
similarity index 100%
rename from project_euler/p343_FractionalSequences.py
rename to puzzles/project_euler/p343_FractionalSequences.py
diff --git a/project_euler/p344_SilverDollarGame.py b/puzzles/project_euler/p344_SilverDollarGame.py
similarity index 100%
rename from project_euler/p344_SilverDollarGame.py
rename to puzzles/project_euler/p344_SilverDollarGame.py
diff --git a/project_euler/p345_MatrixSum.py b/puzzles/project_euler/p345_MatrixSum.py
similarity index 100%
rename from project_euler/p345_MatrixSum.py
rename to puzzles/project_euler/p345_MatrixSum.py
diff --git a/project_euler/p346_StrongRepunits.py b/puzzles/project_euler/p346_StrongRepunits.py
similarity index 100%
rename from project_euler/p346_StrongRepunits.py
rename to puzzles/project_euler/p346_StrongRepunits.py
diff --git a/project_euler/p347_LargestIntegerDivisibleByTwoPrimes.py b/puzzles/project_euler/p347_LargestIntegerDivisibleByTwoPrimes.py
similarity index 100%
rename from project_euler/p347_LargestIntegerDivisibleByTwoPrimes.py
rename to puzzles/project_euler/p347_LargestIntegerDivisibleByTwoPrimes.py
diff --git a/project_euler/p348_SumOfASquareAndACube.py b/puzzles/project_euler/p348_SumOfASquareAndACube.py
similarity index 100%
rename from project_euler/p348_SumOfASquareAndACube.py
rename to puzzles/project_euler/p348_SumOfASquareAndACube.py
diff --git a/project_euler/p349_LangtonAnt.py b/puzzles/project_euler/p349_LangtonAnt.py
similarity index 100%
rename from project_euler/p349_LangtonAnt.py
rename to puzzles/project_euler/p349_LangtonAnt.py
diff --git a/project_euler/p350_ConstrainingTheLeastGreatestAndTheGreatestLeast.py b/puzzles/project_euler/p350_ConstrainingTheLeastGreatestAndTheGreatestLeast.py
similarity index 100%
rename from project_euler/p350_ConstrainingTheLeastGreatestAndTheGreatestLeast.py
rename to puzzles/project_euler/p350_ConstrainingTheLeastGreatestAndTheGreatestLeast.py
diff --git a/project_euler/p351_HexagonalOrchards.py b/puzzles/project_euler/p351_HexagonalOrchards.py
similarity index 100%
rename from project_euler/p351_HexagonalOrchards.py
rename to puzzles/project_euler/p351_HexagonalOrchards.py
diff --git a/project_euler/p352_BloodTests.py b/puzzles/project_euler/p352_BloodTests.py
similarity index 100%
rename from project_euler/p352_BloodTests.py
rename to puzzles/project_euler/p352_BloodTests.py
diff --git a/project_euler/p353_RiskyMoon.py b/puzzles/project_euler/p353_RiskyMoon.py
similarity index 100%
rename from project_euler/p353_RiskyMoon.py
rename to puzzles/project_euler/p353_RiskyMoon.py
diff --git a/project_euler/p354_DistancesInABeeHoneycomb.py b/puzzles/project_euler/p354_DistancesInABeeHoneycomb.py
similarity index 100%
rename from project_euler/p354_DistancesInABeeHoneycomb.py
rename to puzzles/project_euler/p354_DistancesInABeeHoneycomb.py
diff --git a/project_euler/p355_MaximalCoprimeSubset.py b/puzzles/project_euler/p355_MaximalCoprimeSubset.py
similarity index 100%
rename from project_euler/p355_MaximalCoprimeSubset.py
rename to puzzles/project_euler/p355_MaximalCoprimeSubset.py
diff --git a/project_euler/p356_LargestRootsOfCubicPolynomials.py b/puzzles/project_euler/p356_LargestRootsOfCubicPolynomials.py
similarity index 100%
rename from project_euler/p356_LargestRootsOfCubicPolynomials.py
rename to puzzles/project_euler/p356_LargestRootsOfCubicPolynomials.py
diff --git a/project_euler/p357_PrimeGeneratingIntegers.py b/puzzles/project_euler/p357_PrimeGeneratingIntegers.py
similarity index 100%
rename from project_euler/p357_PrimeGeneratingIntegers.py
rename to puzzles/project_euler/p357_PrimeGeneratingIntegers.py
diff --git a/project_euler/p358_CyclicNumbers.py b/puzzles/project_euler/p358_CyclicNumbers.py
similarity index 100%
rename from project_euler/p358_CyclicNumbers.py
rename to puzzles/project_euler/p358_CyclicNumbers.py
diff --git a/project_euler/p359_HilbertNewHotel.py b/puzzles/project_euler/p359_HilbertNewHotel.py
similarity index 100%
rename from project_euler/p359_HilbertNewHotel.py
rename to puzzles/project_euler/p359_HilbertNewHotel.py
diff --git a/project_euler/p360_ScarySphere.py b/puzzles/project_euler/p360_ScarySphere.py
similarity index 100%
rename from project_euler/p360_ScarySphere.py
rename to puzzles/project_euler/p360_ScarySphere.py
diff --git a/project_euler/p361_SubsequenceOfThueMorseSequence.py b/puzzles/project_euler/p361_SubsequenceOfThueMorseSequence.py
similarity index 100%
rename from project_euler/p361_SubsequenceOfThueMorseSequence.py
rename to puzzles/project_euler/p361_SubsequenceOfThueMorseSequence.py
diff --git a/project_euler/p362_SquarefreeFactors.py b/puzzles/project_euler/p362_SquarefreeFactors.py
similarity index 100%
rename from project_euler/p362_SquarefreeFactors.py
rename to puzzles/project_euler/p362_SquarefreeFactors.py
diff --git a/project_euler/p363_BezierCurves.py b/puzzles/project_euler/p363_BezierCurves.py
similarity index 100%
rename from project_euler/p363_BezierCurves.py
rename to puzzles/project_euler/p363_BezierCurves.py
diff --git a/project_euler/p364_ComfortableDistance.py b/puzzles/project_euler/p364_ComfortableDistance.py
similarity index 100%
rename from project_euler/p364_ComfortableDistance.py
rename to puzzles/project_euler/p364_ComfortableDistance.py
diff --git a/project_euler/p365_AHugeBinomialCoefficient.py b/puzzles/project_euler/p365_AHugeBinomialCoefficient.py
similarity index 100%
rename from project_euler/p365_AHugeBinomialCoefficient.py
rename to puzzles/project_euler/p365_AHugeBinomialCoefficient.py
diff --git a/project_euler/p366_StoneGameIII.py b/puzzles/project_euler/p366_StoneGameIII.py
similarity index 100%
rename from project_euler/p366_StoneGameIII.py
rename to puzzles/project_euler/p366_StoneGameIII.py
diff --git a/project_euler/p367_bozoSort.py b/puzzles/project_euler/p367_bozoSort.py
similarity index 100%
rename from project_euler/p367_bozoSort.py
rename to puzzles/project_euler/p367_bozoSort.py
diff --git a/project_euler/p368_AKempnerLikeSeries.py b/puzzles/project_euler/p368_AKempnerLikeSeries.py
similarity index 100%
rename from project_euler/p368_AKempnerLikeSeries.py
rename to puzzles/project_euler/p368_AKempnerLikeSeries.py
diff --git a/project_euler/p369_Badugi.py b/puzzles/project_euler/p369_Badugi.py
similarity index 100%
rename from project_euler/p369_Badugi.py
rename to puzzles/project_euler/p369_Badugi.py
diff --git a/project_euler/p370_GeometricTriangles.py b/puzzles/project_euler/p370_GeometricTriangles.py
similarity index 100%
rename from project_euler/p370_GeometricTriangles.py
rename to puzzles/project_euler/p370_GeometricTriangles.py
diff --git a/project_euler/p371_LicencePlates.py b/puzzles/project_euler/p371_LicencePlates.py
similarity index 100%
rename from project_euler/p371_LicencePlates.py
rename to puzzles/project_euler/p371_LicencePlates.py
diff --git a/project_euler/p372_PencilsOfRays.py b/puzzles/project_euler/p372_PencilsOfRays.py
similarity index 100%
rename from project_euler/p372_PencilsOfRays.py
rename to puzzles/project_euler/p372_PencilsOfRays.py
diff --git a/project_euler/p373_CircumscribedCircles.py b/puzzles/project_euler/p373_CircumscribedCircles.py
similarity index 100%
rename from project_euler/p373_CircumscribedCircles.py
rename to puzzles/project_euler/p373_CircumscribedCircles.py
diff --git a/project_euler/p374_MaximumIntegerPartitionProduct.py b/puzzles/project_euler/p374_MaximumIntegerPartitionProduct.py
similarity index 100%
rename from project_euler/p374_MaximumIntegerPartitionProduct.py
rename to puzzles/project_euler/p374_MaximumIntegerPartitionProduct.py
diff --git a/project_euler/p375_MinimumOfSubsequences.py b/puzzles/project_euler/p375_MinimumOfSubsequences.py
similarity index 100%
rename from project_euler/p375_MinimumOfSubsequences.py
rename to puzzles/project_euler/p375_MinimumOfSubsequences.py
diff --git a/project_euler/p376_NontransitiveSetsOfDice.py b/puzzles/project_euler/p376_NontransitiveSetsOfDice.py
similarity index 100%
rename from project_euler/p376_NontransitiveSetsOfDice.py
rename to puzzles/project_euler/p376_NontransitiveSetsOfDice.py
diff --git a/project_euler/p377_SumOfDigits,Experience13.py b/puzzles/project_euler/p377_SumOfDigits,Experience13.py
similarity index 100%
rename from project_euler/p377_SumOfDigits,Experience13.py
rename to puzzles/project_euler/p377_SumOfDigits,Experience13.py
diff --git a/project_euler/p378_TriangleTriples.py b/puzzles/project_euler/p378_TriangleTriples.py
similarity index 100%
rename from project_euler/p378_TriangleTriples.py
rename to puzzles/project_euler/p378_TriangleTriples.py
diff --git a/project_euler/p379_LeastCommonMultipleCount.py b/puzzles/project_euler/p379_LeastCommonMultipleCount.py
similarity index 100%
rename from project_euler/p379_LeastCommonMultipleCount.py
rename to puzzles/project_euler/p379_LeastCommonMultipleCount.py
diff --git a/project_euler/p380_AmazingMazes!.py b/puzzles/project_euler/p380_AmazingMazes!.py
similarity index 100%
rename from project_euler/p380_AmazingMazes!.py
rename to puzzles/project_euler/p380_AmazingMazes!.py
diff --git a/project_euler/p381_(PrimeK)Factorial.py b/puzzles/project_euler/p381_(PrimeK)Factorial.py
similarity index 100%
rename from project_euler/p381_(PrimeK)Factorial.py
rename to puzzles/project_euler/p381_(PrimeK)Factorial.py
diff --git a/project_euler/p382_GeneratingPolygons.py b/puzzles/project_euler/p382_GeneratingPolygons.py
similarity index 100%
rename from project_euler/p382_GeneratingPolygons.py
rename to puzzles/project_euler/p382_GeneratingPolygons.py
diff --git a/project_euler/p383_DivisibilityComparisonBetweenFactorials.py b/puzzles/project_euler/p383_DivisibilityComparisonBetweenFactorials.py
similarity index 100%
rename from project_euler/p383_DivisibilityComparisonBetweenFactorials.py
rename to puzzles/project_euler/p383_DivisibilityComparisonBetweenFactorials.py
diff --git a/project_euler/p384_RudinShapiroSequence.py b/puzzles/project_euler/p384_RudinShapiroSequence.py
similarity index 100%
rename from project_euler/p384_RudinShapiroSequence.py
rename to puzzles/project_euler/p384_RudinShapiroSequence.py
diff --git a/project_euler/p385_EllipsesInsideTriangles.py b/puzzles/project_euler/p385_EllipsesInsideTriangles.py
similarity index 100%
rename from project_euler/p385_EllipsesInsideTriangles.py
rename to puzzles/project_euler/p385_EllipsesInsideTriangles.py
diff --git a/project_euler/p386_MaximumLengthOfAnAntichain.py b/puzzles/project_euler/p386_MaximumLengthOfAnAntichain.py
similarity index 100%
rename from project_euler/p386_MaximumLengthOfAnAntichain.py
rename to puzzles/project_euler/p386_MaximumLengthOfAnAntichain.py
diff --git a/project_euler/p387_HarshadNumbers.py b/puzzles/project_euler/p387_HarshadNumbers.py
similarity index 100%
rename from project_euler/p387_HarshadNumbers.py
rename to puzzles/project_euler/p387_HarshadNumbers.py
diff --git a/project_euler/p388_DistinctLines.py b/puzzles/project_euler/p388_DistinctLines.py
similarity index 100%
rename from project_euler/p388_DistinctLines.py
rename to puzzles/project_euler/p388_DistinctLines.py
diff --git a/project_euler/p389_PlatonicDice.py b/puzzles/project_euler/p389_PlatonicDice.py
similarity index 100%
rename from project_euler/p389_PlatonicDice.py
rename to puzzles/project_euler/p389_PlatonicDice.py
diff --git a/project_euler/p390_TrianglesWithNonRationalSidesAndIntegralArea.py b/puzzles/project_euler/p390_TrianglesWithNonRationalSidesAndIntegralArea.py
similarity index 100%
rename from project_euler/p390_TrianglesWithNonRationalSidesAndIntegralArea.py
rename to puzzles/project_euler/p390_TrianglesWithNonRationalSidesAndIntegralArea.py
diff --git a/project_euler/p391_HoppingGame.py b/puzzles/project_euler/p391_HoppingGame.py
similarity index 100%
rename from project_euler/p391_HoppingGame.py
rename to puzzles/project_euler/p391_HoppingGame.py
diff --git a/project_euler/p392_EnmeshedUnitCircle.py b/puzzles/project_euler/p392_EnmeshedUnitCircle.py
similarity index 100%
rename from project_euler/p392_EnmeshedUnitCircle.py
rename to puzzles/project_euler/p392_EnmeshedUnitCircle.py
diff --git a/project_euler/p393_MigratingAnts.py b/puzzles/project_euler/p393_MigratingAnts.py
similarity index 100%
rename from project_euler/p393_MigratingAnts.py
rename to puzzles/project_euler/p393_MigratingAnts.py
diff --git a/project_euler/p394_EatingPie.py b/puzzles/project_euler/p394_EatingPie.py
similarity index 100%
rename from project_euler/p394_EatingPie.py
rename to puzzles/project_euler/p394_EatingPie.py
diff --git a/project_euler/p395_PythagoreanTree.py b/puzzles/project_euler/p395_PythagoreanTree.py
similarity index 100%
rename from project_euler/p395_PythagoreanTree.py
rename to puzzles/project_euler/p395_PythagoreanTree.py
diff --git a/project_euler/p396_WeakGoodsteinSequence.py b/puzzles/project_euler/p396_WeakGoodsteinSequence.py
similarity index 100%
rename from project_euler/p396_WeakGoodsteinSequence.py
rename to puzzles/project_euler/p396_WeakGoodsteinSequence.py
diff --git a/project_euler/p397_TriangleOnParabola.py b/puzzles/project_euler/p397_TriangleOnParabola.py
similarity index 100%
rename from project_euler/p397_TriangleOnParabola.py
rename to puzzles/project_euler/p397_TriangleOnParabola.py
diff --git a/project_euler/p398_CuttingRope.py b/puzzles/project_euler/p398_CuttingRope.py
similarity index 100%
rename from project_euler/p398_CuttingRope.py
rename to puzzles/project_euler/p398_CuttingRope.py
diff --git a/project_euler/p399_SquarefreeFibonacciNumbers.py b/puzzles/project_euler/p399_SquarefreeFibonacciNumbers.py
similarity index 100%
rename from project_euler/p399_SquarefreeFibonacciNumbers.py
rename to puzzles/project_euler/p399_SquarefreeFibonacciNumbers.py
diff --git a/project_euler/p400_FibonacciTreeGame.py b/puzzles/project_euler/p400_FibonacciTreeGame.py
similarity index 100%
rename from project_euler/p400_FibonacciTreeGame.py
rename to puzzles/project_euler/p400_FibonacciTreeGame.py
diff --git a/project_euler/p401_SumOfSquaresOfDivisors.py b/puzzles/project_euler/p401_SumOfSquaresOfDivisors.py
similarity index 100%
rename from project_euler/p401_SumOfSquaresOfDivisors.py
rename to puzzles/project_euler/p401_SumOfSquaresOfDivisors.py
diff --git a/project_euler/p402_IntegerValuedPolynomials.py b/puzzles/project_euler/p402_IntegerValuedPolynomials.py
similarity index 100%
rename from project_euler/p402_IntegerValuedPolynomials.py
rename to puzzles/project_euler/p402_IntegerValuedPolynomials.py
diff --git a/project_euler/p403_LatticePointsEnclosedByParabolaAndLine.py b/puzzles/project_euler/p403_LatticePointsEnclosedByParabolaAndLine.py
similarity index 100%
rename from project_euler/p403_LatticePointsEnclosedByParabolaAndLine.py
rename to puzzles/project_euler/p403_LatticePointsEnclosedByParabolaAndLine.py
diff --git a/project_euler/p404_CrisscrossEllipses.py b/puzzles/project_euler/p404_CrisscrossEllipses.py
similarity index 100%
rename from project_euler/p404_CrisscrossEllipses.py
rename to puzzles/project_euler/p404_CrisscrossEllipses.py
diff --git a/project_euler/p405_ARectangularTiling.py b/puzzles/project_euler/p405_ARectangularTiling.py
similarity index 100%
rename from project_euler/p405_ARectangularTiling.py
rename to puzzles/project_euler/p405_ARectangularTiling.py
diff --git a/project_euler/p406_GuessingGame.py b/puzzles/project_euler/p406_GuessingGame.py
similarity index 100%
rename from project_euler/p406_GuessingGame.py
rename to puzzles/project_euler/p406_GuessingGame.py
diff --git a/project_euler/p407_Idempotents.py b/puzzles/project_euler/p407_Idempotents.py
similarity index 100%
rename from project_euler/p407_Idempotents.py
rename to puzzles/project_euler/p407_Idempotents.py
diff --git a/project_euler/p408_AdmissiblePathsThroughAGrid.py b/puzzles/project_euler/p408_AdmissiblePathsThroughAGrid.py
similarity index 100%
rename from project_euler/p408_AdmissiblePathsThroughAGrid.py
rename to puzzles/project_euler/p408_AdmissiblePathsThroughAGrid.py
diff --git a/project_euler/p409_NimExtreme.py b/puzzles/project_euler/p409_NimExtreme.py
similarity index 100%
rename from project_euler/p409_NimExtreme.py
rename to puzzles/project_euler/p409_NimExtreme.py
diff --git a/project_euler/p410_CircleAndTangentLine.py b/puzzles/project_euler/p410_CircleAndTangentLine.py
similarity index 100%
rename from project_euler/p410_CircleAndTangentLine.py
rename to puzzles/project_euler/p410_CircleAndTangentLine.py
diff --git a/project_euler/p411_UphillPaths.py b/puzzles/project_euler/p411_UphillPaths.py
similarity index 100%
rename from project_euler/p411_UphillPaths.py
rename to puzzles/project_euler/p411_UphillPaths.py
diff --git a/project_euler/p412_GnomonNumbering.py b/puzzles/project_euler/p412_GnomonNumbering.py
similarity index 100%
rename from project_euler/p412_GnomonNumbering.py
rename to puzzles/project_euler/p412_GnomonNumbering.py
diff --git a/project_euler/p413_OneChildNumbers.py b/puzzles/project_euler/p413_OneChildNumbers.py
similarity index 100%
rename from project_euler/p413_OneChildNumbers.py
rename to puzzles/project_euler/p413_OneChildNumbers.py
diff --git a/project_euler/p414_KaprekarConstant.py b/puzzles/project_euler/p414_KaprekarConstant.py
similarity index 100%
rename from project_euler/p414_KaprekarConstant.py
rename to puzzles/project_euler/p414_KaprekarConstant.py
diff --git a/project_euler/p415_TitanicSets.py b/puzzles/project_euler/p415_TitanicSets.py
similarity index 100%
rename from project_euler/p415_TitanicSets.py
rename to puzzles/project_euler/p415_TitanicSets.py
diff --git a/project_euler/p416_AFrogTrip.py b/puzzles/project_euler/p416_AFrogTrip.py
similarity index 100%
rename from project_euler/p416_AFrogTrip.py
rename to puzzles/project_euler/p416_AFrogTrip.py
diff --git a/project_euler/p417_ReciprocalCyclesII.py b/puzzles/project_euler/p417_ReciprocalCyclesII.py
similarity index 100%
rename from project_euler/p417_ReciprocalCyclesII.py
rename to puzzles/project_euler/p417_ReciprocalCyclesII.py
diff --git a/project_euler/p418_FactorisationTriples.py b/puzzles/project_euler/p418_FactorisationTriples.py
similarity index 100%
rename from project_euler/p418_FactorisationTriples.py
rename to puzzles/project_euler/p418_FactorisationTriples.py
diff --git a/project_euler/p419_LookAndSaySequence.py b/puzzles/project_euler/p419_LookAndSaySequence.py
similarity index 100%
rename from project_euler/p419_LookAndSaySequence.py
rename to puzzles/project_euler/p419_LookAndSaySequence.py
diff --git a/project_euler/p420_2x2PositiveIntegerMatrix.py b/puzzles/project_euler/p420_2x2PositiveIntegerMatrix.py
similarity index 100%
rename from project_euler/p420_2x2PositiveIntegerMatrix.py
rename to puzzles/project_euler/p420_2x2PositiveIntegerMatrix.py
diff --git a/project_euler/p421_PrimeFactorsOf.py b/puzzles/project_euler/p421_PrimeFactorsOf.py
similarity index 100%
rename from project_euler/p421_PrimeFactorsOf.py
rename to puzzles/project_euler/p421_PrimeFactorsOf.py
diff --git a/project_euler/p422_SequenceOfPointsOnAHyperbola.py b/puzzles/project_euler/p422_SequenceOfPointsOnAHyperbola.py
similarity index 100%
rename from project_euler/p422_SequenceOfPointsOnAHyperbola.py
rename to puzzles/project_euler/p422_SequenceOfPointsOnAHyperbola.py
diff --git a/project_euler/p423_ConsecutiveDieThrows.py b/puzzles/project_euler/p423_ConsecutiveDieThrows.py
similarity index 100%
rename from project_euler/p423_ConsecutiveDieThrows.py
rename to puzzles/project_euler/p423_ConsecutiveDieThrows.py
diff --git a/project_euler/p424_Kakuro.py b/puzzles/project_euler/p424_Kakuro.py
similarity index 100%
rename from project_euler/p424_Kakuro.py
rename to puzzles/project_euler/p424_Kakuro.py
diff --git a/project_euler/p425_PrimeConnection.py b/puzzles/project_euler/p425_PrimeConnection.py
similarity index 100%
rename from project_euler/p425_PrimeConnection.py
rename to puzzles/project_euler/p425_PrimeConnection.py
diff --git a/project_euler/p426_BoxBallSystem.py b/puzzles/project_euler/p426_BoxBallSystem.py
similarity index 100%
rename from project_euler/p426_BoxBallSystem.py
rename to puzzles/project_euler/p426_BoxBallSystem.py
diff --git a/project_euler/p427_nSequences.py b/puzzles/project_euler/p427_nSequences.py
similarity index 100%
rename from project_euler/p427_nSequences.py
rename to puzzles/project_euler/p427_nSequences.py
diff --git a/project_euler/p428_NecklaceOfCircles.py b/puzzles/project_euler/p428_NecklaceOfCircles.py
similarity index 100%
rename from project_euler/p428_NecklaceOfCircles.py
rename to puzzles/project_euler/p428_NecklaceOfCircles.py
diff --git a/project_euler/p429_SumOfSquaresOfUnitaryDivisors.py b/puzzles/project_euler/p429_SumOfSquaresOfUnitaryDivisors.py
similarity index 100%
rename from project_euler/p429_SumOfSquaresOfUnitaryDivisors.py
rename to puzzles/project_euler/p429_SumOfSquaresOfUnitaryDivisors.py
diff --git a/project_euler/p430_RangeFlips.py b/puzzles/project_euler/p430_RangeFlips.py
similarity index 100%
rename from project_euler/p430_RangeFlips.py
rename to puzzles/project_euler/p430_RangeFlips.py
diff --git a/project_euler/p431_SquareSpaceSilo.py b/puzzles/project_euler/p431_SquareSpaceSilo.py
similarity index 100%
rename from project_euler/p431_SquareSpaceSilo.py
rename to puzzles/project_euler/p431_SquareSpaceSilo.py
diff --git a/project_euler/p432_TotientSum.py b/puzzles/project_euler/p432_TotientSum.py
similarity index 100%
rename from project_euler/p432_TotientSum.py
rename to puzzles/project_euler/p432_TotientSum.py
diff --git a/project_euler/p433_StepsInEuclidAlgorithm.py b/puzzles/project_euler/p433_StepsInEuclidAlgorithm.py
similarity index 100%
rename from project_euler/p433_StepsInEuclidAlgorithm.py
rename to puzzles/project_euler/p433_StepsInEuclidAlgorithm.py
diff --git a/project_euler/p434_RigidGraphs.py b/puzzles/project_euler/p434_RigidGraphs.py
similarity index 100%
rename from project_euler/p434_RigidGraphs.py
rename to puzzles/project_euler/p434_RigidGraphs.py
diff --git a/project_euler/p435_PolynomialsOfFibonacciNumbers.py b/puzzles/project_euler/p435_PolynomialsOfFibonacciNumbers.py
similarity index 100%
rename from project_euler/p435_PolynomialsOfFibonacciNumbers.py
rename to puzzles/project_euler/p435_PolynomialsOfFibonacciNumbers.py
diff --git a/project_euler/pe/p001.html b/puzzles/project_euler/pe/p001.html
similarity index 100%
rename from project_euler/pe/p001.html
rename to puzzles/project_euler/pe/p001.html
diff --git a/project_euler/pe/p002.html b/puzzles/project_euler/pe/p002.html
similarity index 100%
rename from project_euler/pe/p002.html
rename to puzzles/project_euler/pe/p002.html
diff --git a/project_euler/pe/p003.html b/puzzles/project_euler/pe/p003.html
similarity index 100%
rename from project_euler/pe/p003.html
rename to puzzles/project_euler/pe/p003.html
diff --git a/project_euler/pe/p004.html b/puzzles/project_euler/pe/p004.html
similarity index 100%
rename from project_euler/pe/p004.html
rename to puzzles/project_euler/pe/p004.html
diff --git a/project_euler/pe/p005.html b/puzzles/project_euler/pe/p005.html
similarity index 100%
rename from project_euler/pe/p005.html
rename to puzzles/project_euler/pe/p005.html
diff --git a/project_euler/pe/p006.html b/puzzles/project_euler/pe/p006.html
similarity index 100%
rename from project_euler/pe/p006.html
rename to puzzles/project_euler/pe/p006.html
diff --git a/project_euler/pe/p007.html b/puzzles/project_euler/pe/p007.html
similarity index 100%
rename from project_euler/pe/p007.html
rename to puzzles/project_euler/pe/p007.html
diff --git a/project_euler/pe/p008.html b/puzzles/project_euler/pe/p008.html
similarity index 100%
rename from project_euler/pe/p008.html
rename to puzzles/project_euler/pe/p008.html
diff --git a/project_euler/pe/p009.html b/puzzles/project_euler/pe/p009.html
similarity index 100%
rename from project_euler/pe/p009.html
rename to puzzles/project_euler/pe/p009.html
diff --git a/project_euler/pe/p010.html b/puzzles/project_euler/pe/p010.html
similarity index 100%
rename from project_euler/pe/p010.html
rename to puzzles/project_euler/pe/p010.html
diff --git a/project_euler/pe/p011.html b/puzzles/project_euler/pe/p011.html
similarity index 100%
rename from project_euler/pe/p011.html
rename to puzzles/project_euler/pe/p011.html
diff --git a/project_euler/pe/p012.html b/puzzles/project_euler/pe/p012.html
similarity index 100%
rename from project_euler/pe/p012.html
rename to puzzles/project_euler/pe/p012.html
diff --git a/project_euler/pe/p013.html b/puzzles/project_euler/pe/p013.html
similarity index 100%
rename from project_euler/pe/p013.html
rename to puzzles/project_euler/pe/p013.html
diff --git a/project_euler/pe/p014.html b/puzzles/project_euler/pe/p014.html
similarity index 100%
rename from project_euler/pe/p014.html
rename to puzzles/project_euler/pe/p014.html
diff --git a/project_euler/pe/p015.html b/puzzles/project_euler/pe/p015.html
similarity index 100%
rename from project_euler/pe/p015.html
rename to puzzles/project_euler/pe/p015.html
diff --git a/project_euler/pe/p016.html b/puzzles/project_euler/pe/p016.html
similarity index 100%
rename from project_euler/pe/p016.html
rename to puzzles/project_euler/pe/p016.html
diff --git a/project_euler/pe/p017.html b/puzzles/project_euler/pe/p017.html
similarity index 100%
rename from project_euler/pe/p017.html
rename to puzzles/project_euler/pe/p017.html
diff --git a/project_euler/pe/p018.html b/puzzles/project_euler/pe/p018.html
similarity index 100%
rename from project_euler/pe/p018.html
rename to puzzles/project_euler/pe/p018.html
diff --git a/project_euler/pe/p019.html b/puzzles/project_euler/pe/p019.html
similarity index 100%
rename from project_euler/pe/p019.html
rename to puzzles/project_euler/pe/p019.html
diff --git a/project_euler/pe/p020.html b/puzzles/project_euler/pe/p020.html
similarity index 100%
rename from project_euler/pe/p020.html
rename to puzzles/project_euler/pe/p020.html
diff --git a/project_euler/pe/p021.html b/puzzles/project_euler/pe/p021.html
similarity index 100%
rename from project_euler/pe/p021.html
rename to puzzles/project_euler/pe/p021.html
diff --git a/project_euler/pe/p022.html b/puzzles/project_euler/pe/p022.html
similarity index 100%
rename from project_euler/pe/p022.html
rename to puzzles/project_euler/pe/p022.html
diff --git a/project_euler/pe/p023.html b/puzzles/project_euler/pe/p023.html
similarity index 100%
rename from project_euler/pe/p023.html
rename to puzzles/project_euler/pe/p023.html
diff --git a/project_euler/pe/p024.html b/puzzles/project_euler/pe/p024.html
similarity index 100%
rename from project_euler/pe/p024.html
rename to puzzles/project_euler/pe/p024.html
diff --git a/project_euler/pe/p025.html b/puzzles/project_euler/pe/p025.html
similarity index 100%
rename from project_euler/pe/p025.html
rename to puzzles/project_euler/pe/p025.html
diff --git a/project_euler/pe/p026.html b/puzzles/project_euler/pe/p026.html
similarity index 100%
rename from project_euler/pe/p026.html
rename to puzzles/project_euler/pe/p026.html
diff --git a/project_euler/pe/p027.html b/puzzles/project_euler/pe/p027.html
similarity index 100%
rename from project_euler/pe/p027.html
rename to puzzles/project_euler/pe/p027.html
diff --git a/project_euler/pe/p028.html b/puzzles/project_euler/pe/p028.html
similarity index 100%
rename from project_euler/pe/p028.html
rename to puzzles/project_euler/pe/p028.html
diff --git a/project_euler/pe/p029.html b/puzzles/project_euler/pe/p029.html
similarity index 100%
rename from project_euler/pe/p029.html
rename to puzzles/project_euler/pe/p029.html
diff --git a/project_euler/pe/p030.html b/puzzles/project_euler/pe/p030.html
similarity index 100%
rename from project_euler/pe/p030.html
rename to puzzles/project_euler/pe/p030.html
diff --git a/project_euler/pe/p031.html b/puzzles/project_euler/pe/p031.html
similarity index 100%
rename from project_euler/pe/p031.html
rename to puzzles/project_euler/pe/p031.html
diff --git a/project_euler/pe/p032.html b/puzzles/project_euler/pe/p032.html
similarity index 100%
rename from project_euler/pe/p032.html
rename to puzzles/project_euler/pe/p032.html
diff --git a/project_euler/pe/p033.html b/puzzles/project_euler/pe/p033.html
similarity index 100%
rename from project_euler/pe/p033.html
rename to puzzles/project_euler/pe/p033.html
diff --git a/project_euler/pe/p034.html b/puzzles/project_euler/pe/p034.html
similarity index 100%
rename from project_euler/pe/p034.html
rename to puzzles/project_euler/pe/p034.html
diff --git a/project_euler/pe/p035.html b/puzzles/project_euler/pe/p035.html
similarity index 100%
rename from project_euler/pe/p035.html
rename to puzzles/project_euler/pe/p035.html
diff --git a/project_euler/pe/p036.html b/puzzles/project_euler/pe/p036.html
similarity index 100%
rename from project_euler/pe/p036.html
rename to puzzles/project_euler/pe/p036.html
diff --git a/project_euler/pe/p037.html b/puzzles/project_euler/pe/p037.html
similarity index 100%
rename from project_euler/pe/p037.html
rename to puzzles/project_euler/pe/p037.html
diff --git a/project_euler/pe/p038.html b/puzzles/project_euler/pe/p038.html
similarity index 100%
rename from project_euler/pe/p038.html
rename to puzzles/project_euler/pe/p038.html
diff --git a/project_euler/pe/p039.html b/puzzles/project_euler/pe/p039.html
similarity index 100%
rename from project_euler/pe/p039.html
rename to puzzles/project_euler/pe/p039.html
diff --git a/project_euler/pe/p040.html b/puzzles/project_euler/pe/p040.html
similarity index 100%
rename from project_euler/pe/p040.html
rename to puzzles/project_euler/pe/p040.html
diff --git a/project_euler/pe/p041.html b/puzzles/project_euler/pe/p041.html
similarity index 100%
rename from project_euler/pe/p041.html
rename to puzzles/project_euler/pe/p041.html
diff --git a/project_euler/pe/p042.html b/puzzles/project_euler/pe/p042.html
similarity index 100%
rename from project_euler/pe/p042.html
rename to puzzles/project_euler/pe/p042.html
diff --git a/project_euler/pe/p043.html b/puzzles/project_euler/pe/p043.html
similarity index 100%
rename from project_euler/pe/p043.html
rename to puzzles/project_euler/pe/p043.html
diff --git a/project_euler/pe/p044.html b/puzzles/project_euler/pe/p044.html
similarity index 100%
rename from project_euler/pe/p044.html
rename to puzzles/project_euler/pe/p044.html
diff --git a/project_euler/pe/p045.html b/puzzles/project_euler/pe/p045.html
similarity index 100%
rename from project_euler/pe/p045.html
rename to puzzles/project_euler/pe/p045.html
diff --git a/project_euler/pe/p046.html b/puzzles/project_euler/pe/p046.html
similarity index 100%
rename from project_euler/pe/p046.html
rename to puzzles/project_euler/pe/p046.html
diff --git a/project_euler/pe/p047.html b/puzzles/project_euler/pe/p047.html
similarity index 100%
rename from project_euler/pe/p047.html
rename to puzzles/project_euler/pe/p047.html
diff --git a/project_euler/pe/p048.html b/puzzles/project_euler/pe/p048.html
similarity index 100%
rename from project_euler/pe/p048.html
rename to puzzles/project_euler/pe/p048.html
diff --git a/project_euler/pe/p049.html b/puzzles/project_euler/pe/p049.html
similarity index 100%
rename from project_euler/pe/p049.html
rename to puzzles/project_euler/pe/p049.html
diff --git a/project_euler/pe/p050.html b/puzzles/project_euler/pe/p050.html
similarity index 100%
rename from project_euler/pe/p050.html
rename to puzzles/project_euler/pe/p050.html
diff --git a/project_euler/pe/p051.html b/puzzles/project_euler/pe/p051.html
similarity index 100%
rename from project_euler/pe/p051.html
rename to puzzles/project_euler/pe/p051.html
diff --git a/project_euler/pe/p052.html b/puzzles/project_euler/pe/p052.html
similarity index 100%
rename from project_euler/pe/p052.html
rename to puzzles/project_euler/pe/p052.html
diff --git a/project_euler/pe/p053.html b/puzzles/project_euler/pe/p053.html
similarity index 100%
rename from project_euler/pe/p053.html
rename to puzzles/project_euler/pe/p053.html
diff --git a/project_euler/pe/p054.html b/puzzles/project_euler/pe/p054.html
similarity index 100%
rename from project_euler/pe/p054.html
rename to puzzles/project_euler/pe/p054.html
diff --git a/project_euler/pe/p055.html b/puzzles/project_euler/pe/p055.html
similarity index 100%
rename from project_euler/pe/p055.html
rename to puzzles/project_euler/pe/p055.html
diff --git a/project_euler/pe/p056.html b/puzzles/project_euler/pe/p056.html
similarity index 100%
rename from project_euler/pe/p056.html
rename to puzzles/project_euler/pe/p056.html
diff --git a/project_euler/pe/p057.html b/puzzles/project_euler/pe/p057.html
similarity index 100%
rename from project_euler/pe/p057.html
rename to puzzles/project_euler/pe/p057.html
diff --git a/project_euler/pe/p058.html b/puzzles/project_euler/pe/p058.html
similarity index 100%
rename from project_euler/pe/p058.html
rename to puzzles/project_euler/pe/p058.html
diff --git a/project_euler/pe/p059.html b/puzzles/project_euler/pe/p059.html
similarity index 100%
rename from project_euler/pe/p059.html
rename to puzzles/project_euler/pe/p059.html
diff --git a/project_euler/pe/p060.html b/puzzles/project_euler/pe/p060.html
similarity index 100%
rename from project_euler/pe/p060.html
rename to puzzles/project_euler/pe/p060.html
diff --git a/project_euler/pe/p061.html b/puzzles/project_euler/pe/p061.html
similarity index 100%
rename from project_euler/pe/p061.html
rename to puzzles/project_euler/pe/p061.html
diff --git a/project_euler/pe/p062.html b/puzzles/project_euler/pe/p062.html
similarity index 100%
rename from project_euler/pe/p062.html
rename to puzzles/project_euler/pe/p062.html
diff --git a/project_euler/pe/p063.html b/puzzles/project_euler/pe/p063.html
similarity index 100%
rename from project_euler/pe/p063.html
rename to puzzles/project_euler/pe/p063.html
diff --git a/project_euler/pe/p064.html b/puzzles/project_euler/pe/p064.html
similarity index 100%
rename from project_euler/pe/p064.html
rename to puzzles/project_euler/pe/p064.html
diff --git a/project_euler/pe/p065.html b/puzzles/project_euler/pe/p065.html
similarity index 100%
rename from project_euler/pe/p065.html
rename to puzzles/project_euler/pe/p065.html
diff --git a/project_euler/pe/p066.html b/puzzles/project_euler/pe/p066.html
similarity index 100%
rename from project_euler/pe/p066.html
rename to puzzles/project_euler/pe/p066.html
diff --git a/project_euler/pe/p067.html b/puzzles/project_euler/pe/p067.html
similarity index 100%
rename from project_euler/pe/p067.html
rename to puzzles/project_euler/pe/p067.html
diff --git a/project_euler/pe/p068.html b/puzzles/project_euler/pe/p068.html
similarity index 100%
rename from project_euler/pe/p068.html
rename to puzzles/project_euler/pe/p068.html
diff --git a/project_euler/pe/p069.html b/puzzles/project_euler/pe/p069.html
similarity index 100%
rename from project_euler/pe/p069.html
rename to puzzles/project_euler/pe/p069.html
diff --git a/project_euler/pe/p070.html b/puzzles/project_euler/pe/p070.html
similarity index 100%
rename from project_euler/pe/p070.html
rename to puzzles/project_euler/pe/p070.html
diff --git a/project_euler/pe/p071.html b/puzzles/project_euler/pe/p071.html
similarity index 100%
rename from project_euler/pe/p071.html
rename to puzzles/project_euler/pe/p071.html
diff --git a/project_euler/pe/p072.html b/puzzles/project_euler/pe/p072.html
similarity index 100%
rename from project_euler/pe/p072.html
rename to puzzles/project_euler/pe/p072.html
diff --git a/project_euler/pe/p073.html b/puzzles/project_euler/pe/p073.html
similarity index 100%
rename from project_euler/pe/p073.html
rename to puzzles/project_euler/pe/p073.html
diff --git a/project_euler/pe/p074.html b/puzzles/project_euler/pe/p074.html
similarity index 100%
rename from project_euler/pe/p074.html
rename to puzzles/project_euler/pe/p074.html
diff --git a/project_euler/pe/p075.html b/puzzles/project_euler/pe/p075.html
similarity index 100%
rename from project_euler/pe/p075.html
rename to puzzles/project_euler/pe/p075.html
diff --git a/project_euler/pe/p076.html b/puzzles/project_euler/pe/p076.html
similarity index 100%
rename from project_euler/pe/p076.html
rename to puzzles/project_euler/pe/p076.html
diff --git a/project_euler/pe/p077.html b/puzzles/project_euler/pe/p077.html
similarity index 100%
rename from project_euler/pe/p077.html
rename to puzzles/project_euler/pe/p077.html
diff --git a/project_euler/pe/p078.html b/puzzles/project_euler/pe/p078.html
similarity index 100%
rename from project_euler/pe/p078.html
rename to puzzles/project_euler/pe/p078.html
diff --git a/project_euler/pe/p079.html b/puzzles/project_euler/pe/p079.html
similarity index 100%
rename from project_euler/pe/p079.html
rename to puzzles/project_euler/pe/p079.html
diff --git a/project_euler/pe/p080.html b/puzzles/project_euler/pe/p080.html
similarity index 100%
rename from project_euler/pe/p080.html
rename to puzzles/project_euler/pe/p080.html
diff --git a/project_euler/pe/p081.html b/puzzles/project_euler/pe/p081.html
similarity index 100%
rename from project_euler/pe/p081.html
rename to puzzles/project_euler/pe/p081.html
diff --git a/project_euler/pe/p082.html b/puzzles/project_euler/pe/p082.html
similarity index 100%
rename from project_euler/pe/p082.html
rename to puzzles/project_euler/pe/p082.html
diff --git a/project_euler/pe/p083.html b/puzzles/project_euler/pe/p083.html
similarity index 100%
rename from project_euler/pe/p083.html
rename to puzzles/project_euler/pe/p083.html
diff --git a/project_euler/pe/p084.html b/puzzles/project_euler/pe/p084.html
similarity index 100%
rename from project_euler/pe/p084.html
rename to puzzles/project_euler/pe/p084.html
diff --git a/project_euler/pe/p085.html b/puzzles/project_euler/pe/p085.html
similarity index 100%
rename from project_euler/pe/p085.html
rename to puzzles/project_euler/pe/p085.html
diff --git a/project_euler/pe/p086.html b/puzzles/project_euler/pe/p086.html
similarity index 100%
rename from project_euler/pe/p086.html
rename to puzzles/project_euler/pe/p086.html
diff --git a/project_euler/pe/p087.html b/puzzles/project_euler/pe/p087.html
similarity index 100%
rename from project_euler/pe/p087.html
rename to puzzles/project_euler/pe/p087.html
diff --git a/project_euler/pe/p088.html b/puzzles/project_euler/pe/p088.html
similarity index 100%
rename from project_euler/pe/p088.html
rename to puzzles/project_euler/pe/p088.html
diff --git a/project_euler/pe/p089.html b/puzzles/project_euler/pe/p089.html
similarity index 100%
rename from project_euler/pe/p089.html
rename to puzzles/project_euler/pe/p089.html
diff --git a/project_euler/pe/p090.html b/puzzles/project_euler/pe/p090.html
similarity index 100%
rename from project_euler/pe/p090.html
rename to puzzles/project_euler/pe/p090.html
diff --git a/project_euler/pe/p091.html b/puzzles/project_euler/pe/p091.html
similarity index 100%
rename from project_euler/pe/p091.html
rename to puzzles/project_euler/pe/p091.html
diff --git a/project_euler/pe/p092.html b/puzzles/project_euler/pe/p092.html
similarity index 100%
rename from project_euler/pe/p092.html
rename to puzzles/project_euler/pe/p092.html
diff --git a/project_euler/pe/p093.html b/puzzles/project_euler/pe/p093.html
similarity index 100%
rename from project_euler/pe/p093.html
rename to puzzles/project_euler/pe/p093.html
diff --git a/project_euler/pe/p094.html b/puzzles/project_euler/pe/p094.html
similarity index 100%
rename from project_euler/pe/p094.html
rename to puzzles/project_euler/pe/p094.html
diff --git a/project_euler/pe/p095.html b/puzzles/project_euler/pe/p095.html
similarity index 100%
rename from project_euler/pe/p095.html
rename to puzzles/project_euler/pe/p095.html
diff --git a/project_euler/pe/p096.html b/puzzles/project_euler/pe/p096.html
similarity index 100%
rename from project_euler/pe/p096.html
rename to puzzles/project_euler/pe/p096.html
diff --git a/project_euler/pe/p097.html b/puzzles/project_euler/pe/p097.html
similarity index 100%
rename from project_euler/pe/p097.html
rename to puzzles/project_euler/pe/p097.html
diff --git a/project_euler/pe/p098.html b/puzzles/project_euler/pe/p098.html
similarity index 100%
rename from project_euler/pe/p098.html
rename to puzzles/project_euler/pe/p098.html
diff --git a/project_euler/pe/p099.html b/puzzles/project_euler/pe/p099.html
similarity index 100%
rename from project_euler/pe/p099.html
rename to puzzles/project_euler/pe/p099.html
diff --git a/project_euler/pe/p100.html b/puzzles/project_euler/pe/p100.html
similarity index 100%
rename from project_euler/pe/p100.html
rename to puzzles/project_euler/pe/p100.html
diff --git a/project_euler/pe/p101.html b/puzzles/project_euler/pe/p101.html
similarity index 100%
rename from project_euler/pe/p101.html
rename to puzzles/project_euler/pe/p101.html
diff --git a/project_euler/pe/p102.html b/puzzles/project_euler/pe/p102.html
similarity index 100%
rename from project_euler/pe/p102.html
rename to puzzles/project_euler/pe/p102.html
diff --git a/project_euler/pe/p103.html b/puzzles/project_euler/pe/p103.html
similarity index 100%
rename from project_euler/pe/p103.html
rename to puzzles/project_euler/pe/p103.html
diff --git a/project_euler/pe/p104.html b/puzzles/project_euler/pe/p104.html
similarity index 100%
rename from project_euler/pe/p104.html
rename to puzzles/project_euler/pe/p104.html
diff --git a/project_euler/pe/p105.html b/puzzles/project_euler/pe/p105.html
similarity index 100%
rename from project_euler/pe/p105.html
rename to puzzles/project_euler/pe/p105.html
diff --git a/project_euler/pe/p106.html b/puzzles/project_euler/pe/p106.html
similarity index 100%
rename from project_euler/pe/p106.html
rename to puzzles/project_euler/pe/p106.html
diff --git a/project_euler/pe/p107.html b/puzzles/project_euler/pe/p107.html
similarity index 100%
rename from project_euler/pe/p107.html
rename to puzzles/project_euler/pe/p107.html
diff --git a/project_euler/pe/p108.html b/puzzles/project_euler/pe/p108.html
similarity index 100%
rename from project_euler/pe/p108.html
rename to puzzles/project_euler/pe/p108.html
diff --git a/project_euler/pe/p109.html b/puzzles/project_euler/pe/p109.html
similarity index 100%
rename from project_euler/pe/p109.html
rename to puzzles/project_euler/pe/p109.html
diff --git a/project_euler/pe/p110.html b/puzzles/project_euler/pe/p110.html
similarity index 100%
rename from project_euler/pe/p110.html
rename to puzzles/project_euler/pe/p110.html
diff --git a/project_euler/pe/p111.html b/puzzles/project_euler/pe/p111.html
similarity index 100%
rename from project_euler/pe/p111.html
rename to puzzles/project_euler/pe/p111.html
diff --git a/project_euler/pe/p112.html b/puzzles/project_euler/pe/p112.html
similarity index 100%
rename from project_euler/pe/p112.html
rename to puzzles/project_euler/pe/p112.html
diff --git a/project_euler/pe/p113.html b/puzzles/project_euler/pe/p113.html
similarity index 100%
rename from project_euler/pe/p113.html
rename to puzzles/project_euler/pe/p113.html
diff --git a/project_euler/pe/p114.html b/puzzles/project_euler/pe/p114.html
similarity index 100%
rename from project_euler/pe/p114.html
rename to puzzles/project_euler/pe/p114.html
diff --git a/project_euler/pe/p115.html b/puzzles/project_euler/pe/p115.html
similarity index 100%
rename from project_euler/pe/p115.html
rename to puzzles/project_euler/pe/p115.html
diff --git a/project_euler/pe/p116.html b/puzzles/project_euler/pe/p116.html
similarity index 100%
rename from project_euler/pe/p116.html
rename to puzzles/project_euler/pe/p116.html
diff --git a/project_euler/pe/p117.html b/puzzles/project_euler/pe/p117.html
similarity index 100%
rename from project_euler/pe/p117.html
rename to puzzles/project_euler/pe/p117.html
diff --git a/project_euler/pe/p118.html b/puzzles/project_euler/pe/p118.html
similarity index 100%
rename from project_euler/pe/p118.html
rename to puzzles/project_euler/pe/p118.html
diff --git a/project_euler/pe/p119.html b/puzzles/project_euler/pe/p119.html
similarity index 100%
rename from project_euler/pe/p119.html
rename to puzzles/project_euler/pe/p119.html
diff --git a/project_euler/pe/p120.html b/puzzles/project_euler/pe/p120.html
similarity index 100%
rename from project_euler/pe/p120.html
rename to puzzles/project_euler/pe/p120.html
diff --git a/project_euler/pe/p121.html b/puzzles/project_euler/pe/p121.html
similarity index 100%
rename from project_euler/pe/p121.html
rename to puzzles/project_euler/pe/p121.html
diff --git a/project_euler/pe/p122.html b/puzzles/project_euler/pe/p122.html
similarity index 100%
rename from project_euler/pe/p122.html
rename to puzzles/project_euler/pe/p122.html
diff --git a/project_euler/pe/p123.html b/puzzles/project_euler/pe/p123.html
similarity index 100%
rename from project_euler/pe/p123.html
rename to puzzles/project_euler/pe/p123.html
diff --git a/project_euler/pe/p124.html b/puzzles/project_euler/pe/p124.html
similarity index 100%
rename from project_euler/pe/p124.html
rename to puzzles/project_euler/pe/p124.html
diff --git a/project_euler/pe/p125.html b/puzzles/project_euler/pe/p125.html
similarity index 100%
rename from project_euler/pe/p125.html
rename to puzzles/project_euler/pe/p125.html
diff --git a/project_euler/pe/p126.html b/puzzles/project_euler/pe/p126.html
similarity index 100%
rename from project_euler/pe/p126.html
rename to puzzles/project_euler/pe/p126.html
diff --git a/project_euler/pe/p127.html b/puzzles/project_euler/pe/p127.html
similarity index 100%
rename from project_euler/pe/p127.html
rename to puzzles/project_euler/pe/p127.html
diff --git a/project_euler/pe/p128.html b/puzzles/project_euler/pe/p128.html
similarity index 100%
rename from project_euler/pe/p128.html
rename to puzzles/project_euler/pe/p128.html
diff --git a/project_euler/pe/p129.html b/puzzles/project_euler/pe/p129.html
similarity index 100%
rename from project_euler/pe/p129.html
rename to puzzles/project_euler/pe/p129.html
diff --git a/project_euler/pe/p130.html b/puzzles/project_euler/pe/p130.html
similarity index 100%
rename from project_euler/pe/p130.html
rename to puzzles/project_euler/pe/p130.html
diff --git a/project_euler/pe/p131.html b/puzzles/project_euler/pe/p131.html
similarity index 100%
rename from project_euler/pe/p131.html
rename to puzzles/project_euler/pe/p131.html
diff --git a/project_euler/pe/p132.html b/puzzles/project_euler/pe/p132.html
similarity index 100%
rename from project_euler/pe/p132.html
rename to puzzles/project_euler/pe/p132.html
diff --git a/project_euler/pe/p133.html b/puzzles/project_euler/pe/p133.html
similarity index 100%
rename from project_euler/pe/p133.html
rename to puzzles/project_euler/pe/p133.html
diff --git a/project_euler/pe/p134.html b/puzzles/project_euler/pe/p134.html
similarity index 100%
rename from project_euler/pe/p134.html
rename to puzzles/project_euler/pe/p134.html
diff --git a/project_euler/pe/p135.html b/puzzles/project_euler/pe/p135.html
similarity index 100%
rename from project_euler/pe/p135.html
rename to puzzles/project_euler/pe/p135.html
diff --git a/project_euler/pe/p136.html b/puzzles/project_euler/pe/p136.html
similarity index 100%
rename from project_euler/pe/p136.html
rename to puzzles/project_euler/pe/p136.html
diff --git a/project_euler/pe/p137.html b/puzzles/project_euler/pe/p137.html
similarity index 100%
rename from project_euler/pe/p137.html
rename to puzzles/project_euler/pe/p137.html
diff --git a/project_euler/pe/p138.html b/puzzles/project_euler/pe/p138.html
similarity index 100%
rename from project_euler/pe/p138.html
rename to puzzles/project_euler/pe/p138.html
diff --git a/project_euler/pe/p139.html b/puzzles/project_euler/pe/p139.html
similarity index 100%
rename from project_euler/pe/p139.html
rename to puzzles/project_euler/pe/p139.html
diff --git a/project_euler/pe/p140.html b/puzzles/project_euler/pe/p140.html
similarity index 100%
rename from project_euler/pe/p140.html
rename to puzzles/project_euler/pe/p140.html
diff --git a/project_euler/pe/p141.html b/puzzles/project_euler/pe/p141.html
similarity index 100%
rename from project_euler/pe/p141.html
rename to puzzles/project_euler/pe/p141.html
diff --git a/project_euler/pe/p142.html b/puzzles/project_euler/pe/p142.html
similarity index 100%
rename from project_euler/pe/p142.html
rename to puzzles/project_euler/pe/p142.html
diff --git a/project_euler/pe/p143.html b/puzzles/project_euler/pe/p143.html
similarity index 100%
rename from project_euler/pe/p143.html
rename to puzzles/project_euler/pe/p143.html
diff --git a/project_euler/pe/p144.html b/puzzles/project_euler/pe/p144.html
similarity index 100%
rename from project_euler/pe/p144.html
rename to puzzles/project_euler/pe/p144.html
diff --git a/project_euler/pe/p145.html b/puzzles/project_euler/pe/p145.html
similarity index 100%
rename from project_euler/pe/p145.html
rename to puzzles/project_euler/pe/p145.html
diff --git a/project_euler/pe/p146.html b/puzzles/project_euler/pe/p146.html
similarity index 100%
rename from project_euler/pe/p146.html
rename to puzzles/project_euler/pe/p146.html
diff --git a/project_euler/pe/p147.html b/puzzles/project_euler/pe/p147.html
similarity index 100%
rename from project_euler/pe/p147.html
rename to puzzles/project_euler/pe/p147.html
diff --git a/project_euler/pe/p148.html b/puzzles/project_euler/pe/p148.html
similarity index 100%
rename from project_euler/pe/p148.html
rename to puzzles/project_euler/pe/p148.html
diff --git a/project_euler/pe/p149.html b/puzzles/project_euler/pe/p149.html
similarity index 100%
rename from project_euler/pe/p149.html
rename to puzzles/project_euler/pe/p149.html
diff --git a/project_euler/pe/p150.html b/puzzles/project_euler/pe/p150.html
similarity index 100%
rename from project_euler/pe/p150.html
rename to puzzles/project_euler/pe/p150.html
diff --git a/project_euler/pe/p151.html b/puzzles/project_euler/pe/p151.html
similarity index 100%
rename from project_euler/pe/p151.html
rename to puzzles/project_euler/pe/p151.html
diff --git a/project_euler/pe/p152.html b/puzzles/project_euler/pe/p152.html
similarity index 100%
rename from project_euler/pe/p152.html
rename to puzzles/project_euler/pe/p152.html
diff --git a/project_euler/pe/p153.html b/puzzles/project_euler/pe/p153.html
similarity index 100%
rename from project_euler/pe/p153.html
rename to puzzles/project_euler/pe/p153.html
diff --git a/project_euler/pe/p154.html b/puzzles/project_euler/pe/p154.html
similarity index 100%
rename from project_euler/pe/p154.html
rename to puzzles/project_euler/pe/p154.html
diff --git a/project_euler/pe/p155.html b/puzzles/project_euler/pe/p155.html
similarity index 100%
rename from project_euler/pe/p155.html
rename to puzzles/project_euler/pe/p155.html
diff --git a/project_euler/pe/p156.html b/puzzles/project_euler/pe/p156.html
similarity index 100%
rename from project_euler/pe/p156.html
rename to puzzles/project_euler/pe/p156.html
diff --git a/project_euler/pe/p157.html b/puzzles/project_euler/pe/p157.html
similarity index 100%
rename from project_euler/pe/p157.html
rename to puzzles/project_euler/pe/p157.html
diff --git a/project_euler/pe/p158.html b/puzzles/project_euler/pe/p158.html
similarity index 100%
rename from project_euler/pe/p158.html
rename to puzzles/project_euler/pe/p158.html
diff --git a/project_euler/pe/p159.html b/puzzles/project_euler/pe/p159.html
similarity index 100%
rename from project_euler/pe/p159.html
rename to puzzles/project_euler/pe/p159.html
diff --git a/project_euler/pe/p160.html b/puzzles/project_euler/pe/p160.html
similarity index 100%
rename from project_euler/pe/p160.html
rename to puzzles/project_euler/pe/p160.html
diff --git a/project_euler/pe/p161.html b/puzzles/project_euler/pe/p161.html
similarity index 100%
rename from project_euler/pe/p161.html
rename to puzzles/project_euler/pe/p161.html
diff --git a/project_euler/pe/p162.html b/puzzles/project_euler/pe/p162.html
similarity index 100%
rename from project_euler/pe/p162.html
rename to puzzles/project_euler/pe/p162.html
diff --git a/project_euler/pe/p163.html b/puzzles/project_euler/pe/p163.html
similarity index 100%
rename from project_euler/pe/p163.html
rename to puzzles/project_euler/pe/p163.html
diff --git a/project_euler/pe/p164.html b/puzzles/project_euler/pe/p164.html
similarity index 100%
rename from project_euler/pe/p164.html
rename to puzzles/project_euler/pe/p164.html
diff --git a/project_euler/pe/p165.html b/puzzles/project_euler/pe/p165.html
similarity index 100%
rename from project_euler/pe/p165.html
rename to puzzles/project_euler/pe/p165.html
diff --git a/project_euler/pe/p166.html b/puzzles/project_euler/pe/p166.html
similarity index 100%
rename from project_euler/pe/p166.html
rename to puzzles/project_euler/pe/p166.html
diff --git a/project_euler/pe/p167.html b/puzzles/project_euler/pe/p167.html
similarity index 100%
rename from project_euler/pe/p167.html
rename to puzzles/project_euler/pe/p167.html
diff --git a/project_euler/pe/p168.html b/puzzles/project_euler/pe/p168.html
similarity index 100%
rename from project_euler/pe/p168.html
rename to puzzles/project_euler/pe/p168.html
diff --git a/project_euler/pe/p169.html b/puzzles/project_euler/pe/p169.html
similarity index 100%
rename from project_euler/pe/p169.html
rename to puzzles/project_euler/pe/p169.html
diff --git a/project_euler/pe/p170.html b/puzzles/project_euler/pe/p170.html
similarity index 100%
rename from project_euler/pe/p170.html
rename to puzzles/project_euler/pe/p170.html
diff --git a/project_euler/pe/p171.html b/puzzles/project_euler/pe/p171.html
similarity index 100%
rename from project_euler/pe/p171.html
rename to puzzles/project_euler/pe/p171.html
diff --git a/project_euler/pe/p172.html b/puzzles/project_euler/pe/p172.html
similarity index 100%
rename from project_euler/pe/p172.html
rename to puzzles/project_euler/pe/p172.html
diff --git a/project_euler/pe/p173.html b/puzzles/project_euler/pe/p173.html
similarity index 100%
rename from project_euler/pe/p173.html
rename to puzzles/project_euler/pe/p173.html
diff --git a/project_euler/pe/p174.html b/puzzles/project_euler/pe/p174.html
similarity index 100%
rename from project_euler/pe/p174.html
rename to puzzles/project_euler/pe/p174.html
diff --git a/project_euler/pe/p175.html b/puzzles/project_euler/pe/p175.html
similarity index 100%
rename from project_euler/pe/p175.html
rename to puzzles/project_euler/pe/p175.html
diff --git a/project_euler/pe/p176.html b/puzzles/project_euler/pe/p176.html
similarity index 100%
rename from project_euler/pe/p176.html
rename to puzzles/project_euler/pe/p176.html
diff --git a/project_euler/pe/p177.html b/puzzles/project_euler/pe/p177.html
similarity index 100%
rename from project_euler/pe/p177.html
rename to puzzles/project_euler/pe/p177.html
diff --git a/project_euler/pe/p178.html b/puzzles/project_euler/pe/p178.html
similarity index 100%
rename from project_euler/pe/p178.html
rename to puzzles/project_euler/pe/p178.html
diff --git a/project_euler/pe/p179.html b/puzzles/project_euler/pe/p179.html
similarity index 100%
rename from project_euler/pe/p179.html
rename to puzzles/project_euler/pe/p179.html
diff --git a/project_euler/pe/p180.html b/puzzles/project_euler/pe/p180.html
similarity index 100%
rename from project_euler/pe/p180.html
rename to puzzles/project_euler/pe/p180.html
diff --git a/project_euler/pe/p181.html b/puzzles/project_euler/pe/p181.html
similarity index 100%
rename from project_euler/pe/p181.html
rename to puzzles/project_euler/pe/p181.html
diff --git a/project_euler/pe/p182.html b/puzzles/project_euler/pe/p182.html
similarity index 100%
rename from project_euler/pe/p182.html
rename to puzzles/project_euler/pe/p182.html
diff --git a/project_euler/pe/p183.html b/puzzles/project_euler/pe/p183.html
similarity index 100%
rename from project_euler/pe/p183.html
rename to puzzles/project_euler/pe/p183.html
diff --git a/project_euler/pe/p184.html b/puzzles/project_euler/pe/p184.html
similarity index 100%
rename from project_euler/pe/p184.html
rename to puzzles/project_euler/pe/p184.html
diff --git a/project_euler/pe/p185.html b/puzzles/project_euler/pe/p185.html
similarity index 100%
rename from project_euler/pe/p185.html
rename to puzzles/project_euler/pe/p185.html
diff --git a/project_euler/pe/p186.html b/puzzles/project_euler/pe/p186.html
similarity index 100%
rename from project_euler/pe/p186.html
rename to puzzles/project_euler/pe/p186.html
diff --git a/project_euler/pe/p187.html b/puzzles/project_euler/pe/p187.html
similarity index 100%
rename from project_euler/pe/p187.html
rename to puzzles/project_euler/pe/p187.html
diff --git a/project_euler/pe/p188.html b/puzzles/project_euler/pe/p188.html
similarity index 100%
rename from project_euler/pe/p188.html
rename to puzzles/project_euler/pe/p188.html
diff --git a/project_euler/pe/p189.html b/puzzles/project_euler/pe/p189.html
similarity index 100%
rename from project_euler/pe/p189.html
rename to puzzles/project_euler/pe/p189.html
diff --git a/project_euler/pe/p190.html b/puzzles/project_euler/pe/p190.html
similarity index 100%
rename from project_euler/pe/p190.html
rename to puzzles/project_euler/pe/p190.html
diff --git a/project_euler/pe/p191.html b/puzzles/project_euler/pe/p191.html
similarity index 100%
rename from project_euler/pe/p191.html
rename to puzzles/project_euler/pe/p191.html
diff --git a/project_euler/pe/p192.html b/puzzles/project_euler/pe/p192.html
similarity index 100%
rename from project_euler/pe/p192.html
rename to puzzles/project_euler/pe/p192.html
diff --git a/project_euler/pe/p193.html b/puzzles/project_euler/pe/p193.html
similarity index 100%
rename from project_euler/pe/p193.html
rename to puzzles/project_euler/pe/p193.html
diff --git a/project_euler/pe/p194.html b/puzzles/project_euler/pe/p194.html
similarity index 100%
rename from project_euler/pe/p194.html
rename to puzzles/project_euler/pe/p194.html
diff --git a/project_euler/pe/p195.html b/puzzles/project_euler/pe/p195.html
similarity index 100%
rename from project_euler/pe/p195.html
rename to puzzles/project_euler/pe/p195.html
diff --git a/project_euler/pe/p196.html b/puzzles/project_euler/pe/p196.html
similarity index 100%
rename from project_euler/pe/p196.html
rename to puzzles/project_euler/pe/p196.html
diff --git a/project_euler/pe/p197.html b/puzzles/project_euler/pe/p197.html
similarity index 100%
rename from project_euler/pe/p197.html
rename to puzzles/project_euler/pe/p197.html
diff --git a/project_euler/pe/p198.html b/puzzles/project_euler/pe/p198.html
similarity index 100%
rename from project_euler/pe/p198.html
rename to puzzles/project_euler/pe/p198.html
diff --git a/project_euler/pe/p199.html b/puzzles/project_euler/pe/p199.html
similarity index 100%
rename from project_euler/pe/p199.html
rename to puzzles/project_euler/pe/p199.html
diff --git a/project_euler/pe/p200.html b/puzzles/project_euler/pe/p200.html
similarity index 100%
rename from project_euler/pe/p200.html
rename to puzzles/project_euler/pe/p200.html
diff --git a/project_euler/pe/p201.html b/puzzles/project_euler/pe/p201.html
similarity index 100%
rename from project_euler/pe/p201.html
rename to puzzles/project_euler/pe/p201.html
diff --git a/project_euler/pe/p202.html b/puzzles/project_euler/pe/p202.html
similarity index 100%
rename from project_euler/pe/p202.html
rename to puzzles/project_euler/pe/p202.html
diff --git a/project_euler/pe/p203.html b/puzzles/project_euler/pe/p203.html
similarity index 100%
rename from project_euler/pe/p203.html
rename to puzzles/project_euler/pe/p203.html
diff --git a/project_euler/pe/p204.html b/puzzles/project_euler/pe/p204.html
similarity index 100%
rename from project_euler/pe/p204.html
rename to puzzles/project_euler/pe/p204.html
diff --git a/project_euler/pe/p205.html b/puzzles/project_euler/pe/p205.html
similarity index 100%
rename from project_euler/pe/p205.html
rename to puzzles/project_euler/pe/p205.html
diff --git a/project_euler/pe/p206.html b/puzzles/project_euler/pe/p206.html
similarity index 100%
rename from project_euler/pe/p206.html
rename to puzzles/project_euler/pe/p206.html
diff --git a/project_euler/pe/p207.html b/puzzles/project_euler/pe/p207.html
similarity index 100%
rename from project_euler/pe/p207.html
rename to puzzles/project_euler/pe/p207.html
diff --git a/project_euler/pe/p208.html b/puzzles/project_euler/pe/p208.html
similarity index 100%
rename from project_euler/pe/p208.html
rename to puzzles/project_euler/pe/p208.html
diff --git a/project_euler/pe/p209.html b/puzzles/project_euler/pe/p209.html
similarity index 100%
rename from project_euler/pe/p209.html
rename to puzzles/project_euler/pe/p209.html
diff --git a/project_euler/pe/p210.html b/puzzles/project_euler/pe/p210.html
similarity index 100%
rename from project_euler/pe/p210.html
rename to puzzles/project_euler/pe/p210.html
diff --git a/project_euler/pe/p211.html b/puzzles/project_euler/pe/p211.html
similarity index 100%
rename from project_euler/pe/p211.html
rename to puzzles/project_euler/pe/p211.html
diff --git a/project_euler/pe/p212.html b/puzzles/project_euler/pe/p212.html
similarity index 100%
rename from project_euler/pe/p212.html
rename to puzzles/project_euler/pe/p212.html
diff --git a/project_euler/pe/p213.html b/puzzles/project_euler/pe/p213.html
similarity index 100%
rename from project_euler/pe/p213.html
rename to puzzles/project_euler/pe/p213.html
diff --git a/project_euler/pe/p214.html b/puzzles/project_euler/pe/p214.html
similarity index 100%
rename from project_euler/pe/p214.html
rename to puzzles/project_euler/pe/p214.html
diff --git a/project_euler/pe/p215.html b/puzzles/project_euler/pe/p215.html
similarity index 100%
rename from project_euler/pe/p215.html
rename to puzzles/project_euler/pe/p215.html
diff --git a/project_euler/pe/p216.html b/puzzles/project_euler/pe/p216.html
similarity index 100%
rename from project_euler/pe/p216.html
rename to puzzles/project_euler/pe/p216.html
diff --git a/project_euler/pe/p217.html b/puzzles/project_euler/pe/p217.html
similarity index 100%
rename from project_euler/pe/p217.html
rename to puzzles/project_euler/pe/p217.html
diff --git a/project_euler/pe/p218.html b/puzzles/project_euler/pe/p218.html
similarity index 100%
rename from project_euler/pe/p218.html
rename to puzzles/project_euler/pe/p218.html
diff --git a/project_euler/pe/p219.html b/puzzles/project_euler/pe/p219.html
similarity index 100%
rename from project_euler/pe/p219.html
rename to puzzles/project_euler/pe/p219.html
diff --git a/project_euler/pe/p220.html b/puzzles/project_euler/pe/p220.html
similarity index 100%
rename from project_euler/pe/p220.html
rename to puzzles/project_euler/pe/p220.html
diff --git a/project_euler/pe/p221.html b/puzzles/project_euler/pe/p221.html
similarity index 100%
rename from project_euler/pe/p221.html
rename to puzzles/project_euler/pe/p221.html
diff --git a/project_euler/pe/p222.html b/puzzles/project_euler/pe/p222.html
similarity index 100%
rename from project_euler/pe/p222.html
rename to puzzles/project_euler/pe/p222.html
diff --git a/project_euler/pe/p223.html b/puzzles/project_euler/pe/p223.html
similarity index 100%
rename from project_euler/pe/p223.html
rename to puzzles/project_euler/pe/p223.html
diff --git a/project_euler/pe/p224.html b/puzzles/project_euler/pe/p224.html
similarity index 100%
rename from project_euler/pe/p224.html
rename to puzzles/project_euler/pe/p224.html
diff --git a/project_euler/pe/p225.html b/puzzles/project_euler/pe/p225.html
similarity index 100%
rename from project_euler/pe/p225.html
rename to puzzles/project_euler/pe/p225.html
diff --git a/project_euler/pe/p226.html b/puzzles/project_euler/pe/p226.html
similarity index 100%
rename from project_euler/pe/p226.html
rename to puzzles/project_euler/pe/p226.html
diff --git a/project_euler/pe/p227.html b/puzzles/project_euler/pe/p227.html
similarity index 100%
rename from project_euler/pe/p227.html
rename to puzzles/project_euler/pe/p227.html
diff --git a/project_euler/pe/p228.html b/puzzles/project_euler/pe/p228.html
similarity index 100%
rename from project_euler/pe/p228.html
rename to puzzles/project_euler/pe/p228.html
diff --git a/project_euler/pe/p229.html b/puzzles/project_euler/pe/p229.html
similarity index 100%
rename from project_euler/pe/p229.html
rename to puzzles/project_euler/pe/p229.html
diff --git a/project_euler/pe/p230.html b/puzzles/project_euler/pe/p230.html
similarity index 100%
rename from project_euler/pe/p230.html
rename to puzzles/project_euler/pe/p230.html
diff --git a/project_euler/pe/p231.html b/puzzles/project_euler/pe/p231.html
similarity index 100%
rename from project_euler/pe/p231.html
rename to puzzles/project_euler/pe/p231.html
diff --git a/project_euler/pe/p232.html b/puzzles/project_euler/pe/p232.html
similarity index 100%
rename from project_euler/pe/p232.html
rename to puzzles/project_euler/pe/p232.html
diff --git a/project_euler/pe/p233.html b/puzzles/project_euler/pe/p233.html
similarity index 100%
rename from project_euler/pe/p233.html
rename to puzzles/project_euler/pe/p233.html
diff --git a/project_euler/pe/p234.html b/puzzles/project_euler/pe/p234.html
similarity index 100%
rename from project_euler/pe/p234.html
rename to puzzles/project_euler/pe/p234.html
diff --git a/project_euler/pe/p235.html b/puzzles/project_euler/pe/p235.html
similarity index 100%
rename from project_euler/pe/p235.html
rename to puzzles/project_euler/pe/p235.html
diff --git a/project_euler/pe/p236.html b/puzzles/project_euler/pe/p236.html
similarity index 100%
rename from project_euler/pe/p236.html
rename to puzzles/project_euler/pe/p236.html
diff --git a/project_euler/pe/p237.html b/puzzles/project_euler/pe/p237.html
similarity index 100%
rename from project_euler/pe/p237.html
rename to puzzles/project_euler/pe/p237.html
diff --git a/project_euler/pe/p238.html b/puzzles/project_euler/pe/p238.html
similarity index 100%
rename from project_euler/pe/p238.html
rename to puzzles/project_euler/pe/p238.html
diff --git a/project_euler/pe/p239.html b/puzzles/project_euler/pe/p239.html
similarity index 100%
rename from project_euler/pe/p239.html
rename to puzzles/project_euler/pe/p239.html
diff --git a/project_euler/pe/p240.html b/puzzles/project_euler/pe/p240.html
similarity index 100%
rename from project_euler/pe/p240.html
rename to puzzles/project_euler/pe/p240.html
diff --git a/project_euler/pe/p241.html b/puzzles/project_euler/pe/p241.html
similarity index 100%
rename from project_euler/pe/p241.html
rename to puzzles/project_euler/pe/p241.html
diff --git a/project_euler/pe/p242.html b/puzzles/project_euler/pe/p242.html
similarity index 100%
rename from project_euler/pe/p242.html
rename to puzzles/project_euler/pe/p242.html
diff --git a/project_euler/pe/p243.html b/puzzles/project_euler/pe/p243.html
similarity index 100%
rename from project_euler/pe/p243.html
rename to puzzles/project_euler/pe/p243.html
diff --git a/project_euler/pe/p244.html b/puzzles/project_euler/pe/p244.html
similarity index 100%
rename from project_euler/pe/p244.html
rename to puzzles/project_euler/pe/p244.html
diff --git a/project_euler/pe/p245.html b/puzzles/project_euler/pe/p245.html
similarity index 100%
rename from project_euler/pe/p245.html
rename to puzzles/project_euler/pe/p245.html
diff --git a/project_euler/pe/p246.html b/puzzles/project_euler/pe/p246.html
similarity index 100%
rename from project_euler/pe/p246.html
rename to puzzles/project_euler/pe/p246.html
diff --git a/project_euler/pe/p247.html b/puzzles/project_euler/pe/p247.html
similarity index 100%
rename from project_euler/pe/p247.html
rename to puzzles/project_euler/pe/p247.html
diff --git a/project_euler/pe/p248.html b/puzzles/project_euler/pe/p248.html
similarity index 100%
rename from project_euler/pe/p248.html
rename to puzzles/project_euler/pe/p248.html
diff --git a/project_euler/pe/p249.html b/puzzles/project_euler/pe/p249.html
similarity index 100%
rename from project_euler/pe/p249.html
rename to puzzles/project_euler/pe/p249.html
diff --git a/project_euler/pe/p250.html b/puzzles/project_euler/pe/p250.html
similarity index 100%
rename from project_euler/pe/p250.html
rename to puzzles/project_euler/pe/p250.html
diff --git a/project_euler/pe/p251.html b/puzzles/project_euler/pe/p251.html
similarity index 100%
rename from project_euler/pe/p251.html
rename to puzzles/project_euler/pe/p251.html
diff --git a/project_euler/pe/p252.html b/puzzles/project_euler/pe/p252.html
similarity index 100%
rename from project_euler/pe/p252.html
rename to puzzles/project_euler/pe/p252.html
diff --git a/project_euler/pe/p253.html b/puzzles/project_euler/pe/p253.html
similarity index 100%
rename from project_euler/pe/p253.html
rename to puzzles/project_euler/pe/p253.html
diff --git a/project_euler/pe/p254.html b/puzzles/project_euler/pe/p254.html
similarity index 100%
rename from project_euler/pe/p254.html
rename to puzzles/project_euler/pe/p254.html
diff --git a/project_euler/pe/p255.html b/puzzles/project_euler/pe/p255.html
similarity index 100%
rename from project_euler/pe/p255.html
rename to puzzles/project_euler/pe/p255.html
diff --git a/project_euler/pe/p256.html b/puzzles/project_euler/pe/p256.html
similarity index 100%
rename from project_euler/pe/p256.html
rename to puzzles/project_euler/pe/p256.html
diff --git a/project_euler/pe/p257.html b/puzzles/project_euler/pe/p257.html
similarity index 100%
rename from project_euler/pe/p257.html
rename to puzzles/project_euler/pe/p257.html
diff --git a/project_euler/pe/p258.html b/puzzles/project_euler/pe/p258.html
similarity index 100%
rename from project_euler/pe/p258.html
rename to puzzles/project_euler/pe/p258.html
diff --git a/project_euler/pe/p259.html b/puzzles/project_euler/pe/p259.html
similarity index 100%
rename from project_euler/pe/p259.html
rename to puzzles/project_euler/pe/p259.html
diff --git a/project_euler/pe/p260.html b/puzzles/project_euler/pe/p260.html
similarity index 100%
rename from project_euler/pe/p260.html
rename to puzzles/project_euler/pe/p260.html
diff --git a/project_euler/pe/p261.html b/puzzles/project_euler/pe/p261.html
similarity index 100%
rename from project_euler/pe/p261.html
rename to puzzles/project_euler/pe/p261.html
diff --git a/project_euler/pe/p262.html b/puzzles/project_euler/pe/p262.html
similarity index 100%
rename from project_euler/pe/p262.html
rename to puzzles/project_euler/pe/p262.html
diff --git a/project_euler/pe/p263.html b/puzzles/project_euler/pe/p263.html
similarity index 100%
rename from project_euler/pe/p263.html
rename to puzzles/project_euler/pe/p263.html
diff --git a/project_euler/pe/p264.html b/puzzles/project_euler/pe/p264.html
similarity index 100%
rename from project_euler/pe/p264.html
rename to puzzles/project_euler/pe/p264.html
diff --git a/project_euler/pe/p265.html b/puzzles/project_euler/pe/p265.html
similarity index 100%
rename from project_euler/pe/p265.html
rename to puzzles/project_euler/pe/p265.html
diff --git a/project_euler/pe/p266.html b/puzzles/project_euler/pe/p266.html
similarity index 100%
rename from project_euler/pe/p266.html
rename to puzzles/project_euler/pe/p266.html
diff --git a/project_euler/pe/p267.html b/puzzles/project_euler/pe/p267.html
similarity index 100%
rename from project_euler/pe/p267.html
rename to puzzles/project_euler/pe/p267.html
diff --git a/project_euler/pe/p268.html b/puzzles/project_euler/pe/p268.html
similarity index 100%
rename from project_euler/pe/p268.html
rename to puzzles/project_euler/pe/p268.html
diff --git a/project_euler/pe/p269.html b/puzzles/project_euler/pe/p269.html
similarity index 100%
rename from project_euler/pe/p269.html
rename to puzzles/project_euler/pe/p269.html
diff --git a/project_euler/pe/p270.html b/puzzles/project_euler/pe/p270.html
similarity index 100%
rename from project_euler/pe/p270.html
rename to puzzles/project_euler/pe/p270.html
diff --git a/project_euler/pe/p271.html b/puzzles/project_euler/pe/p271.html
similarity index 100%
rename from project_euler/pe/p271.html
rename to puzzles/project_euler/pe/p271.html
diff --git a/project_euler/pe/p272.html b/puzzles/project_euler/pe/p272.html
similarity index 100%
rename from project_euler/pe/p272.html
rename to puzzles/project_euler/pe/p272.html
diff --git a/project_euler/pe/p273.html b/puzzles/project_euler/pe/p273.html
similarity index 100%
rename from project_euler/pe/p273.html
rename to puzzles/project_euler/pe/p273.html
diff --git a/project_euler/pe/p274.html b/puzzles/project_euler/pe/p274.html
similarity index 100%
rename from project_euler/pe/p274.html
rename to puzzles/project_euler/pe/p274.html
diff --git a/project_euler/pe/p275.html b/puzzles/project_euler/pe/p275.html
similarity index 100%
rename from project_euler/pe/p275.html
rename to puzzles/project_euler/pe/p275.html
diff --git a/project_euler/pe/p276.html b/puzzles/project_euler/pe/p276.html
similarity index 100%
rename from project_euler/pe/p276.html
rename to puzzles/project_euler/pe/p276.html
diff --git a/project_euler/pe/p277.html b/puzzles/project_euler/pe/p277.html
similarity index 100%
rename from project_euler/pe/p277.html
rename to puzzles/project_euler/pe/p277.html
diff --git a/project_euler/pe/p278.html b/puzzles/project_euler/pe/p278.html
similarity index 100%
rename from project_euler/pe/p278.html
rename to puzzles/project_euler/pe/p278.html
diff --git a/project_euler/pe/p279.html b/puzzles/project_euler/pe/p279.html
similarity index 100%
rename from project_euler/pe/p279.html
rename to puzzles/project_euler/pe/p279.html
diff --git a/project_euler/pe/p280.html b/puzzles/project_euler/pe/p280.html
similarity index 100%
rename from project_euler/pe/p280.html
rename to puzzles/project_euler/pe/p280.html
diff --git a/project_euler/pe/p281.html b/puzzles/project_euler/pe/p281.html
similarity index 100%
rename from project_euler/pe/p281.html
rename to puzzles/project_euler/pe/p281.html
diff --git a/project_euler/pe/p282.html b/puzzles/project_euler/pe/p282.html
similarity index 100%
rename from project_euler/pe/p282.html
rename to puzzles/project_euler/pe/p282.html
diff --git a/project_euler/pe/p283.html b/puzzles/project_euler/pe/p283.html
similarity index 100%
rename from project_euler/pe/p283.html
rename to puzzles/project_euler/pe/p283.html
diff --git a/project_euler/pe/p284.html b/puzzles/project_euler/pe/p284.html
similarity index 100%
rename from project_euler/pe/p284.html
rename to puzzles/project_euler/pe/p284.html
diff --git a/project_euler/pe/p285.html b/puzzles/project_euler/pe/p285.html
similarity index 100%
rename from project_euler/pe/p285.html
rename to puzzles/project_euler/pe/p285.html
diff --git a/project_euler/pe/p286.html b/puzzles/project_euler/pe/p286.html
similarity index 100%
rename from project_euler/pe/p286.html
rename to puzzles/project_euler/pe/p286.html
diff --git a/project_euler/pe/p287.html b/puzzles/project_euler/pe/p287.html
similarity index 100%
rename from project_euler/pe/p287.html
rename to puzzles/project_euler/pe/p287.html
diff --git a/project_euler/pe/p288.html b/puzzles/project_euler/pe/p288.html
similarity index 100%
rename from project_euler/pe/p288.html
rename to puzzles/project_euler/pe/p288.html
diff --git a/project_euler/pe/p289.html b/puzzles/project_euler/pe/p289.html
similarity index 100%
rename from project_euler/pe/p289.html
rename to puzzles/project_euler/pe/p289.html
diff --git a/project_euler/pe/p290.html b/puzzles/project_euler/pe/p290.html
similarity index 100%
rename from project_euler/pe/p290.html
rename to puzzles/project_euler/pe/p290.html
diff --git a/project_euler/pe/p291.html b/puzzles/project_euler/pe/p291.html
similarity index 100%
rename from project_euler/pe/p291.html
rename to puzzles/project_euler/pe/p291.html
diff --git a/project_euler/pe/p292.html b/puzzles/project_euler/pe/p292.html
similarity index 100%
rename from project_euler/pe/p292.html
rename to puzzles/project_euler/pe/p292.html
diff --git a/project_euler/pe/p293.html b/puzzles/project_euler/pe/p293.html
similarity index 100%
rename from project_euler/pe/p293.html
rename to puzzles/project_euler/pe/p293.html
diff --git a/project_euler/pe/p294.html b/puzzles/project_euler/pe/p294.html
similarity index 100%
rename from project_euler/pe/p294.html
rename to puzzles/project_euler/pe/p294.html
diff --git a/project_euler/pe/p295.html b/puzzles/project_euler/pe/p295.html
similarity index 100%
rename from project_euler/pe/p295.html
rename to puzzles/project_euler/pe/p295.html
diff --git a/project_euler/pe/p296.html b/puzzles/project_euler/pe/p296.html
similarity index 100%
rename from project_euler/pe/p296.html
rename to puzzles/project_euler/pe/p296.html
diff --git a/project_euler/pe/p297.html b/puzzles/project_euler/pe/p297.html
similarity index 100%
rename from project_euler/pe/p297.html
rename to puzzles/project_euler/pe/p297.html
diff --git a/project_euler/pe/p298.html b/puzzles/project_euler/pe/p298.html
similarity index 100%
rename from project_euler/pe/p298.html
rename to puzzles/project_euler/pe/p298.html
diff --git a/project_euler/pe/p299.html b/puzzles/project_euler/pe/p299.html
similarity index 100%
rename from project_euler/pe/p299.html
rename to puzzles/project_euler/pe/p299.html
diff --git a/project_euler/pe/p300.html b/puzzles/project_euler/pe/p300.html
similarity index 100%
rename from project_euler/pe/p300.html
rename to puzzles/project_euler/pe/p300.html
diff --git a/project_euler/pe/p301.html b/puzzles/project_euler/pe/p301.html
similarity index 100%
rename from project_euler/pe/p301.html
rename to puzzles/project_euler/pe/p301.html
diff --git a/project_euler/pe/p302.html b/puzzles/project_euler/pe/p302.html
similarity index 100%
rename from project_euler/pe/p302.html
rename to puzzles/project_euler/pe/p302.html
diff --git a/project_euler/pe/p303.html b/puzzles/project_euler/pe/p303.html
similarity index 100%
rename from project_euler/pe/p303.html
rename to puzzles/project_euler/pe/p303.html
diff --git a/project_euler/pe/p304.html b/puzzles/project_euler/pe/p304.html
similarity index 100%
rename from project_euler/pe/p304.html
rename to puzzles/project_euler/pe/p304.html
diff --git a/project_euler/pe/p305.html b/puzzles/project_euler/pe/p305.html
similarity index 100%
rename from project_euler/pe/p305.html
rename to puzzles/project_euler/pe/p305.html
diff --git a/project_euler/pe/p306.html b/puzzles/project_euler/pe/p306.html
similarity index 100%
rename from project_euler/pe/p306.html
rename to puzzles/project_euler/pe/p306.html
diff --git a/project_euler/pe/p307.html b/puzzles/project_euler/pe/p307.html
similarity index 100%
rename from project_euler/pe/p307.html
rename to puzzles/project_euler/pe/p307.html
diff --git a/project_euler/pe/p308.html b/puzzles/project_euler/pe/p308.html
similarity index 100%
rename from project_euler/pe/p308.html
rename to puzzles/project_euler/pe/p308.html
diff --git a/project_euler/pe/p309.html b/puzzles/project_euler/pe/p309.html
similarity index 100%
rename from project_euler/pe/p309.html
rename to puzzles/project_euler/pe/p309.html
diff --git a/project_euler/pe/p310.html b/puzzles/project_euler/pe/p310.html
similarity index 100%
rename from project_euler/pe/p310.html
rename to puzzles/project_euler/pe/p310.html
diff --git a/project_euler/pe/p311.html b/puzzles/project_euler/pe/p311.html
similarity index 100%
rename from project_euler/pe/p311.html
rename to puzzles/project_euler/pe/p311.html
diff --git a/project_euler/pe/p312.html b/puzzles/project_euler/pe/p312.html
similarity index 100%
rename from project_euler/pe/p312.html
rename to puzzles/project_euler/pe/p312.html
diff --git a/project_euler/pe/p313.html b/puzzles/project_euler/pe/p313.html
similarity index 100%
rename from project_euler/pe/p313.html
rename to puzzles/project_euler/pe/p313.html
diff --git a/project_euler/pe/p314.html b/puzzles/project_euler/pe/p314.html
similarity index 100%
rename from project_euler/pe/p314.html
rename to puzzles/project_euler/pe/p314.html
diff --git a/project_euler/pe/p315.html b/puzzles/project_euler/pe/p315.html
similarity index 100%
rename from project_euler/pe/p315.html
rename to puzzles/project_euler/pe/p315.html
diff --git a/project_euler/pe/p316.html b/puzzles/project_euler/pe/p316.html
similarity index 100%
rename from project_euler/pe/p316.html
rename to puzzles/project_euler/pe/p316.html
diff --git a/project_euler/pe/p317.html b/puzzles/project_euler/pe/p317.html
similarity index 100%
rename from project_euler/pe/p317.html
rename to puzzles/project_euler/pe/p317.html
diff --git a/project_euler/pe/p318.html b/puzzles/project_euler/pe/p318.html
similarity index 100%
rename from project_euler/pe/p318.html
rename to puzzles/project_euler/pe/p318.html
diff --git a/project_euler/pe/p319.html b/puzzles/project_euler/pe/p319.html
similarity index 100%
rename from project_euler/pe/p319.html
rename to puzzles/project_euler/pe/p319.html
diff --git a/project_euler/pe/p320.html b/puzzles/project_euler/pe/p320.html
similarity index 100%
rename from project_euler/pe/p320.html
rename to puzzles/project_euler/pe/p320.html
diff --git a/project_euler/pe/p321.html b/puzzles/project_euler/pe/p321.html
similarity index 100%
rename from project_euler/pe/p321.html
rename to puzzles/project_euler/pe/p321.html
diff --git a/project_euler/pe/p322.html b/puzzles/project_euler/pe/p322.html
similarity index 100%
rename from project_euler/pe/p322.html
rename to puzzles/project_euler/pe/p322.html
diff --git a/project_euler/pe/p323.html b/puzzles/project_euler/pe/p323.html
similarity index 100%
rename from project_euler/pe/p323.html
rename to puzzles/project_euler/pe/p323.html
diff --git a/project_euler/pe/p324.html b/puzzles/project_euler/pe/p324.html
similarity index 100%
rename from project_euler/pe/p324.html
rename to puzzles/project_euler/pe/p324.html
diff --git a/project_euler/pe/p325.html b/puzzles/project_euler/pe/p325.html
similarity index 100%
rename from project_euler/pe/p325.html
rename to puzzles/project_euler/pe/p325.html
diff --git a/project_euler/pe/p326.html b/puzzles/project_euler/pe/p326.html
similarity index 100%
rename from project_euler/pe/p326.html
rename to puzzles/project_euler/pe/p326.html
diff --git a/project_euler/pe/p327.html b/puzzles/project_euler/pe/p327.html
similarity index 100%
rename from project_euler/pe/p327.html
rename to puzzles/project_euler/pe/p327.html
diff --git a/project_euler/pe/p328.html b/puzzles/project_euler/pe/p328.html
similarity index 100%
rename from project_euler/pe/p328.html
rename to puzzles/project_euler/pe/p328.html
diff --git a/project_euler/pe/p329.html b/puzzles/project_euler/pe/p329.html
similarity index 100%
rename from project_euler/pe/p329.html
rename to puzzles/project_euler/pe/p329.html
diff --git a/project_euler/pe/p330.html b/puzzles/project_euler/pe/p330.html
similarity index 100%
rename from project_euler/pe/p330.html
rename to puzzles/project_euler/pe/p330.html
diff --git a/project_euler/pe/p331.html b/puzzles/project_euler/pe/p331.html
similarity index 100%
rename from project_euler/pe/p331.html
rename to puzzles/project_euler/pe/p331.html
diff --git a/project_euler/pe/p332.html b/puzzles/project_euler/pe/p332.html
similarity index 100%
rename from project_euler/pe/p332.html
rename to puzzles/project_euler/pe/p332.html
diff --git a/project_euler/pe/p333.html b/puzzles/project_euler/pe/p333.html
similarity index 100%
rename from project_euler/pe/p333.html
rename to puzzles/project_euler/pe/p333.html
diff --git a/project_euler/pe/p334.html b/puzzles/project_euler/pe/p334.html
similarity index 100%
rename from project_euler/pe/p334.html
rename to puzzles/project_euler/pe/p334.html
diff --git a/project_euler/pe/p335.html b/puzzles/project_euler/pe/p335.html
similarity index 100%
rename from project_euler/pe/p335.html
rename to puzzles/project_euler/pe/p335.html
diff --git a/project_euler/pe/p336.html b/puzzles/project_euler/pe/p336.html
similarity index 100%
rename from project_euler/pe/p336.html
rename to puzzles/project_euler/pe/p336.html
diff --git a/project_euler/pe/p337.html b/puzzles/project_euler/pe/p337.html
similarity index 100%
rename from project_euler/pe/p337.html
rename to puzzles/project_euler/pe/p337.html
diff --git a/project_euler/pe/p338.html b/puzzles/project_euler/pe/p338.html
similarity index 100%
rename from project_euler/pe/p338.html
rename to puzzles/project_euler/pe/p338.html
diff --git a/project_euler/pe/p339.html b/puzzles/project_euler/pe/p339.html
similarity index 100%
rename from project_euler/pe/p339.html
rename to puzzles/project_euler/pe/p339.html
diff --git a/project_euler/pe/p340.html b/puzzles/project_euler/pe/p340.html
similarity index 100%
rename from project_euler/pe/p340.html
rename to puzzles/project_euler/pe/p340.html
diff --git a/project_euler/pe/p341.html b/puzzles/project_euler/pe/p341.html
similarity index 100%
rename from project_euler/pe/p341.html
rename to puzzles/project_euler/pe/p341.html
diff --git a/project_euler/pe/p342.html b/puzzles/project_euler/pe/p342.html
similarity index 100%
rename from project_euler/pe/p342.html
rename to puzzles/project_euler/pe/p342.html
diff --git a/project_euler/pe/p343.html b/puzzles/project_euler/pe/p343.html
similarity index 100%
rename from project_euler/pe/p343.html
rename to puzzles/project_euler/pe/p343.html
diff --git a/project_euler/pe/p344.html b/puzzles/project_euler/pe/p344.html
similarity index 100%
rename from project_euler/pe/p344.html
rename to puzzles/project_euler/pe/p344.html
diff --git a/project_euler/pe/p345.html b/puzzles/project_euler/pe/p345.html
similarity index 100%
rename from project_euler/pe/p345.html
rename to puzzles/project_euler/pe/p345.html
diff --git a/project_euler/pe/p346.html b/puzzles/project_euler/pe/p346.html
similarity index 100%
rename from project_euler/pe/p346.html
rename to puzzles/project_euler/pe/p346.html
diff --git a/project_euler/pe/p347.html b/puzzles/project_euler/pe/p347.html
similarity index 100%
rename from project_euler/pe/p347.html
rename to puzzles/project_euler/pe/p347.html
diff --git a/project_euler/pe/p348.html b/puzzles/project_euler/pe/p348.html
similarity index 100%
rename from project_euler/pe/p348.html
rename to puzzles/project_euler/pe/p348.html
diff --git a/project_euler/pe/p349.html b/puzzles/project_euler/pe/p349.html
similarity index 100%
rename from project_euler/pe/p349.html
rename to puzzles/project_euler/pe/p349.html
diff --git a/project_euler/pe/p350.html b/puzzles/project_euler/pe/p350.html
similarity index 100%
rename from project_euler/pe/p350.html
rename to puzzles/project_euler/pe/p350.html
diff --git a/project_euler/pe/p351.html b/puzzles/project_euler/pe/p351.html
similarity index 100%
rename from project_euler/pe/p351.html
rename to puzzles/project_euler/pe/p351.html
diff --git a/project_euler/pe/p352.html b/puzzles/project_euler/pe/p352.html
similarity index 100%
rename from project_euler/pe/p352.html
rename to puzzles/project_euler/pe/p352.html
diff --git a/project_euler/pe/p353.html b/puzzles/project_euler/pe/p353.html
similarity index 100%
rename from project_euler/pe/p353.html
rename to puzzles/project_euler/pe/p353.html
diff --git a/project_euler/pe/p354.html b/puzzles/project_euler/pe/p354.html
similarity index 100%
rename from project_euler/pe/p354.html
rename to puzzles/project_euler/pe/p354.html
diff --git a/project_euler/pe/p355.html b/puzzles/project_euler/pe/p355.html
similarity index 100%
rename from project_euler/pe/p355.html
rename to puzzles/project_euler/pe/p355.html
diff --git a/project_euler/pe/p356.html b/puzzles/project_euler/pe/p356.html
similarity index 100%
rename from project_euler/pe/p356.html
rename to puzzles/project_euler/pe/p356.html
diff --git a/project_euler/pe/p357.html b/puzzles/project_euler/pe/p357.html
similarity index 100%
rename from project_euler/pe/p357.html
rename to puzzles/project_euler/pe/p357.html
diff --git a/project_euler/pe/p358.html b/puzzles/project_euler/pe/p358.html
similarity index 100%
rename from project_euler/pe/p358.html
rename to puzzles/project_euler/pe/p358.html
diff --git a/project_euler/pe/p359.html b/puzzles/project_euler/pe/p359.html
similarity index 100%
rename from project_euler/pe/p359.html
rename to puzzles/project_euler/pe/p359.html
diff --git a/project_euler/pe/p360.html b/puzzles/project_euler/pe/p360.html
similarity index 100%
rename from project_euler/pe/p360.html
rename to puzzles/project_euler/pe/p360.html
diff --git a/project_euler/pe/p361.html b/puzzles/project_euler/pe/p361.html
similarity index 100%
rename from project_euler/pe/p361.html
rename to puzzles/project_euler/pe/p361.html
diff --git a/project_euler/pe/p362.html b/puzzles/project_euler/pe/p362.html
similarity index 100%
rename from project_euler/pe/p362.html
rename to puzzles/project_euler/pe/p362.html
diff --git a/project_euler/pe/p363.html b/puzzles/project_euler/pe/p363.html
similarity index 100%
rename from project_euler/pe/p363.html
rename to puzzles/project_euler/pe/p363.html
diff --git a/project_euler/pe/p364.html b/puzzles/project_euler/pe/p364.html
similarity index 100%
rename from project_euler/pe/p364.html
rename to puzzles/project_euler/pe/p364.html
diff --git a/project_euler/pe/p365.html b/puzzles/project_euler/pe/p365.html
similarity index 100%
rename from project_euler/pe/p365.html
rename to puzzles/project_euler/pe/p365.html
diff --git a/project_euler/pe/p366.html b/puzzles/project_euler/pe/p366.html
similarity index 100%
rename from project_euler/pe/p366.html
rename to puzzles/project_euler/pe/p366.html
diff --git a/project_euler/pe/p367.html b/puzzles/project_euler/pe/p367.html
similarity index 100%
rename from project_euler/pe/p367.html
rename to puzzles/project_euler/pe/p367.html
diff --git a/project_euler/pe/p368.html b/puzzles/project_euler/pe/p368.html
similarity index 100%
rename from project_euler/pe/p368.html
rename to puzzles/project_euler/pe/p368.html
diff --git a/project_euler/pe/p369.html b/puzzles/project_euler/pe/p369.html
similarity index 100%
rename from project_euler/pe/p369.html
rename to puzzles/project_euler/pe/p369.html
diff --git a/project_euler/pe/p370.html b/puzzles/project_euler/pe/p370.html
similarity index 100%
rename from project_euler/pe/p370.html
rename to puzzles/project_euler/pe/p370.html
diff --git a/project_euler/pe/p371.html b/puzzles/project_euler/pe/p371.html
similarity index 100%
rename from project_euler/pe/p371.html
rename to puzzles/project_euler/pe/p371.html
diff --git a/project_euler/pe/p372.html b/puzzles/project_euler/pe/p372.html
similarity index 100%
rename from project_euler/pe/p372.html
rename to puzzles/project_euler/pe/p372.html
diff --git a/project_euler/pe/p373.html b/puzzles/project_euler/pe/p373.html
similarity index 100%
rename from project_euler/pe/p373.html
rename to puzzles/project_euler/pe/p373.html
diff --git a/project_euler/pe/p374.html b/puzzles/project_euler/pe/p374.html
similarity index 100%
rename from project_euler/pe/p374.html
rename to puzzles/project_euler/pe/p374.html
diff --git a/project_euler/pe/p375.html b/puzzles/project_euler/pe/p375.html
similarity index 100%
rename from project_euler/pe/p375.html
rename to puzzles/project_euler/pe/p375.html
diff --git a/project_euler/pe/p376.html b/puzzles/project_euler/pe/p376.html
similarity index 100%
rename from project_euler/pe/p376.html
rename to puzzles/project_euler/pe/p376.html
diff --git a/project_euler/pe/p377.html b/puzzles/project_euler/pe/p377.html
similarity index 100%
rename from project_euler/pe/p377.html
rename to puzzles/project_euler/pe/p377.html
diff --git a/project_euler/pe/p378.html b/puzzles/project_euler/pe/p378.html
similarity index 100%
rename from project_euler/pe/p378.html
rename to puzzles/project_euler/pe/p378.html
diff --git a/project_euler/pe/p379.html b/puzzles/project_euler/pe/p379.html
similarity index 100%
rename from project_euler/pe/p379.html
rename to puzzles/project_euler/pe/p379.html
diff --git a/project_euler/pe/p380.html b/puzzles/project_euler/pe/p380.html
similarity index 100%
rename from project_euler/pe/p380.html
rename to puzzles/project_euler/pe/p380.html
diff --git a/project_euler/pe/p381.html b/puzzles/project_euler/pe/p381.html
similarity index 100%
rename from project_euler/pe/p381.html
rename to puzzles/project_euler/pe/p381.html
diff --git a/project_euler/pe/p382.html b/puzzles/project_euler/pe/p382.html
similarity index 100%
rename from project_euler/pe/p382.html
rename to puzzles/project_euler/pe/p382.html
diff --git a/project_euler/pe/p383.html b/puzzles/project_euler/pe/p383.html
similarity index 100%
rename from project_euler/pe/p383.html
rename to puzzles/project_euler/pe/p383.html
diff --git a/project_euler/pe/p384.html b/puzzles/project_euler/pe/p384.html
similarity index 100%
rename from project_euler/pe/p384.html
rename to puzzles/project_euler/pe/p384.html
diff --git a/project_euler/pe/p385.html b/puzzles/project_euler/pe/p385.html
similarity index 100%
rename from project_euler/pe/p385.html
rename to puzzles/project_euler/pe/p385.html
diff --git a/project_euler/pe/p386.html b/puzzles/project_euler/pe/p386.html
similarity index 100%
rename from project_euler/pe/p386.html
rename to puzzles/project_euler/pe/p386.html
diff --git a/project_euler/pe/p387.html b/puzzles/project_euler/pe/p387.html
similarity index 100%
rename from project_euler/pe/p387.html
rename to puzzles/project_euler/pe/p387.html
diff --git a/project_euler/pe/p388.html b/puzzles/project_euler/pe/p388.html
similarity index 100%
rename from project_euler/pe/p388.html
rename to puzzles/project_euler/pe/p388.html
diff --git a/project_euler/pe/p389.html b/puzzles/project_euler/pe/p389.html
similarity index 100%
rename from project_euler/pe/p389.html
rename to puzzles/project_euler/pe/p389.html
diff --git a/project_euler/pe/p390.html b/puzzles/project_euler/pe/p390.html
similarity index 100%
rename from project_euler/pe/p390.html
rename to puzzles/project_euler/pe/p390.html
diff --git a/project_euler/pe/p391.html b/puzzles/project_euler/pe/p391.html
similarity index 100%
rename from project_euler/pe/p391.html
rename to puzzles/project_euler/pe/p391.html
diff --git a/project_euler/pe/p392.html b/puzzles/project_euler/pe/p392.html
similarity index 100%
rename from project_euler/pe/p392.html
rename to puzzles/project_euler/pe/p392.html
diff --git a/project_euler/pe/p393.html b/puzzles/project_euler/pe/p393.html
similarity index 100%
rename from project_euler/pe/p393.html
rename to puzzles/project_euler/pe/p393.html
diff --git a/project_euler/pe/p394.html b/puzzles/project_euler/pe/p394.html
similarity index 100%
rename from project_euler/pe/p394.html
rename to puzzles/project_euler/pe/p394.html
diff --git a/project_euler/pe/p395.html b/puzzles/project_euler/pe/p395.html
similarity index 100%
rename from project_euler/pe/p395.html
rename to puzzles/project_euler/pe/p395.html
diff --git a/project_euler/pe/p396.html b/puzzles/project_euler/pe/p396.html
similarity index 100%
rename from project_euler/pe/p396.html
rename to puzzles/project_euler/pe/p396.html
diff --git a/project_euler/pe/p397.html b/puzzles/project_euler/pe/p397.html
similarity index 100%
rename from project_euler/pe/p397.html
rename to puzzles/project_euler/pe/p397.html
diff --git a/project_euler/pe/p398.html b/puzzles/project_euler/pe/p398.html
similarity index 100%
rename from project_euler/pe/p398.html
rename to puzzles/project_euler/pe/p398.html
diff --git a/project_euler/pe/p399.html b/puzzles/project_euler/pe/p399.html
similarity index 100%
rename from project_euler/pe/p399.html
rename to puzzles/project_euler/pe/p399.html
diff --git a/project_euler/pe/p400.html b/puzzles/project_euler/pe/p400.html
similarity index 100%
rename from project_euler/pe/p400.html
rename to puzzles/project_euler/pe/p400.html
diff --git a/project_euler/pe/p401.html b/puzzles/project_euler/pe/p401.html
similarity index 100%
rename from project_euler/pe/p401.html
rename to puzzles/project_euler/pe/p401.html
diff --git a/project_euler/pe/p402.html b/puzzles/project_euler/pe/p402.html
similarity index 100%
rename from project_euler/pe/p402.html
rename to puzzles/project_euler/pe/p402.html
diff --git a/project_euler/pe/p403.html b/puzzles/project_euler/pe/p403.html
similarity index 100%
rename from project_euler/pe/p403.html
rename to puzzles/project_euler/pe/p403.html
diff --git a/project_euler/pe/p404.html b/puzzles/project_euler/pe/p404.html
similarity index 100%
rename from project_euler/pe/p404.html
rename to puzzles/project_euler/pe/p404.html
diff --git a/project_euler/pe/p405.html b/puzzles/project_euler/pe/p405.html
similarity index 100%
rename from project_euler/pe/p405.html
rename to puzzles/project_euler/pe/p405.html
diff --git a/project_euler/pe/p406.html b/puzzles/project_euler/pe/p406.html
similarity index 100%
rename from project_euler/pe/p406.html
rename to puzzles/project_euler/pe/p406.html
diff --git a/project_euler/pe/p407.html b/puzzles/project_euler/pe/p407.html
similarity index 100%
rename from project_euler/pe/p407.html
rename to puzzles/project_euler/pe/p407.html
diff --git a/project_euler/pe/p408.html b/puzzles/project_euler/pe/p408.html
similarity index 100%
rename from project_euler/pe/p408.html
rename to puzzles/project_euler/pe/p408.html
diff --git a/project_euler/pe/p409.html b/puzzles/project_euler/pe/p409.html
similarity index 100%
rename from project_euler/pe/p409.html
rename to puzzles/project_euler/pe/p409.html
diff --git a/project_euler/pe/p410.html b/puzzles/project_euler/pe/p410.html
similarity index 100%
rename from project_euler/pe/p410.html
rename to puzzles/project_euler/pe/p410.html
diff --git a/project_euler/pe/p411.html b/puzzles/project_euler/pe/p411.html
similarity index 100%
rename from project_euler/pe/p411.html
rename to puzzles/project_euler/pe/p411.html
diff --git a/project_euler/pe/p412.html b/puzzles/project_euler/pe/p412.html
similarity index 100%
rename from project_euler/pe/p412.html
rename to puzzles/project_euler/pe/p412.html
diff --git a/project_euler/pe/p413.html b/puzzles/project_euler/pe/p413.html
similarity index 100%
rename from project_euler/pe/p413.html
rename to puzzles/project_euler/pe/p413.html
diff --git a/project_euler/pe/p414.html b/puzzles/project_euler/pe/p414.html
similarity index 100%
rename from project_euler/pe/p414.html
rename to puzzles/project_euler/pe/p414.html
diff --git a/project_euler/pe/p415.html b/puzzles/project_euler/pe/p415.html
similarity index 100%
rename from project_euler/pe/p415.html
rename to puzzles/project_euler/pe/p415.html
diff --git a/project_euler/pe/p416.html b/puzzles/project_euler/pe/p416.html
similarity index 100%
rename from project_euler/pe/p416.html
rename to puzzles/project_euler/pe/p416.html
diff --git a/project_euler/pe/p417.html b/puzzles/project_euler/pe/p417.html
similarity index 100%
rename from project_euler/pe/p417.html
rename to puzzles/project_euler/pe/p417.html
diff --git a/project_euler/pe/p418.html b/puzzles/project_euler/pe/p418.html
similarity index 100%
rename from project_euler/pe/p418.html
rename to puzzles/project_euler/pe/p418.html
diff --git a/project_euler/pe/p419.html b/puzzles/project_euler/pe/p419.html
similarity index 100%
rename from project_euler/pe/p419.html
rename to puzzles/project_euler/pe/p419.html
diff --git a/project_euler/pe/p420.html b/puzzles/project_euler/pe/p420.html
similarity index 100%
rename from project_euler/pe/p420.html
rename to puzzles/project_euler/pe/p420.html
diff --git a/project_euler/pe/p421.html b/puzzles/project_euler/pe/p421.html
similarity index 100%
rename from project_euler/pe/p421.html
rename to puzzles/project_euler/pe/p421.html
diff --git a/project_euler/pe/p422.html b/puzzles/project_euler/pe/p422.html
similarity index 100%
rename from project_euler/pe/p422.html
rename to puzzles/project_euler/pe/p422.html
diff --git a/project_euler/pe/p423.html b/puzzles/project_euler/pe/p423.html
similarity index 100%
rename from project_euler/pe/p423.html
rename to puzzles/project_euler/pe/p423.html
diff --git a/project_euler/pe/p424.html b/puzzles/project_euler/pe/p424.html
similarity index 100%
rename from project_euler/pe/p424.html
rename to puzzles/project_euler/pe/p424.html
diff --git a/project_euler/pe/p425.html b/puzzles/project_euler/pe/p425.html
similarity index 100%
rename from project_euler/pe/p425.html
rename to puzzles/project_euler/pe/p425.html
diff --git a/project_euler/pe/p426.html b/puzzles/project_euler/pe/p426.html
similarity index 100%
rename from project_euler/pe/p426.html
rename to puzzles/project_euler/pe/p426.html
diff --git a/project_euler/pe/p427.html b/puzzles/project_euler/pe/p427.html
similarity index 100%
rename from project_euler/pe/p427.html
rename to puzzles/project_euler/pe/p427.html
diff --git a/project_euler/pe/p428.html b/puzzles/project_euler/pe/p428.html
similarity index 100%
rename from project_euler/pe/p428.html
rename to puzzles/project_euler/pe/p428.html
diff --git a/project_euler/pe/p429.html b/puzzles/project_euler/pe/p429.html
similarity index 100%
rename from project_euler/pe/p429.html
rename to puzzles/project_euler/pe/p429.html
diff --git a/project_euler/pe/p430.html b/puzzles/project_euler/pe/p430.html
similarity index 100%
rename from project_euler/pe/p430.html
rename to puzzles/project_euler/pe/p430.html
diff --git a/project_euler/pe/p431.html b/puzzles/project_euler/pe/p431.html
similarity index 100%
rename from project_euler/pe/p431.html
rename to puzzles/project_euler/pe/p431.html
diff --git a/project_euler/pe/p432.html b/puzzles/project_euler/pe/p432.html
similarity index 100%
rename from project_euler/pe/p432.html
rename to puzzles/project_euler/pe/p432.html
diff --git a/project_euler/pe/p433.html b/puzzles/project_euler/pe/p433.html
similarity index 100%
rename from project_euler/pe/p433.html
rename to puzzles/project_euler/pe/p433.html
diff --git a/project_euler/pe/p434.html b/puzzles/project_euler/pe/p434.html
similarity index 100%
rename from project_euler/pe/p434.html
rename to puzzles/project_euler/pe/p434.html
diff --git a/project_euler/pe/p435.html b/puzzles/project_euler/pe/p435.html
similarity index 100%
rename from project_euler/pe/p435.html
rename to puzzles/project_euler/pe/p435.html
diff --git a/project_euler/tmpl.py b/puzzles/project_euler/tmpl.py
similarity index 100%
rename from project_euler/tmpl.py
rename to puzzles/project_euler/tmpl.py
diff --git a/mergeTwoFiles/mergeTwoFiles.cpp b/util/mergeTwoFiles.cpp
similarity index 100%
rename from mergeTwoFiles/mergeTwoFiles.cpp
rename to util/mergeTwoFiles.cpp