Bayangkan sebuah kotak |
karakter berbentuk persegi panjang yang mewakili string kencang pada alat tenun ( lungsin ) yang dijalin dengan benang lain (benang pakan ), yang akan kita wakili -
.
Berikut ini adalah lilitan tenun dari alat tenun 7 × 4:
|||||||
|||||||
|||||||
|||||||
Ada beberapa cara tenunan dapat dianyam ke dalam lungsin, yang paling sederhana adalah tenunan polos .
Pada baris pertama dari tenunan polos, pakan mulai di atas string lungsin pertama, berjalan di bawah string kedua, kemudian di atas string ketiga, lalu di bawah yang keempat, dan seterusnya.
Baris pakan kedua identik dengan yang pertama tetapi diimbangi ke kanan oleh satu string warp, sehingga mulai di bawah kemudian berjalan, dan seterusnya.
Pada alat tenun 7 × 4 kami, tenunan polos terlihat seperti ini:
-|-|-|-
|-|-|-|
-|-|-|-
|-|-|-|
Kita dapat menggambarkan tenunan polos dengan mengatakan bahwa pakan melewati waktu lungsin 1 , kemudian di bawah 1 waktu, dan setiap baris berikutnya digeser 1 string ke kanan.
Sebuah menenun umum dapat digambarkan dengan memiliki pakan pergi ke warp v kali, kemudian di bawah u kali, dengan setiap baris berikutnya digeser oleh s string ke kanan. (Semua nilai adalah bilangan bulat, s mungkin 0 atau negatif, u dan v harus non-negatif.)
Alat tenun 7 × 4 dengan v = 1 , u = 2 , s = 2 , sejenis tenunan kepar :
-||-||-
||-||-|
|-||-||
-||-||-
Tantangan
Tugas Anda adalah menulis program terpendek (dalam byte) yang menghasilkan pola anyaman batang dan garis yang diberikan v , u , s , lebar dan tinggi alat tenun, dan pergeseran awal .
The pergeseran awal adalah jumlah string baris pertama di pakan digeser ke kanan (0 pada contoh di atas). Setiap baris berikutnya digeser oleh s lebih string.
Program Anda harus menggunakan 6 angka ini dalam beberapa format yang mudah digunakan (stdin, pemanggilan fungsi, dll.) Dan menampilkan kisi-kisi tenun bar dan persegi panjang ke stdout. Anda dapat menganggap semua input valid. (Semua nilai adalah bilangan bulat, lebar dan tinggi harus positif, pergeseran awal bisa apa saja.)
Contohnya
lebar = 5, tinggi = 4, pergeseran awal = 0, v = 1, u = 3, s = -2:
-|||-
||-||
-|||-
||-||
lebar = 5, tinggi = 4, pergeseran awal = 3, v = 1, u = 3, s = -2:
|||-|
|-|||
|||-|
|-|||
lebar = 5, tinggi = 4, pergeseran awal = 1, v = 1, u = 1, s = 0:
|-|-|
|-|-|
|-|-|
|-|-|
lebar = 5, tinggi = 4, pergeseran awal = 0, v = 1, u = 0, s = 0:
-----
-----
-----
-----
Catatan
- Pola selalu dimulai dengan pakan di atas lungsin di sudut kiri atas kisi (kecuali awalnya bergeser).
- Semua benang pakan masuk dari kiri. Mereka tidak spiral seperti ini .
- u + v belum tentu kelipatan dari lebar kisi.
- u dan v mungkin tidak keduanya 0
%(u+v)
. Dalam hal ini saya hanya mulai di indeks0
, jadi saya punyaw
karakter yang tersisa di string.JavaScript (ES 6) 128
Uji
sumber
Python, 92 byte
Hmm ... Jadi tergoda untuk belajar ruby sekarang.
Input dengan menetapkan variabel string dalam format ini: "width, height, shift awal, v, u, s".
Rekatkan sebelum program:
sumber
while h
. Saya mendapat baris tambahan.JavaScript (ES6), 111 byte
Pendekatan ES6 yang sedikit berbeda, menggunakan Array.from fungsional.
f
mengambil argumen(w,h,i,v,u,s)
dan mengembalikan string. Baris baru ditambahkan ke kode dan baris baru literal dalam string diganti oleh\n
untuk kejelasan; tidak tercermin dalam jumlah byte.Pemakaian
Versi tidak dikoleksi dengan penjelasan
Saya menyimpan beberapa byte dengan membuat alias untuk Array, yang tidak tercermin dalam versi yang tidak dikenali.
sumber
C, 357 byte
"Ini lebih nyaman daripada yang terlihat." "Pasti begitu." - Gia dan Eidon (Tidak ada yang akan mendapatkan referensi ini. Petunjuk: "Weave Mat")
Jadi saya sudah mengerjakan ini selama lima jam sekarang, dan saya menyerah. Saya tidak tahu bagaimana cara agar kode ini berfungsi. Itu terus berjalan mundur setelah baris pertama, dan kemudian sepenuhnya salah (7 4 0 2 2 1).
Inilah versi yang lebih sederhana yang dapat Anda baca dengan lebih mudah. Yang saya lakukan adalah mengambil input, membuat array template, dan kemudian mencetak di dalam loop.
Anda dapat dengan mudah mengujinya di sini: http://www.compileonline.com/compile_c_online.php menggunakan "7 4 0 1 1 1" di kotak Input STDIN di bagian bawah. Mulailah mengedit angka, dan Anda akan melihat masalahnya.
Maaf saya tidak bisa menemukan solusi yang berfungsi; Aku benci diriku sendiri karena ini. Saya telah menghabiskan terlalu banyak waktu untuk tidak mengunggahnya agar orang lain memperbaikinya.
Saya telah menggunakan printf ini untuk sementara waktu untuk memisahkan baris paling atas (mudah) dengan yang lainnya (baris masalah):
printf("%c",g[i?abs(t+f+j)%l:abs(t+j)%l]);
sumber
for(i=0;i++<h;)
? Trik yang sama untuk loop kedua? Ini menyimpan hanya satu char per loop.++i
? Itu hanya tembakan dalam kegelapan.Haskell, 126 byte
sumber
f w h i v u s
untuk(w?h)i v u s
. Fungsi infiks