dev.to staff

Posted on

# Daily Challenge #193 - What's the Real Floor?

### Setup

Americans can be weird sometimes. The first floor of a building is typically referred to as the ground floor. In some American buildings, there is no 13th floor because of old superstitions.

Implement a function that takes an American floor passed as an integer and returns the actual floor number. Your function should also work for basement floors.

### Examples

getRealFloor(1) == 0
getRealFloor(0) == 0
getRealFloor(5) == 4
getRealFloor(15) == 13
getRealFloor(-3) == -3

### Tests

getRealFloor(3)
getRealFloor(7)
getRealFloor(20)
getRealFloor(1)
getRealFloor(-6)

Good luck!

This challenge comes from acadet on CodeWars. Thank you to CodeWars, who has licensed redistribution of this challenge under the 2-Clause BSD License!

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

SavagePixie • Edited

Elixir

I wasn't sure if the 13th floor thingie was also supposed to apply to basement levels. I wrote a solution that does it.

``````defmodule Floor do
def get_real_floor(n) when n == 0, do: 0
def get_real_floor(n) when n > 13, do: n - 2
def get_real_floor(n) when n > 0, do: n - 1
def get_real_floor(n) when n < -13, do: n + 1
def get_real_floor(n), do: n
end
``````

Amin

Elm

``````getRealFloor : Int -> Int
getRealFloor floor =
if floor > 12 then
floor - 2
-- 15 -> 13

else if floor > 0 then
floor - 1
-- 5 -> 4

else
floor
-- -5 -> -5
``````

Natamo

C#

Same as @savagepixie , not sure about negative superstitions, though I opted not to include it.

``````static int getRealFloor(int floor) {
if(floor >  0 ) { floor--; }
if(floor >= 13) { floor--; }
return floor;
}
``````

Vidit Sarkar

C++ one liner

``````int getRealFloor(int americanFloor){
// there is no 13th floor because of old superstitions, so no case of 13 and -13 is considered
return (americanFloor<1) ? (americanFloor>=-12) ? americanFloor : americanFloor+1 : (americanFloor<=12) ? americanFloor-1 : americanFloor-2;
}
``````

Here is what that thing actually is

``````if(americanFloor < 1){
if(americanFloor >= -12)
return americanFloor;
else
return americanFloor+1;
}
else{
if(americanFloor <= 12)
return americanFloor-1;
else
return americanFloor-2;
}
``````

Python

``````var = int(input("Enter the floor number: "))

if var <= 0:
print(var)
elif var > 13:
print(var-2)
else:
print(var-1)
``````

Nijeesh Joshy

## Ruby Oneliner

``````
def getRealFloor floor
floor <= 0 ? floor : floor > 13 ? floor - 2 : floor - 1
end
``````

## Some tests

``````
require "test/unit"

class GetRealFloorTest < Test::Unit::TestCase
def test_get_real_floor
assert_equal 0,  get_real_floor(0)
assert_equal 2,  get_real_floor(3)
assert_equal 6,  get_real_floor(7)
assert_equal 18, get_real_floor(20)
assert_equal 0,  get_real_floor(1)
assert_equal -6, get_real_floor(-6)
end
end

#1 tests, 6 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications

``````

Bk Aguilar • Edited

In JavaScript

``````
const getRealFloor = n => {
return n <= 0 ? n : n > 13 ? n-2 : n-1;
}

``````

Jay

Rust pattern matching

``````fn get_real_floor(n: i32) -> i32 {
match n {
0 => 0,
1..=12 => n-1,
13..=std::i32::MAX => n - 2,
_ => n
}
}
``````

Steven Bey

return floor - (floor < 1 ? 0 : floor < 13 ? 1 : 2);