DEV Community

dev.to staff
dev.to staff

Posted on

Daily Challenge #9 - What's Your Number?

Can I have your number?

Write a function that accepts an array of 10 integers (between 0 and 9), that returns a string of those numbers in the form of a phone number.

The returned format must be correct in order to complete this challenge.
Don't forget the space after the closing parentheses!

Today's challenge comes from user xDranik on Codewars

Thank you to CodeWars, who has licensed redistribution of this challenge under the 2-Clause BSD License!

Want to propose a challenge for a future post? Email yo+challenge@dev.to with your suggestions!

Latest comments (26)

Collapse
 
mrdulin profile image
official_dulin

Go:

import (
  "fmt"
  "strconv"
  "strings"
)

func CreatePhoneNumber(numbers [10]uint) string {
  strs := []string{}
  for _, n := range numbers {
    strs = append(strs, strconv.FormatUint(uint64(n), 10))
  }
  a := strings.Join(strs[:3], "")
  b := strings.Join(strs[3:6], "")
  c := strings.Join(strs[6:], "")
  return fmt.Sprintf("(%s) %s-%s", a, b, c)
}
Collapse
 
peter279k profile image
peter279k

Here is the simple solution with PHP:

function createPhoneNumber($numbersArray) {
    $format = "(%s%s%s) %s%s%s-%s%s%s%s";

    return sprintf(
      $format,
      $numbersArray[0], $numbersArray[1], $numbersArray[2], $numbersArray[3],
      $numbersArray[4], $numbersArray[5], $numbersArray[6], $numbersArray[7],
      $numbersArray[8], $numbersArray[9]
    );
}
Collapse
 
maskedman99 profile image
Rohit Prasad

Python

var = input("Enter 10 integers: ")
var = list(var)

if len(var) != 10:
        print("Invalid Entry")
else:
        print('(',var[0],var[1],var[2],') ',var[3],var[4],var[5],'-',var[6],var[7],var[8],var[9], sep='')

anyone's skin crawling?

Collapse
 
neotamizhan profile image
Siddharth Venkatesan

Ruby

def phone_number(nums)
  puts "(#{nums[0..2].join("")}) #{nums[3..5].join("")}-#{nums[6..-1].join("")}"
end

puts phone_number([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]) #(123) 456-7890
Collapse
 
margo1993 profile image
margo1993
package utils

import (
    "errors"
    "fmt"
    "strconv"
)

func FormatPhoneNumber(phoneNumberArray []int) (string, error) {

    if len(phoneNumberArray) != 10 {
        return "", errors.New("Array length must be 10")
    }

    return fmt.Sprintf("(%s) %s-%s", intArrayToString(phoneNumberArray[:3]), intArrayToString(phoneNumberArray[3:6]), intArrayToString(phoneNumberArray[6:])), nil
}

func intArrayToString(intArray []int) string {
    number := ""

    for _, num := range intArray {
        number += strconv.Itoa(num)
    }

    return number
}
Collapse
 
celyes profile image
Ilyes Chouia • Edited

Better late than never ;p

Here's my attempt in PHP

function formPhoneNumber(array $integers): string
{

    if(count($integers) != 10) {
        throw new Exception('Please provide a valid array!');
    }

    $phone = "(";
    foreach($integers as $index => $number){
       if($number < 10 && $number >= 0){
            $phone .= $number;
            if($index == 2){
                $phone .= ") ";
            }elseif($index == 5){
                $phone .= "-";
            }
       }else{
            throw new Exception("One of the numbers is invalid!");
       }
    }
    return $phone;

}
echo formPhoneNumber([4, 5, 5, 4, 5, 1, 7, 8, 9, 0]);
Collapse
 
wolverineks profile image
Kevin Sullivan • Edited

codesandbox.io/embed/daily-challen...

const iterative = (input: number[], schema: string = "(###) ###-####") => {
  let result = schema;
  input.forEach(number => (result = result.replace("#", String(number))));

  return result;
};

const recursive = (
  input: number[],
  schema: string = "(###) ###-####",
  result: string = schema
): string => {
  const [head, ...rest] = input;
  if (head === undefined) return result;

  return recursive(rest, schema, result.replace("#", String(head)`));
};

export const createPhoneNumber = {
  iterative,
  recursive
};
Collapse
 
craigmc08 profile image
Craig McIlwrath

Haskell (US formatting):

formatNumber :: [Int] -> Maybe String
formatNumber xs
  | length xs /= 10 = Nothing
  | not $ and $ (map (<10) xs) ++ (map (>=0) xs) = Nothing 
  | otherwise = Just $ "(" ++ (showSlice 0 3 xs) ++ ") " ++ (showSlice 3 3 xs) ++ "-" ++ (showSlice 6 4 xs) 
  where showSlice from len = concat . map show . take len . drop from
Collapse
 
johncip profile image
jmc

Clojure:

(defn format-number [digits]
  (apply format "(%s%s%s) %s%s%s-%s%s%s%s" digits))
Collapse
 
stevemoon profile image
Steve Moon

Erlang: (in the REPL)

Num = [8,0,0,5,5,5,1,2,1,2].
io:format("(~B~B~B) ~B~B~B-~B~B~B~B~n", Num).
(800) 555-1212
ok

Or you can use io_lib:format and assign the result to a variable instead.

Checking for valid input is fairly trivial, but the Erlang convention is to assume that something this far into the system is okay, and correct for the error by dying and letting the supervisor deal with it.