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 found a way to make random tests in python not random.

import random
random.seed(0)#Or any other number

This is a way to block the random.seed command which breaks your random tests

import random
random.seed = None

Sometimes we need a fast code to do this operation as fast as possible. Perhaps this one may help.

function primeFactorization(num){
    var root = Math.sqrt(num),  
    result = arguments[1] || [],x = 2; 
    if(num % x){
        x = 3;
        while((num % x) && ((x = x + 2) < root)){}
    }
    x = (x <= root) ? x : num;
    result.push(x);
    return (x === num) ? result : primeFactorization(num/x, result);
}

A similar kata in python to get the prime factors of a number.

from math import sqrt, floor
def fac(n):  
    step = lambda x: 1 + (x<<2) - ((x>>1)<<1)  
    maxq = long(floor(sqrt(n))) 
    d = 1
    q = n % 2 == 0 and 2 or 3 
    while q <= maxq and n % q != 0:
        q = step(d)
        d += 1
    return q <= maxq and [q] + fac(n//q) or [n]

With this one we close the trilogy Javascript-Python-Ruby to get the primes factor.

def prime_fac(i)
    factors = []
    check = proc do |p|
        while(q, r = i.divmod(p) 
        	   r.zero?)
            factors << p
            i = q
        end
    end
    check[2]
    check[3]
    p = 5
    while p * p <= i
        check[p]
        p += 2
        check[p]
        p += 4    # skip multiples of 2 and 3
    end
    factors << i if i > 1
    factors
end
def get_frames(seq)
  rev = seq.gsub(/[ATGC]/, 'A' => 'T', 'T' => 'A', 'G' => 'C', 'C' => 'G').reverse
  { "1":  seq, "2":  seq[1..-1], "3": seq[2..-1],
    "-1": rev, "-2": rev[1..-1], "-3": rev[2..-1] }
end

def find_orf_in_frame(seq,frame,min,len)
  orfs    = []
  tri_nts = seq.scan(/.{3}/)
  start   = stop = seq = ""
  seq     = seq.reverse.tr("ACTG","TGAC")

  is_neg  = frame < 0
  neg_offset = {"1" =>  1, "2" =>  3, "3" => 5}
  offset     = neg_offset[frame.abs().to_s]

  tri_nts.each_with_index do |tri_nt,i|
    if  (i == tri_nts.size - 1)
        stop  = ((i*3)+frame+2)
        start = (len - start.to_i - offset) if is_neg
        stop  = (len - stop.to_i  - offset) if is_neg
      orfs << [start.to_s,">#{stop}",seq] if (seq.length + 3) >= min
      break
    end
    if seq == "" && tri_nt == "ATG"
      # p "ATG"
      seq  += tri_nt
      start = (i * 3) + frame
    elsif (!$codons.select {|k,v| v == "*"}.keys.include?(tri_nt)) && seq != ""
      seq  += tri_nt
    elsif $codons.select {|k,v| v == "*"}.keys.include?(tri_nt)
      print "\n-----\n"
      print seq.scan(/.{3}/).map{|a| $codons[a]}.join()
      if (seq.length + 3) >= min
        stop  = ((i*3)+frame+2)
        start = (len - start.to_i - offset) if is_neg
        stop  = (len - stop.to_i  - offset) if is_neg
        orfs << [start.to_s,stop.to_s,seq]
      end
      start = stop = seq = ""
    end
  end
  orfs
end

def find_orfs(seq,min)
  frames = get_frames(seq)
  len    = seq.length
  all_orfs  = Hash.new()
  count = 1
  # [1,2,3,-1,-2,-3].each do |frame|
  [1].each do |frame|
    is_neg = frame < 0 ? true : false
    seq    = frames[frame.to_s.to_sym]
    orfs   = find_orf_in_frame(seq,frame,min,len)
    orfs.each do |orf|
      orf_info = {
        start:  orf[0],
        stop:   orf[1],
        strand: frame > 0 ? "+" : "-",
        seq:    orf[2].scan(/.{3}/).map{|a| $codons[a]}.join(),
        bp:     orf[2].length + 3,
        aa:     orf[2].length / 3,
        frame:  frame,
      }
      all_orfs["ORF#{count}"] = orf_info
      count += 1
    end
  end
  all_orfs
end
String.prototype.scan = function(regex) {
    if (!regex.global) throw "regex must have 'global' flag set";
    var r = []
    this.replace(regex, function() {
        r.push(Array.prototype.slice.call(arguments, 1, -2));
    });
    return r;
}

function reverseComplement(dna) {
  return /[^ATCG]/.test(dna) ? "Invalid sequence" :
  [...dna.replace(/./g,x=>x=="A"?"T":x=="T"?"A":x=="C"?"G":"C")].reverse().join("")
}

function getFrames(seq){
  var rev        = reverseComplement(seq)
  var seq_length = seq.length
  return { 
    "1" : seq,  "2": seq.substring(1,seq_length-1),  "3": seq.substring(2,seq_length-1),
    "-1": rev, "-2": rev.substring(1,seq_length-1), "-3": rev.substring(2,seq_length-1)
  }
}

function findOrfInFrame(seq,frame,min,len) {
  var orfs    = []
  var tri_nts = seq.match(/.{1,3}/g)
  var start   = ""
  var stop    = ""
  var orf_seq = ""

  var is_neg  = frame < 0
  var neg_offset = {"1" :  1, "2" :  3, "3" : 5}
  var offset     = neg_offset[Math.abs(frame).toString()]

  tri_nts.forEach( function(tri_nt,i){
    // The very end of the sequence
    if  (i == tri_nts.size - 1) {
      stop  = ((i*3)+frame+2)
      if (is_neg) {
        start = (len - parseInt(start) - offset)
        stop  = (len - parseInt(stop)  - offset)
      }
      if ((orf_seq.length + 3) >= min) {
        orfs.push([start.toString(),">#{stop}",orf_seq])
      }
    }
    // Start of an ORF
    if (orf_seq == "" && tri_nt == "ATG") {
      orf_seq  += tri_nt
      start = (i * 3) + frame
    // Not a stop codon
    } else if (codons[tri_nt] != "*" && orf_seq != ""){
      orf_seq  += tri_nt
    // Find a stop codon
    } else if (codons[tri_nt] == "*" && orf_seq != ""){
      if ((orf_seq.length + 3) >= min){
        stop  = ((i*3)+frame+2)
        if (is_neg) {
          start = (len - parseInt(start) - offset)
          stop  = (len - parseInt(stop)  - offset)
        }
        orfs.push([start.toString(),stop.toString(),orf_seq])
        start   = ""
        stop    = ""
        orf_seq = "" 
      }
    }
  });
  return orfs
}

function findOrfs(seq,min) {
  var frames    = getFrames(seq)
  var len       = seq.length
  var all_orfs  = {}
  var count     = 1
  var frames_l  = [1]//,2,3,-1,-2,-3]
  frames_l.forEach(function(frame){
    var is_neg = frame < 0 ? true : false
    var seq    = frames[frame.toString()]
    var orfs   = findOrfInFrame(seq,frame,min,len)
    orfs.forEach(function(orf){
      var orf_info = {
        'start' : orf[0],
        'stop'  : orf[1],
        'strand': frame > 0 ? "+" : "-",
        'seq'   : orf[2].match(/.{1,3}/g).map(codon=>codons[codon]).join(""),
        'bp'    : orf[2].length + 3,
        'aa'    : orf[2].length / 3,
        'frame' : frame,
      };
      all_orfs[`ORF${count}`] = orf_info
      count += 1
    });
  });
  console.log(all_orfs)
  return all_orfs
}

The number, 197, is called a circular prime because all rotations of the digits: 197, 971, and 719, are themselves prime.

There are thirteen such primes below 100: 2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, and 97.

How many circular primes are there below one million?

function countCirculars(n) {
  let count = 0;

  for (let i=3;i<=n; i+=2) {
    if (isPrime(i) && isCirclePrime(i))
      count++;
  }

  return count+1;
}

function isPrime(n) {
  for (let i=2; i<=Math.sqrt(n); i++) {
    if (n%i === 0)
      return false;
  }
  return true;
}

function isCirclePrime(n) {
  let strN = n.toString();
  for (let i = 1; i<strN.length; i++) {
    strN = shiftString(strN);
    if (!isPrime(parseInt(strN)))
      return false
  }
  return true;
}

function shiftString(str) {
  return str.substring(1) + str.substring(0,1);
}

Return the names of everyone to greet with "Hello".

SELECT name FROM greetings
WHERE greeting='Hello';

That's my first kumite... don't really know what all this is about...

using System;
using System.Linq;

public class Kata
{
      public static int DuplicateCount(string str)
      {
            var orderedLowercase = str.ToLower().OrderBy(c => c);
            var countDuplicates = 0;
            var countOccurrenciesCurrentCharacter = 1;
            char? previousElement = null;
            var firstElement = true;

            foreach(var currentElement in orderedLowercase)
            {
                if (firstElement)
                {
                    firstElement = false;
                }
                else
                {
                    if (currentElement == previousElement.Value)
                    {
                        countOccurrenciesCurrentCharacter ++;

                        if (countOccurrenciesCurrentCharacter == 2)
                        {
                            countDuplicates ++;
                        }
                    }
                    else
                    {
                        countOccurrenciesCurrentCharacter = 1;
                    }
                }
                previousElement = currentElement;
            }
            return countDuplicates;
      }

}