Memberikan input sebagai integer yang tidak ditandatangani:
13457
Fungsi / subrutin Anda harus kembali:
75431
Karena ini adalah kontes popularitas, jadilah kreatif. Solusi kreatif menggunakan teknik yang tidak biasa atau pintar untuk menyelesaikan tugas yang diberikan.
Kendala:
- Anda tidak dapat menggunakan array.
- Anda tidak dapat menggunakan string.
- Tanpa RTL Override (
‮
)
Brownie poin untuk menggunakan aritmatika kreatif.
Karena ini adalah kontes popularitas, saya sarankan untuk tidak menggunakan %
operator modulo ( ) dalam kode Anda.
Tentang Leading nol:
Jika inputnya adalah:
12340
Maka hasilnya:
4321
akan diterima.
popularity-contest
duci9y
sumber
sumber
1230
inputnya? Apakah kita diizinkan untuk menghasilkan321
? (Kalau tidak, String perlu).Jawaban:
Mathematica, tanpa modulo!
Mari kita jabarkan.
Pertama-tama kita menggunakan beberapa "aritmatika kreatif" untuk mencari tahu berapa digit dalam angka:
length = Ceiling[Log[10, n]];
Selanjutnya, kami Rasterize nomor ke gambar besar yang bagus:
Sekarang kita kueri untuk kotak pembatas dari gambar itu, dan mengisi lebar dan tinggi (sebenarnya menggunakan offset dasar alih-alih tinggi gambar, karena MM menambahkan beberapa spasi putih di bawah garis dasar pada gambar).
Selanjutnya, NestList secara berulang mengurangi lebar gambar dibagi dengan panjang string untuk memungkinkan ImageTake memetik karakter dari ujung gambar satu per satu, dan itu disusun kembali oleh ImageAssemble ke gambar ini:
Kemudian kami meneruskannya ke fungsi TextRecognize untuk pengenalan karakter optik, yang pada ukuran gambar ini dan kualitas rasterisasi mampu mengenali hasil akhir tanpa cela dan memberi kami integer:
Logaritma dan OCR - Ini seperti cokelat dan selai kacang!
Baru dan ditingkatkan
Versi ini melengkapi nomor untuk berurusan dengan perilaku keras kepala dari TextRecognize dengan angka kecil, dan kemudian kurangi bantalan pada akhir. Ini bahkan berfungsi untuk angka satu digit!
Padahal, mengapa Anda menjalankan rutinitas terbalik pada satu nomor merupakan misteri bagi saya. Tetapi hanya demi kelengkapan, saya bahkan membuatnya bekerja untuk input nol dan satu, yang biasanya akan rusak karena log lantai tidak mengembalikan 1 untuk mereka.
sumber
TextRegognize
tidak berfungsi untuk jumlah kecil. Dan Anda salah ketikheight = b[[3]];
. Tolong periksa juga jawaban saya! :)TextRecognize
, adalah bahwa ia mengembalikan sebuah String, yang tidak diizinkan dan juga Anda perlu mengubahnya kembali ke angka.Perl / LuaTeX / Tesseract
Skrip Perl berikut membaca angka sebagai argumen baris perintah, misalnya:
1234567890
Script Perl berikut mencetak nomor melalui LuaTeX. Font virtual dibuat dengan cepat yang mencerminkan digit secara horizontal.
Kemudian seluruh angka dicerminkan secara horizontal:
Gambar terakhir dibaca ulang melalui OCR (tesseract):
0987654321
sumber
Brainfuck
Pada dasarnya, ini hanyalah program pembalikan input.
UPD: Seperti yang ditunjukkan oleh Sylwester dalam komentar, dalam penafsir / kompiler Brainfuck klasik (tanpa kemungkinan untuk pergi dari titik nol dalam susunan memori) program ini tidak akan berfungsi jika tidak ada '>' di awal, jadi semakin stabil versi adalah:
sumber
>
di awal untuk membuat nol sel sebelum data ini tidak akan berfungsi di banyak interpreter / kompiler.[.<]
tidak memiliki sel nol untuk berhenti karena itu dan akan gagal. Kesalahan daribf -n rev1.bf
adalahError: Out of range! Youwanted to '<' below the first cell.
. Jika Anda mengkompilasi Andasegfault
mungkin mendapatkan .,[.,]
Haskell
Tidak ada susunan, string, atau modulus.
Juga, saya tahu kita tidak seharusnya menggunakan daftar atau string, tetapi saya suka betapa singkatnya saat Anda melakukan itu:
sumber
C ++
sumber
?:
Saya kira seseorang harus menjadi partypooper.
Pesta
Batasan ukuran tergantung pada shell Anda, tetapi Anda akan baik-baik saja.
sumber
declare -i
. Bandingkanfoo=089
dandeclare -i foo=089
(nomor oktal yang tidak valid).Javascript
EDIT : Karena ada saran untuk tidak menggunakan
%
operator, saya menggunakan sedikit trik sekarang.Saya tahu ini bukan kode-golf, tetapi tidak ada alasan untuk membuatnya lebih lama.
r(13457)
kembali75431
Selain itu, ini jauh lebih cepat daripada metode string (
n.toString().split('').reverse().join('')
):==> Laporan JSPerf <==
sumber
~~
bukanMath.floor
?~~
alih-alihMath.floor
(perubahan yang disarankan oleh @Victor)Python
Tidak yakin apakah implementasi ini memenuhi syarat untuk matematika kreatif
Juga% operator tidak digunakan per se, meskipun orang mungkin berpendapat bahwa divmod melakukan hal yang sama, tetapi kemudian Pertanyaan perlu diulang :-)
Pelaksanaan
demo
Bagaimana cara kerjanya?
Ini adalah solusi divmod rekursif * Solusi ini menentukan digit paling signifikan dan kemudian mendorongnya ke akhir nomor. *
Namun Implementasi Python Lain
Bagaimana cara kerjanya?
Ini adalah solusi rekursif yang menukar angka ekstrim dari angka tersebut
Contoh Jalankan
sumber
Justru sebaliknya, terlalu sering menggunakan operator modulo:
Perhatikan bahwa ini selalu membalikkan 5 digit, dan bilangan bulat 32 bit akan melebihi nilai input lebih dari 39045.
sumber
C #
Inilah cara untuk melakukannya tanpa
%
operator Modulus ( ) dan hanya aritmatika sederhana.sumber
%
operator. :) Saya mengerti maksud Anda, teks saya agak menyesatkan.Pesta
sumber
C
Tidak ada string, array, modulus atau pembagian. Sebaliknya, pembagian dengan pengurangan berulang.
sumber
Mathematica
Membuat gambar dari angka, memantulkannya, mempartisinya menjadi digit. Lalu ada dua alternatif:
Bandingkan setiap gambar dari digit yang dipantulkan dengan gambar yang disiapkan sebelumnya, gantilah dengan digit yang sesuai dan buat nomor dari ini.
Refleksikan setiap digit secara terpisah, buat gambar baru, dan berikan ke fungsi pengenalan gambar.
Saya melakukan keduanya
EDIT : Menambahkan padding dari tiga nol, karena
TextRecognise
hanya berfungsi dengan benar dengan bilangan bulat> 999.sumber
Lua
Tidak ada array atau string yang digunakan. Nomor tersebut dibagi menjadi digit dan disusun kembali menggunakan daftar argumen.
sumber
%
! : PPython2
Diasumsikan "bilangan bulat bertanda" adalah 32-bit
Ketika diberi input
1230
, output0321
.sumber
"Since this is a popularity contest, I suggest not using the modulus (%) operator in your code."
Nota bene
Tanpa array, tanpa string, tanpa variabel.
Sama tanpa
mod
(yang hanya jalan pintas, jadi tidak ada perbedaan besar):sumber
C #
Ini tidak menggunakan string atau array, tetapi tidak menggunakan
Stack<T>
tipe NET. (EDIT: operator modulus awalnya digunakan; sekarang dihapus)sumber
C
Dalam hal solusi yang jelas diwakili dalam beberapa bahasa lain, mungkin juga mempostingnya dalam C.
Golf:
Tidak Disatukan:
EDIT: Baru saja melihat edit modulus.
Golf (tanpa modulus):
Tidak disatukan (tidak ada modulus):
sumber
Jawa
Ini adalah ini saya telah datang dengan, tidak ada string, tidak ada array ... bahkan variabel (di Jawa saya keberatan):
Sunting Versi yang lebih mudah dibaca
sumber
PowerShell
Solusi cepat di PowerShell. Tidak ada array atau string yang digunakan, baik secara implisit atau eksplisit.
Pengujian:
sumber
python (mudah dilakukan dalam perakitan)
Membalikkan bit byte. Poin untuk tidak melakukan hal yang sama persis seperti yang dilakukan orang lain?
contoh
sumber
C ++
KELUARAN
Tiga sampel berjalan
Uji dengan nol
Itu juga membalik angka mengambang !!!
Jika Anda ingin menjalankan kode ini maka jalankan di komputer Anda karena itu membuat file sementara selama waktu-nya dan saya tidak yakin apakah kompiler online akan membuat file sementara di komputer Anda
sumber
ECMAScript 6
Kemudian:
reverse(12345)
output54321
reverse(3240)
output423
reverse(6342975)
output5792436
sumber
Pembelahan
Program ini membalikkan input.
sumber
FORTH
Saya pikir ini kebalikan dari populer ... tetapi menggunakan Forth selalu kreatif ...Mari kita buat kata baru
Di sini, ia menggunakan kata U / yang mengembalikan sisa dan hasil bagi, sisanya dikirim ke output sebagai angka dalam panjang bidang 1 karakter, hingga dividen adalah nol. Tidak ada string yang digunakan, setidaknya sampai sesuatu dikirim ke video. Saya tidak menggunakan operator modulo, melainkan saya menggunakan divisi integer dengan sisa dan hasil bagi. Mari mencoba
sumber
Kode Mesin Turing
Menggunakan sintaks dari sini.
Cobalah online!
sumber
Python
sumber
rev(1230)
memberi321
. Saya kira itu harus benar-benar memberi0321
?C
sumber
Batch
Merindukan bagian tentang tidak menggunakan string - oh well.
sumber
Python 2
sumber