缩放平方字符串

时间:2019-07-15 16:32:55

标签: string scala count

再次进行CodeWars挑战。

今天我对此有疑问:

” 系统会为您提供n行的字符串,每个子字符串的长度为n个字符。例如:

s = "abcd\nefgh\nijkl\nmnop"

我们将研究此字符串平方的“水平”和“垂直”缩放。

字符串的k水平缩放包括将字符串的每个字符(“ \ n”除外)复制k次。

示例:s的2水平缩放:=> "aabbccdd\neeffgghh\niijjkkll\nmmnnoopp" 字符串的垂直缩放比例是将平方字符串的每个部分重复v倍。

示例:s的2垂直缩放:=> "abcd\nabcd\nefgh\nefgh\nijkl\nijkl\nmnop\nmnop" 函数scale(strng,k,v)将执行k水平缩放和v垂直缩放。

示例:a = "abcd\nefgh\nijkl\nmnop" scale(a, 2, 3)->“ aabbccdd \ naabbccdd \ naabbccdd \ neeffgghh \ neeffgghh \ neeffgghh \ niijjkkll \ niijjkkll \ niijjkkll \ nmmnnoopp \ nmmnnoopp \ nmmnnoopp”

整个操作方法必须包含在一个称为“ scale”的函数中

我的问题是,通过实验我已经达到了某个点,在那个点我不知道该如何再次前进。我有一个包含多个字符的列表,但是我不知道如何将它们重新组合在一起,因此我可以根据说明使用垂直缩放再次将其相乘

P.S。只是澄清一下,我并没有单独研究函数本身,而是在def main中尝试使用随机字符串尝试达到所需的输出。

我的计划是仅在对随机字符串的输出感到满意并且满足程序假设的前提下开发函数本身。

如果需要的话,我会提供测试,但我之所以没有这样做,是因为我认为我的程序还不成熟,因此没有必要采取这种措施。

所有新想法//闯入我已经创建的东西都非常受欢迎,因为我不得不承认我已经走到了尽头。

我当前的输出:

Vector(List(aa), List(bb), List(cc), List(dd), /, List(nn), List(ee), List(ff), List(gg), List(hh), /, List(nn), List(ii), List(jj), List(kk), List(ll), /, List(nn), List(mm), List(oo), List(pp))

object Kata {

  def scale(xs: String, k: Int, n: Int): String = ???

  def main(args: Array[String]): Unit = {
    println("abcd/nefgh/nijkl/nmop".map(x=>(if(x != '/'){x.toString()*2}else'/')).map(x=> if(x != '/')List(x)else "/"))
  }
}

1 个答案:

答案 0 :(得分:1)

您似乎将换行符\n与某种双字符定界符/n的想象形式混淆了。返回并重新阅读挑战。您只需将每个字符乘以第一个Int参数,并将每行乘以第二个Int参数。

def scale(s :String, x :Int, y:Int) :String =
  s.split("\n")
   .map(_.map(_.toString*x).mkString("","","\n") * y)
   .mkString

测试:

val s = "abcd\nefgh\nijkl\nmnop"
scale(s, 3, 2)
//res0: String =
//"aaabbbcccddd
//aaabbbcccddd
//eeefffggghhh
//eeefffggghhh
//iiijjjkkklll
//iiijjjkkklll
//mmmnnnoooppp
//mmmnnnoooppp
//"