Created
August 6, 2020 15:51
-
-
Save rodrigogiraoserrao/ddc89dbebab4fd7a812ea83f517c6042 to your computer and use it in GitHub Desktop.
RGS's solution for Problem 6, Phase 2 of 2020 APL competition (see https://mathspp.com/blog/2020-apl-competition for my thoughts on it)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
⍝ PROBLEM 6.1 | |
Merge ← { | |
(⎕IO ⎕ML ⎕WX) ← 0 1 3 | |
⍝ Merges JSON data from a file named ⍵ into a template file named ⍺. | |
⍝ Dyadic function expecting a character vector on the left (template path) and a character vector on the right (data path). | |
⍝ Returns a character vector. | |
t ← ⊃⎕NGET ⍺ | |
G ← (⎕JSON⊃⎕NGET ⍵)_SafeGet | |
R ← { | |
⍝ Convert matched regex patterns into the appropriate replacements. | |
⍵.PatternNum=0: ⍕ '???' G 1↓¯1↓⍵.Match ⍝ drop surrounding @ | |
⍵.PatternNum=1: '@' | |
} | |
('@\w+?@' '@@' ⎕R R)t | |
} | |
⍝_SafeGet ← { | |
⍝ (⎕IO ⎕ML ⎕WX) ← 0 1 3 | |
⍝ 6::⍺ ⍝ Catch ValueErrors, cf. http://help.dyalog.com/17.1/index.htm#Language/Errors/APL%20Errors.htm#APLErrors | |
⍝ ⍺⍺⍎⍵ | |
⍝} | |
_SafeGet ← { | |
(⎕IO ⎕ML ⎕WX) ← 0 1 3 | |
⍝ Utility function to safely retrieve ⍵ from the namespace ⍺⍺. | |
⍝ Monadic operator deriving a dyadic function, expects a namespace left operand, a value on the left and a character vector on the right. | |
⍝ Returns ⍺⍺.⍵ unless ⍵ doesn't exist in ⍺⍺, in which case returns ⍺. | |
~(⊂⍵)∊⍺⍺.⎕nl ¯2: ⍺ | |
⍺⍺⍎⍵ | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment