Skip to content

Instantly share code, notes, and snippets.

# Представь, что ты работаешь в букмекерской конторе программистом и тебя попросили написать функцию,
# которая на вход принимает два футбольных счета - тот который загадал клиент когда делал ставку
# и реальный результат футбольного матча (то как сыграли команды на самом деле). На выходе нужно получить:
# 2 - если клиент полностью угадал счет
# 1 - если клиент угадал какая команда победит или угадал ничью
# 0 - если не угадал ничего
#
# счет кодируется строкой вида "1:0"
#
@solutus
solutus / bfs_traverse.rb
Last active June 21, 2019 08:36
# usage BfsTraverse.call(order) { |order| order.related_orders }
# usage BfsTraverse.call(order) { |order| order.related_orders }
class BfsTraverse
def call(element, &adjacents_proc)
node = Node.new(element, &adjacents_proc)
BreadthFirstSearch.new(node).to_a.map(&:element)
end
class Node
attr_reader :element
def initialize(element, &adjacents_proc)
@solutus
solutus / bidirect_bfs.rb
Created March 21, 2018 19:24
bidirect breadth first search algorithm based on doc -> relations:array -> doc model
require 'set'
# Purpose of this class - to build connected undirected graph
# and effectively find all possible paths between vertices
# relations between docs in graph described below.
# Algorithm to build graph: bidirect breadth first search inspired by https://github.com/jwngr/sdow
#
# Example:
# doc1:
# id: 1
#!/usr/bin/env ruby
# Simple script, sorting tests by duration to analyze slow tests.
# Usage:
# chmod +x sort_tests.sh
# rspec -f d spec/ | sort_tests.sh
data = []
prev_time = nil