Complete The Pattern #6

Complete The Pattern #6 - Odd Ladder

Task:

You have to write a function pattern which creates the following pattern (see examples) up to the desired number of rows.

  • If the Argument is 0 or a Negative Integer then it should return "" i.e. empty string.

  • If any even number is passed as argument then the pattern should last upto the largest odd number which is smaller than the passed even number.

Examples:

pattern(9):

1
333
55555
7777777
999999999

pattern(6):

1
333
55555

Note: There are no spaces in the pattern

Hint: Use in string to jump to next line

using System;
using System.Collections.Generic;
using System.Linq;

public static class Kata
{
  public static string OddLadder(int n)
        {
            string result = string.Empty;
           
                List<int> list = new List<int>();
                for (int i = 1; i <= n; i = i + 2)
                {
                    list.Add(i);
                }
                result = string.Join("
", list.Select(item => Selector(item)));
            
            return result;
        }

        public static string Selector(int number)
        {
             string str = string.Empty;
            for (int i = 0; i < number; i++)
            {
                str = str + number.ToString();
            }
            return str;
        }
}

Linq中的Select

//public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector);

Func<TSource, TResult>泛型委托
//public delegate TResult Func<in T, out TResult>(T arg)

其他人的解法:

System.Linq命名空间下的Enumerable类的使用

using System;
using System.Linq;

public static class Kata
{
  public static string OddLadder(int n)
  {
    if (n <= 0) return String.Empty;
    
    var oddNumbers = Enumerable.Range(1, n).Where(i => i % 2 == 1);
    var lines = oddNumbers.Select(i => String.Join("", Enumerable.Repeat(i.ToString(), i)));
    
    return String.Join(Environment.NewLine, lines);
  }
}
/// <summary>
/// Generates a sequence of integral numbers within a specified range. 
/// </summary>
/// <param name="start">The value of the first integer in the sequence.</param>
/// <param name="count">The number of sequential integers to generate.</param>
/// <returns></returns>
public static IEnumerable<int> Range(int start, int count)
{

}

/// <summary>
/// Generates a sequence that contains one repeated value.
/// </summary>
/// <typeparam name="TResult">The type of the value to be repeated in the result sequence.</typeparam>
/// <param name="element">The value to be repeated.</param>
/// <param name="count">The number of times to repeat the value in the generated sequence.</param>
/// <returns></returns>
public static IEnumerable<TResult> Repeat<TResult>(TResult element, int count)
{
}
原文地址:https://www.cnblogs.com/chucklu/p/4613934.html