Kumite (ko͞omiˌtā) is the practice of taking techniques learned from Kata and applying them through the act of freestyle sparring.
You can create a new kumite by providing some initial code and optionally some test cases. From there other warriors can spar with you, by enhancing, refactoring and translating your code. There is no limit to how many warriors you can spar with.
A great use for kumite is to begin an idea for a kata as one. You can collaborate with other code warriors until you have it right, then you can convert it to a kata.
fn letter_frequency(s: &str) -> Vec<(char, usize)> { let s = s.to_lowercase(); let mut frequencies: Vec<(char, usize)> = ('a'..='z') .map(|l| (l, s.chars().filter(|&c| c == l).count())) .filter(|&(_, n)| n != 0) .collect(); frequencies.sort_by_key(|&(_, n)| usize::MAX - n); frequencies }
from collections import Counterdef letter_frequency(text):chars = Counter(c for c in text.lower() if c.isalpha())return sorted(chars.items(), key=lambda x: (-x[1], x[0]))- fn letter_frequency(s: &str) -> Vec<(char, usize)> {
- let s = s.to_lowercase();
- let mut frequencies: Vec<(char, usize)> = ('a'..='z')
- .map(|l| (l, s.chars().filter(|&c| c == l).count()))
- .filter(|&(_, n)| n != 0)
- .collect();
- frequencies.sort_by_key(|&(_, n)| usize::MAX - n);
- frequencies
- }
#[cfg(test)] mod tests { use super::*; #[test] fn test() { assert_eq!( letter_frequency("wklv lv d vhfuhw phvvdjh"), [ ('v', 5), ('h', 4), ('d', 2), ('l', 2), ('w', 2), ('f', 1), ('j', 1), ('k', 1), ('p', 1), ('u', 1) ] ); assert_eq!( letter_frequency("As long as I\'m learning something, I figure I\'m OK - it\'s a decent day."), [ ('i', 7), ('a', 5), ('e', 5), ('n', 5), ('g', 4), ('s', 4), ('m', 3), ('o', 3), ('t', 3), ('d', 2), ('l', 2), ('r', 2), ('c', 1), ('f', 1), ('h', 1), ('k', 1), ('u', 1), ('y', 1) ] ); } }
test.assert_equals(letter_frequency('wklv lv d vhfuhw phvvdjh'), [('v', 5), ('h', 4), ('d', 2), ('l', 2), ('w', 2), ('f', 1), ('j', 1), ('k', 1), ('p', 1), ('u', 1)])test.assert_equals(letter_frequency('As long as I\'m learning something, I figure I\'m OK - it\'s a decent day.'), [('i', 7),('a', 5),('e', 5),('n', 5),('g', 4),('s', 4),('m', 3),('o', 3),('t', 3),('d', 2),('l', 2),('r', 2),('c', 1),('f', 1),('h', 1),('k', 1),('u', 1),('y', 1),])- #[cfg(test)]
- mod tests {
- use super::*;
- #[test]
- fn test() {
- assert_eq!(
- letter_frequency("wklv lv d vhfuhw phvvdjh"),
- [
- ('v', 5), ('h', 4), ('d', 2), ('l', 2), ('w', 2),
- ('f', 1), ('j', 1), ('k', 1), ('p', 1), ('u', 1)
- ]
- );
- assert_eq!(
- letter_frequency("As long as I\'m learning something, I figure I\'m OK - it\'s a decent day."),
- [
- ('i', 7), ('a', 5), ('e', 5), ('n', 5), ('g', 4),
- ('s', 4), ('m', 3), ('o', 3), ('t', 3), ('d', 2),
- ('l', 2), ('r', 2), ('c', 1), ('f', 1), ('h', 1),
- ('k', 1), ('u', 1), ('y', 1)
- ]
- );
- }
- }
fn remove_exclamation_marks(s: &str) -> String { s.replace('!', "") }
function removeExclamationMarks(s) {}- fn remove_exclamation_marks(s: &str) -> String {
- s.replace('!', "")
- }
#[cfg(test)] mod tests { use super::*; #[test] fn test() { assert_eq!(remove_exclamation_marks("Hello World!"), "Hello World"); assert_eq!(remove_exclamation_marks("Hello World!!!"), "Hello World"); assert_eq!(remove_exclamation_marks("Hi! Hello!"), "Hi Hello"); assert_eq!(remove_exclamation_marks(""), ""); assert_eq!(remove_exclamation_marks("!"), ""); } }
// Since Node 10, we're using Mocha.// You can use `chai` for assertions.const chai = require("chai");const assert = chai.assert;// Uncomment the following line to disable truncating failure messages for deep equals, do:// chai.config.truncateThreshold = 0;// Since Node 12, we no longer include assertions from our deprecated custom test framework by default.// Uncomment the following to use the old assertions:// const Test = require("@codewars/test-compat");describe("Solution", function() {it("should test for something", function() {// Test.assertEquals(removeExclamationMarks("Hello World!"), "Hello World");// Test.assertEquals(removeExclamationMarks("Hello World!!!"), "Hello World");// Test.assertEquals(removeExclamationMarks("Hi! Hello!"), "Hi Hello");// Test.assertEquals(removeExclamationMarks(""), "");// Test.assertEquals(removeExclamationMarks("!"), "");});});- #[cfg(test)]
- mod tests {
- use super::*;
- #[test]
- fn test() {
- assert_eq!(remove_exclamation_marks("Hello World!"), "Hello World");
- assert_eq!(remove_exclamation_marks("Hello World!!!"), "Hello World");
- assert_eq!(remove_exclamation_marks("Hi! Hello!"), "Hi Hello");
- assert_eq!(remove_exclamation_marks(""), "");
- assert_eq!(remove_exclamation_marks("!"), "");
- }
- }
fn prime_factors(number: u32) -> Vec<u32> { match (2..number).find(|divisor| number % divisor == 0) { Some(factor) => [vec![factor], prime_factors(number / factor)].concat(), None => vec![number], } }
def prime_factors(n):divider = lambda x: next((i for i in range(2, x) if x % i == 0), -1)return ([] if n == 1 else [n]) if divider(n) == -1 else ([divider(n)] + prime_factors(n // divider(n)))- fn prime_factors(number: u32) -> Vec<u32> {
- match (2..number).find(|divisor| number % divisor == 0) {
- Some(factor) => [vec![factor], prime_factors(number / factor)].concat(),
- None => vec![number],
- }
- }
#[cfg(test)] mod tests { use super::*; #[test] fn prime_factors_test() { assert_eq!(prime_factors(100), vec![2, 2, 5, 5]); assert_eq!(prime_factors(37), vec![37]); assert_eq!(prime_factors(18), vec![2, 3, 3]); } }
import codewars_test as testimport solution # or from solution import example@test.describe("Prime factors test")def test_case():test.assert_equals(prime_factors(100), [2, 2, 5, 5])test.assert_equals(prime_factors(37), [37])test.assert_equals(prime_factors(18), [2, 3, 3])- #[cfg(test)]
- mod tests {
- use super::*;
- #[test]
- fn prime_factors_test() {
- assert_eq!(prime_factors(100), vec![2, 2, 5, 5]);
- assert_eq!(prime_factors(37), vec![37]);
- assert_eq!(prime_factors(18), vec![2, 3, 3]);
- }
- }
fn calculator(operator: char, num1: i32, num2: i32) -> i32 { match operator { '+' => num1 + num2, '-' => num1 - num2, '*' => num1 * num2, '/' => num1 / num2, _ => panic!("Invalid operator: '{operator}'.") } }
def calculator(operator, num1, num2):if operator == "+":result = num1 + num2elif operator == "-":result = num1 - num2elif operator == "*":result = num1 * num2elif operator == "/":result = num1 / num2else:raise ValueError("Invalid operator. Supported operators are +, -, *, /")return resultresult = calculator("+", 4, 8)print(result)result = calculator("-", 7, 4)print(result)result = calculator("*", 8, 7)print(result)result = calculator("/", 70, 7)print(result)- fn calculator(operator: char, num1: i32, num2: i32) -> i32 {
- match operator {
- '+' => num1 + num2,
- '-' => num1 - num2,
- '*' => num1 * num2,
- '/' => num1 / num2,
- _ => panic!("Invalid operator: '{operator}'.")
- }
- }
// Add your tests here. // See https://doc.rust-lang.org/stable/rust-by-example/testing/unit_testing.html #[cfg(test)] mod tests { use super::*; #[test] fn test() { assert_eq!(calculator('+', 4, 8), 12); assert_eq!(calculator('-', 7, 4), 3); assert_eq!(calculator('*', 8, 7), 56); assert_eq!(calculator('/', 70, 7), 10); } }
import codewars_test as test# TODO Write testsimport solution # or from solution import example- // Add your tests here.
- // See https://doc.rust-lang.org/stable/rust-by-example/testing/unit_testing.html
# test.assert_equals(actual, expected, [optional] message)@test.describe("Example")def test_group():@test.it("test case")def test_case():test.assert_equals(1 + 1, 2)- #[cfg(test)]
- mod tests {
- use super::*;
- #[test]
- fn test() {
- assert_eq!(calculator('+', 4, 8), 12);
- assert_eq!(calculator('-', 7, 4), 3);
- assert_eq!(calculator('*', 8, 7), 56);
- assert_eq!(calculator('/', 70, 7), 10);
- }
- }
use std::cmp::Ordering; fn numbers_vs_letters(s: &str) -> Winner { let tallies: Vec<Winner> = s .split(" ") .map(|group| { let number_value = if group.chars().any(|c| c.is_ascii_digit()) { group.chars().filter(char::is_ascii_digit).map(|c| c as u32 - 48).product() } else { 0 }; let letter_value = group.chars().filter(char::is_ascii_alphabetic).map(|c| c as u32 - 96).sum(); match number_value.cmp(&letter_value) { Ordering::Less => Winner::Letters, Ordering::Equal => Winner::Tie, Ordering::Greater => Winner::Numbers, } }) .collect(); let number_wins = tallies.iter().filter(|&w| w == &Winner::Numbers).count(); let letter_wins = tallies.iter().filter(|&w| w == &Winner::Letters).count(); match number_wins.cmp(&letter_wins) { Ordering::Less => Winner::Letters, Ordering::Equal => Winner::Tie, Ordering::Greater => Winner::Numbers, } } #[derive(Debug, PartialEq, Eq)] enum Winner { Numbers, Letters, Tie, }
public class pp{- use std::cmp::Ordering;
- fn numbers_vs_letters(s: &str) -> Winner {
- let tallies: Vec<Winner> = s
- .split(" ")
- .map(|group| {
- let number_value = if group.chars().any(|c| c.is_ascii_digit()) {
- group.chars().filter(char::is_ascii_digit).map(|c| c as u32 - 48).product()
- } else {
- 0
- };
- let letter_value = group.chars().filter(char::is_ascii_alphabetic).map(|c| c as u32 - 96).sum();
- match number_value.cmp(&letter_value) {
- Ordering::Less => Winner::Letters,
- Ordering::Equal => Winner::Tie,
- Ordering::Greater => Winner::Numbers,
- }
- })
- .collect();
- let number_wins = tallies.iter().filter(|&w| w == &Winner::Numbers).count();
- let letter_wins = tallies.iter().filter(|&w| w == &Winner::Letters).count();
- match number_wins.cmp(&letter_wins) {
- Ordering::Less => Winner::Letters,
- Ordering::Equal => Winner::Tie,
- Ordering::Greater => Winner::Numbers,
- }
- }
- #[derive(Debug, PartialEq, Eq)]
- enum Winner {
- Numbers,
- Letters,
- Tie,
- }
#[cfg(test)] mod tests { use super::*; #[test] fn test_easy() { assert_eq!(numbers_vs_letters("12345 98212"), Winner::Numbers); assert_eq!(numbers_vs_letters("9999"), Winner::Numbers); assert_eq!(numbers_vs_letters("abcdefg"), Winner::Letters); assert_eq!(numbers_vs_letters("zzzzzzz213 9ppppopppo2"), Winner::Letters); assert_eq!(numbers_vs_letters("abcdef 12345"), Winner::Tie); } #[test] fn test_hard() { assert_eq!(numbers_vs_letters(""), Winner::Tie); assert_eq!(numbers_vs_letters(" "), Winner::Tie); assert_eq!(numbers_vs_letters("a1"), Winner::Tie); assert_eq!(numbers_vs_letters("a1b2c3 d4e5f6"), Winner::Numbers); assert_eq!(numbers_vs_letters("a1b2c3 5y5"), Winner::Tie); assert_eq!(numbers_vs_letters("a1b2c3 5y5"), Winner::Tie); assert_eq!(numbers_vs_letters("5y5 a1b2c3 "), Winner::Tie); assert_eq!(numbers_vs_letters("9%$@"), Winner::Numbers); assert_eq!(numbers_vs_letters("~$@#a"), Winner::Letters); assert_eq!(numbers_vs_letters("~$@#"), Winner::Tie); assert_eq!(numbers_vs_letters("0"), Winner::Tie); } }
import org.junit.jupiter.api.Test;import static org.junit.jupiter.api.Assertions.assertEquals;// TODO: Replace examples and use TDD by writing your own testsclass SolutionTest {@Testvoid hiddenTest() {assertEquals(0,"");assertEquals(0,"a1");assertEquals(1,"a1b2c3 d4e5f6");}@Testvoid randomTests() {String allChars = "abcdefghijklmnopqrstuvwxyz1234567890";StringBuilder randomString = new StringBuilder();for(int repetitions=0;repetitions<100;repetitions++) {randomString.setLength(0);int finalStringLength =(int) (Math.random() * 100);for(int i=0;i<finalStringLength;i++) {int currentWordLength = (int) (Math.random() * 20);for(int j=0;j<currentWordLength;j++) {randomString.append(allChars.charAt((int)(Math.random() * 35))).append(" ");}randomString.deleteCharAt(randomString.length()-1);}assertEquals("nuestroCodigo","codigoUsuario(randomString.toString())");}}}- #[cfg(test)]
- mod tests {
- use super::*;
- #[test]
- fn test_easy() {
- assert_eq!(numbers_vs_letters("12345 98212"), Winner::Numbers);
- assert_eq!(numbers_vs_letters("9999"), Winner::Numbers);
- assert_eq!(numbers_vs_letters("abcdefg"), Winner::Letters);
- assert_eq!(numbers_vs_letters("zzzzzzz213 9ppppopppo2"), Winner::Letters);
- assert_eq!(numbers_vs_letters("abcdef 12345"), Winner::Tie);
- }
- #[test]
- fn test_hard() {
- assert_eq!(numbers_vs_letters(""), Winner::Tie);
- assert_eq!(numbers_vs_letters(" "), Winner::Tie);
- assert_eq!(numbers_vs_letters("a1"), Winner::Tie);
- assert_eq!(numbers_vs_letters("a1b2c3 d4e5f6"), Winner::Numbers);
- assert_eq!(numbers_vs_letters("a1b2c3 5y5"), Winner::Tie);
- assert_eq!(numbers_vs_letters("a1b2c3 5y5"), Winner::Tie);
- assert_eq!(numbers_vs_letters("5y5 a1b2c3 "), Winner::Tie);
- assert_eq!(numbers_vs_letters("9%$@"), Winner::Numbers);
- assert_eq!(numbers_vs_letters("~$@#a"), Winner::Letters);
- assert_eq!(numbers_vs_letters("~$@#"), Winner::Tie);
- assert_eq!(numbers_vs_letters("0"), Winner::Tie);
- }
- }
yearlyElectricCosts=(...c)=>+`${(''+c.reduce((a,b)=>a+b)).split`.`[0]}.${(''+c.reduce((a,b)=>a+b)).split`.`[1].slice(0,2)}`
yearlyElectricCosts=(...c)=>(r=>+`${r[0]}.${r[1].slice(0,2)}`)((''+c.reduce((a,b)=>a+b)).split`.`)- yearlyElectricCosts=(...c)=>+`${(''+c.reduce((a,b)=>a+b)).split`.`[0]}.${(''+c.reduce((a,b)=>a+b)).split`.`[1].slice(0,2)}`
public static class Kata { public static int SameCase(char a, char b) => (a >= 65 && a <= 90 || a >= 97 && a <= 122) ? (b >= 65 && b <= 90 || b >= 97 && b <= 122) ? (a >= 97 && b >= 97 || a <= 90 && b <= 90) ? 1 : 0 : -1 : -1; }
- public static class Kata
- {
public static int SameCase(char a, char b) =>(!(char.IsLetter(a) && char.IsLetter(b)))? -1: (char.IsLower(a) == char.IsLower(b))? 1: 0;- public static int SameCase(char a, char b) =>
- (a >= 65 && a <= 90 || a >= 97 && a <= 122)
- ? (b >= 65 && b <= 90 || b >= 97 && b <= 122)
- ? (a >= 97 && b >= 97 || a <= 90 && b <= 90)
- ? 1
- : 0
- : -1
- : -1;
- }