Thủ thuật để đối phó /
và ⌿
trong xe lửa
Khi sử dụng xe lửa, bạn có thể muốn sử dụng các mức giảm f/
như tổng +/
hoặc thậm chí nhân rộng //
. Tuy nhiên, nếu đoàn tàu của bạn có nhiều phần ở bên trái của phần giảm, bạn cần có dấu ngoặc đơn để tạo một đỉnh. Dưới đây là một số thủ thuật để lưu byte.
Sử dụng 1∊
thay vì đơn âm ∨/
hoặc ∨⌿
trên mảng Boolean
Nhiệm vụ: Cho hai chuỗi A và B có độ dài bằng nhau, trả về 2 nếu bất kỳ ký tự tương ứng nào của A và B bằng nhau, 0 nếu không. Ví dụ A←'abc'
và B←'def'
cho 0
và A←'abc'
và B←'dec'
cho 2
.
Một giải pháp dfn có thể được A{2×∨/⍺=⍵}B
nhưng bạn muốn rút ngắn nó bằng cách đi ngầm. A(2×∨/=)B
sẽ không hoạt động bởi vì các quy tắc hình thành tàu phân tích điều này như 2 (× ∨/ =)
nhưng bạn muốn 2 × (∨/=)
.
Quan sát rằng ∨/
hoặc ∨⌿
trên một vectơ Boolean ( ∨/,
hoặc ∨⌿,
cho các mảng thứ hạng cao hơn) hỏi xem có bất kỳ 1 hiện tại nào không 1∊
, vì vậy chúng ta có thể viết chuyến tàu của mình dưới dạng 2×1∊=
.
Lưu ý rằng ∊
phá hủy đối số đúng của nó, vì vậy bạn không thể sử dụng nó để giảm từng hàng hoặc cột riêng biệt.
Sử dụng 1⊥
thay vì đơn nguyên +/
hoặc+⌿
Nhiệm vụ: Đưa ra danh sách danh sách L và chỉ số N, trả về ba lần tổng của danh sách thứ N. Ví dụ L←(3 1 4)(2 7)
và N←1
cho 24
.
Một giải pháp dfn có thể được N{3×+/⍺⊃⍵}L
nhưng bạn muốn rút ngắn nó bằng cách đi ngầm. N(3×+/⊃)L
sẽ không hoạt động bởi vì các quy tắc hình thành tàu phân tích điều này như 3(× +/ ⊃)
nhưng bạn muốn 3 × (+/⊃)
.
Quan sát rằng việc đánh giá danh sách các số trong unary (cơ số 1) tương đương với tổng hợp danh sách vì ∑ { a , b , c , d } = a + b + c + d = ( a × 1³) + ( b × 1² ) + ( c × 1¹) + ( d × 1⁰). Vì vậy +/a b c d
, giống như 1⊥a b c d
, và chúng ta có thể viết tàu của chúng tôi là 3×1⊥⊃
.
Lưu ý rằng trên các đối số cấp cao hơn, 1⊥
tương đương với +⌿
.
Sử dụng f.g
thay vì f/g
với các đối số vô hướng và / hoặc vector
Nhiệm vụ: Cho một danh sách L và một số N, trả về phạm vi 1 triệt để số phần còn lại của phép chia tối thiểu khi các phần tử của L được chia cho NEg L←31 41 59
và N←7
cho 1 2 3
.
Một giải pháp dfn có thể được N{⍳⌊/⍺|⍵}L
nhưng bạn muốn rút ngắn nó bằng cách đi ngầm. N(⍳⌊/|)L
sẽ không hoạt động bởi vì các quy tắc hình thành tàu phân tích điều này như ⍳ (⌊/) |
nhưng bạn muốn ⍳ (⌊/|)
.
Sản phẩm bên trong A f.g B
của hai hàm vô hướng khi các đối số là vô hướng và / hoặc vectơ giống như f/ A g B
vì cả hai đều (A[1] g B[1]) f (A[2] g B[2]) f (A[3] g B[3])
v.v., vì vậy chúng ta có thể viết chuyến tàu của mình là ⍳⌊.|
.
Lưu ý rằng điều này không hoạt động cho các mảng cấp cao hơn.
Sử dụng ∊⊆
thay vì /
với Boolean bên trái và các đối số vector bên phải đơn giản
Nhiệm vụ: Đưa ra danh sách L và số N, lọc danh sách sao cho chỉ còn lại số lớn hơn N. Ví dụ L←3 1 4
và N←1
cho 3 4
.
Một giải pháp dfn có thể N{(⍺<⍵)/⍵}L
nhưng bạn muốn rút ngắn nó bằng cách đi ngầm. N(</⊢)L
sẽ không hoạt động vì các quy tắc ràng buộc sẽ phân tích cú pháp này (</) ⊢
nhưng bạn muốn /
trở thành chức năng sao chép thay vì toán tử giảm .
Dyadic ⊆
với một đối số bên trái Boolean phân vùng đối số bên phải theo các lần chạy 1s trong đối số bên trái, bỏ các phần tử được chỉ định bởi 0s. Đây gần như là những gì chúng ta muốn, tiết kiệm cho phân vùng không mong muốn. Tuy nhiên, chúng ta có thể thoát khỏi phân vùng bằng cách áp dụng đơn âm ∊
. Do đó {(⍺<⍵)/⍵}
có thể trở thành {∊(⍺<⍵)⊆⍵}
và do đó chúng ta có thể viết tàu của chúng tôi như ∊<⊆⊢
.
Lưu ý rằng điều này không hoạt động cho các mảng cấp cao hơn.
Sử dụng 0⊥
thay vì ⊢/
hoặc ⊢⌿
với các đối số số
Nhiệm vụ: Cho một danh sách L và một số N, nhân N với phần tử ngoài cùng bên phải của LEg L←3 1 4
và N←2
cho 8
.
Một giải pháp dfn có thể được N{⍺×⊢/⍵}L
nhưng bạn muốn rút ngắn nó bằng cách đi ngầm. N(⊣×⊢/⊢)L
sẽ không hoạt động bởi vì các quy tắc hình thành tàu phân tích điều này như ⊣ (× ⊢/ ⊢)
nhưng bạn muốn ⊣ × (⊢/⊢)
.
Quan sát rằng 0⊥
trên một mảng số giống như ⊢⌿
, vì vậy chúng ta có thể viết chuyến tàu của mình là ⊣×0⊥⊢
.
Lưu ý rằng điều này chọn ô chính cuối cùng của mảng thứ hạng cao hơn.