diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..63e2048 Binary files /dev/null and b/.DS_Store differ diff --git a/.gitignore b/.gitignore index d18f225..c357d4b 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ pom.xml.asc /.nrepl-port .hgignore .hg/ +.DS_Store diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..b849713 --- /dev/null +++ b/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-leap-day \ No newline at end of file diff --git a/index-runALLGame.js b/index-runALLGame.js new file mode 100644 index 0000000..bab83dc --- /dev/null +++ b/index-runALLGame.js @@ -0,0 +1,25 @@ +function runALLGame() { + + console.log("\n\njust run it <===\n") + require('./myJS/cardA-impertive.js') + + console.log("\n\nstore it as variables then run it <---\n") + var oneGame = require('./myJS/cardA-impertive.js'); + oneGame(); + + console.log("\n\njust run it but now it is a Class<===\n") + require('./myJS/cardB-OO.js') + + console.log("\n\nstore it as variables then run it <---\n") + oneGame = require('./myJS/cardB-OO.js'); + new oneGame(); + + console.log("\n\njust run it but now it is a FP<===\n") + require('./myJS/cardC-FP-0.js') + + console.log("\n\nstore it as variables then run it <---\n") + oneGame = require('./myJS/cardC-FP-0.js'); + oneGame(); +}; + +module.exports = runALLGame; \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..add8def --- /dev/null +++ b/index.js @@ -0,0 +1,9 @@ +//console.log("\n\njust run it but now it is ALL<===\n") +//var ALLGame = require('./index-runALLGame.js') +//ALLGame(); // <-- note the different syntax of the OO or new class thing + +//console.log("\n\njust run it but now it is a FP<-----------===\n"); +//require('./myJS/cardC-FP-1-8cards.js'); + +console.log("\n\njust run it but now it is a FP with 13 cards still 2 players<-----------===\n"); +require('./myJS/cardC-FP-1-13cards.js'); diff --git a/index.js.log.txt b/index.js.log.txt new file mode 100644 index 0000000..132857a --- /dev/null +++ b/index.js.log.txt @@ -0,0 +1,70 @@ +node index.js + + +just run it but now it is a FP<-----------=== + +-------------------------------- + Turn 0: + (-- last Bounty Cards : 0,) + (-- last Playing Cards : 0 and 0,) + current player Scores : 0 and 0, + remaining bounty Cards : 1,2,3,4,5,6,7,8, + on hand player Cards : 1,2,3,4,5,6,7,8 and 1,2,3,4,5,6,7,8. +-------------------------------- + Turn 1: + (-- last Bounty Cards : 5,) + (-- last Playing Cards : 3 and 5,) + current player Scores : 0 and 5, + remaining bounty Cards : 1,2,3,4,6,7,8, + on hand player Cards : 1,2,4,5,6,7,8 and 1,2,3,4,6,7,8. +-------------------------------- + Turn 2: + (-- last Bounty Cards : 4,) + (-- last Playing Cards : 5 and 4,) + current player Scores : 4 and 5, + remaining bounty Cards : 1,2,3,6,7,8, + on hand player Cards : 1,2,4,6,7,8 and 1,2,3,6,7,8. +-------------------------------- + Turn 3: + (-- last Bounty Cards : 7,) + (-- last Playing Cards : 1 and 7,) + current player Scores : 4 and 12, + remaining bounty Cards : 1,2,3,6,8, + on hand player Cards : 2,4,6,7,8 and 1,2,3,6,8. +-------------------------------- + Turn 4: + (-- last Bounty Cards : 6,) + (-- last Playing Cards : 2 and 6,) + current player Scores : 4 and 18, + remaining bounty Cards : 1,2,3,8, + on hand player Cards : 4,6,7,8 and 1,2,3,8. +-------------------------------- + Turn 5: + (-- last Bounty Cards : 2,) + (-- last Playing Cards : 4 and 2,) + current player Scores : 6 and 18, + remaining bounty Cards : 1,3,8, + on hand player Cards : 6,7,8 and 1,3,8. +-------------------------------- + Turn 6: + (-- last Bounty Cards : 8,) + (-- last Playing Cards : 7 and 8,) + current player Scores : 6 and 26, + remaining bounty Cards : 1,3, + on hand player Cards : 6,8 and 1,3. +-------------------------------- + Turn 7: + (-- last Bounty Cards : 1,) + (-- last Playing Cards : 6 and 1,) + current player Scores : 7 and 26, + remaining bounty Cards : 3, + on hand player Cards : 8 and 3. +-------------------------------- + Turn 8: + (-- last Bounty Cards : 3,) + (-- last Playing Cards : 8 and 3,) + current player Scores : 10 and 26, + remaining bounty Cards : , + on hand player Cards : and . +Scores: 10 v 26 +PLayer 1 Wins! \ No newline at end of file diff --git a/myJS/cardA-impertive.js b/myJS/cardA-impertive.js new file mode 100644 index 0000000..63bead3 --- /dev/null +++ b/myJS/cardA-impertive.js @@ -0,0 +1,63 @@ +// node cardA-impertive.js + +function runGame() { + let turn = 0; + let bountyCards = [1, 2, 3, 4, 5, 6, 7, 8]; + let playerCards = [[1, 2, 3, 4, 5, 6, 7, 8], + [1, 2, 3, 4, 5, 6, 7, 8]]; + let playerScores = [0, 0]; + + while (bountyCards.length > 0) { + + const bountyCard = popRandom(bountyCards); + console.log(`Turn ${turn}: Bounty: ${bountyCard}`); + const card0 = playRandomStrategy(playerCards[0], bountyCard); + const card1 = playEqualStrategy(playerCards[1], bountyCard); + turn +=1; + + if (card0 > card1) { + playerScores[0] += bountyCard; + } else if (card1 > card0){ + playerScores[1] += bountyCard; + } else { + //console.log(`\ncard0 is ${card0}`); + //console.log(`card1 is ${card1}`); + console.log("the competition card is discarded!!") + } + } + + console.log(`Scores: ${playerScores[0]} v ${playerScores[1]}`); + + if (playerScores[0] == playerScores[1]) { + console.log("PLayer Tie.") + } else if (playerScores[0] > playerScores[1]) { + console.log("PLayer 0 Wins!") + } else { + console.log("PLayer 1 Wins!") + } +} + +runGame(); + +function popRandom(arr){ + const index = Math.floor(Math.random() * arr.length); + const value = arr[index]; + arr.splice(index, 1); + return value; +} + +function playRandomStrategy(playerCards, bountyCard){ + const card = popRandom(playerCards); + console.log(`\tPlayer 0 plays: ${card}`); + return card; +} + +function playEqualStrategy(playerCards, bountyCard){ + playerCards.splice(playerCards.indexOf(bountyCard),1); + console.log(`\tPlayer 1 plays: ${bountyCard}`); + return bountyCard; +} + +module.exports = runGame; + +// see https://evdokimovm.github.io/javascript/nodejs/2016/06/13/NodeJS-How-to-Use-Functions-from-Another-File-using-module-exports.html \ No newline at end of file diff --git a/myJS/cardB-OO.js b/myJS/cardB-OO.js new file mode 100644 index 0000000..cdef55e --- /dev/null +++ b/myJS/cardB-OO.js @@ -0,0 +1,105 @@ +// node cardB-OO.js + +class Deck { + constructor() { + this.cards = [1, 2, 3, 4, 5, 6, 7, 8]; + } + + popRandom(){ + const index = Math.floor(Math.random() * this.cards.length); + const value = this.cards[index]; + this.cards.splice(index, 1); + return value; + } + + remove(cardValue){ + this.cards.splice(this.cards.indexOf(cardValue), 1); + } + + hasCards() { + return this.cards.length > 0; + } +} + +class Player{ + constructor() { + this.cards = new Deck(); + this.score = 0; + } + + scorePoint(value){ + this.score +=value; + } + + getScore() { + return this.score; + } +} + +class RandomPlayer extends Player{ + playCard(scoreCard){ + return this.cards.popRandom(); + } +} + +class EqualPlayer extends Player{ + playCard(scoreCard){ + this.cards.remove(scoreCard); + return scoreCard; + } +} + +class Game { + constructor() { + this.players =[new RandomPlayer(), new EqualPlayer()]; + this.scoreCards = new Deck(); + this.turn = 0; + } + + playTurn(){ + const scoreCard = this.scoreCards.popRandom(); + + console.log(`Turn ${this.turn}: Bounty: ${scoreCard}`); + + const card0 = this.players[0].playCard(scoreCard); + const card1 = this.players[1].playCard(scoreCard); + + console.log(`\tP0: ${card0}`); + console.log(`\tP1: ${card1}`); + + if (card0 > card1) { + this.players[0].scorePoint(scoreCard) + } else if (card1 > card0){ + this.players[1].scorePoint(scoreCard) + } else { + //console.log(`\ncard0 is ${card0}`); + //console.log(`card1 is ${card1}`); + console.log("the competition card is discarded") + } + + this.turn += 1; + } + + playGame(){ + while (this.scoreCards.hasCards()){ + this.playTurn(); + } + + console.log(`Scores: ${this.players[0].score} v ${this.players[1].score}`) + + if (this.players[0].score == this.players[1].score){ + console.log("PLayer Tie.") + } else if (this.players[0].score > this.players[1].score) { + console.log("PLayer 0 Wins!") + } else { + console.log("PLayer 1 Wins!") + } + } +} + +// need these lines to creat the game and run it !! + +game = new Game(); +game.playGame() + +module.exports = Game; \ No newline at end of file diff --git a/myJS/cardC-FP-0.js b/myJS/cardC-FP-0.js new file mode 100644 index 0000000..e6f831f --- /dev/null +++ b/myJS/cardC-FP-0.js @@ -0,0 +1,64 @@ +// from node card0-impertive.js +// refactoring by stages + +// adopt the competition card is discarded as in wiki: https://en.wikipedia.org/wiki/Goofspiel + +function runGame() { + let turn = 0; + let bountyCards = [1, 2, 3, 4, 5, 6, 7, 8]; + let playerCards = [[1, 2, 3, 4, 5, 6, 7, 8], + [1, 2, 3, 4, 5, 6, 7, 8]]; + let playerScores = [0, 0]; + + while (bountyCards.length > 0) { + + const bountyCard = popRandom(bountyCards); + console.log(`Turn ${turn}: Bounty: ${bountyCard}`); + const card0 = playRandomStrategy(playerCards[0], bountyCard); + const card1 = playEqualStrategy(playerCards[1], bountyCard); + turn +=1; + + if (card0 > card1) { + playerScores[0] += bountyCard; + } else if (card1 > card0){ + playerScores[1] += bountyCard; + } else { + //console.log(`\ncard0 is ${card0}`); + //console.log(`card1 is ${card1}`); + console.log("the competition card is discarded") + } + } + + console.log(`Scores: ${playerScores[0]} v ${playerScores[1]}`); + + if (playerScores[0] == playerScores[1]) { + console.log("PLayer Tie.") + } else if (playerScores[0] > playerScores[1]) { + console.log("PLayer 0 Wins!") + } else { + console.log("PLayer 1 Wins!") + } +} + +runGame(); + +function popRandom(arr){ + const index = Math.floor(Math.random() * arr.length); + const value = arr[index]; + arr.splice(index, 1); + return value; +} + +function playRandomStrategy(playerCards, bountyCard){ + const card = popRandom(playerCards); + console.log(`\tPlayer 0 plays: ${card}`); + return card; +} + +function playEqualStrategy(playerCards, bountyCard){ + playerCards.splice(playerCards.indexOf(bountyCard),1); + console.log(`\tPlayer 1 plays: ${bountyCard}`); + return bountyCard; +} + +module.exports = runGame; \ No newline at end of file diff --git a/myJS/cardC-FP-1-13cards.js b/myJS/cardC-FP-1-13cards.js new file mode 100644 index 0000000..7b74516 --- /dev/null +++ b/myJS/cardC-FP-1-13cards.js @@ -0,0 +1,133 @@ +// from node card0-impertive.js +// refactoring by stages +// - stage a : (try to remove mutation) just move logging so no mutation in the fuction +// - stage b : (make popRandom () pure) avoid play Random using in place mutation array splice +// - stage c : (make payEqual () pure) +// - stage d : (extract winMessage) try to avoid logic in display message +// - stage e : (combine end message) +// - stage f : (combine sate vars into one) +// - stage g : (creat a nextState()) basically it is generalisd to nextState( current state) +// - stage h : (create a turn message) +// - stage i : (store states in an array) +// - stage j : (split into runGame() and report()) +// - stage k : (using recursion instead of loop) + +// the competition card is discarded as in wiki: https://en.wikipedia.org/wiki/Goofspiel +// total score can be less if there are equal card and the value was droped + +function without(arr, value){ + const index = arr.indexOf(value); + return [...arr.slice(0, index), ...arr.slice(index+1)]; +} + +function winMessage(playerScores) { + if (playerScores[0] == playerScores[1]) { + return "PLayer Tie.\n"; + } else if (playerScores[0] > playerScores[1]) { + return "PLayer 0 Wins!\n"; + } else { + return "PLayer 1 Wins!\n"; + } +} + +function scoreMessage(playerScores){ + return `Scores: ${playerScores[0]} v ${playerScores[1]}`; +} + +function endMessage(playerScores){ + return scoreMessage(playerScores) + "\n" + + winMessage(playerScores); +} + +function turnMessage(state){ + return `--------------------------------\n`+ + // status + + ` Turn ${state.turn}:`+ + `\n\t (-- last Bounty Cards : ${state.lastBountyCard},) ` + + `\n\t (-- last Playing Cards : ${state.lastPlayingCards[0]} and ${state.lastPlayingCards[1]},) ` + + `\n\t current player Scores : ${state.playerScores[0]} and ${state.playerScores[1]}, ` + + `\n\t remaining bounty Cards : ${state.bountyCards}, ` + + `\n\t on hand player Cards : ${state.playerCards[0]} and ${state.playerCards[1]}. ` +} + +function report(states, onTurn, onEnd){ + return states.map(onTurn).join("\n")+"\n"+ + onEnd(last(states).playerScores) // last(states) not lastState +} + +function newScore(playerScores, playerCards, bountyCard){ + if (playerCards[0] > playerCards[1]) { + return [playerScores[0]+bountyCard, playerScores[1]]; // not + 1 + } else if (playerCards[0] < playerCards[1]){ + return [playerScores[0] , playerScores[1]+bountyCard]; // not + 1 + } else { + return [playerScores[0] , playerScores[1]] // need this to return otherwise no state when card is equal (not needed under OO and imperative) + } +} + +function nextState(state) { + + const bountyCard = selectRandom(state.bountyCards); + + const card0 = playRandomStrategy(state.playerCards[0], bountyCard); + const card1 = playEqualStrategy(state.playerCards[1], bountyCard); + + return {turn: state.turn + 1, + bountyCards: without(state.bountyCards, bountyCard), + playerCards: [without(state.playerCards[0], card0), // need card0 + without(state.playerCards[1], card1)], // need card1 + lastBountyCard: bountyCard, + lastPlayingCards : [card0, card1], + playerScores: newScore(state.playerScores, + [card0, card1], + bountyCard) // need bountyCard1 + } +} + +function recur(states, stateChange, endCondition){ + if(endCondition(last(states))){ // missing one ) in the code + return states; + } else { + return recur(states.concat(stateChange(last(states))),stateChange, endCondition); // lastState should be last(states) and the function recur need 3 parameters not 1 parameter + } +} + +function runGame() { + let states = [{ turn : 0, + bountyCards : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], + playerCards : [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], + [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]], + lastBountyCard: 0, // need this to help logging + lastPlayingCards : [0, 0], // need this to help logging + playerScores : [0, 0]}] + + return recur(states, nextState, function(state){ + return state.bountyCards.length == 0; // not > 0 + }); + +} + + +console.log(report(runGame(), turnMessage, endMessage)); + + +function last(arr){ + return arr[arr.length - 1]; +} + +function selectRandom(arr){ + const index = Math.floor(Math.random() * arr.length); + return arr[index]; +} + +function playRandomStrategy(playerCards, bountyCard){ + const card = selectRandom(playerCards); + return card; +} + +function playEqualStrategy(playerCards, bountyCard){ + return bountyCard; +} + + +module.exports = runGame; // for running under external call \ No newline at end of file diff --git a/myJS/cardC-FP-1-8cards.js b/myJS/cardC-FP-1-8cards.js new file mode 100644 index 0000000..992337a --- /dev/null +++ b/myJS/cardC-FP-1-8cards.js @@ -0,0 +1,133 @@ +// from node card0-impertive.js +// refactoring by stages +// - stage a : (try to remove mutation) just move logging so no mutation in the fuction +// - stage b : (make popRandom () pure) avoid play Random using in place mutation array splice +// - stage c : (make payEqual () pure) +// - stage d : (extract winMessage) try to avoid logic in display message +// - stage e : (combine end message) +// - stage f : (combine sate vars into one) +// - stage g : (creat a nextState()) basically it is generalisd to nextState( current state) +// - stage h : (create a turn message) +// - stage i : (store states in an array) +// - stage j : (split into runGame() and report()) +// - stage k : (using recursion instead of loop) + +// the competition card is discarded as in wiki: https://en.wikipedia.org/wiki/Goofspiel +// total score can be less if there are equal card and the value was droped + +function without(arr, value){ + const index = arr.indexOf(value); + return [...arr.slice(0, index), ...arr.slice(index+1)]; +} + +function winMessage(playerScores) { + if (playerScores[0] == playerScores[1]) { + return "PLayer Tie.\n"; + } else if (playerScores[0] > playerScores[1]) { + return "PLayer 0 Wins!\n"; + } else { + return "PLayer 1 Wins!\n"; + } +} + +function scoreMessage(playerScores){ + return `Scores: ${playerScores[0]} v ${playerScores[1]}`; +} + +function endMessage(playerScores){ + return scoreMessage(playerScores) + "\n" + + winMessage(playerScores); +} + +function turnMessage(state){ + return `--------------------------------\n`+ + // status + + ` Turn ${state.turn}:`+ + `\n\t (-- last Bounty Cards : ${state.lastBountyCard},) ` + + `\n\t (-- last Playing Cards : ${state.lastPlayingCards[0]} and ${state.lastPlayingCards[1]},) ` + + `\n\t current player Scores : ${state.playerScores[0]} and ${state.playerScores[1]}, ` + + `\n\t remaining bounty Cards : ${state.bountyCards}, ` + + `\n\t on hand player Cards : ${state.playerCards[0]} and ${state.playerCards[1]}. ` +} + +function report(states, onTurn, onEnd){ + return states.map(onTurn).join("\n")+"\n"+ + onEnd(last(states).playerScores) // last(states) not lastState +} + +function newScore(playerScores, playerCards, bountyCard){ + if (playerCards[0] > playerCards[1]) { + return [playerScores[0]+bountyCard, playerScores[1]]; // not + 1 + } else if (playerCards[0] < playerCards[1]){ + return [playerScores[0] , playerScores[1]+bountyCard]; // not + 1 + } else { + return [playerScores[0] , playerScores[1]] // need this to return otherwise no state when card is equal (not needed under OO and imperative) + } +} + +function nextState(state) { + + const bountyCard = selectRandom(state.bountyCards); + + const card0 = playRandomStrategy(state.playerCards[0], bountyCard); + const card1 = playEqualStrategy(state.playerCards[1], bountyCard); + + return {turn: state.turn + 1, + bountyCards: without(state.bountyCards, bountyCard), + playerCards: [without(state.playerCards[0], card0), // need card0 + without(state.playerCards[1], card1)], // need card1 + lastBountyCard: bountyCard, + lastPlayingCards : [card0, card1], + playerScores: newScore(state.playerScores, + [card0, card1], + bountyCard) // need bountyCard1 + } +} + +function recur(states, stateChange, endCondition){ + if(endCondition(last(states))){ // missing one ) in the code + return states; + } else { + return recur(states.concat(stateChange(last(states))),stateChange, endCondition); // lastState should be last(states) and the function recur need 3 parameters not 1 parameter + } +} + +function runGame() { + let states = [{ turn : 0, + bountyCards : [1, 2, 3, 4, 5, 6, 7, 8], + playerCards : [[1, 2, 3, 4, 5, 6, 7, 8], + [1, 2, 3, 4, 5, 6, 7, 8]], + lastBountyCard: 0, // need this to help logging + lastPlayingCards : [0, 0], // need this to help logging + playerScores : [0, 0]}] + + return recur(states, nextState, function(state){ + return state.bountyCards.length == 0; // not > 0 + }); + +} + + +console.log(report(runGame(), turnMessage, endMessage)); + + +function last(arr){ + return arr[arr.length - 1]; +} + +function selectRandom(arr){ + const index = Math.floor(Math.random() * arr.length); + return arr[index]; +} + +function playRandomStrategy(playerCards, bountyCard){ + const card = selectRandom(playerCards); + return card; +} + +function playEqualStrategy(playerCards, bountyCard){ + return bountyCard; +} + + +module.exports = runGame; // for running under external call \ No newline at end of file diff --git a/mytestleinproj/.DS_Store b/mytestleinproj/.DS_Store new file mode 100644 index 0000000..c031e47 Binary files /dev/null and b/mytestleinproj/.DS_Store differ diff --git a/mytestleinproj/clojure-noob/.gitignore b/mytestleinproj/clojure-noob/.gitignore new file mode 100644 index 0000000..d18f225 --- /dev/null +++ b/mytestleinproj/clojure-noob/.gitignore @@ -0,0 +1,12 @@ +/target +/classes +/checkouts +profiles.clj +pom.xml +pom.xml.asc +*.jar +*.class +/.lein-* +/.nrepl-port +.hgignore +.hg/ diff --git a/mytestleinproj/clojure-noob/CHANGELOG.md b/mytestleinproj/clojure-noob/CHANGELOG.md new file mode 100644 index 0000000..15fdaf9 --- /dev/null +++ b/mytestleinproj/clojure-noob/CHANGELOG.md @@ -0,0 +1,24 @@ +# Change Log +All notable changes to this project will be documented in this file. This change log follows the conventions of [keepachangelog.com](http://keepachangelog.com/). + +## [Unreleased] +### Changed +- Add a new arity to `make-widget-async` to provide a different widget shape. + +## [0.1.1] - 2019-12-25 +### Changed +- Documentation on how to make the widgets. + +### Removed +- `make-widget-sync` - we're all async, all the time. + +### Fixed +- Fixed widget maker to keep working when daylight savings switches over. + +## 0.1.0 - 2019-12-25 +### Added +- Files from the new template. +- Widget maker public API - `make-widget-sync`. + +[Unreleased]: https://github.com/your-name/clojure-noob/compare/0.1.1...HEAD +[0.1.1]: https://github.com/your-name/clojure-noob/compare/0.1.0...0.1.1 diff --git a/mytestleinproj/clojure-noob/LICENSE b/mytestleinproj/clojure-noob/LICENSE new file mode 100644 index 0000000..d3087e4 --- /dev/null +++ b/mytestleinproj/clojure-noob/LICENSE @@ -0,0 +1,277 @@ +Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + +"Contributor" means any person or entity that Distributes the Program. + +"Licensed Patents" mean patent claims licensable by a Contributor which +are necessarily infringed by the use or sale of its Contribution alone +or when combined with the Program. + +"Program" means the Contributions Distributed in accordance with this +Agreement. + +"Recipient" means anyone who receives the Program under this Agreement +or any Secondary License (as applicable), including Contributors. + +"Derivative Works" shall mean any work, whether in Source Code or other +form, that is based on (or derived from) the Program and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. + +"Modified Works" shall mean any work in Source Code or other form that +results from an addition to, deletion from, or modification of the +contents of the Program, including, for purposes of clarity any new file +in Source Code form that contains any contents of the Program. Modified +Works shall not include works that contain only declarations, +interfaces, types, classes, structures, or files of the Program solely +in each case in order to link to, bind by name, or subclass the Program +or Modified Works thereof. + +"Distribute" means the acts of a) distributing or b) making available +in any manner that enables the transfer of a copy. + +"Source Code" means the form of a Program preferred for making +modifications, including but not limited to software source code, +documentation source, and configuration files. + +"Secondary License" means either the GNU General Public License, +Version 2.0, or any later versions of that license, including any +exceptions or additional permissions as identified by the initial +Contributor. + +2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + +3. REQUIREMENTS + +3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + +3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + +3.3 Contributors may not remove or alter any copyright, patent, +trademark, attribution notices, disclaimers of warranty, or limitations +of liability ("notices") contained within the Program from any copy of +the Program which they Distribute, provided that Contributors may add +their own appropriate notices. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities +with respect to end users, business partners and the like. While this +license is intended to facilitate the commercial use of the Program, +the Contributor who includes the Program in a commercial product +offering should do so in a manner which does not create potential +liability for other Contributors. Therefore, if a Contributor includes +the Program in a commercial product offering, such Contributor +("Commercial Contributor") hereby agrees to defend and indemnify every +other Contributor ("Indemnified Contributor") against any losses, +damages and costs (collectively "Losses") arising from claims, lawsuits +and other legal actions brought by a third party against the Indemnified +Contributor to the extent caused by the acts or omissions of such +Commercial Contributor in connection with its distribution of the Program +in a commercial product offering. The obligations in this section do not +apply to any claims or Losses relating to any actual or alleged +intellectual property infringement. In order to qualify, an Indemnified +Contributor must: a) promptly notify the Commercial Contributor in +writing of such claim, and b) allow the Commercial Contributor to control, +and cooperate with the Commercial Contributor in, the defense and any +related settlement negotiations. The Indemnified Contributor may +participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial +product offering, Product X. That Contributor is then a Commercial +Contributor. If that Commercial Contributor then makes performance +claims, or offers warranties related to Product X, those performance +claims and warranties are such Commercial Contributor's responsibility +alone. Under this section, the Commercial Contributor would have to +defend claims against the other Contributors related to those performance +claims and warranties, and if a court requires any other Contributor to +pay any damages as a result, the Commercial Contributor must pay +those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" +BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF +TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR +PURPOSE. Each Recipient is solely responsible for determining the +appropriateness of using and distributing the Program and assumes all +risks associated with its exercise of rights under this Agreement, +including but not limited to the risks and costs of program errors, +compliance with applicable laws, damage to or loss of data, programs +or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS +SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE +EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of +the remainder of the terms of this Agreement, and without further +action by the parties hereto, such provision shall be reformed to the +minimum extent necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity +(including a cross-claim or counterclaim in a lawsuit) alleging that the +Program itself (excluding combinations of the Program with other software +or hardware) infringes such Recipient's patent(s), then such Recipient's +rights granted under Section 2(b) shall terminate as of the date such +litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it +fails to comply with any of the material terms or conditions of this +Agreement and does not cure such failure in a reasonable period of +time after becoming aware of such noncompliance. If all Recipient's +rights under this Agreement terminate, Recipient agrees to cease use +and distribution of the Program as soon as reasonably practicable. +However, Recipient's obligations under this Agreement and any licenses +granted by Recipient relating to the Program shall continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, +but in order to avoid inconsistency the Agreement is copyrighted and +may only be modified in the following manner. The Agreement Steward +reserves the right to publish new versions (including revisions) of +this Agreement from time to time. No one other than the Agreement +Steward has the right to modify this Agreement. The Eclipse Foundation +is the initial Agreement Steward. The Eclipse Foundation may assign the +responsibility to serve as the Agreement Steward to a suitable separate +entity. Each new version of the Agreement will be given a distinguishing +version number. The Program (including Contributions) may always be +Distributed subject to the version of the Agreement under which it was +received. In addition, after a new version of the Agreement is published, +Contributor may elect to Distribute the Program (including its +Contributions) under the new version. + +Except as expressly stated in Sections 2(a) and 2(b) above, Recipient +receives no rights or licenses to the intellectual property of any +Contributor under this Agreement, whether expressly, by implication, +estoppel or otherwise. All rights in the Program not expressly granted +under this Agreement are reserved. Nothing in this Agreement is intended +to be enforceable by any entity that is not a Contributor or Recipient. +No third-party beneficiary rights are created under this Agreement. + +Exhibit A - Form of Secondary Licenses Notice + +"This Source Code may also be made available under the following +Secondary Licenses when the conditions for such availability set forth +in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), +version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. diff --git a/mytestleinproj/clojure-noob/README.md b/mytestleinproj/clojure-noob/README.md new file mode 100644 index 0000000..cbbb21f --- /dev/null +++ b/mytestleinproj/clojure-noob/README.md @@ -0,0 +1,44 @@ +# clojure-noob + +FIXME: description + +## Installation + +Download from http://example.com/FIXME. + +## Usage + +FIXME: explanation + + $ java -jar clojure-noob-0.1.0-standalone.jar [args] + +## Options + +FIXME: listing of options this app accepts. + +## Examples + +... + +### Bugs + +... + +### Any Other Sections +### That You Think +### Might be Useful + +## License + +Copyright © 2019 FIXME + +This program and the accompanying materials are made available under the +terms of the Eclipse Public License 2.0 which is available at +http://www.eclipse.org/legal/epl-2.0. + +This Source Code may also be made available under the following Secondary +Licenses when the conditions for such availability set forth in the Eclipse +Public License, v. 2.0 are satisfied: GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or (at your +option) any later version, with the GNU Classpath Exception which is available +at https://www.gnu.org/software/classpath/license.html. diff --git a/mytestleinproj/clojure-noob/doc/intro.md b/mytestleinproj/clojure-noob/doc/intro.md new file mode 100644 index 0000000..14473d9 --- /dev/null +++ b/mytestleinproj/clojure-noob/doc/intro.md @@ -0,0 +1,3 @@ +# Introduction to clojure-noob + +TODO: write [great documentation](http://jacobian.org/writing/what-to-write/) diff --git a/mytestleinproj/clojure-noob/project.clj b/mytestleinproj/clojure-noob/project.clj new file mode 100644 index 0000000..c0aba5a --- /dev/null +++ b/mytestleinproj/clojure-noob/project.clj @@ -0,0 +1,9 @@ +(defproject clojure-noob "0.1.0-SNAPSHOT" + :description "FIXME: write description" + :url "http://example.com/FIXME" + :license {:name "EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0" + :url "https://www.eclipse.org/legal/epl-2.0/"} + :dependencies [[org.clojure/clojure "1.10.0"]] + :main ^:skip-aot clojure-noob.core + :target-path "target/%s" + :profiles {:uberjar {:aot :all}}) diff --git a/mytestleinproj/clojure-noob/src/clojure_noob/core.clj b/mytestleinproj/clojure-noob/src/clojure_noob/core.clj new file mode 100644 index 0000000..ea1f39b --- /dev/null +++ b/mytestleinproj/clojure-noob/src/clojure_noob/core.clj @@ -0,0 +1,32 @@ +; jdk and clojure +; =============== + +; https://clojure.org/guides/getting_started#_clojure_installer_and_cli_tools + +; brew cask install adoptopenjdk +; brew install clojure + +; lein +; ==== +; https://www.hildeberto.com/2015/07/installing-leiningen-on-mac-os.html +; but need to run +; export PATH=$PATH:/Applications/clojure +; as ~/.bash_profle not work, is it the mac z shell thing??? + +; https://www.braveclojure.com/getting-started/ + +; you have to be in a directory with project.clj + +; trying the real one +; https://github.com/kwccoin/bounty +; got error after saying 4x4 + + +(ns clojure-noob.core + (:gen-class)) + +(defn -main + "I don't do a whole lot ... yet." + [& args] + (println "Hello, World!") + (println "I am a teapot")) diff --git a/mytestleinproj/clojure-noob/test/clojure_noob/core_test.clj b/mytestleinproj/clojure-noob/test/clojure_noob/core_test.clj new file mode 100644 index 0000000..945c278 --- /dev/null +++ b/mytestleinproj/clojure-noob/test/clojure_noob/core_test.clj @@ -0,0 +1,7 @@ +(ns clojure-noob.core-test + (:require [clojure.test :refer :all] + [clojure-noob.core :refer :all])) + +(deftest a-test + (testing "FIXME, I fail." + (is (= 0 1)))) diff --git a/project.clj b/project.clj index 9d78560..83e27c5 100644 --- a/project.clj +++ b/project.clj @@ -6,4 +6,11 @@ :dependencies [[org.clojure/clojure "1.10.0"]] :main ^:skip-aot cards.core :target-path "target/%s" - :profiles {:uberjar {:aot :all}}) + :profiles {:uberjar {:aot :all} + :dev {:exclusions [org.clojure/tools.trace] + :dependencies [[cider/cider-nrepl "0.22.2"]] + :repl-options {:host "0.0.0.0" + :port 4500 + :nrepl-middleware + [cider.nrepl.middleware.out/wrap-out]}}} + ) diff --git a/run-error-log.txt b/run-error-log.txt new file mode 100644 index 0000000..be0a8a6 --- /dev/null +++ b/run-error-log.txt @@ -0,0 +1,93 @@ +(base) myMac:mytestleinproj myUser$ cd clojure-noob/ +(base) myMac:clojure-noob myUser$ ls +CHANGELOG.md README.md project.clj src +LICENSE doc resources test +(base) myMac:clojure-noob myUser$ lein run +OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release. +Hello, World! +I am a teapot +(base) myMac:clojure-noob myUser$ ls +CHANGELOG.md README.md project.clj src test +LICENSE doc resources target +(base) myMac:clojure-noob myUser$ cd.. +-bash: cd..: command not found +(base) myMac:clojure-noob myUser$ ls +CHANGELOG.md README.md project.clj src test +LICENSE doc resources target +(base) myMac:clojure-noob myUser$ cd .. +(base) myMac:mytestleinproj myUser$ ls +clojure-noob +(base) myMac:mytestleinproj myUser$ cd .. +(base) myMac:bounty myUser$ ls +CHANGELOG.md README.adoc doc project.clj target +LICENSE cards.iml mytestleinproj src test +(base) myMac:bounty myUser$ lein run +OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release. +Turn: 0 +Bounty: +Player1: +Player2: +=== +Turn: 1 +Bounty: 3 +Player1: 6 +Player2: 1 +=== +Turn: 2 +Bounty: 5 +Player1: 2 +Player2: 5 +=== +Turn: 3 +Bounty: 1 +Player1: 8 +Player2: 7 +=== +Turn: 4 +Bounty: 7 +Player1: 1 +Player2: 2 +=== +Turn: 5 +Bounty: 6 +Player1: 3 +Player2: 6 +=== +Turn: 6 +Bounty: 8 +Player1: 5 +Player2: 4 +=== +Turn: 7 +Bounty: 4 +Player1: 4 +Player2: 3 +=== +Turn: 8 +Bounty: 2 +Player1: 7 +Player2: 8 +=== +4 V 4 +TieException in thread "main" Syntax error compiling at (/private/var/folders/q4/n4sdb9vx2d5429s9dkq2q0ww0000gn/T/form-init11767669843428243374.clj:1:126). + at clojure.lang.Compiler.load(Compiler.java:7647) + at clojure.lang.Compiler.loadFile(Compiler.java:7573) + at clojure.main$load_script.invokeStatic(main.clj:452) + at clojure.main$init_opt.invokeStatic(main.clj:454) + at clojure.main$init_opt.invoke(main.clj:454) + at clojure.main$initialize.invokeStatic(main.clj:485) + at clojure.main$null_opt.invokeStatic(main.clj:519) + at clojure.main$null_opt.invoke(main.clj:516) + at clojure.main$main.invokeStatic(main.clj:598) + at clojure.main$main.doInvoke(main.clj:561) + at clojure.lang.RestFn.applyTo(RestFn.java:137) + at clojure.lang.Var.applyTo(Var.java:705) + at clojure.main.main(main.java:37) +Caused by: java.lang.Exception: Cannot find anything to run for: cards.core + at user$eval140.invokeStatic(form-init11767669843428243374.clj:1) + at user$eval140.invoke(form-init11767669843428243374.clj:1) + at clojure.lang.Compiler.eval(Compiler.java:7176) + at clojure.lang.Compiler.eval(Compiler.java:7166) + at clojure.lang.Compiler.load(Compiler.java:7635) + ... 12 more +(base) myMac:bounty myUser$ diff --git a/src/cards/core.clj b/src/cards/core.clj index caf0e73..5038266 100644 --- a/src/cards/core.clj +++ b/src/cards/core.clj @@ -56,4 +56,14 @@ :player2 0}}]] (game-loop state))) -(print (report (run-game) turn-message end-message)) \ No newline at end of file +(print (report (run-game) turn-message end-message)) + +;;(print "\n") + +;;(print (+ 1 2)) + +;;(print "\n-----\n") + +(defn -main [& args] + (println "Working!")) +;; (print (report (run-game) turn-message end-message)))