Tugas Anda adalah mengambil input string dan angka serta menyelaraskan string ke kanan, menjadikan lebar teks sebagai nomor. Ketika garis terlalu panjang, pecahkan dan letakkan sisanya di baris berikutnya, ulangi sampai tidak perlu. Jika garis lebih pendek dari lebarnya, maka balut dengan spasi. Beberapa baris baru dapat muncul, dan harus diperlakukan seperti karakter tunggal lainnya.
Misalnya, string
Programming
Puzzles
&
Code
Golf
dan jumlahnya 5
akan menghasilkan:
Progr
ammin
g
Puzzl
es
&
Code
Golf
Sedangkan string dan nomor yang sama 10
akan menghasilkan:
Programmin
g
Puzzles
&
Code
Golf
String
a
b
dan angka 5 akan menghasilkan:
a
<-- note the 5 spaces
b
Kode terpendek menang!
Programming Puzzles\n&\nCode Golf
?Jawaban:
Pyth, 14 byte
Demonstrasi
Menggunakan operator pad Pyth.
sumber
Python 2, 84
Dibawa sebagai input string dengan baris baru dan angka, dan mencetak hasilnya. Untuk setiap baris dalam input, ambil dan cetak
n
karakter sekaligus, menggunakan built-inrjust
untuk melapisi bagian kiri dengan spasi sebelum mencetak.Saya memperbaiki kasing kosong dengan retas
w=w or' '
. Mungkin ada metode yang lebih baik, tetapi saya tidak akan terlalu memikirkannya.sumber
CJam, 21 byte
Terima kasih kepada @ Sp3000 untuk bermain golf 1 byte dan membuka jalan untuk 3 lebih.
Cobalah online di juru bahasa CJam .
Bagaimana itu bekerja
sumber
Pyth, 16
Cobalah online di sini
Penjelasan
sumber
Perl, 39 byte
36 byte + 3 byte untuk
-ni
. Lebar bungkus dilewatkan sebagai argumen untuk-i
.Tangani garis kosong dengan benar dengan melapisinya dengan spasi:
Bagaimana itu bekerja
Solusi ini menggunakan operator substitusi untuk mengulang melalui input, menghemat satu byte di atas
for
loop yang setara . Trik sebenarnya, bagaimanapun, adalah di regex pada LHS substitusi:Dengan pengubah global, ini akan cocok dengan
$^I
karakter sekaligus; ketika ada kurang dari$^I
karakter yang tersisa di string, itu akan cocok dengan semuanya hingga akhir. Pergantian dengan^$
diperlukan untuk menangani garis kosong. Sebagai contoh:RHS dari substitusi hanya digunakan
printf
untuk pad kiri-chunk yang cocok dengan spasi.sumber
$^I
!Javascript (ES6), 107
Saya berharap JS memiliki fungsi pad built-in. Baiklah.
Penjelasan:
sumber
Julia, 126 byte
Tidak Disatukan:
sumber
Fitur Bash,
62,61+, 59Lebih pendek jika
N
dapat diatur oleh pemanggil, daripada harus membacanya sebagai baris input pertama.Ini gagal menangani garis kosong di input. Jika tidak, ini tidak akan memasukkan data input ke pemisahan kata, perluasan nama path, atau memperlakukannya lebih dari sekadar data mentah.
read -n$N
menyimpan satu karakter, tetapi memungkinkanread
munge\
.Ini
[[ $r ]]&&
diperlukan karenaread -n4
tidak dapat melihat ke depan untuk melihat bahwa arang berikutnya adalah baris baru. Jadi setr
ke string 4-char, dan pembacaan berikutnya menghasilkan string kosong-char. Memfilter baris baru palsu ini tanpa memfilter baris baru nyata akan memerlukan status pelacakan: apakah baris sebelumnya maks-panjang atau tidak. Diperlukan lebih banyak kode atau pendekatan yang sama sekali berbeda.[[ $r ]]
lebih pendek dari[ -n "$r" ]
yang diperlukan untuk menghindari kesalahan jika garis dimulai dengan-z foo
, atau apakah*
atau sesuatu, jika Anda digunakan[ $r ]
.Pembenaran terjadi dengan string format printf "% 4s" standar printf.
Tes dengan
sumber
-r
dalam hitungan byte. 2.f()(while ... done)
sedikit lebih pendek.[[ $r ]]&&
, jika N = 4, garis input dengan panjang 4 akan menghasilkan garis output kosong di mana sebelumnya tidak ada. Karenaread
mengembalikan string 4 karakter, kemudian melihat baris baru pada panggilan berikutnya dan segera kembali. Juga, terima kasih atas()
tipnya. Saya tidak tahu Anda bisa mendefinisikan fns seperti itu.while
sudah majemuk, Anda bahkan tidak perlu tanda kurung:f()while ... done
Haskell, 108 byte
Contoh penggunaan:
Bagaimana itu bekerja
sumber
GNU awk + bash, 70
Menggunakan bash untuk memasukkan hitungan ke program awk adalah prob. lebih kecil dari membacanya dengan
NR==1{N=$0}
blok.Baca satu baris pada satu waktu. Dibagi menjadi potongan karakter paling banyak, menggunakan FPAT. (cocok dengan bidang, bukan pemisah. Ekstensi GNU.) printf masing-masing bidang secara terpisah. (ORS Default = \ n).
The
/^$/
Aturan yang ada untuk mencetak baris kosong, yang memiliki NF = 0 dan dengan demikian tidak mencetak sama sekali di blok lain. Jadi tidak seperti solusi murni-bash saya, ini benar-benar berfungsi dalam kasus umum.Semi-tidak terkait, tapi ide saya sejauh ini untuk perl adalah 112 karakter untuk kode perl:
Ini memakan salah satu baris baru, dan terlalu lama.
$/=\1
membaca satu byte pada satu waktu. Kami menambahkan ke $ l. Mungkin garis-pada-saat-dengan pendekatan split-lebar tetap akan lebih pendek.sumber
Utilitas Bash + GNU, 41
String adalah input melalui STDIN, lebar adalah input oleh baris perintah arg:
sumber
Python 2, 151 byte
Ini adalah adaptasi dari jawaban xnor di atas, karena ia tidak menangani baris baru dengan benar.
The
for
Loop diubah dari:untuk:
Contoh
sumber
C #, 143 byte
Linq memungkinkan Anda membuat ekspresi yang cukup rumit.
GroupBy
berguna di sini, tapi sayang sekali mereka tidak bisa membuat fungsi kelebihan mengambil indeks.Tetapkan lambda ke a
Func<string, int, string>
untuk menjalankannyaKurang bermain golf:
sumber
Groovy, 63 byte
Mengembalikan string yang disesuaikan dengan benar. Tidak tahu ada fungsi padLeft (dan padRight, padCenter) sampai sekarang.
sumber
JavaScript
174136sumber
Ceylon, 107
sumber
Matlab, 99 byte
Terima kasih kepada @beaker karena menghapus 6 byte!
Menggunakan dan fungsi anonim:
Tentukan fungsi dan gunakan
ans
untuk menyebutnya:sumber
Burlesque, 28 Bytes
Sama seperti versi di bawah ini, tetapi memperlakukan baris 1 sebagai angka dan garis lainnya sebagai string.
Penggunaan seperti pada:
Versi Lama (16 byte):
Contoh:
sumber