User:Inthar/Code: Difference between revisions
| Line 653: | Line 653: | ||
use std::cmp::{min, max}; | use std::cmp::{min, max}; | ||
type EquivalenceRelation<T> = fn(&T, &T) -> bool; | type EquivalenceRelation<T> = fn(&T, &T) -> bool; | ||
// Treating `scale` as a cyclic string (that is, "scale[i] == scale[i % scale.len()]"), | |||
// take a slice of length `slice_length` from `basepoint`; assumes `slice_length` <= `scale`.len() | |||
fn slice_cyclic_string(scale: &str, basepoint: usize, slice_length: usize) -> String { | |||
let arr = scale; | |||
if basepoint + slice_length < scale.len() { | |||
return String::from(&arr[basepoint..(basepoint+slice_length)]); | |||
} else { | |||
let mut ret = String::new(); | |||
ret.push_str(&arr[basepoint..]); | |||
ret.push_str(&arr[..(basepoint + slice_length - scale.len())]); | |||
return ret; | |||
} | |||
} | |||
pub fn are_rotationally_equivalent(scale1: &String, scale2: &String)-> bool{ | pub fn are_rotationally_equivalent(scale1: &String, scale2: &String)-> bool{ | ||