Cara terpendek untuk membalikkan angka


31

Tulis fungsi (atau subprogram setara) untuk menerima argumen bernilai integer tunggal dan mengembalikan nilai (yang diketik serupa) yang ditemukan dengan membalikkan urutan angka dasar-10 argumen.

Misalnya diberikan 76543 pengembalian 34567


6
Kembali ke waktu angkanya adalah string, lalu balikkan string
pmg

2
Gagasan "algoritma terpendek" agak membingungkan, terutama jika Anda mengizinkan "bahasa apa pun." Pikirkan algoritma, dan saya akan memberi Anda DSL dengan operator "~" yang tepat ...

3
Hanya pemberitahuan: angka apa pun yang diakhiri dengan 0 menjadi angka yang lebih pendek saat dibalik ...
powtac

44
Saya tahu sebuah algoritma yang tidak membutuhkan waktu sama sekali , tetapi hanya bekerja pada nomor palindrom;)
schnaader

Saya menemukan waktu untuk menulis ulang sendiri. Saya harap ini tetap menjadi teka-teki yang dimaksudkan oleh pose eltond.
dmckee

Jawaban:


85

HTML 21 7 karakter (1 karakter jika saya kurang ajar ...)

‮n

ganti ndengan nomor Anda


1
Ini benar-benar jenius. Saya akan pergi untuk satu char. Atau 2, karena disandikan ke dua byte di UTF-16: P
tomsmeding

17
Hahaha saya melakukan pencarian Google pada tag itu dan dihargai dengan Your search -‮ - tidak cocok dengan dokumen apa pun.
JoeFish

Anda dapat mencoba tautan ini di browser:data:text/html,&%238238;egnahcxEkcatS olleH
F. Hauri

3
Lucu di google transate juga. @ Joefish: Saya tidak bisa mereproduksi, silakan kirim tautan!
F. Hauri

1
@ Joefish Ketika saya melihat komentar, nama pengguna Anda terbalik dan ada beberapa teks setelahnya. txet emos si ereH
Stefnotch

32

Python

int(str(76543)[::-1])

EDIT:

Solusi yang lebih pendek seperti yang disarankan oleh @gnibbler:

int(`76543`[::-1])

atau, jika di atas tidak jelas:

x=76543
int(`x`[::-1])

4
s[::-1]jauh lebih cepat daripada''.join(reversed(s))
riza

4
Anda dapat menggunakan backticks (untuk repr) daripada menggunakan str
gnibbler

@gnibbler Terima kasih atas sarannya. Saya telah memperbarui jawaban saya.
Vader

2
TBH, itu bukan fungsi / proses / apa pun yang Anda ingin menyebutnya, dan spesifikasi memerlukannya.
Thomas Eding

Juga, ia bahkan tidak menerima nilai ...
Exelian

28

Universal (bahasa agnostik / mandiri )

Jika Anda hanya ingin menggunakan angka (hindari mengubah angka menjadi string) dan tidak ingin menggunakan perpustakaan tertentu (menjadi universal untuk bahasa apa pun):

x = 76543 # or whatever is your number
y = 0
while x > 0:
    y *= 10
    y += ( x %10 )
    x /= 10 # int division 

Ini adalah python, tetapi bisa dilakukan dalam bahasa apa pun, karena itu hanya metode matematika.


Jika Anda menggantinya moddengan %, itu valid Python;)
phihag

Anda benar, sebenarnya :) 10x

3
Bukan yang terpendek, tetapi yang paling umum dan universal.
Kiril Kirov

3
y=y*10+x%10....
st0le

1
BrainFuck tidak, meskipun bisa dihitung. Bahasa apa pun yang tidak memilikinya dapat digunakan a - (n * int(a/n))sebagai ganti a mod n. Juga, jika Anda melihat di sini , operasi modulus diimplementasikan secara berbeda di setiap bahasa. (Lihat tabel di sebelah kanan.)
mbomb007

13

Perl 6

+$n.flip

atau:

$n.flip

untuk kode yang diketik secara dinamis.

Bilangan mendapat metode string karena desain bahasa.


10

J - 6 karakter + variabel

".|.":y

Di mana y adalah nilai Anda.


2
Sebagai fungsi: |.&.":"reverse under do" yang merupakan terjemahan tugas yang cukup banyak.
FireFly

9

APL (3)

⍎⌽⍕

Pemakaian:

⍎⌽⍕12345 => 54321

8

PHP, 9 karakter

(int)strrev(123);

Untuk melakukannya singkat di mana Nkonstan:

strrev(N)

8

Befunge (3 karakter)

Program runnable lengkap:

N.@

Di mana Nnomor Anda. Aturan mengatakan "terima argumen bernilai integer tunggal "; Di Befunge Anda hanya dapat memasukkan bilangan bulat dari 0 hingga 9.


3
Itu adalah satu-satunya literal , tetapi angka-angka lain pasti bisa diwakili. Kalau tidak, jawaban yang menang adalah Brainfuck dengan program kosong. ;-)
FireFly

8

Bahasa-independen / matematika

Terinspirasi oleh jawaban Kiril Kirov di atas. Saya ingin tahu tentang sifat-sifat matematika membalik angka, jadi saya memutuskan untuk menyelidiki sedikit.

Ternyata jika Anda merencanakan perbedaan n - rev(n)untuk bilangan asli ndi beberapa basis r, Anda mendapatkan pola seperti ini ( (n - rev(n)) / (r - 1), untuk r=10, dibungkus rkolom, merah menunjukkan angka negatif):

tabel perbedaan

Urutan ini dapat dihasilkan seperti itu (pseudocode):

for i=1 to r:
  output 0

for m=0, 1, …
  for k=1 to (r-1):
    for d=1 to r^m:
      for i=0 to (r-1):
        output (r-1) * (r+1)^m * (k - i)

Jika Anda menyimpan nilai-nilai ini dalam daftar / array, maka Anda n - arr[n]akan mendapatkan bentuk terbalik dari n. Sekarang, untuk "golf matematis" ini, kita idealnya menginginkan ekspresi bentuk tertutup yang memberi kita nilai n: urutannya, sehingga kita bisa memiliki ekspresi bentuk tertutup untuk menyelesaikan seluruh tugas. Sayangnya, saya belum dapat menemukan ekspresi seperti itu ... tetapi kelihatannya itu mungkin. :(

Jadi ya, bukan kode-golf sebagai keingintahuan matematis, tetapi jika ada ekspresi bentuk tertutup dari urutan di atas mungkin sebenarnya berguna dalam pengiriman golf PL yang tepat.


7

Haskell, 28 24 karakter

f=read.reverse.show.(+0)

2
Bagaimana dengan f=read.reverse.show.(+0)?
FUZxxl

2
(+0): Manusia yang sah! Meskipun secara teknis Anda tidak memerlukannya .(+0)sama sekali, karena fakan lebih polimorfik daripada yang dibutuhkan oleh masalah (diizinkan untuk mengembalikan output yang 'diketik dengan cara yang sama'). Saya akan mencukur 5 karakter tersebut.
Thomas Eding

7

Vim

17 karakter

:se ri<CR>C<C-R>"

Saya akan mengatakan itu 10 karakter (penekanan tombol) jika Anda mengetik perintah langsung di vim. Btw, saya belajar sesuatu yang baru di vim hari ini, terima kasih :)
daniero

6

Scala - 33 Chars

def r(a:Int)=(a+"").reverse.toInt

1
+1 untuk scala, senang melihat sesuatu selain python / ruby ​​/ perl
lhk

Ini akan gagal pada Int negatif. -123 harus mengembalikan -321
samach

6

Ruby (14)

x = 13456
x.to_s.reverse

3
"Tidak" tidak ditentukan. Saya pikir Anda bermaksud meletakkan "x" di sana.
David Rivers

3
123456.to_s.reverse bahkan lebih pendek.
Steffen Roller

@mmdemirbas - terima kasih telah memperbaiki kesalahan ketik
Tubuh

3
Perlu .to_s.reverse.to_imematuhi spesifikasi.
histokrat

Angka yang dimulai dengan 0 sepertinya tidak berfungsi. 0112.to_s.reverse.to_i => 47
Joel

5

Dimungkinkan untuk mengubah angka menjadi string, kemudian membalikkan string dan kemudian mengubah string itu kembali ke angka. Fitur semacam ini mungkin tersedia dalam semua bahasa. Jika Anda mencari metode yang lebih matematis maka ini mungkin membantu:

int n = 76543;
int r = 0;

while (n > 0) {
    r *= 10;
    r += n % 10;
    n /= 10;
}

5
Milik saya benar-benar sama (:

Ya, satu-satunya perbedaan adalah kode Anda terlihat seperti Python.

Metode ini meluap pada bahasa dengan presisi terbatas. coba1111111119
st0le

5

Python 3+

Bentuk fungsi: 28 karakter

r=lambda i:int(str(i)[::-1])

(Sub) formulir program: 25 karakter

print(input()[::-1])

Saya menganggap beberapa contoh Python lain sebagai curang, atau setidaknya murah, karena menggunakan input hardcoded dan / atau tidak sepenuhnya memenuhi persyaratan.


5

Golfscript, 5 karakter

`-1%~

Ini mengambil argumen pada stack dan meninggalkan hasilnya di stack. Saya mengeksploitasi opsi "subprogram" di spec: jika Anda bersikeras pada suatu fungsi, itu empat karakter lebih meninggalkannya di stack:

{`-1%~}:r

Saya pikir Anda pasti memaksudkan `-1%~daripada `-1$~(dan saya telah mengambil kebebasan mengedit jawaban Anda untuk mengatakan demikian).
Ilmari Karonen

5

Dalam skrip shell:

  echo "your number"|rev

Semoga ini bermanfaat :)


bagus tidak tahu bash mampu melakukan itu juga!
Pranit Bauva

1
Saya kira secara teknis tidak mengembalikan sama-mengetik "jumlah" ... bisa dipersingkat lebih lanjut dengan rev<<<yournumber, misalnya rev<<<132(untuk bash / zsh, bukan per POSIX meskipun)
FireFly

1
Hanya revcukup, pertanyaan tidak mengatakan itu memiliki menjadi fungsi. Anda dapat membandingkan revdengan fungsi bawaan, meskipun bukan satu.
nyuszika7h

ini tidak valid: 'rev' bukan builtin, tetapi panggilan program eksternal.
Bastian Bittorf

67 Bytes shell POSIX murni: X = $ 1; sementara [$ X! = 0]; lakukan Y = $ ((Y * 10 + X% 10)); X = $ ((X / 10)); selesai; echo $ Y
Bastian Bittorf

3

Agak terlambat tapi

APL, 3

⍎⌽⍞

Jika Anda bersikeras pada fungsi

⍎∘⌽∘⍕

Yah sepertinya saya tidak bisa menemukan duplikat di atas ... (karena itu berada di halaman ke-2)
TwiNight

Saya sedih, bahwa tidak ada yang memberikan solusi brainfu * k atau whitespace :( (satu suara lagi dan Anda ada di halaman pertama)
Kiril Kirov

@ KirilKirov Saya punya solusi brainfu * k: codegolf.stackexchange.com/a/32826/24829
rpax

3

Mathematica, 14 byte

IntegerReverse

Ini tidak bersaing, karena fungsi ini hanya ditambahkan pada rilis 10.3 minggu lalu, tetapi untuk kelengkapan saya pikir saya akan menambahkan satu-satunya (saya pikir?) Built-in untuk tugas ini.


2

Anda dapat melakukan hal berikut di Jawa. Perhatikan bahwa ini dikonversi ke String dan kembali dan bukan solusi matematika.

public class test {
    public static int reverseInt(int i) {
        return Integer.valueOf((new StringBuffer(String.valueOf(i))).reverse().toString());
    }

    public static void main(String[] args) {
        int i = 1234;
        System.out.println("reverse("+i+") -> " + reverseInt(i));
    }
}

2
Ini adalah solusi matematika. Matematika bukan angka bukan aritmatika. Matematika juga berurusan dengan rangkaian simbol. Dan dalam kasus khusus ini, konversi ke dan dari string hanya konversi ke dan dari basis-10.
R. Martinho Fernandes

Yang saya maksudkan dengan "bukan solusi matematis" adalah kita tidak mengerjakan matematika sendiri. Metode melakukan semua parsing dan matematika untuk kita. Berbeda dengan misalnya jawaban Kiril Kirov.
Victor

Will Overflow ...
st0le

2

Lua

Angka dan string dapat dipertukarkan, jadi ini sepele

string.reverse(12345)

2

Yang ini SEBENARNYA mengambil input, tidak seperti yang lain:

print`input()`[::-1]

Python btw.


2

Actionscript

43 karakter. num sebagai parameter ke fungsi:

num.toString().split('').reverse().join('')

2

Asyik

r={"$it".reverse() as BigDecimal}

assert r(1234) == 4321
assert r(345678987654567898765) == 567898765456789876543
assert r(345346457.24654654) == 45645642.754643543

2

Perl, 11 karakter

The pflag diperlukan untuk ini untuk bekerja, masuk dalam hitungan.

Pemakaian:

$ echo 76543 | perl -pE '$_=reverse'

Saya menghitung 10 karakter
F. Hauri

The pbendera masuk dalam hitungan
Zaid

2

Clojure (42 karakter)

#(->> % str reverse(apply str)read-string)

Contoh penggunaan:

(#(->> % str reverse(apply str)read-string) 98321)

mengembalikan 12389


2

Lisp umum - 60 karakter

(first(list(parse-integer(reverse(write-to-string '4279)))))

akan membuat Anda 9724.


Mengapa (first(list? parse-integersudah mengembalikan nomornya.
Florian Margaine

2

K, 3 byte:

.|$

Evaluate ( .) kebalikan ( |) dari casting ke string ( $).

Contoh penggunaan:

  .|$76543
34567

2

rs , 20 byte

#
+#(.*)(.)/\2#\1
#/

Secara teknis, ini tidak masuk hitungan (rs dibuat awal tahun ini), tapi saya tidak melihat jawaban berbasis regex lain, dan saya pikir ini rapi.

Demo langsung.

Penjelasan:

#

Masukkan karakter pon di awal string. Ini digunakan sebagai penanda.

+#(.*)(.)/\2#\1

Terus tambahkan karakter terakhir dari string utama ke area sebelum marker hingga tidak ada karakter yang tersisa.

#/

Hapus penanda.


2

mIRC 4,45 (35 Bytes)

$regsubex(12,/(.)/g,$mid(\A,-\n,1))
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.