トラック
/
Clojure
Clojure
/
演習
/
エリウドの卵
エリウドの卵

エリウドの卵

初級

はじめに

友人のEliudは、祖母のTigistから農場を受け継ぎました。 おばあさんは発明家で、物事を過度に複雑な方法で作りがちでした。 鶏小屋にはデジタルディスプレイが付いていて、拾うことができるすべての卵の位置を表す、符号化された数値が表示されています。

Eliudは、鶏小屋にある実際の卵の数を表示するプログラムを書いてほしいと頼んでいます。

位置情報の符号化は、次のようにして計算します。

  1. 卵が産まれそうな場所を順に見ていき、卵があれば1、空っぽなら0を書き留めます。
  2. その数値を2進数から10進数に変換します。
  3. 結果をディスプレイに表示します。

例1

一列に並んだ7つの巣箱。1番目、3番目、4番目、7番目の巣にそれぞれ卵が1つずつ入っています。

 _ _ _ _ _ _ _
|E| |E|E| | |E|

変換後の2進数

1011001

 _ _ _ _ _ _ _
|1|0|1|1|0|0|1|

ディスプレイに表示される10進数

89

鶏小屋にある実際の卵の数

4

例2

一列に並んだ7つの巣箱。4番目の巣にだけ卵が入っています。

 _ _ _ _ _ _ _
| | | |E| | | |

変換後の2進数

0001000

 _ _ _ _ _ _ _
|0|0|0|1|0|0|0|

ディスプレイに表示される10進数

8

鶏小屋にある実際の卵の数

1

説明

数値の2進数表現に含まれる1になっているビットの数を数えることが課題です。

制限

標準ライブラリが提供しているビットを数える機能には手を出さないでください! 代わりに、他の基本的なツールを使って自分で解いてください。

付録

Note

上の説明は、すべての言語トラックで一貫性を保つため、共有リポジトリと同期されています。 この付録では、Clojureトラックの目標によりよく沿うよう、必要に応じて説明を補足したり変更したりしています。

実装しようとしている関数と似た機能を持つ既存の組み込み関数を使わないことが大切です。使ってしまうと、この演習が本来意図している学習上の価値が損なわれるからです。 Clojureには、数値のビット数を数える組み込み関数はありません。そのため、実装ではどのClojure関数を使ってもかまいません。 ただし、Javaにはこの目的のための関数bitCountが用意されています。

GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Clojure Exercism

エリウドの卵を始める準備はできましたか?

Exercismに登録すれば、12個のコンセプト105個の演習、そして本物の人間によるメンタリングとともに、Clojureを学んでマスターできます。すべて無料です。