Ini adalah utas polisi. The benang perampok di sini .
Tulis kode yang mengambil input n
dan buatlah "matriks ular" n-by-n.
Matriks ular adalah matriks yang mengikuti pola ini:
3-oleh-3:
1 2 3
6 5 4
7 8 9
dan 4-oleh-4:
1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13
Format output yang tepat adalah opsional. Anda dapat misalnya output [[1 2 3],[6 5 4],[7 8 9]]
, atau yang serupa.
Anda harus memberikan nama bahasa, dan regex yang sepenuhnya cocok dengan kode Anda. Anda dapat memilih seberapa rinci regex Anda seharusnya. Secara ekstrem, Anda dapat menulis regex yang cocok dengan setiap string yang mungkin, dalam hal ini akan sangat mudah untuk memecahkan kode Anda. Anda juga harus memberikan output untuk n=4
, sehingga perampok tahu format yang Anda pilih.
Anda dapat menggunakan salah satu dari rasa regex yang tersedia di regex101.com , atau rasa Ruby.
- PCRE (PHP)
- Javascript
- Python
- Golang
- Rubi
Anda harus menentukan yang mana yang Anda gunakan.
Catatan:
- Anda harus mendukung yang cukup besar
n
. Anda mungkin menganggap itu tidak akan meluap datatype atau memori. Jika tipe data default adalah bilangan bulat bertanda 8-bit, maka Anda dapat mengasumsikann<=11
, jika bilangan bulat 8-bit tidak bertanda, maka Anda dapat berasumsin<=15
. - Perampok harus mencocokkan format output kiriman, kecuali spasi awal / akhir dan baris baru, karena itu mungkin telah dilucuti oleh format SE.
Kriteria kemenangan:
Pemenangnya adalah pengajuan tanpa retak dengan regex terpendek, diukur dalam jumlah karakter.
Jika pos Anda tetap tidak retak selama 7 hari, maka Anda dapat memposting solusi yang dimaksud dan menandai kiriman Anda sebagai aman.
sumber
.
,.Jawaban:
05AB1E , Retak oleh mbomb007
Semoga menyenangkan retak dan tidak terlalu jelas.
Regex (PCRE):
Output n = 4:
Solusi asli
sumber
\w
no. Anda dapat mencoba sendiri di regex101.{0,2}
ke.?.?
-
posisi terakhir dari kelas char bracketed ([+*\/%-]
) sehingga Anda tidak perlu menghindarinya.Python 2 , panjang 62, retak
Regex (PCRE)
Output sampel
sumber
Jelly , panjang 6, retak
Regex (PCRE)
Output sampel
sumber
G
memformat output dengan benar. Saya hampir menyelesaikan sisanya, tapi saya tidak tahu bagaimana cara membalikkan setiap item lain dalam sebuah array dengan Jelly ...R, panjang 14 Cracked oleh plannapus
Saya harap saya mendapatkan regex ini dengan benar. Apa yang saya katakan adalah 77 karakter tidak termasuk
<space>
,#
,;
dan[
. Saya mengujinya di siniRegex
Output sampel n = 4
sumber
05AB1E , Retak dengan Value Ink
Mari kita menendang itu takik :)
Semoga puzzle yang bagus.
Regex (PCRE)
Output n = 4
sumber
> <> , panjang 49, Retak oleh Harun
Regex (Javascript)
Output sampel (n = 4)
Memformat agak aneh, tetapi memeriksa panjang angka akan membuatnya lebih lama. Mungkin sedikit berlebihan di regex, tidak yakin!
Sunting: Juga saya lupa menyebutkan, saya menggunakan tumpukan awal (-v flag) untuk input, bukan input ikan biasa. Maaf!
Kode Asli:
Harun jauh lebih sederhana! Kompleksitas kode asli saya didasarkan pada ide menggunakan
n[r]
setiap angka ke-n untuk membalik segmen itu (baris), lalu mencetak semua angka sekaligus di akhirsumber
..
lebih pendek dari.{2}
;)Ohm , sudah retak
Juga tantangan pertama Polisi dan Perampok saya, jadi beri tahu saya jika ada masalah dengan pola ini (terutama karena ini adalah bahasa yang tidak dikenal).
Regex (PCRE)
Output (n = 4)
sumber
.*
di regex Anda, bisa jadi apa saja. Jadi jika bahasa tersebut memiliki komentar, mereka dapat menulis program apa saja diikuti dengan komentar.PHP, 221 Bytes ( Retak )
Saya harap ini cukup sulit.
Regex (PCRE): 16 Bytes
Tanpa ruang, Tidak ada komentar, tidak ada penggunaan base64_decode. Selamat bersenang-senang.
Keluaran
Kode Asli
sumber
base64_decode
karena regex Anda tidak melarangnya.6
, yang mungkin memblokirbase64_decode
.C # net46 (Retak)
( http://ideone.com/ works)
Panjang rasa PCRE Regex 58 diuji di regex101
Hanya metodenya yang diregexed. Metode mengembalikan array 2d int [,] (int [4,4]) untuk input n = 4. Jika dicetak terlihat seperti ini:
Ini adalah entri pertama saya ke hal seperti ini, beri tahu saya jika saya melakukan kesalahan. Tidak mencoba untuk menang dengan panjang regex pasti, saya hanya tertarik untuk melihat seberapa baik yang saya lakukan untuk mencegah retak :)
Kode asli:
sumber
QBasic, regex length 10 ( retak )
Regex
Seharusnya bekerja dengan rasa regex apa pun, tapi kami akan menyebutnya rasa Python.
CATATAN: Solusi saya menggunakan QBasic yang belum diformat; setelah memformat, kode tidak cocok dengan regex karena spasi yang ditambahkan. (Tapi saya dapat memberi tahu Anda bahwa hanya perubahan yang membuat perbedaan.
([A-Z]+ ?. ?)+
Masih berfungsi pada versi yang diformat.)Untuk tujuan pengujian, saya menggunakan QB64 dengan pemformatan kode dimatikan (di bawah Pilihan> Tata letak kode). Jika Anda tidak ingin mengunduh sesuatu, Anda juga dapat menjalankan QBasic online di archive.org (tetapi di sana Anda tidak dapat mematikan pemformatan).
Output sampel
sumber
\w+\W
dapat dibagi menjadi\w*
dan\w\W
. (\w*
Adalah baiknull
(sepele) atau\w+
(mudah menyelinap dengan simbol)).
tidak bisa menjadi karakter kata. Itu bisa berupa huruf kecil, atau digit. Bahkan, itu bisa menjadi huruf kapital, dalam hal karakter terakhir dari program adalah satu.Python 3, 55 byte (Retak)
Rasa PCRE / Python / Golang.
(Diingatkan bahwa kecocokan penuh diperlukan . Asumsikan
^
dan$
saat pengujian.)Output sampel:
Solusi asli:
Seharusnya dipangkas 4 byte: p
sumber
)
bagian kedua dari regex(
ada di dalam kelas karakter yang dimulai setelahprint
dan berakhir sebelumnya{48}
. Butuh waktu beberapa saat untuk melihatnya juga. ;) (Dalam hal ini, pasangan kurung sebelumnya juga berada di dalam kelas karakter.)dc , panjang Regex 12 Cracked oleh seshoumara!
Ekspresi reguler ini cukup sederhana sehingga saya tidak berpikir tentang rasa dari hal-hal regex - itu harus bekerja secara menyeluruh. (Catat spasi setelah # di regex.)
Saya sudah menguji keempat rasa di regex101.com (PCRE / PHP, Javascript, Python, dan Golang), serta versi Ruby di rubular.com. Program dc cocok dengan regex di semua lima versi regex.
Program dc mengambil inputnya pada stdin dan menempatkan outputnya pada stdout.
Output sampel untuk input 4 (ada spasi tambahan di akhir setiap baris):
Kode asli (ditambahkan setelah di-crack)
Ini telah dipecahkan oleh @seshoumara . Ini kode yang saya maksudkan:
Penjelasan:
Jumlah di bagian atas tumpukan sekarang adalah nomor berikutnya yang ingin kita cetak:
Sangat mudah untuk melihat bahwa itu benar jika nomor barisnya genap, karena jumlahnya hanya i.
Untuk baris bernomor ganjil, perhatikan bahwa i = d * (i / d) + (i% d) = d * (nomor baris) + nomor kolom. Maka jumlah i + d-2 * (nomor kolom) -1 adalah d * (nomor baris) + nomor kolom + d - 2 * (nomor kolom) - 1 = d * (nomor baris + 1) - nomor kolom - 1, yang merupakan angka yang ingin kita masukkan pada baris dan kolom yang ditunjukkan untuk memastikan bahwa kita menghitung mundur dalam baris bernomor ganjil.
Kembali ke penjelasan sekarang:
sumber
#
dan `dihilangkan sehingga solusi yang lebih pendek tidak dapat menggunakan komentar untuk mencapai 59 byte? Jika demikian, tidak perlu karena di dc ada begitu banyak cara untuk menambahkan perintah yang tidak mengubah apa pun, misalnya. mengulangiq
perintah di akhir skrip.32P
lebih pendek daripada[ ]n
itu.Bash, panjang regex 38, retak ( @kennytm )
Memasukkan:
Keluaran:
sumber
PHP
Saya harap ini akan menyenangkan! : D
Output (n = 4)
Level 1: PCRE (panjang = 17) ( Retak oleh Jörg Hülsermann )
{
jadi ... tidak ada fungsi anonim!v
begitu ... tidakeval()
!;
begitu ... itu pasti satu pernyataan!<
jadi ... tidakHeredoc
atau beberapa blok PHP!@ JörgHülsermann punya pendekatan yang menarik, tapi bukan itu yang ada dalam pikiran saya :). Oleh karena itu, saya memperkenalkan tingkat kesulitan baru (saya berjanji saya memiliki kode yang sesuai dengan ini dan saya tidak hanya mengacaukan Anda):
Level 2: PCRE (panjang = 23) ( Cracked oleh Jörg Hülsermann )
_~|&A-Z
! :)Selamat bersenang-senang!
SOLUSI ASLI
Jadi, melarang itu
$
berarti variabel tidak dapat diakses dengan cara biasa, tetapi itu tidak berarti mereka tidak dapat digunakan sama sekali! Anda masih dapat menggunakanextract()/compact()
untuk mengimpor / mengekspor variabel ke dalam cakupan saat ini. :)Namun, ada gotcha:
compact('x')['x']++
tidak akan berfungsi karena variabel dalam PHP diteruskan oleh nilai ... dengan satu pengecualian! Benda.Sisanya mudah.
0
dan1
mudah dihasilkan dengan mengkonversifalse
dantrue
untukint
dengan mengawali mereka dengan+
tandaand
danor
sejak&
dan|
dilarang@
v
dapat dihasilkan dengan menggunakanchr(ord('u') + 1)
, yang berarti@chr(ord(u) + true)
menggunakan solusi di ataschr(ord('a') - 2)
yang diterjemahkan menjadichr(ord(a) - true - true)
callable
, yang bisa berupa string yang berisi nama fungsi. Jadi, Anda dapat menggabungkan konstanta yang tidak terdefinisi dan string karakter tunggal yang dihasilkan olehord()
untuk membangun nama fungsi dan memanggilnya seperti ini:array_reverse()
menjadi(a.rray.chr(ord(a)-true-true).re.chr(ord(u)+true).erse)()
(array
adalah konstruksi bahasa, itu sebabnya ia dibagi menjadi konstanta yang tidak terdefinisia
danrray
)if ($n = $argv[1] and $i = 0) while ($n > $i++ and do_some and other_stuff or exit)
Logika dalam kode yang dapat dibaca manusia adalah:
Dan versi tidak ramah yang cocok dengan regex:
<?php if (@extract([x=>(object)[s=>[],i=>+false]])and@define(n,compact(arg.chr(ord(u)+true))[arg.chr(ord(u)+true)][+true]?:+true)and@define(un,chr(ord(a)-true-true))and@define(s,(a.rray.un.chunk)(range(+true,pow(n,true+true)),n)))while((@compact(x)[x]->s[]=s[@compact(x)[x]->i++])and(@compact(x)[x]->s[]=(a.rray.un.re.chr(ord(u)+true).erse)(s[@compact(x)[x]->i++]))and(n>@compact(x)[x]->i)or(@die((json.un.encode)((a.rray.un.filter)(@compact(x)[x]->s)))))?>
sumber
V
. Selamat bersenang-senang! :)(array_re.chr(ord(u)+true).erse)()
! :) (... atau setidaknya Anda bisa ketika_
diizinkan)Ruby [retak]
Tantangan Polisi dan Perampok Pertama. Semoga saya tidak membuat ini terlalu mudah.
EDIT: diganti
\g<1>
dengan(?1)
karena mereka jelas setara di PCRE.Regex (PCRE)
Output (n = 4)
(Mengembalikan array array. Ini lambda, BTW, tapi mungkin itu memberi terlalu banyak?)
sumber
JavaScript (Retak)
Pertama kali melakukan tantangan Polisi dan Perampok, semoga melakukannya dengan benar.
Regex (JavaScript)
Keluaran
Array sama dengan:
sumber
$
di akhir regex jika kode itu sendiri berakhir di akhir regex. Kalau tidak, saya bisa melakukan egx=>x.toString().toString().toString().toString()
dan kemudian apa pun yang saya inginkan setelah itu..*
pada awalnya akan membuatnya sangat mudah. Itu bisa berupa program apa saja yang diikuti oleh komentar. Pada dasarnya, jangan termasuk.*
dalam regex Anda.Swift, regex 25 (Cracked)
Benar, mari kita lihat apakah saya sudah memahami ini. Ini adalah pos polisi dan perampok pertamaku, jadi aku tahu kalau aku sudah kacau!
Regex
Saya menggunakan rasa javascript di regex101.com
Output Sampel
Kode Asli
sumber
n
sebagai input, tetapi memerlukan variabel kode keras . Jika itu benar maka saya khawatir ini tidak valid sesuai dengan konsensus meta.C - regex yang terdiri dari 42 karakter panjang - retak
Javascript regex seperti yang digunakan pada regex101 .
Menebak ini akan sepele ...
Output dipisahkan oleh tab
\n
setelah setiap baris.Solusi saya, di sini bilangan bulat 0-2 diperoleh melalui
t-t
,t/t
, dant
:sumber
r
di regex Anda.Jelly , panjangnya 14 retak
retak oleh Dennis
Python regex.
Menambahkan
m
kembali lagi setelah saya biarkan tergelincir./
(kurangi cepat);dari
P
(produk) ke`
(monad dari angka dua cepat);m
(pengindeksan modulo);v
(Eval dyad);dari
Ḋ
(dequeue) keṫ
(tail); dan€
(untuk setiap quick)Untuk input
4
output tambang:... karena saya memformat daftar daftar dengan kisi
G
.sumber
Powershell, 23 Bytes
Retak Oleh Matt
Solusi Asli:
Membawa input sebagai argumen dan output ke stdout
Semoga regex ini OK, saya tidak berharap ini terlalu sulit untuk retak, karena saya belum mengaburkan banyak hal, dan regex memberikan beberapa titik awal yang baik untuk mengisi kekosongan, ada satu hal di segmen pertama yang sangat jarang dalam kode golf, yang mungkin menangkap seseorang, saya pikir pertandingan non-serakah diperlukan di sana untuk membuat ini sedikit lebih keras.
Toh, tantangan pertama polisi.
sumber
[Array]::Reverse()
alih-alih$array[9..0]
dan$script:r
variabel yang sebagian besar tidak perlu.Röda 0,12 , panjang 19 (Retak oleh @KritixiLithos)
PCRE:
Output sampel (n = 4):
Kode asli:
Cobalah online!
sumber
PHP 7 (Aman)
Kode Asli
Coba Kedua
Regex (PCRE): 29 Bytes
Tanpa ruang, Tidak ada komentar, tidak ada penggunaan base64_decode.
Banyak fungsi tidak diizinkan! menggarisbawahi
Output n = 11
Output n = 4
Output n = 3
sumber
MATL , panjang 12 (aman)
Regex
Gunakan rasa Python:
Contoh output
Untuk
n=4
:Larutan
Untuk melihat bagaimana ini bekerja, pertimbangkan input
n=4
.sumber
Jelly , panjangnya 17 (aman)
Python regex.
Mengencangkan simpul, ini melarang beberapa hal yang lebih berguna, untuk bantuan Anda di sini adalah byte yang dilarang:
hanya di bawah sepertiga dari mereka!
Untuk input
4
output tambang:... karena saya memformat daftar daftar dengan kisi
G
.Sebuah solusi:
Cobalah online! / regex101
Trik utama di sini adalah untuk mengindeks ke dalam daftar diurutkan secara leksikografis permutasi bilangan alami hingga n 2 (gunakan
œ?
untuk menghindari membangun daftar panjang n 2 ! ), Dan untuk membagi hasilnya menjadi potongan panjang n . Indeks tersebut ditemukan dengan membentuk perwakilannya dalam sistem bilangan faktorial yang merupakan formula sejak ular "tidak berliku-liku" dibuat dengan meng-permutasi elemen-elemen dengan cara yang ditentukan (ini dapat dengan mudah diubah menjadi angka denganơ
).Solusi yang saya sajikan menggunakan
Ŀ
referensi tautan sebelumnya sebagai monads (menggantikanÑ
danÇ
), tetapi beberapa$
baris dapat digunakan sebagai gantinya untuk "menyejajarkan" fungsi-fungsi pembantu ini. Itu juga menggunakanr
sejakḶ
danR
dilarang.sumber
Pip , panjang regex 3 (aman)
Solusinya adalah program lengkap yang menggunakan n sebagai argumen baris perintah. Itu tidak menggunakan flag baris perintah.
Regex (rasa apa saja)
Output sampel
Solusi saya
Cobalah online!
Strategi
Berikut kode kita akan ingin untuk menulis:
Itu adalah:
a
dalamy
i
mulai dari 0 hinggaa-1
i
ganjil, balikkan y, tambahkani*a
ke setiap elemen, gabungkan spasi untuk setiap elemen, dan cetakKesulitan
Banyak perintah dan variabel di Pip menggunakan huruf, tetapi beberapa yang penting tidak:
,
dan\,
)+
,-
,*
,%
,++
):
){}
)Bagaimana kita mengatasi batasan-batasan itu:
EN
umerate dapat digunakan di tempat,
; kita hanya perlu string dengan jumlah karakter yang kita inginkan, dan kita perlu mengekstraksi elemen pertama dari setiap sublist dalam struktur seperti[[0 "H"] [1 "i"]]
.F
atau loop.y
variabel denganY
operator ank.X
adalah perkalian string, danPU
sh (atauPB
"push-back") akan menggabungkan string ke string lain di tempat. Untuk mengambil panjang string, kita dapatEN
mem - umerasinya dan mengekstraksi angka yang tepat dari daftar yang dihasilkan._
.Spesifik
Blok bangunan program kami:
Jarak
Itu
map-unpack(_, enumerate(repeat(space, a)))
dalam kodesemu. Map-unpack seperti Pythonitertools.starmap
: diberi daftar daftar, itu memanggil fungsi pada item masing-masing sublist._
mengembalikan argumen pertamanya, jadi_MU
dapatkan item pertama dari setiap sublist. Misalnya, jika a = 3:... yang sama dengan
,a
.Kisaran inklusif
Saya tidak yakin ada cara untuk melakukannya
inclusive-range(1, a)
dalam satu ekspresi, tapi untungnya kita hanya membutuhkannya sekali, jadi kita bisa membuatnya dalamy
variabel dalam tiga langkah.Dalam pseudocode,
yank(enumerate(repeat(space, a).push-back(space)))
:Selanjutnya
POy
muncul item pertama dariy
dan buang, pergi[[1 " "] [2 " "] [3 " "]]
.Akhirnya,
Yaitu
yank(map-unpack(_, y))
,: ekstrak elemen pertama dari setiap sublist dan tarik kembali daftar yang dihasilkany
.y
sekarang[1 2 3]
.Panjangnya
Dalam pseudocode
pop(dequeue(enumerate(a.push-back(space))))
,. Kesulitan di sini adalah bahwa pencacahan hanya memberi kita jumlah hinggalen(a)-1
, tetapi kita inginkanlen(a)
. Jadi pertama-tama kita mendorong spasi kea
, memanjangnya dengan satu karakter, dan kemudian mengambillen-1
string baru.Matematika
Sekarang kita memiliki cara untuk mengambil panjang string, kita dapat menggunakan string untuk melakukan perkalian dan penambahan angka:
Yang pertama adalah
sXaXb
membuat stringa*b
spasi dan kemudian memanjangnya; yang kedua tidaksXaPBsXb
untuk mendorong stringb
spasi ke stringa
spasi dan kemudian mengambil panjangnya.Bagian yang menyenangkan adalah bahwa (semua operator kami gunakan di sini
PU
,PO
,PB
,DQ
,EN
,X
) dapat digunakan dengan_
ekspresi bentuk lambda. Jadi kita bisa memetakan transformasi matematis ke rentang inklusif yang kita buat sebelumnya.Kami juga perlu memeriksa
i%2
di dalam loop, tetapi ini mudah dicapai dengan bitwise DAN:iBA1
.Satukan mereka
Kode lengkap, dengan beberapa spasi tambahan:
sumber
-S
?a*b
adalah_V_VRVENCGaRLbPU1
,,a
adalah_MUENZGa
,aJ" "
adalahaJ_VRVk
, dana@i
adalah sesuatu seperti_V_VRVaZCGi
, meskipun saya tidak bisa cukup berhasil didahulukan tanpa kurung belum. Juga, ide samar bahwa saya bisa mendapatkan permutasi dari suatu rentang (dibuat seperti di atas, menggunakan yang setara dengan,(a*a)
) dan menggunakannya untuk memilih permutasi yang benar untuk setiap baris.CJam, PCRE, panjang 8, retak
Contoh output untuk 4:
sumber
CJam, PCRE, panjang 9, retak
Contoh output untuk 4:
Sekarang
{|}
juga dilarang.sumber
me
danmq
untuk memperkirakan angka, jadi itu seperti, sangat (~ 20k byte) panjang.Mathematica, regex panjang 11, tidak bersaing , retak
Rasa PCRE:
Solusi yang benar adalah fungsi yang mengambil integer dan mengembalikan output sebagai daftar bersarang seperti:
sumber
tinylisp , panjang regex 3 ( retak )
Anda dapat menguji kode tinylisp di Coba online!
Regex (rasa apa saja)
Saatnya menjadi hardcore.
Keluaran
Solusinya mendefinisikan fungsi yang mengambil argumen integer tunggal dan mengembalikan daftar seperti ini (untuk n = 4):
Kode asli saya menggunakan ide dasar yang sama dengan Brian McCutchon, membuat daftar dan mengevaluasi mereka. Ini dia dalam satu baris:
Saya menggunakan metode konstruk-dan-eval penuh sekali, untuk mendefinisikan makro
d'
yang membuat definisi sepertid
, tetapi mengambil argumen yang terbungkus dalam daftar: jadi alih-alih(d x 42)
, Anda bisa melakukannya(d'(x 42))
. Maka itu hanya masalah menulis ulang daftar dalam definisi yang mungkin memerlukan spasi putih:(q(a b))
->(c a(q(b)))
->(c(h(q(a)))(q(b)))
.sumber
Python3, panjang 162 (Retak!)
Regex:
^([^"' #]){24}"(?1){11}i%n(?1){4}2\*n-(?1){4}i%n(?1){10}i\/n(\)\/\/1)(?1){5}(?2)(?1){3}2\*\(i%n\)(?1){4}[int()2\/]{16}for i in range\(j,(?1){4}\]\)(?1){6}\"\*n\)$
Oke, saya tahu, ini cukup panjang. Untungnya, itu tidak akan retak dalam waktu kurang dari seminggu ...: 'D.
Saya pikir saya tidak membuat kesalahan di mana pun, itu akan memungkinkan jawaban loophole-y.
Format output
Kode asli:
n=int(input());j=0;exec("print([int(i%n+1+(2*n-(2*(i%n)+1))*((((i/n)//1+1)/2)//1)+(2*(i%n)+1)*int(int(i/n)/2))for i in range(j,j+n)]);j+=n;"*n)
sumber