Skip to content

Instantly share code, notes, and snippets.

View SleeplessByte's full-sized avatar
💎
💎 💎 💎

Derk-Jan Karrenbeld SleeplessByte

💎
💎 💎 💎
View GitHub Profile
@SleeplessByte
SleeplessByte / aoc-2020-d7.rb
Created December 7, 2020 11:22
Advent of Code 2020: Day 7 - Handy Haversacks
require 'benchmark'
class BagsContent
def initialize(name, count:)
self.name = name
self.count = Integer(count)
end
def to_s
name
@SleeplessByte
SleeplessByte / aoc-2020-d6.rb
Created December 6, 2020 05:17
Advent of Code 2020: Day 6 - Custom Customs
require 'benchmark'
class GroupAnswers
def self.from_lines(lines)
GroupAnswers.new(lines.map(&:chomp))
end
def initialize(people)
questions = people.join('').chars.uniq
self.count = questions.count { |q| people.all? { |l| l.include?(q) } }
@SleeplessByte
SleeplessByte / aoc-2020-d5.rb
Last active December 5, 2020 06:41
Advent of Code 2020: Day 5 - Binary Boarding
require 'benchmark'
class BoardingPass
def self.from_binary(binary_position)
rows = binary_position[0...7].tr("FB", "01")
columns = binary_position[7..].tr("LR", "01")
BoardingPass.new((rows + columns).to_i(2))
end
@SleeplessByte
SleeplessByte / aoc-2020-d4.rb
Last active December 5, 2020 06:30
Advent of Code 2020: Day 5 - Passport Processing
require 'benchmark'
class Passport
RULES = {
byr: -> (value) { /^[0-9]{4}$/.match?(value) && (1920..2002).cover?(value.to_i) },
iyr: -> (value) { /^[0-9]{4}$/.match?(value) && (2010..2020).cover?(value.to_i) },
eyr: -> (value) { /^[0-9]{4}$/.match?(value) && (2020..2030).cover?(value.to_i) },
hgt: -> (value) {
match = /(^[1-9][0-9]+)(cm|in)$/.match(value)
@SleeplessByte
SleeplessByte / aoc-2020-d3.rb
Last active December 5, 2020 06:31
Advent of Code 2020: Day 3 - Toboggan Trajectory
require 'benchmark'
class TreeGrid
def self.from(file)
rows = File.readlines(file)
TreeGrid.new(rows)
end
def initialize(rows)
self.rows = rows
@SleeplessByte
SleeplessByte / aoc-2020-d2.rb
Last active December 5, 2020 06:31
Advent of Code 2020: Day 2 - Password Philosophy
require 'benchmark'
class PasswordPolicy
def self.from_line(line)
length, char, password = line.split(' ')
first, second = length.split('-').map(&:to_i)
char = char.delete(':')
PasswordPolicy.new(positions: [first - 1, second - 1], char: char, password: password)
end
@SleeplessByte
SleeplessByte / aoc-2020-d1.rb
Last active December 5, 2020 06:32
Advent of Code 2020: Day 1 - Report Repair
expenses = File.readlines('input.txt').map(&:to_i)
def find_matching_entries(entries, summation = 2020)
entries = entries.dup
while entries.size > 0
current = entries.shift
match = entries.find do |compare|
current + compare == summation
@SleeplessByte
SleeplessByte / useFilePreview.ts
Last active March 20, 2020 00:36
Simple hook that creates a file preview and revokes it when it's no longer needed.
import { useState, useEffect } from 'react'
type FilePreview = string | null
export function useFilePreview(
nextFile: File | undefined,
defaultPreview: FilePreview = null
): FilePreview {
const [preview, setPreview] = useState<FilePreview>(null)
@SleeplessByte
SleeplessByte / useColorScheme.ts
Created February 18, 2020 20:44
Hooks and Contexts to deal with react-native-appearance. Automatically updates and persists changes.
import React, { useMemo } from "react";
import {
createContext,
useContext,
useState,
useEffect,
useCallback
} from "react";
import {
Appearance,
import { Dimensions, ScaledSize, InteractionManager } from "react-native";
import { useEffect, useState } from "react";
type EventValue = {
window: ScaledSize;
screen: ScaledSize;
};
/**
* Listens to dimension changes of "dim" and reports during an animation frame.