JavaScript:
function validate(password) {
  return /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])\w{6,}$/.test(password);
}
Python:
# regex that will validate a password 
# At least six characters long, contains a lowercase letter, an uppercase letter, a digit

regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9]{6,}$"
Python:
# create a regular expression capable of evaluating binary strings (strings with only 1s and 0s) 
# and determining whether the given string represents a number divisible by 3.
#
# By algorithm on https://math.stackexchange.com/questions/140283/why-does-this-fsm-accept-binary-numbers-divisible-by-three 

PATTERN = re.compile(r'^(1(01*0)*1|0)*$')
Python:
# returns an array of the top-3 most occurring words containing apostrophes (')
#
# this solution using Counter

import re
from collections import Counter

def top_3_words(text):
    text_lower_without_wrapping = re.sub(r'[\n\r]', '', text.lower())
    words = re.findall(r"'*[a-z][a-z']*", text_lower_without_wrapping)
    top_3 = Counter(words).most_common(3)

    return [t[0] for t in top_3]
# a function that, given a string of text (possibly with punctuation and line-breaks), 
# returns an array of the top-3 most occurring words, in descending order of the number of occurrences.
# A word is a string optionally containing one or more apostrophes (').

import re

def top_3_words(text):
    text_lower_without_wrapping = re.sub(r'[\n\r]', '', text.lower())
    
    # list of all words of the text
    lst = re.findall(r"[a-z']+", text_lower_without_wrapping)

    # compiling a dictionary number of words ignoring words from one character (')
    dct = {word: lst.count(word) for word in lst if len(word.replace("'",""))>0}
    
    sorted_items = sorted(list(dct.items()), key=lambda x: -x[1])
    sorted_lst = [word for (word, value) in sorted_items]
    
    # returns an array of the top-3 most occurring words
    return sorted_lst[0:3]
JavaScript:
function password(str) {
    return str
      .length>=8        &&
      /\d/.test(str)    &&
      /[a-z]/.test(str) &&
      /[A-Z]/.test(str)
}
function password(str) {
  if (str.length<8 || 
    !/[a-z]/.test(str) ||
    !/[A-Z]/.test(str) ||
    !/\d/.test(str)
  ) return false;
  return true;
}
Python:
import re
def password(string):
    if len(string)<8: return False
    if not re.findall(r'[a-z]', string) or not re.findall(r'[A-Z]', string) or  not re.findall(r'\d',    string):  return False
    return True
Python:
import math

def isPP(n):
    max_power = round(math.log(n, 2))+1
    for k in range(2, max_power):
        m = round(n**(1/k))
        if m**k == n:
            #print(f"I found pair {m}**{k} = {n}")
            return [m,k]

    return None

Python:
def alphanumeric(password):
    import re
    return bool( re.match(r'^[0-9a-zA-Z]+$', password) )
Python:
def count(string):
    counter = {}
    
    for s in string:
        counter[s] = counter.setdefault(s,0) + 1
    
    return counter
JavaScript:
function order(words){
  let res =[]
  words.split(' ').forEach( x =>  res[x.match(/\d/g)-1] = x );
  
  return res.join(" ")
}
Python:
def order(sentence):
    words = sentence.split()
    words_sorted = ["" for i in range(len(words))]
    for word in words:
        nom = int("".join([x  for x in word  if x.isdigit()]))
        words_sorted[nom-1] = word
    
    return " ".join(words_sorted)
Python:
# return masked string
def maskify(cc):
    
    return  ( "#"*len(cc) + cc[-4:] )[-len(cc):]
JavaScript:
function DNAStrand(dna){
  return dna.split('').reduce( (res,el) =>  res + ("ATCG"["TAGC".indexOf(el)] || el) , "")
}
Python:
def DNA_strand(dna):
    dic = {"A":"T", "T":"A", "C":"G", "G":"C"}
    
    return "".join( dic[x]  for x in dna )
    
JavaScript:
function alphabetPosition(text) {
  let dict = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    
  return text
    .toUpperCase()
    .split('')
    .filter( x => dict.includes(x) )
    .map( x => dict.indexOf(x)+1)
    .join(' ')
  
}
Python:
def alphabet_position(text):
    return " ".join([  str(ord(x)-96)   for x in text.lower()  if x.isalpha()])
Python:
def to_jaden_case(string):
    return " ".join([x.capitalize()  for x in string.lower().split()])
JavaScript:
function duplicateEncode(word){
  let res='';
  let str=word.toLowerCase();
  
  for( i in str ) {
    res += (str.split(str[i]).length-1 == 1 )  
      ?  '('  
      :  ')'
  }
  
  return res;
}
Python:
def duplicate_encode(word):
    lower_word = word.lower()
    res = ""
    for char in lower_word:
        if lower_word.count(char)==1:
            res += "("
        else:
            res += ")"
    return res
Python:
def is_isogram(word):
    if type(word) != type("abc"): return False

    word = [char  for char in word.lower()   if ord(char)>=ord("a") and ord(char)<=ord("y")  ]
    if len(word)==0: return False
    
    counter = dict.fromkeys(word, 0)
    for char in word:
        counter[char] += 1

    return max(counter.values()) == min(counter.values())
JavaScript:
function duplicateCount(text){
  let obj = {}, counter=0;
  
	for (char of text){
		char = char.toLowerCase();
		obj[char] = 1 + (obj[char]==undefined ? 0 : obj[char])
	}

	for (key in obj) {	
		if (obj[key]>1) counter++; 	
	}

	return counter;
}

Python:
def duplicate_count(text):
    text = text.lower()
    
    return len(list(filter(lambda x: text.count(x)>1, set(text))))


JavaScript:
function isIsogram(str){
  return str.length == (new Set(str.toLowerCase())).size
}
Python:
def is_isogram(string):
    return len(string) == len(set(string.lower()) )
JavaScript:
function inArray(arr1,arr2){
  return [... new Set(arr1.filter( a1 => arr2.some(a2 => a2.includes(a1))).sort()    )]
}
Python:
def in_array(array1, array2):
    result = []
    
    for elem in array1:
        for elem2 in array2:
            if elem in elem2:
                result.append(elem)
                break

    result = list(set(result))
    result.sort()
    return result
JavaScript:
function getMiddle(s){
  return s.length%2==0 ?  
    s.substr(s.length/2-1, 2) :
    s.substr((s.length-1)/2, 1)
}
Python:
def get_middle(s):
    l = len(s)
    if l == 0: return ""

    if l % 2 == 0:
        return s[l//2-1: l//2+1]
    else:
        return  s[l//2]
JavaScript:
function createPhoneNumber(numbers){
  return '(' + numbers.slice(0,3).join('') + ') ' 
             + numbers.slice(3,6).join('') + '-'
             + numbers.slice(6).join('')
}
Python:
def create_phone_number(n):
    return "({}{}{}) {}{}{}-{}{}{}{}".format(*n)
Python:
def accum(s):
    return "-".join([ (char*i).title()   for i,char in enumerate(s,1)])
def accum(s):
    arr = [char   for char in s]
    
    for i in range(len(arr)):
        arr[i] = arr[i].upper() +  arr[i].lower() * i
    
    return '-'.join(arr)
JavaScript:
function spinWords(str){
  return str.split(' ')
    .map( x => {
       if (x.length<5) return x;
       return x.split("").reverse().join('')
       } )
    .join(' ')  
}
Python:
def spin_words(sentence):
     return ' '.join([word[::-1] if len(word)>=5 else word       for word in sentence.split(' ')])
JavaScript:
function disemvowel(str) {
  return str.replace(/[euioa]/gi, '');
}
Python:
def disemvowel(str):
    return  ''.join([ char  for char in str    if char.lower() not in 'aoiue'])
JavaScript:
function highAndLow(numbers){
  let arr = numbers.split(" ").map( x => +x );
  return Math.max(...arr) + " " + Math.min(...arr);
}
Python:
def high_and_low(numbers):
    arr = list( map(int,  numbers.split(" "))  )
    return f"{max(arr)} {min(arr)}"
Python:
def sum_mix(arr):
    return sum(map(int, arr))
def sum_mix(arr):
    return sum( list( map( lambda x: int(x), arr  ) ))
JavaScript:
function getCount(str) {

  return ( str.match(/[aoieu]/gi)  || [] ).length;
}
function getCount(str) {
  var vowelsCount = 0;
  
  str.split('').forEach( elem => {if ("aeiou".includes(elem)) vowelsCount++   })
  
  return vowelsCount;
}
function getCount(str) {
  var vowelsCount = 0;
  
  for (let i=0; i<str.length; i++){
    if ("aeiou".includes(str[i])) vowelsCount++
  }
  
  return vowelsCount;
}
Python:
def get_count(sentence):
    return len( [ char   for char in sentence   if char in "aeiou"] )
Python:
def calculate_years(principal, interest, tax, desired):
    years = 0
    nowSum = principal
    while nowSum < desired:
        nowSum += nowSum * interest * (1-tax)
        years  += 1
    
    return years
Python:
def check(seq, elem):
    return elem in seq
Python:
def abbrev_name(name):
    return name[0].upper() + '.' + name.split(' ')[1][0].upper()
Python:
def repeat_str(repeat, str):
    return str * repeat
Python:
def remove_char(s):
    return s[1:-1]
Python:
def number_to_string(num):
    return str(num)
Python:
def xo(s):
    print(s)
    return s.lower().count('o') == s.lower().count('x')
Python:
def solution(string):
    return string[::-1]
JavaScript:
function sortArray(array) {
  let odds=array.filter(x=> x%2!=0).sort((a,b)=>a-b);
  return array.map(x=>  x%2==0 ? x : odds.shift() )
}
JavaScript:
function nbYear(p0, percent, aug, p) {
	let numberYears=0,
			pn=p0;
	while (pn<p) {
		pn=parseInt(pn*(1+percent/100)) + aug;
		numberYears++
	}
	return numberYears;
}
JavaScript:
function high(x){
  let words, scores,maxScore,indexMax;
  words=x.split(' ');
  scores=words.slice().map(scoring);
  maxScore=Math.max.apply(null, scores);
  indexMax=scores.indexOf(maxScore);
  
  return words[indexMax]  
}

function scoring(word){
  return word
			.toLowerCase()
			.split('')
			.map(char=>char.charCodeAt()-"a".charCodeAt()+1)
			.reduce((s,a)=>s+a);
}
JavaScript:
function solution(str){
   return (str + '_'.repeat(str.length % 2)  ).match(/../gi)  || []
}
JavaScript:
function digPow(n, p){
  let res = n.toString().split('').map(x=>x**p++).reduce((s,a)=>s+a)  /  n;
  return res%1===0 ?  res : -1
}
JavaScript:
function addBinary(a,b) {
  return (a+b).toString(2)
}
JavaScript:
function reverseWords(str) {
  return str
    .split(" ")
    .map( word => word.split('').reverse().join('') )
    .join(" ")
}
JavaScript:
function invert(array) {
   return array.slice().map(x=>-x);
}
JavaScript:
function towerBuilder(nFloors) {
  let arr=[];
  for (let i=1; i<=nFloors; i++){
    arr.push(
      " ".repeat(nFloors-i) +
      "*".repeat(i) +
      "*".repeat(i-1) +
      " ".repeat(nFloors-i)     )
  }
  
  return arr;
}
JavaScript:
function findNextSquare(sq) {
  if (Math.sqrt(sq) % 1 >0)
    return -1
  else {
    return (Math.sqrt(sq)+1)**2
  }
}
JavaScript:
function SeriesSum(n){
  for (sum=0; n>0; n--) {sum+= 1/(n*3-2)  };
  return sum.toFixed(2);
}
JavaScript:
function countSmileys(arr) {
  return arr.filter( x => /^[:;][-~]?[)D]$/.test(x)).length;
}
JavaScript:
function findShort(s){
  return Math.min( ...  s.split(" ").map(x=>x.length)  )
}
JavaScript:
function countPositivesSumNegatives(input) {
  console.log(JSON.stringify(input));
  if (input===null || input.length==0) return [];

  let countPositiveElems=0, sumNegative=0;
  
  for (elem of input){
    if (elem>0) countPositiveElems++;
    if (elem<0) sumNegative+=elem;
  }
  return [countPositiveElems, sumNegative]
}
JavaScript:
var number = function(busStops){
  return busStops.reduce( (sum,el) => sum+el[0]-el[1] , 0)
}
JavaScript:
function sortByLanguage(list) {
  return list.sort( (a,b) => {
    if (a.language>b.language) return  1;
    if (a.language<b.language) return -1;
    if (a.firstName>b.firstName) return  1;
    if (a.firstName<b.firstName) return -1;
    
    return 0;    
  })
}
JavaScript:
var isSquare = function(n){
  return Math.sqrt( n ) % 1 === 0
}
JavaScript:
const stringToNumber = function(str){
  return +str;
}
JavaScript:
function litres(time) {
  return Math.floor(time*0.5)
}
JavaScript:
function fakeBin(x){
  return x.replace(/./g , ch =>  ch<5 ? '0' : '1') 
}
JavaScript:
function squareSum(numbers){
  return numbers.reduce( (sum,el) => sum+el*el , 0 )
}
JavaScript:
function findOddNames(list) {
  return list.filter( elem => elem.firstName.split("").map(e=>e.charCodeAt()).reduce( (sum,el) => sum+el, 0) % 2 )
}
JavaScript:
function orderFood(list) {
  const foods = {};
  
  for (let {meal} of list)
    foods[meal] = (foods[meal] || 0) + 1
  
  return foods;
}
JavaScript:
function isLanguageDiverse(list) {
  let {JavaScript, Ruby, Python} = list.reduce( (res,{language}) => {
      if (!res[language]) res[language]=0;
      res[language]++
      return res;
    }    ,{})
  
  if (JavaScript/Ruby>2   || 
      JavaScript/Python>2 ||
      Ruby/JavaScript>2   ||
      Python/JavaScript>2 ||
      Ruby/Python>2       ||
      Python/Ruby>2
     ) return false;
  
  return true;
}
JavaScript:
function findAdmin(list, lang) {
  return list.filter( x => x.language==lang && x.githubAdmin=='yes' ) 
}
JavaScript:
function getAverageAge(list) {
  return  Math.round(list.reduce( (sum,elem)=> sum+elem.age ,0) / list.length)
}
JavaScript:
function addUsername(list) {
  list.every( x => x.username = ( x.firstName.toLowerCase() + 
                           x.lastName.toLowerCase().charAt() + 
                           ((new Date()).getFullYear() - x.age)
                         )
          )
  
  return list;
}
JavaScript:
function isAgeDiverse(list) {
  let signedUp = new Set();
  
  list.forEach( x => {
    switch (parseInt(x.age/10)){
        case 1: signedUp.add("teens");    break;
        case 2: signedUp.add("twenties"); break;
        case 3: signedUp.add("thirties"); break;
        case 4: signedUp.add("forties");  break;
        case 5: signedUp.add("fifties");  break;
        case 6: signedUp.add("sixties");  break;
        case 7: signedUp.add("seventies");break;
        case 8: signedUp.add("erghties"); break;
        case 9: signedUp.add("nineties"); break;
        default:
          if (x.age>=100) signedUp.add("centenarian");
    }
  } )
  
  console.log(signedUp.size, signedUp);
  return signedUp.size==10;
}
JavaScript:
function allContinents(list) {
  set = new Set( ['Africa', 'Americas', 'Asia', 'Europe', 'Oceania'] );
  list.forEach( x => set.delete(x.continent))
  
  return set.size==0
}
JavaScript:
function findSenior(list) {
  let maxAge=list.reduce( (max, el) => (el.age>max ? el.age : max),  0);
	
	return list.filter(x => x.age===maxAge)
}
JavaScript:
function isSameLanguage(list) {
  if (list.length<2) return true;
	return list.every(x => x.language===list[0].language)
}
JavaScript:
function countLanguages(list) {
  // reduce solution
  return list.reduce( (count, x) => {
    
    if (x.language in count) 
      count[x.language]++;
    else
      count[x.language]=1;
    
    return count;
  },  {})
}
function countLanguages(list) {
  let obj={};
  list.forEach( x => {
    obj[x.language] = (obj[x.language]==undefined ? 1 : obj[x.language]+1 )
  })
  
  return obj;
}
JavaScript:
function getFirstPython(list) {
  let developer = list.find( developer => developer.language==="Python");
  if (!developer) return "There will be no Python developers";
  
  return developer.firstName + ", " + developer.country;
}
JavaScript:
function isRubyComing(list) {
  return list.some( x => x.language=="Ruby" )
}
JavaScript:
function missedClasses(year, daysOfTheWeek, holidays) {
  let count=0 
  let holiday,monthHoliday,dayHoliday,weekDay,date;
  
  for (holiday of holidays){
    [monthHoliday,dayHoliday]=holiday.split('-').map(Number);
    
		date = new Date(year + (monthHoliday<6), monthHoliday-1, dayHoliday)
		weekDay=date.getDay() || 7;
    
    count+=  +daysOfTheWeek.includes(weekDay);
  }
  
  return count;
}
JavaScript:
class Animal {
  constructor(name, type){
    this.name=name;
    this.type=type;
  }
  toString(){
    return `${this.name} is a ${this.type}`
  }
}
JavaScript:
String.prototype.myNewMethod = function(){
  return this.toUpperCase();
}
JavaScript:
class Animal { 
  constructor(name) {
    this.name = name;
  }
  
  speak() {
    return this.name + ' makes a noise, ';
  }
}

class Cat extends Animal {
  speak() {
    return super.speak() + this.name + ' goes meow.'
  }
}
JavaScript:
class List {
  constructor(type) {
    this.type = type;
    this.items = [];
  }
  
	get count(){ return this.items.length};


  add(item){
    if(typeof item != this.type)
        return `This item is not of type: ${this.type}`;      
    
    this.items.push(item);
    return this;
  }
}
JavaScript:
function shiritori(words) {
  let arr=[]
  for( let i=0; i<words.length; i++){
		let word = words[i];
    if (word.length==0) return arr;
    if (arr.length!==0 && 
        arr[arr.length-1].slice(-1) !== word[0]
       ) return arr;
      
    arr.push(word)
  }
  
  return arr;
}
JavaScript:
function makeClass(...keys){
  return class{
    constructor(...values){
      keys.forEach( (key,idx) => this[key]=values[idx] )
    }
  }
}
JavaScript:
class Song {
	constructor(title, artist){
		this.title=title;
		this.artist=artist;
		this.setCounter= new Set();
		this.lastCount=0;
	}
	howMany(arr){
		let change;
		arr.forEach( x => this.setCounter.add( String(x).toLowerCase() ) )
		change=this.setCounter.size - this.lastCount;
		this.lastCount=this.setCounter.size;

		return change;
	}
}
JavaScript:
function partlist(arr) {
  let newArr=[], i;
  for(i=1; i<arr.length; i++){
    newArr.push( [
                  arr.slice(0,i).join(' '),
                  arr.slice(i).join(' ')
                 ] )
  }
    
  return newArr;
}
JavaScript:
function add(n) {
  return function(m){
    return n+m;
  }
}
JavaScript:
function multiplyAll( arr ){
    return function( n ){
        return arr.slice().map( x => x*n )
    }
}
7 kyu
esreveR
JavaScript:
reverse = function(array) {
  // solution without array.reverse()
  
  for (var res=[], i=array.length-1; i>=0; i--)     res.push( array[i] )
  
  return res;
}
JavaScript:
function formatMoney(amount){
  return `$` + amount.toFixed(2)
}
JavaScript:
function find_average(array) {
  
  return array.reduce( (sum,x) => sum+x , 0)  / (array.length ||1) ;
}
JavaScript:
class Cat extends Animal {
  speak(){ return `${this.name} meows.`}
}
JavaScript:
function filter_list(l) {
  return l.filter( x =>  (typeof x==`number` && x>=0) )
}
JavaScript:
class God{
  static create(){
    return [new Man(`Adam`), new Woman(`Eva`)]
  }
}

class Human{
  constructor(name){
    this.name=name || `Anonymous`
  }
}
class Man extends Human{}
class Woman extends Human{}

JavaScript:
function hoopCount (n) {
   return n<10 ?  "Keep at it until you get it"   : "Great, now move on to tricks"
}
JavaScript:
class Person {
  constructor(name, age) {
    this.name=name;
    this.age=age;  
  }
  get info(){return `${this.name}s age is ${this.age}`}
  
}
JavaScript:
class File{
	constructor(fullName, content){
		this._fullName=fullName;
		this._content=content;
		[this._filename, this._extension] = fullName.split(/\.(?!.*\.)/g)
		this.numberOfLine=0;
		this.numberOfChar=0;
	}

	set fullName(a){}
	get fullName() {return this._fullName}

	set filename(a){}
	get filename() {return this._filename}

	set extension(a){}
	get extension() {return this._extension}

	getContents() {
    return this._content
  }

	write(str){	
    if (this._content!='') {
      this._content+=`\n`+str;
    } else {
      this._content=str;
    }
  }

	gets(){ 
		return this._content.split('\n')[this.numberOfLine++]
	}

	getc(){
		return this._content[this.numberOfChar++]
	}
}
JavaScript:
class Labrador extends Dog {
  constructor(name, age, gender, master) {
    super(name, age, gender, "Labrador", "Large", master, true)
  }
}
JavaScript:
class Cube{
  constructor(length){
    this.length=length;
  }
  get volume(){
    return this.length**3;
  }
  get surfaceArea(){
    return this.length**2  * 6;
  }
  
  set volume(volume){
    this.length= volume**(1/3);
  }
  set surfaceArea(s){
    this.length = (s / 6) ** 0.5;
  }
}
JavaScript:
class Cuboid {
  constructor(length, width, height){
    this.length=length;
    this.width=width;
    this.height=height;
  }
  get surfaceArea(){
    return 2*(this.length*this.width +
              this.length*this.height +
              this.width*this.height);
  }
  get volume(){
    return this.length*this.width*this.height;
  }
}
class Cube extends Cuboid {
  constructor(length){
    super(length,length,length);
  }
}
JavaScript:
// Get Coding :)

class Shark extends Animal {
  constructor(name, age, status) {
    super(name, age, 0, `shark`, status);
  }
}

class Cat extends Animal {
  constructor(name, age, status){
    super(name, age, 4, `cat`, status);
  }
  introduce(){
    return super.introduce() + "  Meow meow!"
  }
}

class Dog extends Animal {
  constructor(name, age, status, master){
    super(name, age, 4, `dog`, status);
    this.master=master;
  }
  greetMaster(){
    return `Hello ${this.master}`;
  }
}
JavaScript:
class Person {
  constructor (firstName='John', lastName='Doe', age=0, gender='Male'){
    this.firstName=firstName;
		this.lastName=lastName;
		this.age=age;
		this.gender=gender;
		this.sayFullName = () => this.firstName + ' ' + this.lastName;
  }
	
	static greetExtraTerrestrials(raceName){
		return `Welcome to Planet Earth ${raceName}`
	}
}

JavaScript:
function NameMe(first, last) {
    this.firstName = first;
    this.lastName = last;
    this.name = first + ' ' + last;
}
JavaScript:
Math.roundTo = function (number, precision) {
  return Math.round(number * 10**precision) / 10**precision;
}
JavaScript:
var Ghost = function() {
  let colors = ["white","yellow","purple","red"];
  this.color = colors[ ~~(colors.length * Math.random())]
};
JavaScript:
function Ship(draft,crew) {
  this.draft = draft;
  this.crew = crew;
  this.isWorthIt  = () => (draft - crew*1.5)>20
}

//YOUR CODE HERE...
JavaScript:
function findMissingLetter(arr){
  let nextChar;

  for (let i=0; i<arr.length; i++){
	  nextChar = String.fromCharCode(arr[i].charCodeAt()+1);
	  if (nextChar!==arr[i+1]) return nextChar;
  }
}
JavaScript:
function findUniq(arr) {
  let equalNum, i=0;
  if (arr[0]==arr[1]) equalNum=arr[0];
  if (arr[0]==arr[2]) equalNum=arr[0];
  if (arr[1]==arr[2]) equalNum=arr[1];
  
  while (arr[i]==equalNum) {i++}
  
  return arr[i]
}
JavaScript:
function isPangram(str){
  return 26 === [... new Set( str.toLowerCase().replace(/[^a-z]/g,'').split(''))].length;
  
}
function isPangram(string){
  let set = new Set();
  
  string
    .replace(/[^A-Z]/gi,'')
    .toUpperCase()
    .split('')
    .forEach( x => set.add(x))
  
  return set.size==26
  
}
JavaScript:
function narcissistic(value) {
  let rate, value2;
  rate = value.toString().length;
  value2 = value
    .toString()
    .split('')
    .map( x => (+x)**rate )
    .reduce( (total,x) => total+x )
  ;
  
  return value===value2;
}
JavaScript:
function findEvenIndex(arr){
  let leftSum, rightSum;
  for (let i=0;  i<arr.length; i++){
    leftSum  = arr.slice(0,i).reduce( (sum,x) => sum+x  , 0 )
    rightSum = arr.slice(i+1).reduce( (sum,x) => sum+x  , 0 )
    if (leftSum==rightSum) return i;
  }
  
  return -1; //no position
}
JavaScript:
function toCamelCase(str){
  return str.split(/-|_/).map( (x,i) => i==0 ? x : x[0].toUpperCase() + x.slice(1) ).join('') 
}
JavaScript:
var uniqueInOrder=function(iterable){
  let arr = [], last="";
  
  for (el of iterable) {
    if (el!==last)  arr.push(last=el) 
  }
  
  return arr;
}
JavaScript:
var decodeMorse = function(morseCode){
    // ToDo: Accept dots, dashes and spaces, return human-readable message
    return morseCode.replace('.', MORSE_CODE['.']).replace('-', MORSE_CODE['-']).replace(' ', '');
}



var decodeBits = function(bits){
	let minLength, normalisedBits, morseCode
	
	minLength = bits
	.replace(/^0+/, '')
	.replace(/0+$/, '')
	.replace(/01/g, '0|1')  
	.replace(/10/g, '1|0')
	.split('|')
	.map( x => x.length )
	.sort( (a,b)=> a-b )
	[0]

	normalisedBits = bits .replace(new RegExp('0{' + minLength + '}','g'),  '0')
												.replace(new RegExp('1{' + minLength + '}','g'),  '1');
	
  morseCode = normalisedBits.replace(/111/g, '-').replace(/000/g, ' ').replace(/1/g, '.').replace(/0/g, '')
  
  return morseCode;
}	

var decodeMorse = function(morseCode){
  function decodeMorseWord(morseWord){
    return morseWord.split(' ').map( decodeMorseLetter ).join('');
  }
  function decodeMorseLetter(morseLetter){
    return MORSE_CODE[morseLetter] || ' ';
  }
  
  
	return morseCode.trim().split('   ').map( decodeMorseWord ).join(' ')
}
JavaScript:
decodeMorse = function(morseCode){
  return morseCode.trim().replace(/   /g, " _ ").split(" ").map( x => (MORSE_CODE[x] || ' ') ).join('')
}
JavaScript:
function tribonacci(signature,n){
	if (n<4) return signature.slice(0,n)
	
	let i, arr=signature.slice()
	for (i=3; i<n; i++)  {
    arr[i] = arr[i-1] + arr[i-2] + arr[i-3];
	}

	return arr;
}
JavaScript:
function persistence(num) {
	let i=0;
	while (num>=10){
		num = num.toString().split('').reduce( (total, x) => x*total)
		i++;
	}
	return i;
}
JavaScript:
function isValidWalk(walk) {
  if (walk.length !== 10) return false;
  if (walk.filter(x=> x=='n').length  !== walk.filter(x=> x=='s').length) return false;
  if (walk.filter(x=> x=='e').length  !== walk.filter(x=> x=='w').length) return false;
  
  return true;
}
JavaScript:
function findOutlier(integers){
  let odds = integers.filter( x => x%2 );
  let evens = integers.filter( x => !(x%2) );
  
  if (odds.length - 1 == 0) return odds[0];
  return evens[0];
}
JavaScript:
var runLengthEncoding = function(str){
  let i, n
  let char=''
  let res = []
  
  for (i=0; i<str.length; i++){
    if (str[i]==char) {
      // the symbol was repeated. Let's increment the counter.
      n++;
    } else {
      // new symbol. If it is not first - push it
      if (i>0) {res.push([n,char])}
      n=1;
      char = str[i]
    }
    
    if (i==str.length-1) res.push([n,char])
  }
  
  console.log(str, "->", JSON.stringify(res) )
  
  return res
}
JavaScript:
var FilterString = function(value) {
  return +value.replace(/[^0-9]/g,'')
}
JavaScript:
function nameShuffler(str){
  return str.split(' ').reverse().join(' ')
}
JavaScript:
var countBits = function(n) {
  return n.toString(2).replace(/0/g,'').length
};
JavaScript:
function arrayDiff(a, b) {
  return a.filter( x => !b.includes(x))
}
const arrayDiff = (a, b) => a.filter( x => !b.includes(x))
   
function arrayDiff(a, b) {
  return a.reduce(  (acc,x) => (b.indexOf(x)>-1) ? acc : [...acc,x]  
           , [])
}
JavaScript:
function digital_root(n) {
  while (n.toString().length > 1){
    n = n.toString()
        .split('')
        .map(Number)
        .reduce( (total, value) => total+value  ,
                0)
  }
  return n
}
JavaScript:
// Solution using SET
function findOdd(A) {
	let stack = new Set();

	A.forEach( elem => stack.has(elem) ? stack.delete(elem) : stack.add(elem)  	)

  return [...stack.keys()][0]
  
}
function findOdd(A) {
	return A.find( (elem,index,arr) => A.filter( x => x==elem ).length % 2 == 1  )
}
// solution using object
function findOdd(A) { 
  let obj = {};

	for (el of A){
		obj[el] = obj[el]  ?  obj[el]+1  : 	1
	}
  
for (prop in obj){
	if (obj[prop]%2==1) return Number(prop)
}

  return 0
}
function findOdd(A) {
  let countOf = new Map(), n;

	for (elem of A) {
    n = countOf.has(elem) ? countOf.get(elem) : 0 ;
    countOf.set(elem,  n + 1	);
	}  
  return 	[...countOf].filter( x =>  (x[1]%2)  )[0][0]
}
function findOdd(A) {
  let counter = {};
  for (el of A) {
    (el in counter) ? counter[el]++   : counter[el]=1;
  }
  
  for (key in counter){
    if (counter[key] % 2 === 1) return Number(key)
  }
  
  return;
}
function findOdd(A) {
  let m = new Map();
  for (let e of A ) {
    if (!m.has(e)) m.set(e,0);
    m.set(e, 1 + m.get(e));
  }

  for ( elem of m ) {
    if (elem[1]%2 === 1) return elem[0];
  }
  return 0;
}
JavaScript:
function validBraces(braces){
  let arr=[], elem, last;
  for (elem of braces){
    if ( "({[".includes(elem)  ) arr.push(elem);
    if ( ")}]".includes(elem)  ) {
			last = arr.pop();
      if ( ! ['()','{}','[]'].includes(last+elem)) return false;
    }
  }
  return arr.length==0 ? true : false;
}
JavaScript:
function isDivisible(n, ...otherParams){
  return otherParams.every( x => (n%x===0))
}
function isDivisible(n, ...devs){
  let res = true;
  devs.forEach( x => {
    if (n%x!=0) res = false
  })
  
  return res
}
  
SQL:
-- you will be given a table 'kata' with columns 'n', 'x', and 'y'. 
-- Return the 'id' and your result in a column named 'res'.
select 
  id, 
  CASE WHEN n%x=0 AND n%y=0
      THEN true
      ELSE false
  END as res
from kata
JavaScript:
function isDivisible(n, x, y) {
  return (n%x==0 && n%y==0)
}
JavaScript:
function solution(number){
  let res = 0, i;
  for (i=1; i<number; i++){
    if (i%3==0 || i%5==0) res+=i
  }
  return res
}
SQL:
SELECT capital FROM countries
WHERE continent IN ('Africa','Afrika')
AND country LIKE 'E%'
ORDER BY capital
LIMIT 3
SQL:
SELECT * FROM books
ORDER BY copies_sold DESC
LIMIT 5;
SQL:
SELECT * FROM students
WHERE tuition_received = False;
SQL:
INSERT INTO participants 
       (name, age, attending) 
VALUES ('Hero', 45, True);

SELECT * FROM participants;

INSERT INTO participants (name, age, attending) VALUES ('Sam', 37, true);

SELECT * FROM participants;

SQL:
SELECT * FROM travelers
WHERE country <>'Canada' and
      country <> 'USA' and
      country <> 'Mexico';
SQL:
select * from users
where age>=18;
SQL:
CREATE TABLE words( "Greeting" text);
INSERT INTO words VALUES ('hello world!');
SELECT * FROM words;
SQL:
select age, count(age) as people_count from people GROUP BY age;
SQL:
select DISTINCT age FROM people;
SQL:
SELECT FLOOR(number1) number1  , CEIL(number2) number2 
FROM decimals;
SQL:
SELECT * FROM people WHERE age>50 ORDER BY age DESC
SQL:
SELECT id, base % factor=0 as res
FROM kata
SQL:
SELECT sum(age) AS age_sum FROM people;
SQL:
select (h*3600 + m*60 + s)*1000 as res from past
SQL:
SELECT
  CONCAT('Hello, ', name, ' how are you doing today?') AS greeting
FROM person 
SQL:
-- # write your SQL statement here: you are given a table 'nospace' with column 'x', return a table with column 'x' and your result in a column named 'res'.
SELECT x, 
      REPLACE(x, ' ', '') as res 
FROM nospace;
SQL:
SELECT sqrt(number1) as root, log10(number2) as log  FROM decimals;
SQL:
select * from students where isActive;
JavaScript:
function SubtractSum(n){
  let names = preloadNames();
  let sum;
  
  do {
    sum = String(n).split('').map(x=>+x).reduce((sum,x,i,arr)=> sum+x,   0);
    n-=sum;
  }  while (n>100)
  
  return names[n]
}


function preloadNames(){
  let s = `0-0
1-kiwi
2-pear
3-kiwi
4-banana
5-melon
6-banana
7-melon
8-pineapple
9-apple
10-pineapple
11-cucumber
12-pineapple
13-cucumber
14-orange
15-grape
16-orange
17-grape
18-apple
19-grape
20-cherry
21-pear
22-cherry
23-pear
24-kiwi
25-banana
26-kiwi
27-apple
28-melon
29-banana
30-melon
31-pineapple
32-melon
33-pineapple
34-cucumber
35-orange
36-apple
37-orange
38-grape
39-orange
40-grape
41-cherry
42-pear
43-cherry
44-pear
45-apple
46-pear
47-kiwi
48-banana
49-kiwi
50-banana
51-melon
52-pineapple
53-melon
54-apple
55-cucumber
56-pineapple
57-cucumber
58-orange
59-cucumber
60-orange
61-grape
62-cherry
63-apple
64-cherry
65-pear
66-cherry
67-pear
68-kiwi
69-pear
70-kiwi
71-banana
72-apple
73-banana
74-melon
75-pineapple
76-melon
77-pineapple
78-cucumber
79-pineapple
80-cucumber
81-apple
82-grape
83-orange
84-grape
85-cherry
86-grape
87-cherry
88-pear
89-cherry
90-apple
91-kiwi
92-banana
93-kiwi
94-banana
95-melon
96-banana
97-melon
98-pineapple
99-apple
100-pineapple`
  
  return s.split(`\n`).map( x => x.split('-')[1] )
}
SQL:
SELECT MIN(age) as age_min, MAX(age) as age_max from people;
JavaScript:
function opposite(number) {
  return -number;
}
JavaScript:
function multiply(a, b){
  return a * b
}
SQL:
SELECT price * amount AS total FROM items
JavaScript:
function fridayTheThirteenths(start, end) {
  end = end || start;
  let res = "", year, month;
  let date = new Date(start, 0, 13);

  for (year = start; year <= end; year++) {
    date.setFullYear(year);
    for (month = 0; month < 12; month++) {
      date.setMonth(month);
      if (date.getDay() == 5) {
        res += 
          " " +
          date.toLocaleString("en-US", {
            month: "numeric",
            year: "numeric",
            day: "numeric",
          });
      }
    }
  }
  return res.trim();

}
JavaScript:
function getDay(day, isLeap){
  let year = isLeap ? 2020 : 2021;
  let months = "January,February,March,April,May,June,July,August,September,October,November,December".split(",");
  
  let date = new Date(year, 0, day);
  
  return months[date.getMonth()] + ", " + date.getDate()
  
}
JavaScript:
function whatCentury(year){
  
  let century = Math.ceil( year/100 );
  if (century==11 || century==12 || century==13) return century+"th";
  if (century%10 == 1) return century+"st";
  if (century%10 == 2) return century+"nd";
  if (century%10 == 3) return century+"rd";
  
  return century+"th";
  
}
JavaScript:
function humanReadable (seconds) {
  let s = seconds % 60;
  let m = (seconds - s) / 60 % 60;
  let h = (seconds - s - m*60) / 3600;

  return ("00"+h).slice(-2) + ":" +
         ("00"+m).slice(-2) + ":" +
         ("00"+s).slice(-2);
}
JavaScript:
var nextBirthdayOfTheWeek = function (birthday) {
  "use strict"
  let date = new Date(birthday)
  let birthdayYear = birthday.getFullYear();
  let dayOfBirthday = birthday.getDay();
  let i = 1;
  
  while (true){
    date.setFullYear( birthdayYear + i );
    if (date.getDay()===dayOfBirthday) return i;
    i++;
  }
}
JavaScript:
function daysUntilChristmas(days) {
  let cristmasDate = new Date(days);
  cristmasDate.setMonth(11);
  cristmasDate.setDate(25);
  if (days.getMonth()==11 && days.getDate()>25) cristmasDate.setFullYear( 1 + days.getFullYear() )
  
  return Math.round( (cristmasDate - days) / (24*3600*1000) )
}
JavaScript:
function chineseZodiac(year){
  "use strict"
  let animals = ['Rat', 'Ox', 'Tiger', 'Rabbit', 'Dragon', 'Snake', 'Horse', 'Goat', 'Monkey', 'Rooster', 'Dog', 'Pig'];
  let elements = ['Wood', 'Fire', 'Earth', 'Metal', 'Water'];
  
  let n = (year - 1924) % 60;
  
  return elements[ Math.floor(n/2) % 5] + " " + animals[ n % 12 ]
}
JavaScript:
function prettyTimeFormat(seconds) {
  "use strict"
  
  let t = Math.floor(seconds);
  let s = t % 60;
  t = (t-s) / 60;
  let m = t % 60;
  let h = (t-m) / 60;
  
  if (h==0 && m==0)   return "" + s;
  if (h==0)           return m + ":" +  ("0"+s).slice(-2);
  
  return h  +":"+   ('00'+m).slice(-2)  +':'+  ('00'+s).slice(-2)
  
  
}
JavaScript:
function convert(time){
  "use strict"
  
  let h = ("00" + time.getHours())        .slice(-2) 
  let m = ("00" + time.getMinutes())      .slice(-2) 
  let s = ("00" + time.getSeconds())      .slice(-2) 
  let ms= ("00" + time.getMilliseconds()) .slice(-3) 
  
  return h + `:` + m + `:` + s + `,` + ms
}
JavaScript:
function getDayOfTheWeek(date) {
  "use strict"
  let days = "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(",")
  
  return days[ (new Date(date)).getDay()  ]
}
JavaScript:
function checkExpiryValid (date) {
  "use strict"
  let [month, year] = date.replace(" ","").replace("-","/").split("/").map(Number);
  year = year + (year<100 ? 2000 : 0);
  
  let now = new Date();
  let monthNow = now.getMonth()+1;
  let yearNow = now.getFullYear();
  
  return yearNow<year || (yearNow==year && monthNow<=month)
  
}
JavaScript:
function isJubilee(year) {
  return (new Date(year,6,25)).getDay() === 0
}
JavaScript:
function elapsedSeconds(startDate, endDate){

  let t = endDate - startDate;
  return (t - t%1000) / 1000
}
JavaScript:
function timeForMilkAndCookies(date){
  return date.getMonth()===11 && date.getDate()===24 
}
JavaScript:
function dayAndTime(n) {
  let dayNames = "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(",");
  
  let d = new Date(2022,04,15,0,n);
  let dayName = dayNames[ d.getDay() ];
  let time = d.toTimeString().slice(0,5);
  
  return dayName + " " + time;
}
JavaScript:
function fizzBuzzCuckooClock(time) {
  let [h, m] = time.split(":").map(Number);
  
  if ( h>12 ) h=h-12;
  if ( h==0 ) h=12;
  if ( m==0    ) return "Cuckoo ".repeat(h).slice(0,-1);
  if ( m==30   ) return "Cuckoo";
  if ( m%15==0 ) return "Fizz Buzz";
  if ( m%5 ==0 ) return "Buzz";
  if ( m%3 ==0 ) return "Fizz";
  
  return "tick";
}

JavaScript:
function checkCoupon(enteredCode, correctCode, currentDate, expirationDate){
  return Boolean(
         (enteredCode === correctCode) & 
         ( new Date(currentDate) <= new Date(expirationDate)  ) 
                )
}
JavaScript:
function getVillainName(birthday){
  const m = ["Evil","Vile","Cruel","Trashy","Despicable","Embarrassing","Disreputable","Atrocious","Twirling","Orange","Terrifying","Awkward"];
  const d = ["Mustache","Pickle","Hood Ornament","Raisin","Recycling Bin","Potato","Tomato","House Cat","Teaspoon","Laundry Basket"];
  return "The " + m[ birthday.getMonth()] + " " + d[ birthday.getDate() % 10 ]
}
JavaScript:
function isLeapYear(year) {
  if ( year % 400 == 0) return true;
  if ( year % 100 == 0) return false;
  if ( year % 4   == 0) return true;
  
  return false;
}
JavaScript:
function minutesToMidnight(d){

  let d2 = new Date(new Date(d).setDate( d.getDate() +1 )).setHours(0,0,0,0);
  
  let last = Math.round( (d2-d) / (1000*60) )
  
  return last + " minute" + (last===1  ? "" : "s")
  
}
JavaScript:
function countDays(d){
  let d_0 = new Date(d).setHours(0,0,0,0)
  let now_0 = new Date().setHours(0,0,0,0)
  
  let daysLeft = Math.round( (d - Date.now()) / (24*3600*1000) )

  if (daysLeft < 0 ) return "The day is in the past!";
  if (daysLeft == 0) return "Today is the day!";
  
  return daysLeft + " days";
}
JavaScript:
function determineTime (durations) {
  let sumTimeSec = 0;
  
  durations.forEach( x => {
    let t = x.split(":").map(Number);
    sumTimeSec += t[0]*3600 + t[1]*60 + t[2]
  })
  
  return  sumTimeSec <= (24*3600)
}
JavaScript:
function unluckyDays(year){
  let countFridays = 0;
  
  
  for (let m=0; m<12; m++){
    if (  (new Date(year,m,13)).getDay() === 5) countFridays++
  }
  
  return countFridays
}
JavaScript:
function starSign(date) {
  let year = date.getFullYear();
  let [Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec] = 
      [0,1,2,3,4,5,6,7,8,9,10,11];

  console.log(year, date)
  
  // отсечка перида - меньше начала следующего дня
  if (date < new Date(year, Jan, 20+1)) return "Capricorn";
  if (date < new Date(year, Feb, 19+1)) return "Aquarius";
  if (date < new Date(year, Mar, 20+1)) return "Pisces"; 
  if (date < new Date(year, Apr, 20+1)) return "Aries";
  if (date < new Date(year, May, 21+1)) return "Taurus";
  if (date < new Date(year, Jun, 21+1)) return "Gemini";
  if (date < new Date(year, Jul, 22+1)) return "Cancer";
  if (date < new Date(year, Aug, 23+1)) return "Leo";
  if (date < new Date(year, Sep, 23+1)) return "Virgo";
  if (date < new Date(year, Oct, 23+1)) return "Libra";
  if (date < new Date(year, Nov, 22+1)) return "Scorpio";
  if (date < new Date(year, Dec, 21+1)) return "Sagittarius";
  
  return "Capricorn";
}
JavaScript:
function ageInDays(year, month, day){
  //Your Magnificent Code here
  // Note that month == 1 means January (in contrast to JavaScripts Date where the month is zero based)
  
  let d1 = new Date( year, month-1, day);
  let d2 = new Date( (new Date()).setHours(0,0,0,0))
  let dayAge = (d2-d1) / 24 / 3600000;
  return `You are ${dayAge} days old`;

}
JavaScript:
function shortenToDate(longDate) {
  return longDate.slice(0, longDate.indexOf(","))
}
JavaScript:
function yearDays(year) {
  if (year == 0) return '0 has 366 days';
  let days = (new Date(year+1,0) - new Date(year,0)) / (24*3600*1000);
  return `${year} has ${days} days`
}
JavaScript:
function century(year) {
  return Math.ceil(year/100);
}
JavaScript:
function isToday(date) {
  let now = new Date();
  if (now.getFullYear() === date.getFullYear()  &&
      now.getMonth()    === date.getMonth() &&
      now.getDate()     === date.getDate()
     ) return true;
  return false;
}
JavaScript:
let RomanNumerals = {
  spravToCoding: {
    M: 1000,
    CM: 900,
    D: 500,
    CD: 400,
    C: 100,
    XC: 90,
    L: 50,
    XL: 40,
    X: 10,
    IX: 9,
    V: 5,
    IV: 4,
    I: 1,
  },
  toRoman: function (numberToRoman) {
    let spr = this.spravToCoding,
      res = "",
      n = numberToRoman;
    for (key in spr) {
      while (n >= spr[key]) {
        res += key;
        n -= spr[key];
      }
    }

    return res;
  },
  fromRoman: function (strFromRoman) {
    let spr = this.spravToCoding,
      res = 0,
      str = strFromRoman;
    for (key in spr) {
      while (str.indexOf(key) == 0) {
        res += spr[key];
        str = str.slice(key.length);
      }
    }

    return res;
  },
};
JavaScript:
function squareDigits(num){
  return String(num).split('').map( x=> (+x)**2 ).join('') *1
}
JavaScript:
function even_or_odd(number) {
  return number%2 ? "Odd" : "Even"
}
JavaScript:
const digitize = (n) => String(n).split('').map(x=> +x).reverse()
JavaScript:
function validSolution(board){
  const noValidRow = row => board[row].slice().sort().join('')!=='123456789';
  const noValidColumn = col => board.reduce( (accum, x) => [...accum, x[col]] , [] ).sort().join('') !== '123456789';
  const logArr = () => console.log( JSON.stringify( board ).replace(/\],\[/gi, '\n').replace(/\[/g, '' ).replace(/]/g, '') )
  const noValidSquar = num => {
    let row = (num - num%3);
    let col = num % 3 * 3;
    let acc = []
      .concat( board[row].slice(col, col+3),
               board[row+1].slice(col, col+3),
               board[row+2].slice(col, col+3)
             )
      .sort()
      .join('');
    
    return  acc !== "123456789"
  }

  logArr()  
  for (let i=0; i<9; i++){
    console.log(`i=${i}`, noValidRow(i), noValidColumn(i))
    if (noValidRow(i))    return false;
    if (noValidColumn(i)) return false;
    if (noValidSquar(i))  return false;
  }
  return true;
}
JavaScript:
const squaresOnly = arr => {
  let s = [...Array(11)].map((x,i) => i*i );
  return arr.filter(x => s.includes(x));
}
JavaScript:
function sc(said,suspects){
  return suspects.filter( x => RegExp("^" + said.replace(/~/g, '.'), "gi").test(x) ).join(',')
}
function sc(said,suspects){
  return suspects.filter( elem => RegExp("^"+said.replace(/~/g,'.'),'i').test(elem)).join(',');
}
function sc(said,suspects){
  var exp=new RegExp("^"+said.replace(/~/g,"."),   "i");
  return suspects.filter( x => exp.test(x)).join(',');
}
JavaScript:

function sc(a,b,c){
  if (a+b === c) return `${a}+${b}=${c}`;
  if (c+b === a) return `${c}+${b}=${a}`;
  if (a+c === b) return `${a}+${c}=${b}`;
  
  if (a*b === c) return `${a}*${b}=${c}`;
  if (c*b === a) return `${c}*${b}=${a}`;
  if (a*c === b) return `${a}*${c}=${b}`;

  return ''
}
JavaScript:
function sc(width,length,gaps){
  if ((width*2 + length*2 - 4) % (gaps+1) === 0 ) return (width*2 + length*2 - 4) / (gaps + 1)
  return 0
}
JavaScript:
function sc(floor){
  if (floor<=1) return "";

  return  "Aa~ ".repeat( floor-1 ) 
        + "Pa!"  
        + ((floor<=6) ? ' Aa!' : '')
    
}
JavaScript:

function sc(s){
  return s.split('').filter( (x,i,arr) => arr.includes( x.toUpperCase() )).  filter( (x,i,arr) => arr.includes( x.toLowerCase()) ).join('')
  
}
JavaScript:
function sc(apple){
  let i = apple.findIndex( x => x.includes("B") );
  let j = apple[i].indexOf("B");
  return [i,j];
}
JavaScript:
function distributionOf(golds){
  let beggars = [0,0];
  while (golds.length>0){
    if (golds.length>0) beggars[0] += (golds[0]>=golds[golds.length-1]) ? golds.shift() : golds.pop();
    if (golds.length>0) beggars[1] += (golds[0]>=golds[golds.length-1]) ? golds.shift() : golds.pop();
  }
  return beggars;
}
function distributionOf(golds){
  let start=0, end=golds.length-1, res=[0,0], step=0;
  
  while (start<=end){
    res[step] += (golds[start]<golds[end])  
       ? golds[end--] 
       : golds[start++];
    
    step=(step+1) % 2
  }
  return res;
}
JavaScript:
function pickPeaks(arr){
  console.log("============",arr)
  let itog = arr.reduce(
    (res, x, i, arr) => {
    if (i === 0) return res;
    if (i === arr.length - 1) return res;
    if (arr[i - 1] < x && rightLower(i, arr)) {
      res.pos.push(i);
      res.peaks.push(x);
    }
    return res;
    },
    { pos: [], peaks: [] }
    );
return itog;

function rightLower(i, arr) {
  //check Reducing the values to the right
  let j = i + 1;
  while (true) {
    if (j === arr.length) return false;
    if (arr[i] < arr[j]) return false;
    if (arr[i] > arr[j]) return true;
    j++;
  }
}

}
JavaScript:
function bitsWar(numbers) {
  
  let score = numbers.reduce( (sum,x) => sum + (x&1?1:-1)*(x>0?1:-1)*(x.toString(2).replace( /[-0]/g,'').length), 0 )
  console.log( `  score=${score}`, JSON.stringify(numbers),  
             JSON.stringify(numbers.map( x =>  (x&1?1:-1)*(x>0?1:-1)*(x.toString(2).replace( /[-0]/g,'').length)))
             );
    
  return score > 0 ? "odds win"  :
         score < 0 ? "evens win" :
               "tie"
}
JavaScript:
function bitsBattle(numbers) {
  let countEvenNull = numbers.filter( x => x%2===0 && x!=0 ).map( x => x.toString(2) ).join('').replace(/1/g,'').length;
  let countOddOne = numbers.filter( x => x%2===1 ).map( x => x.toString(2) ).join('').replace(/0/g,'').length;
  let result = countEvenNull - countOddOne;
  
  if (result>0) return "evens win";
  if (result<0) return "odds win";
  return "tie";
}
JavaScript:
function sum(array) {
  return array.reduce( (sum,x) => sum + x,   init=0);
}
JavaScript:
function encode(string) {
  return string.replace(/[aeuio]/g, x => "aeiou".indexOf(x)+1);
}

function decode(string) {
  return string.replace(/[12345]/g, x => "aeiou"[x-1])
}
JavaScript:
function wdm(talk){

   return talk.replace( /puke|hiccup/gi, '').replace( /\s+(?=\s)/gi , '').trim()
}
JavaScript:
var reg = /<[^>]*>/g
JavaScript:
function vowelStart(str){
  return str.toLowerCase()
    .replace(/[^0-9a-z]/g, '')
    .replace(/([aeuio])/g, ` $1`)
    .replace(/^\s/, '')
}
JavaScript:
function validNumber(num){
  return /^[+-]*\d*[.]\d\d$/.test(num);
}
JavaScript:
function hiddenWord(num) {
  let dict = {0:"o", 1:'b', 2:'l', 3:'i', 4:'e', 5:'t', 6:'a', 7:'d', 8:'n', 9:'m'};
  
  return num.toString().split('').map( x=> dict[x] ).  join('');
}
JavaScript:
function formatPoem(poem) {
  return poem.split('. ').join('.\n');
}
JavaScript:
function removeChars(s) {
  // without RegExp
  return s.split('').filter( (x) => x === ' '  || (x>='a' && x<='z') || (x>='A' && x<='Z')).join('')
}
function removeChars(s) {
  return s.replace(/[^a-z ]/gi, '');
}
JavaScript:
function calculate(str) {
  let [a,b] = str.match(/\d+/g).map(Number);
  return str.includes("gains") ? a+b : a-b;
}
JavaScript:
function gap(num) {
    return Math.max( ...(num.toString(2).match(/10+(?=1)/g) || ["1"] ).map(x=>x.length-1)  ) 
}
function gap(num) {
  console.log(`Input ${num} => ${num.toString(2)} \n ${JSON.stringify(num.toString(2).match(/10+(?=1)/g))}`)
  return (num.toString(2).match(/10+(?=1)/g)  || ["1"]  )
    .map( x => x.length-1 )
    .sort()
    .pop()
}
JavaScript:
function myParseInt(str) {
  if ( /^\s*\d+\s*$/gi.test(str) ) return parseInt(str);
  return NaN;
}
JavaScript:
function sumFromString(str){
  return (str.match(/\d+/gi) || [] )    
          .reduce( (sum, elem) => sum + +elem,  0 );
}
7 kyu
C.Wars
JavaScript:
function initials(str){
  return str.toLowerCase()
            .replace(/\b\w/g,     x => x.toUpperCase())
            .replace(/\b\w+\s/g,  x => x.charAt(0) + '.');
}
function initials(n){
  return n
    .match(/\b\w+$|\b\w/g)
    .map( x=> x[0].toUpperCase() + x.substr(1).toLowerCase())
    .join('.')
}

JavaScript:
function wordSearch(word, text){
  let myPattern = new RegExp( String.raw`\b${word}\b`, 'gi');
  
  return myPattern.test(text);
}
JavaScript:
function lifePathNumber(s) {
  // recursive, without reduce, without Array  
 
  if (s.length===1) return +s;
  
  s=s.replace(/-/g,'');
  let res = parseInt( s[0] )   + lifePathNumber(s.substr(1));
  if (res>=10) res=res%10 + parseInt(res/10);
  
  return res
}
function lifePathNumber(dateOfBirth) {
   
  return dateOfBirth.replace(/[^\d]/g,'')
    .split('')
    .reduce( (accum, elem) => +accum + +elem , init=0)
    .toString().split('')
    .reduce( (accum, elem) => +accum + +elem , init=0)
    .toString().split('')
    .reduce( (accum, elem) => +accum + +elem , init=0)
  
}
JavaScript:
var howManyYears = function(date1, date2){
  const year = (str) => +str.split(/\//)[0];
  return Math.abs( year(date1) - year(date2) );
}
var howManyYears = function(date1, date2){
  return Math.abs( +date1.slice(0,4)  -  +date2.slice(0,4) );
}
JavaScript:
function replaceAll(seq, find, replace) {
  let res = [];
  for (let i=0; i<seq.length; i++){
    res[i] = (seq[i]===find) ? replace : seq[i];
  }
  
  if (typeof(seq)==='string') return res.join('');
  return res;
}
JavaScript:
function makePassword(phrase) {
  return phrase
           .split(" ")
           .map( (el) => el[0])
           .join("")
           .replace(/i/gi, `1`)
           .replace(/o/gi, `0`)
           .replace(/s/gi, `5`)
}
const makePassword = (phrase) => phrase
  .match(/\b\w/g)
  .join(``)
  .replace(/[ios]/gi, (x) => ( { i:1, o:0, s:5 }[x.toLowerCase()]  ))
function makePassword(phrase) {
  return phrase.replace(/\s*(\w)\w*/g, `$1`).replace(/i/gi,`1`).replace(/o/gi,`0`).replace(/s/gi,`5`);
}
JavaScript:
function searchNames( logins ){
  return logins.filter(   elem =>  /_$/.test(elem[0])   );
}
JavaScript:
function remove (string) {
  return string.replace( /(\w)(?:!)+/gi, `$1`);
}
JavaScript:
function sumOfABeach(beach) {
  return (beach.match( /sand|water|fish|sun/gi ) || []).length;
}
JavaScript:
function nicknameGenerator(name){
  if (name.length<4) return "Error: Name too short";
  
  return  /[aeuio]/gi.test(name[2])  ? name.slice(0,4) : name.slice(0,3);
}
JavaScript:
function countChar(string, char) {
  return ( string.match( new RegExp(char, "gi") )  || [] )   .length;
}
JavaScript:
function makeString(s){
  return  s.split(" ")  .map( x => x[0] )   .join('');
}
function makeString(s){
  return  s.match( /\b\w/g ).join('');
}
JavaScript:
const removeConsecutiveDuplicates = s =>  s.split(" ").filter(  (x,i,arr)=> x!=arr[i-1]  )  .join(" ");
const removeConsecutiveDuplicates = s => s.replace( /\b(\w+)(?: \1)*\b/g , `$1`) ;
JavaScript:
String.prototype.isLetter = function() {
  return /^[a-z]$/i.test(this);
}
JavaScript:
function tripleX(str){
  return /^[^x]*xxx/.test(str);
}

JavaScript:
String.prototype.vowel = function() {
  return /^[aeuio]$/i.test(this);
};
JavaScript:
const vowel2index = (str) => str.replace( /[aeuio]/gi,  (x,i,str) => i+1  );
function vowel2index(str) {
   return str.replace( /[aeuio]/gi,   (x,i,str) => (i+1) );
}
JavaScript:
const explode = (s) =>   s.split('').map( e => e.repeat(e) ).join('');
JavaScript:
function greetDevelopers( list ) {
  for (let i=0; i<list.length; i++){
    list[i]["greeting"] = `Hi ${list[i].firstName}, what do you like the most about ${list[i].language}?`;
  }
  
  return list;
}
function greetDevelopers(list) {
  return list.map( (_,i,arr) => {
    _.greeting = `Hi ${_.firstName}, what do you like the most about ${_.language}?`;
    return _;
  }  )
}
JavaScript:
function countDevelopers(list) {
  return list.filter( dev => (dev.continent==='Europe' && dev.language==='JavaScript')).length;
}
JavaScript:
function removeDuplicateWords (s) {
  return    [...new Set(s.split(" "))].join(" ");
}
JavaScript:
function removeUrlAnchor(url){
  return url.replace(/#.*/, '')
}
JavaScript:
function validateCode (code) {
  return /^[123]/.test(code);
}
JavaScript:
String.prototype.digit = function() {
  return /^\d$/.test(this);
};
JavaScript:
function isLockNessMonster(s) {
  
  return /tree fiddy|3[.]50|three fifty/i.test( s );
}
JavaScript:
function getNumberFromString(s) {
  return parseInt( s.replace(/[^\d]/g, '') );

}
JavaScript:
function validateUsr(username) {
  const regexp_validator =  /^[a-z_0-9]{4,16}$/;

  return regexp_validator.test(username);
  
}
JavaScript:
function stringClean(s){
  return s.replace(/\d/g, '')
}
JavaScript:
function lowercaseCount(str){
    return ( str.match(/[a-z]/g) || [] ).length
}
JavaScript:
function likes(names) {
  switch (names.length) {
      case 0: return "no one likes this"; 
      case 1: return names[0] + " likes this";
      case 2: return names[0] + " and " + names[1] + " like this";
      case 3: return names[0] + ", " + names[1] + " and " + names[2] + " like this"
      default: return names[0] + ", " + names[1] + " and " + (names.length-2) + " others like this"
  }
}
Python:
def likes(names):
    if len(names)==0:
        return "no one likes this"
    if len(names)==1:
        return "{0} likes this".format(names[0])
    if len(names)==2:
        return "{0} and {1} like this".format( names[0], names[1] )
    if len(names)==3:
        return "{0}, {1} and {2} like this".format( names[0], names[1], names[2] )
    
    return "{0}, {1} and {2} others like this".format( names[0], names[1], len(names)-2 )
    
JavaScript:
function stickyCalc (op, val1, val2){
  const {round} = Math;
  let first = Number( round(val1) + '' + round(val2));
  
  return op==="+" ?  first + round(val2) :
          op==="-" ? first - round(val2) :
          op==="*" ? first * round(val2) :
                  round(first / round(val2))
}
const stickyCalc = (op, v1, v2) => Math.round(eval( Math.round(v1)+''+Math.round(v2)+op+ Math.round(v2)))
function stickyCalc (operation, val1, val2){
  let first = parseInt( Math.round(val1).toString() + Math.round(val2).toString() );
  switch (operation){
    case "+": return  first + Math.round(val2); break;
    case "-": return  first - Math.round(val2); break;
    case "*": return  first * Math.round(val2); break;
    case "/": return  Math.round( first / Math.round(val2)); break;
  }
}
function stickyCalc (operation, val1, val2){
    let a=Math.round(val1);
    let b=Math.round(val2);
  switch (operation){
      case "+": return Math.round( +(''+a+b) + val2); break;
      case "-": return Math.round( +(''+a+b) - val2); break;
      case "*": return Math.round( +(''+a+b) * val2); break;
      case "/": return Math.round( +(''+a+b) / val2); break;
  }
}
Python:
def sticky_calc(operation, val1, val2):
    return round(eval( "{1}{2} {0} {2}".format(   operation, round(val1), round(val2)     ) ))
JavaScript:
function zero(p) {return p==undefined ? 0 : p.f(0, p.arg1)}
function one(p) {return p==undefined ? 1 : p.f(1, p.arg1)}
function two(p) {return p==undefined ? 2 : p.f(2, p.arg1)}
function three(p) {return p==undefined ? 3 : p.f(3, p.arg1)}
function four(p) {return p==undefined ? 4 : p.f(4, p.arg1)}
function five(p) {return p==undefined ? 5 : p.f(5, p.arg1)}
function six(p) {return p==undefined ? 6 : p.f(6, p.arg1)}
function seven(p) {return p==undefined ? 7 : p.f(7, p.arg1)}
function eight(p) {return p==undefined ? 8 : p.f(8, p.arg1)}
function nine(p) {return p==undefined ? 9 : p.f(9, p.arg1)}

function plus(p) { 
  return {f : (a,b) => a+b,
          arg1: p
}}
function minus(p) {
  return {f : (a,b) => a-b,
          arg1: p
}}
function times(p) {
    return {f : (a,b) => a*b,
          arg1: p
}}
function dividedBy(p) {
    return {f : (a,b) => (a-a%b)/b,
          arg1: p
}}
JavaScript:
function cache(func) {
  let cache = {}; 
  return (...arguments) => { 
  let args = JSON.stringify(...arguments); 
  return cache.hasOwnProperty(args) ? cache[args] : cache[args] = func(...arguments);
  }
}
function cache(func) {
  let casheMap = new Map();
  
  return function(...args){
    key = JSON.stringify(args);
    console.log(key)
    
    // if no cash - create it
    if (!casheMap.has( key )) casheMap.set(key, func(...args))  
    
    return casheMap.get( key )
  }
}
function cache(func) {
  let casheMap = new Map();
  
  return function(...args){
    key = JSON.stringify(args);
    
    // if no cash - create it
    if (!casheMap.has( key )) casheMap.set(key, func(...args))  
    
    return casheMap.get( key )
  }
}
JavaScript:
function formatDuration (seconds) {
  if (seconds == 0) return "now"
  
  let years, days, hours, mins, secs, s = seconds
  
  secs = s % 60
  s = s - secs
  mins = s / 60 % 60
  s = s - mins * 60
  hours = s / (60*60) % 24
  s = s - hours * 60 * 60
  days = s / (60*60*24) % 365
  s = s - days * (60*60*24)
  years = s / (60*60*24*365)
  
  //console.log(seconds, "=>", years, days, hours, mins, secs,)
  
  s = "" +
    (years  ? (years  + " year"  + (years>1 ? "s, ": ", ")) : "") + 
    (days   ? (days   + " day"   + (days>1  ? "s, ": ", ")) : "") +
    (hours  ? (hours  + " hour"  + (hours>1 ? "s, ": ", ")) : "") + 
    (mins   ? (mins   + " minute"+ (mins>1  ? "s, ": ", ")) : "") + 
    (secs   ? (secs   + " second"+ (secs>1  ? "s": "")) : "")
   
  
  s = s.replace(/(,\s){2,}/g, ", ")      //remove double/triple ", "
  s = s.replace(/,\s$/g, "")             //remove ', ' in end of string
  s = s.replace(/, (?!.*, )/g, " and ")  //last comma replace to " and "
  
  return s
}
JavaScript:
var paintLetterboxes = function(start, end) {
  // code with map()
  let str = [...Array(end-start+1)].map((_,i)=>i+start).join('-')
       //str="125-126-127-...132"
  
  return [0,0,0,0,0,0,0,0,0,0].map((_,i)=>  str.split(i).length-1  )
}
var paintLetterboxes = function(start, end) {
  let str = "";
  let arr = Array(10).fill(0);
  
  for ( let i = start; i<=end; i++ )  str += i;
  for ( symbol of str ) arr[ +symbol ]++
  
  return arr
}
JavaScript:
function validatePIN (pin) {
  return /^\d{4}(\d\d)?$/.test(pin)
}
JavaScript:
var moveZeros = function (arr) {
  return [
    ... arr.filter(x => x!==0),
    ... arr.filter(x => x===0)
  ]
}
var moveZeros = function (arr) {
  let arrZero = [];
  let arrNotZero = arr.reduce( (arrAccum, current) => {
    (current === 0) ? arrZero.push(0) : arrAccum.push(current)
    return arrAccum;
  }, [])
  return [].concat( arrNotZero, arrZero)
}
JavaScript:
var maxSequence = function(arr){
  if ( arr.length === 0 ) { return 0 };
  
  let sumNow;
  let resMaxSum = arr[0]; //max summa 
  
  for ( let startPos=0; startPos<arr.length; startPos++) {
    let maxSumStartPos = 0;

    for ( let endPos = startPos; endPos<arr.length; endPos++){
      sumNow = arr.slice( startPos, endPos+1).reduce( (a,b) => a+b, 0 );
      if ( sumNow > maxSumStartPos ) { maxSumStartPos = sumNow };
    }
    resMaxSum = ( resMaxSum > maxSumStartPos ) ? resMaxSum : maxSumStartPos ;
  }  
  return resMaxSum;
}
JavaScript:
function solution(input, markers) {
  let pattern = new RegExp('\\s[' + markers.join('') + '].*$')  
  //паттерн - от первого любого маркера до конца строки. Плюс пробелы перед маркером
  
  return input.split('\n')              //разделили текст на строки
    .map( s => s.replace(pattern,'')    //заменяем в каждой строке от маркера до конца
      ).join('\n')                      //собираем текст обратно
};
function solution(input, markers) {
let pozComment, pozN, aa

aa = input + '\n' //добавляем перевод строки для обработки последней строки
pozComment = Math.min(...markers.map(x => aa.indexOf(x)).filter(z => (z > -1)))

while (pozComment !== Infinity) {
  // если существует маркер - вырезаем комментарий
	pozN = aa.indexOf('\n', pozComment)
	aa = aa.slice(0, pozComment).trim() + '\n' + aa.slice(pozN).trim()

	pozComment = Math.min(...markers.map(x => aa.indexOf(x)).filter(z => (z > -1)))
}
aa = aa.slice(0, -1).trim() //убираем добавленный перевод строки в конце и пробелы
return aa
  
};
JavaScript:
function solve(arr){
  let array = arr[0];
    for(let i=1; i < arr.length; i++){
      let step = [];
      let temp = []
      for(let j of arr[i]){
        step = array.map( e => e * j )
        temp = temp.concat( step )
      }
      array = [ Math.min(...temp),  Math.max(...temp)];
    }
    return array.sort((a,b)=> b-a)[0]
}
function solve(arr) {
	const { max, min } = Math;

	let PossibleMax = arr.reduce((accumulator, current) => [
		max(...accumulator) * max(...current),
		max(...accumulator) * min(...current),
		min(...accumulator) * max(...current),
		min(...accumulator) * min(...current)
	]
	);
	return max(...PossibleMax);
}
function solve(arr) {
	let min = 1, max = 1;
	for (let ii of arr) {
		let cur = [];
		for (jj of ii) cur.push(jj * max), cur.push(jj * min);
		min = Math.min(...cur);
		max = Math.max(...cur);
	}
	return max;
}
JavaScript:
var regex=/(\d)(?=(\d{3})*\b)(?!\b)/g
function addCommas(money,reg){
  //coding the use of regex here...
  return money.replace(reg,x=>x+",")  //like this
}
JavaScript:
var regex=/\b(\w)(\w?)(\w?)(\w?)\3\2\1\b/g
JavaScript:
var regex=/(http:\/\/|https:\/\/)[a-z0-9\.]+(\.net|\.com)/ig
JavaScript:
function sc(regex){
  let regStr=regex.slice(1,-1),
      rez;
  for (i=1; i<=regStr.length/2; i++){
    shablon=regStr.slice(0,i);
    if (RegExp("^("+shablon+")*$").test(regStr)) {
      rez= (shablon.length>1 ? `/(` : `/` ) 
        + shablon 
        + (shablon.length>1 ? `)` : `` )
        + "{"
        + (regStr.length/shablon.length) 
        + "}/"
      if (regex.length>rez.length) return rez;
    }     
  }
  return regex  //если не нашли подходящих повторов - возвращаем входящую строку
}
JavaScript:
function findSimilarity(str,word){
  var expStr = word[0] + 
              word.slice(1,-1).replace(/./g,".") +
              word.slice(-1);
  exp = new RegExp("^"+expStr+"$");
  
  return str.split(/ /)
    .filter( x => exp.test(x) )
    .join(" "); 
  
}
JavaScript:
let rand = (chars,count) => {
   var res="";
   for (i=0; i<count; i++){
      res+=chars[ ~~(chars.length * Math.random())];
   }
   return res;
}

function rndCode(){
  return rand("ABCDEFGHIJKLM",2) + rand("0123456789",4) + rand("~!@#$%^&*",2);
  
}
JavaScript:
function cutCube(volume,n){
  return !(Math.cbrt(n) % 1) && !(Math.cbrt(volume / n) % 1);
}
function cutCube(volume,n){
  let lenCube=Math.round(Math.cbrt(volume)), 
      lenMini=Math.round(Math.cbrt(n));

  if (lenCube**3!==volume || 
      lenMini**3!==n      || 
      lenCube % lenMini > 0
     ) 
    {return false} else  {return true};
}
JavaScript:
function countAnimals(animals,count){
  return count.map( a =>  animals.split(a).length-1 )
}
JavaScript:
function maxMin(arr1,arr2){
  
  let arr = arr1.map( (a, i) => Math.abs(a-arr2[i]) );
  
  return [ Math.max(...arr), Math.min(...arr)]
  
}
JavaScript:
function roundIt(n){
  let leftDigits, rightDigits;
  leftDigits =String(n).indexOf(".");
  rightDigits=String(n).length - leftDigits - 1;
  if (leftDigits < rightDigits) return Math.ceil(n);
  if (leftDigits > rightDigits) return Math.floor(n);
  return Math.round(n);
}
JavaScript:
function openOrSenior(data){
  let res=[];
  for ([a,b] of data) {
    res.push( (a>=55 && b>7) ? "Senior" : "Open" );
  }
  return res;
}
JavaScript:
function blackAndWhite(arr){
  if (!Array.isArray(arr)) return "It's a fake array";
  if (arr.indexOf(5)>=0 && arr.indexOf(13)>=0) return "It's a black array";
  return "It's a white array";  
}
JavaScript:
function tailAndHead(arr){
    //create arr2
  let arr2=[];
  for (i=0; i<arr.length-1; i++){
    arr2.push(   arr[i]%10  + parseInt(arr[i+1].toString()[0])   )
  }

  return arr2.reduce( (a,b) => a*b );
}
JavaScript:
function bigToSmall(arr){
  return[].concat(...arr).sort( (x,y) => y-x ).join(">");
  
}
JavaScript:
function mirrorImage(arr){
  let a,b;
  if (arr.some( (x,i) => {
    if (i==arr.length-1) return false;
    a=arr[i];
    aa=a.toString().split("").reverse().join("")
    b=arr[i+1];
    bb=b.toString();
    return aa==bb;
    })) {
    return [a,b];
  } else {
    return [-1,-1];
  }
}
JavaScript:
function countGrade(scores){
  let res={};
  res["S"]=scores.filter( x => x===100).length;
  res["A"]=scores.filter( x => x<100 && x>=90).length;
  res["B"]=scores.filter( x => x<90  && x>=80).length;
  res["C"]=scores.filter( x => x<80  && x>=60).length;
  res["D"]=scores.filter( x => x<60  && x>=0 ).length;
  res["X"]=scores.filter( x => x===-1).length;
  return res;
}
JavaScript:
function isolateIt(arr){
  return arr.map( x => x.slice(0, parseInt(x.length/2)) + "|" + x.slice( parseInt((x.length+1)/2) ))
}
JavaScript:
function sortIt(arr){
	let countOf = {}, res = arr.slice();
	for (x of arr) { countOf[x] = (countOf[x] || 0) + 1; }

	res.sort((a, b) => (countOf[a] - countOf[b] || b - a));

	//сортировка закончена. Вывод результата.
	return res;
}
function sortIt(arr) {
	var res = [...arr];
	res.sort((a, b) => {
		let n = arr.filter(x => x === a).length;
		let m = arr.filter(x => x === b).length;
		if (m == n) return b - a;
		return n - m;
	})
	return res;
}
JavaScript:
function threeInOne(arr){
  var res=[];
  for (i=0; i<arr.length/3; i++){
    res.push( arr[i*3] + arr[i*3+1] + arr[i*3+2] );
  }
  return res;
}
JavaScript:
function infiniteLoop(arr,d,n){
  var len=arr.length;
  for (count=0; count<n; count++){
     if (d=="left"){
       for (i=0;  i<len; i++){
         arr[i].push( arr[(i+1)%len].shift() );
       }

     } else {
       for (i=0; i<len; i++){
         arr[(i+1)%len].unshift( arr[i].pop() );
       }
     }
  }
  return arr;
}
JavaScript:
function shuffleIt(arr,...changes){
  for ([i,j] of changes) [arr[i],arr[j]] = [arr[j],arr[i]];
  return arr;
}
const shuffleIt = (arr,...changes) => {
    for (xx of changes){ 
      [ arr[xx[0]], arr[xx[1]] ] = [ arr[xx[1]], arr[xx[0]] ];
    }
    return arr; 
}
JavaScript:
const fiveLine = s =>  [1,2,3,4,5].map( n => s.trim().repeat(n))
                       .join(`\n`)
  
function fiveLine(s){
  var res=s=s.trim();
  for (i=2;  i<6;  i++){
    res += `\n` + s.repeat(i);
  }
  return res;
}
function fiveLine(s){
  var rez=x=s.trim();
  for(i=1; i<5; i++){
    x+=s.trim();
    rez+=`\n${x}`;
  }
  return rez;
}
JavaScript:
const topSecret = str => str.replace( /[a-z]/ig,  c => String.fromCharCode(c.charCodeAt() + (`ABCabc`.includes(c) ? 23 : -3)  )  )
  

answer1="2103";
answer2="oDhvtj";
answer3="Train tire";
function topSecret(str){
    let rez="",x;
    for(i=0; i<str.length; i++){
        x=str[i].charCodeAt();
        if ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".indexOf(str[i]) !==-1 ){
            x=x-3;
            if (x<65 || (x<97 & x>91)) { x+=26 };
        }
        rez+=String.fromCharCode(x);
    }
    return rez;
}
//question1: The top secret file number is...
answer1="3918";
//question2: Super agent's name is...
answer2="LGxUC";
//question3: He stole the treasure is...
answer3="Expired biscuits";
JavaScript:
function descendingOrder(n){
  return +n.toString().split("").sort( (a,b) => (b-a) ).join("")
}
JavaScript:
function alienLanguage(str){
  return str.toUpperCase().replace(/\w\b/g, x=>x.toLowerCase())
  
}
JavaScript:
function splitAndMerge(string, separator) {
  return string.split(" ").map( x => x.split("").join(separator) ).join(" ")
}
JavaScript:
function firstToLast(str,c){
  return (str.indexOf(c)==-1 ? -1  : str.lastIndexOf(c)-str.indexOf(c) )
}
JavaScript:
var v1=50;v2=100,v3=150,v4=200,v5=2,v6=250
function equal1(){
  var a=v1   
  var b=v1   
  return a+b;
}
//Please refer to the example above to complete the following functions
function equal2(){
  var a=v3   //set number value to a
  var b=v1   //set number value to b
  return a-b;
}
function equal3(){
  var a=v1   //set number value to a
  var b=v5   //set number value to b
  return a*b;
}
function equal4(){
  var a=v4   //set number value to a
  var b=v5   //set number value to b
  return a/b;
}
function equal5(){
  var a=v6   //set number value to a
  var b=v3   //set number value to b
  return a%b;
}
JavaScript:
function cutIt(arr){
  let minLen=arr[0].length;
  let rez=[];
  for (elem of arr){
    if (elem.length<minLen) minLen=elem.length
  }
  for (i=0; i<arr.length; i++){
    rez.push( arr[i].slice(0, minLen) )
  }
  return rez;
}
JavaScript:

function howManySmaller(arr,n){
  return (arr.filter( x => x.toFixed(2)<n  )).length 
}

function howManySmaller(arr,n){
  var rez=0;
  for (i in arr){ 
    if (arr[i].toFixed(2) < n) rez++;
  }
  return rez;  
}
JavaScript:
function colorOf(r,g,b){
  return "#"+ ("0"+r.toString(16)).slice(-2) + ("0"+g.toString(16)).slice(-2) + ("0"+b.toString(16)).slice(-2)
  
}
JavaScript:
function whatNumberIsIt(n){
  if (isNaN(n)) return 'Input number is Number.NaN'
  if (n===Number.MAX_VALUE) return "Input number is Number.MAX_VALUE"
  if (n===Number.MIN_VALUE) return "Input number is Number.MIN_VALUE"
  if (n < Number.MIN_VALUE) return "Input number is Number.NEGATIVE_INFINITY"
  if (n > Number.MAX_VALUE) return "Input number is Number.POSITIVE_INFINITY"
  
  return "Input number is " + Number(n)
}