Tantangan ini terinspirasi oleh ini jawaban yang sangat bagus oleh TidB.
Dalam jawaban TidB, setiap delapan karakter berada dalam urutan yang benar: gnilwoB edoC
( Code Bowling
mundur). Namun senar lain yang berada di aneh, urutan acak.
Tantangan Anda adalah untuk memperbaikinya.
Ambil string (tidak kosong) dan bilangan bulat positif n
sebagai input. String akan berisi karakter ASCII dalam rentang: 32-126 (spasi untuk tilde).
Anda harus mengurutkan string dalam urutan menaik (terlihat dari kiri, berdasarkan nilai kode ASCII), tetapi lewati setiap n
karakter ke-5, mulai dari akhir string. Sebagai contoh, mari kita ambil string abcdABC123
sebagai input, dan n=4
, maka kita akan mendapatkan:
abcdABC123 <- Input string. (n=4)
_b___B___3 <- These will not be sorted (every 4th starting from the end)
1_2AC_acd_ <- The remaining characters, sorted
1b2ACBacd3 <- The final string (the output)
Contoh lain:
9876543210 <- Input string (n=2)
_8_6_4_2_0 <- These will not be sorted
1_3_5_7_9_ <- The remaining characters, sorted
1836547290 <- The final string (the output)
String input dapat diambil pada format opsional (string, daftar karakter, daftar string karakter tunggal ...). Bilangan bulat input juga dapat diambil pada format opsional.
Kasus uji:
Formatnya akan n=__
, diikuti oleh string input pada baris berikutnya. Outputnya adalah pada baris di bawah ini.
n=1 (All elements will stay in place)
nafgaksa1252#"%#
nafgaksa1252#"%#
n=214 (The last character will stay in place. All other are sorted.
&/lpfAVD
&/AVflpD
n=8
g7L9T E^n I{><#ki XSj!uhl y= N+|wA}Y~Gm&o?'cZPD2Ba,RFJs% V5U.W;1e 0_zM/d$bH`@vKoQ 43Oq*C
g n !#$%&'i*+,./01l234579;w<=>?@ADoEFGHIJKBLMNOPQR STUVWXYeZ^_`abcdhjkmqsuovyz{|}~C
PHP, 101 byte
indeks string negatif (PHP 7.1) menghemat 21 byte - dan mungkin harinya:
Jalankan dengan
php -nr '<code>' '<string>' <N>
.kerusakan
sumber
$i-=1
dan tidak$i--
?$i--
tidak berfungsi jika$i
adaNULL
.--$i
, yang saya perlukan juga tidak. ;)Oktaf ,
6554 byteCobalah online!
Menggunakan pengindeksan logis untuk membuat array karakter 'tetap' dan 'diurutkan'. Penjelasan:
Cara yang saya buat
l
mensyaratkan bahwas
bukan nol, yang saya pikir merupakan persyaratan yang masuk akal, karena banyak bahasa digunakan\0
sebagai pembatas akhir-string.sumber
l
- bypass dan menggunakan vektor nomor indeks secara langsungPython 2, 191 byte
Ya, saya yakin ini solusi yang mengerikan.
Cobalah online
Saya tidak akan repot menjelaskannya. Tidak apa-apa sampai saya menyadari bahwa itu perlu diindeks dari akhir. Sekarang monster. Pada titik ini, saya senang itu berfungsi.
sumber
JavaScript (ES6),
10093 byteMengambil input dalam sintaks currying
(s)(n)
.Diformat dan dikomentari
Uji kasus
Tampilkan cuplikan kode
sumber
Perl 5 , 94 byte
88 byte kode +
-F -pl
bendera.Cobalah online!
Ini terlalu lama menurut saya, tetapi sudah tidak terlalu jelek ... Saya masih mencoba untuk golf lebih jauh lagi.
sumber
Jelly ,
1413 byteProgram lengkap yang mencetak string ke STD out *.
Cobalah online!
Bagaimana?
Saya tidak dapat membantu tetapi berpikirada cara untuk menggunakan fakta yangḢ
mengubah inputnya* untuk fungsi yang ingin diratakan keluarannya menjadi satu daftar
F
.Misalnya input
"abcdABC123"
,4
hasil:[[['1'],['b']],[['2','A','C'],['B']],[['a','c',',d'],['3']]]
daripada:
['1','b','2','A','C','B','a','c',',d','3']
sumber
Python + NumPy ,
115114 byteMengambil daftar Python biasa sebagai input (tidak yakin apakah mengambil array akan dianggap halal); mengembalikan array NumPy yang berisi hasilnya.
Bekerja dengan menyembunyikan indeks yang relevan dan memilah sisanya.
sumber
Python 2,
119113 byteBuat daftar semua karakter yang akan diurutkan, sortir dan gabungkan untuk dicetak, sambil menghindari beberapa pembalikan melalui pengindeksan negatif.
sumber
print"".join(sorted(l[~a]for a in i if a%n)[-a+a/n]if a%n else l[~a]for a in i)[::-1]
menghemat 5 byteRuby, 64 byte
Menggunakan regex untuk mengambil semua karakter yang tidak relevan, baik untuk penggantian maupun untuk penyortiran.
Cobalah online
sumber