The diamond kata takes as its input a letter, and outputs it in a diamond shape. Given a letter, it prints a diamond starting with 'A', with the supplied letter at the widest point.
- The first row contains one 'A'.
- The last row contains one 'A'.
// ------------ GAME LOGIC ---------- | |
type Player = "PlayerOne" | "PlayerTwo" | |
type Maybe<T> = T | null | |
type Board = Maybe<Player>[][] | |
type ActiveState = { turn: Player, gameBoard: Board } | |
type CompleteState = { winner: Maybe<Player>, gameBoard: Board } | |
type State = ActiveState | CompleteState |
const fib = (n: number): number => n === 0 ? 0 : n === 1 ? 1 : (fib(n - 1) + fib(n - 2)) | |
console.log(Array.from(Array(21).keys()).map(fib)) | |
const fibgen = function* (n: number) { | |
if (n < 0) throw RangeError("number cannot be negative") | |
if (!Number.isInteger(n)) throw TypeError("number should be an integer") |
// ------------ GAME LOGIC ---------- | |
/* | |
You can go Here to run it | |
https://www.typescriptlang.org/play?target=99&jsx=0&pretty=true&useUnknownInCatchVariables=true&ssl=1&ssc=1&pln=161&pc=54#code/PTAEFpK7NBxAggWQKKgDIHk4EkDCEM0AUMQC4CeADgKagAKANgIYU0BOoAvKAEROsOmAHY1eoAD58BbdgBUA7gHte5anSSsARjQA8cgHzdQcyaGEBXRozW1QAISXN2AE2OaKO3TI4GA2gC6gaSUdggAxmQAlgBuNADKZMxkdDwA3qBkFuzCAFwMLLIANKAA5swAtjSOzi75Na6gAL62dHhKFVSMNCmJyamgGQpRwqLs+R5ePuwGJeVVDXUOTo0toXR9KcYR0XGbdFLtnd29SSkh6gxKAM5R0UrCxn6WFTrsJS9vAa2gR1pKT3oNzuUQeJSBt3uwnBwKhMMhoOE31I4Qe1zIv0w6AAqkgAHLxYwAdmIqOE6NAACVMAB1Qk8ABspFJaIxIxBzEYi3qKzcXGIoEFoD8ADoxQh2OxWAAKPBY3EEgCUARFFWYVGlAH1uEYJVKKNLqXTFSKAGZRazSyzWRWKlGs0Ds6Kc-b5HaxBJnVICoUZLI5fL8QpCUS8OaVaq8-JOqKcxbNZkgUCcxigKiwxHXR2PZigGKcqJuVGvAEVCwUgAWzDioFRjAsFXJoB0ZAUNBojwADMnhG4GT23OwlAosy22x3QN3mL3QABWFnktnXABqBZcEJBD2M0r8dYb0NAQ4UAXyG6hip1PsFe8boF0mJx+MJADJn7WlPXbwYeN3X4fh6A36TqAf5HneVK0vEzJkhS6YIg8chKECKTCM6jB-Dc267h++4lEeJ5XPBwgXlwBhXqAO7kUKwrYZ+B74SUtG4f+CgQKAACMASMTe9EAeAoAAExccKPF4XxoAAMwBMJ1GybJSZxOw |
module Main exposing (Model, Msg(..), init, main, subscriptions, update, view) | |
import Browser | |
import Debug exposing (log) | |
import Html exposing (Html, button, div, input, span, text) | |
import Html.Attributes exposing (class, placeholder, style, value) | |
import Html.Events exposing (onClick, onInput) | |
import List.Extra as Liste | |
import Task | |
import Time |
from typing import NewType, Literal, Union, Tuple | |
# Our standard grid is a 2d array of cells that are either a mine | |
# or not a mine | |
Mine = Literal["Mine"] | |
NotAMine = Literal["NotAMine"] | |
Cell = Union[Mine, NotAMine] | |
Grid = list[list[Cell]] | |
# Our annotated grid is a 2d array of cells that are either the number |
module Minesweeper (annotate) where | |
import Data.Char (intToDigit) | |
import Data.List.Split (chunksOf) | |
annotate :: [String] -> [String] | |
annotate [] = [] | |
annotate [[]] = [[]] | |
annotate board = | |
toBoard $ zipWith toOutput flatboard $ bombCounts board |
/* MEDIA: only screen and (max-width: 42em), handheld ENDMEDIA */ | |
@media only screen and (max-width: 42em) { | |
#outer { | |
background: #fff; | |
font-size: 0.875em; | |
position: relative; | |
} | |
h1, h2, h3 { | |
word-break: break-all; |
When I just started learning to code I was very obsessed and spent far too much time watching software development videos. I was determined to become the Best Python Developer In The World (don't do this) and I would spend the wee hours of the morning watching programming video after programming video searching for more grains of insight (don't do this either). I wanted to learn the Best Way to write code; the most powerful, idiomatic, robust, resilient, elegant solutions.
That was, in retrospect, not a bad ideal. But the way I went about it may have been a bit silly.
Real working software design is about tradeoffs, and providing solutions, even when those solutions are not as elegant as we would like. And no amount of videos can replace trying your hand at solving a problem. Fortunately I learned this before it was too late.
But I wouldn't call my time spent watching my contemporaries fruitless. Good developers learn from other developers. Whether through videos, articles, courses, pair pr