apl-competition-2020/Contest2020/Contest2020.dyalog

148 lines
6.8 KiB
APL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

:Namespace Contest2020
AboutMe,'Tell us a bit about yourself'
⍝ AboutMe,←⊂'' ⍝ copy, uncomment, and edit this line if you need more space
Reaction,'Please share your thoughts about the 2020 competition'
⍝ Reaction,←⊂'' ⍝ copy, uncomment, and edit this line if you need more space
:Namespace Problems
(⎕IO ⎕ML ⎕WX)1 1 3
scoredd DiveScore scores
⍝ 2020 APL Problem Solving Competition Phase II
⍝ Stub function for Problem 1, Task 1 - DiveScore
⍝ Put your code and comments below here
:If 7=scores
scoresscores[¯22scores]
:ElseIf 5=scores
scoresscores[¯11scores]
:Else
scoresscores
:EndIf
score2()dd×+/scores
steps{p}Steps fromTo
⍝ 2020 APL Problem Solving Competition Phase II
⍝ Stub function for Problem 2, Task 1 - Steps
⍝ Put your code and comments below here
urlsPastTasks url;r;paths
⍝ 2020 APL Problem Solving Competition Phase II
⍝ Stub function for Problem 3, Task 1 - PastTasks
⍝ Put your code and comments below here
rHttpCommand.Get url
paths('[a-zA-Z0-9_/]+\.pdf'⎕S'&')r.Data
urls('https://www.dyalog.com/',)¨paths
⍝ Test if a DNA string is a reverse palindrome.
isrevp{'TAGC'['ATCG']}
⍝ Generate all subarrays (position, length) pairs, for
⍝ 4 ≤ length ≤ 12.
subarrays{,/(),¨¨3¨¨121+-}
rrevp dna;positions
⍝ 2020 APL Problem Solving Competition Phase II
⍝ Stub function for Problem 4, Task 1 - revp
⍝ Put your code and comments below here
positionssubarraysdna
⍝ Filter subarrays which are reverse palindromes.
r({isrevp dna[¯1+[1]+[2]]}¨positions)/positions
⍝ 2020 APL Problem Solving Competition Phase II
⍝ Stub function for Problem 4, Task 2 - sset
⍝ Put your code and comments below here
sset{((1E6|2×))1}
⍝ 2020 APL Problem Solving Competition Phase II
⍝ Problem 5, Task 1 - rr
⍝ First solution: ((1+⊢)⊥⊣) computes the total return
⍝ for a vector of amounts and a vector of rates
⍝ ⍵. It is applied to every prefix subarray of amounts
⍝ and rates to get all intermediate values. However,
⍝ this has quadratic complexity.
⍝ rr←(,\⊣)((1+⊢)⊥⊣)¨(,\⊢)
⍝ Second solution: We want to be able to use the
⍝ recurrence relation (recur) and scan through the
⍝ vectors of amounts and rates, accumulating the total
⍝ value at every time step. However, APL evaluation is
⍝ right-associative, so a simple Scan
⍝ (recur\amounts,¨values) would not give the correct
⍝ result, since recur is not associative and we need
⍝ to evaluate it left-to-right. (In any case, in this
⍝ case, Scan would have quadratic complexity, so would
⍝ not bring any benefit over the previous solution.)
⍝ What we need is something akin to Haskell's scanl
⍝ function, which would evaluate left to right in O(n)
⍝ time. This is what we do here, accumulating values
⍝ from left to right. (This is inspired from
⍝ https://dfns.dyalog.com/c_ascan.htm, although
⍝ heavily simplified.)
rr{recur{[1]+×1+[2]} 1{(()recur),}/,¨}
⍝ 2020 APL Problem Solving Competition Phase II
⍝ Problem 5, Task 2 - pv
⍝ Simply apply the formula for cashflow calculations.
pv{+/÷×\1+}
⍝ 2020 APL Problem Solving Competition Phase II
⍝ Problem 6, Task 1 - Merge
valns getval var
⍝ The template and JSON files do not use the same
⍝ vocabulary.
:If var'lastname'
var'surname'
:EndIf
:If ''var ⍝ literal '@'
val'@'
:ElseIf (var)ns.⎕NL ¯2
valnsvar
:Else
val'???'
:EndIf
texttemplateFile Merge jsonFile;template;ns
template⎕NGET templateFile
ns⎕JSON⎕NGET jsonFile
⍝ We use a simple regex search and replace on the
⍝ template.
text('@[a-zA-Z]*@'⎕R{ns getval ¯11.Match})template
⍝ 2020 APL Problem Solving Competition Phase II
⍝ Problem 7, Tasl 1 - CheckDigit
CheckDigit{10|-10|+.×113 1}
bitsWriteUPC digits
⍝ 2020 APL Problem Solving Competition Phase II
⍝ Stub function for Problem 7, Task 2 - WriteUPC
⍝ Put your code and comments below here
digitsReadUPC bits
⍝ 2020 APL Problem Solving Competition Phase II
⍝ Stub function for Problem 7, Task 3 - ReadUPC
⍝ Put your code and comments below here
partsBalance nums
⍝ 2020 APL Problem Solving Competition Phase II
⍝ Stub function for Problem 8, Task 1 - Balance
⍝ Put your code and comments below here
weightsWeights filename
⍝ 2020 APL Problem Solving Competition Phase II
⍝ Stub function for Problem 9, Task 1 - Weights
⍝ Put your code and comments below here
:EndNamespace
:EndNamespace