DEV Community

dev.to staff
dev.to staff

Posted on

5 2

Daily Challenge #202 - Complete the Pattern II

Implement a function pattern, which returns the following pattern for up to n number of rows. If n < 1 then it should return " " i.e. empty string. There are no whitespaces in the pattern.

Pattern:
1
22
333
....
.....
nnnnnn

Examples

pattern(4):
4321
432
43
4

pattern(11):
1110987654321
111098765432
11109876543
1110987654
111098765
11109876
1110987
111098
11109
1110
11

Tests

pattern(5)
pattern(8)
pattern(0.5)

Good luck!


This challenge comes from curious_db97 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!

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (11)

Collapse
 
avalander profile image
Avalander • Edited

Haskell

I'm writing this on my phone, so there are probably errors, I'll check it when I have access to a compiler.

pattern :: Int -> String
pattern n
  | n < 1     = " "
  | otherwise = pattern' n
  where
    pattern' n = unlines $ foldl folder [] $ map show [n,(n-1)..1]
    folder :: [String] -> String -> [String]
    folder [] x     = [x]
    folder (p:xs) x = (p ++ x) : p : xs

Edit: fixed issues after running it through a compiler.

Collapse
 
craigmc08 profile image
Craig McIlwrath

I do a lot of these challgnes on my phone. I use rextester.com/l/haskell_online_com... to test my Haskell code a lot.

Collapse
 
avalander profile image
Avalander

Thanks for the tip!

Collapse
 
savagepixie profile image
SavagePixie

Elixir

I based my solution on the examples, rather than the explanation.

  def pattern(n) when n < 1, do: " "
  def pattern(n) do
    list = for x <- 1..n, do: n..x
      |> Enum.to_list
      |> Integer.undigits
      |> Integer.to_string
    Enum.join(list, "\n")
  end
Collapse
 
rafaacioly profile image
Rafael Acioly

Python solution 🐍

EMPTY_RESPONSE = " "
MIN_DIGIT = 1

def pattern(value: int) -> str:
    if not value:
        return EMPTY_RESPONSE

    items = [str(i) for i in reversed(range(MIN_DIGIT, n + MIN_DIGIT))]

    return "".join(items)
Collapse
 
vidit1999 profile image
Vidit Sarkar

No new-line at the end.
C++

string pattern(int n){
    string pat = "";
    for(int i=1;i<n;i++){
        for(int j=n;j>=i;j--)
            pat += to_string(j);
        pat += "\n";
    }
    if(n > 0)
        pat += to_string(n);
    return pat;
}
Collapse
 
edh_developer profile image
edh_developer

Java, with the assumption that the function is actually taking an integer, not a float.

        private static String pattern(int x) {

                StringBuffer sb = new StringBuffer("\n"),
                        result = new StringBuffer();

                for (int i = 1; i <= x; i++) {
                        sb.insert(0,i);
                        result.insert(0,sb.toString());
                }

                return result.toString();
        }
Collapse
 
vidit1999 profile image
Vidit Sarkar

Here is a recursive approach using Python

def pattern(number, end=1):
    res = ''.join([str(i) for i in range(int(number), end-1, -1)])
    if end >= int(number):
        return res
    return res + '\n' + pattern(number, end+1)

One liner for the above

pattern = lambda number, end=1 : ''.join([str(i) for i in range(int(number), end-1, -1)]) + ('' if end >= int(number) else '\n' + pattern(number, end+1))
Collapse
 
vidit1999 profile image
Vidit Sarkar

Python one-liner

pattern = lambda number : '\n'.join([''.join([str(j) for j in range(int(number),i-1,-1)]) for i in range(1,int(number)+1)])
Collapse
 
kumsviswam profile image
Kumaravel_Viswam

Python

def pattern(num):
for i in range(num,0,-1):
print(''.join([str(x) for x in range(num,(num-i),-1)]))

Collapse
 
amit_savani profile image
Amit Patel

Ruby

def pattern(n)
    return "" if n < 1
    (1..n).to_a.reverse.each_with_index.map { |_, index| ((index+1)..n).to_a.reverse.join('') }.join("\n")
end

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

👋 Kindness is contagious

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

Okay