Semuanya ada dalam judul ...
Ambil sebagai input bilangan bulat positif n>=12
dan ... lakukan apa yang dikatakan judulnya.
Ya, ini ada di OEIS A187924 .
Beberapa test case
12 -> 912
13 -> 11713
14 -> 6314
15 -> 915
16 -> 3616
17 -> 15317
18 -> 918
19 -> 17119
20 -> 9920
40 -> 1999840
100-> 99999999999100
Ini adalah kode-golf . Kode terpendek dalam byte menang!
Jawaban:
Befunge, 81 byte
Cobalah online!
Dapat menangani hingga n = 70 setidaknya, setelah itu beberapa nilai akan mulai melimpah ukuran sel stack pada sebagian besar implementasi, dan pada yang tidak, akan memakan waktu begitu lama sehingga tidak layak menunggu untuk mengetahuinya.
Mengingat mereka kendala, kita tidak repot-repot mencoba untuk menangani nilai-nilai n lebih besar dari 99, yang berarti kita dapat lebih mudah menguji apakah nilai ujungnya di n dengan hanya dengan membandingkan nilai modulo 100 dengan n .
Di bawah ini adalah rincian kode yang lebih rinci.
Baca n dari stdin dan simpan di memori.
Inisialisasi nilai tes v ke 0 dan mulai loop utama, menambah v di depan.
Tes jika
v%n == 0
, dan jika tidak kembali ke awal loop utama.Tes jika
v%100 == n
, dan jika tidak kembali ke awal loop utama.Jumlahkan angka dalam v dengan menambahkan berulang-ulang v modulo 10 dan bagi v dengan 10.
Uji apakah jumlahnya sama dengan n , dan jika tidak kembali ke awal loop utama.
Kalau tidak, output v dan keluar.
sumber
05AB1E , 14 byte
Cobalah online!
Penjelasan
Solusi yang membutuhkan awalan besar akan habis di TIO
sumber
JavaScript (ES6),
5554 byteMengambil input sebagai string. Membutuhkan browser dengan dukungan rekursi ekor untuk hasil yang lebih besar. Sunting: Disimpan 1 byte berkat @Arnauld.
sumber
eval([s,...a].join`-`)?
juga akan bekerja, meskipun tidak lebih pendek ...||
.Brachylog v2,
1210 byteCobalah online!
Ini adalah penyerahan fungsi yang mengambil input melalui
.
dan menghasilkan output via?
(kebalikan dari konvensi normal; semua fungsi Brachylog memiliki dua argumen, yang bisa berupa input atau argumen output, tetapi bahasa tidak memaksakan penggunaan argumen tertentu). Kami biasanya tidak menganggap konvensi untuk penggunaan argumen menjadi relevan di PPCG .Penjelasan
Versi sebelumnya dari solusi ini memiliki kasus khusus (
Ḋ|
, yaitu "kembalikan digit secara harfiah") untuk satu digit, tetapi pertanyaannya jelas menyatakan bahwa Anda tidak perlu memeriksanya (terima kasih @Dosc untuk menangkap ini), jadi saya menghapus saya t. (Solusi sebagaimana ditulis tidak akan bekerja pada satu digit karena Brachylog tidak akan menganggap 1 sebagai kemungkinan untuk yang tidak diketahui dalam perkalian, untuk mencegah loop tak terbatas; penggandaannya adalah arbitrase-arity.)Jadi jawaban ini sekarang berlaku untuk terjemahan spesifikasi yang cukup langsung. Dimulai dengan
?
(keluaran / angka yang kami coba temukan; predikat Brachylog selalu secara implisit dimulai dengan?
) kami gunakana₁.
untuk menyatakan bahwa ia memiliki.
(input) sebagai akhiran. Kemudian;A×?
berarti bahwa kita dapat mengalikan (×
) hasilnya dengan sesuatu (;A
) untuk menghasilkan?
(output). Akhirnya,ẹ+
jumlah (+
) digit (ẹ
) dari?
, dan secara default ada pernyataan implisit di akhir setiap program Brachylog yang dihasilkan oleh hasil akhir.
. Jadi dengan kata lain, program ini ".
adalah sufiks?
,.
dikalikan dengan sesuatu?
,.
adalah jumlah digit?
", yang sangat dekat dengan terjemahan literal dari program aslinya.Hal
≜
ini diperlukan agar persyaratan jumlah digit diberlakukan. Saya berasumsi sesuatu tentangẹ
tidak suka yang tidak diketahui, jadi≜
Brachylog memberitahu untuk menggunakan pendekatan brute-force untuk bagian program daripada aljabar.sumber
Haskell , 72 byte
Cobalah online!
Perhatikan bahwa angka yang ditemukan minus n harus merupakan kelipatan dari panjang n dan 10 ^ (n).
Terinspirasi oleh Laikoni dan benar-benar manusiawi
sumber
lcm n(10^length(show n))
kelcm(10^length(show n))n
untuk 1 byteAlice , 35 byte
Cobalah online!
Penjelasan
Program ini memiliki perpaduan yang sangat bagus dan interaksi antara mode Cardinal (integer-processing) dan Ordinal (string-processing).
Kerangka kerja biasa untuk tantangan dengan desimal I / O yang beroperasi sebagian besar dalam mode Kardinal:
Dan program yang sebenarnya:
sumber
Java (OpenJDK 8) ,
13611010392 byte-26 terima kasih kepada JollyJoker
-7 lagi terima kasih kepada JollyJoker
-11 Terima kasih kepada Oliver Grégoire
Cobalah online!
Harus mencintai Jawa! Mungkin saja saya menggunakan pendekatan yang tidak efisien, tetapi tidak memiliki fungsi checksum bawaan dan konversi ganda ke String untuk memeriksa akhir dari byte biaya biaya ...
Tidak Disatukan:
sumber
(""+i).endsWith(""+a)
harus bekerja.n/=10
bukannyan=n/10
terlalu. Juga,i+=a
dalam loop untuk sehingga Anda dapat melewati pemeriksaan pembagian.Mathematica, 72 byte
-18 byte dari @MartinEnder
Cobalah online!
Ini adalah versi lain dari Martin Ender.
Pendekatan ini dapat naik
n=40
(41 melebihi batas iterasi default)Mathematica, 65 byte
Cobalah online!
sumber
Python 2 , 74 byte
Solusi ini mengasumsikan itu
n <= sys.maxint
.Cobalah online!
sumber
str(x)
denganx
back-ticks dua kali untuk menghemat 6 byte (bagaimana Anda lolos dari back-ticks di dalam back-ticks?).`
backslash centang dalam backticks.L
yang bisa mengacaukan algoritmaC (gcc)
7169 byte, gagal pada 100Saya mencoba dengan panjang dan% 1000 tetapi waktu habis
-2 byte berkat stabilbox
Cobalah online
sumber
Sekam ,
20 1917 byteTerima kasih @Zgarb untuk -2 byte!
Cobalah online!
sumber
C # (.NET Core) ,
90 8483 + 18 = 101 byteCobalah online!
(""+n)
di beberapa tempat dann.ToString()
di tempat lain.sumber
n=>{for(int i=n;n%100!=i|n%i>0|(""+n).Sum(c=>c-'0')!=i;n++);return n;}
menghemat 20 byte.n%100
? Bagaimana jikan>100
?Julia, 70 byte
sumber
¬x=(n=x;while sum(digits(n))!=x||!endswith("$n","$x");n+=x;end;n)
Anda dapat menghemat 5 byte dengan ini. Cobalah online!Ohm v2 , 16 byte
Cobalah online!
sumber
Pip , 18 byte
Algoritma terinspirasi oleh jawaban Emigna . Cobalah online!
Bagaimana itu bekerja
sumber
JavaScript REPL (ES5),
6059 bytesumber
Haskell , 75 byte
Cobalah online!
Penjelasan:
Saya bertanya-tanya apakah bagian "ujung
n
" dapat dipersingkat. Saya juga mencobashow n`elem`scanr(:)""(show x)
, tetapi lebih lama.sumber
Ruby ,
65 63 5453 byteCobalah online!
sumber
Pyth ,
2221 byteCoba di sini!
sumber
Haskell , 75 byte
Cobalah online!
sumber
PowerShell , 84 byte
Cobalah online!
Konstruksi sederhana tetapi perintah yang panjang. Waktu habis pada TIO untuk
n=100
, tetapi jika kami secara eksplisit mengaturi
untuk menjadi dekat, itu keluar dengan benar.Ini hanyalah sebuah
for
loop sederhana yang terus berlangsung selama salah satu dari kondisi itu benar. Tiga syarat tersebut adalah 1)$i%$n
, yaitu, kita memiliki sisanya; 2)$i-notmatch"$n$"
, yaitu, ia tidak cocok dengan beberapa digit terakhir; dan 3)([char[]]"$i"-join'+'|iex)-$n
, yaitu, angka yang dijumlahkan bersama tidak sama dengan$n
(di sini diperiksa dengan pengurangan sederhana, karena nilai bukan nol adalah benar). Di dalam lingkaran kita hanya menambah$i
.Jadi, jika kita tidak memiliki sisa, regex cocok, dan angkanya sama, ketiga syaratnya adalah
$false
dan kita keluar dari loop. Sebagai hasilnya, kita bisa membiarkannya$i
, dan hasilnya tersirat.sumber
PHP, 73 +1 byte
Jalankan sebagai pipa dengan
-R
.loop
$i
melalui beberapa<input>
sampaisum_of_digits-<input>
dantail_of_i-$n
palsu; lalu cetaki
.sumber
m4, 210 byte
Menentukan makro
f
yang menghitung jawabannya. Agak lambat — luar biasa begitu — tetapi saya berjanji itu berhasil.Saya pikir m4 akan menyenangkan karena memperlakukan bilangan bulat sebagai string secara default, tetapi ini sangat buruk.
sumber
Scala, 120 byte
Ini bekerja sampai
n = 70
, setelah itu bilangan bulat melimpah. Untuk satu karakter tambahan,Int
dapat berubah menjadiLong
dan memungkinkan nilai untukn > 100
dihitung.Ini versi yang sedikit lebih panjang yang tidak disunat:
sumber
R , 115 byte
Cobalah online!
Fungsi R yang mengerikan. Peningkatan
F
(dimulai pada0
) olehn
hingga nilai ditemukan yang memenuhi properti yang diperlukan, yang kemudian dikembalikan. Penggunaanany
padadouble
ekspresi mengirimkan peringatan untuk setiap iterasi dari loop, tetapi tidak mempengaruhi kebenaran.Waktu habis pada TIO untuk input yang cukup besar (n = 55 atau lebih tinggi) tetapi harus menghitung solusi dengan benar karena diberikan waktu / ruang yang cukup.
sumber
Perl 5,
4644 +1 (-p) = 45 byte2 byte disimpan berkat Xcali, tidak dapat menemukan yang lebih baik
jawaban pertama
Cobalah online
sumber
Jelly ,
2221 byteCobalah online!
Sunting: dikompresi menjadi satu baris
Penjelasan
Butuh waktu berjam-jam untuk menulis karena saya belajar Jelly, tetapi sekarang sudah selesai, saya sangat puas. Untuk waktu yang lama saya tidak menyadari bahwa saya membutuhkannya
¤
dan saya tidak bisa membuatnya bekerja. Melihat [ini] [1] kode yang dijelaskan dengan baik membantu saya menyegel transaksi. Banyak jawaban Jelly lainnya di PPCG juga memandu saya.sumber
Javascript, 224 bytes
function getNumber(x){if(x<12){return!1};const sumDigits=(x)=>x.toString().split('').map(Number).reduce((a,b)=>a+b,0);for(let i=2;i<9999;i++){if((x*i-x)%(Math.pow(10,x.toString().length))==0&&sumDigits(x*i)==x){return x*i}}}
Batalkan golf:Penggunaan: 1. getNumber (12) 2. getNumber (13) 3. ....
sumber
getNumber
atausumDigits
.J ,
3733 byteCobalah online!
Membebani penghitung iterasi ~ 5 kali lebih cepat tetapi lebih lama 5 byte:
Cobalah online!
Bertambah sebesar 100, 27 byte :
Cobalah online!
sumber
Python 2 , 70 byte
Cobalah online!
sumber