Mari kita mewakili bata batu standar sebagai [__]
(dan mengabaikan fakta bahwa bagian atas terbuka). Ketika batu bata ini ditumpuk, setiap lapisan lainnya diimbangi dengan setengah batu bata, seperti biasa dalam konstruksi batu bata:
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
Dengan demikian, setiap bata memiliki paling banyak enam tetangga dan tidak mungkin bagi dua batu bata untuk berbaris secara langsung.
Poin kuncinya adalah bahwa pengaturan batu bata ini tidak direkatkan , tetapi hanya disatukan oleh gravitasi. Jadi penting bahwa setiap bata dalam struktur stabil, jika tidak seluruh struktur tidak stabil.
Ada tiga cara batu bata individu menjadi stabil:
- Setiap bata di tanah (garis bata terendah) stabil.
Batu bata yang memiliki dua batu bata tepat di bawahnya stabil:
[__] <- this brick is stable [__][__] <- because these bricks hold it up
Setiap bata yang memiliki bata di atas dan di bawahnya di sisi yang sama stabil:
[__] [__] [__] [__] <- these middle bricks are stable [__] [__] because the upper and lower bricks clamp them in [__] [__] [__] [__] <- these middle bricks are NOT stable [__] [__]
Dari aturan-aturan ini kita dapat melihat, misalnya, pengaturannya
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
tidak stabil karena batu bata kanan atas tidak stabil, hanya itu yang diperlukan.
Struktur bata hanya stabil jika semua batunya stabil.
Tantangan
Tugas Anda adalah menulis fungsi yang mengambil string struktur bata dan mengembalikan nilai kebenaran jika struktur stabil, dan nilai palsu jika tidak stabil. ( definisi benar / salah )
String input mungkin besar secara sewenang-wenang tetapi akan selalu berupa kotak karakter persegi panjang, dengan ruang yang mengisi area yang kosong dari batu bata. Lebar kisi karakter akan habis dibagi 4 tetapi ketinggiannya mungkin ganjil atau genap.
Kotak bata selalu memanjang ke atas dan ke kanan dari posisi bata kiri bawah:
.
.
.
BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?BRK? . . .
BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?BRK?
Tergantung pada strukturnya, masing BRK?
- masing mewakili batu bata ( [__]
) atau ruang kosong (4 spasi).
Perhatikan bahwa rongga setengah bata diisi dengan ruang untuk memastikan bahwa kotak karakter adalah persegi panjang.
Mencetak gol
Kode terpendek dalam byte menang.
Catatan
- Jika diinginkan, Anda dapat menggunakan
.
alih-alih ruang sebagai karakter ruang kosong. - String kosong dianggap stabil.
- Jika bahasa Anda tidak memiliki fungsi, Anda dapat menggunakan variabel string bernama sebagai input dan menetapkan hasilnya ke variabel lain.
- Jika bahasa Anda tidak memiliki string, Anda dapat melakukan apa pun yang tampaknya sesuai untuk input.
Uji Kasus
Berbagai test case, dipisahkan oleh garis kosong. Untuk kejelasan .
digunakan bukan ruang untuk ruang kosong.
Stabil:
[__]
..[__]..
[__][__]
........[__]........
......[__][__]......
........[__]........
..[__][__]..
[__][__][__]
..[__][__]..
[__]....[__]
............[__]..
..[__][__][__][__]
[__][__][__][__]..
..[__][__][__][__]
[__][__][__][__]..
..[__]........[__]..
[__][__][__][__][__]
..[__][__][__][__]..
....[__][__][__]....
......[__][__]......
........[__]........
Tidak stabil:
..[__]..
........
..[__]..
[__]....
..[__]..
....[__]
..[__][__]..
[__]....[__]
..[__][__]..
[__]....[__]
..[__][__][__][__]
[__][__][__][__]..
..[__][__][__][__]
[__][__][__][__]..
[__][__][__][__][__]
..[__][__][__][__]..
....[__][__][__]....
......[__][__]......
........[__]........
........[__]....
......[__][__]..
....[__][__]....
..[__][__]......
[__][__]........
..[__]..........
(Anda harus menumpuk mental garis-garis itu di atas satu sama lain. Intinya adalah bahwa aturan Anda memungkinkan struktur yang pusat gravitasinya jauh diimbangi dari titik kontak dengan tanah. Seharusnya mungkin untuk mengencangkannya untuk menghindari hal ini. , tanpa memerlukan mesin fisika, jika Anda menginginkannya.)Jawaban:
80386 kode mesin, 98
Kode:
Kode memindai seni ASCII dari akhir hingga awal, melompati 2 karakter sekaligus. Ini melakukan dua kali pemeriksaan yang diperlukan (itu akan cukup untuk melompat 4 karakter), tetapi menyederhanakan logika.
Memeriksa dimulai pada baris karakter berikutnya-ke-terakhir (tidak perlu memeriksa baris terakhir). Di setiap baris, dimulai 3 karakter dari kanan (tidak perlu memeriksa terlalu jauh ke kanan). Untuk setiap karakter, ia memeriksa 4 karakter di sekitarnya:
Ada banyak kondisi logis untuk diperiksa:
Ini kebetulan kebetulan bahwa semua karakter bata
[_]
memiliki set LSB mereka; semua karakter lain.\n
sudah jelas. Selain itu, 80.386 set instruksi memiliki ini berguna "tinggi" dan "rendah" register (ah
,al
, dll), yang membantu memparalelkan cek sedikit. Jadi semua jumlah pengecekan sedikit mengotak-atik.Saya mulai dari kode C berikut:
Saya menerjemahkan kode ke bahasa assembly (sebagian besar satu-ke-satu), termasuk implementasi golf
strchr
danstrlen
. Kode sumber berikut diterjemahkan oleh MS Visual Studio ke kode mesin di bagian atas posting saya.sumber
MATLAB - 119 byte
Diperkecil:
Diperluas:
Penggunaan sampel:
Detail
Rutin menambahkan baris
.
ke atas matriks input, kemudian mengkonversi ke matriks numerik dengan menambahkan 3 ke kode karakter ASCII. Diberikan konversi ini, konvolusi 2D dengan kernelmenghasilkan matriks dengan
0
di lokasi tempat pola karakterhadir, dengan
*
mewakili "karakter apa saja". Karena konstruksi kernel, ini adalah satu-satunya pola karakter yang valid yang akan menghasilkan a0
.Konvolusi identik dilakukan dengan kernel versi kiri-kanan yang terdeteksi
Sebuah input stabil jika i ) kosong, atau ii ) tidak ada nol muncul di kedua lilitan.
Dua frustrasi adalah
Konvolusi standar MATLAB berjalan melewati tepi matriks operan, menghasilkan kesalahan
0
pada sudut yang berlawanan untuk kedua konvolusi, yang membutuhkan,'valid'
(8 byte) yang ditambahkan untukconv2
memanggil untuk membatasi output ke area di mana konvolusi valid.Menangani case string kosong menambahkan 12 byte.
sumber
JavaScript (E6) 131
261Tes di konsol FireFox / FireBug
Keluaran
Tidak disatukan
sumber
[...a]
dilakukan, jika Anda tidak keberatan dengan pertanyaan saya? Saya tahu ES6 memungkinkan...arg
sebagai argumen terakhir dari fungsi untuk menangkap variadics, tapi saya belum pernah melihatnya menggunakan cara ini.{:}
di MATLAB. Itu akan sangat berguna. Terima kasih. :)Python 279
Saya pikir saya sangat buruk dalam tantangan kode golf dan mungkin saya menggunakan bahasa yang salah untuk itu: D Tapi saya suka kode yang dapat dengan mudah dibaca :) Btw Saya ingin melihat kode python yang menggunakan lebih sedikit byte!
Kemungkinan contoh:
sumber
_
dan[
<>
, Anda akan menggunakan!=
.!=
cara yang disukaiJavaScript 2 (ES6) - 148
151byteMengecek string baris bata terpisah baris baru (catatan: jika kita bisa menggunakan karakter pemisah yang berbeda seperti "|" untuk memisahkan baris ini bisa dibuat 1 byte lebih pendek).
Tes di konsol Firefox dengan:
sumber
Python, 209
Tes:
Keluaran:
sumber