# How Many Numbers Are Smaller Than the Current Number

Easy
13
69.2% Acceptance

In this lab, you will be given an array of integers `nums`. For each `nums[i]`, you need to find out how many numbers in the array are smaller than it. That is, for each `nums[i]` you have to count the number of valid `j's` such that `j != i` and `nums[j] < nums[i]`. Your task is to implement a function `smallerNumbersThanCurrent` that takes in an array of integers and returns the result in another array.

Make sure to use ESM import/export in your solution.

## Example

Input: nums = [8,1,2,2,3]

Output: [4,0,1,1,3]

Explanation:

For nums[0]=8 there exist four smaller numbers than it (1, 2, 2 and 3).

For nums[1]=1 does not exist any smaller number than it.

For nums[2]=2 there exist one smaller number than it (1).

For nums[3]=2 there exist one smaller number than it (1).

For nums[4]=3 there exist three smaller numbers than it (1, 2 and 2).

## Constraints

• `2 <= nums.length <= 500`
• `0 <= nums[i] <= 100`

## Challenges

1. Export your function `smallerNumbersThanCurrent`.
2. Test your function with the given examples and expect the correct output in each test case.

## Evaluation script

``````import fs from 'fs'
import { smallerNumbersThanCurrent } from '/home/damner/code/index.js'

const testlog = []

// this first block matches with - Challenge 1
try {
if(smallerNumbersThanCurrent !== undefined) {
testlog.push({ status: 'pass' })
} else {
throw new Error('Function is not exported properly')
}
} catch(error) {
testlog.push({
status: 'error',
error: error.message || 'Challenge 1 failed'
})
}

// this second block matches with - Challenge 2
try {
const result1 = smallerNumbersThanCurrent([8,1,2,2,3])
const expected1 = [4,0,1,1,3]
const result2 = smallerNumbersThanCurrent([6,5,4,8])
const expected2 = [2,1,0,3]
const result3 = smallerNumbersThanCurrent([7,7,7,7])
const expected3 = [0,0,0,0]

if(JSON.stringify(result1) === JSON.stringify(expected1) &&
JSON.stringify(result2) === JSON.stringify(expected2) &&
JSON.stringify(result3) === JSON.stringify(expected3)) {
testlog.push({ status: 'pass' })
} else {
throw new Error('Function does not return expected results')
}
} catch(error) {
testlog.push({
status: 'error',
error: error.message || 'Challenge 2 failed'
})
}

fs.writeFileSync('/home/damner/code/.labtests/testlog.json', JSON.stringify(testlog))
fs.writeFileSync(process.env.UNIT_TEST_OUTPUT_FILE, JSON.stringify(testlog.map(result => result.status === 'pass')))``````

## Setting up test environment script

``````#!/bin/bash
set -e 1

mkdir -p /home/damner/code/.labtests

cat > /home/damner/code/.labtests/package.json << EOF
{
"type": "module"
}
EOF

cd /home/damner/code/.labtests
mv \$TEST_FILE_NAME ./nodecheck.test.js

# import puppeteer doesn't work without it

node nodecheck.test.js 2>&1 | tee evaluationscript.log``````

## Initial file system for user

``````/**
* @param {number[]} nums
* @return {number[]}
*/
export var smallerNumbersThanCurrent = function(nums) {

};``````
``````{
"name": "codedamn-lab",
"type": "module"
}``````
``````tabs: ['index.js']
terminals: ['yarn install']``````