From 18248cc202f6108d37bb72c83dbe1427fe6bb7a8 Mon Sep 17 00:00:00 2001 From: boblied Date: Mon, 7 Sep 2020 07:27:03 -0500 Subject: 076 update README --- challenge-076/bob-lied/README | 55 ++----------------------------------------- 1 file changed, 2 insertions(+), 53 deletions(-) diff --git a/challenge-076/bob-lied/README b/challenge-076/bob-lied/README index e3712fbb10..e7d394b6d8 100644 --- a/challenge-076/bob-lied/README +++ b/challenge-076/bob-lied/README @@ -1,53 +1,2 @@ -Solutions to weekly challenge 74 by Bob Lied. - -https://perlweeklychallenge.org/blog/perl-weekly-challenge-074/ - -* TASK #1 > Majority Element - -** Initial thoughts - -This is going to be an exercise in hashes and grep. - -** Post Solution Thoughts - -Use a hash to count to count elements, then use grep with a code block to select the match. - -** Problem Statement - -You are given an array of integers of size $N. -Write a script to find the majority element. If none found then print -1. -Majority element in the list is the one that appears more than floor(size_of_list/2). - - - -* TASK #2 > FNR Character - -** Initial Thoughts - -The specification is a little odd and doesn't match the example. But, OK, whatever. -Similar to the first task, another hash to count occurrences and grep to find the answers. - -** Post Solution Thoughts - -Going through the string could be either done with substr one character at a time, -or splitting the string into an array of characters. Finding the first char could be -a search through the character positions, or a sort and picking off the first element. -Sort is the easy answer, but I'm always wary of scaling. Like in many of these -problems, it's not an issue for "reasonable" strings, but could become a performance -question if the strings were a thousand or a million times bigger. - - -** Problem Statement - -You are given a string $S. - -Write a script to print the series of first non-repeating character -(left -> right) for the given string. Print # if none found. -Example 1 -Input: $S = ‘ababc’ -Output: ‘abb#c’ -Pass 1: “a”, the FNR character is ‘a’ -Pass 2: “ab”, the FNR character is ‘b’ -Pass 3: “aba”, the FNR character is ‘b’ -Pass 4: “abab”, no FNR found, hence ‘#’ -Pass 5: “ababc” the FNR character is ‘c’ +Solutions to weekly challenge 76 by Bob Lied. +https://perlweeklychallenge.org/blog/perl-weekly-challenge-076/ -- cgit From be667eb57b48213f99e85a15c59136e5aff8c135 Mon Sep 17 00:00:00 2001 From: boblied Date: Mon, 7 Sep 2020 07:46:52 -0500 Subject: Install solution template --- challenge-076/bob-lied/perl/ch-1.pl | 31 ++++++++++++++++++++++++++ challenge-076/bob-lied/perl/ch-2.pl | 31 ++++++++++++++++++++++++++ challenge-076/bob-lied/perl/lib/Task1.pm | 38 ++++++++++++++++++++++++++++++++ challenge-076/bob-lied/perl/lib/Task2.pm | 38 ++++++++++++++++++++++++++++++++ challenge-076/bob-lied/perl/t/Task1.t | 14 ++++++++++++ challenge-076/bob-lied/perl/t/Task2.t | 14 ++++++++++++ 6 files changed, 166 insertions(+) create mode 100644 challenge-076/bob-lied/perl/ch-1.pl create mode 100644 challenge-076/bob-lied/perl/ch-2.pl create mode 100644 challenge-076/bob-lied/perl/lib/Task1.pm create mode 100644 challenge-076/bob-lied/perl/lib/Task2.pm create mode 100644 challenge-076/bob-lied/perl/t/Task1.t create mode 100644 challenge-076/bob-lied/perl/t/Task2.t diff --git a/challenge-076/bob-lied/perl/ch-1.pl b/challenge-076/bob-lied/perl/ch-1.pl new file mode 100644 index 0000000000..b02867877d --- /dev/null +++ b/challenge-076/bob-lied/perl/ch-1.pl @@ -0,0 +1,31 @@ +#!/usr/bin/env perl +# vim:set ts=4 sw=4 sts=4 et ai wm=0 nu: +#============================================================================= +# ch-2.pl +#============================================================================= +# Copyright (c) 2020, Bob Lied +#============================================================================= +# Perl Weekly Challenge 000 Task #1 > xxx +#============================================================================= + +use strict; +use warnings; +use v5.30; + +us feature qw/ signatures /; +no warnings qw/ experimental::signatures /; + +use lib "lib"; +use Task1; + +sub Usage { "Usage: $0 args" }; + +my $arg = shift; +my @list = @ARGV; + +die Usage() unless $arg; +die Usage() unless @list; + +my $task = Task1->new(); +my $result = task->run(); +say $result; diff --git a/challenge-076/bob-lied/perl/ch-2.pl b/challenge-076/bob-lied/perl/ch-2.pl new file mode 100644 index 0000000000..6a1a88fe38 --- /dev/null +++ b/challenge-076/bob-lied/perl/ch-2.pl @@ -0,0 +1,31 @@ +#!/usr/bin/env perl +# vim:set ts=4 sw=4 sts=4 et ai wm=0 nu: +#============================================================================= +# ch-2.pl +#============================================================================= +# Copyright (c) 2020, Bob Lied +#============================================================================= +# Perl Weekly Challenge 000 Task #2 > xxx +#============================================================================= + +use strict; +use warnings; +use v5.30; + +us feature qw/ signatures /; +no warnings qw/ experimental::signatures /; + +use lib "lib"; +use Task2; + +sub Usage { "Usage: $0 args" }; + +my $arg = shift; +my @list = @ARGV; + +die Usage() unless $arg; +die Usage() unless @list; + +my $task = Task2->new(); +my $result = task->run(); +say $result; diff --git a/challenge-076/bob-lied/perl/lib/Task1.pm b/challenge-076/bob-lied/perl/lib/Task1.pm new file mode 100644 index 0000000000..13e942cf56 --- /dev/null +++ b/challenge-076/bob-lied/perl/lib/Task1.pm @@ -0,0 +1,38 @@ +# vim:set ts=4 sw=4 sts=4 et ai wm=0 nu: +#============================================================================= +# Task1.pm +#============================================================================= +# Copyright (c) 2020, Bob Lied +#============================================================================= +# Description: +#============================================================================= + +package Task1; + +use strict; +use warnings; + +require Exporter; +our @ISA = qw(Exporter); +our @EXPORT = qw(); +our @EXPORT_OK = qw(); + +sub new +{ + my $class = shift; + $class = ref($class) || $class; + my $self = { + _name1 => $_[0], + }; + bless $self, $class; + return $self; +} + +sub run +{ + my $self = shift; + return undef; +} + +1; + diff --git a/challenge-076/bob-lied/perl/lib/Task2.pm b/challenge-076/bob-lied/perl/lib/Task2.pm new file mode 100644 index 0000000000..e210edb216 --- /dev/null +++ b/challenge-076/bob-lied/perl/lib/Task2.pm @@ -0,0 +1,38 @@ +# vim:set ts=4 sw=4 sts=4 et ai wm=0 nu: +#============================================================================= +# Task2.pm +#============================================================================= +# Copyright (c) 2020, Bob Lied +#============================================================================= +# Description: +#============================================================================= + +package Task2; + +use strict; +use warnings; + +require Exporter; +our @ISA = qw(Exporter); +our @EXPORT = qw(); +our @EXPORT_OK = qw(); + +sub new +{ + my $class = shift; + $class = ref($class) || $class; + my $self = { + _name1 => $_[0], + }; + bless $self, $class; + return $self; +} + +sub run +{ + my $self = shift; + return undef; +} + +1; + diff --git a/challenge-076/bob-lied/perl/t/Task1.t b/challenge-076/bob-lied/perl/t/Task1.t new file mode 100644 index 0000000000..51dd7729c0 --- /dev/null +++ b/challenge-076/bob-lied/perl/t/Task1.t @@ -0,0 +1,14 @@ +# vim:set ts=4 sw=4 sts=4 et ai wm=0 nu: +# +#=============================================================================== +# FILE: Task1.t +# DESCRIPTION: Unit test for Task1 +#=============================================================================== + +use strict; +use warnings; +use v5.30; + +use Test2::V0; + +done_testing(); diff --git a/challenge-076/bob-lied/perl/t/Task2.t b/challenge-076/bob-lied/perl/t/Task2.t new file mode 100644 index 0000000000..ffb1db7c8d --- /dev/null +++ b/challenge-076/bob-lied/perl/t/Task2.t @@ -0,0 +1,14 @@ +# vim:set ts=4 sw=4 sts=4 et ai wm=0 nu: +# +#=============================================================================== +# FILE: Task2.t +# DESCRIPTION: Unit test for Task2 +#=============================================================================== + +use strict; +use warnings; +use v5.30; + +use Test2::V0; + +done_testing(); -- cgit From 9bff867e95b2e505122617b098fde4fa6362ac6d Mon Sep 17 00:00:00 2001 From: Tyler Wardhaugh Date: Mon, 7 Sep 2020 09:47:35 -0700 Subject: prepare files for Challenge #077 --- challenge-077/tyler-wardhaugh/clojure/README.md | 8 ++++---- challenge-077/tyler-wardhaugh/clojure/deps.edn | 5 ++--- challenge-077/tyler-wardhaugh/clojure/pom.xml | 11 +++-------- challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/c77.clj | 12 ++++++++++++ .../tyler-wardhaugh/clojure/test/tw/weekly/c77_test.clj | 13 +++++++++++++ 5 files changed, 34 insertions(+), 15 deletions(-) create mode 100644 challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/c77.clj create mode 100644 challenge-077/tyler-wardhaugh/clojure/test/tw/weekly/c77_test.clj diff --git a/challenge-077/tyler-wardhaugh/clojure/README.md b/challenge-077/tyler-wardhaugh/clojure/README.md index e29e9b74d6..f8a59a9ee9 100644 --- a/challenge-077/tyler-wardhaugh/clojure/README.md +++ b/challenge-077/tyler-wardhaugh/clojure/README.md @@ -1,13 +1,13 @@ -# tw.weekly.c76 +# tw.weekly.c77 -The Weekly Challenge - #076 - Tyler Wardhaugh +The Weekly Challenge - #077 - Tyler Wardhaugh ## Usage Run the project directly (shows default output from both tasks): - $ clojure -m tw.weekly.c76 + $ clojure -m tw.weekly.c77 Run the project's tests (which are samples from the task descriptions): @@ -19,7 +19,7 @@ Run Task #1 with input Run Task #2 with input: - $ clojure -m tw.weekly.ch-2 GRID_FILE DICT_FILE + $ clojure -m tw.weekly.ch-2 MATRIX-FILE ## Project Template diff --git a/challenge-077/tyler-wardhaugh/clojure/deps.edn b/challenge-077/tyler-wardhaugh/clojure/deps.edn index fff9b934dc..b5563f1d16 100644 --- a/challenge-077/tyler-wardhaugh/clojure/deps.edn +++ b/challenge-077/tyler-wardhaugh/clojure/deps.edn @@ -1,6 +1,5 @@ {:paths ["src" "resources"] :deps {org.clojure/clojure {:mvn/version "1.10.1"} - com.hypirion/primes {:mvn/version "0.2.2"} org.clojure/math.combinatorics {:mvn/version "0.1.6"} net.mikera/core.matrix {:mvn/version "0.62.0"}} :aliases @@ -12,5 +11,5 @@ :main-opts ["-m" "cognitect.test-runner" "-d" "test"]} :uberjar {:extra-deps {seancorfield/depstar {:mvn/version "1.0.94"}} - :main-opts ["-m" "hf.depstar.uberjar" "tw.weekly.c76.jar" - "-C" "-m" "tw.weekly.c76"]}}} + :main-opts ["-m" "hf.depstar.uberjar" "tw.weekly.c77.jar" + "-C" "-m" "tw.weekly.c77"]}}} diff --git a/challenge-077/tyler-wardhaugh/clojure/pom.xml b/challenge-077/tyler-wardhaugh/clojure/pom.xml index 5f42d66326..cf00c8cf74 100644 --- a/challenge-077/tyler-wardhaugh/clojure/pom.xml +++ b/challenge-077/tyler-wardhaugh/clojure/pom.xml @@ -2,10 +2,10 @@ 4.0.0 tw.weekly - tw.weekly.c76 + tw.weekly.c77 0.1.0-SNAPSHOT - tw.weekly.c76 - The Weekly Challenge - #076 + tw.weekly.c77 + The Weekly Challenge - #077 https://github.com/manwar/perlweeklychallenge-club @@ -24,11 +24,6 @@ clojure 1.10.1 - - com.hypirion - primes - 0.2.2 - org.clojure math.combinatorics diff --git a/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/c77.clj b/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/c77.clj new file mode 100644 index 0000000000..3cd690da23 --- /dev/null +++ b/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/c77.clj @@ -0,0 +1,12 @@ +(ns tw.weekly.c77 + (:require [tw.weekly.ch-1 :as ch-1]) + (:require [tw.weekly.ch-2 :as ch-2]) + (:gen-class)) + +(defn -main + "Run both tasks." + [& args] + (println "Task #1") + (ch-1/-main) + (println "\n\nTask #2") + (ch-2/-main)) diff --git a/challenge-077/tyler-wardhaugh/clojure/test/tw/weekly/c77_test.clj b/challenge-077/tyler-wardhaugh/clojure/test/tw/weekly/c77_test.clj new file mode 100644 index 0000000000..8416dbe995 --- /dev/null +++ b/challenge-077/tyler-wardhaugh/clojure/test/tw/weekly/c77_test.clj @@ -0,0 +1,13 @@ +(ns tw.weekly.c77-test + (:require [clojure.test :refer :all] + [clojure.java.io :as io] + [tw.weekly.ch-1 :refer []] + [tw.weekly.ch-2 :refer []])) + +(deftest ch-1 + (testing "Task 1" + )) + +(deftest ch-2 + (testing "Task 2" + )) -- cgit From 6897242ba14084a2b9dfec62122aff71c90015c8 Mon Sep 17 00:00:00 2001 From: Tyler Wardhaugh Date: Mon, 7 Sep 2020 10:31:19 -0700 Subject: Task 1 --- .../tyler-wardhaugh/clojure/src/tw/weekly/ch-1.clj | 1 + .../tyler-wardhaugh/clojure/src/tw/weekly/ch_1.clj | 39 ++++++++++++++++++++++ .../clojure/test/tw/weekly/c77_test.clj | 5 +-- 3 files changed, 43 insertions(+), 2 deletions(-) create mode 120000 challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch-1.clj create mode 100644 challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch_1.clj diff --git a/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch-1.clj b/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch-1.clj new file mode 120000 index 0000000000..924a7a086e --- /dev/null +++ b/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch-1.clj @@ -0,0 +1 @@ +ch_1.clj \ No newline at end of file diff --git a/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch_1.clj b/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch_1.clj new file mode 100644 index 0000000000..4ab609b3d8 --- /dev/null +++ b/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch_1.clj @@ -0,0 +1,39 @@ +(ns tw.weekly.ch-1 + (:require [clojure.edn :as edn]) + (:require [clojure.math.combinatorics :as combo])) + +;;; Task description (as of UPDATE: 2020-09-07 09:00:00) +; You are given a positive integer $N. +; +; Write a script to find out all possible combination of Fibonacci Numbers required to get $N on addition. +; +; You are NOT allowed to repeat a number. Print 0 if none found. +;;; + +; source: [Clojure High Performance Fibonacci – Deque](https://deque.blog/2017/06/01/clojure-high-performance-fibonacci/)] +(defn fibo-lazy-seq + "Generate the nth Fibonacci Number, starting from 0, 1, 1, ..." + [] + (letfn [(fibs [a b] (cons a (lazy-seq (fibs b (+ a b)))))] + (fibs 0N 1N))) + +(defn fibo-sum + "Find all combinations of Fibonacci Numbers that sum to n, returning nil if none are found." + [n] + (let [fibs (drop 2 (take n (fibo-lazy-seq))) + results (->> fibs + combo/subsets + (drop 1) ; remove the empty subset, which is always first + (filter #(= n (reduce + 0N %))))] + (seq results))) + +(defn -main + "Run Task 1 with a number N, defaulting to the number given in the task example, 6." + [& args] + (let [N (or (some-> args first edn/read-string) 6) + failure-result 0] + (if-let [results (fibo-sum N)] + (do + (printf "Found Fibonacci numbers that sum to %d:\n" N) + (dorun (map #(println (apply str (interpose " + " %))) results))) + (printf "No Fibonacci numbers sum to %d:\n%d\n" N failure-result)))) diff --git a/challenge-077/tyler-wardhaugh/clojure/test/tw/weekly/c77_test.clj b/challenge-077/tyler-wardhaugh/clojure/test/tw/weekly/c77_test.clj index 8416dbe995..7ab39d517a 100644 --- a/challenge-077/tyler-wardhaugh/clojure/test/tw/weekly/c77_test.clj +++ b/challenge-077/tyler-wardhaugh/clojure/test/tw/weekly/c77_test.clj @@ -1,12 +1,13 @@ (ns tw.weekly.c77-test (:require [clojure.test :refer :all] [clojure.java.io :as io] - [tw.weekly.ch-1 :refer []] + [tw.weekly.ch-1 :refer [fibo-sum]] [tw.weekly.ch-2 :refer []])) (deftest ch-1 (testing "Task 1" - )) + (is (= #{(list 1N 2N 3N) (list 1N 5N)} (into #{} (fibo-sum 6)))) + (is (= #{(list 1N 3N 5N) (list 1N 8N)} (into #{} (fibo-sum 9)))))) (deftest ch-2 (testing "Task 2" -- cgit From 5a97c3c87271a33816ead8373caf8d0856f82d17 Mon Sep 17 00:00:00 2001 From: Tyler Wardhaugh Date: Mon, 7 Sep 2020 17:36:17 -0700 Subject: Task 2 --- challenge-077/tyler-wardhaugh/clojure/deps.edn | 3 +- .../tyler-wardhaugh/clojure/resources/matrix1.txt | 3 ++ .../tyler-wardhaugh/clojure/resources/matrix2.txt | 4 ++ .../tyler-wardhaugh/clojure/src/tw/weekly/ch-2.clj | 1 + .../tyler-wardhaugh/clojure/src/tw/weekly/ch_2.clj | 50 ++++++++++++++++++++++ .../clojure/test/tw/weekly/c77_test.clj | 8 +++- 6 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 challenge-077/tyler-wardhaugh/clojure/resources/matrix1.txt create mode 100644 challenge-077/tyler-wardhaugh/clojure/resources/matrix2.txt create mode 120000 challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch-2.clj create mode 100644 challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch_2.clj diff --git a/challenge-077/tyler-wardhaugh/clojure/deps.edn b/challenge-077/tyler-wardhaugh/clojure/deps.edn index b5563f1d16..0d1fedb8bb 100644 --- a/challenge-077/tyler-wardhaugh/clojure/deps.edn +++ b/challenge-077/tyler-wardhaugh/clojure/deps.edn @@ -1,7 +1,8 @@ {:paths ["src" "resources"] :deps {org.clojure/clojure {:mvn/version "1.10.1"} org.clojure/math.combinatorics {:mvn/version "0.1.6"} - net.mikera/core.matrix {:mvn/version "0.62.0"}} + net.mikera/core.matrix {:mvn/version "0.62.0"} + pjstadig/reducible-stream {:mvn/version "0.1.5"}} :aliases {:test {:extra-paths ["test"] :extra-deps {org.clojure/test.check {:mvn/version "1.0.0"}}} diff --git a/challenge-077/tyler-wardhaugh/clojure/resources/matrix1.txt b/challenge-077/tyler-wardhaugh/clojure/resources/matrix1.txt new file mode 100644 index 0000000000..f8beeb613f --- /dev/null +++ b/challenge-077/tyler-wardhaugh/clojure/resources/matrix1.txt @@ -0,0 +1,3 @@ +O O X +X O O +X O O diff --git a/challenge-077/tyler-wardhaugh/clojure/resources/matrix2.txt b/challenge-077/tyler-wardhaugh/clojure/resources/matrix2.txt new file mode 100644 index 0000000000..d81104f1b2 --- /dev/null +++ b/challenge-077/tyler-wardhaugh/clojure/resources/matrix2.txt @@ -0,0 +1,4 @@ +O O X O +X O O O +X O O X +O X O O diff --git a/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch-2.clj b/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch-2.clj new file mode 120000 index 0000000000..5a32e17ef9 --- /dev/null +++ b/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch-2.clj @@ -0,0 +1 @@ +ch_2.clj \ No newline at end of file diff --git a/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch_2.clj b/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch_2.clj new file mode 100644 index 0000000000..6c6854eef1 --- /dev/null +++ b/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch_2.clj @@ -0,0 +1,50 @@ +(ns tw.weekly.ch-2 + (:require [clojure.java.io :as io]) + (:require [clojure.string :as str]) + (:require [clojure.core.matrix :as mat]) + (:require [pjstadig.reducible-stream :refer [decode-lines!]])) + +;;; Task description +; TASK #2 › Lonely X +; You are given m x n character matrix consists of O and X only. +; +; Write a script to count the total number of X surrounded by O only. Print 0 if none found. +;;; + +(defn parse-matrix-file + "Parse matrix file and convert 'O's to 0s and 'X's to 1s. Return a multidimensional vector of ints." + [matrix-file] + (let [source (decode-lines! matrix-file) + xf (comp (map #(str/split % #"\s+")) (map #(replace {"O" 0, "X" 1} %)))] + (into [] xf source))) + +(defn extend-matrix + "Surround the matrix in a 'border' of 0s. That is, add rows before the first and after the last rows and add columns before the first and after the last columns." + [matrix] + (let [n (mat/dimension-count matrix 1) + blank-row (vec (repeat (+ n 2) 0)) + step-1 (reduce (fn [mat v] (conj mat (vec (concat [0] v [0])))) [blank-row] matrix)] + (conj step-1 blank-row))) + +(defn find-lonelies + "Find lonely values in a matrix." + [matrix] + (let [[m n] (mat/shape matrix) + extended (extend-matrix matrix) + canonical-lonely [[0 0 0] [0 1 0] [0 0 0]]] + (for [x (range 1 (inc m)) + y (range 1 (inc n)) + :let [submat (mat/submatrix extended [[(- x 1) 3] [(- y 1) 3]])] + :when (mat/e= canonical-lonely submat)] + [x y]))) + +(defn -main + "Run Task 2 with a matrix file, defaulting to the 'matrix1.txt' file under the resources directory." + [& args] + (let [matrix-file (or (some-> args first io/file) (io/resource "matrix1.txt")) + matrix (parse-matrix-file matrix-file)] + (if-let [lonlies (find-lonelies matrix)] + (do + (printf "%d\n\nCoordinates:\n============\n" (count lonlies)) + (run! println lonlies)) + (println "No lonely Xs in matrix.")))) diff --git a/challenge-077/tyler-wardhaugh/clojure/test/tw/weekly/c77_test.clj b/challenge-077/tyler-wardhaugh/clojure/test/tw/weekly/c77_test.clj index 7ab39d517a..e417556210 100644 --- a/challenge-077/tyler-wardhaugh/clojure/test/tw/weekly/c77_test.clj +++ b/challenge-077/tyler-wardhaugh/clojure/test/tw/weekly/c77_test.clj @@ -2,7 +2,7 @@ (:require [clojure.test :refer :all] [clojure.java.io :as io] [tw.weekly.ch-1 :refer [fibo-sum]] - [tw.weekly.ch-2 :refer []])) + [tw.weekly.ch-2 :refer [parse-matrix-file find-lonelies]])) (deftest ch-1 (testing "Task 1" @@ -11,4 +11,8 @@ (deftest ch-2 (testing "Task 2" - )) + (with-test + (defn f [filename] + (-> filename io/resource parse-matrix-file find-lonelies)) + (is (= (f "matrix1.txt") [[1 3]])) + (is (= (f "matrix2.txt") [[1 3] [3 4]]))))) -- cgit From d9bd8a19492ee4633d39ca533c05511b6925aa16 Mon Sep 17 00:00:00 2001 From: Tyler Wardhaugh Date: Tue, 8 Sep 2020 08:56:23 -0700 Subject: test: explicitly refer to testing functions This makes the linters happy. --- challenge-077/tyler-wardhaugh/clojure/test/tw/weekly/c77_test.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-077/tyler-wardhaugh/clojure/test/tw/weekly/c77_test.clj b/challenge-077/tyler-wardhaugh/clojure/test/tw/weekly/c77_test.clj index e417556210..602751cfe9 100644 --- a/challenge-077/tyler-wardhaugh/clojure/test/tw/weekly/c77_test.clj +++ b/challenge-077/tyler-wardhaugh/clojure/test/tw/weekly/c77_test.clj @@ -1,5 +1,5 @@ (ns tw.weekly.c77-test - (:require [clojure.test :refer :all] + (:require [clojure.test :refer [deftest is testing with-test]] [clojure.java.io :as io] [tw.weekly.ch-1 :refer [fibo-sum]] [tw.weekly.ch-2 :refer [parse-matrix-file find-lonelies]])) -- cgit From d6124e1dd1e2f11c081daf991b6000d5a1666917 Mon Sep 17 00:00:00 2001 From: Tyler Wardhaugh Date: Tue, 8 Sep 2020 09:31:16 -0700 Subject: Task 2: improve lonely detection First, restrict search to elements that are X (or 1 in our case), so we're not doing unnecessary work. Second, we can sum all the elements in the submatrix and if they are equal to 1, then the only 1 is the element we're checking and it is indeed surrounded by all 0s. --- challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch_2.clj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch_2.clj b/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch_2.clj index 6c6854eef1..867c33b3fc 100644 --- a/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch_2.clj +++ b/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch_2.clj @@ -24,18 +24,18 @@ (let [n (mat/dimension-count matrix 1) blank-row (vec (repeat (+ n 2) 0)) step-1 (reduce (fn [mat v] (conj mat (vec (concat [0] v [0])))) [blank-row] matrix)] - (conj step-1 blank-row))) + (to-array-2d (conj step-1 blank-row)))) (defn find-lonelies "Find lonely values in a matrix." [matrix] (let [[m n] (mat/shape matrix) - extended (extend-matrix matrix) - canonical-lonely [[0 0 0] [0 1 0] [0 0 0]]] + extended (extend-matrix matrix)] (for [x (range 1 (inc m)) y (range 1 (inc n)) + :when (= 1 (aget extended x y)) :let [submat (mat/submatrix extended [[(- x 1) 3] [(- y 1) 3]])] - :when (mat/e= canonical-lonely submat)] + :when (= 1 (mat/esum submat))] [x y]))) (defn -main -- cgit From 3736c832a786bf628dfc70bb5cdb95e3068ca864 Mon Sep 17 00:00:00 2001 From: Tyler Wardhaugh Date: Tue, 8 Sep 2020 14:38:24 -0700 Subject: Task 1: improve performance Take Fibonacci Numbers as long as they're less than the sum target (we can eliminate the case of the Fibonacci Number being equal to the sum target because 0 is disallowed for this challenge). --- challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch_1.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch_1.clj b/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch_1.clj index 4ab609b3d8..4d5d0e1375 100644 --- a/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch_1.clj +++ b/challenge-077/tyler-wardhaugh/clojure/src/tw/weekly/ch_1.clj @@ -20,7 +20,7 @@ (defn fibo-sum "Find all combinations of Fibonacci Numbers that sum to n, returning nil if none are found." [n] - (let [fibs (drop 2 (take n (fibo-lazy-seq))) + (let [fibs (drop 2 (take-while #(< % n) (fibo-lazy-seq))) results (->> fibs combo/subsets (drop 1) ; remove the empty subset, which is always first -- cgit From 197a36cbe3b5f545e61e0e2a9139fdd6d52e6f1c Mon Sep 17 00:00:00 2001 From: "E. Choroba" Date: Wed, 9 Sep 2020 00:55:42 +0200 Subject: Solve 077: Fibonacci Sum & Lonely X by E. Choroba --- challenge-077/e-choroba/perl/ch-1.pl | 82 ++++++++++++++++++++++++++ challenge-077/e-choroba/perl/ch-2.pl | 111 +++++++++++++++++++++++++++++++++++ 2 files changed, 193 insertions(+) create mode 100755 challenge-077/e-choroba/perl/ch-1.pl create mode 100755 challenge-077/e-choroba/perl/ch-2.pl diff --git a/challenge-077/e-choroba/perl/ch-1.pl b/challenge-077/e-choroba/perl/ch-1.pl new file mode 100755 index 0000000000..35a6107b69 --- /dev/null +++ b/challenge-077/e-choroba/perl/ch-1.pl @@ -0,0 +1,82 @@ +#!/usr/bin/perl +use warnings; +use strict; +use feature qw{ say }; + +use Memoize; + +memoize('fibonacci'); +sub fibonacci { + my ($n) = @_; + my ($f1, $f2) = (1, 1); + for (1 .. $n) { + ($f1, $f2) = ($f2, $f1 + $f2); + } + return $f1 +} + +memoize('fibonacci_sum'); +sub fibonacci_sum { + my ($n) = @_; + return [[1]] if 1 == $n; + + my @sum; + my $start_index = 1; + while ((my $start_f = fibonacci($start_index)) <= $n) { + + push @sum, [$n] + and last + if $n == $start_f; + + my $index = $start_index; + while ((my $f = fibonacci($index)) <= $n / 2) { + no warnings 'recursion'; + my $s = fibonacci_sum($n - $f); + + my @s = map [$f, @$_], + grep $f < $_->[0], + @$s + or last; + + push @sum, @s; + ++$index; + } + ++$start_index; + } + + return \@sum +} + +sub pretty_print { + my ($n) = @_; + for my $s (@{ fibonacci_sum($n) }) { + say join(' + ', @$s), " = $n"; + } +} + +use Test::More; + +is fibonacci(0), 1; +is fibonacci(1), 1; +is fibonacci(2), 2; +is fibonacci(3), 3; +is fibonacci(4), 5; + +is_deeply fibonacci_sum(1), [[1]], 'one'; +is_deeply fibonacci_sum(2), [[2]], 'two'; +is_deeply fibonacci_sum(3), [[1, 2], [3]], 'three'; +is_deeply fibonacci_sum(4), [[1, 3]], 'four'; +is_deeply fibonacci_sum(5), [[2, 3], [5]], 'five'; +is_deeply fibonacci_sum(6), [[1, 2, 3], [1, 5]], 'six'; +is_deeply fibonacci_sum(7), [[2, 5]], 'seven'; +is_deeply fibonacci_sum(8), [[1, 2, 5], [3, 5], [8]], 'eight'; +is_deeply fibonacci_sum(9), [[1, 3, 5], [1, 8]], 'nine'; +is_deeply fibonacci_sum(10), [[2, 3, 5], [2, 8]], 'ten'; +is_deeply fibonacci_sum(11), [[1, 2, 3, 5], [1, 2, 8], [3, 8]], 'eleven'; +is_deeply fibonacci_sum(12), [[1, 3, 8]], 'twelve'; +is_deeply fibonacci_sum(13), [[2, 3, 8], [5, 8], [13]], 'thirteen'; +is_deeply fibonacci_sum(14), [[1, 2, 3, 8], [1, 5, 8], [1, 13]], 'fourteen'; + +done_testing(); + +pretty_print(18200); # Takes about 5s. diff --git a/challenge-077/e-choroba/perl/ch-2.pl b/challenge-077/e-choroba/perl/ch-2.pl new file mode 100755 index 0000000000..ebf221f3bc --- /dev/null +++ b/challenge-077/e-choroba/perl/ch-2.pl @@ -0,0 +1,111 @@ +#!/usr/bin/perl +use warnings; +use strict; + +my $NO_X = qr/[^X] [^X] [^X]/; + +sub lonely_x { + my ($input) = @_; + + my ($previous, @check); + my $count = 0; + my $verify = sub { + for my $ch (@check) { + $count += substr($_[0], $ch - 2, 5) =~ $NO_X; + } + }; + + open my $in, '<', \$input; + while (<$in>) { + $previous //= ' ' x length; + $verify->($_); + @check = (); + + while (/(?=[^X] X [^X])/g) { + my $pos = pos; + push @check, $pos + 2 if substr($previous, $pos, 5) =~ $NO_X; + } + $previous = $_; + } + $verify->(' ' x length $previous); + + return $count +} + +use Test::More tests => 5; + +is lonely_x(<< '__'), +[ O O X ] +[ X O X ] +[ X O O ] +__ +0, 'None found'; + +is lonely_x(<< '__'), +[ O O X ] +[ X O O ] +[ X O O ] +__ +1, 'Example 1'; + +is lonely_x(<< '__'), +[ O O X O ] +[ X O O O ] +[ X O O X ] +[ O X O O ] +__ +2, 'Example 2'; + +is lonely_x(<< '__'), +[ O O O X O X X ] +[ X O O O O O O ] +[ O O O O X O X ] +[ O O X O O O O ] +[ O X O O X O O ] +[ X O O O X O X ] +__ +5, 'Five'; + +is lonely_x(<< '__'), +[ X X X X O X O O O O O X X X X X O O O O O O X X X X O O X X X O O O O X O O ] +[ O O O O O O X O X O X O O O O X O X X X X O O X X X X O X O X O O X O O X X ] +[ O X O X X O O O O O O X X X O O O X O X O X X X O O X O O O O X O X X X O X ] +[ O X O X X O O O O X O X O O X X X O X O O X O X O X O O O X X O X O X X X X ] +[ O O X X X O O O X O X O O X O X O O X X O X O X X O X X O X X O O O O O O X ] +[ O O O X X X O O O O O O O X O X X O X O O O O O X X X O X X O O O O X O O O ] +[ O X X X X X O O X O X X O O X O X X X O X O O X O X O X X O X O O X X X X X ] +[ O O O X O X X X O O X X O X X O X O O O O X O X X X O X X O O X O O O X O O ] +[ X O X X X O O O O O X O X O O O O O O X X O X O O O O O X O O O X O X O O X ] +[ X X X O O O X O O O O X O X O X O X O O X X X O X X O O X X X O O O O O O O ] +[ X O X O X O X O X X O O X X X X X X X X X X X O X X O X O O O X O O O X O O ] +[ X O X O O X O X X O X O X O X X O X X O O X O O O X X X O O O X X X O X O X ] +[ O X O O X X X O X X O O O O O X O O O X O O O X X X X O X X O O X X O O X O ] +[ X O O O X O X X O O X O O O X X O X O O O X X X O X O X O O O X O X O X X O ] +[ X X X X X X X O X O X O O O X O O X O X X X X O O O O X X X O O O X X O X X ] +[ O X X O O X X X O O X X O X O O O X O X O X X O O X O O X O O O O O O O O X ] +[ O X O X O O O X O X O X O O O O X X X O X X O O X X O X X X O O X O X X O O ] +[ O O X O X O O X X X X O O X O X O O X O X O X X X O X X O X X O O X X X O X ] +[ O X X O O O O X O O O O O X X O O X X O X O X O X O O X O O X O X O X O X O ] +[ O X X O X X X X O O X X X X O X O O X O X O X O O O X O X X X X O O X X X X ] +[ O O O O O O O X X X X O O X O O X X O O O X O O X O X O X O O X X O O O O X ] +[ O O X O X O O X X X O O X X X X O O X X X X X X X O O X O O O X O O O X O X ] +[ X O X O X O O X O X O X X O X O X O X X X O O O O X X X X X X X O X O O X O ] +[ O O X O O X O X O X O O O O O O O O X O X O O O O X X O X X X X O X X X O X ] +[ X X X X X O O X O X X X O X X X O O X O X O X O O O O O O O O O O O O X O X ] +[ X O O O O X X O O O O O O X X X O O O O X X O O O X X O O X O O X X O X X O ] +[ O X O X X O O O X X X X X O X O X X X X O X O X O O O O X O O O O O O X O X ] +[ X X O O O X O X X X O X X X O X O X O O O X X O O X X X O X O O O O O X O X ] +[ O X X X X X X X O O O X O O X O O X O O X O X X O X X X X X X O O X O X O X ] +[ O X X X X O O X O X O X X O X O X X O O O O O O X X O X X O O O O O X O O X ] +[ X O O X O O X O X O X O O X X O X O X O X O X O O X O X X O X O O X O X O O ] +[ O X O O X X X O X O X O O O O X O O X O X X X X O O X O O X X O O O O O X X ] +[ X X O X X O O O X X X O X O O O X X O X X O X X O X O O X X X O O O O O X O ] +[ O O X X X X X X X O X X X X O O X O X O X X X O O X X X X O O O X O O O O X ] +[ O X O O X X X O X O X O O O O X X X O O O O O O X O X X X O X O X X X X O O ] +[ X X X O O O O O X O O X X X O O O O X O O X X O O X O O X O X O X X X O X X ] +[ X X O X O X X O O O X X X O X O X X X X X X X O X X X X X O O X O X O X X X ] +[ X X O O O O X X X X O O X X X O O O O X O O X O X O O O X O O O O X O X X X ] +[ X O O X O O O X X X X X X O O O X O O X X X O X O X X X X X O X O O X X X O ] +[ O X O O O X O O O X O X O O X O O X O O O O X X X O X X X O X O O O O O X O ] +__ +6, 'Six'; -- cgit From 04034bc61fbf59ba09b9c085aa5836571ce94039 Mon Sep 17 00:00:00 2001 From: Tyler Wardhaugh Date: Tue, 8 Sep 2020 16:04:09 -0700 Subject: update pom file --- challenge-077/tyler-wardhaugh/clojure/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/challenge-077/tyler-wardhaugh/clojure/pom.xml b/challenge-077/tyler-wardhaugh/clojure/pom.xml index cf00c8cf74..6b5c3bbe28 100644 --- a/challenge-077/tyler-wardhaugh/clojure/pom.xml +++ b/challenge-077/tyler-wardhaugh/clojure/pom.xml @@ -34,6 +34,11 @@ core.matrix 0.62.0 + + pjstadig + reducible-stream + 0.1.5 + -- cgit From 38740fbfccd4c9f31d1d022beed90d65a4b9676a Mon Sep 17 00:00:00 2001 From: Mohammad S Anwar Date: Wed, 9 Sep 2020 08:59:39 +0100 Subject: - Added solutions by E. Choroba. --- stats/pwc-current.json | 181 ++--- stats/pwc-language-breakdown-summary.json | 68 +- stats/pwc-language-breakdown.json | 1110 ++++++++++++++--------------- stats/pwc-leaders.json | 364 +++++----- stats/pwc-summary-1-30.json | 22 +- stats/pwc-summary-121-150.json | 90 +-- stats/pwc-summary-151-180.json | 36 +- stats/pwc-summary-181-210.json | 30 +- stats/pwc-summary-31-60.json | 104 +-- stats/pwc-summary-61-90.json | 38 +- stats/pwc-summary-91-120.json | 94 +-- stats/pwc-summary.json | 42 +- 12 files changed, 1097 insertions(+), 1082 deletions(-) diff --git a/stats/pwc-current.json b/stats/pwc-current.json index fe6fb2b942..417d64d6df 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -1,91 +1,19 @@ { - "chart" : { - "type" : "column" - }, "yAxis" : { "title" : { "text" : "Total Solutions" } }, - "subtitle" : { - "text" : "[Champions: 8] Last updated at 2020-09-08 10:37:45 GMT" - }, "legend" : { "enabled" : 0 }, - "title" : { - "text" : "Perl Weekly Challenge - 077" - }, - "plotOptions" : { - "series" : { - "borderWidth" : 0, - "dataLabels" : { - "format" : "{point.y}", - "enabled" : 1 - } - } - }, - "series" : [ - { - "colorByPoint" : 1, - "data" : [ - { - "y" : 4, - "name" : "Andrew Shitov", - "drilldown" : "Andrew Shitov" - }, - { - "drilldown" : "Dave Jacoby", - "name" : "Dave Jacoby", - "y" : 2 - }, - { - "drilldown" : "Feng Chang", - "name" : "Feng Chang", - "y" : 2 - }, - { - "y" : 2, - "name" : "Mark Anderson", - "drilldown" : "Mark Anderson" - }, - { - "name" : "Mohammad S Anwar", - "drilldown" : "Mohammad S Anwar", - "y" : 4 - }, - { - "y" : 4, - "name" : "Roger Bell_West", - "drilldown" : "Roger Bell_West" - }, - { - "name" : "Simon Proctor", - "drilldown" : "Simon Proctor", - "y" : 2 - }, - { - "y" : 3, - "name" : "Walt Mankowski", - "drilldown" : "Walt Mankowski" - } - ], - "name" : "Perl Weekly Challenge - 077" - } - ], - "tooltip" : { - "pointFormat" : "{point.name}: {point.y:f}
", - "followPointer" : 1, - "headerFormat" : "{series.name}
" - }, - "xAxis" : { - "type" : "category" + "subtitle" : { + "text" : "[Champions: 9] Last updated at 2020-09-09 07:59:02 GMT" }, "drilldown" : { "series" : [ { "name" : "Andrew Shitov", - "id" : "Andrew Shitov", "data" : [ [ "Raku", @@ -95,27 +23,38 @@ "Blog", 2 ] - ] + ], + "id" : "Andrew Shitov" }, { + "name" : "Dave Jacoby", "data" : [ [ "Perl", 2 ] ], - "name" : "Dave Jacoby", "id" : "Dave Jacoby" }, { - "id" : "Feng Chang", + "name" : "E. Choroba", + "data" : [ + [ + "Perl", + 2 + ] + ], + "id" : "E. Choroba" + }, + { "name" : "Feng Chang", "data" : [ [ "Raku", 2 ] - ] + ], + "id" : "Feng Chang" }, { "data" : [ @@ -142,6 +81,8 @@ "name" : "Mohammad S Anwar" }, { + "name" : "Roger Bell_West", + "id" : "Roger Bell_West", "data" : [ [ "Perl", @@ -151,19 +92,17 @@ "Raku", 2 ] - ], - "name" : "Roger Bell_West", - "id" : "Roger Bell_West" + ] }, { "name" : "Simon Proctor", - "id" : "Simon Proctor", "data" : [ [ "Raku", 2 ] - ] + ], + "id" : "Simon Proctor" }, { "data" : [ @@ -180,5 +119,81 @@ "name" : "Walt Mankowski" } ] + }, + "title" : { + "text" : "Perl Weekly Challenge - 077" + }, + "series" : [ + { + "data" : [ + { + "y" : 4, + "drilldown" : "Andrew Shitov", + "name" : "Andrew Shitov" + }, + { + "name" : "Dave Jacoby", + "drilldown" : "Dave Jacoby", + "y" : 2 + }, + { + "y" : 2, + "drilldown" : "E. Choroba", + "name" : "E. Choroba" + }, + { + "name" : "Feng Chang", + "y" : 2, + "drilldown" : "Feng Chang" + }, + { + "y" : 2, + "drilldown" : "Mark Anderson", + "name" : "Mark Anderson" + }, + { + "drilldown" : "Mohammad S Anwar", + "y" : 4, + "name" : "Mohammad S Anwar" + }, + { + "name" : "Roger Bell_West", + "y" : 4, + "drilldown" : "Roger Bell_West" + }, + { + "name" : "Simon Proctor", + "y" : 2, + "drilldown" : "Simon Proctor" + }, + { + "y" : 3, + "drilldown" : "Walt Mankowski", + "name" : "Walt Mankowski" + } + ], + "colorByPoint" : 1, + "name" : "Perl Weekly Challenge - 077" + } + ], + "xAxis" : { + "type" : "category" + }, + "plotOptions" : { + "series" : { + "dataLabels" : { + "enabled" : 1, + "format" : "{point.y}" + }, + "borderWidth" : 0 + } + }, + "chart" : { + "type" : "column" + }, + "tooltip" : { + "headerFormat" : "{series.name}
", + "followPointer" : 1, + "pointFormat" : "{point.name}: {point.y:f}
" } } diff --git a/stats/pwc-language-breakdown-summary.json b/stats/pwc-language-breakdown-summary.json index 558c781bd0..2eb9aec1aa 100644 --- a/stats/pwc-language-breakdown-summary.json +++ b/stats/pwc-language-breakdown-summary.json @@ -1,18 +1,30 @@ { - "yAxis" : { - "title" : { - "text" : null + "xAxis" : { + "labels" : { + "style" : { + "fontFamily" : "Verdana, sans-serif", + "fontSize" : "13px" + } }, - "min" : 0 + "type" : "category" }, - "chart" : { - "type" : "column" - }, - "subtitle" : { - "text" : "Last updated at 2020-09-08 10:37:45 GMT" + "title" : { + "text" : "Perl Weekly Challenge Contributions [2019 - 2020]" }, "series" : [ { + "dataLabels" : { + "enabled" : "true", + "style" : { + "fontSize" : "13px", + "fontFamily" : "Verdana, sans-serif" + }, + "format" : "{point.y:.0f}", + "rotation" : -90, + "align" : "right", + "color" : "#FFFFFF", + "y" : 10 + }, "name" : "Contributions", "data" : [ [ @@ -21,43 +33,31 @@ ], [ "Perl", - 3211 + 3213 ], [ "Raku", 2100 ] - ], - "dataLabels" : { - "format" : "{point.y:.0f}", - "align" : "right", - "y" : 10, - "enabled" : "true", - "style" : { - "fontSize" : "13px", - "fontFamily" : "Verdana, sans-serif" - }, - "color" : "#FFFFFF", - "rotation" : -90 - } + ] } ], - "title" : { - "text" : "Perl Weekly Challenge Contributions [2019 - 2020]" + "tooltip" : { + "pointFormat" : "{point.y:.0f}" + }, + "chart" : { + "type" : "column" }, "legend" : { "enabled" : "false" }, - "tooltip" : { - "pointFormat" : "{point.y:.0f}" + "subtitle" : { + "text" : "Last updated at 2020-09-09 07:59:02 GMT" }, - "xAxis" : { - "type" : "category", - "labels" : { - "style" : { - "fontSize" : "13px", - "fontFamily" : "Verdana, sans-serif" - } + "yAxis" : { + "min" : 0, + "title" : { + "text" : null } } } diff --git a/stats/pwc-language-breakdown.json b/stats/pwc-language-breakdown.json index baef34f72a..e784561ca4 100644 --- a/stats/pwc-language-breakdown.json +++ b/stats/pwc-language-breakdown.json @@ -1,423 +1,20 @@ { - "title" : { - "text" : "Perl Weekly Challenge Language" - }, "legend" : { "enabled" : "false" }, - "plotOptions" : { - "series" : { - "borderWidth" : 0, - "dataLabels" : { - "format" : "{point.y}", - "enabled" : 1 - } + "subtitle" : { + "text" : "Click the columns to drilldown the language breakdown. Last updated at 2020-09-09 07:59:02 GMT" + }, + "yAxis" : { + "title" : { + "text" : "Total Solutions" } }, - "series" : [ - { - "name" : "Perl Weekly Challenge Languages", - "colorByPoint" : "true", - "data" : [ - { - "y" : 142, - "drilldown" : "001", - "name" : "#001" - }, - { - "y" : 111, - "name" : "#002", - "drilldown" : "002" - }, - { - "drilldown" : "003", - "name" : "#003", - "y" : 71 - }, - { - "drilldown" : "004", - "name" : "#004", - "y" : 91 - }, - { - "name" : "#005", - "drilldown" : "005", - "y" : 72 - }, - { - "drilldown" : "006", - "name" : "#006", - "y" : 52 - }, - { - "y" : 59, - "drilldown" : "007", - "name" : "#007" - }, - { - "y" : 72, - "name" : "#008", - "drilldown" : "008" - }, - { - "y" : 70, - "drilldown" : "009", - "name" : "#009" - }, - { - "name" : "#010", - "drilldown" : "010", - "y" : 60 - }, - { - "drilldown" : "011", - "name" : "#011", - "y" : 79 - }, - { - "y" : 83, - "drilldown" : "012", - "name" : "#012" - }, - { - "name" : "#013", - "drilldown" : "013", - "y" : 78 - }, - { - "y" : 96, - "drilldown" : "014", - "name" : "#014" - }, - { - "y" : 93, - "drilldown" : "015", - "name" : "#015" - }, - { - "name" : "#016", - "drilldown" : "016", - "y" : 66 - }, - { - "y" : 79, - "drilldown" : "017", - "name" : "#017" - }, - { - "y" : 76, - "drilldown" : "018", - "name" : "#018" - }, - { - "y" : 97, - "name" : "#019", - "drilldown" : "019" - }, - { - "y" : 95, - "drilldown" : "020", - "name" : "#020" - }, - { - "y" : 67, - "drilldown" : "021", - "name" : "#021" - }, - { - "y" : 63, - "name" : "#022", - "drilldown" : "022" - }, - { - "name" : "#023", - "drilldown" : "023", - "y" : 91 - }, - { - "y" : 70, - "name" : "#024", - "drilldown" : "024" - }, - { - "name" : "#025", - "drilldown" : "025", - "y" : 55 - }, - { - "y" : 70, - "drilldown" : "026", - "name" : "#026" - }, - { - "y" : 58, - "name" : "#027", - "drilldown" : "027" - }, - { - "y" : 78, - "drilldown" : "028", - "name" : "#028" - }, - { - "drilldown" : "029", - "name" : "#029", - "y" : 77 - }, - { - "y" : 115, - "drilldown" : "030", - "name" : "#030" - }, - { - "y" : 87, - "drilldown" : "031", - "name" : "#031" - }, - { - "drilldown" : "032", - "name" : "#032", - "y" : 92 - }, - { - "y" : 108, - "drilldown" : "033", - "name" : "#033" - }, - { - "drilldown" : "034", - "name" : "#034", - "y" : 62 - }, - { - "drilldown" : "035", - "name" : "#035", - "y" : 62 - }, - { - "drilldown" : "036", - "name" : "#036", - "y" : 66 - }, - { - "name" : "#037", - "drilldown" : "037", - "y" : 65 - }, - { - "y" : 65, - "name" : "#038", - "drilldown" : "038" - }, - { - "y" : 60, - "name" : "#039", - "drilldown" : "039" - }, - { - "drilldown" : "040", - "name" : "#040", - "y" : 71 - }, - { - "drilldown" : "041", - "name" : "#041", - "y" : 74 - }, - { - "name" : "#042", - "drilldown" : "042", - "y" : 88 - }, - { - "name" : "#043", - "drilldown" : "043", - "y" : 66 - }, - { - "name" : "#044", - "drilldown" : "044", - "y" : 82 - }, - { - "y" : 94, - "drilldown" : "045", - "name" : "#045" - }, - { - "y" : 85, - "drilldown" : "046", - "name" : "#046" - }, - { - "y" : 82, - "drilldown" : "047", - "name" : "#047" - }, - { - "y" : 106, - "name" : "#048", - "drilldown" : "048" - }, - { - "name" : "#049", - "drilldown" : "049", - "y" : 85 - }, - { - "name" : "#050", - "drilldown" : "050", - "y" : 96 - }, - { - "y" : 87, - "drilldown" : "051", - "name" : "#051" - }, - { - "drilldown" : "052", - "name" : "#052", - "y" : 89 - }, - { - "drilldown" : "053", - "name" : "#053", - "y" : 99 - }, - { - "drilldown" : "054", - "name" : "#054", - "y" : 101 - }, - { - "y" : 86, - "name" : "#055", - "drilldown" : "055" - }, - { - "y" : 93, - "name" : "#056", - "drilldown" : "056" - }, - { - "drilldown" : "057", - "name" : "#057", - "y" : 78 - }, - { - "drilldown" : "058", - "name" : "#058", - "y" : 67 - }, - { - "y" : 87, - "name" : "#059", - "drilldown" : "059" - }, - { - "name" : "#060", - "drilldown" : "060", - "y" : 83 - }, - { - "y" : 79, - "name" : "#061", - "drilldown" : "061" - }, - { - "y" : 54, - "name" : "#062", - "drilldown" : "062" - }, - { - "y" : 87, - "drilldown" : "063", - "name" : "#063" - }, - { - "y" : 78, - "name" : "#064", - "drilldown" : "064" - }, - { - "drilldown" : "065", - "name" : "#065", - "y" : 71 - }, - { - "name" : "#066", - "drilldown" : "066", - "y" : 82 - }, - { - "y" : 88, - "drilldown" : "067", - "name" : "#067" - }, - { - "y" : 73, - "drilldown" : "068", - "name" : "#068" - }, - { - "y" : 81, - "name" : "#069", - "drilldown" : "069" - }, - { - "drilldown" : "070", - "name" : "#070", - "y" : 91 - }, - { - "drilldown" : "071", - "name" : "#071", - "y" : 76 - }, - { - "y" : 110, - "name" : "#072", - "drilldown" : "072" - }, - { - "y" : 108, - "drilldown" : "073", - "name" : "#073" - }, - { - "y" : 113, - "name" : "#074", - "drilldown" : "074" - }, - { - "y" : 111, - "drilldown" : "075", - "name" : "#075" - }, - { - "y" : 89, - "drilldown" : "076", - "name" : "#076" - }, - { - "y" : 23, - "name" : "#077", - "drilldown" : "077" - } - ] - } - ], - "xAxis" : { - "type" : "category" - }, - "tooltip" : { - "pointFormat" : "Challenge {point.name}: {point.y:f}
", - "headerFormat" : "", - "followPointer" : "true" - }, "drilldown" : { "series" : [ { + "name" : "001", + "id" : "001", "data" : [ [ "Perl", @@ -431,13 +28,10 @@ "Blog", 11 ] - ], - "name" : "001", - "id" : "001" + ] }, { "id" : "002", - "name" : "002", "data" : [ [ "Perl", @@ -451,7 +45,8 @@ "Blog", 10 ] - ] + ], + "name" : "002" }, { "data" : [ @@ -468,10 +63,11 @@ 9 ] ], - "name" : "003", - "id" : "003" + "id" : "003", + "name" : "003" }, { + "name" : "004", "data" : [ [ "Perl", @@ -486,10 +82,10 @@ 10 ] ], - "name" : "004", "id" : "004" }, { + "id" : "005", "data" : [ [ "Perl", @@ -504,10 +100,10 @@ 12 ] ], - "id" : "005", "name" : "005" }, { + "name" : "006", "data" : [ [ "Perl", @@ -522,10 +118,10 @@ 7 ] ], - "name" : "006", "id" : "006" }, { + "name" : "007", "data" : [ [ "Perl", @@ -540,10 +136,11 @@ 10 ] ], - "name" : "007", "id" : "007" }, { + "name" : "008", + "id" : "008", "data" : [ [ "Perl", @@ -557,11 +154,10 @@ "Blog", 12 ] - ], - "id" : "008", - "name" : "008" + ] }, { + "name" : "009", "data" : [ [ "Perl", @@ -576,12 +172,10 @@ 13 ] ], - "name" : "009", "id" : "009" }, { "name" : "010", - "id" : "010", "data" : [ [ "Perl", @@ -595,9 +189,11 @@ "Blog", 11 ] - ] + ], + "id" : "010" }, { + "id" : "011", "data" : [ [ "Perl", @@ -612,12 +208,9 @@ 10 ] ], - "name" : "011", - "id" : "011" + "name" : "011" }, { - "name" : "012", - "id" : "012", "data" : [ [ "Perl", @@ -631,9 +224,12 @@ "Blog", 11 ] - ] + ], + "id" : "012", + "name" : "012" }, { + "name" : "013", "data" : [ [ "Perl", @@ -648,12 +244,11 @@ 13 ] ], - "id" : "013", - "name" : "013" + "id" : "013" }, { - "id" : "014", "name" : "014", + "id" : "014", "data" : [ [ "Perl", @@ -670,6 +265,7 @@ ] }, { + "name" : "015", "data" : [ [ "Perl", @@ -684,7 +280,6 @@ 15 ] ], - "name" : "015", "id" : "015" }, { @@ -707,7 +302,6 @@ }, { "id" : "017", - "name" : "017", "data" : [ [ "Perl", @@ -721,11 +315,11 @@ "Blog", 12 ] - ] + ], + "name" : "017" }, { "id" : "018", - "name" : "018", "data" : [ [ "Perl", @@ -739,9 +333,11 @@ "Blog", 14 ] - ] + ], + "name" : "018" }, { + "name" : "019", "data" : [ [ "Perl", @@ -756,8 +352,7 @@ 13 ] ], - "id" : "019", - "name" : "019" + "id" : "019" }, { "data" : [ @@ -778,7 +373,6 @@ "name" : "020" }, { - "id" : "021", "name" : "021", "data" : [ [ @@ -793,7 +387,8 @@ "Blog", 10 ] - ] + ], + "id" : "021" }, { "data" : [ @@ -810,12 +405,12 @@ 10 ] ], - "name" : "022", - "id" : "022" + "id" : "022", + "name" : "022" }, { - "id" : "023", "name" : "023", + "id" : "023", "data" : [ [ "Perl", @@ -832,8 +427,8 @@ ] }, { - "id" : "024", "name" : "024", + "id" : "024", "data" : [ [ "Perl", @@ -850,8 +445,8 @@ ] }, { - "id" : "025", "name" : "025", + "id" : "025", "data" : [ [ "Perl", @@ -868,6 +463,7 @@ ] }, { + "name" : "026", "data" : [ [ "Perl", @@ -882,10 +478,11 @@ 10 ] ], - "id" : "026", - "name" : "026" + "id" : "026" }, { + "name" : "027", + "id" : "027", "data" : [ [ "Perl", @@ -899,13 +496,10 @@ "Blog", 9 ] - ], - "name" : "027", - "id" : "027" + ] }, { "id" : "028", - "name" : "028", "data" : [ [ "Perl", @@ -919,10 +513,10 @@ "Blog", 9 ] - ] + ], + "name" : "028" }, { - "name" : "029", "id" : "029", "data" : [ [ @@ -937,9 +531,12 @@ "Blog", 12 ] - ] + ], + "name" : "029" }, { + "name" : "030", + "id" : "030", "data" : [ [ "Perl", @@ -953,12 +550,9 @@ "Blog", 10 ] - ], - "id" : "030", - "name" : "030" + ] }, { - "name" : "031", "id" : "031", "data" : [ [ @@ -973,11 +567,10 @@ "Blog", 9 ] - ] + ], + "name" : "031" }, { - "id" : "032", - "name" : "032", "data" : [ [ "Perl", @@ -991,9 +584,12 @@ "Blog", 10 ] - ] + ], + "id" : "032", + "name" : "032" }, { + "id" : "033", "data" : [ [ "Perl", @@ -1008,10 +604,10 @@ 10 ] ], - "id" : "033", "name" : "033" }, { + "id" : "034", "data" : [ [ "Perl", @@ -1026,8 +622,7 @@ 11 ] ], - "name