範囲内の2つの数値の違いを見つけたいのですが、循環リストのように、範囲の先頭に折り返すことができる必要があります。
範囲は9です。
したがって、数値が6で推測が5の場合、答えは1になりますが、数値が8で推測が2の場合、答えは3になります。
私の最初の考えは、次のように数を10増やすことでした。
n is the correct number, g is the guess, r is the result.
( let
[ r (min (- (+ n 10) g) (- g n)) ]
(if (> 0 r) ( * -1 r ) r) )
)
...そしてそれはラップアラウンドには機能しましたが、問題は、10という数字が存在すると、ラップすると結果が1増えることです。結果から1を引くか、数値を引くだけでは、すべての場合に機能するわけではありません。
問題の数値に応じて、結果は負になるため、ifステートメントはそれを正に入れ替えます。
これは正確にはclojureの問題ではなく、実際には数学の問題であり、どの言語でもこの問題が発生しますが、それが私が書いていることです。clojure(または関数型)を使い始めたばかりです。言語)、それは完全に私が間違ったことをしている、または非常に単調なことをしている可能性があります。
助けてくれてありがとう