4 ms·
Just for fun, I tried it in APL. cal ← ⎕SH 'cal -y' ⍝ get output of cal command bymonth ← {⍵⊂⍨0=23|⍳≢⍵}⍤1↑2↓cal
by rak1507 5y ago
Just for fun, I tried it in APL.
cal ← ⎕SH 'cal -y' ⍝ get output of cal command
bymonth ← {⍵⊂⍨0=23|⍳≢⍵}⍤1↑2↓cal ⍝ partition into month groups
lines ← {⍵⊂⍨0=8|⍳≢⍵}⍤1⍉bymonth ⍝ partition into chunks in each line
months ← ~∘' '¨,⍉⊃¨lines ⍝ extract month names and remove spaces
days ← (23⍴1 0 0)⊂⍤1↑⊃,/,⌿2↓¨lines ⍝ partition into days
trimmed ← ∊⍤1⍉{⍵/⍨(' '∨.≠¨⍵)∨∧\' '∧.=¨⍵}⍤1⍉¯1↓days ⍝ remove excess spaces
⎕←53↑(¯2↓⍤1⊢trimmed) , ↑months\⍨∨/' 1 '⍷trimmed ⍝ append months to calendar where the 1s are, and print
Surprisingly tricky (but still easier than sed IMO :P)
- eloisius 5y agoAnd people say Ruby is beautiful
- deleted 5y ago[deleted]
- wahern 5y agoIt's too bad APL never enjoyed ubiquity on Unix-like platforms. The world would have been a better place. Maybe if Stallman or some early GNU participant had championed APL we'd all be either using APL or constantly excusing ourselves. Like Emacs did for Lisp. I'm decent with sed. I wouldn't call myself an expert, but know how to employ addressing and hold spaces, which are sadly aracana to most people who employ sed. I ended up learning sed because it was there, proved useful, and it fit into the command-line toolkit really well. (In order of importance.) APL would never slot into that toolkit as well as other tools, but it's value-add would more than compensate. Unfortunately, the value-add isn't enough to compensate for the fact that it's not there and in your face every time you're exploring a problem and its solution space.
- jolmg 5y ago> Maybe if Stallman or some early GNU participant had championed APL we'd all be either using APL or constantly excusing ourselves. I think the major issue is that APL seems to require more than ASCII to work it.
- e12e 5y agoSeems there is an alternative history where Stallman went with APL and not lisp: https://en.wikipedia.org/wiki/APL_(programming_language)#GNU_APL https://en.wikipedia.org/wiki/APL_(programming_language)#GNU... > (...) Richard Stallman, founder of the GNU Project, was an early adopter of APL, using it to write a text editor as a high school student in the summer of 1969. And: Rho, rho, rho of X Always equals 1 Rho is dimension, rho rho rank. APL is fun! Richard M. Stallman, 1969 https://www.gnu.org/software/apl/ https://www.gnu.org/software/apl/ But: > GNU APL was written and is being maintained by Jürgen Sauermann. and I believe it's fairly young when compared to emacs/emacs lisp.
- rak1507 5y agoYeah agreed, Dyalog APL started out on Unix but is now more focused on Windows, I wish I could integrate it into scripts and things but it's often difficult/impossible to do so.
- boffinAudio 5y agoIn the very halcyon days of Unix, lets just say early-80's, I met so many new-to-C guys coming away from APL screaming, with their hair on fire, that I, as an innocent young mangenue, was sure it would be one of those languages that would die a horrid yet rapid death and I could therefore completely ignore it. Yet, here we are. I'm still amazed to see people using it, and even more amazed to see someone break it out for some toy play. Still, not gonna learn it. I like my hair.
- totetsu 5y ago(⊃0⍵0)⊃ ⊂{⍨⊂}
- deleted 5y ago[deleted]
- markjreed 5y agoI attempted to run that APL, and it didn't quite work as is on my system (Dyalog on macOS). As written, it seems to be an odd mixture of things that assume ⎕IO 0 and ⎕IO 1, in that with ⎕IO←1, the bymonth assignment only gets two columns instead of three, but with ⎕IO←0, it needs to be 0=22 and 1↓cal instead of 0=23 and 2↓cal. Similarly, the lines assignment needed to be {⍵⊂⍨0=9|⍳≢⍵}⍤1⍉bymonth. After those changes it worked OMM, but the month names were appended directly to the end of the first Saturday's date with no space (e.g. "1 2January"). So I changed ↑months to ↑(' ',¨months) in the last line to insert a space there (there's likely a better way to do that; I'm still pretty new at APL). I added `-h` to make sure `cal` didn't highlight today's date, which can throw things off, and eliminated intermediate vars that were only used once; this was what I wound up with (works from a clean ws in Dyalog OMM): ⎕io ← 0 lines ← {⍵⊂⍨0=9|⍳≢⍵}⍤1⍉{⍵⊂⍨0=22|⍳≢⍵}⍤1↑1↓⎕sh 'cal -hy' months ← ~∘' '¨,⍉⊃¨lines days ← ∊⍤1⍉{⍵/⍨(' '∨.≠¨⍵)∨∧\' '∧.=¨⍵}⍤1⍉¯1↓(23⍴1 0 0)⊂⍤1↑⊃,/,⌿2↓¨lines ⎕←53↑(¯2↓⍤1⊢days) , ↑(' ',¨months)\⍨∨/' 1 '⍷days
- rak1507 5y agoIt (should be) purely ⎕IO←0. https://tio.run/##jZK7SgNBFIb7fYrTbQKbyyYINum1srBNM27G7OLemJ1ogpdCISTBFUMQbAQJQrZLoWIp7KOcF4ln9tJ432ZmDpzz/f9/loVurTdibtDfbPDmbncPx7dNzWIu0AWosr8DunrWRjr89WH8AH0uIRjIcEDHIahOK/A85ve0g5EX@NLOBp9i/IqzS4yTZqfVPsP4GadLqp1j/GTieN7C8UL1/gAJmZCOdAIfHF8GkM/ti2AQRprr@Dz6Atn@zIinpZ5/Qix74B9FdAfOLBsURssG5LALnNzroKeJQaNxdpUmuZDf0@JDKZglCwc@86iDsgLBveCYQxQyi0daj41ySKXVxvjFhCY0q5mzLCyiGQ0Dr99Vaj9xv3GkxmpSOJ7He/m6J7MiGxVdg4KrkCWcJHWcPqYJ1ar0wMmqm5VX9U5WLANN16RmkYslWuGBD8lCVFqhP4pIW22SXUnXSnDWPFsWOqpgkJR5HmyXFBCwoYNJvPit1FrYYWHIKatiCWpFzKUCE3Bic8FB2hxMylNwIws1FGR7s/kA https://tio.run/##jZK7SgNBFIb7fYrTbQKbyyYINum1srBNM27G7OLemJ... Potentially cal -y on macOS produces a different shape? What's ⍴↑cal? Try doing cal←⎕SE.UCMD'Calendar 2021' and replace ↑2↓cal with 1↓cal - potentially that'll work?
- markjreed 5y ago⍴↑⎕sh 'cal -y' is 36 66. ⍴⎕SE.UCMD'Calendar 2021' is 33 66. Hm. What system are you on? On Ubuntu, cal -y | wc -l also gives me 36.
- 5y ago