• ChatGPTで生成したバグってるソースを手直した。変数の宣言がなかったり関数ごと欠損しているソースをデバッグするところからスタートして何となく動くようになったので投稿。初めテトリスを作ろうとしたけど、まともに動かない状態から抜け出せずに挫折… オセロは、テトリスの半分以下で300行程度。

    黒の手番です

    備忘:CSSに一番苦戦した。borderとborder-radiusが同時に指定できない。border-radiusでコマを描くとborderで描いた枠線が欠落してしまう。最終的にはコマの白黒画像を用意してbackground-imageで読み込むように修正した。


    ご参考:
    プロンプト:オセロゲームのサンプルをHTML/CSS/JavaScriptで作成してください。
    ChatGPT:はい、以下にHTML、CSS、JavaScriptで書かれたオセロゲームのサンプルを用意しました。
    ・・・

    <!DOCTYPE html>
    <html>
    
    <head>
    	<meta charset="UTF-8">
    	<title>オセロゲーム</title>
    	<style>
    		.container {
    			display: flex;
    			flex-wrap: wrap;
    			width: 320px;
    			height: 320px;
    			margin: 0 auto;
    		}
    
    		.cell {
    			width: 40px;
    			height: 40px;
    			background-color: green;
    			border: 1px solid black;
    			box-sizing: border-box;
    			cursor: pointer;
    		}
    
    		.cell.black {
    			background-color: black;
    		}
    
    		.cell.white {
    			background-color: white;
    		}
    
    		.turn {
    			margin-top: 10px;
    			text-align: center;
    			font-size: 20px;
    		}
    
    		.win {
    			margin-top: 10px;
    			text-align: center;
    			font-size: 30px;
    			font-weight: bold;
    		}
    	</style>
    </head>
    
    <body>
    	<div class="container"></div>
    	<div class="turn">黒の手番です</div>
    	<div class="win"></div>
    	<script>
    
    		const WHITE = 1;
    		const BLACK = -1;
    		const EMPTY = 0;
    
    		// ゲームボードのサイズ
    		const BOARD_SIZE = 8;
    
    		// ゲームボードの初期化
    		let board = [];
    		for (let i = 0; i < BOARD_SIZE; i++) {
    			board[i] = [];
    			for (let j = 0; j < BOARD_SIZE; j++) {
    				board[i][j] = 0;
    			}
    		}
    		board[3][3] = board[4][4] = 1;
    		board[3][4] = board[4][3] = -1;
    
    		// 現在のプレイヤー(1:黒, -1:白)
    		let currentPlayer = 1;
    
    		// 盤面を描画する関数
    		function drawBoard() {
    			const container = document.querySelector('.container');
    			container.innerHTML = '';
    			for (let i = 0; i < BOARD_SIZE; i++) {
    				for (let j = 0; j < BOARD_SIZE; j++) {
    					const cell = document.createElement('div');
    					cell.className = 'cell';
    					if (board[i][j] === 1) {
    						cell.classList.add('black');
    					} else if (board[i][j] === -1) {
    						cell.classList.add('white');
    					}
    					cell.dataset.row = i;
    					cell.dataset.col = j;
    					cell.addEventListener('click', handleClick);
    					container.appendChild(cell);
    				}
    			}
    		}
    
    		drawBoard();
    
    		// クリックイベントのハンドラー関数
    		function handleClick(event) {
    			const row = parseInt(event.target.dataset.row);
    			const col = parseInt(event.target.dataset.col);
    			if (board[row][col] !== 0) {
    				return;
    			}
    			const directions = [
    				{ x: 0, y: -1 }, // 上
    				{
    					x: 0, y
    
    1 }, // 下
    				{ x: -1, y: 0 }, // 左
    				{ x: 1, y: 0 }, // 右
    				{ x: -1, y: -1 }, // 左上
    				{ x: 1, y: -1 }, // 右上
    				{ x: -1, y: 1 }, // 左下
    				{ x: 1, y: 1 } // 右下
    			];
    			let canPlace = false;
    			for (let d = 0; d < directions.length; d++) {
    				const dx = directions[d].x;
    				const dy = directions[d].y;
    				let x = row + dx;
    				let y = col + dy;
    				let flipCount = 0;
    				while (x >= 0 && x < BOARD_SIZE && y >= 0 && y < BOARD_SIZE) {
    					if (board[x][y] === -currentPlayer) {
    						flipCount++;
    						x += dx;
    						y += dy;
    					} else if (board[x][y] === currentPlayer) {
    						if (flipCount > 0) {
    							canPlace = true;
    						}
    						break;
    					} else {
    						break;
    					}
    				}
    				if (canPlace) {
    					break;
    				}
    			}
    			if (!canPlace) {
    				return;
    			}
    			board[row][col] = currentPlayer;
    			event.target.classList.add(currentPlayer === 1 ? 'black' : 'white');
    			event.target.removeEventListener('click', handleClick);
    			flipStones(row, col);
    			currentPlayer = -currentPlayer;
    			const turnEl = document.querySelector('.turn');
    			turnEl.textContent = ${ currentPlayer === 1 ? '黒' : '白' } の手番です;
    			if (!hasPlaceableCell()) {
    				currentPlayer = -currentPlayer;
    				if (!hasPlaceableCell()) {
    					const winEl = document.querySelector('.win');
    					const blackCount = countStones(1);
    					const whiteCount = countStones(-1);
    					if (blackCount > whiteCount) {
    						winEl.textContent = '黒の勝ち!';
    					} else if (blackCount < whiteCount) {
    						winEl.textContent = '白の勝ち!';
    					} else {
    						winEl.textContent = '引き分け!';
    					}
    				} else {
    					turnEl.textContent = ${ currentPlayer === 1 ? '黒' : '白' } はパスです;
    				}
    			}
    		}
    
    		// 石を返す関数
    		function flipStones(row, col) {
    			const directions = [
    				{ x: 0, y: -1 }, // 上
    				{ x: 0, y: 1 }, // 下
    				{ x: -1, y: 0 }, // 左
    				{ x: 1, y: 0 }, // 右
    				{ x: -1, y: -1 }, // 左上
    				{ x: 1, y: -1 }, // 右上
    				{ x: -1, y: 1 }, // 左下
    				{ x: 1, y: 1 } // 右下
    			];
    			for (let d = 0; d < directions.length; d++) {
    				const dx = directions[d].x;
    
    				const dy = directions[d].y;
    				let x = row + dx;
    				let y = col + dy;
    				let flipCount = 0;
    				while (x >= 0 && x < BOARD_SIZE && y >= 0 && y < BOARD_SIZE) {
    					if (board[x][y] === -currentPlayer) {
    						flipCount++;
    						x += dx;
    						y += dy;
    					} else if (board[x][y] === currentPlayer) {
    						if (flipCount > 0) {
    							for (let i = 1; i <= flipCount; i++) {
    								const flipX = row + i * dx;
    								const flipY = col + i * dy;
    								board[flipX][flipY] = currentPlayer;
    								const flipEl = document.querySelector(`[data-row="${flipX}"][data-col="${flipY}"]`);
    								flipEl.classList.remove(currentPlayer === 1 ? 'white' : 'black');
    								flipEl.classList.add(currentPlayer === 1 ? 'black' : 'white');
    							}
    						}
    						break;
    					} else {
    						break;
    					}
    				}
    			}
    		}
    
    		// 置けるセルがあるかどうかを判定する関数
    		function hasPlaceableCell() {
    			for (let i = 0; i < BOARD_SIZE; i++) {
    				for (let j = 0; j < BOARD_SIZE; j++) {
    					if (board[i][j] === 0 && canPlaceStone(i, j)) {
    						return true;
    					}
    				}
    			}
    			return false;
    		}
    
    		// 石の数を数える関数
    		function countStones(player) {
    			let count = 0;
    			for (let i = 0; i < BOARD_SIZE; i++) {
    				for (let j = 0; j < BOARD_SIZE; j++) {
    					if (board[i][j] === player) {
    						count++;
    					}
    				}
    			}
    			return count;
    		}
    
    		// ゲームをリセットする関数
    		function resetGame() {
    			board = initializeBoard();
    			currentPlayer = 1;
    			const cells = document.querySelectorAll('.cell');
    			for (let i = 0; i < cells.length; i++) {
    				cells[i].classList.remove('black', 'white');
    				cells[i].addEventListener('click', handleClick);
    			}
    			const turnEl = document.querySelector('.turn');
    			turnEl.textContent = '黒の手番です';
    			const winEl = document.querySelector('.win');
    			winEl.textContent = '';
    		}
    
    		function canPlaceStone(row, col, color) {
    			if (board[row][col] !== EMPTY) {
    				return false;
    			}
    			for (let drow = -1; drow <= 1; drow++) {
    				for (let dcol = -1; dcol <= 1; dcol++) {
    					if (drow === 0 && dcol === 0) {
    						continue;
    					}
    					let r = row + drow;
    					let c = col + dcol;
    					let flipped = false;
    					while (r >= 0 && r < BOARD_SIZE && c >= 0 && c < BOARD_SIZE) {
    						if (board[r][c] === EMPTY) {
    							break;
    						}
    						if (board[r][c] === color) {
    							if (flipped) {
    								return true;
    							} else {
    								break;
    							}
    						}
    						flipped = true;
    						r += drow;
    						c += dcol;
    					}
    				}
    			}
    			return false;
    		}
    
    		function initializeBoard() {
    			for (let row = 0; row < BOARD_SIZE; row++) {
    				for (let col = 0; col < BOARD_SIZE; col++) {
    					const cell = document.querySelector(`.cell[data-row="${row}"][data-col="${col}"]`);
    					cell.classList.remove('black', 'white');
    					if ((row === 3 && col === 3) || (row === 4 && col === 4)) {
    						cell.classList.add('white');
    						board[row][col] = WHITE;
    					} else if ((row === 3 && col === 4) || (row === 4 && col === 3)) {
    						cell.classList.add('black');
    						board[row][col] = BLACK;
    					} else {
    						board[row][col] = EMPTY;
    					}
    				}
    			}
    		}
    
    		// 初期化
    		let board = initializeBoard();
    		let currentPlayer = 1;
    		const cells = document.querySelectorAll('.cell');
    		for (let i = 0; i < cells.length; i++) {
    			cells[i].addEventListener('click', handleClick);
    		}
    		const resetBtn = document.querySelector('.reset');
    		resetBtn.addEventListener('click', resetGame);
    		const turnEl = document.querySelector('.turn');
    		turnEl.textContent = '黒の手番です';
    }) ();
    
    	</script>
    </body>
    
    </html>

    ※インデントなど整形済み

  • もうAIで
  • https://www.itmedia.co.jp/news/articles/2305/01/news094.html

    オワッター

  • 世界報道自由デーということで、これも貼っておこうw

    ChatGPTも貼っておこう

    プロンプト:

    民主主義と資本主義の矛盾について論じてください。

    ChatGPT:

    民主主義と資本主義は、両方とも現代社会において非常に重要な価値観として位置づけられています。しかし、これらの価値観には本質的に相反する要素が含まれており、矛盾する側面が存在しています。

    民主主義は、人々が平等であり、自由に参加できる政治的なシステムを表します。一方、資本主義は、経済的自由主義の原則に基づいた、個人主義的な経済システムです。このため、民主主義と資本主義の矛盾が発生することがあります。

    たとえば、資本主義の原則に基づいた市場経済においては、富の蓄積と分配が不均等になる傾向があります。一方、民主主義の原則に基づいた政治的システムでは、すべての人々が平等であることが求められます。このため、富の不均等な分配が民主主義の原則に反すると考える人もいます。

    また、資本主義の原則に基づいた市場経済においては、企業が利益を追求することが中心になります。一方、民主主義の原則に基づいた政治的システムでは、人々の利益や幸福が重要視されます。このため、企業の利益追求が人々の利益に反することがあると考える人もいます。

    このように、民主主義と資本主義の矛盾は、経済と政治の間に現れます。この矛盾を解決するために、両者の間でバランスを取ることが求められます。例えば、資本主義の市場経済をより公正なものにするために、政府は規制や税制策などの手段を取ることができます。また、企業は社会的責任を果たすことが求められます。逆に、政治的システムが経済に介入しすぎると、企業のイノベーションや経済成長を妨げることがあるため、バランスのとれた政策が必要となります。

    プロンプト:

    マスメディアが既得権益やビジネス上の利益を守ために、民主主義の根幹である表現の自由や報道の自由を十分に行使せず報道を自主規制する危険性について論じてください。

    ChatGPT:

    マスメディアは、社会にとって重要な情報源であり、民主主義にとっては表現の自由や報道の自由が不可欠です。しかし、マスメディアが既得権益やビジネス上の利益を守るために、自主規制を行使する可能性があります。

    このような自主規制は、報道機関が自主的に情報を公開しない、あるいは報道内容を調整することで、特定の利害関係者や権力者の要求に応じることを指します。このような自主規制によって、真実や公正な情報が報道されず、報道の自由や表現の自由が制限されることになります。

    自主規制が行われる主な理由は、報道機関が政治的な圧力や企業の利益などの既得権益を守るためであることがあります。例えば、政治家や企業が報道内容に不満を持ち、広告収入の削減や法的な訴訟を脅迫することがあります。これにより、報道機関は、公正な報道をすることを躊躇する可能性があります。

    このような自主規制は、民主主義にとって大きな問題であり、報道機関が真実や公正な情報を報道しないことによって、国民が適切な意思決定を行うことができなくなる可能性があります。また、自主規制によって、報道機関が政治的な圧力や企業の利益を優先することになり、社会的正義や公正な社会の実現に対する取り組みを妨げることになります。

    このため、報道機関は、既得権益やビジネス上の利益に対する圧力に屈することなく、真実や公正な情報を報道し、表現の自由や報道の自由を守ることが必要です。また、政府や企業は、報道機関に対して圧力をかけることを控え、報道機関が独立して報道することができる環境を整えることが求められます。

    プロンプト:

    ジャニー喜多川氏の実績と不祥事を簡潔に教えてください。

    ChatGPT:

    ジャニー喜多川氏の主な実績は、ジャニーズ事務所の設立と多くのアイドルグループのプロデュースです。その中でも、ジャニーズJr.、少年隊、SMAP、嵐などは高い人気を誇り、日本の音楽シーンを代表するグループとなりました。一方で、ジャニー喜多川氏は、未成年のジャニーズタレントとの交際や性的暴行など、不祥事の報道もありました。彼は2019年7月に逝去し、不祥事については解決されていません。

  • https://ja.wikipedia.org/wiki/世界報道自由デー

    世界報道自由デーは、報道の自由の重要性を喚起し、各国政府が世界人権宣言の第19条に基づく表現の自由を尊重し支持する義務を認識するために、国連総会で定められた日である。毎年5月3日。

    https://ja.wikipedia.org/wiki/世界報道自由度ランキング

    日本の評価
    日本の報道の自由度はG7の中で最も評価が低い。この理由として、国境なき記者団は、「記者クラブの存在」や、「特定秘密保護法」等を問題点として挙げている。

    https://ja.wikipedia.org/wiki/国境なき記者団

    国境なき記者団(フランス語: Reporters Sans Frontières [RSF])は、言論の自由(または報道の自由)の擁護を目的としたジャーナリストによる非政府組織。1985年、フランスの元ラジオ局記者であるロベール・メナール事務局長の手によってパリで設立された。

    2022 PRESS FREEDOM INDEX
    https://rsf.org/en/index

    71位/180カ国

    Japan
    Japan, a parliamentary democracy, generally respects the principles of media freedom and pluralism, although tradition and business interests often prevent journalists from completely fulfilling their role as watchdogs.

    2023 PRESS FREEDOM INDEX
    https://rsf.org/en/index

    68位/180カ国

    Japan
    Japan, a parliamentary democracy, upholds the principles of media freedom and pluralism. However, the weight of traditions, economic interests, political pressure, and gender inequalities prevent journalists from fully exercising their role of holding the government to account.

    日本がんばれー

  • Stable Diffusion Playground
    https://stablediffusionweb.com/#demo
    prompt: cat by Edvard Munch, like The Scream

  • M&AのマッチングでAIを活用してビリオネア爆誕?日本がんばれー

    https://www.forbes.com/sites/zinnialee/2023/04/28/super-active-32-year-old-dealmaker-is-japans-newest-billionaire/

  • 2023年現在67歳。まだまだご健在やん。

    パート1
    発展途上国に住む人々にとって死活問題である公衆衛生の改善に対する取り組みを語るビル。さらに、彼の姉妹が子供の頃の思い出を振り返る。

    パート2
    学生時代の友情や、マイクロソフト社の共同創業者ポール・アレンとの特別な絆(きずな)など、ビルの人生に影響を及ぼした人間関係にスポットを当てる。

    パート3
    気候変動を抑制するために必要なのは、情熱、資源、そして危機感。この3つを持ち合わせている男、ビル・ゲイツの考える解決策とは。

  • 🍷 🍷 🍷 格差拡大中…