diff options
| author | Robbie Hatley <Hatley.Software@gmail.com> | 2024-08-07 02:02:33 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-07 02:02:33 -0700 |
| commit | efc8bcd5f309459767078679099e7e0814104fb5 (patch) | |
| tree | eea7df7784d53b6e29ee2311321a45a8d4ccac3d | |
| parent | 8c9cab31702d81d93ef9b97ab662d6b521cb7ade (diff) | |
| parent | 94b9145b09c9801d2400771d37e7a7ee85dacfda (diff) | |
| download | perlweeklychallenge-club-efc8bcd5f309459767078679099e7e0814104fb5.tar.gz perlweeklychallenge-club-efc8bcd5f309459767078679099e7e0814104fb5.tar.bz2 perlweeklychallenge-club-efc8bcd5f309459767078679099e7e0814104fb5.zip | |
Merge branch 'manwar:master' into rh281
28 files changed, 2514 insertions, 2259 deletions
diff --git a/challenge-281/eric-cheung/python/ch-1.py b/challenge-281/eric-cheung/python/ch-1.py new file mode 100755 index 0000000000..22bdbb6e1b --- /dev/null +++ b/challenge-281/eric-cheung/python/ch-1.py @@ -0,0 +1,15 @@ +
+arrX_Coor = ["a", "b", "c", "d", "e", "f", "g", "h"]
+arrY_Coor = [nLoop for nLoop in range(1, 9)]
+
+## print (arrX_Coor)
+## print (arrY_Coor)
+
+## strCoord = "d3" ## Example 1
+## strCoord = "g5" ## Example 2
+strCoord = "e6" ## Example 3
+
+## Ref.
+## True: Light
+## False: Dark
+print (arrX_Coor.index(strCoord[0]) % 2 == 1 or arrY_Coor.index(int(strCoord[1])) % 2 == 1)
diff --git a/challenge-281/eric-cheung/python/ch-2.py b/challenge-281/eric-cheung/python/ch-2.py new file mode 100755 index 0000000000..d665d4e730 --- /dev/null +++ b/challenge-281/eric-cheung/python/ch-2.py @@ -0,0 +1,113 @@ +
+## Ref.
+## https://www.geeksforgeeks.org/minimum-steps-reach-target-knight-set-2/
+
+## Min Steps For A Knight to Reach Target Position
+
+## Initialize the Matrix
+arrKnightMove = [[0 for nRowLoop in range(8)] for nColLoop in range(8)]
+
+## Size of Chess Board nBoardSize * nBoardSize
+nBoardSize = 8
+
+arrX_Coor = ["a", "b", "c", "d", "e", "f", "g", "h"]
+arrY_Coor = [str(nLoop) for nLoop in range(1, 9)]
+
+def GetStepMove (nStartPos_X, nStartPos_Y, nTargetPos_X, nTargetPos_Y):
+
+ ## Exception
+ ## These are the four corner points
+ ## for which the minimum steps is 4
+
+ if nStartPos_X == 1 and nStartPos_Y == 1 and nTargetPos_X == 2 and nTargetPos_Y == 2 or nStartPos_X == 2 and nStartPos_Y == 2 and nTargetPos_X == 1 and nTargetPos_Y == 1:
+ return 4
+
+ if nStartPos_X == 1 and nStartPos_Y == nBoardSize and nTargetPos_X == 2 and nTargetPos_Y == nBoardSize - 1 or nStartPos_X == 2 and nStartPos_Y == nBoardSize - 1 and nTargetPos_X == 1 and nTargetPos_Y == nBoardSize:
+ return 4
+
+ if nStartPos_X == nBoardSize and nStartPos_Y == 1 and nTargetPos_X == nBoardSize - 1 and nTargetPos_Y == 2 or nStartPos_X == nBoardSize - 1 and nStartPos_Y == 2 and nTargetPos_X == nBoardSize and nTargetPos_Y == 1:
+ return 4
+
+ if nStartPos_X == nBoardSize and nStartPos_Y == nBoardSize and nTargetPos_X == nBoardSize - 1 and nTargetPos_Y == nBoardSize - 1 or nStartPos_X == nBoardSize - 1 and nStartPos_Y == nBoardSize - 1 and nTargetPos_X == nBoardSize and nTargetPos_Y == nBoardSize:
+ return 4
+
+ ## If Knight is on the target, position return 0
+ if nStartPos_X == nTargetPos_X and nStartPos_Y == nTargetPos_Y:
+ return arrKnightMove[0][0]
+
+ ## If already calculated, then return that value. Take absolute difference
+ nAbsDiff_X = abs(nStartPos_X - nTargetPos_X)
+ nAbsDiff_Y = abs(nStartPos_Y - nTargetPos_Y)
+
+ if arrKnightMove[nAbsDiff_X][nAbsDiff_Y] != 0:
+ return arrKnightMove[nAbsDiff_X][nAbsDiff_Y]
+
+ ## There will be two distinct positions
+ ## from the knight towards a target
+ ## if the target is in same row or column
+ ## as of knight then there can be four
+ ## positions towards the target but in that
+ ## two would be the same and the other two
+ ## would be the same.
+ nInterPos_01_X, nInterPos_01_Y, nInterPos_02_X, nInterPos_02_Y = 0, 0, 0, 0
+
+ ## (nInterPos_01_X, nInterPos_01_Y) and (nInterPos_02_X, nInterPos_02_Y) are two positions.
+ ## these can be different according to situation.
+ ## From position of knight, the chess board can be
+ ## divided into four blocks i.e.. N-E, E-S, S-W, W-N
+ if nStartPos_X <= nTargetPos_X:
+ nInterPos_01_X = nStartPos_X + 2
+ nInterPos_02_X = nStartPos_X + 1
+ else:
+ nInterPos_01_X = nStartPos_X - 2
+ nInterPos_02_X = nStartPos_X - 1
+
+ if nStartPos_Y <= nTargetPos_Y:
+ nInterPos_01_Y = nStartPos_Y + 1
+ nInterPos_02_Y = nStartPos_Y + 2
+ else:
+ nInterPos_01_Y = nStartPos_Y - 1
+ nInterPos_02_Y = nStartPos_Y - 2
+
+ ## Answer will be, 1 + minimum of steps
+ ## required from (nInterPos_01_X, nInterPos_01_Y) and (nInterPos_02_X, nInterPos_02_Y)
+ arrKnightMove[nAbsDiff_X][nAbsDiff_Y] = min(GetStepMove(nInterPos_01_X, nInterPos_01_Y, nTargetPos_X, nTargetPos_Y), GetStepMove(nInterPos_02_X, nInterPos_02_Y, nTargetPos_X, nTargetPos_Y)) + 1
+
+ ## exchanging the coordinates nStartPos_X with nStartPos_Y of both
+ ## knight and target will result in same answer
+ arrKnightMove[nAbsDiff_Y][nAbsDiff_X] = arrKnightMove[nAbsDiff_X][nAbsDiff_Y]
+
+ return arrKnightMove[nAbsDiff_X][nAbsDiff_Y]
+
+
+## Driver Code
+if __name__ == "__main__":
+
+ ## (nStartPos_X, nStartPos_Y) coordinate of the Knight Position
+ ## (nTargetPos_X, nTargetPos_Y) coordinate of the Target Position
+
+ ## Example 1
+ ## strStartPos = "g2"
+ ## strTargetPos = "a8"
+
+ ## Example 2
+ strStartPos = "g2"
+ strTargetPos = "h2"
+
+ nStartPos_X = arrX_Coor.index(strStartPos[0]) + 1
+ nStartPos_Y = arrY_Coor.index(strStartPos[1]) + 1
+
+ nTargetPos_X = arrX_Coor.index(strTargetPos[0]) + 1
+ nTargetPos_Y = arrY_Coor.index(strTargetPos[1]) + 1
+
+ ## arrKnightMove[a][b], here a, b is the difference of
+ ## nStartPos_X & nTargetPos_X and nStartPos_Y & nTargetPos_Y respectively
+ arrKnightMove[1][0] = 3
+ arrKnightMove[0][1] = 3
+ arrKnightMove[1][1] = 2
+ arrKnightMove[2][0] = 2
+ arrKnightMove[0][2] = 2
+ arrKnightMove[2][1] = 1
+ arrKnightMove[1][2] = 1
+
+ print (GetStepMove(nStartPos_X, nStartPos_Y, nTargetPos_X, nTargetPos_Y))
diff --git a/challenge-281/packy-anderson/elixir/ch-2.exs b/challenge-281/packy-anderson/elixir/ch-2.exs index 04b5c8529b..1009526549 100755 --- a/challenge-281/packy-anderson/elixir/ch-2.exs +++ b/challenge-281/packy-anderson/elixir/ch-2.exs @@ -1,20 +1,128 @@ #!/usr/bin/env elixir defmodule PWC do + defp letterAdd(letter, add) do + <<val::utf8>> = letter + List.to_string([val + add]) + end + + def onBoard(c,r) do + "a" <= c and c <= "h" and 1 <= r and r <= 8 + end + + defp knightMoveList(), do: [ + {-2, -1}, {-2, +1}, {-1, -2}, {-1, +2}, + {+2, -1}, {+2, +1}, {+1, -2}, {+1, +2}, + ] + + def knightMoves([], _, _, endpoints), do: endpoints + + def knightMoves([next | rest], letter, num, endpoints) do + {col, row} = next + newcol = letterAdd(letter, col) + newrow = num + row + endpoints = if onBoard(newcol,newrow) do + # add to list being returned + endpoints ++ [ newcol <> to_string(newrow) ] + else + endpoints + end + knightMoves(rest, letter, num, endpoints) + end + + def knightMoves(coordinates) do + letter = String.first(coordinates) + {num, _} = Integer.parse(String.last(coordinates)) + knightMoves(knightMoveList(), letter, num, []) + end + + def processEndpoints( + next, params = %{ + moves_to: moves_to, + path_to: path_to, + startPos: startPos, + endPos: endPos, + queue: queue + } + ) do + # update the move count map + moves_to = Map.put(moves_to, next, moves_to[startPos] + 1) + + # update the path to current space map + path_to = Map.put(path_to, next, + "#{path_to[startPos]} -> #{next}" + ) + + if next == endPos do + # we found the shortest path, update the return + # values which will stop the loop + %{ moves: moves_to[next], path: path_to[next] } + else + # update params for next iteration + params |> Map.put(:moves_to, moves_to) + |> Map.put(:path_to, path_to) + |> Map.put(:queue, queue ++ [ next ]) + end + end + + def processEndpoints(_, params = %{moves: moves}) + when not is_nil(moves), do: params + + # we've exhausted the queue + # (only possible when the chessboard is an odd size) + def processQueue([], _), do: %{ + moves: -1, path: "no path found" + } + + def processQueue(_, params = %{moves: moves}) + when not is_nil(moves), do: params + + def processQueue([startPos | queue], params = %{ + path_to: path_to + }) do + # put the current starting position and the current queue + # into the params + params = params |> Map.put(:queue, queue) + |> Map.put(:startPos, startPos) + + # figure out the valid moves that we haven't been to yet + endpoints = knightMoves(startPos) + |> Enum.filter(fn m -> !Map.has_key?(path_to, m) end) + + # call processEndpoints/2 for each of the endpoints + params = Enum.reduce(endpoints, params, &processEndpoints/2) + + # recursively call to process the rest of the queue + processQueue(params[:queue], params) + end + + # trivial case: we're already at the end point + def leastMoves(startPos, endPos) when startPos == endPos, do: + { 0, endPos } + + def leastMoves(startPos, endPos) do + params = processQueue([ startPos ], %{ + endPos: endPos, + moves_to: %{ startPos => 0 }, + path_to: %{ startPos => startPos }, + moves: nil, + path: nil + }) + { params[:moves], params[:path] } + end - def solution(ints) do - IO.puts("Input: @ints = (" <> Enum.join(ints, ", ") <> ")") - {sign, explain} = PWC.productSign(ints) - IO.puts("Output: " <> to_string(sign) ) - IO.puts("\n" <> explain) + def solution(startPos, endPos) do + IO.puts("Input: $start = '#{startPos}', $end = '#{endPos}'") + {count, moves} = leastMoves(startPos, endPos) + IO.puts("Output: #{to_string(count)}\n\n#{moves}" ) end end IO.puts("Example 1:") -PWC.solution() +PWC.solution("g2", "a8") IO.puts("\nExample 2:") -PWC.solution() +PWC.solution("g2", "h2") IO.puts("\nExample 3:") -PWC.solution() +PWC.solution("a1", "h8") diff --git a/challenge-281/packy-anderson/perl/ch-2.pl b/challenge-281/packy-anderson/perl/ch-2.pl index 92eeb1cbd4..3992136a60 100755 --- a/challenge-281/packy-anderson/perl/ch-2.pl +++ b/challenge-281/packy-anderson/perl/ch-2.pl @@ -68,7 +68,7 @@ sub solution($start, $end) { say qq/Input: \$start = '$start', \$end = '$end'/; my ($count, $moves) = leastMoves($start, $end); say 'Output: ' . $count; - say "\n$moves\n"; + say "\n$moves"; } say "Example 1:"; diff --git a/challenge-281/packy-anderson/python/ch-2.py b/challenge-281/packy-anderson/python/ch-2.py index f1b8803a71..72f51c823f 100755 --- a/challenge-281/packy-anderson/python/ch-2.py +++ b/challenge-281/packy-anderson/python/ch-2.py @@ -65,7 +65,7 @@ def leastMoves(start, end): def solution(start, end): print(f'Input: $start = \'{start}\', $end = \'{end}\'') count, moves = leastMoves(start, end) - print(f'Output: {count}\n\n{moves}\n') + print(f'Output: {count}\n\n{moves}') print('Example 1:') solution('g2', 'a8') diff --git a/challenge-281/packy-anderson/raku/ch-2.raku b/challenge-281/packy-anderson/raku/ch-2.raku index 4ab5b7f4b1..ed29559b0a 100755 --- a/challenge-281/packy-anderson/raku/ch-2.raku +++ b/challenge-281/packy-anderson/raku/ch-2.raku @@ -68,7 +68,7 @@ sub solution($start, $end) { say qq/Input: \$start = '$start', \$end = '$end'/; my ($count, $moves) = leastMoves($start, $end); say 'Output: ' ~ $count; - say "\n$moves\n"; + say "\n$moves"; } say "Example 1:"; diff --git a/stats/pwc-current.json b/stats/pwc-current.json index af688e0780..7ff509be34 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -1,7 +1,141 @@ { + "tooltip" : { + "followPointer" : 1, + "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>", + "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>" + }, + "series" : [ + { + "name" : "The Weekly Challenge - 281", + "colorByPoint" : 1, + "data" : [ + { + "name" : "Alexander Karelas", + "drilldown" : "Alexander Karelas", + "y" : 2 + }, + { + "drilldown" : "Dave Jacoby", + "name" : "Dave Jacoby", + "y" : 3 + }, + { + "drilldown" : "David Ferrone", + "y" : 2, + "name" : "David Ferrone" + }, + { + "y" : 2, + "drilldown" : "E. Choroba", + "name" : "E. Choroba" + }, + { + "name" : "Feng Chang", + "drilldown" : "Feng Chang", + "y" : 2 + }, + { + "y" : 2, + "drilldown" : "Jan Krnavek", + "name" : "Jan Krnavek" + }, + { + "y" : 2, + "drilldown" : "Kjetil Skotheim", + "name" : "Kjetil Skotheim" + }, + { + "drilldown" : "Laurent Rosenfeld", + "name" : "Laurent Rosenfeld", + "y" : 3 + }, + { + "drilldown" : "Mariano Ortega", + "name" : "Mariano Ortega", + "y" : 2 + }, + { + "drilldown" : "Mark Anderson", + "name" : "Mark Anderson", + "y" : 2 + }, + { + "y" : 5, + "drilldown" : "Packy Anderson", + "name" : "Packy Anderson" + }, + { + "drilldown" : "Peter Campbell Smith", + "y" : 3, + "name" : "Peter Campbell Smith" + }, + { + "drilldown" : "Peter Meszaros", + "name" : "Peter Meszaros", + "y" : 2 + }, + { + "y" : 3, + "drilldown" : "Robbie Hatley", + "name" : "Robbie Hatley" + }, + { + "y" : 4, + "drilldown" : "Roger Bell_West", + "name" : "Roger Bell_West" + }, + { + "drilldown" : "Thomas Kohler", + "name" : "Thomas Kohler", + "y" : 4 + }, + { + "drilldown" : "Ulrich Rieke", + "y" : 4, + "name" : "Ulrich Rieke" + }, + { + "drilldown" : "W. Luis Mochan", + "y" : 3, + "name" : "W. Luis Mochan" + }, + { + "drilldown" : "Wanderdoc", + "name" : "Wanderdoc", + "y" : 2 + } + ] + } + ], + "xAxis" : { + "type" : "category" + }, + "plotOptions" : { + "series" : { + "dataLabels" : { + "enabled" : 1, + "format" : "{point.y}" + }, + "borderWidth" : 0 + } + }, "title" : { "text" : "The Weekly Challenge - 281" }, + "yAxis" : { + "title" : { + "text" : "Total Solutions" + } + }, + "legend" : { + "enabled" : 0 + }, + "subtitle" : { + "text" : "[Champions: 19] Last updated at 2024-08-07 08:56:24 GMT" + }, + "chart" : { + "type" : "column" + }, "drilldown" : { "series" : [ { @@ -11,10 +145,12 @@ 2 ] ], - "id" : "Alexander Karelas", - "name" : "Alexander Karelas" + "name" : "Alexander Karelas", + "id" : "Alexander Karelas" }, { + "name" : "Dave Jacoby", + "id" : "Dave Jacoby", "data" : [ [ "Perl", @@ -24,62 +160,59 @@ "Blog", 1 ] - ], - "id" : "Dave Jacoby", - "name" : "Dave Jacoby" + ] }, { + "name" : "David Ferrone", "id" : "David Ferrone", "data" : [ [ "Perl", 2 ] - ], - "name" : "David Ferrone" + ] }, { "name" : "E. Choroba", + "id" : "E. Choroba", "data" : [ [ "Perl", 2 ] - ], - "id" : "E. Choroba" + ] }, { + "name" : "Feng Chang", + "id" : "Feng Chang", "data" : [ [ "Raku", 2 ] - ], - "name" : "Feng Chang", - "id" : "Feng Chang" + ] }, { - "name" : "Jan Krnavek", "data" : [ [ "Raku", 2 ] ], + "name" : "Jan Krnavek", "id" : "Jan Krnavek" }, { + "name" : "Kjetil Skotheim", + "id" : "Kjetil Skotheim", "data" : [ [ "Perl", 2 ] - ], - "name" : "Kjetil Skotheim", - "id" : "Kjetil Skotheim" + ] }, { - "id" : "Laurent Rosenfeld", "data" : [ [ "Perl", @@ -94,30 +227,30 @@ 1 ] ], + "id" : "Laurent Rosenfeld", "name" : "Laurent Rosenfeld" }, { - "id" : "Mariano Ortega", "data" : [ [ "Perl", 2 ] ], + "id" : "Mariano Ortega", "name" : "Mariano Ortega" }, { "name" : "Mark Anderson", + "id" : "Mark Anderson", "data" : [ [ "Raku", 2 ] - ], - "id" : "Mark Anderson" + ] }, { - "id" : "Packy Anderson", "data" : [ [ "Perl", @@ -132,10 +265,10 @@ 1 ] ], - "name" : "Packy Anderson" + "name" : "Packy Anderson", + "id" : "Packy Anderson" }, { - "name" : "Peter Campbell Smith", "data" : [ [ "Perl", @@ -146,20 +279,34 @@ 1 ] ], + "name" : "Peter Campbell Smith", "id" : "Peter Campbell Smith" }, { - "name" : "Peter Meszaros", "data" : [ [ "Perl", 2 ] ], - "id" : "Peter Meszaros" + "id" : "Peter Meszaros", + "name" : "Peter Meszaros" + }, + { + "name" : "Robbie Hatley", + "id" : "Robbie Hatley", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] + ] }, { - "id" : "Roger Bell_West", "data" : [ [ "Perl", @@ -170,10 +317,10 @@ 2 ] ], - "name" : "Roger Bell_West" + "name" : "Roger Bell_West", + "id" : "Roger Bell_West" }, { - "name" : "Thomas Kohler", "data" : [ [ "Perl", @@ -184,9 +331,11 @@ 2 ] ], - "id" : "Thomas Kohler" + "id" : "Thomas Kohler", + "name" : "Thomas Kohler" }, { + "name" : "Ulrich Rieke", "id" : "Ulrich Rieke", "data" : [ [ @@ -197,11 +346,9 @@ "Raku", 2 ] - ], - "name" : "Ulrich Rieke" + ] }, { - "id" : "W. Luis Mochan", "data" : [ [ "Perl", @@ -212,147 +359,19 @@ 1 ] ], + "id" : "W. Luis Mochan", "name" : "W. Luis Mochan" }, { + "id" : "Wanderdoc", + "name" : "Wanderdoc", "data" : [ [ "Perl", 2 ] - ], - "id" : "Wanderdoc", - "name" : "Wanderdoc" + ] } ] - }, - "yAxis" : { - "title" : { - "text" : "Total Solutions" - } - }, - "subtitle" : { - "text" : "[Champions: 18] Last updated at 2024-08-06 22:29:23 GMT" - }, - "series" : [ - { - "data" : [ - { - "y" : 2, - "drilldown" : "Alexander Karelas", - "name" : "Alexander Karelas" - }, - { - "name" : "Dave Jacoby", - "drilldown" : "Dave Jacoby", - "y" : 3 - }, - { - "y" : 2, - "drilldown" : "David Ferrone", - "name" : "David Ferrone" - }, - { - "y" : 2, - "name" : "E. Choroba", - "drilldown" : "E. Choroba" - }, - { - "drilldown" : "Feng Chang", - "name" : "Feng Chang", - "y" : 2 - }, - { - "y" : 2, - "drilldown" : "Jan Krnavek", - "name" : "Jan Krnavek" - }, - { - "drilldown" : "Kjetil Skotheim", - "name" : "Kjetil Skotheim", - "y" : 2 - }, - { - "name" : "Laurent Rosenfeld", - "drilldown" : "Laurent Rosenfeld", - "y" : 3 - }, - { - "name" : "Mariano Ortega", - "drilldown" : "Mariano Ortega", - "y" : 2 - }, - { - "name" : "Mark Anderson", - "drilldown" : "Mark Anderson", - "y" : 2 - }, - { - "y" : 5, - "drilldown" : "Packy Anderson", - "name" : "Packy Anderson" - }, - { - "drilldown" : "Peter Campbell Smith", - "name" : "Peter Campbell Smith", - "y" : 3 - }, - { - "y" : 2, - "name" : "Peter Meszaros", - "drilldown" : "Peter Meszaros" - }, - { - "y" : 4, - "drilldown" : "Roger Bell_West", - "name" : "Roger Bell_West" - }, - { - "y" : 4, - "name" : "Thomas Kohler", - "drilldown" : "Thomas Kohler" - }, - { - "drilldown" : "Ulrich Rieke", - "name" : "Ulrich Rieke", - "y" : 4 - }, - { - "y" : 3, - "name" : "W. Luis Mochan", - "drilldown" : "W. Luis Mochan" - }, - { - "drilldown" : "Wanderdoc", - "name" : "Wanderdoc", - "y" : 2 - } - ], - "name" : "The Weekly Challenge - 281", - "colorByPoint" : 1 - } - ], - "chart" : { - "type" : "column" - }, - "plotOptions" : { - "series" : { - "dataLabels" : { - "format" : "{point.y}", - "enabled" : 1 - }, - "borderWidth" : 0 - } - }, - "legend" : { - "enabled" : 0 - }, - "xAxis" : { - "type" : "category" - }, - "tooltip" : { - "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>", - "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>", - "followPointer" : 1 } } diff --git a/stats/pwc-language-breakdown-2019.json b/stats/pwc-language-breakdown-2019.json index 8e542545fd..10f2296e38 100644 --- a/stats/pwc-language-breakdown-2019.json +++ b/stats/pwc-language-breakdown-2019.json @@ -1,240 +1,17 @@ { - "plotOptions" : { - "series" : { - "dataLabels" : { - "format" : "{point.y}", - "enabled" : 1 - }, - "borderWidth" : 0 - } + "subtitle" : { + "text" : "Click the columns to drilldown the language breakdown. Last updated at 2024-08-07 08:56:24 GMT" + }, + "legend" : { + "enabled" : "false" }, "chart" : { "type" : "column" }, - "series" : [ - { - "colorByPoint" : "true", - "name" : "The Weekly Challenge Languages", - "data" : [ - { - "drilldown" : "041", - "name" : "041", - " |
