Skip to content

Instantly share code, notes, and snippets.

View scoiatael's full-sized avatar

Lukasz Czaplinski scoiatael

View GitHub Profile
type Move = Circle -> Circle
let spin (n : int) : Move =
fun circle ->
let len = Array.length circle in
Array.append circle.[(len-n)..(len-1)] circle.[0..(len-n-1)]
> Dancers.spin 4 Dancers.startingPattern
val it : Dancers.Circle =
[|'m'; 'n'; 'o'; 'p'; 'a'; 'b'; 'c'; 'd'; 'e'; 'f'; 'g'; 'h'; 'i'; 'j'; 'k'; 'l'|]
> Dancers.exchange (2, 5) Dancers.startingPattern
val it : Dancers.Circle =
[|'a'; 'b'; 'f'; 'd'; 'e'; 'c'; 'g'; 'h'; 'i'; 'j'; 'k'; 'l'; 'm'; 'n'; 'o'; 'p'|]
let exchange (a : int, b : int) : Move =
let toKV arr = Map.ofArray (Array.indexed arr) in
let ofKV map = Array.map snd (Array.sortBy fst (Map.toArray map)) in
fun circle ->
ofKV (Map.add b circle.[a] (Map.add a circle.[b] (toKV circle)))
> Dancers.partner ('e', 'p') Dancers.startingPattern
val it : Dancers.Circle =
[|'a'; 'b'; 'c'; 'd'; 'p'; 'f'; 'g'; 'h'; 'i'; 'j'; 'k'; 'l'; 'm'; 'n'; 'o'; 'e'|]
let partner (a : char, b : char) : Move =
let swap (a, b) = (b, a) in
let toKV arr = Map.ofArray (Array.map swap (Array.indexed arr))
let ofKV map = Array.map snd (Array.sortBy fst (Array.map swap (Map.toArray map))) in
let withKV f arr = ofKV(f (toKV arr)) in
withKV (fun kv ->
let valA = (Map.find a kv) in
let valB = (Map.find b kv) in
Map.add b valA (Map.add a valB kv))
> Dancers.solve Dancers.input
val it : System.String = "olgejankfhbmpidc"
let exchange (a : int, b : int) : Move =
fun circle ->
let valA = circle.[a] in
circle.[a] <- circle.[b];
circle.[b] <- valA;
circle
let partner (a : char, b : char) : Move =
fun circle ->
let idxA = Array.findIndex ((=) a) circle in
@scoiatael
scoiatael / main.go
Last active September 15, 2018 11:58
TCP server for IoT
package main
import (
"encoding/json"
"flag"
"fmt"
"log"
"net"
"net/http"
"strings"