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.
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 ...)
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.
Di mana Nnomor Anda. Aturan mengatakan "terima argumen bernilai integer tunggal "; Di Befunge Anda hanya dapat memasukkan bilangan bulat dari 0 hingga 9.
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):
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.
(+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.
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 :)
"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;
}
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.
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:
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
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.
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));
}
}
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
Jawaban:
HTML
217 karakter (1 karakter jika saya kurang ajar ...)ganti
n
dengan nomor Andasumber
Your search -
- tidak cocok dengan dokumen apa pun.data:text/html,&%238238;egnahcxEkcatS olleH
Python
int(str(76543)[::-1])
EDIT:
Solusi yang lebih pendek seperti yang disarankan oleh @gnibbler:
atau, jika di atas tidak jelas:
sumber
s[::-1]
jauh lebih cepat daripada''.join(reversed(s))
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):
Ini adalah python, tetapi bisa dilakukan dalam bahasa apa pun, karena itu hanya metode matematika.
sumber
mod
dengan%
, itu valid Python;)y=y*10+x%10
....a - (n * int(a/n))
sebagai gantia mod n
. Juga, jika Anda melihat di sini , operasi modulus diimplementasikan secara berbeda di setiap bahasa. (Lihat tabel di sebelah kanan.)Perl 6
atau:
untuk kode yang diketik secara dinamis.
Bilangan mendapat metode string karena desain bahasa.
sumber
J - 6 karakter + variabel
Di mana y adalah nilai Anda.
sumber
|.&.":
"reverse under do" yang merupakan terjemahan tugas yang cukup banyak.APL (3)
Pemakaian:
sumber
PHP, 9 karakter
Untuk melakukannya singkat di mana
N
konstan:sumber
Befunge (3 karakter)
Program runnable lengkap:
Di mana
N
nomor Anda. Aturan mengatakan "terima argumen bernilai integer tunggal "; Di Befunge Anda hanya dapat memasukkan bilangan bulat dari 0 hingga 9.sumber
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 aslin
di beberapa basisr
, Anda mendapatkan pola seperti ini ((n - rev(n)) / (r - 1)
, untukr=10
, dibungkusr
kolom, merah menunjukkan angka negatif):Urutan ini dapat dihasilkan seperti itu (pseudocode):
Jika Anda menyimpan nilai-nilai ini dalam daftar / array, maka Anda
n - arr[n]
akan mendapatkan bentuk terbalik darin
. 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.
sumber
Haskell,
2824 karaktersumber
f=read.reverse.show.(+0)
?(+0)
: Manusia yang sah! Meskipun secara teknis Anda tidak memerlukannya.(+0)
sama sekali, karenaf
akan lebih polimorfik daripada yang dibutuhkan oleh masalah (diizinkan untuk mengembalikan output yang 'diketik dengan cara yang sama'). Saya akan mencukur 5 karakter tersebut.Vim
17 karaktersumber
Scala - 33 Chars
sumber
Ruby (14)
sumber
.to_s.reverse.to_i
mematuhi spesifikasi.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:
sumber
1111111119
Python 3+
Bentuk fungsi: 28 karakter
(Sub) formulir program: 25 karakter
Saya menganggap beberapa contoh Python lain sebagai curang, atau setidaknya murah, karena menggunakan input hardcoded dan / atau tidak sepenuhnya memenuhi persyaratan.
sumber
Golfscript, 5 karakter
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:
sumber
`-1%~
daripada`-1$~
(dan saya telah mengambil kebebasan mengedit jawaban Anda untuk mengatakan demikian).Dalam skrip shell:
Semoga ini bermanfaat :)
sumber
rev<<<yournumber
, misalnyarev<<<132
(untuk bash / zsh, bukan per POSIX meskipun)rev
cukup, pertanyaan tidak mengatakan itu memiliki menjadi fungsi. Anda dapat membandingkanrev
dengan fungsi bawaan, meskipun bukan satu.Agak terlambat tapi
APL, 3
Jika Anda bersikeras pada fungsi
sumber
Mathematica, 14 byte
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.
sumber
Anda dapat melakukan hal berikut di Jawa. Perhatikan bahwa ini dikonversi ke String dan kembali dan bukan solusi matematika.
sumber
Lua
Angka dan string dapat dipertukarkan, jadi ini sepele
sumber
Yang ini SEBENARNYA mengambil input, tidak seperti yang lain:
Python btw.
sumber
Actionscript
43 karakter. num sebagai parameter ke fungsi:
sumber
Asyik
sumber
Perl, 11 karakter
The
p
flag diperlukan untuk ini untuk bekerja, masuk dalam hitungan.Pemakaian:
sumber
p
bendera masuk dalam hitunganClojure (42 karakter)
Contoh penggunaan:
mengembalikan 12389
sumber
Lisp umum - 60 karakter
akan membuat Anda 9724.
sumber
(first(list
?parse-integer
sudah mengembalikan nomornya.K, 3 byte:
Evaluate (
.
) kebalikan (|
) dari casting ke string ($
).Contoh penggunaan:
sumber
rs , 20 byte
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.
Terus tambahkan karakter terakhir dari string utama ke area sebelum marker hingga tidak ada karakter yang tersisa.
Hapus penanda.
sumber
mIRC 4,45 (35 Bytes)
sumber