iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
Modern Web

clojure 刷刷鍋系列 第 7

Clojure 肉片 -第 7 塊

  • 分享至 

  • xImage
  •  

【心得】

  1. 終於把 practice / test code 搬到 local 搭配 REPL 工具,好處是每次改完 就能直接 evaluate 看結果對不對(如下圖)
    https://ithelp.ithome.com.tw/upload/images/20220921/20115908OnBTdPEAJ8.png

  2. 雖然今天題目不難,但在 clojure 裡要解決問題的同時,思考如何用 data structure 呈現出第一眼就好理解的 solution 就不容易了。覺得自己寫的第二種方式還不錯,不輸 best practice 呀XD

【今日湯底】

Clock shows h hours, m minutes and s seconds after midnight.

Your task is to write a function which returns the time since midnight in milliseconds.

Example:
h = 0
m = 1
s = 1

result = 61000
Input constraints:

0 <= h <= 23
0 <= m <= 59
0 <= s <= 59

(必須通過以下測試)

(ns kata.test
  (:require [clojure.test :refer :all]
            [kata         :refer [past]]))
(defn tester [h m s e]
  (testing (str "(past " h " " m " " s ")")
    (is (= (past h m s) e))))
(deftest basic-tests
  (tester 0 1 1 61000)
  (tester 1 1 1 3661000)
  (tester 0 0 0 0)
  (tester 1 0 1 3601000)
  (tester 1 0 0 3600000))

【我的答案】

(ns kata)
(defn past [h m s]
  (* 1000 (+ (* h 3600) (* m 60) s)))
)
(ns kata)
(defn past [h m s]
  (->
    (+ (* h 3600) (* m 60) s)
    (* 1000))
)

思路:

  1. 基本的時間換算
  2. 後來在想怎麼呈現 data structure 好讓人一眼就看出運算流程與邏輯,嘗試了 threading first(覺得不夠好,但也沒想到其他的)

【其他人的答案】

(ns kata)
(defn past [h m s]
  (+
   (* s 1000)
   (* m 60000)
   (* h 3600000)))
(ns kata)

(defn past [h m s]
  (->> h (* 60) (+ m)
         (* 60) (+ s)
         (* 1000)))

上一篇
Clojure 肉片 -第 6 塊
下一篇
Clojure 肉片 -第 8 塊
系列文
clojure 刷刷鍋30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言