DEV Community

Kang-min Liu
Kang-min Liu

Posted on

Solving Perl Weekly Challenge 095 -- Palindrome Number and Stack

Two basic tasks from Perl Weekly Challenge 095. Palindrome number is also on leetcode: leetcode/palindrome-number. For languages that coerce values to Int / Str automatically, these two tasks does not require too much code.

TASK #1 › Palindrome Number

Submitted by: Mohammad S Anwar

You are given a number $N.

Write a script to figure out if the given number is Palindrome. Print 1 if true otherwise 0.

Example 1:

Input: 1221
Output: 1
Enter fullscreen mode Exit fullscreen mode

Example 2:

Input: -101
Output: 0, since -101 and 101- are not the same.
Enter fullscreen mode Exit fullscreen mode

Example 3:

Input: 90
Output: 0
Enter fullscreen mode Exit fullscreen mode

Solution #1 > Palindrome Number

It is pretty straightforward: simply convert the input number to string, then check whether that string is palindromic. Based on the example, all negative numbers are non-palindromic. I wonder numbers with decimal points are considered.

Let's say we are only dealing with integers. Here's the implementation in Raku.

sub is-palindrome-number (Int $n --> Bool) {
    return "$n" eq "$n".flip;
}
Enter fullscreen mode Exit fullscreen mode

The operation of flipping a string corresponds to the flip subroutine from Str in Raku. To convert a number $n to string, either $n.Str or "$n" would do. The part where it says (Int $n --> Bool) is the signature of this subroutine. It means that the subroutine takes one Int argument, and returns a Bool (Boolean values. True or False.)

TASK #2 › Demo Stack

Submitted by: Mohammad S Anwar

Write a script to demonstrate Stack operations like below:
push($n) - add $n to the stack
pop() - remove the top element
top() - get the top element
min() - return the minimum element

Example:

my $stack = Stack->new;
$stack->push(2);
$stack->push(-1);
$stack->push(0);
$stack->pop;       # removes 0
print $stack->top; # prints -1
$stack->push(0);
print $stack->min; # prints -1
Enter fullscreen mode Exit fullscreen mode

Solution #2 > Demo Stack

If we are just defining a class with the abovementioned methods, they can all be delegated to one subroutine in Raku. Let's use this IntStack as an example, which is stack that can hold a bunch of integers.

class IntStack {
    has Int @!store;

    method push(Int $n) {
        @!store.push($n);
    }
    method pop(--> Int) {
        @!store.pop;
    }
    method top(--> Int) {
        @!store.tail;
    }
    method min(--> Int) {
        @!store.min;
    }
}
Enter fullscreen mode Exit fullscreen mode

Which can be used like this:

    my $stack = IntStack.new;
    $stack.push(2);
    $stack.push(-1);
    $stack.push(0);

    $stack.pop;
    say $stack.top;  #=> -1

    $stack.push(0);

    say $stack.min;  #=> -1
Enter fullscreen mode Exit fullscreen mode

本文為《解 Perl Weekly Challenge 095 -- 回文數與堆疊》之英文版

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay