Memasukkan
String acak non-kosong yang terdiri dari karakter ASCII dalam kisaran .
Keluaran
Output diperoleh dengan menerapkan rotasi berturut-turut ke string input.
Untuk setiap huruf ( [a-zA-Z]
) dalam string input, dari kiri ke kanan:
- jika huruf dalam huruf besar, putar semua karakter sebelum itu dengan satu posisi ke kiri
- jika huruf dalam huruf kecil, putar semua karakter sebelum itu dengan satu posisi ke kanan
Contoh
Input: "Iklan Cb"
- Huruf pertama adalah " C ". Kita harus melakukan rotasi ke kiri, tetapi tidak ada karakter sebelum " C " ini. Jadi, tidak ada yang berputar.
- Huruf berikutnya adalah " b ". Kami memutar " C " ke kanan. Karena itu karakter tunggal, tidak berubah.
- Karakter " - " tidak memicu rotasi apa pun, karena ini bukan huruf.
- Huruf berikutnya adalah " A ". Kami memutar " Cb- " ke kiri, yang memberi " bC Ad"
- Huruf keempat dan terakhir adalah " d ". Kami memutar " b-CA " ke kanan, yang menghasilkan " Ab-C d"
Oleh karena itu, output yang diharapkan adalah " Ab-Cd ".
Aturan
- Anda dapat mengambil input sebagai string atau sebagai array karakter - yang mungkin atau mungkin tidak sama, tergantung pada bahasa Anda.
- Anda juga dapat menampilkan array karakter alih-alih string.
- Ini adalah
golfkodeogl-edocf
Uji kasus
"cbad" -> "abcd"
"ACBD" -> "ABCD"
"Cb-Ad" -> "Ab-Cd"
"caeBDF" -> "aBcDeF"
"aEcbDF" -> "abcDEF"
"ogl-edocf" -> "code-golf"
"W o,ollelrHd!" -> "Hello, World!"
"ti HIs SSta ET!" -> "tHis IS a tEST!"
code-golf
string
code-golf
string
code-golf
string
parsing
brainfuck
code-challenge
python
hello-world
error-message
code-golf
string
code-golf
number
integer
counting
subsequence
code-golf
string
cipher
code-golf
array-manipulation
arithmetic
integer
matrix
code-golf
math
sequence
code-golf
restricted-source
pi
popularity-contest
cops-and-robbers
polyglot
popularity-contest
cops-and-robbers
polyglot
code-golf
file-system
king-of-the-hill
code-golf
number
sequence
integer
rational-numbers
string
code-challenge
source-layout
code-golf
ascii-art
king-of-the-hill
code-golf
array-manipulation
sorting
code-golf
string
code-golf
restricted-source
source-layout
tips
math
code-challenge
permutations
logic-gates
code-golf
number
random
integer
code-golf
math
code-golf
math
number
decision-problem
king-of-the-hill
python
board-game
code-challenge
brainfuck
busy-beaver
code-golf
number
cops-and-robbers
polyglot
obfuscation
answer-chaining
code-golf
number
integer
conversion
code-golf
string
parsing
code-golf
ascii-art
number
king-of-the-hill
javascript
code-golf
source-layout
radiation-hardening
code-golf
array-manipulation
matrix
code-golf
string
graph-theory
code-golf
array-manipulation
decision-problem
code-golf
string
ascii-art
code-golf
string
code-golf
array-manipulation
Arnauld
sumber
sumber
.U
untuk mengurangi input dari nilai 2. Ini memungkinkan Anda melepaskan=k
dari awal, dan)k
dari akhir karena input dan pencetakan tersirat. Program lengkap:.U+.>b-}ZG}Zr1GZ
- tautanPython 2 ,
1009895 byteCobalah online!
sumber
Jelly , 14 byte
Tautan monadik yang menerima daftar karakter yang menghasilkan daftar karakter.
Cobalah online! Atau lihat test-suite .
Bagaimana?
sumber
I
melakukan hal yang sama sepertiḅ-
dalam kasus ini? Tampaknya berfungsi di sini , tetapi tidak dalam kode Anda. Saya agak bingung kenapa. Juga, apakah ada perintah untuk mendorong seluruh daftar sebagai item yang terpisah ke tumpukan di Jelly (tunggu, Jelly bukan bahasa berbasis tumpukan, kan ..)? Dalam hal itu pengurangan sederhana dapat digunakan dan Anda juga tidak perlu meniadakan jika saya tidak salah (sama seperti edit terakhir dalam jawaban 05AB1E saya).I
menghasilkan daftar - tambahkanŒṘ
untuk melihat representasi lengkap . BegituØẠŒHċ€IṪN⁸ṙ;ð/
juga bekerja.05AB1E ,
18171614 byteCobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
K4 ,
4333 byteLarutan:
Contoh:
Penjelasan:
Iterasi di atas string input, putar output sebelumnya sebesar 1, -1 atau 0 tergantung pada posisinya di daftar "a-zA-Z".
Catatan:
sumber
> <> ,
4543 byteCobalah online!
Fakta bahwa> <> memiliki rotasi stack membantu, tetapi harus memeriksa huruf tidak.
Penjelasan:
sumber
Haskell ,
10191 byte-10 byte terinspirasi oleh jawaban Curtis Bechtel (gunakan
'@'<c,c<'['
lebihelem c['A'..'Z']
dan kisaran yang sesuai untuk huruf-huruf kecil).Cobalah online!
Penjelasan / Tidak Diundang
Operator
(!)
mengambil string yang tidak kosongx
di mana kita dapat mencocokkan pola dan karakter:Sekarang kita dapat mengurangi ekor input dari kiri ke kanan, dimulai dengan karakter pertama dari input menggunakan:
sumber
Haskell ,
12292 byteTerima kasih kepada BWO untuk sarannya! Saya juga menghemat banyak dengan mengambil pendekatan yang sedikit berbeda dari jawaban asli saya.
Cobalah online!
sumber
(#)
, penggunaan,
lebih&&
, penggunaan[l!!0,c]
lebihhead l:[c]
,1>0
alih-alihTrue
, Anda tidak perlu menghitungf=
dan Anda dapat mengasumsikan input tidak kosong yang menyelamatkanl==[]
penjaga - menghemat Anda 13 byte: Cobalah secara online!isLower
danisUpper
golf dalam kiriman saya , saya harap Anda baik-baik saja dengan itu kalau tidak saya akan membalikkan edit saya.JavaScript (Node.js) ,
116102 byteCobalah online!
Asli (
116111106B)s=>Buffer(s).map((x,i)=>s=(t=s[S="slice"](i),i<2)?s:x>64&x<91?s[S](1,i)+s[0]+t:x>96&x<123?s[i-1]+s[S](0,i-1)+t:s)&&s
s=>Buffer(s).map((x,i)=>i<2|--x%32>25|x<64?s:s=[s[S="slice"](1,i)+s[0],s[i-1]+s[S](0,i-1)][+(x>95)]+s[S](i))&&s
s=>Buffer(s).map((x,i)=>!i|--x%32>25|x<64?s:s=(w=x>95,t=s.slice(1-w,i-w),w?s[i-1]+t:t+s[0])+s.slice(i))&&s
sumber
eval(`regex`)
daripada menggunakan konstruktoreval(`regex`)
, jadi -2 + 2 = 0 dan karenanya tidak membantu mengurangi jumlah byte.eval()
ketika setidaknya satu flag digunakan:eval('/./g')
lebih pendek 3 byte dariRegExp('.','g')
.Ruby , 51 byte
Cobalah online!
Input dan output adalah array karakter
Trik-nya:
Kode ini cukup mudah, kecuali mungkin bagian rotasi:
x adalah karakter tunggal, yang bisa berupa huruf, ekspresi pertama
x=~/\W/
kembalinil
jika itu huruf, dan 0 sebaliknya. Jika 0, kita selesai, jika tidak, logikaor
memeriksa ekspresi kedua:?_<=>x
mengembalikan -1 untuk huruf besar dan 1 untuk huruf kecil. Jadi rotasi adalah:sumber
Merah , 110 byte
Cobalah online!
Penjelasan:
sumber
Perl 6 , 47 byte
Cobalah online!
Bekerja pada berbagai karakter.
sumber
Japt,
171614 byteMengambil input sebagai array karakter, menghasilkan string
Cobalah
Penjelasan
sumber
Jelly , 19 byte
Cobalah online!
sumber
Java 10,
149119 bytePort dari jawaban JavaScript @ShieruAsakoto , jadi pastikan untuk menghapusnya.
Cobalah online.
Penjelasan:
sumber
Stax , 32 byte
Jalankan dan debug itu
Banyak stack swapping yang mungkin tidak perlu. Saya benar-benar ingin mendapatkan ini lebih banyak, tetapi saya berjuang dengan pemesanan tumpukan. Mungkin seseorang bisa mengetahuinya jika mereka bosan. Akan terus mengerjakannya.
sumber
Attache , 69 byte
Cobalah online!
Penjelasan
Bentuk umum
Fungsi umumnya terlihat seperti ini:
Yang melipat
{...}
setiap anggota dalam kisaran dari0
ke#input - 1
(Iota
), dimulai dengan input sebagai seed.Fungsi dalam
Fungsi berikut disebut sebagai
f[building, index]
dan dipanggil dengan setiap indeks dari0
ke#input
eksklusif.@SplitAt
panggilanSplitAt
pada argumen ini, membelah string input aktifindex
.Pada dasarnya, fungsi ini memutar bagian kiri dari string sesuai dengan karakter pertama dari bagian kanan.
sumber
Arang , 20 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Ulangi karakter input.
Peta atas string karakter yang dikumpulkan sejauh ini, pengindeksan secara siklis ke karakter yang dikumpulkan sejauh ini dengan indeks bertambah atau berkurang jika karakter saat ini masing-masing huruf besar atau kecil. Ini melengkapi rotasi. Karakter selanjutnya kemudian digabungkan, dan hasilnya ditugaskan kembali ke string.
Cetak hasilnya.
sumber
R ,
107102100 byteMasif karena manipulasi string R adalah besar. Adakah yang bisa mendapatkannya di bawah 100?
-5 byte menggunakan trik "set variabel loop ke F untuk menghindari inisialisasi".
-2 byte dengan mengasumsikan semua karakter dapat dicetak dan digunakan
2*!k%%97>25
daripada2*k%in%97:122
untuk menguji huruf kecil, menggunakan prioritas operator.Cobalah online!
sumber
Japt ,
2523 byteAku menyerah, tidak bisa membuatnya lebih pendek
-2 byte dari @ETHproductions
Cobalah online!
sumber
éXè\a -Xè\A
salah satu :-( Anda dapat menyimpan dua byte dengan mengubah spasi ganda menjadi)
, dan menghapus©
(koma implisit berarti yangU
masih diÃU
dan menggunakan-h
flag.Retina ,
676458 byte-9 byte terima kasih kepada @Neil menghapus tiga yang tidak perlu
?
telah saya tambahkan, serta yang tidak perlu(.*)
dalam kasus-lain.Cobalah secara online atau verifikasi semua kasus uji . (CATATAN: Output dengan baris tambahan. Header dalam rangkaian uji adalah untuk menguji setiap jalur input sebagai tempat uji terpisah, dan catatan kaki adalah untuk menghapus baris tambahan tersebut untuk output yang lebih kompak.)
Penjelasan:
Tambahkan baris baru sebelum input:
Lanjutkan mengganti selama kami dapat menemukan kecocokan:
Yang lainnya adalah tiga cek berbeda yang digabung menjadi satu:
Jika karakter tepat setelah baris baru adalah huruf kecil: putar semuanya sebelum baris baru ke kanan, lalu tambahkan karakter dan baris baru:
Jika karakter tepat setelah baris baru adalah huruf besar: putar semuanya sebelum baris baru ke kiri, dan kemudian tambahkan karakter itu dan baris baru:
Lain-lain (bukan huruf kecil atau huruf besar): cukup geser baris baru ke kanan untuk 'iterasi' berikutnya:
Tiga cek di atas digabung dengan regex ATAU pernyataan (
|
) dan penggantian grup yang lebih besar untuk membuatnya bertindak sepertiif(lowercase) ... elseif(uppercase) ... else ...
:sumber
?
huruf s - jika belum ada yang berputar, tidak masalah apakah ada surat.(.*)¶(.)
dengan$1$2¶
dapat disederhanakan untuk menggantikan¶(.)
dengan$1¶
sebagai capture lainnya tidak mempengaruhi hasil.MATL , 20 byte
Cobalah online!
-4 byte terima kasih kepada Luis Mendo.
Ubah huruf besar / kecil / non-huruf ke [-1,0,1] (paruh pertama program). Berlaku pengalihan secara berturut-turut (babak kedua). Saya merusak otak saya jika ada cara yang lebih baik untuk memetakan huruf besar / huruf kecil ke [-1,0,1] (lihat versi kedua), dan mungkin cara untuk membalikkan string segera untuk menyingkirkan keduanya
w
Dibutuhkan untuk&)
.sumber
C (dentang) ,
168159153119 byte-26 terima kasih kepada @ceilingcat
Cobalah online!
sumber
g=a[j=i++];islower(a[i])?bcopy(a,a+1,j)
alih-aliha[j=i++];islower(a[i])?g=a[j],bcopy(a,a+1,j)
Pyth, 16 byte
Coba di sini!
Penjelasan:
sumber