Jika Anda mengambil selembar kertas grafik dan menggambar garis miring yang berjalan m
tepat ke kanan dan ke n
atas, Anda melintasi n-1
garis horizontal dan m-1
vertikal dalam beberapa urutan. Tulis kode untuk menampilkan urutan itu.
Misalnya, m=5
dan n=3
memberi:
Kemungkinan terkait: Menghasilkan ritme Euclidian , Fibonacci tilings , FizzBuzz
Input: Dua bilangan bulat positif m,n
yang relatif prima
Keluaran: Kembalikan atau cetak persimpangan sebagai urutan dua token yang berbeda. Misalnya, itu bisa menjadi string H
dan V
, daftar True
dan False
, atau 0
's dan 1
' s dicetak pada baris terpisah. Mungkin ada pemisah antara token selama itu selalu sama, dan tidak, katakanlah, sejumlah ruang variabel.
Kasus uji:
Kasing uji pertama memberikan output kosong atau tidak ada output.
1 1
1 2 H
2 1 V
1 3 HH
3 2 VHV
3 5 HVHHVH
5 3 VHVVHV
10 3 VVVHVVVHVVV
4 11 HHVHHHVHHHVHH
19 17 VHVHVHVHVHVHVHVHVVHVHVHVHVHVHVHVHV
39 100 HHVHHHVHHVHHHVHHVHHHVHHVHHHVHHHVHHVHHHVHHVHHHVHHVHHHVHHHVHHVHHHVHHVHHHVHHVHHHVHHVHHHVHHHVHHVHHHVHHVHHHVHHVHHHVHHHVHHVHHHVHHVHHHVHHVHHHVHH
Dalam format (m,n,output_as_list_of_0s_and_1s)
:
(1, 1, [])
(1, 2, [0])
(2, 1, [1])
(1, 3, [0, 0])
(3, 2, [1, 0, 1])
(3, 5, [0, 1, 0, 0, 1, 0])
(5, 3, [1, 0, 1, 1, 0, 1])
(10, 3, [1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1])
(4, 11, [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0])
(19, 17, [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1])
(39, 100, [0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0])
Jawaban:
Ruby, 92; Burung unta 0.7.0 , 38
Output untuk keduanya menggunakan 1 dan 0 (mis.
101101
).Berikut penjelasan dari burung unta:
Dan penjelasan tentang bagaimana semuanya bekerja, menggunakan kode Ruby sebagai panduan:
sumber
Python, 53
Ini menggunakan output daftar Benar / Salah. Tidak ada yang istimewa di sini.
sumber
Pyth -
3224 byteMengambil input melalui stdin dengan format
[m,n]
. Mencetak hasilnya ke stdout sebagai daftar 0 dan 1, di mana 0 = V dan 1 = H.Uji secara online
Penjelasan:
sumber
eM
sama denganmed
.@"VH"
karena Anda diizinkan mencetak0
dan1
bukannyaV
danH
.J
. Inilah yang saya miliki sejauh ini pada 25 byte: pyth.herokuapp.com/...jk
karena hasilnya bisa daftar.Kode mesin IA-32, 26 byte
Hexdump kode:
Saya mulai dari kode C berikut:
Itu menulis output ke buffer yang disediakan. Itu tidak mengembalikan panjang output, tetapi itu tidak benar-benar diperlukan: panjang output selalu
m + n - 2
:Untuk mengubah kode C menjadi kode mesin, saya pertama-tama melakukan beberapa penyesuaian, untuk membuat salah satu
if/else
cabang kosong, dan membandingkannya dengan0
alih - alihn
:Dari sini, menulis kode inline-assembly sangat mudah:
sumber
t
"jarak kebuzz
". Jika jarak setidaknyan
, pergifizz
, lain pergibuzz
; perbarui jarak; ulangi sampai 0.Python - 125 byte
Menggunakan algoritma yang sangat sederhana, hanya menambah koordinat dan mendeteksi ketika melintasi garis dan dicetak. Saya ingin menerjemahkan ke Pyth.
Loop sementara memeriksa jumlah
l
ines dan kemudian memeriksa apakah ada nilai yang melewati batas int dengan mengurangi.Mengambil input like
39, 100
dari stdin dan mencetak likeHHVHHHVHHVHHHVHHVHHHVHHVHHHVHHHVHHVHHHVHHVHHHVHHVHHHVHHHVHHVHHHVHHVHHHVHHVHHHVHHVHHHVHHHVHHVHHHVHHVHHHVHHVHHHVHHHVHHVHHHVHHVHHHVHHVHHHVHH
ke stdout dalam satu baris.sumber
CJam, 15 byte
Coba di sini.
Mencetak
01
untuk V dan10
untuk H.Penjelasan
Garis diagonal melintasi garis horizontal untuk setiap 1 / n dari seluruh garis diagonal, dan melintasi garis vertikal untuk setiap 1 / m.
sumber
TI-BASIC, 32
Mudah. Menggunakan urutan
0
dan1
, dipisahkan oleh linebreak. Kelebihan TI-BASIC adalahgcd(
perkalian dua byte dan tersirat, tetapi kelemahannya adalah loop For termasuk nilai akhir dan 5 byte yang dihabiskan untuk input.sumber
Python, 47
Seperti algoritma anatolyg , tetapi diperiksa langsung dengan moduli.
sumber
Haskell, 78 byte
Contoh penggunaan:
Cara kerjanya: buat daftar nilai-x semua penyeberangan vertikal
(x,0)
untukx
dalam [1,2, ..., m-1] (0
menunjukkan vertikal) dan tambahkan daftar nilai-x semua penyeberangan horizontal(y*m/n,1)
untuky
di [1,2, ..., n-1] (1
menunjukkan horizontal). Sortir dan ambil elemen kedua dari pasangan.Kutukan hari ini: sekali lagi saya harus menghabiskan 17 byte pada
import
karenasort
dalamData.List
dan tidak di perpustakaan standar.sumber
KDB (Q), 44 byte
Penjelasan
Temukan semua x nilai sumbu dari titik potong dan urutkan mereka. Jika mod 1 bernilai nol "V", bukan nol adalah "H".
Uji
sumber
CJam,
2624 byteCobalah online
Sangat mudah, cukup banyak implementasi langsung dari algoritma tipe Bresenham.
Penjelasan:
Yang terakhir
01
perlu muncul karena loop pergi ke titik akhir, yang bukan bagian dari output yang diinginkan. Perhatikan bahwa kita tidak bisa hanya mengurangi jumlah loop dengan 1. Jika tidak, untukN > M
, semua0
s dari iterasi terakhir akan hilang, sementara kita hanya perlu menyingkirkan yang terakhir0
.sumber
>
untuk;W<
.1
di atas tumpukan, saya mungkin juga menggunakannya secara produktif.