Tulis kode terpendek untuk mencetak Tabel Multiplikasi berikut:
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
1×4=4 2×4=8 3×4=12 4×4=16
1×5=5 2×5=10 3×5=15 4×5=20 5×5=25
1×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36
1×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49
1×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64
1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81
code-golf
kolmogorov-complexity
matrix89
sumber
sumber
for
loop? Di mana bagian yang menantang (menarik)?for
. Ok saya gunakanwhile
.Jawaban:
Excel,
9291 BytesDari jendela langsung editor VBA, jalankan perintah berikut:
Range("A1:I9").Formula="=IF(ROW()<COLUMN(),"""",COLUMN()&""×""&ROW()&""=""&COLUMN()*ROW())"
Output langsung pada lembar kerja aktif.Aku golfed sebuah byte ekstra dengan menukar urutan dari suatu
if
berubah>=
ke<
. Saya tidak memperbarui tangkapan layar, tetapi hanya memengaruhi rumus di bagian atas, bukan output.sumber
FOR
loop bersarang biasa .Python (75)
sedikit bermain golf lebih baik daripada dua versi Python lainnya.
sumber
C ++,
10698 byteSaya menggunakan dua loop dan beberapa trik.
sumber
#import <stdio.h> main(){for(int i=0,j;i++-9;j=0)while(j++-i)printf("%dx%d=%d%s",j,i,i*j,j<i?"\n":" ";}
lebih pendek 3 byte.#import
dan<cstdio>
?J:
5751 karakterTidak ada loop.
sumber
([:;"2*\#"2(":@],'x',":@[,'=',":@*,' '"_)"0/~)>:i.9
APL (37)
Dan itu bukan hanya dua for-loop. Di APL, konstruk berikut:
di mana
x
dany
adalah daftar, danF
merupakan fungsi, berlakuF
untuk setiap pasangan item dix
dany
dan memberi Anda sebuah matriks.Jadi:
∆∘.×∆←⍳9
memberi Anda tabel perkalian dari 1 hingga 9. Fungsi di atas menghasilkan string yang diperlukan untuk setiap pasangan, yaitu(⍕⍺)
, representasi string dari angka pertama, diikuti oleh×
, diikuti oleh(⍕⍵)
, representasi string dari angka kedua, diikuti oleh=
, diikuti oleh, diikuti oleh,⍕⍺×⍵
, selama⍺≥⍵
.sumber
Ruby:
6059 karakterContoh dijalankan:
sumber
(1..9).map{
menjadi1.upto(9){
!Perl, 54 Karakter
sumber
APL (Dyalog), 28
Dianalogikan dengan loop ganda dalam bahasa lain
{⍵{...}¨⍳⍵}¨⍳9
mengatur loop ganda⍕⍵,'×',⍺,'=',⍺×⍵
membuat string untuk setiap pasangan↑
Mengkonversi array array string ke matriks sengatanKeluaran
sumber
↑{⍵{⍕⍵'×'⍺'=',⍺×⍵}¨⍳⍵}¨⍳9
atau bahkan menggunakan "operator kunci" yang baru:{⍕⍵'×'⍺'=',⍺×⍵}¨∘⍳⌸⍳9
Mathematica , 45
Cukup membosankan, tapi saya kira ini berfungsi sebagai perbandingan sintaks:
sumber
D, 75 karakter
Anda baru saja mengatakan kode tidak berfungsi atau program penuh
sumber
foreach(i,1..10){foreach(j,1..i+1)writef("%dx%d=%d ",i,j,i*j);writeln;}
VBScript (133); tanpa loop.
Atas permintaan penantang: tidak ada loop. Kode ini menggunakan panggilan subrutin rekursif.
sumber
Maple, 64
sumber
kode mesin x86_64 (linux),
1759976 byteIni adalah dump dari file biner, dan semua ini adalah 175 byte. Ini pada dasarnya melakukan dua loop yang sama seperti yang dilakukan semua jawaban, tetapi mencetak ke konsol sedikit lebih sulit dan pada dasarnya mengharuskan mendorong karakter untuk mencetak ke stack secara terbalik, dan kemudian membuat syscall (khusus linux) untuk benar-benar memasukkan karakter-karakter itu. ke stdout.Saya sekarang telah mengoptimalkan ini sehingga hanya 1 operasi tulis dilakukan (lebih cepat!) Dan memiliki angka ajaib (wow!) Dan dengan mendorong seluruh hasil ke tumpukan ke belakang sebelum melakukan syscall. Saya juga mengeluarkan rutin keluar karena siapa yang butuh kode keluar yang benar?
Berikut ini tautan ke pertama dan kedua saya upaya , dalam sintaks nasm aslinya.
Saya menyambut siapa saja yang memiliki saran lain tentang bagaimana hal itu dapat ditingkatkan. Saya juga bisa menjelaskan logikanya lebih terinci jika ada yang penasaran.
(Juga, itu tidak mencetak ruang ekstra untuk membuat semua kolom sejajar, tetapi jika itu diperlukan saya bisa memasukkan logika dengan biaya beberapa byte lagi).EDIT: Sekarang mencetak ruang ekstra dan bermain golf lebih banyak lagi! Itu melakukan beberapa hal yang sangat gila dengan register, dan mungkin tidak stabil jika program ini akan diperluas.
sumber
Javascript, 190 byte
Terlambat ke pesta, tapi aku jengkel dengan komentar @jdstankosky dan memutuskan untuk mengambil pendekatan yang berbeda. Berikut adalah entri Javascript yang membuat template dan mengevaluasi dirinya sendiri sepanjang jalan.
Versi un-golfed (versi yang sedikit lebih tua di mana fungsi mengembalikan tabel alih-alih skrip yang menyiagakannya, tetapi prinsip yang sama berlaku):
sumber
Pascal, 128 byte
Satu prosedur rekursif menangani semuanya. Panggil dengan
m(9,9)
.Tidak Disatukan:
sumber
Fourier,
756632 byteTerima kasih @BetaDecay untuk 124 byte!
sumber
vba 55
(jendela langsung)
note - GWBasic hanya membutuhkan 2 karakter tambahan:
sumber
Javascript, 75
Saya ingin tahu apakah sesuatu yang lebih baik dari dua (gabungan?) Untuk loop adalah mungkin ...
sumber
Coreutils / Bash:
147136135Golf, menggunakan baris baru yang eksplisit dan, menggunakan opsi kepala yang tidak digunakan lagi (terima kasih manatwork):
Keluaran:
sumber
$(( ))
evaluasi aritmatika dengan$[ ]
; bagikan 2 karakter dengan mengganti$'\n'
karakter baris baru yang keluar dengan karakter literal (maksud saya,yes '
dalam satu baris, kemudian'
pada baris berikutnya); cadang 2 karakter dengan tidak menggunakanhead
's-n
pilihan eksplisit, hanya-
dan jumlah.$[ ]
notasi, senang tahu. Mengganti-n
oleh-
hanya satu karakter kurang sehingga totalnya 11, terima kasih banyak :).LOLCODE, 202 byte
Tidak Disatukan:
Pythonated untuk non-leetspeakers:
sumber
c #, 142 byte
Dan bukan untuk di depan mata ...
sumber
ForEach
"bukan untuk di depan mata" yah ... xD> <> , 50 byte
Anda dapat mencobanya di penerjemah online .
Perhatikan bahwa ada spasi tambahan di setiap baris, yang mungkin membuatnya salah (OP belum menyatakan poin ini pada jawaban ini).
sumber
/// , 268 byte
sumber
JAVA,
103 94 9290 byteMenggunakan JShell dari Java 9 SDK memungkinkan saya untuk menghemat banyak ruang
Mengikuti saran Kevin, saya mengurangi solusi sebanyak 2 byte.
Berkat cliffroot, saya dapat menguranginya dengan 1 byte lagi
sumber
int
dari for-loop kedua, dan menambahkan,j
yang pertama. Jadi seperti ini:for(int i=0,j;++i<=9;)for(j=1;j<=i;)System.out.print(i+"*"+j+"="+i*j+"\t"+(j++<i?"":"\n"));
++i<=9
dengani++<9
C 79 byte
yang utama
meja
sumber
Tcl 98 karakter
sumber
Javascript: 82 karakter
sumber
for(i=0,s="";9>i++;){for(j=0;j++<i;)s+=j+"x"+i+"="+j*i+" ";s+="\n"}alert(s)
, namun hal spasi ganda pada 2 digit tidak dihormati, saya akan mengirimkan yang satu tetapi menggunakan+(9<i*j?" ":" ")
alih-alih hanya+" "
mengedit: pada ternary ruang ganda menghilang, tetapi mereka berada di yang kedua param4x4
tidak langsung di bawah5x4
seperti dalam tugas.Python: 87
Saya sedang melihat-lihat solusi yang telah diposting orang lain dan kebanyakan dari mereka tampaknya tidak mendapatkan spasi yang benar.
sumber
Python (79)
atau ( 77 ) jika saya menggunakan
range(10)
kecuali yang menghasilkan garis kosong di awalsumber
Perl:
65, 62 karaktersumber
printf
tanda kurung; cadang 1 karakter dengan memindahkan penugasan $ i ke dalam ekspresi kisaran:map{map{printf"%dx%d=%2d ",$_,$i,$_*$i}1..($i=$_);print$/}1..9
.