문제

기호로 계산을 수행해야합니다. HH : MM 형태의 시간을 통과 한 분으로 변환해야합니다.

;; (get-minutes symbol)->number
;; convert the time in hh:mm to minutes
;; (get-minutes 6:19)-> 6* 60 + 19

(define (get-minutes time)
  (let* ((a-time (string->list (symbol->string time)))
         (hour (first a-time))
         (minutes (third a-time))) 
    (+ (* hour 60) minutes)))

이것은 잘못된 코드이며, 모든 변환 후 캐릭터를 얻고 올바른 계산을 수행 할 수 없습니다.

여러분은 제안이 있습니까? 입력 유형을 변경할 수 없습니다.
컨텍스트 : 입력은 비행 일정이므로 데이터 구조를 변경할 수 없습니다.

;; ----------------------------------------------------------------------

편집 : 추악한 솔루션을 알아 냈습니다. 더 나은 것을 제안 해주세요.

(define (get-minutes time)
  (let* ((a-time (symbol->string time))
         (hour (string->number (substring a-time 0 1)))
         (minutes (string->number (substring a-time 2 4)))) 
    (+ (* hour 60) minutes)))
도움이 되었습니까?

해결책

String-Split에 대한 정의를 찾을 수 있습니다 여기. 그것은 당신이 선택한 구분자로 문자열을 분할 할 수있게합니다. 그런 다음 다음과 같이 Get-Minutes를 정의 할 수 있습니다.

(define (get-minutes time)
  (let* ((fields (string-split (symbol->string time) '(#\:)))
         (hour (string->number (first fields)))
         (minutes (string->number (second fields))))
    (+ (* hour 60) minutes)))

다른 팁

계산을 위해 수치 값으로 변환해야합니다. (Hour (String-> 숫자 (String (첫 번째 시간))) 1 분 동안 동일합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top