Blok angka

18

Keluarkan / cetak blok teks ini:

1234567890
2468013579
3691470258
4815926037
5049382716
6172839405
7306295184
8520741963
9753108642
0987654321

Format yang dapat diterima meliputi:

  • Mengejar baris baru / spasi putih
  • Daftar string
  • Daftar daftar karakter
  • Daftar daftar bilangan bulat

Namun, daftar bilangan bulat tidak dapat diterima karena baris terakhir bukan bilangan bulat.

Ini adalah . Jawaban terpendek dalam byte menang. Celah standar berlaku.

Biarawati Bocor
sumber

Jawaban:

20

Mathematica, 33 byte

Mod[1##,11]~Mod~10&~Array~{10,10}

Cobalah online! (Menggunakan Matematika.)

Sel pada indeks berbasis 1 (x,y)memiliki nilai((x*y) % 11) % 10

Martin Ender
sumber
11

Python 2 , 48 46 byte

n=10
while n:print('00987654321'*n)[n::n];n-=1

Cobalah online!

mdahmoune
sumber
6
Selamat datang di PPCG, dan jawaban pertama yang luar biasa! Kami harap Anda akan tetap bertahan dan berkontribusi lebih banyak :-)
ETHproduk
@ETHproductions thanx :)))
mdahmoune
7

Jelly , 7 byte

⁵×þ`%‘%

Cobalah online!

Menggunakan algoritma Martin.

Erik the Outgolfer
sumber
5

MATL , 12 11 byte

Menyimpan satu byte berkat Luis. Saya selalu lupa bahwa &ini adalah jalan pintas untuk menduplikasi dan mentransposisi.

10:&*11\10\

Cobalah online!

Menggunakan algoritma @ Martin: x*y % 11 % 10

Penjelasan:

10            % Pust 10 to the stack. Stack: 1
  :           % 1-based range. Stack: [1 2 3 ... 10]
   &          % Duplicate range. Stack: [1 2 3 ... 10],[1 2 3 ... 10]
              % Transpose last range. Stack [1 2 3 ... 10],[1;2;3 ...10]
    *         % Multiply with broadcasting. Stack: [1 2 3 ...;2 4 6...] (10-by-10 array)
     11       % Push 11 to the stack. Stack [1 2 3 ...;2 4 6 ...], 11
       \      % Modulus. 
        10    % Push 10 to the stack.
          \   % Modulus
              % Implicit display 

Jumlah yang sama:

10t:&*11\w\
Stewie Griffin
sumber
Anda dapat menyimpan byte pengganti t!*oleh&*
Luis Mendo
1
@LuisMendo double backticks jika Anda memiliki backslash di akhir cuplikan kode dalam komentar.
Martin Ender
@ MartinEnder Terima kasih! Saya tidak pernah ingat bagaimana itu bekerja, jadi saya pergi dengan cara mudah :-)
Luis Mendo
@LuisMendo ya agak membingungkan dengan posting dan komentar menggunakan sintaks yang berbeda.
Martin Ender
Terima kasih @LuisMendo! Itu tidak ada dalam dokumen, bukan?
Stewie Griffin
2

Retina , 59 byte

Hitungan byte mengasumsikan penyandian ISO 8859-1.


10$*
1
,1$`
,1+
$_¶
(?<=(¶?.+)+)1
$#1$*
1{10}1?

,(1*)
$.1

Cobalah online!

Penjelasan

Implementasi lain dari ...% 11% 10 algoritma. Bagian yang menyenangkan dari melakukannya dengan regex adalah bahwa kita dapat menangani kedua perhitungan modulo sekaligus.


10$*

Menginisialisasi string menjadi sepuluh 1s.

1
,1$`

Ganti masing-masing dengan koma, satu, dan awalan di depan yang itu. Ini memberi ,1,11,...,1111111111, yaitu kisaran unary.

,1+
$_¶

Sekarang ganti masing-masing elemen rentang dengan seluruh string diikuti oleh umpan baris. Ini memberi kami kotak 10x10 angka unary yang menunjukkan kolom saat ini.

(?<=(¶?.+)+)1
$#1$*

Cocokkan masing 1- masing dan tentukan baris mana yang aktif dengan mengulangi grup yang berkali-kali. Ganti 1dengan yang banyak 1s. Ini mengalikan nilai di setiap baris dengan indeks berbasis 1 baris.

1{10}1?

Sekarang mari kita lakukan mod 11, mod 10 dalam satu langkah. Untuk melakukan mod 11 , kami biasanya hanya menghapus semua 1{11}dari string yang tersisa dengan sisanya. Dan kemudian kami akan menghapus 1{10}setelah itu. Tetapi jika kita hanya menghapus sepuluh 1s ditambah yang lain jika mungkin, keserakahan mesin regex akan melakukannya mod 11 untuk kita selama mungkin, dan jika tidak, maka itu akan mencoba setidaknya mod 10 .

,(1*)
$.1

Akhirnya, kami hanya mengonversi setiap angka menjadi desimal dengan menggantinya dengan panjangnya.

Martin Ender
sumber
2

05AB1E , 14 byte

11GTLN*11%T%})

Cobalah online!

Gunakan algoritma Martin, seperti biasa.

Erik the Outgolfer
sumber
Oh, ada algoritma untuk pola itu. Itu menjelaskan mengapa saya 30 byte di atas jawaban rata-rata.
Magic Gurita Guci
2

Haskell, 43 byte

l=[1..10]
f=[[x*i`mod`11`mod`10|i<-l]|x<-l]
siracusa
sumber
2

Javascript (ES6), 70 64 56 byte

_=>[...1e9+''].map((_,a,b)=>b.map((_,c)=>-~a*++c%1‌​1%10))

Disimpan 4 byte berkat Shaggy dan 8 byte terima kasih kepada Arnauld.

Luke
sumber
1
66 byte: _=>[...a=Array(10)].map((_,x)=>[...a].map((_,y)=>(x+1)*++y%11%10)). Anda menyelamatkan saya 4 byte, saya menyelamatkan Anda 4 byte :)
Shaggy
Terima kasih banyak. Anda juga memperbaiki bug, jadi saya mencukur 2 byte lagi dari solusi Anda ;-)
Luke
1
Anda dapat menyimpan 5 byte dengan menggunakan parameter ke-3 dari callback di yang pertama map()dan 3 byte lebih dengan menggunakan 1e9+''alih-alih Array(10). Itu mengarah ke _=>[...1e9+''].map((_,x,a)=>a.map((_,y)=>-~x*++y%11%10)).
Arnauld
@Arnauld: Terima kasih atas 1e9triknya. Saya tidak tahu itu. Saya memang berpikir untuk menggunakan argumen ketiga, tetapi untuk beberapa alasan saya tidak menggunakannya.
Luke
Saya baru-baru ini menyusun daftar trik serupa di sini .
Arnauld
2

Japt , 16 12 11 byte

Ternyata ini adalah 200 (tidak terhapus) jawaban saya di sini :)

Sepertinya ini adalah formula yang sama yang dilihat Martin .

Aõ
£®*X%B%A

Mengujinya ( -Rmenandai untuk tujuan visualisasi saja)

  • 4 byte disimpan berkat Luke menunjukkan bahwa mengembalikan array array diizinkan.

Penjelasan

Aõ    :Generate an array of integers from 1 to 10, inclusive.
£     :Map over each element in the array, returning...
®     :Another map of the same array, which...
*X    :Multiplies the current element of the inner function by the current element of the outer function...
%B    :Modulus 11...
%A    :Modulus 10.
      :Implicit output of resulting 2D array
Shaggy
sumber
Kalahkan saya untuk itu ... Anda dapat menjatuhkan dua karakter terakhir, dan alih-alih menggunakan -Rbendera
Luke
1
Bahkan lebih baik, jatuhkan empat karakter terakhir. Sepertinya itu diperbolehkan ...
Luke
Yup, sepertinya Anda benar, terima kasih, @ Lukas :)
Shaggy
1

Java 8, 84 byte

o->{String r="";for(int x=0,y;++x<11;r+="\n")for(y=0;++y<11;r+=x*y%11%10);return r;}

Menggunakan algoritma yang sama dengan jawaban @MartinEnder 's Mathematica : 1-diindeks x*y%11%10.

Penjelasan:

Coba di sini.

o->{                     // Unused Object parameter and String return-type
  String r="";           //  Result-String
  for(int x=0,y;++x<11;  //  Loop (1) from 1 to 11 (exclusive)
      r+="\n")           //    And append a new-line after every iteration
    for(y=0;++y<11;      //   Inner loop (2) from 1 to 11 (exclusive)
      r+=x*y%11%10       //    And append the result-String with `x*y%11%10`
    );                   //   End of inner loop (2)
                         //  End of loop (1) (implicit / single-line body)
  return r;              //  Return result-String
}                        // End of method
Kevin Cruijssen
sumber
1

Python 2 , 58 52 byte

-6 byte berkat offcialaimm.

Menggunakan algoritma Martin yang saya tidak mengerti bagaimana dia menghasilkannya dengan begitu cepat. o0

r=range(1,11)
print[[x*y%11%10for y in r]for x in r]

Cobalah online!

benar-benar manusiawi
sumber
1
Singkatan r=range(1,11)menghemat 6 byte
officialaimm
2
Salah satu alasan mengapa saya melihat formula itu begitu cepat adalah soal matematika ini. SE tentang komentar saya dan orlp di sana .
Martin Ender
1

Pyth, 13 byte

mme%*kd11STST

Coba di sini

-1 terima kasih kepada KarlKastor .

Ayo duuuuuuupe!

Erik the Outgolfer
sumber
Simpan satu byte jika Anda menggunakan ebukan% T
KarlKastor
@KarlKastor ... dan saya mengingatnya ._.
Erik the Outgolfer
1

R , 19 byte

1:10%o%1:10%%11%%10

Cobalah online!

Paling sedikit "R" -memandang sedikit kode R yang pernah saya tulis. Menggunakan algoritma yang sama dengan jawaban Martin Ender (dan hampir semua jawaban lainnya juga). x %o% ysama dengan outer(x, y).

pengguna2390246
sumber
1

Arang , 30 29 19 byte

Fχ«FχI﹪﹪×⁺¹ι⁺¹κ¹¹χ⸿

Cobalah online!

Menggunakan formula Martin .

  • 10 byte disimpan berkat Neil, membuktikan sekali lagi bahwa saya masih banyak belajar ...
Charlie
sumber
Anda tidak perlu mengikuti »dan sementara Anda dapat menggunakan ωbukannya ””Anda dapat menyimpan sejumlah byte dengan menggunakan ⸿karena hal ini kemudian menjadi Fχ«FχI﹪﹪×⁺¹ι⁺¹κ¹¹χ⸿. (Sebelum saya tahu tentang ⸿saya, saya akan menyarankan J⁰ιyang masih akan menyelamatkan sejumlah byte.)
Neil
@ Neil Ini ⸿adalah operator terbalik, apa fungsinya di akhir kode Anda tanpa argumen? Apakah ini didokumentasikan?
Charlie
1
Tidak, adalah operator Reverse, ⸿adalah move cursor to start of next linekarakter (suka tetapi bisa dalam string terpisah).
Neil
0

C (gcc) , 70 byte

f(x,y){for(x=0;x++<10;puts(""))for(y=0;y++<10;putchar(x*y%11%10+48));}

Cobalah online!

Giacomo Garabello
sumber
0

QBIC , 17 byte

[|?[|?a*b%11%z';

Ini, tentu saja, menggunakan Metode Martin. Ini diterjemahkan ke kode QBasic ini .

Penjelasan

[|               FOR A = 1 to 10 ([ starts a FOR loop, | delimits the list of arguments; 
                 a FOR loop with 0 args loops from 1 to 10 by default with increment 1.
  ?              PRINT a newline
   [|            Start a second FOR loop from 1-10, iterator b
     ?           PRINT
      a*b%11%z   the result of Martin's formula.
              '; and suppress newlines/tabs/spaces
steenbergh
sumber
0

C #, 81 byte

_=>{var r="";for(int x=0,y;++x<11;r+="\n")for(y=0;++y<11;r+=x*y%11%10);return r;}

Algoritma yang sama dengan sebagian besar jawaban lain dan pada dasarnya port C # dari @Kevins Java menjawab.

TheLethalCoder
sumber
0

GolfScript , 37 24 byte

10,{){\)*11%10%}+10,%}%`

Cobalah online!

-13 Berkat trik pintar yang disarankan Martin Ender .

Erik the Outgolfer
sumber
jika Anda mengubahnya menjadi program lengkap ( {-> ;, }-> `), Anda setidaknya dapat membatalkan yang pertama [.
Martin Ender
Ini jauh lebih pendek untuk menggunakan loop bersarang sederhana alih-alih teknik zip:{){\)*11%10%}+10,/n}10,/
Martin Ender
@ MartinEnder Umm ... Anda sepertinya terlalu sering menggunakan /. ;)
Erik the Outgolfer
@ MartinEnder Oh saya melihat apa yang Anda lakukan ... Anda menggunakan int blk +-> {int space contents-of-blk}.
Erik the Outgolfer
@ MartinEnder ok Saya sudah menerapkan +trik Anda ... walaupun saya sedikit mengubah kode Anda
Erik the Outgolfer
0

Pyke, 13 byte

TS F~u0+*i>i%

Coba di sini!

TS            -  [1, 2, 3, 4, 5, 6, 7, 8, 9]
   F~u0+*i>i% - for i in ^:
    ~u0+      -     "01234567890"
        *     -    ^ * i
         i>   -   ^[i:]
           i% -  ^[::i]
Biru
sumber
0

PHP , 54 byte

for(;9>=$y++||9>=$x+=$y=print"
";)echo($x+1)*$y%11%10;

Cobalah online!

PHP , 56 byte

for(;$x++<=9;print"
")for($y=0;$y++<=9;)echo$x*$y%11%10;

Cobalah online!

Jörg Hülsermann
sumber
1
Anda bisa menjatuhkan kurung ().
Christoph
-2 byte:for(;<0>$y++||10>$x+=$y=print"\n";)echo($x+1)*$y%11%10;
Titus
... ataufor($x=1;11>++$y||11>$x+=$y=print"\n";)echo$x*$y%11%10;
Titus
0

TECO, 45 byte

1un@i/
/10<@i/01234567890/jl10<qnc0a^t>jtl%n>

A (cukup) implementasi langsung dari jawaban Rod's Python.

1un           !initialize register n to 1!
@i/<nl>/      !insert a newline!
10<           !loop for 10 rows!
@i/01234567890/  !insert the mysterious string of digits!
j             !move point to start of buffer!
l             !move forward past the newline!
10<           !loop for 10 digits on a line!
qnc           !move point forward by n characters!
0a^t          !print the character at point!
>             !end inner loop!
j             !move point to start of buffer!
t             !print (empty) line!
l             !move to start of digit string!
%n            !increment register n (for next line)!
>             !end outer loop!

Menggunakan sisipan yang dimusnahkan <ESC> dan karakter kontrol untuk perintah ^ T akan menyimpan yang lain tiga lima byte, dengan mengorbankan keterbacaan.

Menggunakan formula mod-11 / mod-10 Martin sebenarnya membuatnya lebih lama pada 43 byte menggunakan kontrol untuk ^ A dan ^ T, terutama karena TECO tidak memiliki operator mod.

0ur10<%run10<qn-10"g-11%n'qn\r0a^Tqr%n>^a
^A>

Mod 11 dilakukan secara berkelanjutan dengan menambah angka dalam qn oleh -11 setiap kali melebihi 10. The qn\r0a^T Urutan memasukkan angka dalam buffer pengeditan sebagai digit desimal, membalik melewati digit terakhir, mengambilnya dari buffer dan mengetiknya, dasarnya melakukan mod-10.

Saya berharap ini lebih pendek. Baiklah.

JoeT
sumber