コインの両替

30分プログラム、その804。コインの両替。
coin.scm - みずぴー日記に再チャレンジ。

使い方

gosh> exchange-coin
((2000 1) (100 1) (10 4) (1 2))

ソースコード

#! /opt/local/bin/gosh
;; -*- mode:scheme; coding:utf-8 -*-
(use util.match)
(use gauche.sequence)
(and '() 1)
(define (exchange cost coins)
  (if (< cost 0)
      '()
      (match coins
	     (() '())
	     ((c . cs) (if (<= c cost)
			   (cons c (exchange (- cost c) (cons c cs)))
			   (exchange cost cs))))))

(define (group xs)
  (map (lambda (xs) (list (car xs) (length xs)))
       (group-sequence xs)))

(define (exchange-coin cost)
  (group (exchange cost '(10000 5000 2000 1000 500 100 50 10 5 1))))