チーラの掛け算表


26

Cheela(本からドラゴンの卵ロバート・L・フォワードによっては)中性子星の表面に住む生き物です。体は平らで円形で、周囲に12の目があります。したがって、自然にベース12の番号付けシステムを使用します。

チーラの中でも、hatch化の世話と若者の教育は、老人によって行われる仕事です。若いCheelaに乗算の方法を教える必要があるため、Old Onesは乗算表を使用できます。

次のように、タスクはbaseに12x 12乗算テーブルを作成12します。大文字AB1011それぞれ10進数と対応する数字に使用されます。

  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を満たすために必要な先行スペースが含まれていることを考慮します(したがって、各数字は3文字を占有し、最初のスペースはスペースである可能性があります)。たとえば、2スペースで区切られたテーブルは次のようになります。

      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入力として数値を受け入れ、上記の形式でbaseにNx N乗算テーブルを生成しNます。

入力は、キーボードからでも、関数の引数としてでもかまいません。プログラムや関数がのために働く必要があり2N36数字としてまず使用して、Nシーケンスの文字を01、...、 、、9 、...、(大文字)ABZ

この拡張チャレンジはオプションです。このルートに従う場合、バイトカウントを20%オフにしてください(整数に丸める必要はありません)。


いいね、ルイス!=)私はMATLABの解決策を考え出すには時間があればいいのに、私は...忙しい測定のクリスマスプレゼントの大きさだ
Stewieグリフィン

6
それらの球形の帽子で頑張ってください!:-P
ルイスメンドー

5
Because they have twelve eyes, they naturally use a base-12 numbering system.まあ、当然。結局のところ、バイナリを使用する理由です
;;

2
@TimPederick良い点:-D明確にするために、Cheelaの体は円形で、必要に応じて手足の形を変えることができます... 12の目を持つことは、体の最も明確な特徴です。質問を更新しました、ありがとう!
ルイスメンドー

1
@LuisMendoとても素敵な小説、引用したもの。Starquakeも悪くありません。
lstefano

回答:


14

パイス、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

免責事項

言語の作成者とチャレンジの作成者は同じであるため、この回答は勝ちません

この制限が必要かどうかの議論については、このメタ質問を参照してください。

コード

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:、を削除し[]ます。これは、この課題が投稿されてから言語に加えられた変更に適応するためです。


「言語の作成者とチャレンジの作成者は同じであるため、この回答は受賞資格がありません。」私はこの制限を知りませんでした。これは自発的なものですか、それとも関連するメタコンセンサスを見つけましたか?
アレックスA.

1
@AlexA。自己課しました。おそらくそれに関して何らかの合意があったのではないかと思った。あなたの称賛から、私はそこに何もありませんか?私のポイントは、言語を設計してからチャレンジを投稿するとおそらく有利な立場にいるということです。それについて通常何が行われますか?制限はありませんか?
ルイスメンドー

私はあなたの言語の組み込みのユースケースとして具体的に挑戦を計画しない限り、必ずしもあなたが有利であるとは思わないでしょう。私はそのようなコンセンサスを知らないので、メタに尋ねることをお勧めします。
アレックス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あなたの入社以来、文字列、。そしてもう1バイト:に変更rjbm...K1jmr...1Kます。この変更により、あなたは28のバイトを得る:KSJ12jmrsm.[\ 4sm.Hbj*dkJK1K
Jakube

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バイトまでになりました!:)


私が答えをゴルフすればするほど、それはあなたのものに見え始めます!
ティムペデリック

いくつかの可能な改善:使用%は-formattingの代わりにrjust'%4s'%f(...))。で各値を印刷するprint ...,(およびprint改行用に1つ)がであるかどうかを調べますjoin。もしそうなら、ループを折り畳んでみてください。
ティムペデリック

ティムのおかげで、ループを折りたたんでみました(このトリックは知りませんでした)。私はそれが私が多くのバイトを獲得するかどうか
わかり

を使用して、関数内で3進数形式(条件andA orB)に切り替えたことがわかります。それが以前のものより短くないことに気付くまでそれをしましたが、あなたはPython 2を使用しています!でバイトを保存できます。fn>=bn//bn/b
ティムペデリック

はい、それがもう1バイトを節約するためにpython 2を利用するコードのこの部分を使用した理由です:)
basile-henry

4

CJam、38 33 32 38 *(.8)= 30.4バイト

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

ここで試してみてください。

(今はマーティンのものとかなり似ているように見えます。)

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(名前が付けられたサブルーチンの呼び出しの開始として扱われるので、確かにコンパイルされません。コンパイルエラーが発生します。forfor
ブラッドギルバートb2gills

何かを学んだ。ありがとうございました。
J_F_B_M

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)}

ノート

  • それは残念です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のソリューションから何かをコピーすることは避けましたが、私はそれを一目見て、どこでもっとトリムできるかを確認しました。そしてその前でさえ、私はそれをゴルフするほど、より多くのものがブーメランのように見え始めたことを発見しました!


いい解決策!:)そして、あなたは私よりも良いスコアを取得します!<10の代わりに> 9が好きです。私はpython3とスター付きの式にあまり詳しくありません(それを調べなければなりませんでした)。私はあなたの〜のトリックが大好きです、私はそれを使い始める必要があります!
バジルヘンリー

私はあなたのソリューションを少しテストしましたが、2を超えるベースn桁を返さないようです。たとえばprint(i(15,12),i(120,12),i(144,12),i(150,12))、コードの13 A0 00 06代わりにを返す場合13 A0 100 106。残念ながら、このタスクでは3桁のベースn番号(100)を1つ印刷する必要があります。...それは修正にすぎ難しいことではありませんが、それは数バイトを追加する可能性がある
バジル・ヘンリー

@Boomerang:<傷ヘッド>私は、その後、何かが壊れたんだろう...それがあるためだと思いました前に働いて!問題は、先行する1を与えないということのようです...ああ、待って、私は問題が何であるか知っています。そうn>=bではないはずn>bです。
ティムペデリック

コードを小さくする別のトリックを見つけました。t(b)内でiを定義して、iの2番目の引数を削除できるようにします。この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

@Boomerang:ねえ、あなたのものが最初でした。Python2はあなたがまだ私を追い抜くのに十分なショートカットを提供していると思います。しかし、助けてくれてありがとう!
ティムペデリック

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で短くします。少なくとも、回避変数a、それは無用だb+=' '.repeat(4-a.length)+(i*j).toString(n).toUpperCase()
edc65

ありがとう😊 しかし、@ edc65、aどうやって計算するのを避けたら...repeat(4-a.length)...
Aᴄʜᴇʀᴏɴғᴀɪʟ

ああ、ごめん、あなたは正しい。そのまま+1
edc65

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(___))) セルに変換し、1x575文字列を生成するスペースで文字列を結合する文字に戻す

[' ',strjoin(___)] 576個の要素を持つようにスペースを追加します

strrep(___,' 0',' ')先行ゼロを1つ削除します。先行ゼロが2つある文字列があるため、2回実行します

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)
ルイスメンドー

1
ああ、サイトへようこそ!:-)
ルイスメンドー

@LuisMendoありがとう!@(N)表記で回答を編集します
brainkz

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でのゴルフのヒントは良い読み物です。
マナトワーク

PPCG.SEへようこそ。他のPythonの答えに勝っていなくても、異なる(同じアルゴリズム/アイデアではない)限り、投稿できます:)。
帰天峡

@manatworkありがとう!それでさらに9バイト減りました。
Teemu Piippo

2

APL、32 31×0.8 = 24.8 バイト

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

原点0。英語:

  • ∘.×⍨1+⍳⍵: 九九
  • ⍵⊥⍣¯1¨:ベースで表現express乗算表の各要素
  • ⊃∘(⎕D,⎕A)¨¨:数値のベクトルのテーブルをcharsのベクトルのテーブルに変換します
  • ¯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

ルビー、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

チャレンジでは大文字を指定します
ルイスメンドー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.