Skip to content

Instantly share code, notes, and snippets.

View newton_bignum_div_to_s.rb
def big_divmod(numerator, denominator)
ans_bits = numerator.bit_length - denominator.bit_length
inv_bits = denominator.bit_length
inv = 1
accuracy_bits = 1
target_bits = [ans_bits]
while target_bits[0] > 1
target_bits.unshift (target_bits[0] * 3 + 1) / 5
end
accuracy_bits = target_bits.shift
@tompng
tompng / integer_dup.rb
Last active February 28, 2024 04:54
baseの違うbignumの比較
View integer_dup.rb
def string_radix(s)
if s.match?(/0x/i)
[16, 2]
elsif s.match?(/0o/i)
[8, 2]
elsif s.match?(/0b/i)
[2, 2]
elsif s.start_with?('0')
[8, 0]
else
View regexp_arithmetic.rb
def sum_reg(a, b, fallback = nil)
fragments = (0..18).map do |sum|
".*\\k<#{a}>.{#{sum/2+5}}_.{#{sum-sum/2+5}}\\k<#{b}>.*-.{#{sum%10}}"
end
fragments << ".*-.{#{fallback}}" if fallback
"(?:#{fragments.join('|')})"
end
S = '9876543210___________0123456789-0123456789'
@tompng
tompng / line_editor_buffer.svg
Last active February 24, 2024 17:31
reline line_editor readme svg
View line_editor_buffer.svg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@tompng
tompng / reline_debug_visualizer.rb
Last active February 9, 2024 19:10
Minimal terminal emulator that only supports Reline's escape sequences
View reline_debug_visualizer.rb
require 'pty'
require 'io/console'
if ARGV.empty?
puts <<~EOS
Reline Visualizer (Minimal terminal emulator that only supports Reline's escape sequences)
Usage: ruby #{__FILE__} <command>'
ruby #{__FILE__} irb
ruby #{__FILE__} bash
ruby #{__FILE__} zsh
ruby #{__FILE__} ruby -I path/to/reline/lib -I path/to/irb/lib path/to/irb/exe/irb
@tompng
tompng / terminal_color_preview.rb
Last active January 28, 2024 11:34
Preview terminal background and foreground
View terminal_color_preview.rb
raise 'COLORTERM required' unless ENV['COLORTERM']
# Color table from https://en.wikipedia.org/wiki/ANSI_escape_code#3-bit_and_4-bit
env_names = %w[VGA WinXP PowerShell6 VSCode Win10 Terminal.app PuTTY mIRC xterm Ubuntu Eclipse]
env_colors = <<COLORS.lines.map{|l|l.split(' ').map{_1.scan(/\d+/).join(';')}}.transpose
0,0,0 0,0,0 0,0,0 12,12,12 0,0,0 0,0,0 0,0,0 0,0,0 1,1,1 0,0,0
170,0,0 128,0,0 205,49,49 197,15,31 153,0,0 187,0,0 127,0,0 205,0,0 222,56,43 205,0,0
0,170,0 0,128,0 13,188,121 19,161,14 0,166,0 0,187,0 0,147,0 0,205,0 57,181,74 0,205,0
170,85,0 128,128,0 229,229,16 193,156,0 153,153,0 187,187,0 252,127,0 205,205,0 255,199,6 205,205,0
0,0,170 0,0,128 36,114,200 0,55,218 0,0,178 0,0,187 0,0,127 0,0,238 0,111,184 0,0,238
View reline_noise_rerender_visualizer.rb
class << ($colored_stdout = STDOUT.dup)
# Flip this if you are using bright theme
BACKGROUND = [0, 0, 0]
FOREGROUND = [255, 255, 255]
RANDOMIZE_RANGE = -32..32
def rand_color(rgb, bg: false)
"#{bg ? 48 : 38};2;#{rgb.map { (_1 + rand(RANDOMIZE_RANGE)).clamp(0, 0xff) }.join(';')}"
end
@tompng
tompng / ruby_c_irb.rb
Created January 19, 2024 17:07
ruby interactive shell that uses `ruby -c`
View ruby_c_irb.rb
class TemrinationChecker
def initialize
@prelaunched = nil
@code = ''
@current = new_session
end
def new_session
IO.popen(['ruby', '-c'], 'r+', err: [:child, :out])
end
View Reline-refactoring.md
  • Signal.trap('INT')

    • 割り込み中に余計な処理してはいけない(deadlockする)
  • Unicode

    • split_by_widthはheightを返す必要もないし配列の偶数番めにnilを含める必要もない
  • GeneralIO

    • 存在意義が謎 歴史的にはテスト専用(2019/5/21:test_modeでのみ使用 2021/5/14:TTYではない時にも使うよう変更)
    • テスト専用ならTERM=dumbの時以外には使ってはいけないし名前が良くない
View reline_screen_test.rb
class PseudoTerminalIO
def initialize(fiber)
@fiber = fiber
@buffer = []
end
def close
@buffer << nil
@closed = true