Untuk "bergeser" ke sejumlah n
tempat, lakukan hal berikut:
- Hapus
n
digit terakhir - Tambahkan
n
salinan digit pertama ke awal nomor
Misalnya, untuk menggeser nomor 31415
tiga tempat, ambil tiga digit terakhir untuk mendapatkan 31
, dan kemudian tambahkan tiga salinan dari digit pertama 3
,, hingga akhir, memberi 33331
.
Jika angka negatif, digit harus diambil dari kiri, dan digit pertama harus "diisi" dari kanan. Misalnya, string 31415
bergeser lebih dari -3 memberi tempat 15555
.
Jika angkanya 0, tidak ada perubahan yang harus dilakukan.
Jika pergeseran lebih dari panjang program, maka digit yang diisi mungkin mulai dihapus. Ini berarti bahwa jika jumlah yang diberikan lebih dari panjang string, tidak ada perubahan lebih lanjut akan dilakukan setelah seluruh string menjadi satu digit.
Tantangan
Diberi dua angka, n
dan s
, kembali n
bergeser s
tempat.
Uji kasus
n, s -> result
7243, 1 -> 7724
452, -1 -> 522
12, 1 -> 11
153, 4 -> 111
Ini adalah kode-golf , sehingga pengiriman terpendek yang valid (diukur dalam byte) menang.
Jawaban:
APL (Dyalog) , 32 byte
Fungsi anonim yang mengambil saringan sebagai argumen kiri dan nomor (sebagai string) sebagai argumen benar.
Cobalah online!
{
fungsi anonim di mana ⍺ dan ⍵ adalah argumen kiri dan kanan|⍺
nilai absolut dari pergeseran tersebuta←
simpan di a⋄
kemudian⌽⍵
balikkan nomornya⊃
pilih digit pertama (yaitu yang terakhir)a⍴
r bentuknya menjadi panjang a⍵,
tambahkan nomornya(
...),
tambahkan yang berikut:⊃⍵
digit pertamaa⍴
r bentuknya menjadi panjang a(
...)↓
jatuhkan jumlah karakter berikut:a-⍺
a minus shift(
...)↑
ambil jumlah karakter berikut:≢⍵
panjang nomor aslinyasumber
Python 2 , 50 byte
Cobalah online!
sumber
Haskell, 69 byte
Mengambil nomor sebagai string. Cobalah online!
Bagaimana itu bekerja:
sumber
MATL , 12 byte
Input adalah: nomor yang akan digeser sebagai string; jumlah pergeseran sebagai angka.
Cobalah online! Atau verifikasi semua kasus uji .
Input consisder
'452
dan'-1'
.sumber
J, 37 byte
Ini adalah salah satu situasi di J di mana kata kerja eksplisit sepertinya pilihan yang tepat (satu-satunya?), Tapi saya ingin tahu apakah ada penulisan ulang diam-diam tentang ini:
Kata kerja shift bawaan J memungkinkan Anda untuk mengonfigurasi karakter "isi":
Logika untuk menentukan apakah akan menggunakan karakter pertama atau terakhir sebagai karakter isi sangat mudah
Cobalah online!
sumber
J , 23 byte
Input n dan output adalah string yang berisi angka-angka.
Cobalah online!
Penjelasan
sumber
Retina , 61 byte
Cobalah online!
sumber
05AB1E , 16 byte
Cobalah online!
Penjelasan
sumber
Python 2 , 87 byte
Cobalah online!
Mengambil nomor sebagai string, dan menggeser sebagai integer. Mengembalikan string.
Saya mencoba menanamkan pembalikan di dalam fungsi daripada membuat panggilan rekursif, tetapi saya sepertinya tidak bisa melakukannya dengan benar.
sumber
Python 3 , 73 byte
Cobalah online!
sumber
Haskell , 108 byte
Oh well, ini menjadi lebih buruk dari yang saya kira ..
Cobalah online!
Tidak disatukan
sumber
Clojure, 121 byte
Aduh, tidak enak berurusan dengan input negatif juga.
sumber
Pyth, 28 byte
Cobalah online atau uji beberapa input
Penjelasan
sumber
05AB1E , 33 byte
Cobalah online!
05AB1E tidak begitu panas dengan kondisional.
sumber
JavaScript, 80 byte
Mengambil input sebagai representasi string dari angka dan jumlah "shift" numerik. Mengembalikan string.
Cuplikan Tes
sumber