2 mins read

Putar dengan Modulo | julibloggers.com – Beragampengetahuan

Oleh: Jonathan Carroll

Re -Post dari:

Bagaimana Anda tahu operator dasar Anda dalam berbagai bahasa? ‘Mudah’
Contoh yang membantu memperkuat pengetahuan itu dan membandingkan antar bahasa
Untuk beberapa penemuan terperinci yang dilakukan dengan rapi.

Saya melihat ini dari @gregeganSF Di Mastodon

Diposting oleh @Gregegansf@Mathstodon.xyz

Lihat di Mastodon

Yang mengatakan

Untuk memutar huruf j dalam k dalam huruf k, jika n ≠ 10^j-1 memiliki formula sederhana:

Rot (n, j, k) = (n*10^k) mod (10^j-1)

Contoh 1234 * 100 mod 9999 = 3412

Mengapa? Mod yang dikurangi (10^j-1) berulang kali K kiri k n*10^k, lepaskan dari kiri dan tambahkan ke kanan.

Dan pikiran pertama saya adalah “ooh, hebat”, tetapi pikiran kedua saya adalah “saya
Akan melakukan ini dalam berbagai bahasa! Tentu saja, ini sedikit sangat kecil
Matematika yang harus dilakukan tanpa tepi tajam spesifik berulang/rekursif,
Tapi itu berarti saya akan bekerja dengan beberapa fungsi dasar dan saya percaya
Sangat penting untuk dikunci dalam kenyamanan. Lihat bagaimana itu terjadi!

Saya tidak tahu tentang nama Viking karena ini. Tuliskan sedikit desain

\[
rot(n, j, k) = (n\times10^k)\ \%\ (10^j-1)
\]

Tampaknya saya hanya membutuhkan ‘kekuatan’ dan ‘modulo’. Itu \ (J \) Memiliki
Jumlah digit \ (N \) Dan tentu saja, kita dapat menghitungnya sendiri dan mengatasinya
Argumen, tetapi bahkan lebih baik dapat menghitungnya bagus. Itu artinya
Cari tahu berapa banyak digit dalam angka.

Seperti biasa, Go Go adalah R, jadi mulailah dari sana.

Contents

R

Di R, operator listrik ^. Juga **Tapi itu hampir tidak pernah digunakan –
Bahkan ada catatan tentang hal itu dalam dokumen

** Diterjemahkan dalam proses analisis sintaksis ^Tetapi ini belum memiliki kertas selama bertahun -tahun.

Modulo adalah %% Tapi saya bisa tidak pernah Ingat karena mirip dengan bilangan bulat
Divisi itu %/%.

Untuk mendapatkan jumlah digit, kita bisa menggunakannya sebenarnya nchar() akan dikonversi terlebih dahulu
Inputnya pada vektor, dengan demikian 12345 menjadi "12345" dan begitulah
Jumlah karakter adalah jumlah digit. Jika bukan itu masalahnya
Saya masih bisa melakukannya

ceiling(log10(314159))
## [1] 6

Tetapi nchar() Pendekatannya tampak bagus. Tempatkan potongan -potongan itu menjadi satu
Fungsi untuk mendapatkan nomor dan jumlah tempat untuk memindahkannya, saya dapatkan

rot <- function(n, k) 
  (n*10^k) %% (10^nchar(n)-1)

rot(12345, 3)
## [1] 45123

Anda dapat melihat bahwa nilai ‘diputar’ dalam siklus dengan 3 posisi (kiri).

R tidak memiliki integrasi untuk mencapai ini bahkan untuk vektor nilai
(Memutar ‘digit’ bilangan bulat adalah masalah mainan yang tidak kompeten
Datang dalam situasi praktis). Salah satu solusi adalah milik saya
Paket VEC melakukan satu
Jenis Biffer memiliki efek pada vektor

# remotes::install_github("jonocarroll/vec")
library(vec)
v <- as_vec(1:5)
rotate(v, 3)
## [1] 4 5 1 2 3

Di bawah tudung ini menggunakan modulo indeks

x <- 1:5; n <- 3
x[(((n - 1 + seq_along(x)) %% length(x))) + 1]
## [1] 4 5 1 2 3

Fitur tambahan dari ini adalah bahwa ia juga membutuhkan nilai negatif untuk berubah dengan cara yang berbeda

rotate(v, -3)
## [1] 3 4 5 1 2

Sementara itu rot() Implementasi di atas tidak bisa.

Julia

Hampir selalu seperti itu, fungsi Julia terlihat lebih dekat dengan apa yang satu
mungkin mengharapkan orang lain dari matematika atau statistik; Operator daya masih ^Kemudian
Tapi operator modulo lebih akrab %. Ada kenyataan ndigits()
Fungsi untuk mendapatkan jumlah digit, seperti yang bisa saya katakan dari sumbernya,
Pertama tidak dikonversi menjadi karakter. Contoh untuk disorot fungsi itu
Salah satu pendekatan R gagal – jika suatu nilai negatif maka as.character() akan
Menghasilkan kesalahan numerik. Dalam R:

as.character(-1234)
## [1] "-1234"
nchar(-1234)
## [1] 5

Saat berada di Julia

ndigits(-1234)
## 4

Kami tidak berurusan dengan yang negatif di sini, tapi itu pasti gotcha.

Kinerja fungsi Julia dapat dilakukan dalam satu baris sehingga tidak perlu
function Kata kunci

rot(n,k) = (n*10^k) % (10^ndigits(n)-1)
## rot (generic function with 1 method)
rot(12345, 3)
## 45123

jika kita dulu Bekerja dengan vektor, Julia juga memiliki cara terintegrasi untuk melakukan
Siklus siklus, meskipun tampaknya berubah ke arah yang berlawanan

x = [1, 2, 3, 4, 5]
## 5-element VectorInt64:
##  1
##  2
##  3
##  4
##  5
circshift(x, -3)
## 5-element VectorInt64:
##  4
##  5
##  1
##  2
##  3
circshift(x, 3)
## 5-element VectorInt64:
##  3
##  4
##  5
##  1
##  2

Di sini mengakhiri bahasa algol posting, dan saya akan beralih ke beberapa
Bahasa -bahasa bahwa kegiatan ini bahkan lebih mendasar

Apl

Ketika saya melihat kegiatan matematika ‘sederhana’ pada angka, sekarang saya pikir apl karena
Itulah yang dibangun pada awalnya dan bekerja dengan sangat baik; Setiap matematika
Aktivitas yang dapat Anda lakukan pada serangkaian nilai dengan ‘Glyph’ mewakilinya
Oleh karena itu, itu harus menjadi ‘terjemahan’ matematika yang lebih baik di papan tulis langsung pada kode.

Satu hal yang akan segera dikenali pengguna adalah mesin terbang mesin terbang yang ditugaskan ; Benar
Itu adalah mesin terbang tunggal, bukan r dari <-Tapi itu bekerja sama seperti di R.

Mungkin Anda akrab dengan Glyph Nhan × dan tambahan +.
Power/Exponent Glyph adalah *. Tidak ada yang terlalu mengejutkan di sana, saya harap.

Karena - Ini adalah kegiatan ‘minus’, memiliki mesin terbang terpisah untuk ‘negatif’
¯ (Segel bata dinaikkan) sehingga tidak bingung dengan pengurangan. Modulo mengambil beberapa
Tambahkan inspirasi dari matematika dan |. Satu -satunya orang yang memiliki kemampuan membingungkan lainnya
Mesin terbang memiliki panjang dan format Nah, saat menggabungkan, melakukan sesuatu dengan sangat baik
Mirip dengan r dari r berapa banyak karakter yang digunakan? Sekali lagi ‘nomor negatif’
Masalahnya ada di sini, tetapi kami tidak khawatir tentang hal ini dalam hal ini.

Satukan potongan -potongan itu membutuhkan mengetahui bahwa Hakim APL dari kanan ke kiri,
Dengan hak atas hak operator dalam fungsi “” ditunjukkan oleh
Omega () dan orang kiri adalah alfa (). Fungsi yang saya berikan
Dengan ini terlihat seperti ini

    rot←⍵×10*⍺

Mungkin saja dapat diperpendek atau ditingkatkan; Saya cenderung
Untuk melewatkan tempat di mana tanda kurung benar -benar diperlukan dan kesempatan
Menyederhanakan. Namun, jika Anda membaca perlahan ke kiri, itu akan mengeja
Hitung yang kami inginkan. Menerapkannya pada beberapa nilai berarti menempatkannya di antara dua
membantah

    3 rot 12345
45123

Cobalah sendiri!

Sebagian besar kesulitan yang saya temui saat membangun ini berurusan dengan pesanan
Itu harus menjadi kanan ke kiri. Ada banyak cara untuk ‘menukar’ urutan argumen
ke fungsi (seperti modulo) untuk membuatnya dibaca dengan cara yang sama
Ekspresi, tetapi keduanya saya tidak bisa mendapatkannya untuk membuat jawaban yang benar dan tidak
Merasa itu perlu.

Dalam hal bekerja dengan vektor, di situlah APL bersinar. Pemintalan
Mesin terbang Tetapi hanya ketika diberikan hanya satu argumen yang berlawanan vektor, tetapi untuk sesaat
Argumen persis yang kami inginkan; Diputar oleh banyak tempat

    x←1 2 3 4 5
    3 ⌽ x
4 5 1 2 3

Jika Anda tidak terlihat terlalu dekat jenis data, kita dapat menggunakan ini untuk berputar
String yang terbuat dari nomor karakter dengan menggunakan format Untuk membuat vektor
karakter dari angka

    3 ⌽ ⍕12345
45123

(Ruang putih di sini sepenuhnya untuk tampil; 3⌽⍕12345 aktivitas yang sama).

UIUA adalah bahasa yang jauh lebih baru yang mendukung operasi data,
Tetapi bekerja secara berbeda dengan semua hal di atas; Itu adalah bahasa berdasarkan tumpukan
Anda bekerja dengan data pada tumpukan, bukan variabel. Saya bermain -main dengannya dan
Sangat suka bekerja dengannya – bahkan satu
Memantau latihan sekarang – tetapi dalam mencoba
Untuk menulis solusi ini, saya menyadari bahwa saya hanya bekerja dengan ‘hal’
Tumpukan, bahkan jika itu adalah seluruh vektor nilai. Masalah ini mengundang kita
Untuk bekerja dengan nilai berputar Dan Berapa banyak tempat untuk memutarnya; hal itu
Itu artinya saya belajar satu banyak Tentang mencari tahu nilai apa dari tumpukan yang saya inginkan.

Mengimpor operator di UIUA sangat dikurangi dengan terjemahan dan
Penyelesaian otomatis; Anda tidak perlu menemukan cara untuk masuk Anda bisa mulai mengetik
mod Dan selama itu adalah satu penyelesaian, UIUA akan mengubahnya menjadi
Glyph sesuai. Selain itu, ada beberapa prosedur format seperti yang diambil
Ganda ganda yang dihilangkan menjadi fungsi untuk membuat mesin terbang yang dikombinasikan dengan pra -penetapan
nilai; log__10 menerjemahkan ₙ₁₀.

Operator yang saya butuhkan di sini adalah modulo inti ×kekuatan log10 ₙ₁₀Kemudian
langit-langit dan kecuali -Dengan tambahan tertanam Penggunaan kedua
Nilai pada tumpukan dan ke belakang ˜ Untuk bertukar argumen modulo. Saya tidak bisa
Segera pikirkan cara untuk mendapatkan jumlah nilai (saya lakukan
Nanti, saya akan kembali) jadi saya pergi log10 Rute dan solusi saya adalah
(Sekali lagi, kiri kanan)

3 12345
˜◿⊙(-1˜ⁿ10⌈ₙ₁₀)⊸טⁿ10
45123

Cobalah sendiri!

Bekerja dengan vektor juga jauh lebih bersih di sini, dan ada rotasi sederhana
Itu seperti apl

↻ 3 [1 2 3 4 5]
[4 5 1 2 3]

Membaca ini, vektor ditempatkan di tumpukan, kemudian nilai 3 ditempatkan
Puncak tumpukan, lalu memutar dua nilai dari tumpukan dan implementasi
Beroperasi, meninggalkan nilai (hasil) di tumpukan.

UIUA juga memiliki fitur yang benar -benar menarik dari aktivitas lengkap, termasuk terbalik
Dapat dihitung. Jika saya ingin mengubah string menjadi angka, saya akan menggunakan analisis sintaksis
Dan saya bisa melakukan yang sebaliknya dengan uang itu dengan PBB ° Untuk membuat “tidak bisa dibedakan”
Itu mengubah beberapa menjadi string. Karena string hanyalah vektor
Karakter (dalam hal ini adalah digit) siklus operasi alami, meskipun kembali satu
tali

↻ 3 °⋕ 12345
"45123"

Uiua pergi satu langkah lagi dengan satu Dapatkan beberapa nilai, implementasikan
Beberapa konversi, menerapkan fungsi, lalu Membatalkan Transformasi itu. Dalam diriku
Dalam hal ini, saya ingin “tidak membedakan kemudian mengatur ulang”, ini tampaknya sangat cocok untuk ini

⍜°⋕(↻ 3) 12345
45123

Dan mengembalikan angka lagi, karena di belakang aplikasi konversi parse.

Tidak bisa dibedakan °⋕ Diakui sebagai senyawa dan disahkan sebagai argumen pertama
Tinggalkan di bawah, sementara saya perlu berputar dan 3 untuk mengikuti tanda kurung. Jika saya
Selalu ingin berubah karena 3 tempat saya bisa menggunakan pakaian dalam untuk ‘melampirkan’
itu 3 memutar rotate__3 ↻₃ Tapi apa yang saya miliki di atas memungkinkan
Ubah nomor itu.

Melihatnya dengan cara ini, jelas bahwa saya bisa mendapatkan jumlah digit
dengan lengthunparse SETARA ⧻°⋕Tetapi temukan cara untuk pergi jauh
Benar -benar berharga dan tidak harus lebih lama ceilinglog__10 SETARA ⌈ₙ₁₀.


Saya tahu saya akan menemukan banyak hal menarik ketika saya melihat ini dan saya benar – adil
Luangkan waktu untuk melalui dokumen fungsi ‘dasar’ ini
Ingatkan saya tentang apa yang saya lupa dan beberapa hal baru yang saya pikir saya tidak tahu
sebelum.

Saya ingin mendengar apa yang dipikirkan orang tentang perbandingan ini – apakah ada gunanya
Dilapisi? Seberapa baik melakukannya? Fungsi yang berbeda dalam beberapa bahasa lain?
Apa pertimbangan yang saya lewatkan? Seperti biasa, saya dapat ditemukan di atas
Mastodon dan bagian komentar di bawah ini.

Devtools :: session_info ()
## ─ Session info ───────────────────────────────────────────────────────────────
##  setting  value
##  version  R version 4.4.1 (2024-06-14)
##  os       macOS 15.4.1
##  system   aarch64, darwin20
##  ui       X11
##  language (EN)
##  collate  en_US.UTF-8
##  ctype    en_US.UTF-8
##  tz       Australia/Adelaide
##  date     2025-05-03
##  pandoc   3.4 @ /Applications/RStudio.app/Contents/Resources/app/quarto/bin/tools/aarch64/ (via rmarkdown)
## 
## ─ Packages ───────────────────────────────────────────────────────────────────
##  package     * version    date (UTC) lib source
##  blogdown      1.19       2024-02-01 [1] CRAN (R 4.4.0)
##  bookdown      0.41       2024-10-16 [1] CRAN (R 4.4.1)
##  bslib         0.8.0      2024-07-29 [1] CRAN (R 4.4.0)
##  cachem        1.1.0      2024-05-16 [1] CRAN (R 4.4.0)
##  cli           3.6.4      2025-02-13 [1] CRAN (R 4.4.1)
##  devtools      2.4.5      2022-10-11 [1] CRAN (R 4.4.0)
##  digest        0.6.37     2024-08-19 [1] CRAN (R 4.4.1)
##  ellipsis      0.3.2      2021-04-29 [1] CRAN (R 4.4.0)
##  evaluate      1.0.3      2025-01-10 [1] CRAN (R 4.4.1)
##  fastmap       1.2.0      2024-05-15 [1] CRAN (R 4.4.0)
##  fs            1.6.5      2024-10-30 [1] CRAN (R 4.4.1)
##  glue          1.8.0      2024-09-30 [1] CRAN (R 4.4.1)
##  htmltools     0.5.8.1    2024-04-04 [1] CRAN (R 4.4.0)
##  htmlwidgets   1.6.4      2023-12-06 [1] CRAN (R 4.4.0)
##  httpuv        1.6.15     2024-03-26 [1] CRAN (R 4.4.0)
##  jquerylib     0.1.4      2021-04-26 [1] CRAN (R 4.4.0)
##  jsonlite      2.0.0      2025-03-27 [1] CRAN (R 4.4.1)
##  JuliaCall     0.17.6     2024-12-07 [1] CRAN (R 4.4.1)
##  knitr         1.48       2024-07-07 [1] CRAN (R 4.4.0)
##  later         1.4.1      2024-11-27 [1] CRAN (R 4.4.1)
##  lifecycle     1.0.4      2023-11-07 [1] CRAN (R 4.4.0)
##  magrittr      2.0.3      2022-03-30 [1] CRAN (R 4.4.0)
##  memoise       2.0.1      2021-11-26 [1] CRAN (R 4.4.0)
##  mime          0.12       2021-09-28 [1] CRAN (R 4.4.0)
##  miniUI        0.1.1.1    2018-05-18 [1] CRAN (R 4.4.0)
##  pkgbuild      1.4.7      2025-03-24 [1] CRAN (R 4.4.1)
##  pkgload       1.4.0      2024-06-28 [1] CRAN (R 4.4.0)
##  profvis       0.4.0      2024-09-20 [1] CRAN (R 4.4.1)
##  promises      1.3.2      2024-11-28 [1] CRAN (R 4.4.1)
##  purrr         1.0.4      2025-02-05 [1] CRAN (R 4.4.1)
##  R6            2.6.1      2025-02-15 [1] CRAN (R 4.4.1)
##  Rcpp          1.0.14     2025-01-12 [1] CRAN (R 4.4.1)
##  remotes       2.5.0      2024-03-17 [1] CRAN (R 4.4.1)
##  rlang         1.1.5      2025-01-17 [1] CRAN (R 4.4.1)
##  rmarkdown     2.28       2024-08-17 [1] CRAN (R 4.4.0)
##  rstudioapi    0.17.1     2024-10-22 [1] CRAN (R 4.4.1)
##  sass          0.4.9      2024-03-15 [1] CRAN (R 4.4.0)
##  sessioninfo   1.2.2      2021-12-06 [1] CRAN (R 4.4.0)
##  shiny         1.9.1      2024-08-01 [1] CRAN (R 4.4.0)
##  urlchecker    1.0.1      2021-11-30 [1] CRAN (R 4.4.0)
##  usethis       3.1.0.9000 2025-03-31 [1] Github (r-lib/usethis@a653d6e)
##  vctrs         0.6.5      2023-12-01 [1] CRAN (R 4.4.0)
##  vec         * 0.1.0      2025-01-07 [1] Github (jonocarroll/vec@595b07e)
##  xfun          0.51       2025-02-19 [1] CRAN (R 4.4.1)
##  xtable        1.8-4      2019-04-21 [1] CRAN (R 4.4.0)
##  yaml          2.3.10     2024-07-26 [1] CRAN (R 4.4.0)
## 
##  [1] /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library
## 
## ──────────────────────────────────────────────────────────────────────────────

Software Terbaru Saat Ini



Aplikasi yang sedang trend saat ini

object oriented programming, programming language, programming adalah, web programming, belajar programming, tournament software, software, software adalah, contoh software, apa itu software, pengertian software, aplikasi, aplikasi penghasil uang, aplikasi bokep, aplikasi video, programming

#Putar #dengan #Modulo #julibloggers.com

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *