首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >除数天际线

除数天际线
EN

Code Golf用户
提问于 2017-05-07 16:31:21
回答 16查看 2.5K关注 0票数 48

对于任何正整数k,让d(k)表示k的除数。例如,d(6)4,因为64除数(即1, 2, 3, 6)。

给定正整数N,使用固定字符显示ASCII艺术中的“天际线”,因此位于k水平位置的“建筑物”的高度为d(k) for k = 1, ..., N。参见下面的测试用例。

规则

  • 任何非空白字符都可以持续使用,而不一定是测试用例中所示的#
  • 该算法在理论上适用于任意高的N。实际上,如果程序受到时间、内存、数据类型大小或屏幕大小的限制,则是可以接受的。
  • 允许水平或垂直引导或尾随空格或换行符。
  • 任何合理手段都可以接收输入和输出。
  • 程序或功能在任何编程语言中都是允许的。标准漏洞是禁止的。
  • 以字节为单位的最短代码获胜。

测试用例

N = 10

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

N = 50

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

N = 200

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

回答 16

Code Golf用户

回答已采纳

发布于 2017-05-07 16:36:31

果冻,9字节

使用0而不是#

代码语言:javascript
复制
RÆD0ṁz⁶ṚY

在网上试试!

票数 12
EN

Code Golf用户

发布于 2017-05-07 18:33:39

Python 3,111个字节

代码语言:javascript
复制
lambda n:'\n'.join([*map(''.join,zip(*['#'*sum(x%-~i==0for i in range(x))+n*' 'for x in range(1,n+1)]))][::-1])

在网上试试!

这会产生一些领先的垂直空格。

票数 6
EN

Code Golf用户

发布于 2017-05-07 19:35:29

倍频程,61字节

代码语言:javascript
复制
for i=1:input(''),p(1:nnz(~rem(i,1:i)),i)=35;end,[flip(p),'']

解释:

代码语言:javascript
复制
for i=1:input('')         % Loop, for i from 1 to the input value
 p(1:nnz(~rem(i,1:i)),i)=35;end,[flip(p),'']   
% Breakdown:
         ~rem(i,1:i)      % Return true if the remainder of i divided by any of the values
                          % in the vector 1 - i
     nnz(~rem(i,1:i))     % Check how many of them are non-zero
 p(1:nnz(~rem(i,1:i)),i)=35;end   % Assign the value 35 (ASCII for #) to rows 1
                                  % to the number of divisors of i, in column i
end,              % End loop
[flip(p),'']      % Flip the matrix, and concatenate it with the empty string

我想强调的几件事

  • 将输入直接输入到循环中
    • 不会将输入值赋值给任何变量

  • 不初始化任何数组
    • 它动态地创建它,根据需要添加列和行。

  • 自动将ASCII-值0转换为空白(ASCII-32)

循环内部发生了什么(假设输入6)

代码语言:javascript
复制
p =  35
p =
   35   35
    0   35
p =
   35   35   35
    0   35   35
p =
   35   35   35   35
    0   35   35   35
    0    0    0   35
p =
   35   35   35   35   35
    0   35   35   35   35
    0    0    0   35    0
p =
   35   35   35   35   35   35
    0   35   35   35   35   35
    0    0    0   35    0   35
    0    0    0    0    0   35
  1. 开始作为一个单一的35
  2. 扩大一列和一行,为2的两个除数腾出空间。
  3. 扩大一列,腾出空间容纳3人(只有两个除数)
  4. 展开一列和一行,为三个除数(1,2,4)腾出空间
  5. 扩大一列,腾出5人的空间
  6. 展开一列和一行,为4个除法器(1,2,3,6)腾出空间

最后,我们将其翻转,并将其转换为字符串,并隐式地将0更改为32

代码语言:javascript
复制
warning: implicit conversion from numeric to char
ans =
     #
   # #
 #####
######
票数 6
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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