Tulis program yang menggunakan string baris tunggal yang dapat Anda asumsikan hanya akan berisi karakter /\_‾
. (Itu maju dan garis miring ke belakang, garis bawah dan overline . Anda dapat menggunakan ~
di tempat overline jika Anda perlu karena overline tidak ASCII nyaman.)
Misalnya, satu input yang mungkin adalah:
__/‾‾\/\_/‾
Program Anda perlu menampilkan nilai kebenaran atau kepalsuan tergantung pada apakah tepi kiri string "terhubung", sehingga untuk berbicara, ke tepi kanan string melalui garis-garis karakter. Jadi, jika kerningnya sedikit kurang, akan ada garis hitam pekat (walaupun keriting) dari ujung kiri ke kanan, seperti seutas tali atau benang yang tidak terputus.
Output untuk contoh di atas akan benar karena ujung-ujungnya terhubung:
Untuk memperjelas koneksi:
/
menghubungkan di kiri bawah dan kanan atas\
menghubungkan di kiri atas dan kanan bawahnya_
menghubungkan di kiri bawah dan kanan bawahnya‾
(atau~
) menghubungkan di kiri atas dan kanan atas
Juga:
Tidak masalah apakah ujung-ujung tali dimulai di bagian atas atau bawah, hanya masalah bahwa mereka terhubung secara horizontal melalui seluruh panjang tali.
Anda dapat menganggap string input tidak kosong, dan tentu saja hanya satu baris.
Berikut adalah beberapa contoh lagi diikuti oleh 1 (benar) jika mereka terhubung atau 0 (salah) jika tidak:
__/‾‾\/\_/‾
1
_
1
\
1
/
1
‾
1
___
1
\/
1
/\/
1
/\/\
1
‾‾‾
1
\\
0
‾‾
1
_‾
0
‾_
0
\_____/
1
\/\\/\\___
0
\/\__/‾‾\
1
______/\_____
1
‾‾‾‾‾‾\\_____
0
‾‾‾‾‾‾\______
1
_____/‾‾‾‾‾
1
\___/‾‾‾\___/‾‾‾
1
\_/_\_
0
\_/\_
1
/\/\/\/\/\/\/\/\/\/\/\/
1
____________________
1
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
1
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾/
0
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\
1
/\‾/\‾___/\_\/__\/\‾‾
0
Kode terpendek adalah pemenangnya.
sumber
Jawaban:
Jelly , 9 byte
-1 byte terima kasih kepada @EriktheOutgolfer
Harapkan0 1
~
bukannya‾
. Mengembalikan atau .Cobalah online! , Kamar uji kebenaran , Kamar uji Falsy
Menggunakan rumus ini (tetapi sebaliknya mirip dengan versi 11-byte di bawah):
Transisi ini valid jika ganjil, atau tidak valid jika genap.n n
Berkomentar
Jelly ,
14 1211 byteMendukung (dan mengharapkan)0 1
‾
karakter dalam string input. Mengembalikan atau .Cobalah online! , Kamar uji kebenaran , Kamar uji Falsy
Bagaimana?
Diberikan dua karakter berturut-turut kode ASCII dan , kami ingin fungsi yang memeriksa apakah mereka membentuk transisi yang valid.x y
Kami memerlukan operasi non-komutatif, karena hasilnya dapat berubah ketika karakter dibalik. Misalnya,
_/
valid tetapi/_
tidak.Menggunakan eksponensial, kemungkinan formula 1 adalah:
Transisi ini valid jika , atau tidak valid jika .n≤1 n>1
1. Ditemukan dengan pencarian brute-force di Node.js (menggunakan BigInts)
Berkomentar
sumber
⁽"O
sama dengan9580
.Ruby -n , 30 byte
Cobalah online!
Mengurangi semua urutan pemecah string menjadi dua case menggunakan kelas karakter Regex.
sumber
~
alih-alih‾
. Saya tidak yakin apakah itu penting untuk tantangan ini, karena jumlah karakternya sama./
meskipun mereka dalam kurung?JavaScript (ES6), 45 byte
Cara yang naif.
Cobalah online!
sumber
s=>!/[~\/][\/_]|[_\\][\\~]/.test(s)
. Ia memeriksa apakah\/
atau~
berakhir pada\/
atau_
. Dan kemudian, memeriksa apakah\\
atau_
berakhir pada\\
atau~
.R ,
89 87 8178 byte-2 byte terima kasih kepada @Giuseppe
-6 byte terima kasih kepada @Nick Kennedy
Bytes -3 mengganti
1:length(y)
denganseq(a=y)
, di manaa
merupakan kependekanalong.with
menggunakan
\ / _ ~
. Ini mungkin tidak sesingkat solusi berbasis regex, tapi saya naksir melakukan sesuatu yang sedikit berbeda dengan orang lain.Karakter yang kurang dari 93 mengubah status dari atas ke bawah (atau sebaliknya), dan dengan demikian berperilaku
-1
sementara yang lain tidak melakukan apa pun dan berperilaku sebagai1
, cumprod melacak negara sehubungan dengan permulaan. Angka genap berada di bagian atas (diwakili dengan-1
), angka ganjil berada dalam kondisi turun (1
). Jika string tidak terputus negara dilacak dikalikan dengan posisi naik / turun, tidak boleh berubah, itu akan selalu menjadi kondisi awal (-1
, atau1
)Cobalah online
sumber
()
sekitary%%2
untuk menghemat 2 byte, karena operator khusus%(any)%
memiliki prioritas yang agak tinggi.!
Python , 46 byte
Cobalah online!
Mengonfirmasi bahwa setiap pasangan karakter yang berdekatan terhubung dengan memeriksa bahwa mereka muncul secara berurutan23= 8
__/~~\/\_
. String ini dapat dilihat sebagai De_Bruijn_afterence pada kali lipat posisi tinggi / rendah.Saya mencoba metode lain yang tidak terlalu membosankan untuk memeriksa pasangan karakter, tetapi mereka semua lebih lama melakukan hardcoding pada semua pasangan resmi seperti ini.
sumber
C (gcc) , 93 byte
Cobalah online!
sumber
w,o,r;k
.Chip
-z
, 17 byteCobalah online! (TIO termasuk
-v
untuk membuatnya lebih mudah untuk memahami output.)Harapkan
_/~\
set. Mengembalikan salah\x00
(falsy) atau\x01
(benar).Strategi untuk jawaban saya menggunakan informasi berikut:
A
: Posisi bit ini terjadi1
ketika sisi kiri simbol rendah, dan0
ketika tinggiF
: Posisi bit ini terjadi0
ketika sisi kanan simbol rendah, dan1
ketika tinggiC
: Posisi bit ini terjadi pada Selalu menjadi1
Dengan menggunakan informasi ini, saya hanya perlu memeriksa bahwa
F
masing-masing karakter cocok dengannot A
yang berikutnya. Sebuahxor
gerbang adalah cara yang nyaman untuk mencapai hal ini.Kode berikut melakukan ini, tetapi memberikan output untuk setiap pasangan (ditambah tambahan
1
di awal) (7 byte):Kami ingin berhenti pada kegagalan pertama, dan juga mencetak apakah kami telah berhenti di dalam string, atau di terminator nol (kami juga menambahkan
-z
untuk memberi kami terminator nol). Kita dapat menggunakannot C
untuk menandakan di mana kita berhenti, dan itu memberi kita program ini (13 byte):Tetapi kita masih memiliki "nol nol terkemuka" (mis.
\_/\
Memberi00 00 00 00 01
), jadi ini diubah menjadi jawaban yang diberikan di atas.sumber
05AB1E ,
29149 bytePort dari jawaban Jelly @Arnauld , jadi pastikan untuk menghapusnya juga!
Masukan dengan
‾
.Cobalah secara online atau verifikasi semua kasus uji .
Jawaban 29 byte asli :
Masukan dengan
~
alih - alih‾
.Itu terdengar lebih pendek di kepalaku ..
Akan mencoba untuk golf turun dari sini.Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan: "
Lihat tip tambang 05AB1E ini (bagian Bagaimana membuat bilangan bulat besar? Dan Bagaimana mengompresi daftar bilangan bulat? ) Untuk memahami mengapa
•6_üê{↕
ada1781179816800959
,ƵΔ
apakah180
dan•6_üê{↕ƵΔв
sekarang[52,66,69,100,103,131,179]
.Penjelasan tambahan:
Ada 16 ( ) kemungkinan pasangan karakter yang harus kami verifikasi. Jika kita mengonversi setiap karakter ke nilai unicode-nya, dan menghitung perbedaannya, kita akan mendapatkan perbedaan-perbedaan ini . Karena daftar bilangan bulat terkompresi di 05AB1E harus memiliki bilangan bulat positif saja, saya menambahkan 100 untuk masing-masing . Pasangan tidak valid dan nilai-nilai yang sesuai mereka kemudian: ; , , , , , , , Yang mengapa saya memiliki daftar bilangan bulat terkompresi dalam kode yang mengandung nilai-nilai ini. Karena dan hanya akan menyukai dan menghasilkan (atau setelah saya menambahkan 100), saya pertama kali menghapus duplikat yang berdekatan dari dan24
["/_", 52]
["\~", 66]
["_~", 69]
["//", 100]
["\\", 100]
["_\", 103]
["~_", 131]
["~/", 179]
__
~~
//
\\
0
100
~
_
pada input-string, sebelum menghitung dan memverifikasi perbedaan-pasangan.sumber
Python 3 ,
797063 byteDisimpan 16 byte berkat Arnauld dan Jo King, terima kasih!
Cobalah online!
Python 3 ,
6760 byte dengan ~ bukannya ‾Cobalah online!
sumber
Python 3, 126 byte
sumber
Haskell , 70 byte
Varian ini menggunakan
~
alih-alih overline. Dibutuhkan semua delapan pasangan yang valid dan memeriksa apakah string hanya berisi yang:Cobalah online!
Tidak Disatukan:
sumber
Perl 6 , 32 byte
Cobalah online!
Solusi regex yang hanya memeriksa bahwa string tidak mengandung urutan yang tidak valid.
Penjelasan:
sumber
R , 43 karakter, 47 byte
Itu sama dengan regex yang digunakan jawaban lain, tetapi disesuaikan untuk R.
Cobalah online!
Dan xkcd wajib .
sumber
~
di tempat‾
untuk mendapatkan 43 byte, 43 chars.Keempat (gforth) ,
10098 byteCobalah online!
Penjelasan
Telusuri string dan tentukan apakah setiap karakter dimulai pada posisi yang sama (atas atau bawah) seperti yang sebelum berakhir. Kurangi 1 dari penghitung jika tidak cocok. Pada akhirnya, jika penghitung telah berubah, maka string tersebut bukan string.
Posisi akhir tinggi jika char adalah
/
(47) atau~
(126). Kalau tidak rendahPosisi Mulai tinggi jika karakter adalah
\
(92) atau~
(126). Kalau tidak rendahPenjelasan Kode
sumber
Python 3 ,
8078 byteSaya tidak benar-benar melakukan banyak golf kode python tapi saya pikir saya bisa mencobanya
Cobalah online!
Python 3.8 (pra-rilis) , 71 byte
Saya ingin mencoba
:=
tugas ekspresi baruCobalah online!
sumber
Jelly ,
13 1211 byteTautan monadik yang menerima daftar karakter, menggunakan opsi
~
tempat‾
.Cobalah online! Atau lihat test-suite (... tempat saya memesan ulang 8 falsey di akhir)
Formula ini ditemukan dengan mengotak-atik sekitar dengan tangan: p (seperti yang di bawah)
Untuk yang ini saya juga semua 16 pasang ordinals karakter diperlakukan sebagai eksponensial dan mencari modulo besar yang akan masuk ke dalam tiga byte diikuti oleh modulo satu-byte (1,2,3,4,5,6,7,8 , 9,10.16.256) yang mempartisi 16 sehingga semua hasil yang dapat diterima adalah 1 atau 0 ("tidak signifikan") karena saya tahu
Ị
lebih pendek daripada<5
, dalam solusi saya sebelumnya, yang mencari semua hasil yang dapat diterima kurang dari semua yang tidak dapat diterima.Kemungkinan karakter tetangga dan evaluasi internalnya:
Sebelumnya @ 12:
Cobalah online!
Sebelumnya @ 13:
Cobalah online!
sumber
Ị
sedang mengujiabs(x)<1
bukanabs(x)≤1
. Ini menawarkan beberapa peluang lagi. :) (Saya terjebak pada 11 byte juga untuk saat ini.)Ị
sangat berguna sangat sering.perl 5,
2625 bytemenggunakan
;
sebagai pembatas pembatas akhir dapat dihapusTIO
26 byte
sumber
Excel, 150 byte
Menghapus pasangan yang tidak valid, lalu kembali
true
jika ini menghasilkan string asli.sumber
Haskell, 42 byte
solusi ini digunakan
~
, dan fungsi untuk memanggil adalah h (yaitu,h string
memberikan jawabannya)Solusinya menggunakan fungsi g yang diberi daftar, mengembalikan semua tupel nilai yang berdekatan pada daftar.
Kemudian kami menggunakan g untuk menghasilkan daftar tetangga yang diizinkan (dalam
g"__/~~\\/\\_"
) dan juga daftar semua pasangan tetangga dalam daftar input. Kemudian kami memeriksa bahwa setiap pasangan tetangga adalah pasangan yang diperbolehkan.sumber
C (gcc) ,
4136 byteCobalah online!
-5 dihilangkan
&1
mulai dari ide dari Peter Cordes ; operator yang diubah (diutamakan) untuk menghapus tanda kurungMenggunakan
~
. Periksa bit pertama dan keenam dari representasi biner dua karakter pertama:dan melintasi string secara rekursif.
(*_ / 32) & 1
hanya berlaku untuk karakter yang ujungnya tinggi, sedangkan*_ & 1
yang benar hanya untuk karakter yang mulai rendah.(x&1) ^ (y&1) == (x+y)&1
. XOR adalah add-without-carry, dan carry tidak mengganggu bit terendah. Itu1
berasal dari nilaif(_)
kembali, jika sisa string itu berserabut.sumber
c&32
Ini berlaku untuk karakter yang memiliki tinggi, sedangkanc&1
hanya berlaku untuk karakter yang mulai rendah.)*_ ^ *++_
perilaku yang tidak terdefinisi:^
bukan titik urutan, jadi tidak ada urutan-sebelum hubungan menjamin mereka mendapatkan karakter yang berbeda. Tentu saja itu juga kehilangan areturn
, jadi itu hanya bekerja dengan digcc -O0
mana fungsi tubuh adalah ekspresi-pernyataan.&1
dua kali berlebihan.(x^y)&1 == (x&1) ^ (y&1)
. Tetapi mengingat prioritas operator C di mana&
memiliki prioritas lebih tinggi daripada^
(tidak seperti operator aritmatika di mana + dan - memiliki prioritas yang sama), kita perlu menambahkan()
2 byte untuk menghapus&1
2 byte, karena(x&1) ^ y
tidak setara. Tetapi mungkin menggunakan parens membuka peluang untuk penghematan lainnya. Untungnya bukan masalah untuk versi kode mesin x86 ini, di mana manipulasi bit sangat kompak ...Bash, 30 byte
Inputnya adalah STDIN. Kode keluar adalah 1 jika valid, 0 jika tidak valid.
sumber
SNOBOL4 (CSNOBOL4) , 58 byte
Cobalah online!
Tidak menghasilkan apa pun untuk kebenaran dan bilangan bulat positif (menunjukkan posisi jeda pertama dalam string) untuk falsy.
sumber
Arang ,
3218 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
sumber
kode mesin x86, 13 byte.
(Atau 11 byte tanpa menangani string karakter tunggal yang bersifat string sepele.)
Menggunakan pemeriksaan posisi bit dari jawaban C @ attinat
Kode mesin yang sama berfungsi dalam mode 16, 32, dan 64-bit. Sumbernya adalah NASM untuk mode 64-bit.
Callable from C seperti
unsigned char string_connected(int dummy_rdi, const char *s, int dummy_rdx, size_t transitions);
halnya konvensi pemanggilan System V x86-64. Bukanbool
karena transisi = 0 case mengembalikan kode ASCII, bukan 1.RCX = len = strlen(s) - 1
. yaitu jumlah karakter-batas = transisi untuk memeriksa dalam string panjang-eksplisit.Untuk
transitions > 0
, mengembalikan 0 (ketidakcocokan) atau 1 (terhubung) dan membiarkan ZF diatur sesuai. Untuktransitions == 0
, mengembalikan byte tunggal dari string (yang bukan nol dan dengan demikian juga benar). Jika bukan karena kasus khusus itu, kita bisa drop JRCXZ keluar awal. Itu di dalam loop hanya karena AL tidak nol di sana.Logika posisi bit didasarkan pada pengamatan bahwa bit 0 dari kode ASCII memberi tahu Anda ketinggian mulai, dan bit 5 memberi tahu Anda ketinggian akhir.
Uji harness (dimodifikasi dari tautan TIO attinat, waspadai titik-urutan C UB dalam fungsi referensi C itu). Cobalah online! . Fungsi ini benar untuk semua 30 kasus. (Termasuk kasus karakter tunggal di mana nilai kembali tidak cocok: keduanya benar dengan nilai bukan nol yang berbeda dalam kasus itu.)
sumber
Excel, 79 byte
Sel
A1
sebagai inputsumber
Dart , 94 byte
Cobalah online!
sumber
C ++,
132110 byte-22 byte berkat ASCII saja
Menggunakan bitmask untuk mengetahui apakah awal dan akhir naik atau turun
sumber
Retina , 26 byte
Cobalah online!
Penggunaan
~
daripada‾
, karena itu membuatnya lebih mudah untuk mengetik.sumber
Regex, 34 byte
Saya tidak bisa menemukan aturan dalam menggunakan Regex sebagai bahasa. Tolong beri tahu saya jika saya perlu menyesuaikan ini.
Cobalah di sini: https://regex101.com/r/s9kyPm/1/tests
sumber
‾
ke~
APL + WIN, 58 byte
m ← 2 2⊤ '_ / \ ~' ⍳s ←, ⎕⋄ (1 + ⍴s) = + / ((↑ m [0;]), m [1;]) = m [0;], ¯ 1 ↑ m [1;]
Meminta input string, indeks asal 0 dan menggunakan ~ untuk karakter atas
Cobalah online! Atas perkenan Dyalog Classic
sumber