Cheela乘法表


26

(从书龙的蛋罗伯特L.向前)是生活在中子星表面上的生物。他们的身体平坦而圆形,周长有十二只眼睛,因此他们自然使用12进制编号系统。

在Cheela中,照顾小鱼苗和教育年轻人是老年人的任务。由于需要教年轻的Cheela如何进行乘法运算,因此旧式Cheela可以使用乘法运算表。

您的任务是在base中生成一个12x 12乘法表,12如下所示。大写字母AB用于分别对应于十进制10 和的数字11

  1   2   3   4   5   6   7   8   9   A   B  10 
  2   4   6   8   A  10  12  14  16  18  1A  20 
  3   6   9  10  13  16  19  20  23  26  29  30 
  4   8  10  14  18  20  24  28  30  34  38  40 
  5   A  13  18  21  26  2B  34  39  42  47  50 
  6  10  16  20  26  30  36  40  46  50  56  60 
  7  12  19  24  2B  36  41  48  53  5A  65  70 
  8  14  20  28  34  40  48  54  60  68  74  80 
  9  16  23  30  39  46  53  60  69  76  83  90 
  A  18  26  34  42  50  5A  68  76  84  92  A0 
  B  1A  29  38  47  56  65  74  83  92  A1  B0 
 10  20  30  40  50  60  70  80  90  A0  B0 100

输出应打印在屏幕上。格式应如下:

  1. 数字应在每一列的右边对齐。
  2. 允许第一列之前的开头空格,最后一列之后的结尾空格或最后一行之后的结尾换行。
  3. 列之间的分隔可以是一个空格(如上所示)或多个空格,但是列之间的空格数应保持一致。要测量列间距,请考虑所显示的数字包括为满足要求1可能需要的任何前导空格(因此,每个数字都占用三个字符,其中第一个可以是空格)。例如,两个空格分隔的表如下所示:

      1    2    3    4    5    6    7    8    9    A    B   10 
      2    4    6    8    A   10   12   14   16   18   1A   20 
      3    6    9   10   13   16   19   20   23   26   29   30 
      4    8   10   14   18   20   24   28   30   34   38   40 
      5    A   13   18   21   26   2B   34   39   42   47   50 
      6   10   16   20   26   30   36   40   46   50   56   60 
      7   12   19   24   2B   36   41   48   53   5A   65   70 
      8   14   20   28   34   40   48   54   60   68   74   80 
      9   16   23   30   39   46   53   60   69   76   83   90 
      A   18   26   34   42   50   5A   68   76   84   92   A0 
      B   1A   29   38   47   56   65   74   83   92   A1   B0 
     10   20   30   40   50   60   70   80   90   A0   B0  100
    

中子星上的计算机存储确实非常昂贵,因此您的代码应使用尽可能少的字节。

扩展挑战和奖励

理想情况下,您的代码应在Universe的其他部分(可能正在使用其他编号系统)中重用。为此,可以选择将挑战扩展如下:您的代码接受一个数字N作为输入,并使用上述格式以base为基础生成一个Nx N乘法表N

输入可以来自键盘,也可以作为函数参数。该程序或功能应该适用于2N36,使用与数字的第一N序列的人物01..., ,,9 ,...,(大写字母)ABZ

这个扩展的挑战是可选的。如果您遵循这条路线,请减少20%的字节数(无需四舍五入为整数)。


路易斯不错!=)我希望我有时间拿出一个MATLAB解决方案,但是我正忙着测量圣诞节礼物的尺寸...
Stewie Griffin 2015年

6
那些球形帽子祝您好运!:-P
Luis Mendo 2015年

5
Because they have twelve eyes, they naturally use a base-12 numbering system.好吧,自然。这就是为什么我们使用二进制文件的原因,毕竟... ;-)
Tim Pederick

2
@TimPederick好点:-D要澄清:Cheela的身体是圆形的,它们可以根据需要重塑肢体……十二只眼睛在数字上是他们身体最明显的特征。我已经更新了问题,谢谢!
路易斯·门多

1
@LuisMendo非常不错的小说,你引用的一本。Starquake也不错。
lstefano

Answers:


14

Pyth,27 * 0.8 = 21.6

VSQsm.[\ 4jkXj*dNQrT99rG1SQ

在线尝试:演示

说明:

VSQsm.[\ 4jkXj*dNQrT99rG1SQ   implicit: Q = input number
VSQ                           for N in [1, 2, ..., Q]:
    m                    SQ      map each number d in [1, 2, ..., Q] to:
              *dN                   N * d
             j   Q                  in base Q
            X     rT99rG1           replace the numbers [10, 11, ..., 98] with "A...Z"
          jk                        join to a string
     .[\ 4                          prepend spaces, so that the string has a length of 4
   s                             join all strings and print

11

CJam,33 * 0.8 = 26.4字节

ri:C,:)_ff{*Cb{_9>{'7+}&}%4Se[}N*

在这里测试。

这将使用所需的最小间距。

说明

ri:C        e# Read input, convert to integer, store in C.
,:)         e# Get range [1 2 ... C].
_ff{        e# 2D-map over all repeated pairs from that range...
  *Cb       e#   Multiply, convert to base C.
  {         e#   Map over the digits...
    _9>     e#     Check if the digit is greater than 9.
    {'7+}&  e#     If so, add the digit to the character "7", to get "A" to "Z".
  }%
  4Se[      e#   Pad the digits with spaces from the left, to 4 elements.
}
N*          e# Join with linefeeds.

输入表22(不带水平滚动条的最大表):

   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F   G   H   I   J   K   L  10
   2   4   6   8   A   C   E   G   I   K  10  12  14  16  18  1A  1C  1E  1G  1I  1K  20
   3   6   9   C   F   I   L  12  15  18  1B  1E  1H  1K  21  24  27  2A  2D  2G  2J  30
   4   8   C   G   K  12  16  1A  1E  1I  20  24  28  2C  2G  2K  32  36  3A  3E  3I  40
   5   A   F   K  13  18  1D  1I  21  26  2B  2G  2L  34  39  3E  3J  42  47  4C  4H  50
   6   C   I  12  18  1E  1K  24  2A  2G  30  36  3C  3I  42  48  4E  4K  54  5A  5G  60
   7   E   L  16  1D  1K  25  2C  2J  34  3B  3I  43  4A  4H  52  59  5G  61  68  6F  70
   8   G  12  1A  1I  24  2C  2K  36  3E  40  48  4G  52  5A  5I  64  6C  6K  76  7E  80
   9   I  15  1E  21  2A  2J  36  3F  42  4B  4K  57  5G  63  6C  6L  78  7H  84  8D  90
   A   K  18  1I  26  2G  34  3E  42  4C  50  5A  5K  68  6I  76  7G  84  8E  92  9C  A0
   B  10  1B  20  2B  30  3B  40  4B  50  5B  60  6B  70  7B  80  8B  90  9B  A0  AB  B0
   C  12  1E  24  2G  36  3I  48  4K  5A  60  6C  72  7E  84  8G  96  9I  A8  AK  BA  C0
   D  14  1H  28  2L  3C  43  4G  57  5K  6B  72  7F  86  8J  9A  A1  AE  B5  BI  C9  D0
   E  16  1K  2C  34  3I  4A  52  5G  68  70  7E  86  8K  9C  A4  AI  BA  C2  CG  D8  E0
   F  18  21  2G  39  42  4H  5A  63  6I  7B  84  8J  9C  A5  AK  BD  C6  CL  DE  E7  F0
   G  1A  24  2K  3E  48  52  5I  6C  76  80  8G  9A  A4  AK  BE  C8  D2  DI  EC  F6  G0
   H  1C  27  32  3J  4E  59  64  6L  7G  8B  96  A1  AI  BD  C8  D3  DK  EF  FA  G5  H0
   I  1E  2A  36  42  4K  5G  6C  78  84  90  9I  AE  BA  C6  D2  DK  EG  FC  G8  H4  I0
   J  1G  2D  3A  47  54  61  6K  7H  8E  9B  A8  B5  C2  CL  DI  EF  FC  G9  H6  I3  J0
   K  1I  2G  3E  4C  5A  68  76  84  92  A0  AK  BI  CG  DE  EC  FA  G8  H6  I4  J2  K0
   L  1K  2J  3I  4H  5G  6F  7E  8D  9C  AB  BA  C9  D8  E7  F6  G5  H4  I3  J2  K1  L0
  10  20  30  40  50  60  70  80  90  A0  B0  C0  D0  E0  F0  G0  H0  I0  J0  K0  L0 100

8

MATL,42 * .8 = 33.6

免责声明

由于语言的创建者和挑战的作者是相同的,因此此答案不符合获奖条件

有关此限制是否必要的讨论,请参见meta问题

iXK:t!*Y)KYAZ{'(?<=^0*)0'32cYXZc32hK4*[]e!

这将使用最小间隔。

八进制乘法表

>> matl
 > iXK:t!*Y)KYAZ{'(?<=^0*)0'32cYXZc32chK4*[]e!
 > 
> 8
  1   2   3   4   5   6   7  10 
  2   4   6  10  12  14  16  20 
  3   6  11  14  17  22  25  30 
  4  10  14  20  24  30  34  40 
  5  12  17  24  31  36  43  50 
  6  14  22  30  36  44  52  60 
  7  16  25  34  43  52  61  70 
 10  20  30  40  50  60  70 100 

说明

i              % input number, say n
XK             % copy to clipboard K
:              % vector 1, 2, ... n
t!*            % generate table: duplicate, transpose and multiply with broadcasting
Y)             % linearize into column array
KYA            % paste n from clipboard K. Convert to that base
Z{             % cell array of rows from array
'(?<=^0*)0'    % string literal for regexp replacement: find leading zeros
32c            % space character (for regexp replacement)
YX             % regexp replacement
Zc             % join cell array of strings into single string   
32             % code for space character. Conversion to char happens automatically
h              % concatenate horizontally
K4*[]e!        % paste n and multiply by 4. Reshape into 2D char array with 4*n columns

编辑:在线尝试!

要在在线编译器中运行(截至2016年2月19日),请更改Y)X:,然后删除[]。这是为了适应自发布此挑战以来对语言所做的更改。


“由于语言的创建者和挑战的作者相同,因此此答案不符合获奖条件。” 我不知道这个限制。这是自我强加还是您找到了相关的元共识?
Alex A.

1
@AlexA。我是自己强加的。我怀疑可能对此达成某种协议。从您的口中,我看不出有没有?我的观点是:如果您设计一种语言然后提出挑战,那么您可能处于有利位置。通常会做什么?没有任何限制吗?
路易斯·门多

我认为只要您不计划将挑战专门用作内置语言的用例,您就不一定具有优势。我不知道会有这样的共识,所以我建议询问meta。
Alex A.

@AlexA。好主意!完成
路易斯·门多

@AlexA。如果您愿意,可以在此处添加您的建议作为答案?
路易斯·门多

5

Bash + BSD实用程序,36

echo Co{1..12}d{1..12}*p|dc|rs -j 12

在OS X上 rs可以直接使用。在Linux系统上可能需要安装。

  • Bash扩展Co{1..12}d{1..12}*pCo1d1*p Co1d2*p Co1d3*p ... Co1d12*p ... Co12d12*p
  • 这是一个dc生成所需术语的表达式。 Co将输出基数设置为12。 d它用作数字之间的分隔符,而不是空格,因此在括号扩展中不需要转义。 d实际上会复制堆栈的顶部,但是实际上将其忽略并丢弃。
  • 来自的输出dc是单个以空格分隔的行。 rs将其重塑为12x12数组。 -j右对齐每个术语。

4

Pyth,36个字节

Km+1dUJ12rjbmjkm.[\ 4j""m.Hbj*dkJKK1

在这里尝试。


您可以替换Km+1dUJ12KSJ12S创建范围[1, 2, ..., 12]。您可以更换两个j""jks的,因为您的加盟字符串。另一个字节:更改rjbm...K1jmr...1K。进行此更改后,您将获得28个字节:KSJ12jmrsm.[\ 4sm.Hbj*dkJK1K
Jakube 2015年

4

Python,第153个 147 132字节×0.8 = 105.6

def p(b):
 f=lambda n:(n>=b and f(n/b)or'')+chr((48,55)[n%b>9]+n%b)
 for i in range(b*b):print'%4s\n'[:3+(~i%b<1)]%f(~(i%b)*~(i/b)),

感谢蒂姆·佩德瑞克(Tim Pederick)的建议,最大可压缩到132个字节!:)


推荐,因为我越喜欢我的答案,它就越看起来像您的答案
蒂姆·佩德里克

一些可能的改进:使用%格式代替rjust'%4s'%f(...))。查看是否使用来打印每个值print ...,(然后print在换行中打印一个值)是否比短join。如果是这样,请尝试破坏循环
蒂姆·佩德瑞克

谢谢蒂姆,我试图破坏循环(我不知道这个窍门)。我不确定这是否会让我获得很多字节,但是这很酷:)
basile-henry

我看你切换到三元形式(条件andor内部函数B) f,使用n>=b。我一直这样做,直到意识到它不比以前短,n//b...但是您正在使用Python 2!您可以使用保存一个字节n/b
蒂姆·佩德瑞克

是的,这就是我使用代码的这一部分利用python 2来节省一个字节的原因:)
basile-henry 2015年

4

CJam,38 33 32 38 *(.8)= 30.4字节

qi:D,:):L{Lf*{Db{_9>{55+c}&}%4Se[}%N}%

在这里尝试。

(看起来与Martin现在非常相似。)

qi:D,:):L          e# Generate list of [1...input]
{Lf*               e# Take each number in that list and multiply it by the same list ([[1,2,3,..,input][2,4,6,...,input],...})
{Db{_9>{55+c}&}%   e# Convert each product to base input. If a digit value is >= 10 add 55 and convert to char, to make it a letter.
4Se[}%N}%          e# Pad each number with spaces to length 4. Put a newline after each row.

3

Perl 6,60个字节-20%= 48个字节

{.put for (1..$_ X*1..$_)».base($_)».fmt('%3s').rotor($_)} # 60-20% = 48
#          ^-----------^ produce a list of two cross multiplied lists
#                        ^--------^ convert each to base N
#          format each to 3 spaces ^----------^
#         split the list into N element chunks ^--------^
#^-------^ print each of those on their own line with spaces between elements

(这几乎就是我会写的方式,即使我并没有试图尽可能短地把它弄出来。)

用法:

{...}(2)
  1  10
 10 100
my &code = {...}
code 2;
  1  10
 10 100
{...}(12);
  1   2   3   4   5   6   7   8   9   A   B  10
  2   4   6   8   A  10  12  14  16  18  1A  20
  3   6   9  10  13  16  19  20  23  26  29  30
  4   8  10  14  18  20  24  28  30  34  38  40
  5   A  13  18  21  26  2B  34  39  42  47  50
  6  10  16  20  26  30  36  40  46  50  56  60
  7  12  19  24  2B  36  41  48  53  5A  65  70
  8  14  20  28  34  40  48  54  60  68  74  80
  9  16  23  30  39  46  53  60  69  76  83  90
  A  18  26  34  42  50  5A  68  76  84  92  A0
  B  1A  29  38  47  56  65  74  83  92  A1  B0
 10  20  30  40  50  60  70  80  90  A0  B0 100
{...}(18);
  1   2   3   4   5   6   7   8   9   A   B   C   D   E   F   G   H  10
  2   4   6   8   A   C   E   G  10  12  14  16  18  1A  1C  1E  1G  20
  3   6   9   C   F  10  13  16  19  1C  1F  20  23  26  29  2C  2F  30
  4   8   C   G  12  16  1A  1E  20  24  28  2C  2G  32  36  3A  3E  40
  5   A   F  12  17  1C  1H  24  29  2E  31  36  3B  3G  43  48  4D  50
  6   C  10  16  1C  20  26  2C  30  36  3C  40  46  4C  50  56  5C  60
  7   E  13  1A  1H  26  2D  32  39  3G  45  4C  51  58  5F  64  6B  70
  8   G  16  1E  24  2C  32  3A  40  48  4G  56  5E  64  6C  72  7A  80
  9  10  19  20  29  30  39  40  49  50  59  60  69  70  79  80  89  90
  A  12  1C  24  2E  36  3G  48  50  5A  62  6C  74  7E  86  8G  98  A0
  B  14  1F  28  31  3C  45  4G  59  62  6D  76  7H  8A  93  9E  A7  B0
  C  16  20  2C  36  40  4C  56  60  6C  76  80  8C  96  A0  AC  B6  C0
  D  18  23  2G  3B  46  51  5E  69  74  7H  8C  97  A2  AF  BA  C5  D0
  E  1A  26  32  3G  4C  58  64  70  7E  8A  96  A2  AG  BC  C8  D4  E0
  F  1C  29  36  43  50  5F  6C  79  86  93  A0  AF  BC  C9  D6  E3  F0
  G  1E  2C  3A  48  56  64  72  80  8G  9E  AC  BA  C8  D6  E4  F2  G0
  H  1G  2F  3E  4D  5C  6B  7A  89  98  A7  B6  C5  D4  E3  F2  G1  H0
 10  20  30  40  50  60  70  80  90  A0  B0  C0  D0  E0  F0  G0  H0 100

不是专家,而是“为”和“(”之间的空间所需得夹的空间在可能的情况?
J_F_B_M

@J_F_B_M我总是尝试首先删除空格。因此,如果有空间,则是必需的。如果确实删除了空间,那么它肯定不会编译,因为它将被for(视为调用名为for而不是修饰符for循环构造的子例程的开始。这将导致编译错误。
布拉德·吉尔伯特b2gills

学到了一些东西。谢谢。
J_F_B_M 2015年

3

JavaScript(ES6)84(105-20%)

显而易见的方法,首先开始。

n=>{for(o=i=``;i++<n;o+=`
`)for(j=0;j++<n;)o+=(`   `+(i*j).toString(n)).slice(-4).toUpperCase();alert(o)}

笔记

  • 可惜js toString产生小写字母
  • alert 不是输出表格的最佳方法,而是较短的方法,因为明确要求“显示在屏幕上”
  • 仅返回值将短几个字节。

少打高尔夫球

n=>{
  for(o='', i=0; i++<n; o+='\n')
    for(j=0;j++<n;)
       o+=('   '+(i*j).toString(n)).slice(-4).toUpperCase()
  alert(o)
}

3

Python 3,126-20%= 100.8字节

外部函数,t是实际打印乘法表的函数。内部函数i进行从2到36的数字到底数的转换。

def t(b):
 i=lambda n:(n>=b and i(n//b)or'')+chr(n%b+[48,55][n%b>9]);R=range(b)
 for r in R:print(*('%3s'%i(~r*~c)for c in R))

帽尖到飞镖对他们的解决方案,并为一个高尔夫小费。我避免从Boomerang的解决方案中复制任何内容,但确实允许自己看一眼,以了解可以在哪里进行更多的裁剪。甚至在那之前,我发现我越打高尔夫球,我的脚步声就越像回旋镖!


不错的解决方案!:)而且您的得分比我高!我喜欢> 9而不是<10。我对python3和带星号的表达式不太熟悉(我必须查一下)。我喜欢您的〜技巧,我需要开始使用它!
basile-henry

我对您的解决方案进行了一些测试,看来我返回的位数不超过两个基数。例如,如果执行此操作,则print(i(15,12),i(120,12),i(144,12),i(150,12))代码将返回13 A0 00 06而不是13 A0 100 106。不幸的是,该任务需要打印一个3位数的基数n(100)。修复起来应该不太困难,但是可能会增加一些字节……
basile-henry

@Boomerang:<抓头>我想我一定要弄坏一些东西,因为它以前工作过!问题似乎是它不会给出领先的1 ...哦,等等,我知道问题出在哪里。应该是n>=b,不是n>b
蒂姆·佩德里克

我发现了另一个使代码更小的技巧:在t(b)中定义i,以便可以删除i中的第二个参数!像这样:def t(b): i=lambda n:(n>=b and i(n//b)or'')+chr(n%b+[48,55][n%b>9]) R=range(b) for r in R:print(*('%3s'%i(~r*~c)for c in R))我想在我的解决方案中做到这一点,但是现在我们两个解决方案都非常接近,还可能会改善更好的一种^^
basile-henry 2015年

@Boomerang:嘿,您是第一个,我认为Python 2提供了足够的快捷方式,您仍然可以超越我。但是,谢谢您的帮助!
蒂姆·佩德瑞克

3

Javascript(ES6)96.8 93.6字节(117%的20%)

n=>{b='';for(i=0;i++<n;b+=`\n`)for(j=0;j++<n;)a=(i*j).toString(n).toUpperCase(),b+=' '.repeat(4-a.length)+a;alert(b)}

说明

n=>
    {                                     
      b='';                                    //clear table var at each run
      for(i=0;i++<n;b+=`\n`)                   //iterate through rows
        for(j=0;j++<n;)                        //iterate through cols
          a=(i*j).toString(n).toUpperCase(),   //get desired number
          b+=' '.repeat(4-a.length)+a";        //pad to right
    alert(b)                                   //display result
}

- 感谢@ edc65,节省了4个字节


1
简单地使用{} alert(b)而不使用eval它会更短。至少要避免使用variable a,它是没有用的b+=' '.repeat(4-a.length)+(i*j).toString(n).toUpperCase()
edc65

谢谢😊我看不到需要显示它,因此对我来说eval()最初比返回值短。@ edc65,但是,如果我避免a了,那么如何计算...repeat(4-a.length)...
Aᴄʜᴇʀᴏɴғᴀɪʟ

抱歉,您是对的。
照原样

2

MATLAB,111 * 0.8 = 88.8 110 * 0.8 = 88字节

我在这里的处子秀:

@(N)disp(reshape(strrep(strrep([' ',strjoin(cellstr(dec2base([1:N]'*[1:N],N)))],' 0','  '),' 0','  '),4*N,N)')

说明:

[1:N]'*[1:N] 以10为底的乘法表

dec2base([1:N]'*[1:N],N) 转换为基数12。输出为以0开头的char数组

strjoin(cellstr(dec2base(___))) 转换为单元格并返回到char连接字符串,空格产生1x575字符串

[' ',strjoin(___)] 追加空间以包含576个元素

strrep(___,' 0',' ')删除一个前导零。我们这样做两次,因为我们的字符串带有两个前导零

reshape(___,4*N,N)' 将1x576字符数组转换为48x12字符数组

disp(___) 不显示结果 ans =

输出:

 1   2   3   4   5   6   7   8   9   A   B  10
 2   4   6   8   A  10  12  14  16  18  1A  20
 3   6   9  10  13  16  19  20  23  26  29  30
 4   8  10  14  18  20  24  28  30  34  38  40
 5   A  13  18  21  26  2B  34  39  42  47  50
 6  10  16  20  26  30  36  40  46  50  56  60
 7  12  19  24  2B  36  41  48  53  5A  65  70
 8  14  20  28  34  40  48  54  60  68  74  80
 9  16  23  30  39  46  53  60  69  76  83  90
 A  18  26  34  42  50  5A  68  76  84  92  A0
 B  1A  29  38  47  56  65  74  83  92  A1  B0
10  20  30  40  50  60  70  80  90  A0  B0 100 

如果不计算statement N=12;5*.8=4则会保存字节。同样,如果ans =输出是可以容忍的,那么我们可以删除disp()保存另一个6*0.8=4.8字节。当然,可能还有其他保存字节的方法:)


通常,ans如果输出是函数参数,则允许输出。但是在这种情况下,挑战是说“输出应该在屏幕上打印”,因此ans是不允许的。另外,N应将其作为扩展挑战中的输入。您可以使用匿名函数来解决该问题:@(n)disp(reshape(strrep(strrep([' ',strjoin(cellstr(dec2base([1:N]'*[1:N],N)))],' 0',' '),' 0',' '),4*N,N)'),您可以使用ans(12)
Luis Mendo

1
哦,欢迎来到该网站!:-)
Luis Mendo 2015年

@LuisMendo谢谢!我将使用@(N)表示法编辑答案
brainkz 2015年

2

Python 3中:166 161 152 - 20%= 121.6字节

我知道它不如现有的Python答案,但我想尝试一下。这是我第一次在此网站上发布…

def t(b):
 r=range(1,b+1);f=lambda x:x and f(x//b)+chr((55,48)[x%b>9]+x%b)or''
 print('\n'.join(''.join(B)for B in(('%4s'%f(i*j)for j in r)for i in r)))

有3个右括号和2个数字文字,后跟空格。这些空间是不必要的。否则不错,请先尝试。顺便说一句,Python打高尔夫球的秘诀是不错的阅读。
manatwork 2015年

欢迎使用PPCG.SE,即使它没有击败其他Python答案,只要它有所不同(不是相同的算法/思想),也可以将其发布:)。
Katenkyo 2015年

@manatwork谢谢!我又得到了9个字节。
Teemu Piippo

2

APL,32 31×0.8 = 24.8 字节

{¯4↑¨⊃∘(⎕D,⎕A)¨¨⍵⊥⍣¯1¨∘.×⍨1+⍳⍵}

起源为0。英语:

  • ∘.×⍨1+⍳⍵: 乘法表
  • ⍵⊥⍣¯1¨:以base为底表示乘法表的每个元素
  • ⊃∘(⎕D,⎕A)¨¨:将数字向量表转换为字符向量表
  • ¯4↑¨:将结果的每个元素右对齐至长度4

默认的APL打印例程执行正确的操作。

      {¯4↑¨(⍵⊥⍣¯1¨∘.×⍨1+⍳⍵)⊃¨¨⊂⊂⎕D,⎕A}13
    1     2     3     4     5     6     7     8     9     A     B     C    10 
    2     4     6     8     A     C    11    13    15    17    19    1B    20 
    3     6     9     C    12    15    18    1B    21    24    27    2A    30 
    4     8     C    13    17    1B    22    26    2A    31    35    39    40 
    5     A    12    17    1C    24    29    31    36    3B    43    48    50 
    6     C    15    1B    24    2A    33    39    42    48    51    57    60 
    7    11    18    22    29    33    3A    44    4B    55    5C    66    70 
    8    13    1B    26    31    39    44    4C    57    62    6A    75    80 
    9    15    21    2A    36    42    4B    57    63    6C    78    84    90 
    A    17    24    31    3B    48    55    62    6C    79    86    93    A0 
    B    19    27    35    43    51    5C    6A    78    86    94    A2    B0 
    C    1B    2A    39    48    57    66    75    84    93    A2    B1    C0 
   10    20    30    40    50    60    70    80    90    A0    B0    C0   100 

-1:{¯4↑¨⊃∘(⎕D,⎕A)¨¨⍵⊥⍣¯1¨∘.×⍨1+⍳⍵}
亚当

代替“ chars”,您应该使用“ bytes”以及指向meta.codegolf.stackexchange.com/a/9429/43319的链接。
亚当

1

Ruby,69 66个字符-20%= 52.8

->n{(r=1..n).map{|a|puts r.map{|b|"%4s"%(a*b).to_s(n).upcase}*''}}

样品运行:

2.1.5 :001 > ->n{(r=1..n).map{|a|puts r.map{|b|"%4s"%(a*b).to_s(n).upcase}*''}}[4]
   1   2   3  10
   2  10  12  20
   3  12  21  30
  10  20  30 100

1

ksh93,51 * 0.8 == 40.8字节

eval echo "'
' {"{1..$1}'..$((++n*$1))..$n%3..$1d}'

这应该可以达到base 64(ksh支持的最大基数)。例子:

 $ n= ksh -s 12 <<\EOF
eval echo "'
' {"{1..$1}'..$((++n*$1))..$n%3..$1d}'
EOF


   1   2   3   4   5   6   7   8   9   a   b  10
   2   4   6   8   a  10  12  14  16  18  1a  20
   3   6   9  10  13  16  19  20  23  26  29  30
   4   8  10  14  18  20  24  28  30  34  38  40
   5   a  13  18  21  26  2b  34  39  42  47  50
   6  10  16  20  26  30  36  40  46  50  56  60
   7  12  19  24  2b  36  41  48  53  5a  65  70
   8  14  20  28  34  40  48  54  60  68  74  80
   9  16  23  30  39  46  53  60  69  76  83  90
   a  18  26  34  42  50  5a  68  76  84  92  a0
   b  1a  29  38  47  56  65  74  83  92  a1  b0
  10  20  30  40  50  60  70  80  90  a0  b0 100

 $ n= ksh -s 22 <<\EOF
eval echo "'
' {"{1..$1}'..$((++n*$1))..$n%3..$1d}'
EOF


   1   2   3   4   5   6   7   8   9   a   b   c   d   e   f   g   h   i   j   k   l  10
   2   4   6   8   a   c   e   g   i   k  10  12  14  16  18  1a  1c  1e  1g  1i  1k  20
   3   6   9   c   f   i   l  12  15  18  1b  1e  1h  1k  21  24  27  2a  2d  2g  2j  30
   4   8   c   g   k  12  16  1a  1e  1i  20  24  28  2c  2g  2k  32  36  3a  3e  3i  40
   5   a   f   k  13  18  1d  1i  21  26  2b  2g  2l  34  39  3e  3j  42  47  4c  4h  50
   6   c   i  12  18  1e  1k  24  2a  2g  30  36  3c  3i  42  48  4e  4k  54  5a  5g  60
   7   e   l  16  1d  1k  25  2c  2j  34  3b  3i  43  4a  4h  52  59  5g  61  68  6f  70
   8   g  12  1a  1i  24  2c  2k  36  3e  40  48  4g  52  5a  5i  64  6c  6k  76  7e  80
   9   i  15  1e  21  2a  2j  36  3f  42  4b  4k  57  5g  63  6c  6l  78  7h  84  8d  90
   a   k  18  1i  26  2g  34  3e  42  4c  50  5a  5k  68  6i  76  7g  84  8e  92  9c  a0
   b  10  1b  20  2b  30  3b  40  4b  50  5b  60  6b  70  7b  80  8b  90  9b  a0  ab  b0
   c  12  1e  24  2g  36  3i  48  4k  5a  60  6c  72  7e  84  8g  96  9i  a8  ak  ba  c0
   d  14  1h  28  2l  3c  43  4g  57  5k  6b  72  7f  86  8j  9a  a1  ae  b5  bi  c9  d0
   e  16  1k  2c  34  3i  4a  52  5g  68  70  7e  86  8k  9c  a4  ai  ba  c2  cg  d8  e0
   f  18  21  2g  39  42  4h  5a  63  6i  7b  84  8j  9c  a5  ak  bd  c6  cl  de  e7  f0
   g  1a  24  2k  3e  48  52  5i  6c  76  80  8g  9a  a4  ak  be  c8  d2  di  ec  f6  g0
   h  1c  27  32  3j  4e  59  64  6l  7g  8b  96  a1  ai  bd  c8  d3  dk  ef  fa  g5  h0
   i  1e  2a  36  42  4k  5g  6c  78  84  90  9i  ae  ba  c6  d2  dk  eg  fc  g8  h4  i0
   j  1g  2d  3a  47  54  61  6k  7h  8e  9b  a8  b5  c2  cl  di  ef  fc  g9  h6  i3  j0
   k  1i  2g  3e  4c  5a  68  76  84  92  a0  ak  bi  cg  de  ec  fa  g8  h6  i4  j2  k0
   l  1k  2j  3i  4h  5g  6f  7e  8d  9c  ab  ba  c9  d8  e7  f6  g5  h4  i3  j2  k1  l0
  10  20  30  40  50  60  70  80  90  a0  b0  c0  d0  e0  f0  g0  h0  i0  j0  k0  l0 100

0

Pyke,14个字节* 0.8 = 11.2个字节,非竞争性

QhD]UA*MbQMl2P

在这里尝试!

说明:

            - autoassign Q = eval_or_not_input()
QhD]        - [Q+1, Q+1]
    U       - nd_range(^)
     A*     - apply(*, ^)
       MbQ  - map(base(Q), ^)
          Ml2 - map(lower, ^)
          P - print_grid(^)

或12个字节无奖金

13D]UA*Mb12P

挑战指定大写字母
Luis Mendo'Mar
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.