给定一个数字N,输出一个NxN直角三角形,其中每行i填充数字,最大为i。
例
n = 0
(无输出)
n = 4
1
1 2
1 2 3
1 2 3 4
n = 10
1
1 2
1 2 3
.
.
.
1 2 3 4 5 6 7 8 9 10
(无需对齐)
n = N
1
1 2
1 2 3
.
.
.
1 2 3 4 .... N
每行末尾没有尾随空格。
获胜的字节数最少,并且不允许出现标准漏洞。
给定一个数字N,输出一个NxN直角三角形,其中每行i填充数字,最大为i。
例
n = 0
(无输出)
n = 4
1
1 2
1 2 3
1 2 3 4
n = 10
1
1 2
1 2 3
.
.
.
1 2 3 4 5 6 7 8 9 10
(无需对齐)
n = N
1
1 2
1 2 3
.
.
.
1 2 3 4 .... N
每行末尾没有尾随空格。
获胜的字节数最少,并且不允许出现标准漏洞。
Answers:
-t标志为+2或+3 )好吧,显然我没有充分利用乔的全部潜力。当我第一次发布时,这是可能的。
\AR
在此,R给出从0到n的范围(排除)。然后\A采用它的连续前缀(A是身份函数)。例子:
有-t标志(请注意:即使没有标志,这现在也是标准输出):
   (\AR)5
0
0 1
0 1 2
0 1 2 3
0 1 2 3 4
   \AR5
0
0 1
0 1 2
0 1 2 3
0 1 2 3 4
   \AR2
0
0 1
   \AR1
0
   \AR0
没有它:
   \AR5
[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4]]
   (\AR)5
[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4]]
   \AR2
[[0], [0, 1]]
   \AR1
[[0]]
   \AR0
[]
规则有所改变。我的旧代码在N = 0时无法正常运行。而且,现在输出可能只是嵌套列表,因此-t可以将其删除。
1R1+R
现在,Rn给出从0到n的范围(不包括)。如果给定0,则返回一个空列表。  1+向该范围的每个元素加1。1R将值映射到1到x的范围。空别名在映射时返回空列表。
输出示例:
   1R1+R0
[]
   1R1+R5
[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5]]
更新:我刚刚发现了一些东西。该功能会自动映射到0级元素。以下示例与-tflag一起运行。
   1R1+R3 5 8
1
1 2
1 2 3
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
1 2 3 4 5 6 7
1 2 3 4 5 6 7 8
旧:5个字节(带有-t标志)
1R1R
这是一个匿名函数,它接受一个数字,创建一个从1到N(1Rn)的列表,并将这些值映射到先前的范围,从而为范围1到N的每个项提供从1到x的范围。
该-t标志将输出显示为类似J的表。
   1R1R5
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
注意:该语言是非常新的语言,并不完整,但是在此挑战之前已发布了最新版本。
⍪⍳¨⍳⎕
创建一个向量1..n,并为每个元素创建另一个向量。
然后⍪在所有向量中组成一列。这避免了尾随空白的问题。
较旧的解决方案:
{⎕←⍳⍵}¨⍳⎕
创建一个向量1..n
{⎕←⍳⍵}是一个函数,它为每个(¨)元素在单独的行上输出向量1..n
遗憾的是,无法在tryapl.org上尝试使用此命令,因为⎕←在该处不起作用。
编辑2:Ismael Miguel建议从输入中读取而不是定义函数,因此PHP的分数现在是53个字节:
for($a=1;@$i++<$n=$argv[1];$a.=" ".($i+print"$a\n"));同样,如果将PHP配置为忽略错误(52字节),则可以进行改进:
for($a=1;$i++<$n=$argv[1];$a.=" ".($i+print"$a\n"));
for($a=1;$i++<$n=$_GET[n];$a.=" ".($i+print"$a\n"));编辑:奥斯汀建议在评论中使用60字节版本:
function f($n){for($a=1;@$i++<$n;$a.=" ".($i+print"$a\n"));}如果我们不显示PHP错误(59个字节),则可以改进:
function f($n){for($a=1;$i++<$n;$a.=" ".($i+print"$a\n"));}$a存储将要打印的下一行,并且每次打印时都将一个空格和下一个数字(print始终返回1)连接到该行。
递归函数(65字节):
function f($n){$n>1&&f($n-1);echo implode(' ',range(1,$n))."\n";}
function f($n){$n>1&&f($n-1);for(;@$i++<$n;)echo$i,' ';echo"\n";}   // Using @ to hide notices.较短的递归函数,禁用错误报告(64字节):
function f($n){$n>1&&f($n-1);for(;$i++<$n;)echo$i,' ';echo"\n";}甚至更短的递归函数,禁用错误报告,并且在实际输出之前为空行(62字节):
function f($n){$n&&f($n-1);for(;$i++<$n;)echo$i,' ';echo"\n";}仅出于娱乐目的,非递归功能:
function f($n){for($i=0;$i<$n;print implode(' ',range(1,++$i))."\n");}    // 70 bytes
function f($n){for(;@$i<$n;print implode(' ',range(1,@++$i))."\n");}      // 68 bytes, hiding notices.
function f($n){for(;$i<$n;print implode(' ',range(1,++$i))."\n");}        // 66 bytes, error reporting disabled.for($a=1;@$i<$n;$a.=" ".(@++$i+print"$a\n"));
                    for($a=1;@$i++<$n;$a.=" ".($i+print"$a\n"));(44个字节)
                    function f($n){for($a=1;@$i++<$n;$a.=" ".($i+print"$a\n"));},这是60个字节。
                    for($a=1;$i++<$n=$_GET[n];$a.=" ".($i+print"$a\n"));->试试这个(完整代码,使用n带有数字的url参数)
                    ri{),:)S*N}/
运作方式:
ri{       }/     "Run the block input number of times with iteration index from 0 to N-1";
   )             "Increment the iteration index (making it 1 to N)";
    ,            "Get an array of 0 to iteration index";
     :)          "Increment each of the above array members by 1";
       S*        "Join all above array numbers with space";
         N       "Add a new line. After all iterations, things are automatically printed";
VQjdr1hhN
真的以为可以做得更短,但事实并非如此。
在线尝试。
            Q = input()
VQ          For N in [0, 1, ..., Q-1]:
    r1hhN       create list [1, ..., N+1+1-1]
  jd            print joined with spaces
VQaYhNjdY。如果只a返回的列表,然后像VQjdaYhN将8
                    a简要地用于返回附加列表。
                    N+1+1-1吗?
                    r是Python范围函数,因此是-1(r1N创建list [1, 2, ..., N-1])。但是在循环的第N次迭代中,我需要列表[1, 2, ..., N+1],因此需要添加2到N。r1hhN直接翻译成range(1, N+1+1)。另一种可能性是r1+N2(range(1, N+2))。
                    mhdhN,但这是一种完全不同的方法。
                    如此简单的任务,我想知道是否可以在JS中使其更短(更新:是,使用递归)
递归49
f=n=>alert((r=w=>n-i++?w+'\n'+r(w+' '+i):w)(i=1))迭代52
f=n=>{for(o=r=i=1;i++<n;o+='\n'+r)r+=' '+i;alert(o)}这在Java中简直令人惊讶。
void a(int a){String b="";for(int c=0;c++<a;System.out.println(b+=(c>1?" ":"")+c));}缩进:
void a(int a){
    String b="";
    for(int c=0;
        c++<a;
        System.out.println(
                b+=(c>1?" ":"")+c
        ));
}1字节归功于Bigtoes / Geobits
b+=...成println(b+=...)。
                    Python 2- 62 54 65字节
def f(n):
 for x in range(n):print' '.join(map(str,range(1,x+2)))n应作为程序输入,而不是在变量中初始化。
                    作为默认的单子动词。
[:":\1+i.
i. y–从0到的数字y - 1。1 + i. y–从1到   的数字y。": y– y表示为字符串的向量。":\ y–每个前缀y表示为一个字符串。":\ 1 + i. y–从1到的数字的每个前缀y表示为字符矩阵。&1>:&:&)?;1\
(?v:n" "o1+>}:{:@
ao\~1+
再次,> <>在另一个数字打印练习中表现出色。运行带有-v标志的输入,例如
py -3 fish.py -v 4
&               Put n in register
1               Push 1 (call this "i")
[outer loop]
:&:&)?          If i > n...
;                 Halt
1                 Else push 1 (call this "j")
[inner loop]
}:{:@(?         If j > i...
~1+ao             Pop j, print newline, increment i and go to start of outer loop
:n" "o1+          Else print j, print a space, increment j and go to start of inner loop
b(n,c){if(n){b(n-1,32);printf("%d%c",n,c);}}r(n){if(n){r(n-1);b(n,10);}}
这将创建一个r(n)可以通过以下方式使用的函数:
main(){ r(5); }
观看实际操作,请访问tutorialspoint.com
它需要一些技巧,很容易解释。我认为可以大大改善。
b(n,c){if(n){b(n-1,32);printf("%d%c",n,c);}}r(n){if(n){r(n-1);b(n,10);}}
                    >>> def p(N):print'\n'.join(' '.join(map(str,range(1,i+2)))for i in range(N))
... 
>>> p(5)
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
p。在另一方面,你可以删除两个空间-一个与print和'\n'之间的其他)))和for。
                    def p(N):print'\n'.join(' '.join(map(str,range(1,i+2)))for i in range(N))
                    import string
N,s=int(input()),list(string.digits)
for i in range(1,N+1):
    print(' '.join(s[1:i+1]))
for i in range(int(input())):print(' '.join("123456789"[:i+1]))-请注意,字符串被视为列表。
                    func r(n int)(s string){s=string(n+48);if n!=1{s=r(n-1)+" "+s};println(s);return}func r(n int) (s string) {
    // Convert n to a string, we do not have to initialize s since
    // we hijacked the return value.
    // Numbers in the ascii table starts at 48
    s = string(n | 48)
    // Unless we are on our last iteration, we need previous iterations,
    // a space and our current iteration
    if n != 1 {
        // Collect the result of previous iteration for output
        s = r(n-1) + " " + s
    }
    println(s)
    // We can use a naked return since we specified the
    // name of our return value in the function signature
    return
}如果需要处理N> 9,则可以在78个字节处使用以下内容,但是需要导入fmt包。
func r(n int)(s string){s=Sprint(n);if n!=1{s=r(n-1)+" "+s};Println(s);return}
如果我们包含导入语句,那么我现在回到了最初的状态 93 92 90字节
import."fmt";func r(n int)(s string){s=Sprint(n);if n>1{s=r(n-1)+" "+s};Println(s);return}
在此处在线测试:http://play.golang.org/p/BWLQ9R6ilw
fmt此处的版本为:http://play.golang.org/p/hQEkLvpiqt
!=改为来保存一个字节>。
                    import虽然声明
                    ZX Basic每个关键字使用1个字节(所有大写单词),因此有助于将字节大小减小一点...
1 INPUT n:FOR i=1 TO n:FOR j=1 TO i:PRINT j;" ";:NEXT j:PRINT:NEXT i
使用n = 8

VAL("1")(6个字节,VAL为1)插入了1(7个字节))
                    // 90 characters
f(int n){int a=1,b;for(;n--;++a){for(b=0;b<a;++b)printf("%c%d",(!!b)*' ',b+1);puts("");}}消除关于的困惑puts("");。这只是打印一个换行符(如看到这里):
请注意,put不仅与fputs不同,因为它使用stdout作为目标,而且还会在末尾自动添加换行符(fputs不会)。
我使用@TheBestOne的java算法使它略短一些:
// 89 characters
f(int a){char b[999]="",*p=b+1;int c=0;for(;a--&&(sprintf(b,"%s %d",b,++c)&&puts(p)););}puts("");什么也没做。您可以使用char b[999]=""而不是char b[999]={0}保存1个字符。
                    puts("");打印换行符。
                    作为返回字符串的匿名函数编写的,该规范似乎并未禁止该字符串。
n=>String.Join("\n\n",Enumerable.Range(1,n).Select(l=>String.Join(" ",Enumerable.Range(1,l))))这是非公开版本(注释按BDCA顺序读取):
n =>
    String.Join("\n\n",                    //...then join it together with newlines.
        Enumerable.Range(1, n).Select(l => //For each l from 1 to n, ...
                String.Join(" ",              //...and join it with spaces, ...
                    Enumerable.Range(1, l)    //...get the range from 1 to l, ...e=enumFromTo 1
f=putStr.unlines.map(unwords.map show.e).e
无点样式。用法示例:
Prelude> f 5
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
e=enumFromTo 1可以节省7个字节。
                    enumFromTo 1,我也必须给主函数起一个名字,所以它是5个字节。如果没有名称,它将是一个let构造:let e=enumFromTo 1 in (putStr.unlines.map(unwords.map show.e).e) 5
                    Print@Row[Range@i," "]~Do~{i,#}&
TableForm[Range/@Range@#]&样
                    Grid[Range/@Range@#]&
                    Grid。)