GithubHelp home page GithubHelp logo

backend-test's Introduction

ONTRAPORT Backend Skills Test

Hi, Thanks for checking us out

If you're interested in applying for the Backend Engineer team a great first step is to complete a brief test to allow us to assess your skills. You will find our Backend Engineer test below. Any language is fine, please note there are two questions:

  1. Write a function that accepts a multi-dimensional container of any size and converts it into a one dimensional associative array whose keys are strings representing their value's path in the original container.

E.G.

{
    'one':
    {
        'two': 3,
        'four': [ 5,6,7]
    },
    'eight':
    {
        'nine':
        {
            'ten':11
        }
    }
}

turns into:

{
    'one/two':3,
    'one/four/0':5,
    'one/four/1':6,
    'one/four/2':7,
    'eight/nine/ten':11
}
  1. Now write a separate function to do the reverse.

We want you to fork and then create a pull-reqest against this repository and we'll review it.

Thanks and good luck!

Ontraport Careers Team


Notes on my solution


Setup, testing, and test coverage

You will need Python 3.6+. I tested it on a GNU/Linux system. All of these commands are intended to be run from the project's root directory.

(Optional, but highly recommended) setting up and activating a virtual python environment:

$ python3.6 -m venv ontraport_venv
$ . ontraport_venv/bin/activate

To get out of the virtual environment afterwards:

$ deactivate

Installing requirements:

$ pip install -r requirements.txt

Static analysis (mypy):

$ mypy flatten/flatten.py

Running tests:

$ python -m pytest

Test coverage (currently 96% if you're curious):

$ python -m pytest --cov=flatten

Use

The help screen:

$ flatten/flatten.py -h
Flatten: a tool for flattening (and expanding) multidimensional lists and dictionaries.

Usage:
  flatten.py (-e | -f) FILE
  flatten.py (-h | --help)
  flatten.py (-v | --version)

Options:
  -e --expand   Expand a file. Read from standard input if "-" is supplied as the file name.
  -f --flatten  Flatten a file. Read from standard input if "-" is supplied as the file name.
  -h --help     Show this screen.
  -v --version  Show version.

Flattening a file:

$ flatten/flatten.py --flatten tests/test_files/supplied_input_expanded.txt 
{'eight/nine/ten': 11,
 'one/four/0': 5,
 'one/four/1': 6,
 'one/four/2': 7,
 'one/two': 3}

Expanding a file:

$ flatten/flatten.py --expand tests/test_files/supplied_input_flattened.txt 
{'eight': {'nine': {'ten': 11}}, 'one': {'four': [5, 6, 7], 'two': 3}}

Reading from stdin works exactly as the help screen says. Try it out!

backend-test's People

Contributors

bburleson-op avatar ontraportgithub avatar xbe avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.