Tugas Anda: tulis sebuah program / fungsi yang ketika diberi string yang hanya berisi karakter ASCII, output / mengembalikan string dalam bentuk reverse-ish.
Contoh:
1) Input
Hello, World!
2) Jumlah karakter unik dalam input. (String input dipisahkan oleh pipa ( |
) untuk keterbacaan)
H|e|l|l|o|,| |W|o|r|l|d|!
1 2 3 4 5 6 7 8 9 10
3) Untuk karakter duplikat, temukan kemunculan pertama karakter tersebut dan beri nomor karakter duplikat dengan nomor yang sama dengan yang pertama.
H|e|l|l|o|,| |W|o|r|l|d|!
1 2 3 3 4 5 6 7 4 8 3 9 10
4) Membalik string, tetapi bukan angka.
!|d|l|r|o|W| |,|o|l|l|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10
5) Hapus karakter di atas angka yang diulang. (Karakter yang dihapus diwakili dengan tanda bintang.)
!|d|l|*|o|W| |,|*|l|*|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10
6) Ganti karakter yang dihapus dengan karakter yang muncul lebih dari kemunculan pertama nomor yang karakter yang dihapus sudah berakhir.
!|d|l|l|o|W| |,|o|l|l|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10
7) Output
!dlloW ,olleH
Kasus uji:
Input -> Output
"Hello, World!" -> "!dlloW ,olleH"
"18464399" -> "99343488"
"Code Golf" -> "floG eloC"
"abcdefgABCDEFG" -> "GFEDCBAgfedcba"
"Mmm, marshmallows" -> "swwllwmhsrwm mms"
"15147" -> "74751"
Jawaban:
Pyth , 1 byte
Verifikasi semua kasus uji.
Pyth memiliki built-in yang luar biasa :-)
Pyth ,
87 byteVerifikasi semua kasus uji.
Bagaimana itu bekerja
Ini adalah pendekatan non-built-in yang lebih menarik.
sumber
Python 2 ,
4641 byte-5 byte terima kasih kepada Artyer
Cobalah online!
sumber
lambda x:''.join(x[~x.find(n)]for n in x)
alih - alih membalikkan lalu mengindeksJelly , 5 byte
Cobalah online!
sumber
CJam , 7 byte
Cobalah online!
Penjelasan
sumber
y
bekerja seperti itu.y
bekerja seperti itu. : PMATL , 6 byte
Cobalah online!
sumber
05AB1E , 2 byte
Cobalah online!
Penjelasan:
sumber
Alice , 17 byte
Cobalah online!
Penjelasan
Ini hanya template biasa untuk kode linier dalam mode Ordinal. Jika kami membuka ini, program sebenarnya menjadi:
Gagasan di sini mirip dengan jawaban CJam saya . Karena Alice tidak memiliki cara mudah untuk mengindeks ke string dengan integer, lebih mudah untuk mereplikasi perilaku ini dengan transliterasi (
y
dalam Alice). Namun, semantik transliterasi Alice jauh lebih umum daripada CJam, yang berarti bahwa Alice tidak hanya mengabaikan pemetaan berulang. Misalnya, jika kami hanya ingin mentransliterasiMmm, marshmallows
ke kebalikannya, ini akan mewakili daftar pemetaan berikut:Perhatikan bahwa kita punya, misalnya,
m -> w
,m -> o
,m -> a
danm -> a
. CJam hanya akan membuang semua kecuali pemetaan pertama, tetapi Alice malah akan menelusuri semua ini. Jadi yang pertamam
akan dipetakan kew
, yang kedua keo
, yang kelima lagiw
dan seterusnya. Dalam hal ini itu tidak membantu, karena secara umum jika kita tampily
diAAB
(untuk beberapa stringA
danB
) seperti yang kita lakukan di CJam, kita akan selalu mendapatkanB
Alice.Jadi bagaimana kita menghitung pemetaan yang berfungsi
y
(yaitu bagaimana kita membuang pemetaan berulang secara manual)? Tentunya dengan menggunakan transliterasi lain. :)Sumber pemetaan yang kita inginkan harus nub dari input (yaitu input deduplicated). Jika kita menerapkan pemetaan di atas ke nub, maka setiap karakter hanya muncul sekali, jadi kita hanya memanfaatkan yang pertama dari setiap pemetaan yang diulang. Jadi dengan mentransliterasi nub dengan input dan kebalikannya, kita secara efektif hanya membuang pemetaan yang digandakan. Kami kemudian dapat menggunakan nub dan hasil baru ini sebagai pemetaan untuk input asli. Saya yakin itu masuk akal bagi seseorang ...
Jadi kodenya:
sumber
Pyke , 7 byte
Coba di sini!
sumber
Perl 5 , 23 + 1 (
-p
) = 24 byteCobalah online!
Terima kasih untuk entri Alice @ MartinEnder untuk ide transliterasi
sumber
JavaScript ES6 50 byte
3 byte disimpan berkat Justin Mariner
Menguji:
sumber
R ,
6865 byteVerifikasi kasus uji!
Metode 05AB1E Ports Erik kurang dari 3 byte. Itu bukan yang pertama, tapi itu yang pertama saya lihat.
versi lama:
Verifikasi semua kasus uji - cetak vektor dengan input sebagai nama dan output dalam kutipan di bawah ini.
Implementasi yang cukup naif, tapi saya tidak berpikir ini menjadi lebih pendek di R (dan saya berharap bisa salah tentang itu). Ini pada dasarnya port R dari jawaban python Rod tetapi dikembangkan secara independen.
Penjelasan yang tidak digabungkan:
sumber
C (gcc) , 98 byte
Cobalah online!
Argumen harus berupa string yang dapat dimodifikasi; string dimodifikasi di tempat.
sumber
Röda , 27 byte
Cobalah online!
Ini mengambil daftar karakter sebagai input dan mengembalikan aliran karakter.
Menggunakan datatype string (40 byte):
Cobalah online!
sumber
Python ,
191128 byteCobalah online
sumber
Java 10,
1009997 bytePort of @ LeakyNun's C jawab . Saya ragu itu bisa dilakukan lebih pendek tanpa melakukan sesuatu yang serupa di Jawa.
-1 byte terima kasih kepada @ceilingcat .
Input sebagai
char[]
(karakter-array), dan memodifikasi input ini daripada mengembalikan yang baru untuk menghemat byte.Coba di sini.
sumber