Tugas:
Ada banyak jawaban di situs ini yang disusun menjadi seni ascii, seperti ini . Biasanya pengaturan dilakukan secara manual, tetapi tidakkah program membantu dengan itu? :)
Program Anda akan mengambil 3 input:
- Kode, sebagai satu baris
- Jumlah garis dalam pola (dapat dihilangkan jika tidak perlu)
- Pola itu sendiri, seperti
*
s atau karakter lain
Aturan:
- Anda harus menulis program (bukan fungsi) yang membaca dari stdin
- Teks ditempatkan kiri-ke-kanan per baris
- Jika tidak ada cukup teks untuk mengisi pola, letakkan
.
s pada spasi yang tersisa - Jika ada terlalu banyak teks untuk diisi pola, cetak setelah output
- kode-golf , jadi kode terpendek, dalam byte menang
Contoh Berjalan:
Input (Uji Kelayakan Tepat) :
qwertyuiopasdfghjklzxcvbnm
4
***** * ***
* * * *
* * * *
***** * ***
Keluaran :
qwert y uio
p a s d
f g h j
klzxc v bnm
Input (Tes karakter tambahan) :
qwertyuiopasdfghjklzxcvbnm12345
4
***** * ***
* * * *
* * * *
***** * ***
Keluaran :
qwert y uio
p a s d
f g h j
klzxc v bnm
12345
Input (Uji Karakter Tidak Cukup) :
qwertyuiopasdfg
4
***** * ***
* * * *
* * * *
***** * ***
Keluaran :
qwert y uio
p a s d
f g . .
..... . ...
X
es untuk kita program untuk bekerja?Jawaban:
GolfScript, 30 karakter
Jalankan online .
Contoh:
sumber
Perl 6:
60 karakterEDIT : 38 poin (lihat bawah)Jika Anda tidak menghargai keterampilan seni saya yang mengerikan, inilah golfnya:
Yang ini melakukan hal-hal aneh dengan waktu evaluasi.
Pertama,
BEGIN
kata kunci memaksa[get.comb, "." xx *]
untuk dievaluasi terlebih dahulu, memasukkan ke dalam array daftar karakter yang membentuk "kode", diikuti oleh jumlah tak terbatas dari"."
s.Selanjutnya,
get
pada bagian akhir dievaluasi, dapatkan jumlah garis templat seni ASCII. Thexx
Operator mengulangi bagian pertama dari program ini berkali-kali. Ini lebih masuk akal ketika Anda menyadari bahwacode() xx count()
pada dasarnya gula untukcode() for 1..count()
:count()
harus dievaluasi terlebih dahulu.Akhirnya,
get
pada awal program mendapat garis templat seni ASCII dan mengganti setiap"*"
dengan nilai bergeser dari awal array yang kita buat sebelum yang lainnya ({shift BEGIN …}
).EDIT:
Diturunkan hingga 37 karakter, ditambah satu untuk pergantian baris perintah:
Ini adalah konsep yang sama seperti aslinya,
-p
saklar iterasi di setiap baris (setelahBEGIN
telah membaca "kode"), dan mengganti semua*
huruf s dengan huruf berikutnya dari "kode" sebelum mencetaknya. Format input untuk ini seharusnya tidak termasuk jumlah baris format.sumber
Ruby 2.0,
5352 karakterSesuai spek, tidak menggunakan parameter 'jumlah garis'.
Contoh dijalankan:
Keluaran:
sumber
./ascii.rb: line 2: syntax error near unexpected token `(' ./ascii.rb: line 2: `puts gets($n).gsub(?*){c.slice!(0)||?.},c'
puts
dengan$><<
dan mengubah,
di akhir menjadi+
PowerShell ,
63868382 byte+20 byte terima kasih @Veskah
Cobalah online!
Kurang bermain golf:
sumber
Japt , 18 byte
Cobalah
sumber
sVl)iVr-@t°J1 ª'.
bekerja untuk 17T-SQL, 142 byte
Cobalah online
sumber
Perl 5
-plF
, 51 byteCobalah online!
sumber
JavaScript - 199
Menghasilkan karakter tambahan dalam input teks jika tidak digunakan dalam pola, menggunakan "." jika tidak cukup.
EDIT: dimodifikasi menjadi fungsi yang menerima teks dan pola
sumber
function p(a,c){x=c.split(s='*').length-1;for(i=x-a.length;i--;)a+='.';for(;i++<x;)c=c.replace(s,a[i]);console.log(c+'\n'+a.substring(x))}
JavaScript (ES6) -
9687Catatan: Seperti yang disarankan oleh OP , saya menggunakan fungsi. Tetapi jika diperlukan untuk memiliki program, inilah solusi 93 karakter .
EDIT1: Perubahan besar, saya tidak tahu mengapa saya tidak menyadari ini untuk pertama kalinya: P Menyimpan 40 karakter.
Penggunaan :
Input Uji : (tanpa nomor opsional yang tidak dibutuhkan sesuai spesifikasi)
Keluaran :
Kode Tidak Terkunci :
Akan sangat bagus untuk mendengar saran dari pengguna :)
sumber
Perl, 70 karakter
Atau, tanpa pemeriksaan batas, 56 karakter
Catatan, kode ini tidak menggunakan baris kedua seperti dalam spec, dan dapat disingkat menjadi tiga karakter
<>;
sumber
Pesta,
166 156 111106Membaca dari input standar, tidak menghitung garis. Baris input pertama adalah kode yang ingin Anda masukkan ke dalam ascii art, semua baris berikutnya adalah ascii art, yang terdiri dari
@
karakter. Input memiliki panjang maksimal 999 karakter, dan tidak diizinkan mengandung garis miring ke depan . (Saya memilih untuk tidak menggunakan*
atau#
karena mereka memiliki arti khusus dalam Bash).PERINGATAN: Program ini menggunakan file bernama
p
. Setelah menjalankan program, hapusp
- ini akan membingungkan program saat Anda menjalankannya kedua kali.Sebagian besar pekerjaan di sini dilakukan oleh
Baris pertama menggantikan yang pertama
@
dalam bidang ini dengan karakter pertama dari kode. Baris kedua menghapus karakter pertama dari kode.Jika tidak ada cukup kode untuk mengisi bentuk, baris baru akan dicetak setelah keluaran utama ascii dibuat
echo $i
.sumber
C,
98, 91 karakterDi sini solusi C yang cukup mudah dalam 100 karakter. Ini tidak menggunakan input jumlah baris. (Lain yang tidak dibutuhkan mendapat () akan diperlukan).
ungolfed:
sumber
puts(s)
alih-alihprintf("%s",s)
menyimpan 7 byte.\n
itu masalah.Python 2.7,
165155150138119 karakterOke, cukup banyak tapi saya kira itu cara terkecil untuk melakukannya dengan Python.
Sunting: versi 1.0.1 fungsional baru dengan byte yang lebih sedikit digunakan:
Edit2:
map(r,['']*input())
alih-alih[r()for _ in[1]*input()]
dan menghapus impor yang tidak digunakanEdit3:
'>'*input()
alih-alih['']*input()
menyimpan satu karakter dan menambahkan karakter prompt untuk pola :)sumber
(['.']+l).pop(0)
bukannya(len(l)and l.pop(0)or'.')
menyimpan 9 byte. Daninput()
bukannyaint(r())
menyimpan 1 byte.input
! Sayangnya saran pertama Anda tidak berfungsi karena menghasilkan titik selama panjang string> 0.(l+['.']).pop(0)
saja, tetapi jika itu tidak berhasil, Anda masih bisa menyimpan 4 byte dengan menggunakanl and
alih-alihlen(l)and
.(l+['.']).pop(0)
tidak menghapus elemen daril
karakter jadi hanya karakter pertama yang dicetak tetapil
kondisinya bekerja :)C # (Visual C # Interactive Compiler) , 122 byte
Cobalah online!
sumber
"\n"+
untuk menambahkan karakter tambahan ke baris yang sama05AB1E ,
181715 byteMengambil kode sebagai input pertama, pola sebagai yang kedua (dengan
0
alih - alih#
).Cobalah secara online atau verifikasi semua kasus uji .
1815 byte alternatif dengan mengambil input dalam urutan terbalik:Cobalah online .
Penjelasan:
sumber