Dalam tantangan ini, Anda harus mengambil seni ASCII multiline sebagai masukan, seperti:
OOOOOO OOOOOO OOOOOO OOOOOOO OOOOOO OOOOOO OO OOOOOOO
OO OO OO OO OO OO OO OO OO OO OO
OO OO OO OO OO OOOOO OO OOO OO OO OO OOOOO
OO OO OO OO OO OO OO OO OO OO OO OO
OOOOOO OOOOOO OOOOOO OOOOOOO OOOOOO OOOOOO OOOOOOO OO
Dan Anda juga akan mengambil integer sebagai input. Anda harus menampilkan seni ASCII yang diperbesar dengan jumlah yang ditentukan dengan bilangan bulat. Misalnya, jika Anda menggunakan argumen kedua 3
, hasilnya akan menjadi
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOO OOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOO OOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOO OOOOOOOOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO OOOOOO OOOOOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO OOOOOO OOOOOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO OOOOOO OOOOOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOO
Secara khusus, setiap karakter harus berubah menjadi kotak n
dengan n
karakter itu, di mana n
argumen integer. Misalnya, input dari
ab
cd
dan 3 akan menghasilkan
aaabbb
aaabbb
aaabbb
cccddd
cccddd
cccddd
Ini adalah kode-golf , jadi kode terpendek dalam byte menang.
Jawaban:
APL, 7 karakter / byte *
Fungsi yang mengambil angka dan string input sebagai parameter dan mengembalikan hasilnya:
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
*: APL dapat ditulis dalam charset byte tunggal (lama) yang memetakan simbol APL ke nilai 128 byte atas. Oleh karena itu, untuk tujuan penilaian, program karakter N yang hanya menggunakan karakter ASCII dan simbol APL dapat dianggap sebagai panjang N byte.
sumber
/
function (tidak harus bingung dengan/
operator yang ... ya, simbol yang sama ) duplikat dan / atau menghapus kolom dari matriks sesuai dengan argumen sisi kiri. Jika itu adalah skalar (angka sederhana) maka itu direplikasi untuk semua kolom input. Oleh karena itu2/m
adalah matriks dengan semua kolom digandakan. The⌿
varian melakukan hal yang sama, tetapi untuk baris (atau pesawat pertama-axis dalam kasus umum.)GolfScript, 20 karakter
Mengambil semua input dari STDIN, baris pertama adalah faktor penskalaan, sisanya input multiline. Anda dapat mencoba contohnya secara online .
Memasukkan
Keluaran
Kode
sumber
1/
. Saya juga perlu menggunakanvalue function +
lebih banyak.golfscript.rb
tidak ditandai yang dapat dieksekusi, atau bahwa baris pertama memiliki jalur yang salah ke interpreter Ruby untuk sistem Anda. Oh, dan ituecho
seharusnyacat
. Cobacat inputFile | ruby golfscript.rb scriptFile
(atau adilruby golfscript.rb scriptFile < inputFile
) dan lihat apakah itu berhasil.J,
2017 karakterMenentukan kata kerja
f
yang melakukan apa yang diperlukan. Pemakaian:dimana
a
string input.Di Windows diperlukan karakter tambahan untuk menghapus
\r
:Penjelasan :
];._2
memotong string input menjadi potongan berdasarkan karakter terakhir dari string, yang dalam hal ini akan menjadi\n
. Windows telah\r\n
jadi kita perlu menggunakan}:
untuk memotong karakter ekstra off:}:;._2
. Potong dokumentasi kata kerjaSisa kode (dengan pengecualian penugasan
f=.
) adalah garpu .Itu rusak seperti ini:
[ #&.|: #
Jika
a
string input kami kalkulasi akan3 # a
(kami akan memanggil hasil inix
), kemudian3 [ a
(kami akan memanggil hasil iniy
) kemudiany #&.|: x
.3 # a
hanya membuat tiga salinan dari setiap anggotaa
. Salin dokumentasi kata kerjaIni berubah
ke
3 [ a
hanya mengembalikan 3. dokumentasi kata kerja KiriAkhirnya
y #&.|: x
adalahy
salinan di bawah transposx
. The#
karya seperti sebelumnya, tetapi&.|:
mengatakan J untuk merefleksikan masukan pertama dan kemudian memindahkannya kembali ketika selesai. Di bawah dokumentasi konjungsi , transposisi dokumentasi kata kerja .Transpos berubah
ke
kemudian salin mengubahnya menjadi
dan memindahkannya kembali memberi Anda
sumber
[##"1
Juga, saya tidak yakin tentang aturan tidak tertulis tentang bermain golf di J, tapi saya akan mengatakan bahwa pemisahan tali dan tugas bisa dihilangkan, mengingat persyaratan yang longgar dari pertanyaan itu. Saya tentu saja melakukannya dalam jawaban APL saya. Contoh:2 ([##"1) 'abcde',:'fghij'
Haskell, 49 byte
Fungsi perbesar adalah
e
, yang mengambil hitungan dan string, dan mengembalikan string:sumber
APL, 11 karakter
@ Gareth pada dasarnya melakukan hal yang sama pertama, di J, jadi entri APL ini hanya untuk pameran, bukan kompetisi - dia pemenangnya.
Penggunaan: pembesaran di arg kiri (⍺), seni dalam bentuk matriks karakter 2d di arg kanan (⍵).
⍺ / ⍵ akan mereplikasi elemen di setiap baris vektor atau matriks (2 / 'OO' menjadi 'OO OO').
⍉⍺ / ⍉ akan memindahkan itu, mereplikasi elemen, memindahkannya.
(Jika kita lebih memilih kejelasan daripada panjang program, kodenya bisa saja E ← {⍺ / [1] ⍺ / ⍵})
sumber
Bash / sed script, 48 karakter
Simpan sebagai skrip,
chmod +x
dan jalankan:Bagaimana cara kerjanya?
Dagingnya ada di
sed
perintah. Misalnya, jika n = 3, maka perintah sed diperluas ke sesuatu seperti:sed
Perintah majemuk ini dapat dipecah menjadi:s/./&&&/g
- perintah pengganti ini cocok dengan setiap karakter dan menggantinya dengan karakter yang diulang 3 kalip
perintah - ini hanya mencetak seluruh ruang pola (yaitu garis saat ini) 3 kaliKami lulus
-n
sed untuk mengatakan tidak mencetak apa pun kecuali disuruh secara eksplisit, jadi kami memiliki kendali penuh atas apa yang dicetak dan berapa kali.Saya tidak bisa menemukan cara cepat untuk menghasilkan string berulang panjang sewenang-wenang langsung
sed
, jadi saya menggunakan beberapabash
trik sebagai gantinya:Ini mencetak string (tidak ditentukan, yaitu kosong), dengan 3 spasi awal, dan memberikan hasilnya ke
bash
variabelr
.Kami kemudian menggunakan
bash
ekspansi parameter untuk mengubah string spasi ini menjadi apa yang perlu diganti dengansed
ekspresi:Saya bisa lolos dengan menghapus tanda kutip di
printf
specifier format dansed
ekspresi, karena tidak ada karakter yang perlu melarikan diri dalambash
shell.Jumlah karakter:
sumber
$1
dan hapusn=3;
, Anda bahkan akan menyimpan 4 karakter dan mungkin juga{}
di printf.printf
's argumen yang tidak perlu, mengurangi ke 52 karakter:r=`printf %$1s`;sed -n "s/./${r// /&}/g${r// /;//p}"
.PERL,
41 39 2522 karakterPERL, sederhana dan efektif - dibuat tepat untuk tugas tersebut. Ketika dipanggil dengan
-pi3
, di mana3
parameternyan
:Solusi klasik (39 karakter):
Solusi klasik perlu
n
ditentukan dalam input baris pertama, misalnyaTerima kasih @manatwork untuk
$&
triknya.sumber
s/./$&x$n/ge
.Ruby:
6449 karakterSemua data yang diterima di STDIN: baris pertama faktor penskalaan, kemudian ASCII.
Contoh dijalankan:
Ruby:
4441 karakterDengan asumsi bahwa setiap saluran input diakhiri dengan pemisah saluran. Terima kasih kepada @Ventero.
Contoh dijalankan:
sumber
n
:$.<2?n=$_.to_i: $><<$_.gsub(/./){$&*n}*n
(sayangnya, ruang setelah usus besar diperlukan, jika parser jadi bingung). Jalankan denganruby -n
.Python 3 - 84
Bukan yang terpendek tetapi jawaban yang berbeda tetap saja. Satu kalimat yang menarik.
Masukkan nomor terlebih dahulu, kemudian seni ASCII sebagai daftar Python, misalnya:
sumber
GolfScript, 29 karakter
Ini mendefinisikan sebuah blok
f
, yang ketika dipanggil akan menghasilkan output yang diinginkan. Ini mengasumsikan argumen ada di stack (karena pada dasarnya itulah cara argumen dilewatkan dalam GolfScript).Tidak disatukan (apakah itu masuk akal?: P):
sumber
Golfscript, 23 karakter
Saya telah memutuskan untuk menulis seluruh program karena memiliki biaya overhead lebih sedikit daripada fungsi anonim:
~(:i;
- eval input, lalu kurangi pengali, simpan sebagaii
dan buang.n/{...}%n*
- dipisah dengan baris baru, memetakan setiap baris, bergabung dengan baris baru{...}:c%c
, - ambil satu blok, terapkan di peta-setiap elemen, lalu terapkan ke seluruh baris.{.}i*
- Gandakani
kali elemen iniDemo langsung: http://golfscript.apphb.com/?c=OyciYWJjCmRlZiIzJwp%2BKDppO24ve3t7Ln1pKn06YyVjfSVuKg%3D%3D
Contoh penggunaan:
sumber
Python 3 -
10910793Pertama, masukkan angkanya, kemudian string. Harus jelas ...
Terima kasih kepada Waleed Khan karena menyarankan menghapus[]
Terima kasih kepada Volatility karena menyarankan untuk
a
menjadi daftar.sumber
a
menjadi daftar, lakukana+=[''.join(c*n for c in s)]*n
, lalu lakukanprint('\n'.join(a))
di akhir. Itu seharusnya bekerja.Jawa - 217
Pertama kali mencoba bermain golf. Sepertinya Java bukan bahasa untuk melakukannya.
Di Windows Anda harus mengganti "\ n" dengan "\ r \ n".
sumber
aaabbb
dan 3 bariscccddd
dalam contoh output Anda di atas).for
; 8 karakter dengan menggunakan bukan x (a=a[1].split("\n")
, dan ubah semua x dengan a).main
mengambil byte lebih dari seluruh program dalam bahasa lain, kontestan akan mendapatkan bogeys.enum M{;public static void main(String[]a){int f=Integer.valueOf(a[0]),i=-1,j,k;a=a[1].split("\n");for(;++i<a.length*f;System.out.println())for(j=0;j<a[i/f].length();j++)for(k=0;k++<f;)System.out.print(a[i/f].charAt(j));}}
Integer.valueOf(a[0])
->new Integer(a[0])
(Sunting: Solusi ini sekarang tidak valid karena semantik
銻
instruksi telah berubah. Saya tidak menyadari bahwa saya sudah menggunakan instruksi ketika saya mengubahnya. Namun, Anda dapat memperbaiki program ini dengan hanya mengubahnya ke instruksi yang lebih baru壹
.)Sclipting , 19 karakterMengharapkan input dipisahkan oleh
\n
(tidak\r
) dan baris pertama mengandung faktor pengali.Penjelasan
Pada akhirnya, tumpukan akan terlihat seperti ini:
Segala sesuatu di atas tanda secara otomatis digabungkan dan dikeluarkan, sisanya dibuang.sumber
i
diucapkan [iː], bukan [ɑi]; bagaimana Anda akan menulisnya dalam bahasa Cina sekarang?J, 7 karakter
Hal yang sama persis seperti dalam jawaban APL @ Tobia, tetapi dalam ascii chars.
sumber
Powershell (96)
Kupikir aku akan mencobanya di PS. Menggunakan perpipaan ke foreach's (%) untuk membuatnya singkat di sini, tetapi
function
danToCharArray
membuatnya menerimanya singkat.Untuk menggunakannya, Anda memanggilnya dari baris perintah seperti ini:
Ini versi yang tidak diperkecil:
sumber
function m($n,$s){-split$s|%{,(-join($_-split''|%{$_*$n}))*$n}}
untuk 63 byteJulia, 74 karakter / byte
7 kurang jika saya hanya mengembalikan string.
julia>
adalah prompt interaktif.sumber
Kanvas , 2 byte
Coba di sini!
sumber
Powershell, 54 byte
Skrip uji:
Penjelasan:
$s-replace'.',('$0'*$n)
ulangi setiap simbol kecuali garis baru.-split'``n'
memisahkan string lebar dengan baris baru|%{,$_*$n}
mengulangi setiap baris sebagai elemen array dan mengembalikan arrayHasilnya adalah array string yang luas dan berulang.
sumber
R , 83/72 byte
Alt pendekatan menggunakan regexps
Jika kami diizinkan mengikuti baris baru, 72 byte:
Cobalah online!
Kalau tidak, 83 byte:
Cobalah online!
sumber
K, 20
.....
sumber
Extended BrainFuck : 158
Itu berubah menjadi:
Brainfuck: 185
Dibutuhkan juru bahasa yang memiliki 0 atau tidak ada perubahan sebagai penanda EOF.
beef
, tersedia dari repo Ubuntu, berhasil:Kode EBF tidak dikumpulkan:
sumber
Rebol -
8779Versi yang diformat dengan baik:
Contoh penggunaan:
NB. Kode ini hanya berfungsi di Rebol 2 saat ini (Fungsi INPUT yang digunakan belum sepenuhnya diimplementasikan dalam Rebol 3).
sumber
R , 125 byte
Cobalah online!
Mengkonversi string menjadi UTF8, menempatkan ke dalam matriks yang kolomnya adalah baris teks (menghapus baris baru), dan kemudian mengulangi setiap karakter dan baris yang dihasilkan sebelum mencetak dipisahkan oleh baris baru.
sumber
R - 89
sumber
cat
untuk mencetaknya sebagai stdout? Selain itu setiap elemen dari string tidak hanya harus diulang n kali panjangnya tetapi diulang juga dalam luasnya.<-
bisa=
,paste0
dapat digantikan olehpaste
karena Anda tetap menggunakan argumen runtuh dan argumen tersebuteach
dapat disingkat menjadie
. Lihat di sini untuk beberapa ide dasar tentang bermain golf dengan R.stringr
MATLAB: 20 karakter
Solusi ini mengasumsikan bahwa gambar disimpan dalam file yang dipanggil
startup.m
dan diizinkan untuk memberikan jumlah replikasi ke matlab saat memanggilnya, ini dapat dilakukan dengan cara:!matlab -r "n=3"&
MATLAB, panggilan tanpa argumen: 23 karakter
Berbeda dengan solusi pertama, dua yang terakhir berasumsi bahwa jumlah replikasi mungkin tidak diharapkan dalam panggilan. Untuk solusi ini, string dan nomor asli diharapkan dalam file yang disebut
matlab.mat
di direktori Anda saat ini.MATLAB, alternatif matematika: 27 karakter
sumber
C # (177)
Mengharapkan string input "i" yang mengandung baris baru "\ n" sebagai pembatas.
Diformat
sumber
CJam, 14 byte
CJam lebih baru dari tantangan ini (dan fitur utama yang saya gunakan sebenarnya sangat baru), jadi jawaban ini tidak akan memenuhi syarat untuk diterima - tapi tetap saja tidak mengalahkan APL, jadi ...
Uji di sini.
Penjelasan
Dengan yang baru
e*
yang mengulang setiap karakter dalam sebuah string, ini sangat mudah:sumber
{N/1$fe*e*N*}
RProgN 100 Bytes (Windows) Tidak Bersaing
RProgN tidak memiliki karakter lolos sejak penulisan, yang membuat penanganan baris baru memerlukan garis fisik baru. Dengan demikian, jawaban ini (dan input apa pun) harus menggunakan CRLF, bukan hanya LF. :(
Juga, fungsi 'perwakilan' hanya ditambahkan setelah tantangan ini dikeluarkan, karena itu, ini tidak bersaing.
sumber
Vim, 39 penekanan tombol (tidak termasuk input, tidak bersaing)
Gotcha dan alasan ini tidak bersaing adalah karena input harus dimasukkan dua kali. Ganti keduanya
2
dengan input Anda sendiri.Penjelasan
qayl2phxl@aquu
merekam makro yang menarik sebuah karakter, menempelkannya dan pindah ke yang berikutnya, kemudian memutar ulang sendiri. Kemudian membatalkan perubahan. Karena kami ingin agar loop tidak terbatas, kami tidak menghapus karakter, yang berarti kami harus menghapus yang asing tapi tetap selesai dengan gerakan yang gagal pada karakter terakhir.:%norm @a<cr>
menjalankan makro di setiap barisgg0
kembali ke awalqbyy2P2jkddj@bq@b
menggunakan teknik yang sama@a
untuk menyalin setiap baris, tetapi dengan makro rekursif.Saya tahu ini bisa lebih golf, misalnya dengan melintasi mundur untuk duplikasi baris tetapi karena persyaratan entri input ganda, saya akan berhenti di sana dan menandai jawaban ini sebagai tidak bersaing.
Jawaban sebelumnya (32 penekanan tombol, hanya dua kali lipat)
Penjelasan
qaylpl@aqu
merekam makro yang menarik sebuah karakter, menempelkannya dan pindah ke yang berikutnya, kemudian memutar ulang sendiri. Batalkan perubahan.:%norm @a<cr>
menjalankan makro di setiap baris:%s/.*/&\r&<cr>
menggandakan setiap barisSaya ingin membuat makro bersarang, tetapi bagian dalam (karakter) menghentikan bagian luar (garis) ... Jadi saya harus menjalankan dua perintah, menambahkan beberapa penekanan tombol pada solusi yang dinyatakan sederhana.
sumber