Daily Challenge Post #20 - Number Check

twitter logo ・1 min read

Daily Challenge (68 Part Series)

1) Daily Challenge #1 - String Peeler 2) Daily Challenge #2 - String Diamond 3 ... 66 3) Daily Challenge #3 - Vowel Counter 4) Daily Challenge #4 - Checkbook Balancing 5) Daily Challenge #5 - Ten Minute Walk 6) Daily Challenge #6 - Grandma and her friends 7) Daily Challenge #7 - Factorial Decomposition 8) Daily Challenge #8 - Scrabble Word Calculator 9) Daily Challenge #9 - What's Your Number? 10) Daily Challenge #10 - Calculator 11) Daily Challenge #11 - Cubic Numbers 12) Daily Challenge #12 - Next Larger Number 13) Daily Challenge #13 - Twice Linear 14) Daily Challenge #14 - Square into Squares 15) Daily Challenge #15 - Stop gninnipS My sdroW! 16) Daily Challenge #16 - Number of People on the Bus 17) Daily Challenge #17 - Double Trouble 18) Daily Challenge #18 - Triple Trouble 19) Daily Challenge #19 - Turn numbers into words 20) Daily Challenge Post #20 - Number Check 21) Daily Challenge #21 - Human Readable Time 22) Daily Challenge #22 - Simple Pig Latin 23) Daily Challenge #23 - Morse Code Decoder 24) Daily Challenge #24 - Shortest Step 25) Daily Challenge #25 - Double Cola 26) Daily Challenge #26 - Ranking Position 27) Daily Challenge #27 - Unlucky Days 28) Daily Challenge #28 - Kill the Monster! 29) Daily Challenge #29 - Xs and Os 30) Daily Challenge #30 - What is the price? 31) Daily Challenge #31 - Count IPv4 Addresses 32) Daily Challenge #32 - Hide Phone Numbers 33) Daily Challenge #33 - Did you mean...? 34) Daily Challenge #34 - WeIrD StRiNg CaSe 35) Daily Challenge #35 - Find the Outlier 36) Daily Challenge #36 - Let's go for a run! 37) Daily Challenge #37 - Name Swap 38) Daily Challenge #38 - Middle Name 39) Daily Challenge #39 - Virus 40) Daily Challenge #40 - Counting Sheep 41) Daily Challenge #41 - Greed is Good 42) Daily Challenge #42 - Caesar Cipher 43) Daily Challenge #43 - Boardgame Fight Resolver 44) Daily Challenge #44 - Mexican Wave 45) Daily Challenge #45 - Change Machine 46) Daily Challenge #46 - ??? 47) Daily Challenge #47 - Alphabets 48) Daily Challenge #48 - Facebook Likes 49) Daily Challenge #49 - Dollars and Cents 50) Daily Challenge #50 - Number Neighbor 51) Daily Challenge #51 - Valid Curly Braces 52) Daily Challenge #52 - Building a Pyramid 53) Daily Challenge #53 - Faro Shuffle 54) Daily Challenge #54 - What century is it? 55) Daily Challenge #55 - Building a Pile of Cubes 56) Daily Challenge #56 - Coffee Shop 57) Daily Challenge #57 - BMI Calculator 58) Daily Challenge #58 - Smelting Iron Ingots 59) Daily Challenge #59 - Snail Sort 60) Daily Challenge #60 - Find the Missing Letter 61) Daily Challenge #61 - Evolution Rate 62) Daily Challenge #62 - Josephus Survivor 63) Daily Challenge #63- Two Sum 64) Daily Challenge #64- Drying Potatoes 65) Daily Challenge #65- A Disguised Sequence 66) Daily Challenge #66- Friend List 67) Daily Challenge #67- Phone Directory 68) Daily Challenge #68 - Grade Book

Create a function which checks a number for three different properties.

Is the number prime?
Is the number even?
Is the number a multiple of 10?

Each should return either true or false, which should be given as an array.

Today's challenge comes from sohilpandya 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!

twitter logo DISCUSS (10)
markdown guide
 

Well, as this isn't the most challenging challenge, I decided to challenge myself ;)

Here is an answer in the stack-based programming language Factor.

! is an integer even?
: even? ( int -- ? )
    2 mod 0 = ;

! is an integer a multiple of ten?
: multiple-of-ten? ( int -- ? )
    10 mod 0 = ;

! helper word (that's a 'function' in factor) for prime? 
: (prime?) ( int m -- ? )
    2dup <= [ t 2nip ] [ 
        2dup mod 0 = [ f 2nip ] [ 1 + (prime?) ] if
    ] if ;

! is an integer prime?
: prime? ( int -- ? )
    2 (prime?)

! all three tests applied to a single integer, output as an array
: all-three ( int -- seq )
    2dup
    [ prime? ] [ even? ] [ multiple-of-ten? ]
    tri* 3array ;


5 all-three
!
! --- Data stack:
! { t f f }
clear
10 all-three
!
! --- Data stack:
! { f t t }

I've never tried anything like this before, so I'd be interested in some feedback if any is available.

Conversely, if anyone would like me to explain what on earth is going on above, please ask and I'll do my best. I really enjoyed writing it.

 

Rust Solution!

Went with the naive algorithm for testing for a prime number. Could always improve on that if needed :shruggy:

My test cases for these are also getting thinner and thinner as we go on...

fn is_prime(num: u64) -> bool {
    if num == 0 {
        return false;
    }

    for i in 2..num {
        if num % i == 0 {
            return false;
        }
    }

    true
}

pub fn number_property(i: i64) -> (bool, bool, bool) {
    let is_even = i % 2 == 0;
    let is_divisible_by_ten = i % 10 == 0;

    let is_prime = if i > 0 { is_prime(i as u64) } else { false };

    (is_prime, is_even, is_divisible_by_ten)
}

#[cfg(test)]
mod tests {
    use crate::number_property;

    #[test]
    fn it_works_for_the_examples() {
        assert_eq!(number_property(7), (true, false, false));
        assert_eq!(number_property(10), (false, true, true));
    }

    #[test]
    fn it_works_for_negative_examples() {
        assert_eq!(number_property(-7), (false, false, false));
        assert_eq!(number_property(-10), (false, true, true));
    }
}
 
 

JavaScript

const primeEvenTenth = number => {
  let isPrime = number > 1;
  for (let x = 2; x < Math.sqrt(number) && isPrime; x++)
    if (number % x === 0)
      isPrime = false;

  return [
    isPrime,
    number % 2 === 0,
    number % 10 === 0
  ]
}

Live demo on CodePen.

 
 

:) I really enjoyed this.
It was a nice way to start the morning.
I did not know this existed and now I will look forward to this each morning to start my day or to give a break during the day <3
image

 

Perl solution, using the modulo operator.

#!/usr/bin/perl
use warnings;
use strict;

sub prime_even_10 {
    my ($x) = @_;
    return $x > 1 && !(grep 0 == $x % $_, 2 .. sqrt $x),
           0 == $x % 2,
           0 == $x % 10
}

use Test::More tests => 11;

is_deeply [prime_even_10(0)],  [!1,  1,  1];
is_deeply [prime_even_10(1)],  [!1, !1, !1];
is_deeply [prime_even_10(2)],  [ 1,  1, !1];
is_deeply [prime_even_10(3)],  [ 1, !1, !1];
is_deeply [prime_even_10(4)],  [!1,  1, !1];
is_deeply [prime_even_10(5)],  [ 1, !1, !1];
is_deeply [prime_even_10(6)],  [!1,  1, !1];
is_deeply [prime_even_10(7)],  [ 1, !1, !1];
is_deeply [prime_even_10(8)],  [!1,  1, !1];
is_deeply [prime_even_10(9)],  [!1, !1, !1];
is_deeply [prime_even_10(10)], [!1,  1,  1];
 

Ruby 2.6

require "minitest/autorun"
require "prime"

class ArbitraryPropertyNumber
  def initialize number
    @number = number
  end

  def prime?
    Prime.prime?(@number)
  end

  def even?
    @number.even?
  end

  def multiple_of_ten?
    @number % 10 == 0
  end
end

class ArbitraryPropertyNumberValidator
  def initialize number
    @number = number
  end

  def validate
    [number.prime?, number.even?, number.multiple_of_ten?]
  end

  private

    def number
      ArbitraryPropertyNumber.new(@number)
    end
end

class ArbitraryPropertyNumberValidatorTest < MiniTest::Test
  def test_first_element_is_true_when_number_is_prime
    assert_equal [true, false, false], ArbitraryPropertyNumberValidator.new(3).validate
  end

  def test_second_element_is_true_when_number_is_even
    assert_equal [false, true, false], ArbitraryPropertyNumberValidator.new(4).validate
  end

  def test_third_element_is_true_when_number_is_multiple_of_ten
    assert_equal [false, true, true], ArbitraryPropertyNumberValidator.new(20).validate
  end
end

 

I made the answer earlier and forgot to put it here after I solved it in CodeWars lmao
JavaScript answer, Big O time complexity of O(sqrt(n)) to find if N is a Prime Number.

const isPrime = num => {
    for(let i = 2, s = Math.sqrt(num); i <= s; i++)
        if(num % i === 0) return false; 
    return num > 1;
}

const numberProperty = n =>  [
   isPrime(n),
   n % 2 === 0,  
   n % 10 === 0,   
];
 

Elixir:

defmodule NumberCheck do
  require Integer

  @spec check(number) :: {prime :: boolean, even :: boolean, multiple_of_ten :: boolean}
  def check(number), do: {prime?(number), Integer.is_even(number), rem(number, 10) == 0}

  @spec prime?(number) :: boolean
  defp prime?(n) when n < 2, do: false
  defp prime?(n), do: not Enum.any?(2..(n |> :math.sqrt() |> floor()), &(rem(n, &1) == 0))
end
Classic DEV Post from Feb 5

Clean up your code with these tips!

Learning new patterns to make your code smaller, and more clear.

dev.to staff profile image
The hardworking team behind dev.to ❤️

Sore eyes?

dev.to now has dark mode.

Go to the "misc" section of your settings and select night theme ❤️