Skip to content

Instantly share code, notes, and snippets.

View rugyoga's full-sized avatar

Guy Argo rugyoga

View GitHub Profile
@rugyoga
rugyoga / n_queens.ex
Last active November 18, 2019 22:13
n queens solutions based on Elixir Streams
import Enum, only: [all?: 2, at: 2, map: 2, join: 2, reverse: 1, zip: 2]
import Stream, only: [filter: 2, flat_map: 2, with_index: 2]
import String, only: [duplicate: 2, split_at: 2, to_integer: 1]
defmodule NQueens do
def safe?(queens, p) do
props = fn {f, r} -> [f, f+r, f-r] end
props_p = props.(p)
all?(queens, fn q -> all?(zip(props_p, props.(q)), fn {p, q} -> p != q end) end)
end
@rugyoga
rugyoga / n_queens.rb
Created November 19, 2019 08:31
Short ruby solution to N Queens analogous to my Elixir solution
def props(f, r)
[f, f + r, f - r]
end
def safe?(queens, f, r)
p_props = props(f, r)
queens.all? { |q| p_props.zip(props(*q)).all?{ |p| p[0] != p[1] } }
end
def solve(n, queens, rank, &block)
@rugyoga
rugyoga / pgn.ex
Last active November 25, 2019 19:16
Attempt at a simple PGN parser using Combine library
defmodule Chess.PGN do
use Combine
@dquote ?"
@open_square ?[
@close_square ?]
@backslash ?\
def parse(str) do
Combine.parse(str, parser)
@rugyoga
rugyoga / pgn_stream.ex
Last active December 2, 2019 21:39
Trying to uses streams to process large PGN files
defmodule Chess.PGN.Stream do
def split(stream, f), do: { Stream.take_while(stream, f), Stream.drop_while(stream, f) }
def process_header(line, hash) do
caps = Regex.named_captures(~r/\[(?<key>.+)\s+\"(?<value>.+)\"\s*\]/, line)
if caps == nil do
hash
else
Map.put(hash, caps["key"], caps["value"])
@rugyoga
rugyoga / alpha_max.rb
Created May 5, 2020 21:14
Find the most frequently occurring alphanumeric in a very large data file
chars = Hash.new(0)
File.open("2019-annual/taxa.txt") do |f|
f.each_char.lazy.each do |char|
chars[char] += 1 if char.match(/^[[:alpha:]]$/)
end
end
puts chars.to_a.max{ |a, b| a[1] <=> b[1] }
@rugyoga
rugyoga / alpha_max.ex
Created May 5, 2020 21:18
Elixir program, to find the most frequently occurring alpha numeric in a very large datafile.
defmodule AlphaMaxPar do
def count_alpha(string) do
string
|> String.codepoints
|> Enum.filter(fn c -> c =~ ~r/[A-Za-z0-9]/ end)
|> Enum.reduce(Map.new, fn c,acc -> Map.update(acc, c, 1, &(&1+1)) end)
end
end
File.stream!("2019-annual/taxa.txt", [encoding: :utf8], 1_000_000)
def schema do
schema(%{
accel_x: spec(is_float()),
accel_y: spec(is_float()),
accel_z: spec(is_float()),
ambient_air_temp: spec(is_float()),
barometric_pressure: spec(is_float()),
battery_level: spec(is_float()),
data_provider_id: spec(Util.is_UUID()),
diagnostic_codes: coll_of(spec(is_binary())),
@rugyoga
rugyoga / printer.cfg
Created March 14, 2021 08:19
Klipper config for SKR Mini v2 running on Ender 6 by Guy Argo
[stepper_x]
step_pin: PB13
dir_pin: !PB12
enable_pin: !PB14
microsteps: 16
rotation_distance: 40
endstop_pin: ^PC0
position_endstop: 0
position_min: 0
position_max: 268
@rugyoga
rugyoga / sqs.js
Last active June 23, 2022 19:44
refactoring exercise
function pdf_variants(baseUrl) {
return {
rawUri: baseUrl + '_raw.pdf',
rawX1a: baseUrl + '_raw.pdfx',
rawNonX1a: baseUrl + '_raw_non_x1a.pdf',
proofUri: baseUrl + '.pdf',
proofX1a: baseUrl + '.pdfx',
proofNonX1a: baseUrl + '_non_x1a.pdf',
}
}
@rugyoga
rugyoga / pit_create.ex
Last active July 21, 2022 08:45
Create an ES Point In Time ID
@spec create(ES.index_t()) :: {:ok, pit_t()} | {:error, ES.response_t()}
def create(index) do
:post
|> HTTP.request(url(index), HTTP.no_payload(), HTTP.json_encoding())
|> HTTP.on_200(& &1["id"])
end