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
Testing
Frameworks

Currently, the hiding test that tests for hidden modules is only available in Haskell 7. Unfortunately, the original source is not compatible with Haskell 8 runner, so we have to write it from scratch.

Here is a small attempt to analyze the import statements from the source code.

module Example where

import Prelude hiding (Bool(..), head, (/))
import Data.Maybe
import qualified Data.Map as Map
import Data.Map (Map(..), fromList)
import Data.Set (Set)
import Data.Monoid (Dual(getDual))

A simple test on whether Data.Leibniz is available as a PureScript module on Codewars.

module LeibnizExample where

import Data.Leibniz

reflexivity :: forall a. a ~ a
reflexivity = id
vizao Failed Tests

UOLExercicio

Faça um arrays

function ronalado(){

Crie o retorno da função soma.

function soma() {

}
function soma(a, b) {
 
}

Just testing whether the State monad in PureScript is available on Codewars.

module StateTest (factorialWithState) where

import Prelude

import Control.Monad.State (State, evalState, get, put)
import Data.Tuple (Tuple(..))

factorialWithState :: Int -> Int
factorialWithState n = evalState executionLoop (Tuple n 1)
  where
    executionLoop :: State (Tuple Int Int) Int
    executionLoop = do
      Tuple counter result <- get
      if counter == 0
        then pure result
        else do
          put (Tuple (counter - 1) (result * counter))
          executionLoop
juliocanaresFailed Tests

Bob

Bob is a lackadaisical teenager. In conversation, his responses are very limited.

Bob answers 'Sure.' if you ask him a question.

He answers 'Whoa, chill out!' if you yell at him.

He answers 'Calm down, I know what I'm doing!' if you yell a question at him.

He says 'Fine. Be that way!' if you address him without actually saying anything.

He answers 'Whatever.' to anything else.

Notes:

  1. Message with ALL UPPERCASES is consider yelling .
function hey(message) {
  var isAllUppercase = message === message.toUpperCase();
  var isYelling = message.includes("!") || isAllUppercase;
  var isQuestioning = message.includes("?");

  if (message.length === 0) {
    return "Fine. Be that way!";
  } else if (isQuestioning && isYelling) {
    return "Calm down, I know what I'm doing!";
  } else if (isQuestioning) {
    return "Sure.";
  } else if (isYelling) {
    return "Whoa, chill out!";
  } else {
    return "Whatever.";
  }
}

Concatene as listas A, B e C em uma nova lista D.

Importante:

  • As listas A, B e C devem continuar intactas.
  • Primeiro os valores de A, depois B e por último C, respeitando a ordem
const main = () => {

  let a = [1, 2, 3];
  
  let b = [4, 5, 6];
  
  let c = [7, 8, 9];

  // converter para ES6
  var d = a.concat(b).concat(c);
  
  return d.join(',');
}

Spread operator funciona com push, shift, unshift, slice, splice, concat.

Exercício:

Substitua os valores de A por B sem criar uma nova referência para A.

const main = () => {

  const a = [1, 2, 3, 4];
  
  let b = [5, 6, 7, 8];
  
  // converta para ES6
  while (a.length) {
    a.pop();
  }
  
  while (b.length) {
    a.push(b.shift());
  }
  
  return a.join(',');
};

Com destructuring conseguimos ser precisos quanto aos valores que queremos acessar e com spread acumulamos o que sobrou. Usando esses dois recursos em conjunto conseguimos o efeito contrário, remover o desnecessário e guardar o restante.

Exercício:

  1. Converta rem para arrow function
  2. Use destructuring e spread operator para remover keywords do objeto principal
  3. Retorne o novo objeto e armazene na variável obj2
const main = () => {

  let obj = {
    title: 'UOL - O melhor conteúdo',
    url: 'https://www.uol',
    keywords: ['Notícias', 'Entretenimento']
  };
  
  
  // converta para ES6
  function rem(obj) {
    delete obj.keywords;
    return obj;
  }
  
  var obj2 = rem(obj);
  
  
  return obj.hasOwnProperty('keywords') && !obj2.hasOwnProperty('keywords');
};

Não há limite para a quantidade de parâmetros que você pode enviar para uma função JS. A assinatura é um meio mais fácil de acessar alguns desses parâmetros. Em alguns casos pode ser muito útil definir assumir um valor padrão quando o parâmetro é opcional. Uma forma de verificar se o parâmetro foi ou não definido é validar com undefined. Só que com ES6 existe uma forma mais simples e elegante de tornar parâmetros opcionais.

Exercício:

Reescreva o código em ES6.

// reescreva em ES6
function main(a, b, c) {
    if (typeof b == 'undefined')
        b = 2;
    
    if (typeof c == 'undefined')
        c = 3
    
    return a * b * c;
}