Jika Anda pernah mencoba menambahkan label ke plot yang sangat padat, maka Anda akan menyadari bahwa kadang-kadang label akan tumpang tindih satu sama lain, membuatnya sulit untuk dibaca. Kita akan melakukan sesuatu yang serupa tetapi dalam 1D.
Input akan menjadi urutan (label, x-coordinate)
pasangan, dan output akan menjadi hasil menggambar setiap titik dan label, dalam urutan yang diberikan. Tanda bintang yang *
mewakili titik harus ditempatkan pada koordinat x yang diberikan dan label harus mengikuti. Setiap karakter yang ada akan ditimpa.
Misalnya, jika inputnya adalah
Hello 0
World 8
Fizz 3
Buzz 5
PPCG 16
X 9
Maka yang berikut akan terjadi:
*Hello
*Hello *World
*He*Fizz*World
*He*F*Buzzorld
*He*F*Buzzorld *PPCG
*He*F*Buz*Xrld *PPCG
Baris terakhir harus di-outputkan.
Aturan I / O
Input dapat terdiri dari sejumlah pasangan. Setiap label hanya terdiri dari huruf besar dan kecil, dan panjang label paling banyak 127 karakter. Setiap koordinat x akan termasuk antara 0 dan 127 inklusif.
Input mungkin dalam format daftar atau string yang mudah sehingga pasangan tidak ambigu dan label / koordinat x berganti dalam input. Misalnya, format suka
[("Hello", 0), ("World", 8) ...]
atau[0 "Hello" 8 "World" ...]
baik-baik saja. Namun, Anda tidak boleh mengasumsikan dua daftar label dan koordinat x yang terpisah.Fungsi dan program lengkap keduanya baik-baik saja.
Setiap titik yang tidak tercakup oleh label harus diwakili dengan spasi. Namun, mungkin tidak ada spasi putih tambahan atau jejak tambahan selain dari satu baris tambahan opsional baru.
Contohnya
Memasukkan:
OneLabel 10
Keluaran:
*OneLabel
Memasukkan:
Heathrow 0
Edinburgh 2
London 4
Liverpool 6
Oxford 8
Keluaran:
*H*E*L*L*Oxfordl
Memasukkan:
alpha 20
beta 4
gamma 57
delta 3
epsilon 22
zeta 32
eta 53
theta 27
Keluaran:
*delta *a*epsi*thetazeta *eta*gamma
Memasukkan:
abc 5
d 5
abc 10
ABCDEFGHIJKLMNOPQRSTUVWXYZ 127
Keluaran:
*dbc *abc *ABCDEFGHIJKLMNOPQRSTUVWXYZ
Perhatikan bahwa label dan / atau koordinat x dapat diulang.
Jawaban:
CJam,
242319 byteIni membaca input sebagai array CJam dari pasangan koordinat-label.
Coba biola ini dalam juru bahasa CJam atau verifikasi semua kasus uji sekaligus.
Terima kasih kepada @ MartinBüttner karena membantu saya menghemat 4 byte!
Bagaimana itu bekerja
sumber
Pyth, 20 byte
Cobalah online: Demonstrasi atau Test Suite
Penjelasan
sumber
JavaScript ES6, 104 byte
Contoh Penggunaan
Masukan ke konsol yang sesuai:
Keluaran dari pernyataan terakhir:
Penjelasan
Ini menciptakan fungsi anonim dari
c
tiga ekspresi yang secara logika-ANDed bersama. Dua pernyataan pertama selalu benar, dan aturan korsleting JS mengatakan bahwa setiap kali yang pertama adalah benar, kembalikan seluruh nilai di sisi kanan (tanpa paksaan ke boolean): jadi ini secara formal setara denganPernyataan pertama harus dibungkus dalam tanda kurung di atas karena operator penugasan
=
memiliki prioritas lebih rendah daripada operator logika-DAN&&
.Rakitan "parameter istirahat"
..."*"+v
juga merupakan bagian dari ES6; itu menggabungkan memimpin*
ke string dan kemudian menafsirkannya sebagai parameter daftar-suka, membaginya menjadi sekelompok argumen yang disediakanArray.prototype.splice
, yang mengambil(m, n, ...rest)
dan memodifikasi array pada posisim
untuk menghapusn
elemen dan kemudian memasukkan semuarest
argumen. Untuk mencapai ini sebelum ES6 Anda akan menggunakan yang lebih rumit:Array kemudian digabungkan dengan string kosong dan spasi spasi tambahan dihapus.
sumber
Python 2, 67 byte
Mengambil input suka
[('Heathrow', 0), ('Edinburgh', 2), ('London', 4), ('Liverpool', 6), ('Oxford', 8)]
dan mencetak hasilnya.Python tidak mengizinkan string untuk dimodifikasi, dan mengkonversi ke dan dari daftar itu mahal. Jadi, ini menciptakan string
z
untuk menambahkan kata baru. Kami mengambilb
karakter sebelum kata, padding dengan spasi jika diperlukan, lalu teks baru dengan tanda bintang, lalu bagianz
setelah kata baru. Perhatikan bahwa spasi tambahan tidak pernah ditambahkan.The
reduce
versi 3 karakter lagi (70):sumber
Ruby,
948175 byteGolf:
Berikut adalah kode yang tidak dikenali:
Terima kasih @ w0lf untuk saran tentang pemetaan input!
Terima kasih @ w0lf dan @Tidak itu Charles untuk pemikiran tentang menghapus variabel.
sumber
puts
dengan$><<
(yang tidak memerlukan ruang tambahan)..chomp
bisa dihapus..to_i
akan menangkapnya. Pikiran yang bagus. Terima kasih @ w0lf!s[int, int]
formulir alih-alihs[range]
untuk tabungan 1 char.Javascript 121 karakter
Menggunakan fitur-fitur non-standar, berfungsi di Firefox.
x=Array(255).fill(" ");eval(prompt()).map(s=>{s[0].split``.map((n,i)=>x[s[1]+i+1]=n);x[s[1]]="*"});x=x.join``.trimRight()
Versi yang lebih lama:
x=Array(255).fill(" ");eval(prompt()).map(s=>{s[0].split``.map((n,i)=>x[s[1]+i+1]=n);x[s[1]]="*"});x=x.join``.replace(/ +$/,"")
sumber
/ +/
jauh lebih masuk akal daripada\s
kecewa saya melewatkan itu! Bisakah Anda menyimpan byte menggunakanx=' '.repeat(255);
dan menghindari.join
?.split('')
membuatnya menjadi struktur data yang dapat berubah, tetapi pada saatArray(255).fill(' ')
itu lebih pendek. Dalam versi saya, sebagian besar tabungan saya berasal dari (a) menggunakan aturan "Anda dapat memberikan fungsi atau program" untuk dihapuseval(prompt())
dengan imbalanc=>
dan (b) menggunakanArray.prototype.slice
metode dengan parameter lainnya untuk mempersingkat bagian logika sedikit. .[].map.call(s[0],
juga tidak menyelamatkan ...Python, 85 byte
Cobalah online
sumber
'z'[2::5]
(backticks alih-alih apostrof) alih-alih''.join(z)
menyimpan satu byte, dan pindahz=[' ']*256
ke parameter harus menyimpan yang lain. Juga, saya pikir Anda bisa berubahreturn
menjadiprint
.p=input()
(Python 2) daripada fungsi, yang menghindari lekukan. Juga,b+len(a)+1
bisab-~len(a)
for a,b in input():
.Perl, 66 byte
Script 63 byte + 3 byte untuk
-p
Tidak ada yang terlalu istimewa, memanfaatkan variabel
$`
dan$'
yang masing-masing 'sebelum pertandingan' dan 'setelah pertandingan', alih-alih membelah string. Saya menggunakan$}
untuk variabel string seperti awalnya itu menyelamatkan saya satu byte, tetapi tidak lagi!Contoh dijalankan:
Perl, 65 byte
Script 62 byte + 3 byte untuk
-p
Versi lain yang mencetak setiap baris (kurang dari satu byte!). (Ya, saya membuat ini karena saya tidak membaca pertanyaan dengan benar ...)
Contoh dijalankan:
sumber
PHP - 84 byte
Menggunakan kode pelarian ANSI untuk memposisikan kursor (
\x1b[XG
, menampilkan karakter Escape dan X menjadi koordinat berbasis 1), diikuti oleh*
string input kemudian untuk baris itu. Menerima input pada baris perintah dari formulir:Menerima entri multi-kata jika mereka dalam tanda kutip, karena mereka argumen argumen perintah.
sumber
C ++ 11, 95 byte
Kenapa tidak?
Sebagai fungsi, terima input sebagai
map<int, string>
nama yangv
berisi posisi dan string.Pemakaian
Periksa Menjalankannya Di Sini
sumber