Skip to content

Instantly share code, notes, and snippets.

@quanon
quanon / count_yoyos_by_brand.rb
Last active September 24, 2024 22:40
Count yo-yos by brand
# Count the yo-yos I have by brand and get the top 5 brands.
# Use the CSV output from Notion's database to tally.
require 'csv'
rows = CSV.read(Pathname(Dir.home).join('Downloads/my_yoyos.csv'))
resutls = rows.slice(1..).map { _1[1].split(/,\s*/) }.flatten.tally
resutls.sort_by { -_2 }.first(5).to_h
@quanon
quanon / dfa.rb
Last active June 27, 2022 23:59
Manage job states with DFA
# 決定性有限オートマトン (DFA)
class DFA
class InvalidEvent < StandardError; end
attr_reader :current_state
def initialize(current_state:, accept_states:, rules:)
@current_state = current_state
@accept_states = accept_states
@rules = rules
@quanon
quanon / download_mtgcardmint_csv.js
Last active May 15, 2022 11:22
MTG Mint Card の購入履歴を CSV でダウンロードする
const convertTableToRows = (selector) => {
const table = document.querySelector(selector);
const rows = [];
const headers = Array.from(table.querySelectorAll('tr:first-child th')).map(th => th.innerText);
rows.push(headers);
table.querySelectorAll('tr').forEach(tr => {
const row = [];
tr.querySelectorAll('td').forEach(td => {
row.push(td.innerText);
@quanon
quanon / fizzbuzz.py
Last active October 10, 2021 03:43
Python の doctest を試してみる。
import itertools
from collections.abc import Iterator
def fizzbuzz(n: int) -> Iterator[int | str]:
'''
Return the fizzbuzz of n, an exact integer >= 0.
>>> from fizzbuzz import fizzbuzz
>>> [i for i in fizzbuzz(15)]
require 'terminal-table' # https://github.com/tj/terminal-table
N = 30 # 合計人数
# table[n][0] は男子を選ぶ組み合わせの数。
# table[n][1] は女子を選ぶ組み合わせの数。
table = Array.new(N + 1) { Array.new(2, 0) }
# n = 1 のときは男子も女子も 1 通りずつ。
table[1][0] = 1
@quanon
quanon / knapsack.rb
Last active April 7, 2021 03:09
ナップサック問題を動的計画法で解く
require 'delegate'
# https://github.com/tj/terminal-table
require 'terminal-table'
# ナップサック問題(Ruby)
# http://obelisk.hatenablog.com/entry/2017/05/26/162601
# 典型的な DP (動的計画法) のパターンを整理 Part 1 ~ ナップサック DP 編 ~
# https://qiita.com/drken/items/a5e6fe22863b7992efdb
class Item
#
# Sets Prezto options.
#
# Authors:
# Sorin Ionescu <sorin.ionescu@gmail.com>
#
#
# General
#
@quanon
quanon / count.js
Created May 23, 2019 06:19
count_of_search_results
const puppeteer = require('puppeteer');
const columnify = require('columnify');
const url = 'https://www.google.co.jp/';
const args = process.argv.slice(2);
(async () => {
const browser = await puppeteer.launch();
let results = await Promise.all(args.map(async (word) => {
@quanon
quanon / nmap.rb
Created April 12, 2019 08:03
Nmap の結果を見やすくする
#! /usr/bin/env ruby
require 'open3'
class NmapResult
IP_ADDRESS_PATTERN = /\d+\.\d+\.\d+\.\d+/
MAC_ADDRESS_PATTERN = /([\dA-F]{2}:){5}[\dA-F]{2}/
attr_reader :lines
def self.parse(stdout)
# (あえて境界値がうるう日前後になるように) 今日の日付が 2020/02/29 (土) だと仮定する。
today = Date.parse('2020/02/29')
User.order(:birthday).each { |user| puts("#{user.birthday.strftime('%Y/%m/%d')} #{user.name}")}
# 1989/02/28 ピカチュウ
# 1989/03/01 カイリュー
# 2000/02/29 ヤドラン
# 2000/03/01 ピジョン
age_from = 20 # 20 歳から