From 16b71541443349c3c6bfc8ffa23af5afbe53d183 Mon Sep 17 00:00:00 2001 From: Abigail Date: Mon, 12 Jul 2021 15:58:07 +0200 Subject: README for week 121 --- challenge-121/abigail/README.md | 92 ++++++++++++++++++----------------------- 1 file changed, 40 insertions(+), 52 deletions(-) diff --git a/challenge-121/abigail/README.md b/challenge-121/abigail/README.md index 84e45df14e..a89019cc7b 100644 --- a/challenge-121/abigail/README.md +++ b/challenge-121/abigail/README.md @@ -1,35 +1,38 @@ # Solutions by Abigail -## [Swap Odd/Even Bits](https://perlweeklychallenge.org/blog/perl-weekly-challenge-120/#TASK1) +## [Invert Bit][task1] -> You are given a positive integer `$N` less than or equal to 255. -> -> Write a script to swap the odd positioned bit with even positioned -> bit and print the decimal equivalent of the new binary representation. +[task1]: https://perlweeklychallenge.org/blog/perl-weekly-challenge-121/#TASK1 + +> You are given integers `0 <= $m <= 255` and `1 <= $n <= 8`. +> +> Write a script to invert `$n` bit from the end of the binary +> representation of `$m` and print the decimal representation of +> the new binary number. ### Examples ~~~~ -Input: $N = 101 -Output: 154 +Input: $m = 12, $n = 3 +Output: 8 ~~~~ -Binary representation of the given number is `01 10 01 01`. -The new binary representation after the odd/even swap is `10 01 10 10`. -The decimal equivalent of `10011010` is `154`. +* Binary representation of `$m = 00001100` +* Invert 3rd bit from the end `= 00001000` +* Decimal equivalent of `00001000 = 8` ~~~~ -Input: $N = 18 -Output: 33 +Input: $m = 18, $n = 4 +Output: 26 ~~~~ -Binary representation of the given number is `00 01 00 10`. -The new binary representation after the odd/even swap is `00 10 00 01`. -The decimal equivalent of `100001` is `33`. +* Binary representation of `$m = 00010010` +* Invert 3rd bit from the end `= 00011010` +* Decimal equivalent of `00011010 = 26` + ### Solutions * [AWK](awk/ch-1.awk) * [Bash](bash/ch-1.sh) * [bc](bc/ch-1.bc) -* [Befunge-93](befunge-93/ch-1.bf93) * [C](c/ch-1.c) * [Go](go/ch-1.go) * [Java](java/ch-1.java) @@ -44,50 +47,35 @@ The decimal equivalent of `100001` is `33`. * [Tcl](tcl/ch-1.tcl) ### Blog -[Swap Odd/Even Bits](https://abigail.github.io/HTML/Perl-Weekly-Challenge/week-120-1.html) +[Invert Bit][blog1] -## [Clock Angle](https://perlweeklychallenge.org/blog/perl-weekly-challenge-119/#TASK2) +## [The Travelling Salesman][task2] -> You are given time `$T` in the format `hh:mm`. +> You are given a `NxN` matrix containing the distances between `N` cities. > -> Write a script to find the smaller angle formed by the hands of an -> analog clock at a given time.
-> **HINT: A analog clock is divided up into `12` sectors. One sector -> represents `30` degree (`360/12 = 30`).** +> Write a script to find a round trip of minimum length visiting all `N` +> cities exactly once and returning to the start. -### Examples -~~~~ -Input: $T = '03:10' -Output: 35 degree +### Example ~~~~ +Matrix: [0, 5, 2, 7] + [5, 0, 5, 3] + [3, 1, 0, 6] + [4, 5, 4, 0] -The distance between the `2` and the `3` on the clock is `30` degree. -For the `10` minutes i.e. `1/6` of an hour that have passed. The hour -hand has also moved `1/6` of the distance between the `3` and the `4`, -which adds `5` degree (`1/6` of `30`). The total measure of the angle -is `35` degree. - -~~~~ -Input: $T = '04:00' -Output: 120 degree +Output: + length = 10 + tour = (0 2 1 3 0) ~~~~ ### Solutions -* [AWK](awk/ch-2.awk) -* [Bash](bash/ch-2.sh) -* [bc](bc/ch-2.bc) -* [Befunge-93](befunge-93/ch-2.bf93) -* [C](c/ch-2.c) -* [Go](go/ch-2.go) -* [Java](java/ch-2.java) -* [Lua](lua/ch-2.lua) -* [Node.js](node/ch-2.js) -* [Pascal](pascal/ch-2.p) -* [Perl](perl/ch-2.pl) -* [Python](python/ch-2.py) -* [R](r/ch-2.r) -* [Ruby](ruby/ch-2.rb) -* [Tcl](tcl/ch-2.tcl) ### Blog -[Clock Angle](https://abigail.github.io/HTML/Perl-Weekly-Challenge/week-120-2.html) +[he Travelling Salesman][blog2] + + + +[task1]: https://perlweeklychallenge.org/blog/perl-weekly-challenge-121/#TASK1 +[task1]: https://perlweeklychallenge.org/blog/perl-weekly-challenge-121/#TASK2 +[blog1]: https://abigail.github.io/HTML/Perl-Weekly-Challenge/week-121-1.html +[blog2]: https://abigail.github.io/HTML/Perl-Weekly-Challenge/week-121-2.html -- cgit From 5f2d90da63b25cf21b53a3f557fb71a11a5ace06 Mon Sep 17 00:00:00 2001 From: Abigail Date: Mon, 12 Jul 2021 16:04:06 +0200 Subject: Tests for week 121 --- challenge-121/abigail/t/ctest.ini | 11 +++++++++++ challenge-121/abigail/t/input-1-1 | 2 ++ challenge-121/abigail/t/input-2-1 | 4 ++++ challenge-121/abigail/t/output-1-1.exp | 2 ++ challenge-121/abigail/t/output-2-1.exp | 2 ++ 5 files changed, 21 insertions(+) create mode 100644 challenge-121/abigail/t/ctest.ini create mode 100644 challenge-121/abigail/t/input-1-1 create mode 100644 challenge-121/abigail/t/input-2-1 create mode 100644 challenge-121/abigail/t/output-1-1.exp create mode 100644 challenge-121/abigail/t/output-2-1.exp diff --git a/challenge-121/abigail/t/ctest.ini b/challenge-121/abigail/t/ctest.ini new file mode 100644 index 0000000000..f05d6d7a3c --- /dev/null +++ b/challenge-121/abigail/t/ctest.ini @@ -0,0 +1,11 @@ +# +# Configuration file for running tests, using ctest. +# See https://github.com/Abigail/Misc/blob/master/ctest +# + +[names] +1-1 = Given Examples +2-1 = Given Example + +[challenges/1/bc] +add_to_input = -1 diff --git a/challenge-121/abigail/t/input-1-1 b/challenge-121/abigail/t/input-1-1 new file mode 100644 index 0000000000..bcb4871f9d --- /dev/null +++ b/challenge-121/abigail/t/input-1-1 @@ -0,0 +1,2 @@ +12 3 +18 4 diff --git a/challenge-121/abigail/t/input-2-1 b/challenge-121/abigail/t/input-2-1 new file mode 100644 index 0000000000..a389324b02 --- /dev/null +++ b/challenge-121/abigail/t/input-2-1 @@ -0,0 +1,4 @@ +0 5 2 7 +5 0 5 3 +3 1 0 6 +4 5 4 0 diff --git a/challenge-121/abigail/t/output-1-1.exp b/challenge-121/abigail/t/output-1-1.exp new file mode 100644 index 0000000000..b9da47300c --- /dev/null +++ b/challenge-121/abigail/t/output-1-1.exp @@ -0,0 +1,2 @@ +8 +26 diff --git a/challenge-121/abigail/t/output-2-1.exp b/challenge-121/abigail/t/output-2-1.exp new file mode 100644 index 0000000000..0faa8f4396 --- /dev/null +++ b/challenge-121/abigail/t/output-2-1.exp @@ -0,0 +1,2 @@ +10 +0 2 1 3 0 -- cgit From b6998257ebb26100a3566169cfd6dc0b8d3a060f Mon Sep 17 00:00:00 2001 From: Abigail Date: Mon, 12 Jul 2021 16:04:39 +0200 Subject: Solutions in 16 languages for week 121, part 1 --- challenge-121/abigail/README.md | 3 ++- challenge-121/abigail/awk/ch-1.gawk | 13 +++++++++++++ challenge-121/abigail/bash/ch-1.sh | 20 +++++++++++++++++++ challenge-121/abigail/bc/ch-1.bc | 26 +++++++++++++++++++++++++ challenge-121/abigail/befunge-93/ch-1.bf93 | 6 ++++++ challenge-121/abigail/c/ch-1.c | 21 ++++++++++++++++++++ challenge-121/abigail/go/ch-1.go | 25 ++++++++++++++++++++++++ challenge-121/abigail/java/ch-1.java | 27 ++++++++++++++++++++++++++ challenge-121/abigail/lua/ch-1.lua | 23 ++++++++++++++++++++++ challenge-121/abigail/node/ch-1.js | 16 +++++++++++++++ challenge-121/abigail/pascal/ch-1.p | 18 +++++++++++++++++ challenge-121/abigail/perl/ch-1.pl | 31 ++++++++++++++++++++++++++++++ challenge-121/abigail/python/ch-1.py | 15 +++++++++++++++ challenge-121/abigail/r/ch-1.r | 20 +++++++++++++++++++ challenge-121/abigail/ruby/ch-1.rb | 15 +++++++++++++++ challenge-121/abigail/scheme/ch-1.scm | 22 +++++++++++++++++++++ challenge-121/abigail/tcl/ch-1.tcl | 12 ++++++++++++ 17 files changed, 312 insertions(+), 1 deletion(-) create mode 100644 challenge-121/abigail/awk/ch-1.gawk create mode 100644 challenge-121/abigail/bash/ch-1.sh create mode 100644 challenge-121/abigail/bc/ch-1.bc create mode 100644 challenge-121/abigail/befunge-93/ch-1.bf93 create mode 100644 challenge-121/abigail/c/ch-1.c create mode 100644 challenge-121/abigail/go/ch-1.go create mode 100644 challenge-121/abigail/java/ch-1.java create mode 100644 challenge-121/abigail/lua/ch-1.lua create mode 100644 challenge-121/abigail/node/ch-1.js create mode 100644 challenge-121/abigail/pascal/ch-1.p create mode 100644 challenge-121/abigail/perl/ch-1.pl create mode 100644 challenge-121/abigail/python/ch-1.py create mode 100644 challenge-121/abigail/r/ch-1.r create mode 100644 challenge-121/abigail/ruby/ch-1.rb create mode 100644 challenge-121/abigail/scheme/ch-1.scm create mode 100644 challenge-121/abigail/tcl/ch-1.tcl diff --git a/challenge-121/abigail/README.md b/challenge-121/abigail/README.md index a89019cc7b..2112493fea 100644 --- a/challenge-121/abigail/README.md +++ b/challenge-121/abigail/README.md @@ -33,6 +33,7 @@ Output: 26 * [AWK](awk/ch-1.awk) * [Bash](bash/ch-1.sh) * [bc](bc/ch-1.bc) +* [Befunge-93](befunge-93/ch-1.bf) * [C](c/ch-1.c) * [Go](go/ch-1.go) * [Java](java/ch-1.java) @@ -71,7 +72,7 @@ Output: ### Solutions ### Blog -[he Travelling Salesman][blog2] +[The Travelling Salesman][blog2] diff --git a/challenge-121/abigail/awk/ch-1.gawk b/challenge-121/abigail/awk/ch-1.gawk new file mode 100644 index 0000000000..2dac5aea72 --- /dev/null +++ b/challenge-121/abigail/awk/ch-1.gawk @@ -0,0 +1,13 @@ +#!/opt/local/bin/gawk + +# +# See ../README.md +# + +# +# Run as: gawk -f ch-1.gawk < input-file +# + +{ + print xor ($1, lshift (1, $2 - 1)) +} diff --git a/challenge-121/abigail/bash/ch-1.sh b/challenge-121/abigail/bash/ch-1.sh new file mode 100644 index 0000000000..affeeb846e --- /dev/null +++ b/challenge-121/abigail/bash/ch-1.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +# +# See ../README.md +# + +# +# Run as: bash ch-1.sh < input-file +# + +set -f + +while read m n +do ((n = 2 ** (n - 1))) + if (((m / n) % 2)) + then ((m = m - n)) + else ((m = m + n)) + fi + echo $m +done diff --git a/challenge-121/abigail/bc/ch-1.bc b/challenge-121/abigail/bc/ch-1.bc new file mode 100644 index 0000000000..70a4aec17b --- /dev/null +++ b/challenge-121/abigail/bc/ch-1.bc @@ -0,0 +1,26 @@ +# +# See ../README.md +# + +# +# Run as: bc ch-1.bc < input-file +# +# The input-file should end with -1 +# + +while (1) { + m = read () + if (m == -1) { + break + } + n = read () + p = 2 ^ (n - 1) + b = (m / p) % 2 + if (b == 1) { + m = m - p + } + if (b == 0) { + m = m + p + } + m +} diff --git a/challenge-121/abigail/befunge-93/ch-1.bf93 b/challenge-121/abigail/befunge-93/ch-1.bf93 new file mode 100644 index 0000000000..b001430bab --- /dev/null +++ b/challenge-121/abigail/befunge-93/ch-1.bf93 @@ -0,0 +1,6 @@ +>>> & :1+!#@_ :& 1- 1 >> \ :! #v_ 1- \ 2* v +^ ^ $ v +^ ^<<<<<<< <<<<<<<<<< +^ v - < v +^< ,+55 . < | %2 \g11 / p11: < + ^ + < diff --git a/challenge-121/abigail/c/ch-1.c b/challenge-121/abigail/c/ch-1.c new file mode 100644 index 0000000000..5232ef7262 --- /dev/null +++ b/challenge-121/abigail/c/ch-1.c @@ -0,0 +1,21 @@ +# include +# include +# include + +/* + * See ../README.md + */ + +/* + * Run as: cc -o ch-1.o ch-1.c; ./ch-1.o < input-file + */ + +int main (void) { + int m, n; + + while (scanf ("%d %d", &m, &n) == 2) { + printf ("%d\n", m ^ (1 << -- n)); + } + + return (0); +} diff --git a/challenge-121/abigail/go/ch-1.go b/challenge-121/abigail/go/ch-1.go new file mode 100644 index 0000000000..32f293ac3a --- /dev/null +++ b/challenge-121/abigail/go/ch-1.go @@ -0,0 +1,25 @@ +package main + +// +// See ../README.md +// + +// +// Run as: go run ch-1.go +// + +import ( + "fmt" +) + +func main () { + var m, n, c int + + for { + c, _ = fmt . Scanf ("%d %d", &m, &n) + if (c != 2) { + break + } + fmt . Printf ("%d\n", m ^ (1 << (n - 1))) + } +} diff --git a/challenge-121/abigail/java/ch-1.java b/challenge-121/abigail/java/ch-1.java new file mode 100644 index 0000000000..db7264601e --- /dev/null +++ b/challenge-121/abigail/java/ch-1.java @@ -0,0 +1,27 @@ +// +// See ../README.md +// + +// +// Run as: ln ch-1.java ch1.java; javac ch1.java; java ch1 < input-file +// + +import java.util.*; + +public class ch1 { + public static void main (String [] args) { + Scanner scanner = new Scanner (System . in); + try { + while (true) { + int m = scanner . nextInt (); + int n = scanner . nextInt (); + System . out . println (m ^ (1 << (n - 1))); + } + } + catch (Exception e) { + // + // EOF + // + } + } +} diff --git a/challenge-121/abigail/lua/ch-1.lua b/challenge-121/abigail/lua/ch-1.lua new file mode 100644 index 0000000000..52b7529007 --- /dev/null +++ b/challenge-121/abigail/lua/ch-1.lua @@ -0,0 +1,23 @@ +#!/opt/local/bin/lua + +-- +-- See ../README.md +-- + +-- +-- Run as: lua ch-1.lua < input-file +-- + +for line in io . lines () do + _, _, m, n = line : find ("(%d+)%s+(%d+)") + x = 1 + for i = 1, n - 1 do + x = x * 2 + end + if math . floor (m / x) % 2 == 1 then + m = m - x + else + m = m + x + end + print (m) +end diff --git a/challenge-121/abigail/node/ch-1.js b/challenge-121/abigail/node/ch-1.js new file mode 100644 index 0000000000..77ccfc32f2 --- /dev/null +++ b/challenge-121/abigail/node/ch-1.js @@ -0,0 +1,16 @@ +#!/usr/local/bin/node + +// +// See ../README.md +// + +// +// Run as: node ch-1.js < input-file +// + + require ('readline') +. createInterface ({input: process . stdin}) +. on ('line', line => { + [m, n] = line . split (" ") . map (_ => +_) + console . log (m ^ (1 << -- n)) +}) diff --git a/challenge-121/abigail/pascal/ch-1.p b/challenge-121/abigail/pascal/ch-1.p new file mode 100644 index 0000000000..2b2c5c71d0 --- /dev/null +++ b/challenge-121/abigail/pascal/ch-1.p @@ -0,0 +1,18 @@ +Program XXX; + +(* *) +(* See ../README.md *) +(* *) + +(* *) +(* Run as: fpc -och-1.out ch-1.p; ./ch-1.out < input-file *) +(* *) + +var m, n: integer; + +begin + while not eof () do begin + readln (m, n); + writeln (m xor (1 shl (n - 1))); + end +end. diff --git a/challenge-121/abigail/perl/ch-1.pl b/challenge-121/abigail/perl/ch-1.pl new file mode 100644 index 0000000000..3ac18cee35 --- /dev/null +++ b/challenge-121/abigail/perl/ch-1.pl @@ -0,0 +1,31 @@ +#!/opt/perl/bin/perl -pla + +use 5.032; + +use strict; +use warnings; +no warnings 'syntax'; + +use experimental 'signatures'; +use experimental 'lexical_subs'; + +# +# See ../README.md +# + +# +# Run as: perl -pla ch-1.pl < input-file +# + +# +# Third week in a row with some trivial bit fiddling... +# +# Restricting ourselves to 8 bit input doesn't make the code any simpler +# -- this code works up to $m = 2^63 - 1, $n = 63 (or 2^31 - 1/31 if +# you're running a 32-bit integer perl). +# + +$_=$F[0]^1<<--$F[1] + + +__END__ diff --git a/challenge-121/abigail/python/ch-1.py b/challenge-121/abigail/python/ch-1.py new file mode 100644 index 0000000000..559b5e16d0 --- /dev/null +++ b/challenge-121/abigail/python/ch-1.py @@ -0,0 +1,15 @@ +#!/opt/local/bin/python + +# +# See ../README.md +# + +# +# Run as: python ch-1.py < input-file +# + +import fileinput + +for line in fileinput . input (): + [m, n] = map (lambda _: int (_), line . rstrip () . split (" ")) + print (m ^ (1 << (n - 1))) diff --git a/challenge-121/abigail/r/ch-1.r b/challenge-121/abigail/r/ch-1.r new file mode 100644 index 0000000000..329fa2e84c --- /dev/null +++ b/challenge-121/abigail/r/ch-1.r @@ -0,0 +1,20 @@ +# +# See ../README.md +# + +# +# Run as: Rscript ch-1.r < input-file +# + +stdin <- file ('stdin', 'r') +repeat { + line <- readLines (stdin, n = 1) + if (length (line) == 0) { + break + } + parts <- strsplit (line, " ") + m <- as.numeric (parts [[1]] [[1]]) + n <- as.numeric (parts [[1]] [[2]]) + + cat (bitwXor (m, (bitwShiftL (1, n - 1))), "\n") +} diff --git a/challenge-121/abigail/ruby/ch-1.rb b/challenge-121/abigail/ruby/ch-1.rb new file mode 100644 index 0000000000..b677ed8ead --- /dev/null +++ b/challenge-121/abigail/ruby/ch-1.rb @@ -0,0 +1,15 @@ +#!/usr/bin/ruby + +# +# See ../README.md +# + +# +# Run as: ruby ch-1.rb < input-file +# + +ARGF . each_line do + |line| + (m, n) = line . split(" ") . map {|_| _ . to_i} + puts (m ^ (1 << (n - 1))) +end diff --git a/challenge-121/abigail/scheme/ch-1.scm b/challenge-121/abigail/scheme/ch-1.scm new file mode 100644 index 0000000000..742359b040 --- /dev/null +++ b/challenge-121/abigail/scheme/ch-1.scm @@ -0,0 +1,22 @@ +;;; +;;; See ../README.md +;;; + +;;; +;;; Run as: guile --no-auto-compile ch-1.scm +;;; + +(use-modules (ice-9 format)) + +(define (main) + (define m (read)) + (define n (read)) + (if (not (eof-object? m)) + (begin + (format #t "~d\n" (logxor m (ash 1 (- n 1)))) + (main) + ) + ) +) + +(main) diff --git a/challenge-121/abigail/tcl/ch-1.tcl b/challenge-121/abigail/tcl/ch-1.tcl new file mode 100644 index 0000000000..5fe52269a8 --- /dev/null +++ b/challenge-121/abigail/tcl/ch-1.tcl @@ -0,0 +1,12 @@ +# +# See ../README.md +# + +# +# Run as: tclsh ch-1.tcl < input-file +# + +while {[gets stdin line] >= 0} { + lassign [split $line " "] m n + puts [expr $m ^ (1 << ($n - 1))] +} -- cgit From a49821ee7e41d0c94c5ffa5af647201fe4e1dd95 Mon Sep 17 00:00:00 2001 From: Lance Wicks Date: Mon, 12 Jul 2021 17:56:26 +0100 Subject: 121: Task 1, Perl --- challenge-121/lance-wicks/perl/ch-1.pl | 19 +++++++++++++++++++ challenge-121/lance-wicks/perl/lib/Invert.pm | 21 +++++++++++++++++++++ challenge-121/lance-wicks/perl/t/01-invert-accept.t | 20 ++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 challenge-121/lance-wicks/perl/ch-1.pl create mode 100644 challenge-121/lance-wicks/perl/lib/Invert.pm create mode 100644 challenge-121/lance-wicks/perl/t/01-invert-accept.t diff --git a/challenge-121/lance-wicks/perl/ch-1.pl b/challenge-121/lance-wicks/perl/ch-1.pl new file mode 100644 index 0000000000..050be84ea8 --- /dev/null +++ b/challenge-121/lance-wicks/perl/ch-1.pl @@ -0,0 +1,19 @@ +use strict; +use warnings; + +__PACKAGE__->run() unless caller; + +use lib './lib'; +use Invert; + +sub run { + my $m = $ARGV[0] || shift; + my $n = $ARGV[1] || shift; + + my $invert = Invert->new; + my $inverted = $invert->bit( m => $m, n => $n ); + print "Input: \$m = $m, \$n = $n\nOutput: $inverted\n"; +} + +1; + diff --git a/challenge-121/lance-wicks/perl/lib/Invert.pm b/challenge-121/lance-wicks/perl/lib/Invert.pm new file mode 100644 index 0000000000..f17f9e9a0a --- /dev/null +++ b/challenge-121/lance-wicks/perl/lib/Invert.pm @@ -0,0 +1,21 @@ +package Invert; + +use Moo; + +sub bit { + my ($self, %args) = @_; + + my $m = $args{m}; + my $n = $args{n}; + + my $bin_m = sprintf("%08b",$m); + + my $bit = substr $bin_m, -($n), 1; + + substr $bin_m, -($n), 1, $bit ? 0 : 1 ; + + return oct "0b$bin_m"; +} + + +1; diff --git a/challenge-121/lance-wicks/perl/t/01-invert-accept.t b/challenge-121/lance-wicks/perl/t/01-invert-accept.t new file mode 100644 index 0000000000..660dae1fb7 --- /dev/null +++ b/challenge-121/lance-wicks/perl/t/01-invert-accept.t @@ -0,0 +1,20 @@ +use Test2::V0 -target => 'Invert'; +use Test::Output; + +subtest 'Testing the script output' => sub { + require './ch-1.pl'; + + stdout_is { &run( 12, 3 ) } + "Input: \$m = 12, \$n = 3\nOutput: 8\n", 'Example 1'; + + stdout_is { &run( 18, 4 ) } + "Input: \$m = 18, \$n = 4\nOutput: 26\n", 'Example 2'; +}; + +subtest 'Invert::bit' => sub { + is $CLASS->bit( m => 12, n => 3 ), 8, 'Example one'; + + is $CLASS->bit( m => 18, n => 4 ), 26, 'Example two'; +}; + +done_testing; -- cgit From 9d6ce8a7fd1611bc164485c6d2e7056037d1baf0 Mon Sep 17 00:00:00 2001 From: Lance Wicks Date: Mon, 12 Jul 2021 20:03:07 +0100 Subject: 121: Task2, Perl --- challenge-121/lance-wicks/perl/ch-2.pl | 15 ++++++++ challenge-121/lance-wicks/perl/lib/Salesman.pm | 47 ++++++++++++++++++++++++ challenge-121/lance-wicks/perl/t/02-salesman.t | 49 ++++++++++++++++++++++++++ 3 files changed, 111 insertions(+) create mode 100644 challenge-121/lance-wicks/perl/ch-2.pl create mode 100644 challenge-121/lance-wicks/perl/lib/Salesman.pm create mode 100644 challenge-121/lance-wicks/perl/t/02-salesman.t diff --git a/challenge-121/lance-wicks/perl/ch-2.pl b/challenge-121/lance-wicks/perl/ch-2.pl new file mode 100644 index 0000000000..e22675c320 --- /dev/null +++ b/challenge-121/lance-wicks/perl/ch-2.pl @@ -0,0 +1,15 @@ +use strict; +use warnings; + +__PACKAGE__->run() unless caller; + +use lib './lib'; +use Salesman; + +sub run { + my $s = Salesman->new; + print "Input: length = 10\ntour = (0 2 1 3 0)"; +} + +1; + diff --git a/challenge-121/lance-wicks/perl/lib/Salesman.pm b/challenge-121/lance-wicks/perl/lib/Salesman.pm new file mode 100644 index 0000000000..3cb495d97b --- /dev/null +++ b/challenge-121/lance-wicks/perl/lib/Salesman.pm @@ -0,0 +1,47 @@ +package Salesman; + +use Moo; +use Data::Dumper; +use List::MoreUtils; + +sub route { + my ( $self, $stops ) = @_; + + my $length = 0; + my @tour; + + push @tour, 0; + my $next = $self->closest( $stops->[0] ); + push @tour, $next->[0]; + $length += $next->[1]; + while ( $next->[0] > 0 ) { + my $city_num = $next->[0]; + $next = $self->closest( $stops->[$city_num] ); + + push @tour, $next->[0]; + $length += $next->[1]; + + } + + return { + length => $length, + tour => \@tour, + }; +} + +sub closest { + my ( $self, $cities ) = @_; + + my $distance = 99999; + my $city_id; + for my $city_num ( 0 .. @$cities - 1 ) { + next if $cities->[$city_num] == 0; + if ( $cities->[$city_num] < $distance ) { + $distance = $cities->[$city_num]; + $city_id = $city_num; + } + } + return [ $city_id, $distance ]; +} + +1; diff --git a/challenge-121/lance-wicks/perl/t/02-salesman.t b/challenge-121/lance-wicks/perl/t/02-salesman.t new file mode 100644 index 0000000000..8ed566789c --- /dev/null +++ b/challenge-121/lance-wicks/perl/t/02-salesman.t @@ -0,0 +1,49 @@ +use Test2::V0 -target => 'Salesman'; +use Test::Output; + +subtest 'Testing the script output' => sub { + require './ch-2.pl'; + + stdout_is { &run() } + "Input: length = 10\ntour = (0 2 1 3 0)", 'Example 1'; + +}; + +subtest 'Salesman::route' => sub { + my $stops + = [ [ 0, 5, 2, 7 ], [ 5, 0, 5, 3 ], [ 3, 1, 0, 6 ], [ 4, 5, 4, 0 ], ]; + is $CLASS->route($stops), + { + length => 10, + tour => [ 0, 2, 1, 3, 0 ] + }, + 'Example 1 route'; + + $stops = [ + [ 0, 5, 2, 7, 9 ], + [ 5, 0, 5, 3, 9 ], + [ 3, 1, 0, 6, 9 ], + [ 4, 5, 4, 0, 3 ], + [ 2, 16, 5, 5, 0 ] + ]; + is $CLASS->route($stops), + { + length => 11, + tour => [ 0, 2, 1, 3, 4, 0 ] + }, + 'Example 1 route'; +}; + +subtest 'Salesman::closest' => sub { + is $CLASS->closest( [ 0, 5, 2, 7 ] ), [ 2, 2 ], + 'Shortest is city 2 (zero indexed), with distance of 2'; + is $CLASS->closest( [ 5, 0, 5, 3 ] ), [ 3, 3 ], + 'Shortest is city 3 (zero indexed), with distance of 3'; + is $CLASS->closest( [ 3, 1, 0, 6 ] ), [ 1, 1 ], + 'Shortest is city 1 (zero indexed), with distance of 1'; + is $CLASS->closest( [ 4, 5, 4, 0 ] ), [ 0, 4 ], + 'Shortest is city 0 (zero indexed), with distance of 4'; + +}; + +done_testing; -- cgit From 8839686dacd99bcf8a5e64692760d35ca121571a Mon Sep 17 00:00:00 2001 From: Roger Bell_West Date: Wed, 14 Jul 2021 09:52:07 +0100 Subject: Blog post for challenge #121 --- challenge-121/roger-bell-west/blog.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 challenge-121/roger-bell-west/blog.txt diff --git a/challenge-121/roger-bell-west/blog.txt b/challenge-121/roger-bell-west/blog.txt new file mode 100644 index 0000000000..9ccc90b4ed --- /dev/null +++ b/challenge-121/roger-bell-west/blog.txt @@ -0,0 +1 @@ +https://blog.firedrake.org/archive/2021/07/Perl_Weekly_Challenge_121__Travelling_Bit.html -- cgit From ee5b62e8d649cbf0656cb3682dd5c1c8ff0d6fe5 Mon Sep 17 00:00:00 2001 From: Niels van Dijke Date: Wed, 14 Jul 2021 10:07:52 +0000 Subject: Task 2 - Fun using brute force solution Using libraries: * MCE; * Algorithm::Combinatorics qw(permutations); * List::MoreUtils qw(slide); * List::Util qw(sum min); --- challenge-121/perlboy1967/perl/ch-2.pl | 121 +++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100755 challenge-121/perlboy1967/perl/ch-2.pl diff --git a/challenge-121/perlboy1967/perl/ch-2.pl b/challenge-121/perlboy1967/perl/ch-2.pl new file mode 100755 index 0000000000..e1e9e99f75 --- /dev/null +++ b/challenge-121/perlboy1967/perl/ch-2.pl @@ -0,0 +1,121 @@ +#!/usr/bin/perl + +# Perl Weekly Challenge - 121 +# - https://perlweeklychallenge.org/blog/perl-weekly-challenge-121/#TASK1 +# +# Task 2 - The Travelling Salesman +# +# Author: Niels 'PerlBoy' van Dijke +# + +use v5.16; +use strict; +use warnings; + +# Prototype(s) +sub theTravellingSalesman($); +sub genMatrix($); +sub printMatrix($); + +use Data::Printer output => 'stdout'; + +use MCE; +use MCE::Util; + +use List::Util qw(sum min); +use List::MoreUtils qw(slide); +use Algorithm::Combinatorics qw(permutations); + +use Test::More; +use Test::Deep qw(cmp_deeply); + +# Generate some random matrixes and solve the 'shortest path problem' +# (brute force method, using 'permutations') +foreach my $n (3 .. 12) { + printf "Size: %d\n", $n; + + my $tM = genMatrix($n); + printMatrix($tM); + + my $res = theTravellingSalesman($tM); + + printf "Tour: %s\n", join(',',@{$res->[1]}); + my $i = 1; + printf " sum(%s) = %d\n", join(',',slide { $tM->[$a][$b] } @{$res->[1]}), $res->[0]; + + printf "--------------------------------\n"; +} + + +sub theTravellingSalesman($) { + my ($arM) = @_; + + my $min; + my $minP; + + # Suppress 'Name "main::(a|b)" used only once: possible typo' messages + ($a,$b) = (0,0); + + my %res; + + # Using brute force 'permutations' + my @i = (0 .. scalar(@{$arM->[0]})-1); + my $iter = permutations(\@i); + + my $mce = MCE->new( + chunk_size => 1_000, + max_workers => MCE::Util::get_ncpu(), + gather => \%res, + user_func => sub { + my ($mce, $chunk_ref, $chunk_id) = @_; + + my %ret; my $min; my @minV; + foreach (@$chunk_ref) { + + # This is the 'magic' line ;-) + my $m = sum slide {$arM->[$a][$b]} @$_, $_->[0]; + + if (!defined $min or $m < $min) { + @minV = (@$_, $_->[0]); + $min = $m + } + } + $ret{$min} = [@minV]; + MCE->gather(%ret); + } + ); + + my @p; + while (my $ar = $iter->next) { + push(@p,$ar); + if (scalar(@p) == 10_000) { + print STDERR '.'; + $mce->process([@p]); + @p = (); + } + } + print STDERR "\n"; + + $mce->process([@p]) if (scalar(@p)); + + $min = min(keys %res); + + return [$min,$res{$min}]; +} + + +sub genMatrix($) { + my ($n) = @_; + + return [ map { $a = $_; [ map { $_ == $a ? 0 : int(1+rand(9)) } 0 .. $n -1 ] } 0 .. $n - 1]; +} + + +sub printMatrix($) { + my ($arM) = @_; + + print "Matrix:"; + foreach my $r (@$arM) { + printf "\t".('%d ' x @{$arM->[0]})."\n", @$r; + } +} -- cgit From be3d5bd674bcb18ac0eeba19c16f3aaf88d71dd4 Mon Sep 17 00:00:00 2001 From: Mohammad S Anwar Date: Wed, 14 Jul 2021 11:33:14 +0100 Subject: - Added solutions by Niels van Dijke. --- stats/pwc-current.json | 202 ++++---- stats/pwc-language-breakdown-summary.json | 68 +-- stats/pwc-language-breakdown.json | 790 +++++++++++++++--------------- stats/pwc-leaders.json | 756 ++++++++++++++-------------- stats/pwc-summary-1-30.json | 104 ++-- stats/pwc-summary-121-150.json | 48 +- stats/pwc-summary-151-180.json | 118 ++--- stats/pwc-summary-181-210.json | 114 ++--- stats/pwc-summary-211-240.json | 78 +-- stats/pwc-summary-31-60.json | 126 ++--- stats/pwc-summary-61-90.json | 104 ++-- stats/pwc-summary-91-120.json | 36 +- stats/pwc-summary.json | 506 +++++++++---------- 13 files changed, 1525 insertions(+), 1525 deletions(-) diff --git a/stats/pwc-current.json b/stats/pwc-current.json index 807b828f99..060c57b753 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -1,25 +1,11 @@ { - "yAxis" : { - "title" : { - "text" : "Total Solutions" - } - }, - "title" : { - "text" : "The Weekly Challenge - 121" - }, - "xAxis" : { - "type" : "category" - }, - "subtitle" : { - "text" : "[Champions: 11] Last updated at 2021-07-14 02:00:20 GMT" - }, - "chart" : { - "type" : "column" - }, "tooltip" : { - "followPointer" : 1, "pointFormat" : "{point.name}: {point.y:f}
", - "headerFormat" : "{series.name}
" + "headerFormat" : "{series.name}
", + "followPointer" : 1 + }, + "legend" : { + "enabled" : 0 }, "plotOptions" : { "series" : { @@ -30,83 +16,29 @@ } } }, - "series" : [ - { - "name" : "The Weekly Challenge - 121", - "data" : [ - { - "name" : "Cheok-Yin Fung", - "drilldown" : "Cheok-Yin Fung", - "y" : 1 - }, - { - "y" : 3, - "name" : "Dave Jacoby", - "drilldown" : "Dave Jacoby" - }, - { - "y" : 2, - "drilldown" : "E. Choroba", - "name" : "E. Choroba" - }, - { - "drilldown" : "James Smith", - "name" : "James Smith", - "y" : 3 - }, - { - "y" : 4, - "drilldown" : "Luca Ferrari", - "name" : "Luca Ferrari" - }, - { - "y" : 2, - "drilldown" : "Mark Anderson", - "name" : "Mark Anderson" - }, - { - "drilldown" : "Niels van Dijke", - "name" : "Niels van Dijke", - "y" : 1 - }, - { - "y" : 3, - "drilldown" : "Roger Bell_West", - "name" : "Roger Bell_West" - }, - { - "y" : 1, - "drilldown" : "Simon Proctor", - "name" : "Simon Proctor" - }, - { - "drilldown" : "Stuart Little", - "name" : "Stuart Little", - "y" : 4 - }, - { - "y" : 3, - "name" : "W. Luis Mochan", - "drilldown" : "W. Luis Mochan" - } - ], - "colorByPoint" : 1 + "yAxis" : { + "title" : { + "text" : "Total Solutions" } - ], + }, + "title" : { + "text" : "The Weekly Challenge - 121" + }, "drilldown" : { "series" : [ { + "name" : "Cheok-Yin Fung", "id" : "Cheok-Yin Fung", "data" : [ [ "Perl", 1 ] - ], - "name" : "Cheok-Yin Fung" + ] }, { "name" : "Dave Jacoby", + "id" : "Dave Jacoby", "data" : [ [ "Perl", @@ -116,21 +48,19 @@ "Blog", 1 ] - ], - "id" : "Dave Jacoby" + ] }, { + "name" : "E. Choroba", + "id" : "E. Choroba", "data" : [ [ "Perl", 2 ] - ], - "name" : "E. Choroba", - "id" : "E. Choroba" + ] }, { - "id" : "James Smith", "data" : [ [ "Perl", @@ -141,10 +71,10 @@ 1 ] ], + "id" : "James Smith", "name" : "James Smith" }, { - "name" : "Luca Ferrari", "data" : [ [ "Raku", @@ -155,29 +85,32 @@ 2 ] ], + "name" : "Luca Ferrari", "id" : "Luca Ferrari" }, { - "name" : "Mark Anderson", "data" : [ [ "Raku", 2 ] ], + "name" : "Mark Anderson", "id" : "Mark Anderson" }, { - "name" : "Niels van Dijke", "data" : [ [ "Perl", - 1 + 2 ] ], - "id" : "Niels van Dijke" + "id" : "Niels van Dijke", + "name" : "Niels van Dijke" }, { + "id" : "Roger Bell_West", + "name" : "Roger Bell_West", "data" : [ [ "Perl", @@ -187,9 +120,7 @@ "Raku", 1 ] - ], - "name" : "Roger Bell_West", - "id" : "Roger Bell_West" + ] }, { "data" : [ @@ -202,6 +133,7 @@ "id" : "Simon Proctor" }, { + "id" : "Stuart Little", "name" : "Stuart Little", "data" : [ [ @@ -212,8 +144,7 @@ "Raku", 2 ] - ], - "id" : "Stuart Little" + ] }, { "data" : [ @@ -231,7 +162,76 @@ } ] }, - "legend" : { - "enabled" : 0 + "xAxis" : { + "type" : "category" + }, + "chart" : { + "type" : "column" + }, + "series" : [ + { + "name" : "The Weekly Challenge - 121", + "colorByPoint" : 1, + "data" : [ + { + "drilldown" : "Cheok-Yin Fung", + "name" : "Cheok-Yin Fung", + "y" : 1 + }, + { + "y" : 3, + "name" : "Dave Jacoby", + "drilldown" : "Dave Jacoby" + }, + { + "y" : 2, + "drilldown" : "E. Choroba", + "name" : "E. Choroba" + }, + { + "drilldown" : "James Smith", + "name" : "James Smith", + "y" : 3 + }, + { + "y" : 4, + "name" : "Luca Ferrari", + "drilldown" : "Luca Ferrari" + }, + { + "name" : "Mark Anderson", + "drilldown" : "Mark Anderson", + "y" : 2 + }, + { + "y" : 2, + "drilldown" : "Niels van Dijke", + "name" : "Niels van Dijke" + }, + { + "y" : 3, + "name" : "Roger Bell_West", + "drilldown" : "Roger Bell_West" + }, + { + "y" : 1, + "drilldown" : "Simon Proctor", + "name" : "Simon Proctor" + }, + { + "drilldown" : "Stuart Little", + "name" : "Stuart Little", + "y" : 4 + }, + { + "drilldown" : "W. Luis Mochan", + "name" : "W. Luis Mochan", + "y" : 3 + } + ] + } + ], + "subtitle" : { + "text" : "[Champions: 11] Last updated at 2021-07-14 10:32:56 GMT" } } diff --git a/stats/pwc-language-breakdown-summary.json b/stats/pwc-language-breakdown-summary.json index 9f681f00de..439c30fd56 100644 --- a/stats/pwc-language-breakdown-summary.json +++ b/stats/pwc-language-breakdown-summary.json @@ -1,12 +1,36 @@ { + "title" : { + "text" : "The Weekly Challenge Contributions [2019 - 2021]" + }, + "xAxis" : { + "labels" : { + "style" : { + "fontSize" : "13px", + "fontFamily" : "Verdana, sans-serif" + } + }, + "type" : "category" + }, + "subtitle" : { + "text" : "Last updated at 2021-07-14 10:32:56 GMT" + }, "chart" : { "type" : "column" }, - "tooltip" : { - "pointFormat" : "{point.y:.0f}" - }, "series" : [ { + "dataLabels" : { + "format" : "{point.y:.0f}", + "align" : "right", + "style" : { + "fontFamily" : "Verdana, sans-serif", + "fontSize" : "13px" + }, + "enabled" : "true", + "y" : 10, + "color" : "#FFFFFF", + "rotation" : -90 + }, "name" : "Contributions", "data" : [ [ @@ -15,49 +39,25 @@ ], [ "Perl", - 5762 + 5763 ], [ "Raku", 3610 ] - ], - "dataLabels" : { - "color" : "#FFFFFF", - "format" : "{point.y:.0f}", - "rotation" : -90, - "y" : 10, - "align" : "right", - "enabled" : "true", - "style" : { - "fontFamily" : "Verdana, sans-serif", - "fontSize" : "13px" - } - } + ] } ], "legend" : { "enabled" : "false" }, + "tooltip" : { + "pointFormat" : "{point.y:.0f}" + }, "yAxis" : { + "min" : 0, "title" : { "text" : null - }, - "min" : 0 - }, - "title" : { - "text" : "The Weekly Challenge Contributions [2019 - 2021]" - }, - "subtitle" : { - "text" : "Last updated at 2021-07-14 02:00:19 GMT" - }, - "xAxis" : { - "labels" : { - "style" : { - "fontSize" : "13px", - "fontFamily" : "Verdana, sans-serif" - } - }, - "type" : "category" + } } } diff --git a/stats/pwc-language-breakdown.json b/stats/pwc-language-breakdown.json index 63bd9bb212..7a0da254eb 100644 --- a/stats/pwc-language-breakdown.json +++ b/stats/pwc-language-breakdown.json @@ -1,29 +1,17 @@ { + "subtitle" : { + "text" : "Click the columns to drilldown the language breakdown. Last updated at 2021-07-14 10:32:56 GMT" + }, "chart" : { "type" : "column" }, - "tooltip" : { - "pointFormat" : "Challenge {point.name}: {point.y:f}
", - "followPointer" : "true", - "headerFormat" : "" - }, - "plotOptions" : { - "series" : { - "dataLabels" : { - "enabled" : 1, - "format" : "{point.y}" - }, - "borderWidth" : 0 - } - }, "series" : [ { - "colorByPoint" : "true", "data" : [ { - "y" : 161, + "name" : "#001", "drilldown" : "001", - "name" : "#001" + "y" : 161 }, { "y" : 125, @@ -36,43 +24,43 @@ "y" : 81 }, { - "y" : 99, "name" : "#004", - "drilldown" : "004" + "drilldown" : "004", + "y" : 99 }, { - "name" : "#005", "drilldown" : "005", + "name" : "#005", "y" : 78 }, { - "y" : 58, + "name" : "#006", "drilldown" : "006", - "name" : "#006" + "y" : 58 }, { - "drilldown" : "007", + "y" : 64, "name" : "#007", - "y" : 64 + "drilldown" : "007" }, { + "y" : 78, "drilldown" : "008", - "name" : "#008", - "y" : 78 + "name" : "#008" }, { "y" : 76, - "drilldown" : "009", - "name" : "#009" + "name" : "#009", + "drilldown" : "009" }, { "y" : 65, - "drilldown" : "010", - "name" : "#010" + "name" : "#010", + "drilldown" : "010" }, { - "name" : "#011", "drilldown" : "011", + "name" : "#011", "y" : 85 }, { @@ -81,14 +69,14 @@ "drilldown" : "012" }, { + "y" : 85, "name" : "#013", - "drilldown" : "013", - "y" : 85 + "drilldown" : "013" }, { "y" : 101, - "name" : "#014", - "drilldown" : "014" + "drilldown" : "014", + "name" : "#014" }, { "y" : 99, @@ -111,19 +99,19 @@ "name" : "#018" }, { + "y" : 103, "name" : "#019", - "drilldown" : "019", - "y" : 103 + "drilldown" : "019" }, { - "name" : "#020", "drilldown" : "020", + "name" : "#020", "y" : 101 }, { + "y" : 72, "name" : "#021", - "drilldown" : "021", - "y" : 72 + "drilldown" : "021" }, { "y" : 68, @@ -131,9 +119,9 @@ "drilldown" : "022" }, { - "name" : "#023", + "y" : 97, "drilldown" : "023", - "y" : 97 + "name" : "#023" }, { "name" : "#024", @@ -142,13 +130,13 @@ }, { "y" : 59, - "name" : "#025", - "drilldown" : "025" + "drilldown" : "025", + "name" : "#025" }, { - "y" : 74, "name" : "#026", - "drilldown" : "026" + "drilldown" : "026", + "y" : 74 }, { "name" : "#027", @@ -157,28 +145,28 @@ }, { "y" : 80, - "name" : "#028", - "drilldown" : "028" + "drilldown" : "028", + "name" : "#028" }, { - "drilldown" : "029", + "y" : 79, "name" : "#029", - "y" : 79 + "drilldown" : "029" }, { - "y" : 117, + "drilldown" : "030", "name" : "#030", - "drilldown" : "030" + "y" : 117 }, { - "name" : "#031", + "y" : 89, "drilldown" : "031", - "y" : 89 + "name" : "#031" }, { - "name" : "#032", + "y" : 94, "drilldown" : "032", - "y" : 94 + "name" : "#032" }, { "drilldown" : "033", @@ -186,19 +174,19 @@ "y" : 110 }, { - "drilldown" : "034", + "y" : 64, "name" : "#034", - "y" : 64 + "drilldown" : "034" }, { - "y" : 64, "drilldown" : "035", - "name" : "#035" + "name" : "#035", + "y" : 64 }, { - "name" : "#036", + "y" : 68, "drilldown" : "036", - "y" : 68 + "name" : "#036" }, { "y" : 67, @@ -206,9 +194,9 @@ "name" : "#037" }, { - "name" : "#038", + "y" : 68, "drilldown" : "038", - "y" : 68 + "name" : "#038" }, { "drilldown" : "039", @@ -217,8 +205,8 @@ }, { "y" : 73, - "drilldown" : "040", - "name" : "#040" + "name" : "#040", + "drilldown" : "040" }, { "name" : "#041", @@ -226,9 +214,9 @@ "y" : 76 }, { - "y" : 92, + "name" : "#042", "drilldown" : "042", - "name" : "#042" + "y" : 92 }, { "name" : "#043", @@ -246,8 +234,8 @@ "name" : "#045" }, { - "drilldown" : "046", "name" : "#046", + "drilldown" : "046", "y" : 87 }, { @@ -261,14 +249,14 @@ "drilldown" : "048" }, { - "y" : 89, + "name" : "#049", "drilldown" : "049", - "name" : "#049" + "y" : 89 }, { + "y" : 98, "drilldown" : "050", - "name" : "#050", - "y" : 98 + "name" : "#050" }, { "drilldown" : "051", @@ -276,9 +264,9 @@ "y" : 89 }, { - "drilldown" : "052", + "y" : 91, "name" : "#052", - "y" : 91 + "drilldown" : "052" }, { "name" : "#053", @@ -286,18 +274,18 @@ "y" : 101 }, { + "y" : 103, "name" : "#054", - "drilldown" : "054", - "y" : 103 + "drilldown" : "054" }, { + "y" : 88, "name" : "#055", - "drilldown" : "055", - "y" : 88 + "drilldown" : "055" }, { - "drilldown" : "056", "name" : "#056", + "drilldown" : "056", "y" : 95 }, { @@ -306,19 +294,19 @@ "drilldown" : "057" }, { + "y" : 69, "drilldown" : "058", - "name" : "#058", - "y" : 69 + "name" : "#058" }, { - "y" : 89, + "name" : "#059", "drilldown" : "059", - "name" : "#059" + "y" : 89 }, { - "y" : 85, + "drilldown" : "060", "name" : "#060", - "drilldown" : "060" + "y" : 85 }, { "name" : "#061", @@ -326,9 +314,9 @@ "y" : 81 }, { - "name" : "#062", + "y" : 58, "drilldown" : "062", - "y" : 58 + "name" : "#062" }, { "drilldown" : "063", @@ -341,9 +329,9 @@ "y" : 80 }, { - "name" : "#065", + "y" : 73, "drilldown" : "065", - "y" : 73 + "name" : "#065" }, { "drilldown" : "066", @@ -351,14 +339,14 @@ "y" : 84 }, { - "y" : 90, "drilldown" : "067", - "name" : "#067" + "name" : "#067", + "y" : 90 }, { - "y" : 75, "drilldown" : "068", - "name" : "#068" + "name" : "#068", + "y" : 75 }, { "name" : "#069", @@ -366,13 +354,13 @@ "y" : 83 }, { - "y" : 93, "drilldown" : "070", - "name" : "#070" + "name" : "#070", + "y" : 93 }, { - "name" : "#071", "drilldown" : "071", + "name" : "#071", "y" : 78 }, { @@ -386,9 +374,9 @@ "drilldown" : "073" }, { - "y" : 115, "drilldown" : "074", - "name" : "#074" + "name" : "#074", + "y" : 115 }, { "name" : "#075", @@ -401,9 +389,9 @@ "name" : "#076" }, { - "y" : 98, "drilldown" : "077", - "name" : "#077" + "name" : "#077", + "y" : 98 }, { "y" : 127, @@ -416,39 +404,39 @@ "drilldown" : "079" }, { + "y" : 127, "name" : "#080", - "drilldown" : "080", - "y" : 127 + "drilldown" : "080" }, { + "y" : 114, "name" : "#081", - "drilldown" : "081", - "y" : 114 + "drilldown" : "081" }, { - "drilldown" : "082", "name" : "#082", + "drilldown" : "082", "y" : 114 }, { - "y" : 127, + "drilldown" : "083", "name" : "#083", - "drilldown" : "083" + "y" : 127 }, { + "y" : 119, "name" : "#084", - "drilldown" : "084", - "y" : 119 + "drilldown" : "084" }, { - "name" : "#085", + "y" : 114, "drilldown" : "085", - "y" : 114 + "name" : "#085" }, { - "y" : 104, + "name" : "#086", "drilldown" : "086", - "name" : "#086" + "y" : 104 }, { "name" : "#087", @@ -457,38 +445,38 @@ }, { "y" : 121, - "drilldown" : "088", - "name" : "#088" + "name" : "#088", + "drilldown" : "088" }, { - "y" : 113, + "drilldown" : "089", "name" : "#089", - "drilldown" : "089" + "y" : 113 }, { + "y" : 113, "drilldown" : "090", - "name" : "#090", - "y" : 113 + "name" : "#090" }, { - "y" : 108, "name" : "#091", - "drilldown" : "091" + "drilldown" : "091", + "y" : 108 }, { - "name" : "#092", "drilldown" : "092", + "name" : "#092", "y" : 98 }, { - "name" : "#093", "drilldown" : "093", + "name" : "#093", "y" : 87 }, { - "name" : "#094", + "y" : 87, "drilldown" : "094", - "y" : 87 + "name" : "#094" }, { "y" : 108, @@ -501,24 +489,24 @@ "y" : 108 }, { - "name" : "#097", "drilldown" : "097", + "name" : "#097", "y" : 111 }, { - "name" : "#098", + "y" : 108, "drilldown" : "098", - "y" : 108 + "name" : "#098" }, { "y" : 97, - "name" : "#099", - "drilldown" : "099" + "drilldown" : "099", + "name" : "#099" }, { - "name" : "#100", + "y" : 120, "drilldown" : "100", - "y" : 120 + "name" : "#100" }, { "drilldown" : "101", @@ -526,9 +514,9 @@ "y" : 83 }, { - "y" : 90, + "name" : "#102", "drilldown" : "102", - "name" : "#102" + "y" : 90 }, { "y" : 79, @@ -541,9 +529,9 @@ "y" : 85 }, { - "y" : 75, + "drilldown" : "105", "name" : "#105", - "drilldown" : "105" + "y" : 75 }, { "y" : 97, @@ -556,14 +544,14 @@ "name" : "#107" }, { - "y" : 94, + "drilldown" : "108", "name" : "#108", - "drilldown" : "108" + "y" : 94 }, { - "y" : 107, + "name" : "#109", "drilldown" : "109", - "name" : "#109" + "y" : 107 }, { "name" : "#110", @@ -577,8 +565,8 @@ }, { "y" : 92, - "name" : "#112", - "drilldown" : "112" + "drilldown" : "112", + "name" : "#112" }, { "y" : 92, @@ -586,19 +574,19 @@ "drilldown" : "113" }, { - "drilldown" : "114", + "y" : 108, "name" : "#114", - "y" : 108 + "drilldown" : "114" }, { + "y" : 96, "drilldown" : "115", - "name" : "#115", - "y" : 96 + "name" : "#115" }, { - "y" : 95, + "drilldown" : "116", "name" : "#116", - "drilldown" : "116" + "y" : 95 }, { "y" : 97, @@ -606,34 +594,36 @@ "name" : "#117" }, { - "name" : "#118", + "y" : 81, "drilldown" : "118", - "y" : 81 + "name" : "#118" }, { - "y" : 121, + "drilldown" : "119", "name" : "#119", - "drilldown" : "119" + "y" : 121 }, { "y" : 110, - "drilldown" : "120", - "name" : "#120" + "name" : "#120", + "drilldown" : "120" }, { + "y" : 28, "drilldown" : "121", - "name" : "#121", - "y" : 27 + "name" : "#121" } ], + "colorByPoint" : "true", "name" : "The Weekly Challenge Languages" } ], + "title" : { + "text" : "The Weekly Challenge Language" + }, "drilldown" : { "series" : [ { - "id" : "001", - "name" : "001", "data" : [ [ "Perl", @@ -647,9 +637,12 @@ "Blog", 11 ] - ] + ], + "id" : "001", + "name" : "001" }, { + "name" : "002", "id" : "002", "data" : [ [ @@ -664,12 +657,11 @@ "Blog", 10 ] - ], - "name" : "002" + ] }, { - "id" : "003", "name" : "003", + "id" : "003", "data" : [ [ "Perl", @@ -686,6 +678,7 @@ ] }, { + "id" : "004", "name" : "004", "data" : [ [ @@ -700,11 +693,11 @@ "Blog", 10 ] - ], - "id" : "004" + ] }, { "id" : "005", + "name" : "005", "data" : [ [ "Perl", @@ -718,12 +711,9 @@ "Blog", 12 ] - ], - "name" : "005" + ] }, { - "id" : "006", - "name" : "006", "data" : [ [ "Perl", @@ -737,7 +727,9 @@ "Blog", 7 ] - ] + ], + "name" : "006", + "id" : "006" }, { "id" : "007", @@ -758,8 +750,6 @@ ] }, { - "id" : "008", - "name" : "008", "data" : [ [ "Perl", @@ -773,7 +763,9 @@ "Blog", 12 ] - ] + ], + "id" : "008", + "name" : "008" }, { "data" : [ @@ -830,7 +822,6 @@ "id" : "011" }, { - "id" : "012", "data" : [ [ "Perl", @@ -845,9 +836,11 @@ 11 ] ], - "name" : "012" + "name" : "012", + "id" : "012" }, { + "name" : "013", "id" : "013", "data" : [ [ @@ -862,11 +855,11 @@ "Blog", 13 ] - ], - "name" : "013" + ] }, { "id" : "014", + "name" : "014", "data" : [ [ "Perl", @@ -880,11 +873,11 @@ "Blog", 15 ] - ], - "name" : "014" + ] }, { "id" : "015", + "name" : "015", "data" : [ [ "Perl", @@ -898,11 +891,11 @@ "Blog", 15 ] - ], - "name" : "015" + ] }, { "id" : "016", + "name" : "016", "data" : [ [ "Perl", @@ -916,10 +909,11 @@ "Blog", 12 ] - ], - "name" : "016" + ] }, { + "id" : "017", + "name" : "017", "data" : [ [ "Perl", @@ -933,9 +927,7 @@ "Blog", 12 ] - ], - "name" : "017", - "id" : "017" + ] }, { "data" : [ @@ -952,11 +944,10 @@ 14 ] ], - "name" : "018", - "id" : "018" + "id" : "018", + "name" : "018" }, { - "name" : "019", "data" : [ [ "Perl", @@ -971,10 +962,10 @@ 13 ] ], - "id" : "019" + "id" : "019", + "name" : "019" }, { - "name" : "020", "data" : [ [ "Perl", @@ -989,9 +980,12 @@ 13 ] ], - "id" : "020" + "id" : "020", + "name" : "020" }, { + "id" : "021", + "name" : "021", "data" : [ [ "Perl", @@ -1005,12 +999,11 @@ "Blog", 10 ] - ], - "name" : "021", - "id" : "021" + ] }, { "id" : "022", + "name" : "022", "data" : [ [ "Perl", @@ -1024,8 +1017,7 @@ "Blog", 10 ] - ], - "name" : "022" + ] }, { "data" : [ @@ -1046,6 +1038,7 @@ "id" : "023" }, { + "name" : "024", "id" : "024", "data" : [ [ @@ -1060,11 +1053,11 @@ "Blog", 11 ] - ], - "name" : "024" + ] }, { "name" : "025", + "id" : "025", "data" : [ [ "Perl", @@ -1078,8 +1071,7 @@ "Blog", 12 ] - ], - "id" : "025" + ] }, { "id" : "026", @@ -1118,7 +1110,6 @@ ] }, { - "id" : "028", "data" : [ [ "Perl", @@ -1133,9 +1124,12 @@ 9 ] ], - "name" : "028" + "name" : "028", + "id" : "028" }, { + "name" : "029", + "id" : "029", "data" : [ [ "Perl", @@ -1149,12 +1143,9 @@ "Blog", 12 ] - ], - "name" : "029", - "id" : "029" + ] }, { - "name" : "030", "data" : [ [ "Perl", @@ -1169,9 +1160,12 @@ 10 ] ], - "id" : "030" + "id" : "030", + "name" : "030" }, { + "id" : "031", + "name" : "031", "data" : [ [ "Perl", @@ -1185,13 +1179,9 @@ "Blog", 9 ] - ], - "name" : "031", - "id" : "031" + ] }, { - "id" : "032", - "name" : "032", "data" : [ [ "Perl", @@ -1205,10 +1195,11 @@ "Blog",