Diberikan (dengan cara apa pun) dua bilangan alami yang berbeda (dengan ukuran apa pun yang masuk akal), menghasilkan (dengan cara apa pun) kuadrat dari jumlah mereka seperti dalam contoh di bawah ini:
Diberikan 4 dan 3, output:
12 12 12 12 9 9 9
12 12 12 12 9 9 9
12 12 12 12 9 9 9
16 16 16 16 12 12 12
16 16 16 16 12 12 12
16 16 16 16 12 12 12
16 16 16 16 12 12 12
Diberikan 1 dan 3, output:
3 9 9 9
3 9 9 9
3 9 9 9
1 3 3 3
Ruang kosong mungkin berbeda-beda dalam alasan tetapi kolom harus kiri-lurus, kanan-lurus, atau (pseudo-) berpusat.
Baris baru yang tertinggal baik-baik saja, tetapi celah standar tidak.
Ini adalah kode-golf jadi sertakan tajuk seperti # LanguageName, 123
dalam jawaban Anda, di mana angkanya chars (byte untuk bahasa yang tidak berbasis teks). Kode pengemasan ke karakter Unicode besar tidak diperbolehkan.
Bonus: -3 jika kode Anda hanya menghasilkan satu kuadrat ketika salah satu angka adalah 0; misalnya diberikan 0 dan 3, output:
9 9 9
9 9 9
9 9 9
Jawaban:
J, 9 byte - 3 = 6
Terinspirasi oleh jawaban APL @ NBZ , diturunkan oleh @randomra. Ini mendefinisikan kata kerja yang mengambil array angka. Ini digunakan sebagai berikut:
Saya juga mengklaim bonus 3-byte, karena input 0 menghasilkan sub-matriks ukuran nol:
Penjelasan
J memiliki keunggulan dalam tantangan ini. Selain makan masalah manipulasi array untuk sarapan, ia mencetak matriks 2D dalam format yang benar secara default.
sumber
table flipper
emotikon ASCII (╯ ° □ °) ╯︵ ┻━┻Oktaf, 45 byte - 3 = 42
Penjelasan
Ini membangun dua vektor (mari kita asumsikan
m = 4
dann = 3
):ones(n, 1)
membangun sebuah array yang berukurann x 1
, jadi mengalikannya dengann
kita dapatkan:Kemudian vektor dikalikan dengan cara elemen-bijaksana, dengan ekspansi siaran otomatis sehingga vektor 7-elemen menghasilkan matriks elemen 7x7:
Misalnya, perkalian baris pertama
a
denganb
memberi:Dan juga untuk baris yang tersisa
a
.Keluaran:
Anda dapat mencobanya di sini di ideone
sumber
s=
. Kami memiliki konvensi bahwa fungsi anonim / lambdas tidak harus disimpan dalam variabel.Dyalog APL , 10-3 = 7
Terinspirasi oleh jawaban ini tempat argumen direplikasi dan kemudian digunakan dalam tabel perkalian:
⎕
Menerbitkan prompt (⎕:
) dan mengevaluasi ekspresi apa pun yang dimasukkan. (Untuk alasan keamanan, ini tidak berfungsi pada TryAPL tetapi berfungsi pada NGN / APL .)/⍨
Menggandakan argumennya sendiri kali (/⍨4 3
⇔3 3 3 4 4 4 4
)∘.×⍨
Membuat tabel multiplikasi.⊖
Membalik terbalik.Ini terjadi untuk bekerja pada input panjang apa pun (input indentasi 6 spasi, output berada di margin kiri):
* Awalnya, saya memiliki solusi yang berbeda dalam pikiran: Setiap persegi panjang dibuat secara terpisah dengan membuat tabel perkalian untuk setiap kombinasi dari dua argumen. Kemudian empat kotak diperbaiki bersama-sama secara vertikal dan horizontal. Ini terlihat seperti ini:
⎕
Prompt, seperti di atas.,⍴×<
Gabungkan (,
) args dan gunakan itu untuk membentuk (⍴
) persegi panjang yang diisi dengan produk mereka (×
).∘.(
...)⍨
Buat tabel di mana setiap sel adalah apa pun yang ditentukan dalam(
...)
⊖
Balik secara vertikal.⍪⌿
Gabungkan sel secara vertikal.,/
Gabungkan sel secara horizontal.sumber
(|.*/])@#~
R, 31 - 3 = 28
Penjelasan:
Ini juga berfungsi untuk lebih dari dua angka. Misalnya, output untuk (5,3,2) terlihat seperti ini:
sumber
cat
atauwrite
agar itu menjadi jawaban yang valid.Haskell,
153125 byte - 3 = 122Setengah dari kode adalah untuk pemformatan output. Ini bekerja untuk bilangan bulat besar yang sewenang-wenang. Contoh output:
Terkadang ada spasi putih tambahan di antara angka-angka, karena saya menghitung ruang yang dibutuhkan berdasarkan
x*x+y*y
bukanmax (x*x) (y*y)
, misalnyaTapi paling banyak satu spasi putih.
sumber
Mathematica 56-3 = 53
Pembaruan : Saya menambahkan metode kedua, dengan ukuran kode yang persis sama, yang menggunakan fungsi bernama. Ini mempekerjakan
Array
daripadaTable
tetapi mengikuti logika yang sama. (Lihat di bawah.)Metode 1
Ini membuat tabel produk, faktor-faktor yang bergantung pada baris, nilai kolom. Pasangan angka dimasukkan sebagai daftar bilangan bulat. Fungsi anonim seperti berikut ini, paling berguna jika hanya digunakan sekali dalam suatu program. Kalau tidak, lebih masuk akal untuk menggunakan fungsi bernama.
Setiap faktor adalah pernyataan Jika-maka:
If[r>#2,#,#2]
berarti, "Jika nomor baris lebih besar dari input kedua, gunakan input pertama sebagai faktor, jika tidak gunakan input kedua.If[c>#,#2,#]
berarti, "Jika nomor kolom lebih besar dari input pertama, gunakan input kedua sebagai faktor, jika tidak gunakan input pertama.Contoh 1
Contoh 2
Metode 2 (Juga 56-3 = 53)
Ini bekerja mirip dengan Metode 1. Tetapi membutuhkan lebih sedikit kode ketika dipanggil. Dan sel-selnya dapat dialamatkan, tidak seperti sel dalam sebuah tabel. Metode ini lebih baik digunakan jika fungsinya akan digunakan lebih dari satu kali.
Contoh-contoh di atas dihasilkan oleh yang berikut:
Kel 1:
Kel 2:
sumber
Oktaf, 34 - 3 = 31
Contoh:
sumber
repelems
ada. Luar biasa!CJam, 27 byte - 3 = 24
Mengambil input sebagai larik gaya CJam. Ini menggunakan sedikit lebih banyak jarak daripada yang diperlukan, tapi saya pikir itu "masuk akal", dan selalu selaras dengan benar.
Uji di sini.
Penjelasan
sumber
Fungsi C (menggunakan glibc), 122 byte - 3 = 119
Sebagian besar implementasi langsung dengan 2 loop. Saya berharap ada beberapa peluang golf yang saya lewatkan di sini:
Input diberikan dalam dua parameter pertama dari fungsi, dua lainnya adalah boneka. Kolom lurus rata.
Catatan glibc
puts()
sepertinya selalu mengembalikan jumlah byte yang ditulis termasuk baris tambahan tersirat, yang kita butuhkan di sini. Tidak ada jaminan ini akan bekerja dengan libc lainnya.Dalam program lengkap:
Kompilasi sebagai
gcc sqrbin.c -o sqrbin
(ataumake sqrbin
). Peringatan dapat diabaikan dengan aman.Contoh output:
sumber
puts()
bergantung pada mesin. Misalnya 10 milik saya. Juga, inilah tipnya: Anda biasanya dapat mengompres dua loop menjadi satu jika Anda menambah penghitung secara kondisional dalam loop eksternal. Solusi saya menunjukkan bagaimana hal itu dapat dilakukan.puts()
kode pengembalian hanya dijamin + ve untuk sukses. Namun pengujian saya dengan glibc tampaknya menunjukkan bahwa nilai kembali adalah jumlah byte yang ditulis. Adapun konsolidasi loop - ya, saya menyadari teknik itu dan telah mencobanya di sini, sejauh ini tanpa pemendekan dalam kasus ini.Ruby, (133 - 3) = 130 byte
untuk 4,3
untuk 1,3
untuk 0,3
sumber
1
dan sejumlah besar suka9999
. Daris
akan keluar sebagai4
, jadi Anda padding ke lebars+3 = 7
tetapi9999^2
membutuhkan 8 digit. Anda mungkin ingin menggunakannya2*s
.rjust
sebelum melakukanljust
. Anda dapat menyingkatprint
menjadi$><<
(dan menyingkirkan ruang setelahnya).ARGV
memiliki alias$*
. Anda mungkin dapat menghindariflatten
dengan membangun array Anda dengan sesuatu seperti ini: codegolf.stackexchange.com/a/19493/8478 . Juga, jawaban fungsi saja pasti diperbolehkan di sekitar sini (bahkan fungsi yang tidak disebutkan namanya), sehingga fungsi tersebut dapat mengambil bilangan bulat sebagai input, dan Anda tidak perlu melakukan apapun.to_i
.Python 2, 176 byte - 3 = 173
Ini menggunakan fungsi string Python untuk membuat kisi karakter, lalu mengganti karakter dengan integer dan mencetak output yang diformat.
sumber
Matlab, 58 - 3 = 55
Menggunakan fungsi anonim:
Contoh:
(Solusi lama) 59 - 3 = 56
Menggunakan fungsi anonim:
sumber
C, (125 - 3) byte
Input diambil sebagai dua bilangan bulat yang dipisahkan spasi pada baris yang sama. Setiap sel diisi dengan spasi hingga dua kali panjang string input.
sumber
Pyth, 39 - 3 = 36
Pyth tidak memiliki pemformatan matriks bawaan, yang sangat meningkatkan ukurannya, karena seseorang harus secara manual mengisi nomor keluaran. Inilah yang saya pikirkan.
Cobalah online.
sumber
Blok , 51 byte
52628287(tidak bersaing)Tidak Terkumpul:
Cobalah
sumber