Ajay Askoolums APL Idioms
Some notes:
I have two solutions to idiom #1, CE and CE1. CE1 doesn't use the rho symbol or the comma symbol.
CE←{×/⍴⍵} CE1←{+/∊⍵≡¨⍵}
I have two solutions to idiom #2, RA and RA1. Both require a 2-item vector on the left as the range. RA requires a scalar right argument. RA1 permits any array as the right argument and doesnt use each. For more details on this solution, please see my article Arithmetic Boundary Checkingin Vector Vol 21 No. 2. Solution to this particular problem is at the top of page 122.
RA←{+/×⍵-⍺} RA1←{+/×⍵∘.-⍺}
Idiom #3:
SN←{⍵[⍋⌊10⍟|⍵;]}
Idiom #4:
LD←{{⍵}⌿⍵}
Idiom #5: Curried left argument can be any suitable value > 0. Domain error may result if the base of the exponential function is not chosen correctly.
LS←0.9∘{⍺⍟×⌿⍺*⍵}
Idiom #6: Note ⎕D is equivalent to '0123456789' :
CN←{10⊥-⎕IO-⎕D⍳⍵}
Idiom #7:
ZM←{0+/⍵}
Idiom #8:
FO←{2</0,⍵}
Idiom #9:
LO←{2>/⍵,0}
Idiom #10:
RE←{↑¨↓∘⍺¨↓⍵-1}
More Solutions ...
1. How many elements does a given variable have?
Restriction: assume that the keyboard does not have the comma (,) symbol.
CE←×/∘⍴ ⍝ ⍵←A
2. Is a value within a given range?
Restriction: assume that the keyboard does not have any relational operators.
C2←{+/×⍵[⍋⍵]-⍺} ⍝ ⍺←D0 ⍵←D1 ⍴⍵←→2
3. Sort a numeric array of integers in ascending order of the number of digits.
Restriction: assume that the keyboard does not have the format (⍕) or quad (⎕) symbol.
SN←{⍵[⍋⌈10⍟|(⍵+2×0=⍵)+×⍵;]} ⍝ ⍵←I2 (1↓⍴⍵)←→1
4. Return the element(s) of a numeric array indexed by its first dimension.
Restriction: assume that the keyboard does not have the shape of (⍴) symbol.
NB.(GQR) the definition of this problem is not complete:
a) should return an array with a lesser rank?
b) a scalar has not a first dimension, but it is required by the challenge:
LD 6←→6 LD←{,[1,(0<≡+/~0×⍵)/2]1↑[1],[(0<≡⍵)/1]⊂[⍬]⊖⍵} ⍝ ⍵←D (also scalar)
or
LD_←{,[1,(0<≡+/~0×⍵)/2]1↑[1]⊖⍉1↓[1],[1 2]⍉,[⍬]0,⍵} ⍝ ⍵←D (also scalar)
or
LD__←{1↑[1]⊖⍵} ⍝ ⍵←D ; ⍵ not scalar; NB.result has same rank of ⍵
5. Return the sum of element(s) of a numeric array on its first dimension.
Restriction: assume that the keyboard does not have the plus (+) symbol.
NB.(GQR) a scalar has not a first dimension, but it is required by the challenge:
LS 6←→6 LS←{⎕ML←2 ⋄ ↑¨⍴¨∊¨⊂[(~0∊⍴⍴⍵)/1]⍵⍴¨1} ⍝APL2 ⍝⍵←D (also scalar)
6. Convert the string representation of integers to numbers.
Restriction: assume that the keyboard does not have the execute (⍎) symbol.
CN←{10⊥2⊥4↓[⎕IO]⍉11 ⎕DR,[⍬]⍵} ⍝ ⍵←C1 (also scalar)
CN_←{10⊥2⊥¨4↓¨11 ⎕DR¨⍵} ⍝ ⍵←C1 (also scalar)
CN__←{10⊥(-⎕AV⍳'0')+⎕AV⍳⍵} ⍝ ⍵←C1 (also scalar)
CN___←{10⊥(-⎕IO)+'0123456789'⍳⍵} ⍝ ⍵←C1 (also scalar)
7. Return a numeric array as zeros, increasing the last dimension by 1.
Restriction: assume that the keyboard does not have the times (×), take (?), minus (-), or comma (,) symbols and it does not end with ⍴0.
ZM←{((((¯1+⍴⍴⍵)⍴0),1)+⍴⍵)⍴⍵=⍵+1} ⍝ ⍵←D
8. Return the first ones from a Boolean vector.
Restriction: assume that the keyboard does not have the not (~) or rotate (²) symbols.
FO←{⍵^1,(1↓⍵)≠¯1↓⍵} ⍝ ⍵←B1
9. Return the last ones from a Boolean vector.
Restriction: assume that the keyboard does not have the not (~) or rotate (²) symbols.
LO←{⍵^((1↓⍵)≠¯1↓⍵),1} ⍝ ⍵←B1
10. Return the elements of a numeric array found at given coordinates.
Restrictions: assume that a looping solution is not allowed nor one involving semi-colon and that index origin is 1.
RE← {(,⍺)[1+(⍴⍺)⊥⍉⍵-1]} ⍝ ⍺←D2 ; ⍵←D 1
More Solutions ...
I present some solutions to the problems posed by Ajay Askoolum in APL Idioms, Vector 21:4, pp92-96.
The development is for a great part from my libraries originated in the 198x years on :
/APLSV IBM5110/APL68000 Wicat&Ampère/later/IBMAPL2 PS+PC/IBMwinAPL2/
All are shown as DDF valid I-APL. Tests are made in I-APL to be sure that the code is OK. But the function code is cloned in APL2 Unicode, for a better understanding.
= Requested functions APL2, valid with several interpreters.
LIM: +/×(2⍴⍺)∘.-⍵ SN: (⍴⍵)⍴(,⍵)[⍋IX+~×IX←⌈10⍟LG+~×LG←|,⍵] LS: -⌿⍵×⍉(⌽⍴⍵)⍴(1↑(⍴⍵),1)⍴1 ˉ1 CN: ((⍴⍵)⍴10⊥⍵←'0123456789'⍳⍵ : ⎕IO←0 : 0 FO: ⍵>ˉ1↓0,⍵ LO: ⍵>1↓⍵,0 RE: (,⍺)[⎕IO+R⊥⍵-⎕IO] : ∨/0=(R←⍴⍺),⍴⍵←⍉⍵ : ⍳0
= Functions which do not match prerequisite
CE: ⍴1/⍵ ⍝ Answer fail LD: ˉ1↑[1↑(⍳⍴⍴⍵),1)⍵ ⍝ ⍴ is forbidden ZM: ~⍵÷⍵←⍵,1 ⍝ , is forbidden
C. Henriod, retired IBM Advisory SE, chenriod@vtx.ch
December 7, 2005.