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.
import operator from functools import reduce def Calculator(c = "+", a = 0, b = 0): operators = { '+': operator.add, '-': operator.sub, '*': operator.mul, '/': operator.truediv } try: return reduce(operators[c], [a, b]) except: return 0
def Calculator(c = "+", a = 0, b = 1):output = 0try:output = (eval(str(a) + c + str(b)))except:passreturn ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~int(output)- import operator
- from functools import reduce
- def Calculator(c = "+", a = 0, b = 0):
- operators = {
- '+': operator.add,
- '-': operator.sub,
- '*': operator.mul,
- '/': operator.truediv
- }
- try: return reduce(operators[c], [a, b])
- except: return 0
class TemperatureConverter: def __init__(self, temp: float): self.temp = temp self.fahrenheit = round((temp - 32) * (5 / 9), 2) self.celsius = round((temp * 9 / 5) + 32, 2)
- class TemperatureConverter:
def __init__(self, temp: float): self.temp = tempfahrenheit_to_celsius = lambda self: round((self.temp - 32) * (5 / 9), 2)celsius_to_fahrenheit = lambda self: round((self.temp * 9 / 5) + 32, 2)- def __init__(self, temp: float):
- self.temp = temp
- self.fahrenheit = round((temp - 32) * (5 / 9), 2)
- self.celsius = round((temp * 9 / 5) + 32, 2)
import codewars_test as test from solution import TemperatureConverter @test.describe("Example") def test_group(): @test.it("test case 1: fahrenheit_to_celsius") def test_case(): test.assert_equals(TemperatureConverter(0).fahrenheit, -17.78) test.assert_equals(TemperatureConverter(32).fahrenheit, 0) test.assert_equals(TemperatureConverter(76).fahrenheit, 24.44) test.assert_equals(TemperatureConverter(112).fahrenheit, 44.44) test.assert_equals(TemperatureConverter(-55).fahrenheit, -48.33) def test_group(): @test.it("test case 2: celsius_to_fahrenheit") def test_case(): test.assert_equals(TemperatureConverter(0).celsius, 32) test.assert_equals(TemperatureConverter(32).celsius, 89.6) test.assert_equals(TemperatureConverter(-17).celsius, 1.4) test.assert_equals(TemperatureConverter(48).celsius, 118.4)
- import codewars_test as test
- from solution import TemperatureConverter
- @test.describe("Example")
- def test_group():
- @test.it("test case 1: fahrenheit_to_celsius")
- def test_case():
test.assert_equals(TemperatureConverter(0).fahrenheit_to_celsius(), -17.78)test.assert_equals(TemperatureConverter(32).fahrenheit_to_celsius(), 0)test.assert_equals(TemperatureConverter(76).fahrenheit_to_celsius(), 24.44)test.assert_equals(TemperatureConverter(112).fahrenheit_to_celsius(), 44.44)test.assert_equals(TemperatureConverter(-55).fahrenheit_to_celsius(), -48.33)- test.assert_equals(TemperatureConverter(0).fahrenheit, -17.78)
- test.assert_equals(TemperatureConverter(32).fahrenheit, 0)
- test.assert_equals(TemperatureConverter(76).fahrenheit, 24.44)
- test.assert_equals(TemperatureConverter(112).fahrenheit, 44.44)
- test.assert_equals(TemperatureConverter(-55).fahrenheit, -48.33)
- def test_group():
- @test.it("test case 2: celsius_to_fahrenheit")
- def test_case():
test.assert_equals(TemperatureConverter(0).celsius_to_fahrenheit(), 32)test.assert_equals(TemperatureConverter(32).celsius_to_fahrenheit(), 89.6)test.assert_equals(TemperatureConverter(-17).celsius_to_fahrenheit(), 1.4)test.assert_equals(TemperatureConverter(48).celsius_to_fahrenheit(), 118.4)- test.assert_equals(TemperatureConverter(0).celsius, 32)
- test.assert_equals(TemperatureConverter(32).celsius, 89.6)
- test.assert_equals(TemperatureConverter(-17).celsius, 1.4)
- test.assert_equals(TemperatureConverter(48).celsius, 118.4)
fn math(s: &str) -> i32 { // remove whitespace characters so all we have left are digits and the operator let math_str: String = s.chars().filter(|ch| !ch.is_whitespace()).collect(); // find the position of the operator character let pos: usize = math_str .chars() .position(|ch| ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '=') .expect("invalid operator, expected +, -, *, / or ="); // extract the two numbers from the string let num1: i32 = math_str[..pos].parse().unwrap(); let num2: i32 = math_str[pos + 1..].parse().unwrap(); match &math_str[pos..pos + 1] { "+" => num1 + num2, "-" => num1 - num2, "*" => num1 * num2, "/" => num1 / num2, _ => (num1 == num2) as i32, } }
- fn math(s: &str) -> i32 {
// first remove whitespace characters so all we have left are digits and the operatorlet num_str: String = s.chars().filter(|ch| *ch != ' ').collect();- // remove whitespace characters so all we have left are digits and the operator
- let math_str: String = s.chars().filter(|ch| !ch.is_whitespace()).collect();
// extract the operator characterlet pos: usize = num_str- // find the position of the operator character
- let pos: usize = math_str
- .chars()
- .position(|ch| ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '=')
.expect("invalid operator, expected '+, -, *, / or =");let operator: char = num_str.chars().nth(pos).unwrap();- .expect("invalid operator, expected +, -, *, / or =");
- // extract the two numbers from the string
let num1: i32 = num_str.get(0..pos).unwrap().parse().unwrap();let num2: i32 = num_str.get(pos + 1..).unwrap().parse().unwrap();- let num1: i32 = math_str[..pos].parse().unwrap();
- let num2: i32 = math_str[pos + 1..].parse().unwrap();
match operator {'+' => num1 + num2,'-' => num1 - num2,'*' => num1 * num2,'/' => num1 / num2,- match &math_str[pos..pos + 1] {
- "+" => num1 + num2,
- "-" => num1 - num2,
- "*" => num1 * num2,
- "/" => num1 / num2,
- _ => (num1 == num2) as i32,
- }
- }
#[cfg(test)] mod tests { use super::*; #[test] fn test_add() { assert_eq!(math("1 + 2"), 3); assert_eq!(math("12+ 3456789"), 3456801); assert_eq!(math("50 + 10 0"), 150); } #[test] fn test_sub() { assert_eq!(math("1-3"), -2); assert_eq!(math(" 500 - 150 "), 350); assert_eq!(math("0-2"), -2); } #[test] fn test_multiply() { assert_eq!(math("1* 30"), 30); assert_eq!(math("20 *5"), 100); } #[test] fn test_divide() { assert_eq!(math("10/5"), 2); assert_eq!(math("500 / 2 "), 250); } #[test] fn test_equal() { assert_eq!(math("10 = 10"), 1); assert_eq!(math(" 2 =50"), 0); assert_eq!(math("0=0"), 1); } }
- #[cfg(test)]
- mod tests {
- use super::*;
- #[test]
- fn test_add() {
- assert_eq!(math("1 + 2"), 3);
- assert_eq!(math("12+ 3456789"), 3456801);
- assert_eq!(math("50 + 10 0"), 150);
- }
- #[test]
- fn test_sub() {
- assert_eq!(math("1-3"), -2);
assert_eq!(math("500 - 150"), 350);- assert_eq!(math(" 500 - 150 "), 350);
- assert_eq!(math("0-2"), -2);
- }
- #[test]
- fn test_multiply() {
- assert_eq!(math("1* 30"), 30);
- assert_eq!(math("20 *5"), 100);
- }
- #[test]
- fn test_divide() {
- assert_eq!(math("10/5"), 2);
assert_eq!(math("500 / 2"), 250);- assert_eq!(math("500 / 2 "), 250);
- }
- #[test]
- fn test_equal() {
- assert_eq!(math("10 = 10"), 1);
assert_eq!(math("2 =50"), 0);- assert_eq!(math(" 2 =50"), 0);
- assert_eq!(math("0=0"), 1);
- }
- }