Dyalog APL比賽-2019年-Phase 1-第2題

先看看題目要求:


這是相對容易的一條題目吧,以下用NARS2000解題。

題目要求寫一個函數Z,當Z被輸入引數 N(0至100)的時候,傳回相對應的字母評級,就好似小學生的考試評級一樣。

思路非常簡單:建立字母陣列V,V 由65個F(0分至64分)、5個D(65分至69分)、10個 C(依此類推)、10個B及11個A順序組成;然後用N做陣列V的指數,返回V[N+1]的值。用圖像表示:


提交的程式碼如下:


解說一下:
  1. 表達式 (65 5 10 10 11)/'FDCBA' 用 replicate 函數 "/" 建構陣列 V
  2. 於是陣列 V 由65個 F,5個 D,10個 C,10個 B,11個 A 組成
  3. 基於右引數 ,提取V的第 ⍵+1 個元素(何以?因為 Z 0 要傳回 V 的第1個元素,而 Z 100 則需要傳回V的第101個元素,如此類推)
  4. 注意,這個寫法容許 陣列,也是題目的要求。例如:


APL 的簡潔總是給人一種不能言喻的美感。



一項更正:

原文介紹 "/" 時把它稱作運算子,但在以上用法中,其作用應為函數。

留言

這個網誌中的熱門文章

Project Euler第八題

APL Code Golfing

以APL模擬大話骰