Skip to content

Instantly share code, notes, and snippets.

@guchimon99
Created January 29, 2019 07:53
Show Gist options
  • Select an option

  • Save guchimon99/df776bbfec8687f4faab47ff8e9aa8f3 to your computer and use it in GitHub Desktop.

Select an option

Save guchimon99/df776bbfec8687f4faab47ff8e9aa8f3 to your computer and use it in GitHub Desktop.
トイレットペーパーを甲とし、甲を逆向きに設置する者を乙、乙の設置した甲を正す者を丙、丙が正した甲を使用する者を丁としたとき、丁が甲を利用することが明確になった時点で、乙は丙に対する報酬の義務を負うが、丁が甲を利用することが明確になる前に乙が丙になった場合はこれを無いものとする。
function 人(名前){
this.名前 = 名前
this.支払い義務 = null
}
function 支払い義務 (支払先, 額) {
this.支払先 = 支払先
this.額 = 額
}
function トイレットペーパー() {
this.設置記録一覧 = []
this.利用記録一覧 = []
this.利用され時の処理 = []
}
トイレットペーパー.prototype = {
設置: function(人, 向き){
var 記録 = new トイレットペーパー設置記録(人, 向き)
this.設置記録一覧.push(記録)
console.log(`${記録.人.名前} によりトイレットペーパーが ${記録.向き == トイレットペーパー.向き.正 ? "正しい" : "逆の" } 向きに設置されました`)
},
利用: function(人) {
var 記録 = new トイレットペーパー利用記録(人)
this.利用記録一覧.push(記録)
console.log(`${記録.人.名前} によりトイレットペーパーが利用されました`)
this.利用され時の処理.forEach((処理) => {
処理.bind(this)(記録)
})
},
利用された時: function(処理) {
this.利用され時の処理.push(処理)
},
get 最後に逆向きに設置した人() {
var 設置した人 = null
this.設置記録一覧.reverse().some((記録) => {
if(記録.向き == トイレットペーパー.向き.逆) {
設置した人 = 記録.人
return true
}
return false
})
return 設置した人
},
get 最後に向きを正して設置した人() {
var 正しく設置した人 = null
var 逆向きに設置した人 = null
this.設置記録一覧.reverse().some((記録) => {
if (記録.向き == トイレットペーパー.向き.逆) {
逆向きに設置した人 = 記録.人
return (正しく設置した人 != null)
}
正しく設置した人 = 記録.人
return false
})
if (正しく設置した人 == null || 逆向きに設置した人 == null) {
return null
}
return 正しく設置した人
}
}
トイレットペーパー.向き = {
正: 1,
逆: 2
}
function トイレットペーパー設置記録 (人, 向き) {
this.人 = 人
this.向き = 向き
this.日時 = new Date()
}
function トイレットペーパー利用記録 (人) {
this.人 = 人
this.日時 = new Date()
}
var 会社のトイレットペーパー = new トイレットペーパー()
var 部長 = new 人("田中")
var 掃除係 = new 人("鈴木")
var 来客 = new 人("木村")
会社のトイレットペーパー.利用された時(function(利用記録){
try {
var 甲 = this
var 乙 = 甲.最後に逆向きに設置した人
var 丙 = 甲.最後に向きを正して設置した人
var 丁 = 利用記録.人
if (乙 == null) throw new Error("最後に逆向きに設置した人はいませんでした")
if (丙 == null) throw new Error("最後に向きを正して設置した人はいませんでした")
if (乙 == 丙) throw new Error("最後に逆向きに設置した人と最後に向きを正して設置した人が一致しました。")
乙.支払い義務 = new 支払い義務(丙, "1000円")
console.log(`${丁.名前} の利用が確定したため、${乙.名前} は ${乙.支払い義務.支払先.名前} に対して ${乙.支払い義務.額} の支払いを義務付けられました`)
} catch (e) {
console.info(`以下の理由のため支払いは発生しませんでした : ${e.message}`)
}
})
会社のトイレットペーパー.設置(部長, トイレットペーパー.向き.逆)
会社のトイレットペーパー.設置(掃除係, トイレットペーパー.向き.正)
会社のトイレットペーパー.利用(来客)
@guchimon99
Copy link
Author

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