Ini adalah utas perampok. The benang polisi di sini .
Matriks ular adalah matriks persegi 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
Tugas Anda adalah menulis kode yang mengambil input n
dan membuat matriks seperti itu, dalam bahasa yang sama dengan pos polisi, dan dengan kode yang cocok dengan regex polisi. Format output dari kode Anda harus sesuai dengan format output dari kode polisi.
Silakan tinggalkan komentar di bawah pos Cop untuk menunjukkan bahwa Anda telah memecahkannya.
Kriteria kemenangan:
Pemenang akan menjadi pengguna yang telah memecahkan sebagian besar kiriman. Dalam hal seri, maka akan ada beberapa pemenang.
sumber
¦
kerjanya membunuh saya setiap kali, saya mencoba ini kemarin tetapi denganṚ
dan bukannyaU
memutuskanḤ
itu tidak berhasil.F
adalah ide yang bagus,J
bukanF
.J
... Saya sudah mencoba denganLR
tetapi tidak bisa mendapatkannya di bawah 11 byte05AB1E, Emigna
Ini adalah pertama kalinya saya menggunakan 05AB1E. Dapatkan dengan sedikit bantuan. Itu tadi menyenangkan. :)
Cobalah online
Penjelasan:
Saya sebenarnya menemukan program serupa ini sendiri, tetapi format outputnya berbeda:
Cobalah online
Lihat riwayat edit untuk dua upaya saya sebelumnya.
sumber
not bool(reversed(str(bin(N))).index('1'))
... Saya pikir itu cara paling masuk akal yang pernah saya lihat ada yang melakukanN%2
operasi.Python 2, Dennis
Ini adalah masalah token golf yang menyenangkan.
Verifikasi verifikasi
sumber
Ohm, Nick Clifford
Pertama kali saya mencoba Ohm.
Bahasa yang sangat bagus yang saya nantikan untuk digunakan lagi :)
Penjelasan
Upaya pertama saya yang tidak berfungsi sebagai menambahkan array dan int tidak mungkin:
Upaya kedua saya yang tidak cocok dengan regex:
sumber
05AB1E, Emigna (pengiriman kedua)
Pertama kali bekerja dengan 05AB1E.
Cobalah online! | Verifikasi verifikasi
Penjelasan
sumber
)
berpikir itu akan menjadi satu-satunya cara untuk mendapatkan hasil yang benar di tumpukan.)
ketika Anda hanya dapat menggunakan 2 karakter non-alfanumerik. Bagian yang sulit di sini dimaksudkan untuk menyusun program hanya menggunakan 2 wildcard dan mengurutkannya. Mungkin akan sedikit lebih sulit tanpa solusi lain tetapi harus ada beberapa yang membingungkan :)^\w*..$
memungkinkan.UV
harus diikuti+ˆ
. Saya tidak bisa memikirkan cara lain untuk melakukannya dengan hanya 2 wildcard pada akhirnya juga. Ini bisa dilakukan dengan 3 wildcard.CJam , Lynn
Semua umpan garis untuk keperluan kosmetik dan dapat dihapus tanpa mempengaruhi program.
Cobalah online!
Penjelasan
Setelah Lynn dihapus
{|}
dari daftar karakter yang diizinkan, saya harus mencoba sesuatu yang baru. Ternyata kita masih bisa membuat string arbitrer dan mengevaluasinya sebagai kode.Pertama, kita perlu mendapatkan beberapa nilai ke stack. Satu-satunya built-in yang mendorong sesuatu tanpa muncul sesuatu yang lain terlebih dahulu (dan tanpa membaca input) adalah
es
,ea
danet
. Saya yakin Anda bisa mulai dari semua ini dengan satu atau lain cara, tapi saya pergi denganes
yang mendorong cap waktu saat ini. Karena saya tidak ingin membuat asumsi tentang nilai aktualnya, saya menguji keutamaannya denganmp
(yang memberi0
dan1
) dan menguji keutamaan nilai itu lagi untuk memastikan saya mendapatkan nilai0
di tumpukan. Sebuah1
akan lebih berguna, jadi kita menghitungexp(0)
denganme
dan mengubahnya menjadi integer dengani
. Jadi semua angka dimulai dengan:Sekarang kita punya banyak operator matematika unary untuk bekerja dengan:
Kami juga dapat menggabungkan beberapa built-in untuk fungsi yang lebih rumit dari
x
:Dengan menggunakan ini, kami dapat memperoleh nomor dalam
0 <= x < 128
(dan banyak lainnya) dalam waktu kurang dari 10 langkah dari1
. Saya yakin subset yang jauh lebih kecil dari perintah ini juga cukup. Saya telah menulis sebuah program Mathematica kecil, untuk menentukan semua cuplikan ini (tidak mudah dibaca, maaf):Dengan itu, kita cukup mendorong daftar kode karakter yang sewenang-wenang, mengonversinya masing-masing menjadi karakter dengan
c
sesudahnya. Setelah kami mendorong seluruh kode yang ingin kami jalankan, kami mendorong95
(]
). Kami mengevaluasinya dengan~
membungkus semua yang lain dalam sebuah string, dan kemudian kami mengevaluasinya~
.Sekali lagi kode aktual yang dijalankan di akhir program:
Lihat solusi saya sebelumnya untuk penjelasan.
sumber
Python 3, TuukkaX
Maaf, regex yang Anda gunakan terlalu mudah untuk diremehkan. Tidak
0
,#
atau? Tidak masalah!
Saya mungkin telah salah mengartikan output contoh tetapi masih cukup mudah untuk mengubah karena saya memiliki 45 karakter cadangan yang tersisa
sumber
R, MickyT
Tes kasus:
Dan konfirmasi regex: https://regex101.com/r/OB8ZIM/1
Saya juga punya:
yang memberikan output yang sama dan cocok dengan regex yang sama .
sumber
lets_make_a_snake
... Saya akan terkejut jika itu adalah solusi yang dimaksudkan: Pfor
` dan `if
`, tetapi jauh lebih baik bermain golf daripada milik saya.Röda , fergusq
Ini adalah fungsi anonim yang cocok PCRE regex ini:
^{(\|[^\/#\s]*){8}$
.Cobalah online!
sumber
Bash, @Marcos M
Prettified:
Bagian pertama dari subcommand akan menghasilkan
1 2 3 4
,9 10 11 12
dan bagian kedua akan menghasilkan8 7 6 5
,16 15 14 13
. Bagian luarsort -n
akan mencampur mereka dengan benar untuk membentuk pola ular.Saya menggunakan trik di /superuser//a/101760 untuk mencetak garis ganjil dan genap. Terima kasih Marcos, benar-benar menyenangkan.
sumber
Javascript, Tom
sumber
Python 3, @TuukkaX
Menganalisis sedikit regex polisi menunjukkan templat tetap:
di mana
_
ada karakter kecuali[ '"#]
dan^
adalah dari[int()2/]
.Di
"*n)
bagian akhir jelas menunjukkaneval("..."*n)
atauexec("..."*n)
sedang terjadi, jadi kita hanya perlu memastikan"..."
cetakan baris ke-j.The
for i in range(j,
terlalu dekat dengan akhir string, mengisyaratkan daftar pemahaman tanpaif
. Jadi kita perlu membuat kolom ke-i menggunakan itui%n
,2*n
barang.sumber
dc , Mitchell Spector
Ini adalah entri pertama saya ke tantangan polisi dan perampok, dan saya bersenang-senang. Regex yang perlu dicocokkan adalah sederhana,,
^[^# !]{59}$
yang pada dasarnya mengubah pekerjaan saya menjadi golf, tanpa menggunakan 3 karakter itu. Awalnya saya mengalami kesulitan mendapatkan di bawah 60 byte, tetapi pada akhirnya saya memecahkannya.Cobalah online!
Penjelasan:
Kode saya menggunakan satu loop dengan iterasi N 2 , menjaga penghitung berbasis nol (1D), dan menghitung angka apa yang perlu dicetak berdasarkan pada baris matriks dan koordinat kolom (r, c) yang sesuai.
Contoh apa yang saya maksud, jika N = 4:
Ini terlihat rumit, tetapi langkah perantara sangat membantu. Plus, saya sudah mencoba menggunakan 2 loop dari awal, tetapi saya berakhir di atas batas karakter regex. Pembuatan angka pada setiap iterasi (berbasis nol):
r % 2 = 0
(baris normal),n = (r * N) + c = counter
r % 2 = 1
(baris terbalik),n = ((r + 1) * N) - c - 1 = counter + N - (2 * c) - 1
Atau sekaligus, sebagai penomoran berdasarkan satu:
n = counter + ((N - (2 * c) - 1) * (r % 2)); n++
sumber
~
untuk menghitung indeks baris dan kolom sekaligus. Tetapi salah satu upaya saya sebelumnya menghitungnya secara terpisah seperti yang Anda lakukan. Pemikir hebat berfikir yang sama? :)~
untuk mempersingkat kode.?sN0[AP]sP[ddlN~_2*lN+1-r2%*+1+n32P1+dlN%0=PdvlN>L]dsLx
tio.run/nexus/…PowerShell, ConnorLSW
Retak
Saya mulai dengan solusi yang lebih kecil untuk masalah ini dan mengisi nama variabel saya untuk mendapatkan regex yang cocok. Mencoba menemukan kegunaan untuk usus besar saya kira adalah bagian yang paling sulit untuk membungkus kepala saya.
Penjelasan
sumber
$script
variabel dan beberapa looping benar-benar berantakan untuk pad keluar,[array]::Reverse()
itu benar, selamat - saya pikir Anda mungkin ingin meratakan panjang$i
dan$MySnakeIndex
meskipun.CJam, Lynn
Sesuatu seperti ini:
Semua spasi putih adalah untuk ... "keterbacaan" ... dan dapat dihilangkan untuk mematuhi regex Lynn.
Cobalah online!
Penjelasan
Regex mengharuskan kami menyelesaikan masalah hanya dengan menggunakan:
{}
, yang dapat digunakan untuk membuat blok.|
, kebanyakan digunakan untuk bitwise OR.~
, "eval" dan bitwise NOT (juga "dump array", tapi saya tidak akan menggunakannya).Karena kita memiliki,,
~
jika kita dapat membuat string arbitrer, kita dapat menjalankan kode arbitrer. Namun, pada awalnya tidak jelas bagaimana melakukan itu.Bagian pertama dari teka-teki adalah bahwa blok adalah potongan kode yang tidak dievaluasi, yang dapat berubah menjadi string
s
. Jadi{abc}s
beri kami"{abc}"
. Selanjutnya, kita dapat menggunakaneu
untuk mengubah string ini menjadi huruf besar.Keuntungan dari ini adalah bahwa huruf besar adalah variabel yang diinisialisasi, sehingga kita bisa mendapatkan banyak nilai konstan dengan membuat string seperti itu, dan mengevaluasi dua kali (satu kali untuk mengubah string kembali menjadi blok dan satu kali untuk jalankan blok itu). Kami tidak bisa mendapatkan semua surat, karena beberapa, seperti
x
bukan perintah yang valid (jadi CJam akan menolak untuk menguraikan blok yang berisi mereka). Kita tidak bisa menggunakanf
apa adanya, karena itu harus diikuti oleh perintah lain, tetapi kita bisa menggunakanfb
dan kemudian ATAU kedua nilai bersama. Demikian juga, kita dapat menggunakanee
bukane
. Dengan itu, kita bisa mendapatkan nomor0
,-1
,3
, dan10
untuk19
. The-1
nyaman, karena jika kita mengubahnya menjadi string ("-1"
) maka menjadi karakter ('-
) dan kemudian evaluasi, kita bisa mendapatkan pengurangan atau mengatur perbedaan. Seperti yang saya katakan, kita tidak bisa mendapatkanX
(untuk1
), tetapi kita bisa mengambil nilai absolut dari-1
withz
.Kita juga bisa menggunakan
s
untuk mendapatkan string yang berisi spasi, dan gunakanc
untuk mengubahnya menjadi karakter spasi :Ini nyaman, karena dari sana kita bisa mendapatkan banyak perintah yang berguna di kisaran ASCII lebih rendah dengan ORing spasi dengan berbagai angka. Untuk mendapatkan beberapa karakter di atas titik kode
48
, kami menggunakan karakter'0
sebagai dasarnya:Ini sudah cukup untuk membuat string arbitrer, karena kita bisa mendapatkan
'+
(penambahan dan penggabungan string) dari cuplikan berikut:Dan kami memiliki literal
1
sehingga kita bisa mendorong karakter spasi, menambahnya ke nilai yang kita butuhkan dan kemudian menggabungkan semuanya, tapi itu sedikit membosankan dan kodenya akan menjadi besar.Alih-alih, saya telah membuat
[
dan]
mengujinya, sehingga semua karakter yang saya tekan di antaranya dibungkus dalam sebuah string secara otomatis. Itulah dua baris ini:Dan akhirnya, kita akan membutuhkan
f
dan~
dalam string yang kita hasilkan. Walaupun sudah menjadi karakter yang valid, kami tidak memiliki string literal atau literal karakter, jadi kami harus membuatnya juga dan membangun poin kode yang lebih besar dari ruang agak menjengkelkan. Alih-alih, saya telah menggunakan pengurangan set di sini, tetapi mengurangi dua blok (untuk menghilangkan{}
):Cukup banyak yang ada untuk itu. Kami eval
[
. Kami mendorong semua karakter, yang diperoleh dengan berbagai perhitungan dari beberapa konstanta bawaan yang kami miliki|
,,-
(melalui eval) dan+
(melalui eval). Kami eval]
. Kami meratakan semuanya menjadi string, karena pada titik tertentu saya menambahkan beberapa string atau angka ke dalam daftar. Kami mengevaluasi string sewenang-wenang kami dengan~
.Itu
ri...p
adalah bagian dari program final yang sebenarnya, tetapi saya telah mengekstraknya karena mereka tidak perlu penyandian.Akhirnya, ini adalah program yang sebenarnya kami jalankan:
sumber
tinylisp , @Dosc
Cobalah online!
Ini mendefinisikan fungsi
f
yang mengembalikan jawaban. Itu juga mencetak nama-nama fungsi yang saya definisikan untuk stdout, tapi saya menganggap itu tidak masalah, karena [kita diperbolehkan memilih aliran output kami] untuk kode golf, setidaknya. Jika ini masalah besar, saya pikir saya bisa mengubahnya untuk tidak mencetaknya. Bagaimana saya melakukannya? Saya mulai dengan sesuatu yang cukup standar:Kemudian, saya mengamati bahwa seseorang dapat mengubah definisi fungsi seperti ini:
menjadi
Dan panggilan fungsi seperti ini:
menjadi
Saya menggunakan makro Vim rekursif ini, disimpan dalam register
q
, untuk melakukan yang kedua (saya telahjk
memetakan ke<Esc>
):f s(v(h(q(jkea))))jk@q
.Kedua transformasi ini cukup untuk menghilangkan semua ruang.
sumber
Swift, @ames Webster
Verifikasi: https://regex101.com/r/7ukrM0/1
sumber
(…)(4)
, tidak perlu membuang integer literal ke CShort.PHP, @ JörgHülsermann
221 byte terlalu panjang (dengan demikian ular), dan kurangnya ruang kosong dapat dengan mudah diatasi.
Prettified:
sumber
Jelly, panjangnya 12, @Jonathan Allan
Cobalah online!
Bagaimana itu bekerja
sumber
Jelly , 12 byte, retak @ jawaban kedua Jonathan Allan
Cobalah online!
Penjelasan
Ini hampir sama dengan jawaban saya yang lain . Saya baru saja membuat dua perubahan:
Pertama, saya mengubah
U
("membalikkan setiap elemen") menjadiṚ€
("membalikkan" "setiap elemen"). Itu tidak membantu dengan sendirinya, karenaṚ
juga dilarang.Kemudian, saya mengubah
Ṛ
("mundur") menjadi;@/
(/
"lipat dengan";
"menyatukan"@
"dalam urutan yang berlawanan dengan daftar asli"). Itu menghindari semua karakter yang dilarang, memberikan solusi yang valid.Saya berasumsi langkah selanjutnya adalah mulai melarang quick -manipulation array , selain atom.
sumber
€
...€
dalam bentuk/
juga. Itu hanya sedikit lebih bertele-tele daripada solusi ini.;@\ṫ0
, regex semakin lama.Jelly, panjang 13, @Jonathan Allan
Cobalah online!
Bagaimana itu bekerja
sumber
m
?!Jelly, panjang 14, @Jonathan Allan
Cobalah online!
sumber
Scala, @Soapy
Belum pernah menyentuh Scala, itu menyenangkan untuk dikunjungi kembali. Sayangnya, solusi ini kehilangan banyak fitur keren Scala.
Cobalah di sini
Konfirmasi Regex
sumber
QBasic (QB64), @DLosc
Perhatikan bahwa karena
.
tidak cocok\n
(U + 000A, LF), baris baru di sini adalah\r
(U + 000D, CR).Memeriksa:
Kesulitan utama adalah bagaimana memasukkan kata setelah kata
;
. Untungnya, QB64 memperlakukan CR sebagai baris baru sementara regex Python tidak, sehingga kita bisa tergelincir diREM\r
sini. Dari lima rasa regex yang diizinkan,"\r" =~ /./
!/./.test('\r')
(\n
,\r
,\u2028
,\u2029
semua pemisah baris )re.match('.', '\r')
( hanya\n
dianggap sebagai pemisah baris )regexp.Match(".", "\r")
/./ =~ "\r"
Jadi celah ini baik-baik saja selama kita tidak menyebutkan JavaScript ... 🤐
sumber
REM
segera mengikuti pernyataan tanpa pemisah pernyataan. Solusi asli saya tidak menggunakan komentar. Saya punya variasi lain yang akan saya posting segera. : DPython 3, kennytm
Verifikasi verifikasi
sumber
> <>, torcado
sumber
C, @Yimin Rong
Program tidak dapat berisi angka, tetapi kami bisa mendapatkan angka melalui:
c
, umumnya dikenal sebagai "argc", yang selalu 2.+
dan-
tersedia, sehingga kami dapat membuat 0 dengann-n
, dan membuat 1 dengano=c;--o
.sumber
Ruby, @Nilai Tinta
[(-=Z-~]*
berarti "Saya bisa menulis apa pun yang saya suka :)"sumber
tinylisp, @Dosc
Solusi yang sangat mudah, dan benar-benar tidak dioptimalkan :)
Sebut sebagai
(disp (f 4))
.(p m n)
menghitung m + n menggunakan pengurangans
(m + n == m - ((1 - 1) - n))(j f g)
menghasilkan(f f+1 f+2 ... g-1)
(r f g)
menghasilkan(g-1 g-2 g-3 ... f)
(k m o f g n)
menghasilkan satu baris dari matriks ular, dan kemudian recurve sendiri untuk baris berikutnya, hingga n baris dibuat. Argumenm
,o
diganti olehj
/r
untuk menghasilkan kenaikan atau penurunan baris. Argumenf
,g
menjalankan indeks untuk mengetahui di baris mana kita berada.(f n)
panggilan(k j r 1 1 n)
untuk memulai generasi.sumber
(f 4)
-disp
itu tersirat.)PHP, @Ionut Botizan
Saat ini saya tidak punya ide yang lebih baik untuk memecahkan solusi yang asli.
Mendukung n <= 15
Ini adalah pertama kalinya saya menggunakan getopt. Mungkin bukan ide terbaik untuk menggunakan opsi sebagai input.
mulai dari baris perintah seperti ini
Regex asli
Tingkat 1:
Kombinasi huruf yang sangat bagus. Jangan ragu untuk memilih utas polisi.
Itu memblokir saya fungsi seperti - strrev - array_reverse - get_defined_vars
https://regex101.com/r/5rGTnw/2
Level 2:
https://regex101.com/r/XtVl9G/1
Larutan
Level 2:
sumber