求和一个立方体的脸


13

手动求和Cubically多维数据集的脸是繁琐且耗时的,有点像用Cubically本身编写代码。

在“ 最有效的优化器”中,我要求您将ASCII转换为Cubically源。答案之一是使用多维数据集初始化序列,然后根据预初始化的多维数据集之和修改所得的多维数据集。此后,该方法已在许多与Cubub相关的程序中使用。测试新的初始化序列时,必须将所有面上的所有值加起来,通常需要两到三分钟。

您的任务是为我们自动化此过程!

您将接受两个输入,一个整数n和一个字符串c。这些可以从命令行参数,函数参数,标准输入,文件或它们的任何组合中读取。c将是一个立方大小的存储多维数据集,其大小n由解释程序漂亮地打印出来。

Cubically解释器在程序终止时将其多维数据集转储到STDERR,格式正确,易于查看。在Cubically解释器中运行一个空程序,然后打开debug部分以查看已初始化多维数据集的多维数据集转储。添加参数4以查看4x4x4或55x5x5等。

如果n为3,c将遵循以下格式(整数将是可变的):

   000
   000
   000
111222333444
111222333444
111222333444
   555
   555
   555

空格,换行符以及所有内容。如果n为4,c则将如下所示(也带有可变整数):

    0000
    0000
    0000
    0000
1111222233334444
1111222233334444
1111222233334444
1111222233334444
    5555
    5555
    5555
    5555

等等。

您的程序将输出六个整数。第一个整数将是顶面上所有数字的总和。

   000
   000          top face
   000
111222333444    left, front, right, and back faces, respectively
111222333444
111222333444
   555
   555          bottom face
   555

第二个整数将是左侧的总和,第三个是正面的总和,第四个是右侧,第五个是背面,第六个是底部。

所以如果n是3,c这是:

   242
   202
   242
000131555313
010121535343
000131555313
   424
   454
   424

您的程序将输出20 1 14 43 24 33

附加规则:

  • 输出整数必须用非整数字符定界。您也可以选择返回一个数组。
  • 您可以假设输入是正确的- n是一个整数,并且cCubically调试输出中的一个多维数据集。因此,如果nwas 3.0cwas foo bar,您的程序可能会中断并且仍然有效。
  • 您的程序只需要为n > 1和工作n < 1260。它可以(试图)处理更大或更小的立方体尺寸,但这不是必需的。

这是,因此最短的代码获胜!如果需要帮助,请随时在“ 聊天室 ”中提问


我们是否可以假设输入包含所有尾随空格以使其成为矩形?
fireflame241

@ fireflame241,如果您的意思是n每行后面有空格,则不行。它们不包含在转储中。
MD XF

1
我们确实需要一个“立方体”标签。
Xcoder先生17年

@ Mr.Xcoder状态完成:)我也一直在想,我还在研究另外四个Cubically挑战ATM。
MD XF

Answers:



5

Python 2中155个 150 147 123 121 120字节

可能会打很多球

编辑: -5字节,通过使用一种更好的方法来删除空白

编辑: -3字节感谢@Leaky Nun

编辑: -24字节,不删除空格

编辑:通过利用优先级-2个字节

lambda n,a:[sum(sum(map(int,b[j*n:][:n]))for b in a.split("\n")[i*n:][:n])for i in range(3)for j in range(~i%2,i%2*2+2)]

在线尝试!



3

外壳,15字节

3 秒和2 m

mṁṁiṁoC⁰TC⁰mf±¶

在线尝试!

说明

                  Takes input as two arguments, the first being n, the second, the cube
              ¶   Split second argument into a list of lines
           m      For each line
            f±    keep only the digits (remove spaces)
         C⁰       Cut into lists of length n
    ṁ             Map then concatenate
        T           transpose
     oC⁰            then cut into lists of length n
mṁṁi              Takes list of lists of strings (or, in Husk, a list of lists of lists of chars) and returns the sum of the digits in each list
m                 Map function over list of lists
 ṁ                  map then sum
  ṁ                   map then sum
   i                  convert character to integer

1
mṁṁi真的很好!
Zgarb

3

八度,64 59 54字节

@(c,n)sum(im2col(c'-48,[n n],'distinct'))([2 5:8 10])

在线尝试!

先前的答案:

@(c,n)sparse(kron((1:4)+[0;4;8],!!e(n)),1,c-48)([2 5:8 10])

在线尝试!

返回一个数组作为输出。


不是我所期望的,而是完全有效的,老实说,我根本没有期待任何答案。+1
MD XF

@MDXF您期望什么?
rahnema17年

我没想到缺少答案,也没有想到接受字符串的形式。但这只是Octave的方式。我从未使用过八度。
MD XF



1

Haskell,128个字节

s n c=filter(>=0)$map(\[x,y]->sum$map(\[v,w]->fromEnum((lines c)!!(x*n+v)!!(y*n+w))-48)$n%n)$3%4
n%m=sequence[[0..n-1],[0..m-1]]

接受带换行符的字符串。


1

PowerShell,236字节

param($n,$z)
function f($y){$y-replace' '-split'(.)'-ne''-join'+'|iex}
$a=$z-split"`n"
f $a[0..($n-1)]
$a[$n..(2*$n-1)]|%{$x="($('.'*$n))";$1,$2,$3,$4=$_-split$x-ne'';$h+=$1;$i+=$2;$j+=$3;$k+=$4}
$h,$i,$j,$k|%{f $_}
f $a[(2*$n)..(3*$n)]

在线尝试!

糟糕,这很长。但是,字符串的拆分和切片并不是PowerShell的强项之一,因此我认为这在一定程度上是可以预期的。还有-所以 许多。美元。

分别接受参数$n$z作为大小和立方网。然后构造一个整个使用的函数。在这里,我们要删除空格,在每个数字上分开,删除中间的空字符,将所有字符与一起连接+,然后执行结果语句以获取数字。例如,这变成"123"1+2+3执行时为6

下一行split是换行符上的输入多维数据集网,将结果存储到array中$a。然后,我们在第一$n行执行该功能,并输出立方体的顶面。

对于下一组,我们需要根据多维数据集大小拼接字符串。因此,我们遍历每一行,构造$x为适当的正则表达式模式(例如,对于大小$n=3"(...)"),根据该模式分割字符串,再次删除空元素,并将其存储到代表四个面的四个变量中。然后将这些字符串串连到hthrough上k

然后hk通过该函数传递下一行,以输出多维数据集的边(左,前,右,后)。

最后,我们$n通过函数运行最后几行,以输出多维数据集的底面。

所有数字都留在管道上,并且输出是隐式的。


1

APL(Dyalog Classic)30 27字节

{+/⍎¨6(⍺*2)⍴⍉⊃,⌿3⍺⍴⍵⊂⍨⍵∊⎕D}

@Adám减少了3个字节

是n 是c

说明

                        ⍵⊂⍨⍵∊⎕D   c partitioned by D (digits 0..9)
                    3⍺⍴           reshape into 3 by n matrix
                 ,⌿              concatenate on first axis (results in n vectors)
              ⍉⊃                  ravel transpose mix (results in a simple string with all digits in side order)
      6(⍺*2)⍴                     reshape into 6 by n squared matrix (one row per side)
 +/⍎¨                            sum rows execute each (execute will turn characters into numbers)

在线尝试!


对我来说看起来像59个字节。替换⎕U2286只会增加5个字节。
阿达姆(Adám)

不好的是,我在使用和不使用分区外壳的情况下都只使用经典版本的字节数。将编辑我的答案以使用迁移级别3 :)
吉尔(Gil)

1
此外,您还可以删除之间的空间3
亚当

1
(6,⍺*2) → 6(⍺*2)
亚当

1
IFAICT,你不需要,始终使用在拉威尔为了它的右边的参数。
2015年

0

大概是19个字节

r%0@%1@%2@%3@%4@%5@

从STDIN中获取多维数据集,并将大小作为解释程序的命令行参数。输出顶面,空字节,左面,空字节,...底面和空字节之和。

在线尝试!...显然在我的浏览器上将空字节显示为某种空白。

该语言不是针对此挑战的,但挑战是针对该语言的....它是否仍在作弊?;)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.