Intro
Ada 3 paku di dinding. Anda memiliki seutas tali yang terpasang pada bingkai foto dengan kedua ujungnya. Untuk menggantung gambar, Anda menjerat tali dengan paku. Tetapi sebelum melepaskan gambar: Dapatkah Anda memprediksi apakah gambar akan jatuh, hanya dengan melihat bagaimana tali melilit paku?
Pada contoh pertama gambar tidak akan jatuh. Dalam contoh kedua gambar akan jatuh.
Tantangan
Mengingat jalur tali di sekitar N
paku, tentukan apakah gambar itu akan jatuh atau tidak. Kembalikan nilai kebenaran jika gambar akan jatuh, dan nilai palsu sebaliknya.
Detail
- Anda dapat mengasumsikan bahwa paku dan gambarnya diatur secara teratur
N+1
, dengan gambar di bagian bawah. - Anda dapat mengasumsikan bahwa tidak ada simpul di tali, yaitu tali dapat terus-menerus terbungkus dari salah satu dari dua ujungnya.
- Setiap kuku dihitung searah jarum jam dengan huruf alfabet. Anda dapat mengasumsikan bahwa paling banyak ada 26 paku (AZ).
- Lilitan searah jarum jam di sekitar kuku dilambangkan dengan huruf kecil, pembungkus searah jarum jam dilambangkan dengan huruf besar.
Contoh pertama dari atas akan dikodekan sebagai BcA
, contoh kedua dikodekan sebagai CAbBac
.
Untuk pembaca cenderung: Masalah ini setara dengan menentukan apakah suatu elemen dari kelompok bebas - yang dihasilkan oleh set kuku - adalah identitas atau tidak. Ini berarti cukup untuk membatalkan substring berulang kali seperti aA
atau Aa
sampai Anda mencapai titik tetap. Jika titik tetap adalah string kosong, ini adalah elemen netral, jika tidak, maka tidak akan.
Contohnya
Picture will fall:
Aa
CAbBac
aBbA
DAacAaCdCaAcBCBbcaAb
ARrQqRrUuVHhvTtYyDdYyEKRrkeUWwua
AKkQqEeVvBESWwseYQqyXBbxVvPpWwTtKkVHLlWwNBbAanYYyyhWwEJZUuNnzjYyBLQqQqlEGgebeEPLlTtZzpUuevZzSsbXSGgsUuLlHhUQquPpHUuFfhTZzIitGgFAaBRrBbbYXxOoDZTDdtzVvXxUudHhOVvoUuXKkxyBEeLlbFfKkHhfVAaQqHAaJjODdoVvhSsZzMZzmPpXNBbnxBbUuSSsUuDRrdNnUusJDIiUuIidCEGgeMmcLlDPOopdTEeQqCAETtNnYyeGUuPEFfSsWwHheAaBbpgCcOHUuhAaCcoEFBbfeaFHhfcCFFffNncGFfgtjMVUuKAakvKkXxLlTMmtmOFfoUuXSsYZzLXxlyxUuRPZzTtprSsWwRrPLlpGgMmKRrDHhdRCcUurYNnKCckykXJjxWwUSsJjKkLlKkuBbBbOoWwWwIiUuPDdBbCcWHBbCFfcDdYBbLlyVvSsWGgEewCchDdYywAaJjEepPpPpQXxZzFfLGXxglNnZzYDdyqCcKWXxwXxQqXTtxkFfBSSAasTFftZzsXGgxSsLlLlbZzAaCCccXVvYyxTIiOoBbFftCVQqDdBbGgAavQqKkDPpKTCctRrkdcvAaQWOowLOolqVMmvZAaHCBbcPphIiRKkrLlzFMOomDIiXJjIixMmdNnMHhmfNTtIiKkSDdTtsVvHhnAaNSVvTUutNnXxsGIiXxPpPHhUupgNnAaAAOoaaIiHJjhVvLlnYyXxQqSsTtKJjkBbNnVvEYCcFfMHGghBbmNnEeJTtjJjWYywyeNWwDIiZYyzOodnMQqmVvCcQqxVvGNnEeNBbngVvUGgYyBbDdVvIiAAaauPpQKDdEekNnVLlvHhGSDIidPZzpsPCcpgQqKkQqNOonLlIiLlJjqPAaPXxTtppYyCPpHhCIicARBbracXxWwXEVUuUuGgZHhzBSsbvGgFfeVvxLlNKknWwBLlIibWOowNnRSsrSEeKAakOosLZzZRrHhzTtTFfUuNnOKkotXxTtla
Picture will not fall:
A
BcA
ABCD
aBaA
bAaBcbBCBcAaCdCaAcaCAD
ARrQqRrUatuVHhvTYyDdYyEKRrkeUAua
AEEeQqNneHhLlAIiGgaECXxcJjZzeJFfVWwDdKkvYWwyTJjtCXxANIinaXWwxcTWwtUuWwMmTBbVWIiFLlWwZzfwPLlEepvWZzwKkEYEeWXxwySXTtEexRIiNBbnWAaTtQqNnBMSsWwOombwWwPVPpGPpgYyvDdpBbrQqHhUusKRrDAVvadLlWwOZzokGJCXSSssXxxJPpGIigZzjJjLlOoNRrnPpcMZzmjgJjNDEeQqWKkNTtnSswIidCcnYBGgbyJSsjPpIiMmMmMmSNnWVvwZzIQqLXHhxTPptlisOoeTtTtYMmVvPpyKNnMFfmkXxSVvsCGJjXxgXYJPpjWwQIiXxqyDdxFfDdAaRNnJjrctHBbZzhEQqMmeCcRBbrGgAaAaJNnRrYyWwSDdVvsJOojQGgWWwIBbiwRrqJjjWwOoFPMmDdRrQOoqNnRrDPJjpMmdPpGFfVvWUuwgpWCcNnPpwfUXCcZzJjUSsuXxxUuuRGgHhrSQqJjOosMMTtmHhmKkXxDdLlWwjSUuAaMmKYyksZzVvPZzVEeVvvHhZZOozBbzMmZCczYyGgISsiQqpXxMmXxEMmeRrAGgaGgMOGgomZFfDdzSSssBGPpgbTtBbOoRWWwGgLJjlEeGgLDdRrUulNnZzJjJjUKkuXxFfwATtaZzLVvlWwSsMmrBAaELleGBLFflbgHhbIFfiBbPpTWZzwKkKLASsaTJYyjtBbBbWwIiZCcWwzIiZLlUTtuBbYyBbIizTJjtLTtDOOoBbodBbllSsUGgLlAKkauYykUuUNnPpuDFfAaLNVvnVvlHhdMmBAaBbIiVRrGWOoPpwgWXwKkvJjOoTtYCUucVGgYyLlVvFfvRrMmySsDdbtICZzcNnINSOosDQAaXoxRGgKkrqdZznDdXxZzMGgmiJjNnACcMQqmaNnWZzUOuwTVvAJjSsaRrGgSsTtOMmRroVvRrtAVGgvMmaINniDGCcOogRrWwMVvYFfyTtmTtVvOoOIiodRrGgAxaSsGgiJja
Jawaban:
Retina , 21 byte
Cobalah online!
Seperti solusi flawr, ini hanya berulang kali menghapus pasangan huruf besar / kecil yang berdekatan dan kemudian memeriksa apakah hasilnya kosong atau tidak.
Adapun bagaimana seseorang cocok dengan pasangan huruf besar / kecil:
sumber
MATLAB, 76 byte
Oktaf,827977 byteIni mungkin pertama kalinya saya melihat di mana MATLAB sebenarnya lebih pendek dari Oktaf (dengan seluruh byte)!
Jawaban baru di MATLAB:
Jawab dalam Oktaf:
Disimpan
tigalima byte berkat flawr.~nnz(c)
lebih pendek dariisempty(c)
, dan'Aa'
dua byte lebih pendek dari[0,32]
.Cobalah versi Octave online!
Penjelasan:
c=input('')
meminta input dari pengguna. Kami mendefinisikank='Aa'
sebagai array karakter.while k++<1e5
: Sementara loop dimana kedua elemen dik
yang bertambah setiap iterasi,Aa
,Bb
,Cc
dan sebagainya. Loop akan berlanjut hingga elemen terbesar1e5
, yang seharusnya cukup tinggi untuk sebagian besar string. Ini dapat ditingkatkan menjadi9e9
tanpa meningkatkan jumlah byte.Kami akan mengambil
strrep
fungsi dalam langkah-langkah, mulai dari tengah.Dengan menggunakan
mod(k,64)
kita akan mendapatkan yang berikut ketika kita mencapai akhir alfabet (jika kita mengkonversik
kembali ke karakter):Seperti yang Anda lihat, akan ada beberapa simbol di antaranya, tetapi kemudian akan membungkus dan mulai dengan alfabet lagi, tapi sekarang dengan huruf kecil terlebih dahulu. Ini adalah cara yang sangat singkat untuk memeriksa keduanya
Aa
danaA
.['',65+mod(k,64)]
menyatukan nilai numerik darimod
-call, dengan string kosong, mengonversi angka menjadi karakter.strrep
digunakan untuk menghapus elemen dari stringc
dan mengembalikannya. Ini akan mencari semua kemunculank
dalam string dan menggantinya dengan string kosong.Setelah
1e5
iterasi kita akan memiliki string kosong atau string tidak kosong. Kami memeriksa apakah ada elemen dalamc
menggunakannnz(c)
. Kami kembalinot(nnz(c))
, jadi1
jika itu kosong, dan0
jika ada karakter yang tersisac
sumber
Minkolang 0,15 , 30 byte
Coba di sini!
Penjelasan
Sifat toroidal Minkolang adalah leverage di sini untuk menghilangkan kebutuhan untuk loop luar. Gagasan umum di sini adalah untuk memeriksa apakah dua elemen teratas tumpukan terpisah 32 unit (artinya mereka adalah pasangan huruf besar / huruf kecil), dan jika keduanya, matikan keduanya. Karena ini dilakukan "secara realtime", maka dapat dikatakan, penyatuan pasangan ditangani dengan benar.
sumber
Haskell, 62 byte
Cobalah online
Kredit untuk cacat untuk
abs
dan Laikoni untukfromEnum
peta .Fungsi helper
%
mengambil string yang sudah disederhanakanl
, dan menambahkan simbola
sebelum menyederhanakan hasilnya. Jikal
dimulai dengan karakter terbalika
, mereka membatalkan. Kalau tidak,a
hanya ditangguhkan. Perhatikan bahwa tidak diperlukan penyederhanaan lebih lanjut pada tahap ini.Fungsi utama
f
menambahkan dan menyederhanakan setiap karakter secara bergantian melalui afoldr
. Kemudian, ia memeriksa apakah hasilnya kosong.Untuk memeriksa apakah dua karakter bertolak belakang dan harus dibatalkan, lihat apakah nilai ASCII-nya berbeda 32. Setiap elemen diproses
fromEnum
sebelum diteruskan ke%
.sumber
05AB1E , 17 byte
Cobalah online!
Penjelasan
sumber
Haskell ,
98 97 8581 byteIni hanya implementasi naif yang berulang kali mencoba untuk membatalkan surat adjecent sampai tidak ada perubahan lagi, dan kemudian menentukan hasilnya.
Terima kasih @nimi untuk -12 byte dan @xnor untuk -4 byte lainnya!
Cobalah online! atau Verifikasi semua contoh!
sumber
f=null.until(\a->r a==a)r.map fromEnum
harus menyimpan dua byte.(\a->r a==a)
bisa((==)=<<r)
.=r l
menjadil
, gagasan yang cukup untuk hanya membuat satu penggantian per kali.=<<
, sepertinya sihir XD=<<
seperti>>=
tetapi dengan argumen bertukar. Ungkapan sering muncul sebagai dalam bentuk yang((==)=<<r)
berarti "tidak berubah di bawahr
".Mathematica, 102 byte
Fungsi tanpa nama mengambil string alfabet sebagai input dan kembali
True
atauFalse
.Inti dari implementasi adalah membuat fungsi yang menghapus pasangan yang membatalkan, seperti
"Pp"
atau"gG"
, dari sebuah string. Ekspresi{Join[a=Alphabet[],A=ToUpperCase@a],A~Join~a}
menghasilkan sepasang daftar karakter yang terurut, daftar yang pertama{"a","b",...,"Z"}
dan yang kedua{"A","B",...,"z"}
. Kemudian#<>#2&~MapThread~
menghasilkan daftar di mana unsur-unsur yang sesuai dari dua daftar ini telah digabungkan, yaitu{"aA","bB",...,"Zz"}
,. Ekspresi menyenangkan""|##&@@
kemudian (melalui keajaiban urutan argumen##
) menghasilkan daftar alternatif"" | "aA" | "bB" | ... | "Zz"
; akhirnya,StringDelete[...]
adalah fungsi yang menghapus semua kemunculan salah satu alternatif tersebut dari string.Sekarang sudah cukup untuk berulang kali menerapkan fungsi itu ke string input sampai hasilnya tidak berubah, yang dicapai oleh
~FixedPoint~#
, dan kemudian menguji apakah hasilnya adalah string kosong""==
.sumber
JavaScript (ES6), 73 byte
Tidak seperti .NET, JavaScript tidak memiliki cara untuk mematikan sensitivitas huruf besar-kecil di tengah-tengah pertandingan, jadi alih-alih kita harus menemukan semua substring huruf yang diulang huruf besar-kecil, dan kemudian menghapus pasangan karakter yang berdekatan yang tidak cocok, yang pada titik ini harus pasangan huruf besar / kecil.
sumber
Perl, 28 byte
Penjelasan:
Perl memungkinkan seseorang untuk memasukkan ekspresi reguler yang dihasilkan secara dinamis di dalam ekspresi reguler standar.
The
.
cocok apa-apa.Ini
(??{
adalah awal dari regex yang dihasilkan.The
$&
variabel akan berisi seluruh cocok string yang sejauh ini, yang dalam hal ini adalah hanya apa pun.
cocok.The
^
Operator tidak baik numerik xor atau tali xor, tergantung pada nilai-nilai operan. Dalam hal ini, itu akan menjadi string xor.Ini
' '
hanya sebuah string yang berisi spasi, yang memiliki nilai ascii (atau unicode!) 32. Ketika sebuah spasi di-xor dengan char di dalam kisaran az atau AZ, itu akan berubah dari huruf besar ke huruf kecil atau visum sebaliknya.Ini
})
adalah akhir dari regex yang dihasilkan.1 while s/whatever//
akan berulang kali mencari pola dan menggantinya dengan string kosong.$_
adalah variabel default. Variabel ini adalah perl melakukan hal-hal yang menyenangkan dan menarik ketika Anda tidak menentukan variabel lain. Di sini saya menggunakannya untuk mengembalikan nilai true atau falsy, karena string panjang nol adalah false, dan string panjang bukan nol yang tidak sama"0"
adalah benar. Saya juga mengasumsikan bahwa string input awalnya ditempatkan di dalamnya.Coba di sini
sumber
!
sebelum final$_
. Jika tetap seperti ini, Anda dapat menyimpan 4 byte dengan mengubahnya menjadis/.(??{$&^' '})//&&redo
, +1 byte untuk-p
flag. Ini tidak akan berfungsi dalam subrutin seperti yang Anda miliki sekarang karena{ code }
sebenarnya bukan loop (sehingga&&redo
tidak akan berfungsi), tetapi-p
menempatkannya di dalamwhile
loop.' '
dengan$"
. Lihatlah ini untuk melihat seperti apa kode itu.Prolog (SWI) , 151 byte
Butuh waktu lama untuk menjalankan kasus palsu yang lebih panjang karena mundur.
Cobalah online!
Tidak disatukan
sumber
MATL , 20 byte
Cobalah online! Atau verifikasi semua kasus uji (butuh beberapa saat).
Penjelasan
sumber
Mathematica, 65 byte
sumber
JavaScript (Node.js) , 47 byte
Cobalah online!
sumber
Python 3 , 71 byte
Cobalah online!
sumber