Ini berbeda dengan My Word yang dapat mengalahkan Word Anda karena kurang kompleks dan hanya mengharuskan Anda untuk menghitungnya, dan tidak membandingkannya.
Untuk menemukan akar digital, ambil semua digit angka, tambahkan, dan ulangi sampai Anda mendapatkan nomor satu digit. Sebagai contoh, jika jumlah itu 12345
, Anda akan menambahkan 1
, 2
, 3
, 4
, dan 5
, mendapatkan 15
. Anda kemudian akan menambahkan 1
dan 5
memberi Anda 6
.
Tugas Anda
Mengingat integer N (0 <= N <= 10000) melalui STDIN , mencetak akar digital N .
Uji kasus
1 -> 1
45 -> 9
341 -> 8
6801 -> 6
59613 -> 6
495106 -> 7
Ingat, ini adalah kode-golf , jadi kode dengan jumlah byte terkecil menang.
code-golf
number
arithmetic
Oliver Ni
sumber
sumber
number
. Khususnya. haruskah input0
didukung?STALEMATE
. Mungkin lebih baik untuk menutup yang lain sebagai korban penipuan ini.Jawaban:
Pyke, 1 byte
Coba di sini!
Mengambil akar digital dari input
sumber
Jelly ,
7 5 43 byteTryItOnline! atau semua kasus uji
Bagaimana?
The akar digital dikenal untuk mematuhi rumus (n-1)% 9 + 1.
Ini sama dengan digit terakhir dalam bijective base 9
(dan karena implementasi itu
0ḃ9=[]
dan[]Ṫ=0
ini menangani kasus tepi nol).sumber
JavaScript (ES6),
1610 byteUji kasus
Tampilkan cuplikan kode
sumber
MATL , 3 byte
Cobalah online!
Banyak (sekarang dihapus jawaban) mencoba menggunakan modulo 9 untuk mendapatkan hasilnya. Ini adalah jalan pintas yang bagus, tetapi sayangnya tidak berfungsi untuk kelipatan 9. MATL memiliki fungsi untuk modulo pada intervalnya
[1, n]
. Menggunakan modulo ini, kita miliki1 % 3 == 1, 2 % 3 == 2, 3 % 3 == 3, 4 % 3 == 1
, dll. Jawaban ini hanya membutuhkan modulo input sembilan menggunakan modulo kustom ini.sumber
Mathematica,
2711 byteMathematica
Mod
mengambil parameter ketiga sebagai offset dari rentang modulo yang dihasilkan. Ini menghindari mengurangi input dan menambah output.sumber
Python,
1620 byte+4 byte untuk menangani kasus tepi nol.
repl.it
sumber
~-input()%9+1
print
?0
hasil9
daripada0
, yang merupakan apa yang dipenuhi olehn and
bagian dari kode) selanjutnya akan dihitung sebagai 19 byte bukan 13 ( karenaprint
dan ruang harus dihitung).Julia, 12 byte
atau
mod1
adalah sebuah alternatif untukmod
yang memetakan ke kisaran[1, n]
bukan[0, n)
.sumber
PHP, 15 Bytes
PHP versi sebelumnya, 55 Bytes
sumber
<?=--$argv[1]%9+1?>
Haskell,
3534 byteCobalah di Ideone.
Penjelasan:
sumber
Perl, 15 byte
Termasuk +2 untuk
-lp
Berikan masukan pada STDIN
root.pl
Ini adalah solusi membosankan yang telah diberikan dalam banyak bahasa, tetapi setidaknya versi ini
0
juga mendukungLebih menarik melakukan penambahan berulang nyata (meskipun dalam urutan lain) sebenarnya hanya 1 byte lebih lama:
sumber
R,
72 6729 byteSunting: Terima kasih kepada @rturnbull karena telah memangkas dua byte.
sumber
ifelse
dapat digantikan oleh`if`
, dengan perilaku yang identik, yang menghemat beberapa byte.if
kerjanya. Bisakah Anda memberi contoh atau mungkin menambahkannya ke Tips untuk bermain golf?ifelse
. Dalam hal ini,`if`(n%%9|!n,n%%9,9)
berikan perilaku yang identik dengan kode yang Anda poskan. Sejauh yang saya tahu, perilaku ini tidak berdokumen! Saya akan menambahkan komentar ke utas kiat.Retina , 7 byte
Cobalah online!
Saya melihat banyak solusi matematis, tetapi di Retina pendekatan langsung tampaknya menjadi yang terbaik.
Penjelasan
{`
membuat seluruh program berjalan dalam satu lingkaran sampai string tidak berubah lagi. Loop terdiri dari dua tahap:Ubah setiap digit menjadi unary.
Hitung jumlah karakter (= konversi angka unary ke desimal).
Ini berfungsi karena mengonversi setiap digit ke unary tanpa pemisah antara digit menciptakan satu angka unary yang sama dengan jumlah semua digit.
sumber
Brachylog , 9 byte
Cobalah online!
Penjelasan
Pendekatan alternatif, 11 byte
Yang ini menggunakan meta-predikat
i - Iterate
untuk memanggilI
kali predikat{@e+}
pada input. Ini akan mencoba nilaiI
dari0
hingga tak terbatas hingga satu membuatnya sehingga output darii
adalah satu digit yang membuat#0
benar.sumber
JavaScript (ES6),
4138 byteDisimpan 3 byte, terima kasih kepada Bassdrop Cumberwubwubwub
Mengambil dan mengembalikan string.
Uji kasus
Tampilkan cuplikan kode
sumber
s.split``
ke[...s]
CJam ,
1913 bytePenerjemah
Penjelasan:
Terima kasih untuk 8478 (Martin Ender) untuk -6 byte.
CJam, 6 byte
Disarankan oleh 8478 (Martin Ender). Penerjemah
Saya sedang memikirkannya, tetapi Martin baru saja mendapatkannya sebelum saya. Penjelasan:
sumber
:
, jadi Anda bisa melakukannya:~:+
. Juga tidak ada salahnya untuk menjalankan blok setidaknya sekali sehingga Anda dapat menggunakang
loop, bukanw
loop.r{_,1>}{:~:+`}w
berfungsi, tapi saya tidak tahu bagaimana bisa saya gunakan dig
sini.r{:~:+_s\9>}g
(tentu saja solusi bentuk tertutupri(9%)
jauh lebih pendek.Java 7, 63 byte
Fungsi rekursif yang hanya mendapat digit dengan mod / div. Tidak ada yang mewah.
Pelabuhan murah
dari Jonathan Allan akan menjadi sangat sedikit 28 byte:
sumber
Python 2,
5451 byteTerima kasih kepada Oliver dan Karl Napf karena membantu saya menghemat 3 byte
sumber
while len(i)>1
kewhile~-len(i)
untuk menyimpan satu byte.input()
dan memaksa input yang dilampirkan dalam tanda kutip untuk menghemat 2 byte.Python, 45 byte
Membawa argumen sebagai string.
sumber
05AB1E , 6 byte
Cobalah online!
Penjelasan
sumber
C,
6429 bytePort C dari jawaban Jonathan Allan (dengan kasus khusus 0).
Kode 64 byte sebelumnya:
q
mengambil cross sum danf
mengulangi mengambil cross sum sampai satu digit.sumber
Retina , 15 byte
Cobalah online! (Baris pertama memungkinkan suite tes yang dipisahkan dengan linefeed.)
Penjelasan
Konversikan input ke unary.
Ambil modulo berbasis 1 dengan menghapus sembilan yang memiliki setidaknya satu karakter lagi setelahnya.
Hitung jumlah 1s yang tersisa untuk dikonversi kembali ke desimal.
sumber
Perl 6 , 29 byte
Diperluas:
sumber
Faktor , 24
Cerdas , jawaban yang matematika .
63 untuk solusi berulang bodoh:
sumber
Labirin , 8 byte
menggunakan persamaan
(n-1)%9+1
:?
membaca input sebagai desimal dan mendorongnya ke stack(
mengurangi bagian atas tumpukan_
mendorong angka nol ke atas tumpukan9
dorong bagian atas tumpukan muncul kali 10 digit (dalam hal ini, 9)%
muncul y, muncul x, mendorong x% y)
menambah bagian atas tumpukan!
muncul bagian atas tumpukan dan keluar menempatkannya sebagai string desimal@
mengakhiri programsumber
Pyth -
7467 byteBukan yang terbaik, tetapi masih mengalahkan sejumlah jawaban yang layak:
Seperti versi sebelumnya, tetapi menangani juga kasus kelipatan 9, menggunakan logika atau.
Versi ini gagal pada 45 testcase :
Penjelasan:
Coba di sini
Coba versi sebelumnya di sini!
Solusi sebelumnya:
Penjelasan :
Anda diundang untuk mencobanya di sini !
sumber
jQ9
tidak bertindak seperti Jelly'sḃ9
:-PAPL (Dyalog) ,
159 byte byteCobalah online!
sumber
Hexagony,
1915 byteLebih Mudah Dibaca:
Cobalah online!
-3 byte dengan mengambil pendekatan yang berbeda, menjadikan 0 edge case trivial.
-1 byte dengan memperbaiki bug 0 edge case
Menggunakan rumus ((n-1) mod 9) +1 seperti banyak solusi lain juga.
sumber
K (oK) , 9 byte
Larutan:
Cobalah online!
Penjelasan:
Sangat mudah. Pisahkan angka menjadi angka dan jumlah - lakukan ini sampai hasilnya menyatu:
sumber
x\y
encodey
di basex
dengan digit sebanyak yang diperlukan, jadi ini sedikit lebih pendek:(+/10\)/
10\:
.. tetapi tidak di oK - dan.:'$
jumlah byte yang sama - jadi saya pergi dengan itu :)\:
dalam kdb + (3.4+), tetapi untuk oK saya perlu tahu berapa banyak 10 untuk dimasukkan ke dalam daftar saya.Keg , 6 byte (SBCS pada Keg wiki)
Penjelasan:
sumber
Ruby, 12 byte
sumber
19
? Bukankah seharusnya begitu9
?