Skip to content

Instantly share code, notes, and snippets.

@quanon
quanon / dfa.rb
Last active Jun 27, 2022
Manage job states with DFA
View dfa.rb
# 決定性有限オートマトン (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
MTG Mint Card の購入履歴を CSV でダウンロードする
View download_mtgcardmint_csv.js
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 Oct 10, 2021
Python の doctest を試してみる。
View fizzbuzz.py
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)]
View 30人31脚.rb
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 Apr 7, 2021
ナップサック問題を動的計画法で解く
View knapsack.rb
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
View .zpreztorc
#
# Sets Prezto options.
#
# Authors:
# Sorin Ionescu <sorin.ionescu@gmail.com>
#
#
# General
#
@quanon
quanon / count.js
Created May 23, 2019
count_of_search_results
View count.js
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 Apr 12, 2019
Nmap の結果を見やすくする
View nmap.rb
#! /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)
View search_by_age.rb
# (あえて境界値がうるう日前後になるように) 今日の日付が 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 歳から
View wc.py
import MeCab as mc
from matplotlib import pyplot as plt
from wordcloud import WordCloud
def mecab_analysis(text):
t = mc.Tagger('-Ochasen -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd/')
t.parse('')
node = t.parseToNode(text)
output = []
while node: