Tugas:
Diberi angka integer dalam sistem angka desimal, kurangi menjadi satu angka desimal tunggal sebagai berikut:
- Ubah nomor menjadi daftar angka desimal.
- Temukan digit terbesar, D
- Hapus D dari daftar. Jika ada lebih dari satu kejadian D, pilih yang pertama dari kiri (pada posisi paling signifikan), semua yang lain harus tetap utuh.
- Konversikan daftar yang dihasilkan menjadi angka desimal dan kalikan dengan D.
- Jika jumlahnya lebih besar dari 9 (memiliki lebih dari 1 digit desimal), ulangi seluruh prosedur, dan masukkan hasilnya ke dalamnya. Berhentilah ketika Anda mendapatkan hasil satu digit.
- Tampilkan hasilnya.
Contoh:
26364 ->
1. 2 6 3 6 4
2. The largest digit is 6, so D=6
3. There are two occurrences or 6: at positions 1 and 3 (0-based). We remove the left one,
at position 1 and get the list 2 3 6 4
4. we convert the list 2 3 6 4 to 2364 and multiply it by D:
2364 * 6 = 14184
5. 14184 is greater than 9 so we repeat the procedure, feeding 14184 into it.
Kami melanjutkan dengan mengulangi prosedur untuk 14184 dan seterusnya dan kami melewati hasil antara berikut, akhirnya mencapai 8:
11312
3336
1998
1782
1376
952
468
368
288
224
88
64
24
8
Jadi hasil untuk 26364 adalah 8.
Input: Integer / string yang mewakili integer
Output: Satu digit, hasil reduksi diterapkan ke nomor tersebut.
Kasus uji:
9 -> 9
27 -> 4
757 -> 5
1234 -> 8
26364 -> 8
432969 -> 0
1234584 -> 8
91273716 -> 6
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte di setiap bahasa menang.
code-golf
arithmetic
integer
Galen Ivanov
sumber
sumber
10 -> 10
?Jawaban:
05AB1E , 6 byte
Kode:
Menggunakan penyandian 05AB1E . Cobalah online!
Penjelasan
sumber
JavaScript (ES6), 49 byte
Mengambil input sebagai representasi string dari integer, seperti
f("26364")
.Uji Kasus
Tampilkan cuplikan kode
sumber
Jelly , 13 byte
Cobalah online!
-1 berkat trik yang saya temukan di Jonathan Allan's jawaban .
Program lengkap.
sumber
Pyth , 16 byte
Mengambil input sebagai sebuah String. Coba di sini! (Alternatif:
.WtH`*s.-ZeSZseS
)Pyth , 18 byte
Mengambil input sebagai integer. Coba di sini!
Bagaimana itu bekerja
16-byter
18-byter
Menjadi yang dekat dengan Jelly pada jenis tantangan seperti itu sangat baik untuk Pyth IMO :-)
sumber
Sekam ,
141312 byteTerima kasih Zgarb untuk menghemat 1 byte.
Cobalah online!
Penjelasan:
sumber
R ,
9995 byteCobalah online!
Fungsi rekursif. Menambahkan
f(number)
footer dapat digunakan untuk menguji nilai-nilai lain darinumber
. Implementasi langsung,d
adalah daftar digit, dan10^(n:2-2)%*%d[-M]
menghitung angka dengan digit terbesar dihapus.sumber
Python 2 , 72 byte
Cobalah online!
sumber
432969
. "ValueError: literal for int () tidak valid dengan basis 10: ''"n
0 makan*(n<=9)
akan tetap mengevaluasi ke nilai falsy, 0, membuat rekursi berlanjut dan menyebabkan kesalahan, sedangkan string'0'
adalah nilai yang benar dan karena itu rekursi dihentikan.Ruby , 59 byte
Cobalah online!
Fungsi lambda rekursif disebut seperti
f[26364]
.sumber
Jelly , 15 byte
Cobalah online! atau lihat test-suite .
Bagaimana?
sumber
Haskell ,
706766 byteDisimpan
34 byte berkat nimi!Cobalah online!
sumber
until
. Cobalah online! ....span=<<(>).maximum...
.C # (.NET Core) , 126 byte
Cobalah online!
sumber
if(n<10)return n;...return F(...);
ke pengembalian tunggal dengan ternary-if, seperti ini:int F(int n){var x=(n+"").ToList();var m=x.Max(d=>d);x.RemoveAt(x.IndexOf(m));return n<10?n:F(int.Parse(string.Concat(x))*(m-48));}
( 131 bytes )using System.Linq;
(18 byte) ke dalam bytecount.APL (Dyalog) ,
363533 byte-1 karena spesifikasi OP yang diperbarui. -2 Terima kasih kepada ngn.
Fungsi awalan diam-diam anonim. Mengambil integer sebagai argumen.
Cobalah online!
{
...}
fungsi di mana⍵
argumennya:⍵>9:
jika argumen lebih besar dari 9, maka:⍕⍵
format (stringify) argumen⍎¨
mengeksekusi (mengevaluasi) masing-masing (ini memberi kita digit sebagai angka)(
...)
terapkan fungsi diam-diam berikut pada mereka⌈/
digit terbesar×
waktu10⊥
decoding basis-10 dari (mengumpulkan angka)⊂
semua digit⌷⍨¨
diindeks oleh masing-masing⍳∘≢
yang saya ndices dari jumlah digit≠
berbeda dari⊢⍳⌈/
digit terbesar adalah i ndex di seluruh daftar digit∇
berulang (yaitu menyebut diri) itu⋄
lain⍵
kembalikan argumen yang tidak dimodifikasisumber
>10
seharusnya>9
?>9
akan menghemat satu byte.Perl 6 ,
4541 byteMenguji
Menguji
Diperluas:
sumber
Retina , 67 byte
Cobalah online! Tautan mencakup uji kasus yang cukup cepat untuk tidak memukul server Dennis. Penjelasan:
Untuk dua angka digit, ini menggandakan angka dengan
;
pemisah, awalan 1 ke duplikat. Untuk satu angka digit, ini awalan1;
ke angka.Sortir digit dari duplikat. (Untuk satu angka digit, ini tidak berpengaruh.)
Temukan kemunculan pertama digit terbesar, dan hapus angka itu, dan juga digit lainnya dalam duplikat, dan angka 1 tambahan yang ditambahkan sebelumnya. (Untuk satu angka angka, pertandingan gagal jadi ini tidak berarti apa-apa.)
Lipat gandakan angka dengan digit. Untuk satu angka angka, ini menghasilkan angka asli, dan loop berakhir. Jika tidak, program akan berputar hingga satu digit tercapai.
sumber
C # (.NET Core) ,
177164 + 18 byteDisimpan 13 byte berkat @raznagul!
Cobalah online!
sumber
s.Length<2
menjadin<10
. Selain itu, Anda dapat menghapus operator ternary dan tepatreturn f(y)
pada akhirnya, karena kasing ditangani olehif
pada langkah rekursi berikutnya.Java 8,
126104 byte-22 byte terima kasih kepada @ OlivierGrégoire .
Penjelasan:
Coba di sini.
sumber
n>9
dan mengembalikan kondisi alih-alihn<10
).Jq 1,5 , 86 byte
Diperluas
Cobalah online!
sumber
Perl 5 , 41 + 1 (
-p
) = 42 byteCobalah online!
sumber
9
. :( tapi bermain-main sedikit dan berhasil mendapatkan 41 byte dengan perbaikan: Cobalah online!Lua,
137108 byteTerima kasih kepada Jonathan S untuk bermain golf 29 byte.
Cobalah online!
sumber
D ,
188186185 byteCobalah online!
Aku benci evaluasi malas, sangat banyak. Ada tips yang diterima!
sumber
Lua, 154 Bytes
Saya harus memiliki beberapa cara untuk menurunkan ini, saya sedang bereksperimen sekarang.
Cobalah online!
Penjelasan
sumber
PowerShell , 123 byte
Cobalah online!
Ooof. Array PowerShell tidak dapat diubah, jadi kita perlu menggunakan
[Collections.ArrayList]
casting yang panjang di sini agar kita dapat memanggil.remove()
nanti.Mengambil input
$args
, mengubahnya menjadi string, laluchar
-array, lalu sebuahArrayList
. Simpan itu ke dalam$a
. Lalu kitawhile
putar sampai kita berada di atau di bawah9
. Setiap iterasi, kami memanggil.remove
elemen terbesar$a
(dilakukan olehsort
dan mengambil elemen terakhir[-1]
), menyimpan elemen terbesar ke dalam$b
pada saat yang sama. Ini terjadi karena nilai-nilai ASCII mengurutkan dengan cara yang sama dengan digit literal.Selanjutnya, kita menghitung ulang
$a
, lagi sebagaichar
-array (danArrayList
secara implisit), dengan melemparkan$b
(yang saat inichar
) ke string, kemudian int dengan+
, dan mengalikannya ke$a
-join
diedit ke dalam string (secara implisit dilemparkan ke int). Ini memenuhi bagian tantangan "gandakan dengan D".Akhirnya, begitu kita keluar dari loop, kita meletakkan
$a
ke dalam pipa dan output tersirat.sumber
Pip ,
2221 byteMengambil input sebagai argumen baris perintah. Verifikasi semua kasus uji: Coba online!
Penjelasan
Tidak disatukan, dengan komentar:
Dalam versi golf, badan loop dikondensasi menjadi satu ekspresi:
sumber
C
103,95, 90 byteCobalah online!
sumber
Java 8: 115 byte
-10 byte terima kasih kepada Jo King
Sayangnya Anda tidak dapat memanggil fungsi lambda secara rekursif, sehingga diperlukan 11 byte tambahan untuk header metode. Saya sadar ada jawaban Java yang lebih pendek yang sebagai gantinya, tetapi saya memutuskan untuk membuat ini sendiri.
Cobalah online
sumber
-48
dari peta ke akhirm
definisi. Cobalah online! Anda juga memiliki ruang kosong ekstra di tautan TIO AndaJ, 40 byte
Cobalah online!
penjelasan
sumber
PowerShell , 230 byte
Cobalah online!
Membuang terlalu banyak pada semua jenis casting.
sumber
PHP,
8277 +1 byteJalankan sebagai pipa dengan
-nR
atau coba online .sumber
dc ,
9885 byteBanyak terima kasih atas jawaban ini untuk ide memanfaatkan
~
ekstraksi angka dari angka, menghasilkan dua byte yang disimpan atas versi asli kode.Ini adalah sesuatu yang agak lengkap
dc
dengan kemampuan memanipulasi string yang tidak ada.Cobalah online!
sumber
Bash, 80 byte
Menggunakan paket - paket Utilitas Inti (untuk
sort
dantail
) dangrep
.Bagaimana cara kerjanya?
sumber