打印N平方


57

编写一个从stdin或函数参数中获取非负整数N的程序或函数。它必须打印或返回一个空心的ASCII艺术方块的字符串,该字符串的侧面各有N个数字N的副本。

特别:

如果N为0,则不使用N的副本,因此应该没有输出(或只有一个尾随的换行符)。

如果N为1,则输出为:

1

如果N为2

22
22

如果N为3

333
3 3
333

如果N为4

4444
4  4
4  4
4444

如果N为5

55555
5   5
5   5
5   5
55555

模式将持续69

如果N为10,则输出为:

10101010101010101010
10                10
10                10
10                10
10                10
10                10
10                10
10                10
10                10
10101010101010101010

请注意,这实际上不是正方形。它高10行,但宽20列,因为10它长两个字符。这是有意的。关键是“正方形”的每一侧都包含N的N个副本。因此,从9技术上讲,所有其他输入都是ASCII矩形。

例如,如果N为23,则输出为:

2323232323232323232323232323232323232323232323
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
2323232323232323232323232323232323232323232323

下面是所需的输出Pastebins 99100111,和123(他们可能看错了在浏览器中,但在文本编辑器,他们会看起来是正确的)。1000对于Pastebin ,输出的结果很大,但它将有1000行和4000列。具有4个或更多数字的数字必须像较小的数字一样工作。

细节:

  • N必须以通常的十进制数字表示形式书写,没有+符号或其他非数字。
  • 空心区域只能填充空格。
  • 任何行都不能有前导或尾随空格。
  • 允许在方块的最后一行之后加上一个换行符。
  • 迎接挑战之后编写的语言是受欢迎的,只是没有资格获胜
  • 以字节为单位的最短代码胜出!

18
n = 10的平方看起来比n = 5的平方更大。万岁,非方形字体!
nneonneo

我们可以将整数作为字符串吗?
亚当

1
@Nᴮᶻ是的,您可以
卡尔文的爱好

Answers:


6

Jolf,31 27 25 23字节

?=1i1ρρ,aii+*3έέi*li

这是用ISO-8859-7编码编码的,并且包含不可打印的内容,因此这是一个十六进制转储:

0000000: 3f3d 3169 31f1 f12c 6169 692b 2a33 dd05  ?=1i1..,aii+*3..
0000010: dd69 052a 056c 69                        .i.*.li

在线尝试该提琴或立即验证所有测试用例(使用完整运行按钮)

退出时会出现错误,n = 0,默认情况下允许。

非常感谢Conor打高尔夫球4 6!个字节。inb4划掉四个仍然看起来像四个注释

说明

?=1i1ρρ,aii+*3έ\x05έi\x05*\x05li

?=1i1                             if input is 1 return 1, otherwise...
       ,aii+*3έ\x05               draw an input x input hollow box of tabs
      ρ            έi             replace all tabs with input
     ρ               \x05*\x05li  replace all spaces with spaces * length of input

您是如何生成六角转储的?
科纳·奥布莱恩

@CᴏɴᴏʀO'Bʀɪᴇɴ我用xxd。您可以使用将其反转xxd -r
意大利面条

16

切碎的 317字节

在提出问题时,我可能会炫耀我的新“纯粹主义者”语言。

@ f x
 d x
 f
 @ f x
+ x y
 +
  i x
 @ + y
 h x
} x y
 e 1
 i 1
 d y
 d 1
 d x
 } x y
e 0
e 2
i 2
i 2
e 6
+ 2 2 6
+ 2 6 6
e T
+ 2 2 T
+ 6 T T
e N
t N
e P
+ T 0 P
e L
i L
*
 e x
 *
  + P x x
 @ * T
 h x
~
 } N P 0
 d 0
 i L
 * P
 ~
~
#
 p N
-
 s 6
_
 @ - L
$
 #
 @ _ n
 #
 s 2
@ # N
e n
+ N 0 n
d n
d n
s 2
@ $ n
@ # N

(绝对适用于v1.0.0

除增加和减少外,Shtriped中没有内置任何数学运算。也没有循环或条件,因此所有这些东西都需要在每个程序中从头开始构建。

那就是我的程序所做的,例如@本质上是一个for循环,+一个加法函数,}>=。实际输出仅在程序的最后8行中产生。

在Shtriped中也没有字符串。您可以输入和输出字符串,但是它们在内部都表示为只能递增和递减的任意精度整数。因此,没有一种简单的方法来获得10用于在正方形中心填充正确数量的空格的字符串的长度。我必须将~有效计算的函数拼凑在一起,floor(log10(N)) + 1以找到十进制的N的长度。

通过重新安排在何处以及如何使用哪些变量,可能可以多做一些事情,但不必更多。Shtriped的固有局限性无法解决。(无论如何,这从来都不是一种高尔夫语言。)

注释的代码(反斜杠是注释):

@ f x \ function that calls f() x times, returns 0
 d x
 f
 @ f x
+ x y \ returns x + y
 +
  i x
 @ + y
 h x
} x y \ returns 1 if x >= y, else 0
 e 1
 i 1
 d y
 d 1
 d x
 } x y

\ declare and set up variables for the numbers 0, 2, 6, 10
e 0 \ 0 is used to help copy values via +
e 2 \ 2 is used for printing newlines
i 2
i 2
e 6 \ 6 is used for printing spaces
+ 2 2 6
+ 2 6 6
e T \ 10 is used for finding the string length of N
+ 2 2 T
+ 6 T T

e N \ declare N
t N \ and set it to what the user inputs

\ all the code from here to the last ~ is for finding the length of N as a string

e P \ P is the current power of 10 (10, 100, 1000...), starting with 10
+ T 0 P
e L \ L will be the length of N in decimal digits
i L

* \ function that returns P times 10 by adding P to itself 10 times
 e x
 *
  + P x x
 @ * T
 h x

~ \ function that increments L and multiplies P by 10 until N < P, at which point L will be the string length of N
 } N P 0 \ the 0 variable can be used as a dummy now since we don't need it anymore
 d 0
 i L
 * P \ multiply P by 10 to 
 ~
~

\ helper functions for displaying the output
# \ simply prints N as a decimal integer
 p N
- \ prints a single space
 s 6
_ \ prints L spaces (L = digit length of N)
 @ - L
$ \ prints one of the central N-2 lines of the square
 #
 @ _ n
 #
 s 2

\ finally, call these functions to display the output
@ # N \ print N copies of N (top line of square)
e n \ declare n and set it to N - 2
+ N 0 n
d n
d n \ if N was 0 or 1 the program will end here, having printed nothing if 0 or just the top line if 1
s 2 \ print a newline
@ $ n \ print the central line of the square N-2 times
@ # N \ print N copies of N (bottom line of square)

\ the output always prints without a trailing newline

8

严重的是32 31 30 29字节

╩╜ó$╝╜Dbu╜╛*n╜¬;╛l*' *╛+╛@+n(

在线尝试!

说明:

╩╜ó$╝╜Dbu╜╛*n╜¬;╛l*' *╛+╛@+n(
╩                              push each input to its own register
                                 (we'll call register 0 "n")
 ╜                             push n to the stack
  ó                            terminate if 0
   $╝                          push str(n) to register 1
                                 (we'll call register 1 "s")
     ╜Dbu╜╛*n                  make min(2,n) copies of s*n (the top and bottom)
                                 (this avoids an extra copy if n is 1)
             ╜¬;               push n-2 twice
                ╛l*' *         push (n-2)*len(s) spaces
                      ╛+╛@+    put s on the front and end of the string (a middle piece)
                           n   push (n-2) total copies of the middle piece
                            (  bring the top piece to the top

5

JavaScript(ES6),73 82 78字节

由于@ user81655,节省了a4字节

n=>(a=n[r='repeat'](n),n<2?a:a+`
${n+' '[r](n.length*(n-2))+n}`[r](n-2)+`
`+a)

输入字符串,而不是数字。

在线尝试(所有浏览器都可以使用)


您可以替换*(n-2)使用*~-~-n,以节省一个字节。
尼尔,

@ user81655谢谢,已经修复了它
Downgoat

5
@Neil谢谢,但是不幸的是这似乎没有保存任何字节
Downgoat

对不起,我一定算错了。
尼尔,

5

MATL34 29 26字节

:G\2<t!+gQ"@!2GVYX1GVnZ"YX

这适用于该语言/编译器的当前版本(13.0.0)

在线尝试!

:            % array [1,2,...,N], where N is input, taken implicitly
G\           % modulo N. Gives [1,2,...,N-1,0]
2<           % smaller than 2? Gives [1,0,...,0,1]
t!           % duplicate, transpose
+            % addition with broadcast. Gives 2D array with nonzeros in the border 
             % and zeros in the interior
gQ           % convert to logical, add 1: twos in the border, ones in the interior
"            % for each column of that array (note the array is a symmetric matrix,
             % so columns and rows are the same)
  @!         %   push column. Transpose into a row        
  2GVYX      %   replace twos by the string representation of N, via regexp
  1GVnZ"YX   %   replace ones by as many spaces as length of that string, via regexp
             % end for each, implicitly
             % display stack contents, implicitly

5

T-SQL / SQL Server的2012+,167个 161字节

DECLARE @ INT = 6;

SELECT IIF(u IN(1,s),REPLICATE(s,s),CONCAT(s,REPLICATE(' ',s-2*LEN(s)),s))
FROM(SELECT @ s)z CROSS APPLY(SELECT TOP(s)ROW_NUMBER()OVER(ORDER BY 1/0)u FROM sys.messages)v

输出:

666666 
6    6 
6    6  
6    6  
6    6 
666666 

LiveDemo

输入所需的大小,然后单击Run query以获取文本表示形式。

请注意,此演示不显示定宽字体。因此7比厚1


编辑:

如果我们将输入视为字符串:

DECLARE @ VARCHAR(10) = '7';

SELECT IIF(u IN(1,s),REPLICATE(s,s),s+REPLICATE(' ',s-2*LEN(s))+s)
FROM(SELECT @ s)z CROSS APPLY(SELECT TOP(s+0)ROW_NUMBER()OVER(ORDER BY 1/0)u FROM sys.messages)v

LiveDemo2


很好,我学会了如何缩短一些其他脚本。不知道1/0和sys.messages的顺序
t-clausen.dk

在侧面说明中。计数字节时是否真的应该包含输入参数的声明?
t-clausen.dk's

@ t-clausen.dk当使用SQL时,我不确定计数规则,但是我会询问meta并告知您。
lad2025 '16

1
您可以通过使s varchar(像这样的“ 6”)来节省一些字节,然后可以用+代替concat。
t-clausen.dk,2016年

1
似乎您缺少一些空格。我相信您可以通过写(s-2)来解决它
t-clausen.dk,2016年

4

朱莉娅78字节

n->(s="$n";(p=println)(s^n);[p(s*" "^(n-2)endof(s)*s)for i=2:n-1];n>1&&p(s^n))

这是一个匿名函数,它接受一个整数并将ASCII矩形打印到STDOUT。要调用它,请将其分配给变量。

取消高尔夫:

function f(n)
    # Save a string version of n
    s = "$n"

    # Print the top line
    println(s^n)

    # Print each middle line
    [println(s * " "^(n-2)endof(s) * s) for i = 2:n-1]

    # Print the last line if there is one
    n > 1 && println(s^n)
end

在线尝试


4

Ruby,100字节

->n{s="";n.times{|i|s+=(i<1||i>n-2?"#{n}"*n :"#{n}#{' '*[(n-2)*n.to_s.size,0].max}#{n}")+$/};puts s}

太糟糕了,我什至无法击败JS。任何进一步的帮助打高尔夫球,将不胜感激。

这是一个或多或少的版本:

def f(n)
    n.times{|num|
        if num == 0 || num == n-1
            s += "#{n}" * n
        else
            s += "#{n}"+" "*[(n-2)*n.to_s.length,0].max+"#{n}"
        end
        s += "\n"
    }
    puts s
end

1
n.to_s由于使用了太多变量,您可能想为其分配一个变量,从而为您m*n提供第一部分和m+" "*[(n-2)*m.length,0].max+m第二部分。
价值墨水

我根据此答案创建了一个75字节的版本。(JavaScript当前为78个字节)在线尝试!
benj2240 '18


4

C ++ 14,156个字符

我认为这是一个非常酷的解决方案,尽管显然不能在这里击败大多数其他项目。

#define f for(i=0;i++<n;c<<t);
[](string t){auto&c=cout;int n=stoi(t),i;f c<<'\n';for(i=0;++i<n-1;c<<t,c.width(~-n*size(t)+1),c.fill(0),c<<t+'\n');if(n-1)f}

取消高尔夫:

#define f for ( i = 0; i++ < n; c << t ); // print top/bot row
[](string t) {
  auto& c = cout;
  int n = stoi(t), i;
  f // print first row
  c << '\n'; // kind of annoying but no way to get rid of (yes I tried
             // c << '\n'+t instead of c << t+'\n')
  for ( i = 0; ++i < n - 1; ) {
    c << t; // output the number
    // then we we get the width of necessary spaces
    c.width(~-n*size(t)+1); // Equivalent to (n-1)*size(t) + 1, but we save
                            // two bytes since ~- takes precedence over
                            // multiplication
    c.fill(0); // fill with spaces, ' ' == 0
    c << t+'\n';
   }
   if ( n-1 ) f // This if statement is dissapointing 
}

和往常一样,调用函数使用 [](string t) { ... }("10");


4

TSQL,112个 104字节

DECLARE @ varchar(10)='12'

PRINT REPLICATE(@,@)+ISNULL('
'+REPLICATE(@+ISNULL(SPACE((@-2)*len(@))+@,'')+'
',@-2)+REPLICATE(@,@),'')
1. generating first line
2. adding hollow lines + line breaks
3. adding last line(when needed)

您能为我们中不了解T-SQL的人添加解释吗?

@cat写了一个简短的解释,其中包括一个小提琴
t-clausen.dk

有趣,谢谢!看来您的字节数可能已关闭:在此处检查

@猫谢谢。我一直在寻找一个链接。但是,FROM的最后一行只是向X声明并分配值,我听说分配值和声明变量不起作用。如果我错了,请纠正我。我试图通过这种变量分配来节省一些字节。普通变量的前缀为@,每次使用时都会额外
占用

1
@mazzy是的,它确实是-3.添加最后一行(必要时)
t-clausen.dk

3

Minkolang 0.15、57字节

nd?.d1-2&N.$z01FlOz2-[lz6Z" "I2-z2-*Dz6Z$O]01F.
z[z6Z]$Of

在这里尝试!

说明

n                Read number from input
 d?.             Stop if n=0, continue otherwise
    d1-2&N.      Print 1 and stop if n=1, continue otherwise
           $z    Store top of stack in register (z, which is n)

01F                                   Gosub to second line
   lO                                 Print newline
     z2-                              Push value from register and subtract 2
        [                             Pop k and run body of for loop k times
                                      (Does not run if k <= 0)
         l                            Push a newline
          z6Z                         Push z and convert to string
             " "                      Push a space
                I2-                   Push length of stack minus 2
                   z2-                Push z minus 2
                      *               Pop b,a and push a,b
                       D              Pop k and duplicate top of stack k times
                        z6Z           Push z and convert to string
                           $O         Output whole stack as characters
                             ]        Close for loop
                              01F.    Gosub to second line and stop after returning.


z[   ]       For loop that runs z times
  z6Z        Push z and convert to string
      $O     Output whole stack as characters
        f    Return to position called from

3

Perl,79 76 74字节

$_=$.=pop;s/./ /g;print$.x$.,$/,($.,$_ x($.-2),$.,$/)x($.-2),$.>1?$.x$.:''

非常简单。第一个命令行参数用作数字。将脚本放在文件中并使用运行perl file.pl 1


shift可以替换为pop
Oleg V. Volkov,

3

Perl,62 60 58 + 2 = 60字节

for$.(1..$_){say$.>1&$.<$_?$_.$"x(y...c*($_-2)).$_:$_ x$_}

需要-nlE标志:

$ perl -nlE'for$.(1..$_){say$.>1&$.<$_?$_.$"x(y...c*($_-2)).$_:$_ x$_}' <<< 5
55555
5   5
5   5
5   5
55555

加上空格:

for$.(1..$_) {
  say(
    $. > 1 & $. < $_
      ? $_ . $"x(length$_*($_-2)) . $_
      : $_ x $_
  )
}

3

R,90个字节

x=scan();m=matrix(x,x,x);k=2:(x-1)*(x>2);m[k,k]=format("",w=nchar(x));write(m,"",n=x,s="")

这将创建一个x*xsize 的矩阵,然后填充size的空间nchar(x)。如果x小于2,则不会填充任何内容。


我知道这是一年后的事,但是... x=scan();m=matrix(x,x,x);m[k<--c(1,x),k]=format("",w=nchar(x));write(m,"",x,,"")通过使用负索引并替换n=x,s=''x,,'' tio.run/nexus/r#DYpBCsAgDAT/
Giuseppe

@Giuseppe现在,对于完全不可读的内容,再保存一个字节。
JayCe

write("[<-"(matrix(x<-scan(),x,x),k<--c(1,x),k,gsub("."," ",x)),1,x,,"")72字节
J.Doe '18 -10-5


3

-l,21字节

使用比问题新的语言功能,这是当前政策允许的;如果问题的措词被解释为覆盖上述政策,请参见下面的25个字节的答案。

Yq{MN++g%y>1?sMyy}MCy

在线尝试!

由于路易斯Mendo的MATL答案(a+1)%n<2伎俩。

说明

Yq从stdin读取一行并将其拖入y。然后:

{              }MCy  Map this function to each coordinate pair in a y-by-y grid
                     (Inside the function, the list of both coords is g)
   ++g                Increment both coordinates
      %y              Take them mod y
 MN     >1?           Test whether the min of the resulting list is 2 or greater
           sMy         If so, it's in the center; use len(y) spaces
              y        If not, it's an edge; use the number y
                     Print result with newlines between rows (implicit, -l flag)

2016年原始答案,25个字节(加-l标记):

Yq{MN++*a%y<2?ysX#y}MMCGy

变更日志:

  • MC最近添加的;当时,我使用了MMCG(地图-地图+坐标网格)。
  • 当前的解释器中有一个错误,阻止了++在列表上使用,因此我不得不做++*(应用于++每个元素)。
  • Map已扩展:现在<string1> M <string2>返回; 的len(<string2>)副本列表<string1>;当时,我使用sX#yby重复字符串的空间len(y)

2

Pyth,37 30字节

J*K`QQI>Q1JV-Q2++Q*d-lJ*2lKQ;J

在这里尝试。

J*K`QQ                          set K to repr(input); that is, stringified
                                  set J to K repeated (input) times
      I>Q1                  ;   if input is greater than 1...
          J                     output J (stringified input times input)
           V-Q2                 do this (input - 2) times...
               ++               output the following on one line:
                 Q              the input number
                  *d-lJ*2lK     n spaces, where n = len(J) - 2*len(K)
                           Q    the input number again
                            ;   break out of everything
                             J  output J (str(input)*input) one last time,
                                  regardless of whether input > 1

2

视网膜,90

同样,我很确定这将是专家们的不二之选:

.+
$&$&$*:$&$*;
+`(\d+:):
$1$1
+`([\d+:]+;);
$1$1
T`d` `(?<=;\d+:)[^;]+(?=:\d+:;\d)
:

;
¶

在线尝试。


1
我也发布了Retina答案,但它的大小并不多。(您可以使用而不是;摆脱最后一个阶段吗?)
randomra '16

@randomra好80 <90,所以我没有争执:)
Digital Trauma

而且如果您使用的[^¶]+是方便的稻草人.+
randomra

2

果冻,28个字节

Grr,无法判断Jelly是否擅长弦乐,或者我是否擅长Jelly。

ŒṘ©L⁶xWẋWẋ$®W¤1¦€U'Z$$4¡j⁷ȯ⁷

在线尝试。


我一直在努力适应这个回答,但没有多少运气:/
SP3000

2

Pyke,33个字节(非竞争性)

QD`i*Djli2*lR-k*iRi]3J"bR+2Q-*jR+

说明:

                                  - autoassign Q = eval_or_not(input())
QD`i*                             - Get the input multiplied by itself
Q                                 - [Q]
 D                                - [Q, Q]
  `                               - [repr(Q), Q]
   i                              - i = stack[0]
    *                             - [stack[0]*stack[1]]

     Djli2*lR-                    - Get number of spaces
     D                            - [^,^]
      j                           - j = stack[0]
       l                          - len(stack[0])
        i2*                       - i*2
           l                      - len(stack[0])
            R                     - rotate_2()
             -                    - stack[0]-stack[1]

              k*iRi               - Get middle line
              k*                  - " "*^
                iRi               - [i,^,i]

                   ]3J"bR+        - Join middle line together
                   ]3             - list(stack[:3])
                     J"           - "".join(stack[0])
                       bR+        - ^+"\n"

                          2Q-     - Get middle lines
                          2Q-*    - Q-2

                              jR+ - Add end line
                              jR+ - ^+j

2

CJam,27个字节

ri:X,_ff{a+[0X(]&XXs,S*?}N*

感谢@MartinBüttner的建议ff。该a+[0X(]&是很腥,但哦。

在线尝试!

ri:X              Read input integer and save as variable X
,_                Range, i.e. [0 1 ... X-1] and make a copy
ff{...}           Map with extra parameter, twice. This is like doing a Cartesian product
                  between two 1D arrays, but we get a nice X by X array at the end

                  For each coordinate pair,
a+                Put the two coordinates into an array
[0X(]&            Set intersection with the array [0 X-1]
X                 Push X
Xs,S*             Push a number of spaces equal to the length of X
?                 Ternary: choose one of the previous two depending on the set intersection

N*                Join X by X array with newlines


2

Haskell,78个字节

i x=unlines$take x$1#s:3#[s++(3#s>>" ")++s]++[1#s]where s=show x;z#s=[z..x]>>s

用法示例:

*Main> putStr $ i 4
4444
4  4
4  4
4444

该功能>>就派上用场了:<list> >> <string>使length <list>副本<string>,如顶部和底部的线x=10[1..10] >> "10"- > "10101010101010101010"



1
@MaxYekhlakov:谢谢,但是不幸的是,您的版本无法正常工作,1因此喊叫只能输出一个1。同样,您返回一个字符串列表,而质询要求一个字符串。过去,我们有更严格的IO规则,灵活的IO规则是最近才出现的事情。
nimi

2

Perl,72个字节

$_=($.=pop)-2;say for($.x$.,($..($.x$_)=~s/./ /rg.$.)x$_,$.x$.)[0..$.-1]

依靠现代Perl功能:

“某事”

从Perl 5.10(仅使用v5.10或更高版本)开始自动可用。

str_expr =〜s /.../.../ r

愉快地接受对一个右值(一个str_expr不一定降低到一个标量变量)工作以产生ř esult(即“ - [R在正则表达式的结尾”选项),而不改变初始str_expr。


2

PHP,151字节

function s($n){for($r=0;$r<$n;$r++){for($c=0;$c<$n;$c++){if($r*$c&&$r!=$n-1&&$c!=$n-1){for($d=0;$d<=log10($n);$d++){echo' ';}}else{echo$n;}}echo"\n";}}

绝对一团糟,需要更多时间进行优化。 s(Number)给你输出。


2

Java 8,280字节

interface A{static<T>void p(T o){System.out.print(o);}static void main(String[]a){long n=new Long(a[0]),l=a[0].length();for(long i=0;i<n;i++,p(a[0]));p("\n"+(n>1?a[0]:""));for(long j=2;j<n;j++,p(a[0])){for(long i=l*2;i<n*l;i++,p(' '));p(a[0]+"\n");}for(long i=1;i<n;i++)p(a[0]);}}

它仅是最短答案的10倍左右,对Java来说确实很不错!

示例运行:

$ java A 10
10101010101010101010
10                10
10                10
10                10
10                10
10                10
10                10
10                10
10                10
10101010101010101010

2

Python 3, 108 96 148字节

a=input()
b=c=int(a)-2 if a!="1" else 0
print(a*int(a))
while b:print(a+" "*int(len(a))*c+a);b-=1
if a!="1":print(a*int(a))

取消高尔夫/解释:

number = input() # Gets a number as input
iterator = var = int(number) - 2 if number != "1" else 0 # Assigns two variables, one of them an iterator, to the number minus 2 (the amount of middle rows in the square) if the number isn't 1. If it is, it sets the vars to 0 so the while doesn't trigger.
print(number * int(number)) # Prints the top row of the square.
while iterator != 0: # Loops for the middle rows
    print(number + " " * int(len(number)) * var + number) # Prints the number, then as many spaces as needed, and the number.
    iterator -= 1 # De-increments the iterator.
if number != 1: # Makes sure the number isn't 1, because 1 should return 1.
    print(a * int(a)) # Same as the first row, it prints the bottom row.

由于这是我的第一个答案,因此一些建设性的批评和/或建议将很有帮助!


1
使用单个空格进行缩进可以减少一些字节。实际上,您的整个循环都可以内联:while b!=0:print(a+" "*int(len(a))*c+1);b-=1。此外,while b:等价于while b!=0,因此还剩3个字节。
Mego

错误修正:输入1现在可以打印1,而不是无限循环(我的浏览器确实让我有些难过)。现在,这需要花费更多的字节。
OldBunny2800'3

2

锈,141个 137字节

滥用了一些格式化的东西,否则它要花更长的时间。

|i|{let f=||{for _ in 0..i{print!("{}",i)}println!("")};f();if i>1{for _ in 0..i-2{println!("{}{0:1$}",i,i.to_string().len()*(i-1))}f()}}

开箱

|i| {
    let f = || {
        for _ in 0..i {
            print!("{}",i)
        }
        println!("")
    };

    f();

    if i>1 {
        for _ in 0..i-2 {
            println!("{}{0:1$}",i,i.to_string().len()*(i-1))
        }
        f()
    }
}

游乐场链接


当我在这里尝试时这不起作用。我该如何测试?
Rɪᴋᴇʀ

这是一个游乐场链接,您可以对其进行测试,我使用了一个闭包,因此您首先将其分配给了一个变量,然后调用它。
Aceeri '16

太好了 真的不知道生锈,但是很好的答案!
Rɪᴋᴇʀ

2

Powershell,98 96 95 83 82 75字节

param($n)($l="$n"*$n)
if(($m=$n-2)-ge0){,"$n$(' '*"$n".Length*$m)$n"*$m
$l}

取消说明的测试脚本:

$f = {

    param($n)
    ($l="$n"*$n)                #   let $l is a string contains N only and return this value as a first line
    $m=$n-2
    if($m-ge0){                 # if(N>1)
        $s=' '*"$n".Length*$m   #   let $s is spaces inside repeated (length of string represented of n * m)
        ,"$n$s$n"*$m            #   return $m strings contains: N, spaces and N
        $l                      #   retrun the first line again
    }

}

&$f 1
&$f 2
&$f 3
&$f 4
&$f 10

输出:

1
22
22
333
3 3
333
4444
4  4
4  4
4444
10101010101010101010
10                10
10                10
10                10
10                10
10                10
10                10
10                10
10                10
10101010101010101010
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.