Dalam tantangan ini, Anda diharuskan untuk menggeser karakter dalam string yang dimasukkan n beberapa kali dan menghasilkan string yang digeser
Memasukkan
Input pertama akan berisi string. Di baris berikutnya, bilangan bulat, yang menunjukkan n
akan ada.
Keluaran
- Jika
n
positif, pindahkan karakter dalam string ke waktu yang tepatn
. - Jika
n
negatif, pindahkan karakter dalam string ke waktu kirin
. - Jika
n
nol, jangan menggeser karakter dalam string.
Setelah bergeser (kecuali bila n
nol), cetak string yang digeser.
Catatan
- String tidak akan kosong atau
null
. - String tidak akan lebih dari 100 karakter dan hanya akan berisi karakter ASCII dalam rentang
(spasi) hingga
~
(tilde) (kode karakter 0x20 hingga 0x7E, inklusif). Lihat tabel ASCII untuk referensi. - Pergeserannya adalah siklik.
- Jumlahnya
n
bisa positif, negatif, atau nol. n
akan selalu lebih besar dari atau sama dengan -1000 dan lebih rendah dari atau sama dengan 1000- Anda dapat mengambil input melalui
stdin
atau dari argumen baris perintah - String yang digeser harus dihasilkan dalam
stdout
(atau setara terdekat) - Anda dapat menulis program lengkap atau fungsi yang mengambil input dan output string
stdout
atau setara terdekat
Uji Kasus
1)
Hello world!
5 -->orld!Hello w
2)
Testing...
-3 -->ting...Tes
3)
~~~
1000 -->~~~
4)
12345
0 -->12345
5)
ABA
17 -->BAA
Mencetak gol
Ini adalah kode-golf , jadi pengiriman terpendek (dalam byte) menang.
Javascript ( ES5 ),
5552 byteBerkomentar:
sumber
CJam, 5 byte
Ini cukup lurus ke depan.
Cobalah online di sini
sumber
C, 93 byte
Lebih jelas adalah versi argumen fungsi yang dimodifikasi untuk membuat versi argumen baris perintah
Yang ini hanya 68 byte, yang hanya menunjukkan betapa dirugikannya C ketika berhadapan dengan argumen baris perintah.
Jika shift,,
n
positif makastrlen(s)-n%strlen(s)
offset dan jikan
negatif offset tersebut-n%strlen(s)
. Theprintf
cetakan dari offset,c
, sampai akhir string, dan kemudian finalc
karakter dari awal.Contoh:
sumber
v[2]
adalah"1"
, kode hanya output string tanpa modifikasi apapun. Dan hanya"~~~"
dan"12345"
karya. Sisanya memberikan output yang salah. Jika semuanya dirotasi sekali lagi, pasti sudah diperbaiki.main(a,v,n)
->n;main(a,v)
) berdentang di linux dan berfungsi seperti yang diharapkan. Untuk gcc saya menggunakan versi 5.1.0 dan kompilasi dengangcc -o rotstr rotstr.c
. Kompiler apa yang Anda gunakan?n
global juga. Masalah yang sama. Saya dikompilasi menggunakangcc file.c -o file
. Saya menggunakan GCC 4.8.1 di windows. Apakah ada perilaku yang tidak terdefinisi dalam kode Anda?v[2]-v[1]-1
denganstrlen(v[1])
mungkin membuat perbedaan, itulah satu-satunya tempat saya bisa memikirkan sesuatu yang halus terjadi. Sayangnya saya tidak memiliki akses ke mesin windows untuk menguji.Python 3, 45 byte
Inti dari program ini adalah
Semua yang lain hanyalah pekerjaan yang canggung dengan I / O.
sumber
ABA 17
kasus uji terakhir , dan akan secara umum jika|n| > length of string
n=int(input())%len(s);
, itu akan bekerja untuk bilangan bulat lebih besar dari panjang string, tetapi membutuhkan 7 karakter lebihK,
87 byteSudah ada "putar" primitif (
!
) yang melakukan generalisasi operasi ini untuk daftar. String K adalah daftar karakter, jadi itu berlaku. Namun, spec lebih menyukai CJam dan Pyth, karena rotate K kebetulan bergerak berlawanan arah dengan apa yang diinginkan. Membungkus!
fungsi dan meniadakan argumen implisitx
akan melakukan apa yang kita inginkan:Pendekatan yang sedikit lebih pendek, yang disarankan oleh kirbyfan64sos, adalah menghilangkan tanda kurung dan negasi untuk membalikkan string (
|
) sebelum dan sesudah rotasi.Jika bukan karena ketidakcocokan impedansi ini, solusinya akan sederhana
Disebut secara identik:
sumber
|
, memutarnya, dan membalikkannya lagi menghasilkan hasil yang sama? Jika demikian, Anda dapat memotong satu karakter.Pip, 10 byte
Ini sangat mungkin ditingkatkan lebih lanjut. Namun, untuk bahasa tanpa operator shift, 10 byte tidak buruk.
Penjelasan:
Ia bekerja karena tali dan daftar indeks di Pip adalah siklus:
"Hello"@9 == "Hello"@4 == "o"
.sumber
rs , 180 chars
Demo langsung .
Sebagian besar dari ini membalikkan string jika angka input negatif. Saya mengambil keuntungan dari kenyataan bahwa hanya beberapa karakter ASCII yang inputnya valid dan menggunakan tab untuk keuntungan saya.
Perhatikan bahwa saya harus sedikit curang: karena rs adalah pengubah teks baris tunggal, saya harus menggunakan
<number> <text>
sebagai format input.sumber
Jawa, 167
Mengambil input melalui baris perintah.
cukup lucu, awalnya saya tidak sengaja membalikkan bagaimana string seharusnya digeser. Tetapi memperbaiki kesalahan itu lebih pendek dengan hanya mengalikan n dengan -1 lalu menulis logika dengan benar.
diperluas:
sumber
enum S{; ... }
?enum
s dapat digunakan seperti ini!Integer.parseInt
dapat berupanew Integer
(-5 byte); dann%=l;
dapat dihapus jika Anda mengubahr[0].substring(n)+
ker[0].substring(n%=l)+
(-2 byte). Juga, Anda mungkin ingin menentukan ini adalah Java 6, karena di Java 7 atau lebih tinggi enum denganmain
-method tidak lagi mungkin.PHP> = 7.1, 88 Bytes (Tidak Bersaing)
Testcases
sumber
Japt , 2 byte
Cobalah online
sumber
Casio Basic, 27 byte
Ternyata, ada built-in untuk ini di Casio ClassPad! Tapi itu bekerja secara terbalik
-n
.24 byte untuk kode, 3 byte untuk ditentukan
s,n
sebagai argumen.sumber
05AB1E , 6 byte
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
Karena 05AB1E hanya memiliki builtin untuk Rotate satu kali ke kanan / kiri , dan bukan Rotate
N
jumlah ke kanan / kiri , saya memutarlength + input
jumlah kali dan memutar itu berkali-kali ke arah kanan.Sebagai contoh:
10 + -3 = 7
kali ke kanan, menghasilkanting...Tes
.11 + 5 = 16
kali ke kanan, menghasilkanworldHello
.sumber
Julia 0,6 , 31 byte
Cobalah online!
sumber
Stax , 2 byte
Jalankan dan debug itu
sumber
Perl 5 +
-palF
, 26 byteCobalah online!
sumber