首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建二进制标尺

创建二进制标尺
EN

Code Golf用户
提问于 2017-06-13 17:05:38
回答 17查看 3.4K关注 0票数 23

给定一个数字n,生成此模式的前n列:

代码语言:javascript
复制
                               #
               #               #
       #       #       #       #
   #   #   #   #   #   #   #   #
 # # # # # # # # # # # # # # # #
################################ ...

列在(1-索引)n处的高度是n的二进制表示中的尾随0位数,加上1。因此,底层每列填上一列,第二层每第二列填一层,第三层每四列填一层,等等。

规则

  • 您可以通过任何标准方法输入和输出。
  • 您可以假设输入是介于1和999之间的整数,包括在内。
  • 只要模式完整,输出可能包含任意数量的空白。
  • 该模式必须是1索引,并以如下所示的格式。
  • 您可以使用任何一个非空格字符来代替#,但是您不能更改空格字符。

测试用例

代码语言:javascript
复制
1
#

2
 #
##

3
 # 
###

4
   #
 # #
####

5
   # 
 # # 
#####

7
   #   
 # # # 
#######

32
                               #
               #               #
       #       #       #       #
   #   #   #   #   #   #   #   #
 # # # # # # # # # # # # # # # #
################################

一些更大的测试用例可以找到这里

评分

这是密码-高尔夫,所以每种语言中以字节为单位的最短代码获胜。

EN

回答 17

Code Golf用户

发布于 2017-06-13 18:14:22

Python 2,54字节

代码语言:javascript
复制
i=n=input()
while i:i-=1;print((' '*~-2**i+'#')*n)[:n]

在网上试试!

带有大量领先空格的打印。从i中向下计数的每一行n重复一个2**i-1空间模式,然后是一个#。此模式被重复到标尺的宽度,即输入n。这是通过将模式字符串乘以n并将第一个n字符与[:n]相乘来完成的。

该模式可以通过字符串格式为等长替代。

代码语言:javascript
复制
i=n=input()
while i:i-=1;print('%%%ds'%2**i%'#'*n)[:n]

可爱的切片方法更长。

代码语言:javascript
复制
n=input();s=~-2**n*' '+'#'
exec"s=s[1::2]*2;print s[:n];"*n
票数 11
EN

Code Golf用户

发布于 2017-06-13 17:23:04

Python 3,74字节

代码语言:javascript
复制
n=int(input())
a=1
while a<n:a*=2
while a:print(("%%%dd"%a%4*n)[:n]);a//=2

在网上试试!

票数 10
EN

Code Golf用户

发布于 2017-06-13 17:18:17

[化]双模拟,21字节

代码语言:javascript
复制
'# '[1+⊖0⍪∨⍀⊖2⊥⍣¯1⍳⎕]

在网上试试!

'# '[… 将字符串索引为

 获取输入

多个整数的

2⊥⍣¯1 转换为二进制,根据需要使用尽可能多的数字(每列有一个数字)

 倒转

∨⍀ 垂直累积或减少

0⍪ 连接顶部的零

 倒转(即再次倒转)

1+ 添加一个(用于基于1的索引)

票数 5
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/126172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档