Tantangan
Tulis fungsi atau program yang menerima jalur input, melakukan pengocokan yang sangat spesifik dan aneh pada karakternya, dan menampilkan hasilnya.
Pengocokan yang diperlukan dapat dijelaskan menggunakan algoritma berikut:
- Labeli setiap karakter dalam input dengan indeks berbasis 1.
- Tulis karakter nomor 1 sebagai output.
- Dimulai dengan karakter nomor 2, tulis setiap karakter lainnya ke dalam urutan, tidak termasuk karakter 2 itu sendiri. Dengan kata lain, tulis karakter 4, 6, 8, 10, dan seterusnya sebagai output.
- Dimulai dengan nomor karakter berikutnya dan belum ditulis sebagai output, tulis setiap karakter ke output, tidak termasuk karakter itu sendiri, dan tidak termasuk karakter lain (dengan label numerik), Anda mungkin sudah menulis ke output.
- Ulangi langkah 4 selama terus menambahkan karakter baru ke output.
- Tulis karakter yang tersisa untuk ditampilkan, secara berurutan.
Contoh
- Beri label karakter.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 SBEAUTYCORNER OLDDOCYAK
2. Tulis karakter pertama ke output:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27OLDDOCYAK 'SBEAUTYCORNER O
3. Tulis setiap karakter lain mulai dengan 2, tidak termasuk 2.
12 3456789101112131415161718192021222324252627OLDDOCYAK'SBEAUTYCORNER O OY 'EUYCRE
4. Karakter selanjutnya yang belum ditulis adalah karakter nomor 3; tulis setiap karakter ke-3 dimulai dengan 3, tetapi tidak termasuk karakter 3 itu sendiri, dan setiap karakter yang sudah ditulis.
12 3456789101112131415161718192021222324252627OLDDOCYAK'SBEAUTYCORNEROOA 'EUYCRE YB R
5. Ulangi langkah 4 menggunakan karakter berikutnya, karakter 5.
4. Karakter selanjutnya yang belum ditulis adalah karakter nomor 5; tulis setiap karakter ke-5 dimulai dengan 5, tetapi tidak termasuk karakter 5 itu sendiri, dan setiap karakter sudah ditulis. (Jumlah ini hanya karakter 25).
12 3456789101112131415161718192021222324252627OLDDOCYAK'SBEAUTYCORNEROOA 'EUYCREYB R N
5. Karakter selanjutnya adalah 7; tetapi 14, 21 sudah ditulis, jadi tidak ada lagi karakter yang akan dihasilkan jika kita mengulangi langkah 4. Jadi, kita selesai dengan 5.
6. Tuliskan karakter yang tersisa secara berurutan.
12 3456789101112131415161718192021222324252627OLD DOCYAK'SBEAUTYCORNEROOA 'EUYCREYB RN LDDCKSATO
Aturan
Input dan output dapat melalui input standar / output standar, string, atau array karakter.
Jika membaca sebagai input standar, Anda dapat dengan nyaman menganggap bahwa ada baris baru yang tertinggal, atau bahwa seluruh input berisi baris. Karakter baris baru tidak berpartisipasi dalam acak.
Demikian juga, pada kenyamanan Anda, output Anda mungkin memiliki baris baru atau tidak.
Celah standar tidak diijinkan.
Ini adalah kompetisi kode golf. Kode terkecil dalam byte menang.
Uji Kasus
123456789ABCDEF -> 1468ACE9F2357BD
OLD DOC YAK'S BEAUTY CORNER -> O O A' EUYCREYB RNLDDCKSATO
Blue boxes use a 2600hz tone to convince telephone switches that use in-band signalling that the caller is actually a telephone operator.
->
Bebxsuea20h oet ovnetlpoesice htuei-adsgaln httecle satal eehn prtre 0ncce ha nng aiuapootnt ihyon atallu o s 6z oi ehwstsnbilt lr clee.
Jawaban:
Jelly , 10 byte
TryItOnline
Bagaimana?
sumber
Mathematica, 61 byte
Fungsi yang tidak disebutkan namanya mengambil daftar karakter sebagai input dan mengembalikan daftar karakter.
FactorInteger[#][[1,1]]
menghasilkan faktor prima terkecil#
(dan kembali1
jika#
sama1
). Oleh karena ituFactorInteger[#][[1,1]]PrimeQ@#
menghasilkan ekspresi yang aneh: [#
faktor prima terkecil]False
jika#
tidak prima, dan# True
jika#
prima (ini adalah produk yang tidak dievaluasi dari angka dan boolean).Range@Length@#
menghasilkan daftar angka hingga panjang input. KemudianSortBy
urutkan angka-angka itu dengan fungsi lucu yang dijelaskan di atas. Mathematica benar-benar tipe-sensitif dalam banyak hal, tetapi dengan riang mencampurkannya dengan cara lain: ekspresi bentuk [angka]False
diurutkan berdasarkan abjad sebelum ekspresi bentuk [angka]True
, sementara ikatan diputuskan dengan mengurutkan angka-angka. Itu menghasilkan permutasi tepat yang kita inginkan di sini, dan#[[...]]
memungkinkan karakter dari input sesuai.sumber
C, 164 byte
Ini mengambil input sebagai parameter perintah pertama dan mencetak kembali ke stdout. Saat kami memproses setiap karakter, kami menghapusnya, memungkinkan umpan terakhir.
sumber