Dengan panjang N string kurang dari dan lebih besar dari tanda ( <
, >
), masukkan bilangan bulat 0 sampai N pada awal dan akhir dan di antara setiap pasangan tanda sedemikian rupa sehingga semua ketidaksetaraan dipenuhi. Keluarkan string yang dihasilkan. Jika ada beberapa output yang valid, output salah satu (dan hanya satu) dari mereka.
Sebagai contoh
<<><><<
memiliki 7 karakter sehingga semua angka dari 0 hingga 7 harus dimasukkan. Output yang valid adalah
2<3<4>1<5>0<6<7
karena semua ketidaksetaraan diambil satu per satu
2<3
3<4
4>1
1<5
5>0
0<6
6<7
itu benar.
Jika diinginkan, output mungkin memiliki ruang di sekitar tanda, misalnya 2 < 3 < 4 > 1 < 5 > 0 < 6 < 7
.
Kode terpendek dalam byte menang.
Uji Kasus
Baris pertama setelah baris kosong adalah input dan baris berikutnya adalah masing-masing contoh output yang valid.
[empty string]
0
<
0<1
>
1>0
<<
0<1<2
<>
1<2>0
><
1>0<2
2>0<1
>>
2>1>0
<<<
0<1<2<3
><>
1>0<3>2
>><
3>2>0<1
3>1>0<2
2>1>0<3
>>>
3>2>1>0
>>><<<
3>2>1>0<4<5<6
6>3>1>0<2<4<5
4>2>1>0<3<5<6
4>3>1>0<2<5<6
<<><><<
2<3<4>1<5>0<6<7
>><><>>
7>6>0<5>1<4>3>2
<<<<<<<<<<<<<<
0<1<2<3<4<5<6<7<8<9<10<11<12<13<14
>><<<<><>><><<
6>5>4<7<8<9<10>3<11>2>1<12>0<13<14
14>5>4<7<8<9<10>3<11>2>1<12>0<13<6
sumber
Jawaban:
Retina , 20 byte
Hitungan byte mengasumsikan penyandian ISO 8859-1.
Cobalah online! (Baris pertama memungkinkan test-suite yang dipisahkan dengan linefeed.)
Penjelasan
Cara sederhana untuk menemukan permutasi yang valid adalah mulai dengan memasukkan angka dari
0
keN
dalam urutan, dan kemudian membalikkan angka yang mengelilingi setiap substring dari>
s. Ambil<><<>>><<
sebagai contoh:Kedua tugas itu cukup sederhana di Retina, meskipun yang benar-benar dapat kita kerjakan adalah string. Kita dapat menyimpan byte tambahan dengan memasukkan angka-angka dari
N
bawah ke0
dan membalikkan bagian di sekitarnya<
sebagai gantinya, tetapi prinsipnya sama.Tahap 1: Substitusi
Kami mulai dengan memasukkan panjang
$'
(sufiks, yaitu semuanya setelah pertandingan) ke setiap posisi yang mungkin dalam input. Ini memasukkan angka dariN
bawah ke0
.Tahap 2: Berpisah
Kami membagi input
>
menjadi beberapa baris terpisah, sehingga setiap baris terdiri dari nomor individual atau daftar nomor yang digabungkan<
.Tahap 3: Sortir
Dalam setiap baris (
%
) kami mengurutkan (O
) angka (\d#
) berdasarkan nilai numeriknya (#
). Karena kami memasukkan angka dalam urutan angka terbalik, ini membalikkannya.Tahap 4: Substitusi
Kami mengubah umpan baris menjadi
>
lagi untuk menggabungkan semuanya kembali menjadi satu baris. Itu dia.Sebagai catatan, saya bermaksud menambahkan cara untuk diterapkan
%
ke pembatas selain dari linefeeds. Seandainya saya sudah melakukan itu, pengiriman ini akan menjadi 14 byte, karena kemudian tiga tahap terakhir akan dikurangi menjadi satu:sumber
> <> ,
464335 + 4 untuk-s=
= 39 byteIni adalah implementasi dari algoritma xnor di> <>.
Dibutuhkan string input pada tumpukan (
-s
ditandai dengan penerjemah standar).Anda dapat mencobanya di juru bahasa online .
sumber
> <> , 26 + 4 = 30 byte
Cobalah online! +4 byte untuk
-s=
flag - jika-s
tidak apa-apa (itu berarti bahwa flag harus dihapus seluruhnya untuk input kosong), maka itu akan menjadi +3.Mengasumsikan bahwa input STDIN kosong sehingga
i
menghasilkan -1 (yang dilakukannya pada EOF). Program gagal mencoba mencetak -1 ini sebagai char.Menggunakan pendekatan max-of-nums-so-far-for-
>
, min-of-nums-so-far-for-far<
.Program yang keluar dengan bersih dan tidak membuat asumsi tentang STDIN adalah 4 byte tambahan:
sumber
CJam , 16 byte
Cobalah online!
Port jawaban Retina saya .
Penjelasan
sumber
Perl, 29 byte
Termasuk +2 untuk
-lp
Jalankan dengan input pada STDIN, mis
Keluaran:
order.pl
:Penjelasan
Memiliki dua penghitung, maks dimulai dengan panjang string, min dimulai dengan 0. Kemudian pada setiap batas (termasuk awal dan akhir string) jika itu tepat sebelum
<
menempatkan minimum di sana dan meningkat sebesar 1, jika tidak menempatkan maksimum di sana dan mengurangi dengan 1 (pada akhir string tidak masalah yang Anda ambil karena keduanya sama)sumber
s{}{/\G/...}
Saya belum pernah melihat itu sebelumnya, ini brilian.Python 2, 67 byte
Fungsi rekursif. Memenuhi masing-masing operator pada gilirannya dengan menempatkan nilai terkecil yang tidak digunakan
x
untukx<
dan terbesar untukx>
. Nilai terkecil yang tidak digunakan disimpani
dan diperbarui, dan nilai terbesar yang tidak terpakai disimpulkan darii
dan panjang yang tersisa.sumber
(s>'=')
alih - alih(s>='>')
menyimpan byte?<
dan>
tidak ada codepoint yang berurutan.=
antara<
dan>
.Python 2,
163137 byteKocok nomor-nomornya sampai pernyataannya diubah
True
.Cobalah.
sumber
APL, 33 byte
⍋⍋
berguna luar biasa.Penjelasan
sumber
⍋⍋
)?⍋
naik peringkat, yang mengembalikan indeks dalam urutan terurut. Dengan melakukannya dua kali, Anda mendapatkan di1
mana angka terkecil, di2
mana angka terkecil berikutnya, dll.JavaScript (ES6),
7456 byteMulai dengan set angka
0...N
. Pada setiap tahap hanya mengambil yang terbesar (l
) atau paling sedikit (j
) dari angka yang tersisa; angka berikutnya harus kurang dari atau lebih besar dari itu. Sunting: Disimpan sebesar 18 byte berkat @Arnauld.sumber
replace
? Mungkins=>s.replace(/./g,c=>(c<'>'?j++:l--)+c,j=0,l=s.length)+j
replace
) turun menjadi 74 byte ...Pyth - 19 byte
Hore untuk perbandingan rantai!
Tidak bekerja secara online karena aman dari eval.
sumber
2sable , 20 byte
Penjelasan
Cobalah online!
Untuk N <10 ini bisa jadi 14 byte:
sumber
C #,
10299 byteTidak Disatukan:
sumber
r = r +
bagian menjadi tugas gabungan menghemat beberapa byte?r+
bagian di sebelah kanan memberi tahu kompiler bahwa semuanya adalah string, jadi representasi stringc
digunakan. Jika saya menggunakanr+=
,?:
bagian akan mengevaluasi keint
, nilai ordinalc
akan ditambahkan ke itu dan hanya kemudian akan dikonversi ke representasi stringnya.Java 8,
126125 byteSaya tidak berpikir ini bekerja hehe
Program tes tidak digabungkan
sumber
.replaceAll
to.replace
dan menghapus tanda kurung sekitar(c+"")
untuk menghemat 5 byte.Jelly ,
27 1412 bytePort solusi @Martin Enders CJam
-2 bytes berkat @Dennis
Uji di TryItOnline
Bagaimana?
Metode sebelumnya menarik secara matematis, tetapi tidak begitu ...
Ini menggunakan sistem basis faktorial untuk menemukan indeks permutasi [0, N] yang akan memenuhi persamaan.
sumber
U
vektorisasi, jadi Anda tidak perlu€
.żJ0;
menyimpan byte lain.Clojure,
152132126 byteMenyimpan jumlah byte yang adil dengan menghilangkan spasi sebanyak mungkin. Saya menyadari spasi tidak diperlukan untuk memisahkan tanda kurung dari karakter lain.
Pada dasarnya port Clojure dari jawaban @ Scepheo. Bekerja secara identik.
Mereka
recur
panggilan pembunuh!Saya kira saya bisa menggunakan atom untuk membersihkannya.Theswap!
panggilan yang dibutuhkan untuk atom penggunaan ditambahkan ke hitungan: /Terima kasih kepada @amalloy karena telah menyelamatkan saya beberapa byte.
Tidak Disatukan:
sumber
loop
penjilidan, sebelums
dan sesudaha
. Anda juga bisa mencukur sedikit dengan menggantiif
pohon dengancase
:(case c \< (recur ...) nil (str ...) (recur ...))
. Dan tentu sajacr
bisa menjadi nama yang lebih pendek.Haskell, 162 byte
Ini sangat panjang.
sumber
Perl (107 + 1 untuk -p) 108
Algoritma dicuri dari jawaban Martin Ender
sumber
Ruby, 135 byte
Catatan: Kompleksitas waktu besar (O (n!)).
sumber
Python 2,
176172 byteIni tidak terlalu singkat dibandingkan dengan yang lain, tapi saya senang saya menyelesaikannya dengan cepat.
Cobalah online
Tidak Disatukan:
Cobalah online
sumber
zip
pop
), tetapi sedikit lebih pendek. JikaN<10
, saya bisa membuat pengerasan menjadi lebih pendek.PHP, 190 Bytes
acak acak hingga ada solusi yang valid
381 Bytes dapatkan semua solusi dan pilih satu
sumber