Skip to content

Instantly share code, notes, and snippets.

@yattom
Last active September 24, 2019 02:06
Show Gist options
  • Save yattom/567dfa484016012e21a0 to your computer and use it in GitHub Desktop.
Save yattom/567dfa484016012e21a0 to your computer and use it in GitHub Desktop.

TDDBC課題:整数の区間

課題1 整数の閉区間 (closed range)

【例】

[3,8]
-> 下端点 (lower endpoint) が3, 上端点 (upper endpoint) が8 である整数閉区間
-> 3 と 8 は区間に含まれます

課題1-1

  • 下端点と上端点を与えて閉区間を生成しよう
  • 閉区間から下端点と上端点を取得しよう
  • 閉区間から文字列表記を取得しよう

【例】

// [3,8] を生成
ClosedRange c3to8 = new ClosedRange(3,8);
// [3,8] の下端点は 3
int lowerEndpoint = c3to8.getLowerEndpoint(); // => 3
// [3,8] の上端点は 8
int upperEndpoint = c3to8.getUpperEndpoint(); // => 8
// [3,8] の文字列表記は "[3,8]"
String notation = c3to8.toString(); // => "[3,8]"
// [8,3] は生成出来ない
ClosedRange c8to3 = new ClosedRange(8,3); // => エラー

課題1-2

  • 閉区間が指定した整数を含むか (contains) 判定しよう

【例】

// [3,8] は 5 を含む
c3to8.contains(5); // => true
// [3,8] は -1 を含まない
c3to8.contains(-1); // => false

課題1-3

  • 閉区間が別の閉区間と等しいか (equals) 判定しよう

【例】

// [3,8] は [3,8] と等しい
c3to8.equals(new ClosedRange(3, 8)); // => true
// [3,8] は [1,6] と等しくない
c3to8.equals(c1to6); // => false

課題2 整数の開区間 (open range)

【例】

 (3,8)
-> 下端点 (lower endpoint) が3, 上端点 (upper endpoint) が8 である開区間
-> 3 と 8 は区間に含まれない

課題2-1

  • 下端点と上端点を与えて開区間を生成しよう
  • 開区間の下端点と上端点を取得しよう
  • 開区間の文字列表記を取得しよう

課題2-2

  • 開区間が指定した整数を含むか (contains) 判定しよう

課題2-3

  • 開区間が別の開区間と等しいか (equals) 判定しよう

課題3 半開区間 (open closed range)

左閉右開区間 (left-closed right-open range)
-> [a,b) = {x | a<=x<b}
左開右閉区間 (left-open right-closed range)
-> (a,b] = {x | a<x<=b}

(補足) [a,a) , (a,a] = Φ (空区間)

課題3-1

  • 閉区間/開区間と同等の機能を実装しよう

課題4 閉区間/開区間/半開区間への機能追加

課題4-1

  • 閉区間/開区間/半開区間が等しいか (equals) 判定しよう
  • 区間が別の区間と接続しているか (isConnectedTo) 判定しよう

【例】

// [3,8] は [1,6] と接続している
c3to8.isConnectedTo(c1to6); // => true
// [3,8] は [8,15] と接続している
c3to8.isConnectedTo(c8to15); // => true
// [3,8] と [9,12] は接続していない
c3to8.isConnectedTo(c9to12); // => false

課題4-2

  • 指定した全ての整数を含むか (containsAll) 判定しよう
  • 閉区間と別の閉区間との共通集合 (intersection) を取得しよう

【例】

// [3,8] は 4, 7, 3 を全て含む
c3to8.containsAll(Arrays.asList(4,7,3)); // => true
// [3,8] は 6, -1 のいずれかを含まない
c3to8.containsAll(Arrays.asList(6,-1)); // => false
// [3,8] と [4, 10] の共通集合は [4,8]
c3to8.getIntersection(c4to10); // => [4,8]
// [3,8] と [9,12] は共通集合を持たない
c3to8.getIntersection(c9to12); // => エラー

課題4-3

  • 文字列表記を解析して (parse) 区間を生成しよう

【例】

// 文字列 "[3,8]" をパースすると閉区間 [3,8] を生成する
ClosedRange c3to8 = ClosedRange.parse("[3,8]") // => [3,8] を表すオブジェクト

課題5 無限区間 (infinite range)

以上 (at least)
-> [a,+∞) = {x | a<=x}
より大きい (greater than)
-> (a,+∞) = {x | a<x}
以下 (at most)      
-> (-∞,b] = {x | x<=b}
未満 (less than)     
-> (-∞,b) = {x | x<b}
整数全体 (all)  
-> (-∞,+∞) = {x}

課題5-1

  • 閉区間/開区間/半開区間と同等の機能を実装しよう

ライセンス

クリエイティブ・コモンズ・ライセンス この演習問題は クリエイティブ・コモンズ 表示 - 継承 2.1 日本 ライセンスの下に提供されています。

(C) Tsutomu YASUI / やっとむ (tsutomu.yasui at gmail.com)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment