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
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(1 + 1, 2);
    assert.strictEqual(1 + 1, 2);
  });
});
Strings
Data Types

Your boss give you a task to format some integer numbers like this:

123456789 -> 123,456,789

So, you should write a function f which recieves a integer number and returns a string which every 3 consecutive digits are splitted with , symbol from left to right.

def f(n):
    G = 3
    s = str(n)
    r = len(s) % G
    def make(s):
        if r:
            yield s[:r]
        for i in range(r, len(s), G):
            yield s[i:i+G]
    return ','.join(make(s))

reverse the string passed as an arg and return the result

function revstr(str) {
  i = str.length; newstr = "";
  while (i > 0) {
    newstr += str[i - 1]; i--;
  }
  return newstr;
}

Return the character with the greatest occurance in a string

aaabbc -> a
abc -> a
abbcc -> b
cba -> c

function gtc(str) {
  const map = {}
  
  for(let char of str) {
    if(map[char]) {
      map[char] = map[char] + 1
    }else {
      map[char] = 1
    }
  }
  
  let result = str[0]
  
  for(let key in map) {
    if(map[key] > map[result]) {
      result = key 
    }
  }
  
  return result
}

takes two lists that are already sorted, and merges them together.

another simple solution but with higher order (O) is to simply sorted(a + b) the two lists.

def merge_lists(a, b):
    """
    takes two sorted lists, and merges them
    """
    sorted_list = []
    # grab inital values
    a_i = 0
    b_i = 0
    # while lists are not empty
    while len(a) != a_i and len(b) != b_i:
        if a[a_i] < b[b_i]:
            sorted_list.append(a[a_i])
            a_i += 1
        else:
            sorted_list.append(b[b_i])
            b_i += 1
    # append whatever is remaining
    [sorted_list.append(i) for i in a[a_i:]]
    [sorted_list.append(i) for i in b[b_i:]]
    return sorted_list

Read on Wikipedia.

This implementation makes it fairly clear that this is an O(n log(n)) operation.

from math import log

def lsd(l,b):
    s = l
    for n in range(int(log(max(l),b))+1):
        r = [[] for n in range(b)]
        for x in s:
            r[x//b**n%b].append(x)
        s = [e for i in r for e in i]
    return s

A container that you access like a sorted container, but only sorts the parts it needs to.
Based off of quicksort, so O(N**2) for a single access.
However, everything only needs to be sorted once, so it is O(N**2+Q) for Q queries.

#include <iostream>
#include <utility>
#include <memory>
#include <vector>

using pii = std::pair<int, int>;

class kata {
    std::vector<std::shared_ptr<pii>> ranges;
public:
    std::vector<int> &data;
    kata(std::vector<int> &in_data)
        : data(in_data)
        , ranges(in_data.size(), std::shared_ptr<pii>(new pii(0, in_data.size())))
    {
    }
    int operator[](int index) {
        for (int x : data) {
            std::cout << x << ' ';
        }
        std::cout << "| " << ranges[index]->first << ' ' << ranges[index]->second << '\n';
        int start = ranges[index]->first;
        int end = ranges[index]->second;
        if (end - start == 1) {
            return data[index];
        }
        int pivot = data[index];
        data[index] = data[end - 1];
        data[end - 1] = pivot;
        std::shared_ptr<pii> lt_pivot(new pii(start, start));
        int p = start;
        for (int i = start; i < end - 1; ++i) {
            if (data[i] < pivot) {
                int temp = data[p];
                data[p] = data[i];
                data[i] = temp;
                ranges[p] = lt_pivot;
                ++p;
            }
        }
        lt_pivot->second = p;
        data[end - 1] = data[p];
        data[p] = pivot;
        ranges[p]->first = p;
        ranges[p]->second = p + 1;
        std::shared_ptr<pii> gt_pivot(new pii(p + 1, end));
        for (int i = p + 1; i < end; ++i) {
            ranges[i] = gt_pivot;
        }
        return this->operator[](index);
    }
};

capslock

Uppercase the first character of each word in a string.
public function caps($c)
    {
        return ucwords($c);
    }
Strings
Data Types

In order to understand the everyday hasstle of people that suffer from dislexia my school made us do this activity:

  • replace all the (A's O's E's I's) of a certain phrase with (4's 0's 3's 1's) respectively

and we did it, but it took soooo long, would you write a bit of code that does the work for me?

e.g.:

dislexifier ->

  • input : "Hey Arianna, how u doing?"
  • output : "H3y 4ri4nn4, h0w u d01ng?"

ps.: try to avoid just using .replace(), it will make it more fun.

class Dislexifier
{
  public static String theDislexifier(String str)
  {
    
    // TODO: Do your magic here 
    
    return str.replace("a","4").replace("A","4").replace("o","0").replace("O","0").replace("e","3").replace("E","3").replace("i","1").replace("I","1");
  }
}

It will get a dictionary and return a list of the keys, all sorted by their corrosponding values in increasing order.

def dict_index(dictionary, value):
    dict_keys = list(dictionary)
    dict_values = list(dictionary.values())
    return dict_keys[dict_values.index(value)]

def dict_sort(dictionary):
    dict_values = list(dictionary.values())
    new_keys = []
    for x in range(len(dictionary)):
        max_value = max(dict_values)
        dict_values.remove(max_value)
        new_keys.append(dict_index(dictionary, max_value))
    new_keys.reverse()
    return new_keys