Start a new Kumite
AllAgda (Beta)BF (Beta)CCFML (Beta)ClojureCOBOL (Beta)CoffeeScriptCommonLisp (Beta)CoqC++CrystalC#D (Beta)DartElixirElm (Beta)Erlang (Beta)Factor (Beta)Forth (Beta)Fortran (Beta)F#GoGroovyHaskellHaxe (Beta)Idris (Beta)JavaJavaScriptJulia (Beta)Kotlinλ Calculus (Beta)LeanLuaNASMNim (Beta)Objective-C (Beta)OCaml (Beta)Pascal (Beta)Perl (Beta)PHPPowerShell (Beta)Prolog (Beta)PureScript (Beta)PythonR (Beta)RacketRaku (Beta)Reason (Beta)RISC-V (Beta)RubyRustScalaShellSolidity (Beta)SQLSwiftTypeScriptVB (Beta)
Show only mine

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.

Ad
Ad

I used a different accumulation strategy. It's probably the same speed.

Code
Diff
  • pub fn sort_desc(mut n: u64) -> u64 {
        let mut digit_counts = [0; 10];
        while n > 0 {
            let digit = (n % 10) as usize;
            digit_counts[digit] += 1;
            n /= 10;
        }
        let mut result = 0;
        for digit in (0..10).rev() {
            for _ in 0..digit_counts[digit] {
                result *= 10;
                result += digit as u64;
            }
        }
        result
    }
    • pub fn sort_desc(mut n: u64) -> u64 {
    • let mut digit_counts = [0; 10];
    • while n > 0 {
    • let digit = (n % 10) as usize;
    • digit_counts[digit] += 1;
    • n /= 10;
    • }
    • let mut result = 0;
    • let mut fac = 1;
    • for digit in 0..10 {
    • for digit in (0..10).rev() {
    • for _ in 0..digit_counts[digit] {
    • result += (digit as u64) * fac;
    • fac *= 10;
    • result *= 10;
    • result += digit as u64;
    • }
    • }
    • result
    • }
Code
Diff
  • XOR=(a,b)=>!!(a^b)
    • XOR=(a,b)=>!!((a+b)%2)
    • XOR=(a,b)=>!!(a^b)
Code
Diff
  • fn disemvowel(string: &str) -> String {
        string.replace(['A','E','I','O','U','a','e','i','o','u'], "")
    }
    • fn disemvowel(string: &str) -> String {
    • string.chars().filter(|&c| !"AEIOUaeiou".contains(c)).collect()
    • string.replace(['A','E','I','O','U','a','e','i','o','u'], "")
    • }
Algorithms
Strings

The hack has been banished.

Code
Diff
  • #include <stdlib.h>
    #include <string.h>
    
    /*
      Heap allocate the string and return it.
    */
    
    char* remove_string(const char *input, const int n)
    {
      if (n <= 0 || input == NULL) return NULL;
      for (size_t i = 0, len = 0; i < (size_t)n; i++)
      {
        input += len;
        if ((len = strlen(input) + 1) == 1) return NULL;
      }  
      return strdup(input);
    }
    • #include <stdlib.h>
    • #include <string.h>
    • /*
    • Heap allocate the string and return it.
    • */
    • char* remove_string(const char *input, const int n)
    • {
    • if (n <= 0 || input == NULL) return NULL;
    • // This is a BIG hack, and I am unsure why it works since in an edge
    • // situation where "n" is greater than the number of '\0' in the string,
    • // the pointer will wander into unallocated memory.
    • for (int c = 1; c < n; input++, (*input == '\0' ? c++ && input++ : c));
    • char* res = strdup(input);
    • return *res == NULL ? NULL : res;
    • for (size_t i = 0, len = 0; i < (size_t)n; i++)
    • {
    • input += len;
    • if ((len = strlen(input) + 1) == 1) return NULL;
    • }
    • return strdup(input);
    • }
Code
Diff
  • import random
    import time
    def not_even(n):
        pizza_time = time.ctime()
        if n % 2 == 0:
            return 'its not even', pizza_time
        else:
            return 'its still not even', pizza_time
        return pizza_time
    n = random.randint(0, 10000)
     
    print(not_even(n))
    • odd_even=lambda n:int(__import__('requests').get(f'https://api.isevenapi.xyz/api/iseven/{n}/').json()['iseven'])
    • import random
    • import time
    • def not_even(n):
    • pizza_time = time.ctime()
    • if n % 2 == 0:
    • return 'its not even', pizza_time
    • else:
    • return 'its still not even', pizza_time
    • return pizza_time
    • n = random.randint(0, 10000)
    • print(not_even(n))
Code
Diff
  • fn mean(x: &[f64]) -> f64 {
        let x_len_float = x.len() as f64;
        return x.iter().sum::<f64>() / x_len_float;
    }
    
    • fn mean(x: &[u64]) -> u64 {
    • x.iter().sum::<u64>() / x.len() as u64
    • fn mean(x: &[f64]) -> f64 {
    • let x_len_float = x.len() as f64;
    • return x.iter().sum::<f64>() / x_len_float;
    • }

less char -> Short-Circuiting instead of ternary

Code
Diff
  • v='aeiou'
    x=(s,f)=>[...s].map(f).join``
    d=s=>x(s,e=>v[Math.min(6,e)-1]||e)
    n=s=>x(s,e=>v.indexOf(e)+1||e)
    • v='aeiou'
    • x=(s,f)=>[...s].map(f).join``
    • d=s=>x(s,e=>(+e&&e<6?v[e-1]:e))
    • n=s=>x(s,e=>((g=v.indexOf(e)+1)&g?g:e))
    • d=s=>x(s,e=>v[Math.min(6,e)-1]||e)
    • n=s=>x(s,e=>v.indexOf(e)+1||e)