Nomor bahagia ditentukan oleh proses berikut. Dimulai dengan bilangan bulat positif, gantilah angka dengan jumlah kuadrat digitnya, dan ulangi prosesnya sampai angka sama dengan 1 (di mana ia akan tinggal), atau loop tanpa henti dalam siklus yang tidak termasuk 1. Angka-angka itu di mana proses ini berakhir dengan 1 adalah angka-angka bahagia, sedangkan yang tidak berakhir dalam 1 adalah angka-angka yang tidak bahagia (atau angka sedih). Diberi nomor cetak apakah itu bahagia atau tidak bahagia.
Sample Inputs
7
4
13
Sample Outputs
Happy
Unhappy
Happy
Catatan: Program Anda tidak boleh lebih dari 10 detik untuk angka di bawah 1.000.000.000.
sumber
a <= 4
dana <= 1
. Jika siklus memiliki 1 di dalamnya maka ia bahagia, dan jika memiliki 4 di dalamnya, maka ia tidak bahagia. Lihat bagian wikipedia tentang siklus tidak bahagia. Jadi begitu nilaia
4 atau kurang, dia memeriksa apakah a - hasil dari itu adalah jawaban Anda.C - 115
Ini menggunakan array 2 30 -byte (1GB) sebagai bitmap untuk melacak nomor mana yang telah ditemukan dalam siklus. Di Linux, ini benar-benar berfungsi, dan efisien, asalkan overcommitting memori diaktifkan (yang biasanya secara default). Dengan overcommitting, halaman array dialokasikan dan diunggulkan sesuai permintaan.
Perhatikan bahwa mengkompilasi program ini di Linux menggunakan satu gigabyte RAM.
sumber
Haskell - 77
sumber
Golfscript,
49 43 41 4039 karakterSetiap nomor senang berkumpul menjadi 1; setiap angka yang tidak bahagia konvergen ke siklus yang mengandung 4. Selain mengeksploitasi fakta itu, ini hampir tidak golf sama sekali.
(Terima kasih kepada Ventero, dari solusi Ruby yang mana saya telah membuat trik dan menyelamatkan 6 karakter).
sumber
eTeX, 153
Disebut sebagai
etex filename.tex 34*23 + 32/2 ?
(termasuk tanda tanya di bagian akhir). Spasi dalam ekspresi tidak masalah.EDIT: Saya turun ke 123 , tapi sekarang outputnya adalah dvi (jika dikompilasi dengan
etex
) atau pdf (jika dikompilasi denganpdfetex
). Karena TeX adalah bahasa penyusunan huruf, saya kira itu adil.sumber
Python - 81 karakter
Beberapa inspirasi diambil dari Ventero dan Peter Taylor.
sumber
int(c)
daripadaord(c)-48
....Javascript (
94928786)Input disediakan dengan mengatur a ke nomor yang diinginkan.
Kredit untuk mellamokb.
sumber
n==4?h="Unh":n==1?h="H":a=n+""}alert(h+"appy")
||
ke|
.n==4?h...
. Ubah untuk melakukan ... sambil mengulang dengan kondisiwhile(n>4)
. Kemudian gunakan pernyataan terakhir ini sebagai gantinya:alert(["H","Unh"][n>1?1:0]+"appy")
n=0;
Python (98, tapi terlalu kacau untuk tidak berbagi)
Mungkin terlalu lama untuk bersaing, tetapi mungkin bagus untuk tertawa. Itu evaluasi "malas" dengan Python. Benar-benar sangat mirip dengan entri Haskell sekarang yang saya pikirkan, hanya tanpa pesona.
sumber
dc - 47 karakter
Deskripsi singkat:
I~
: Dapatkan hasil bagi dan sisanya saat membaginya dengan 10d*
.: Kuadratkan sisanya.0<H
: Jika hasil bagi lebih besar dari 0, ulangi secara rekursif.+
: Jumlahkan nilai saat menyusutkan tumpukan rekursif.4<h
: Ulangi jumlah sum-of-kuadrat sementara nilainya lebih besar dari 4.sumber
Befunge, 109
Mengembalikan nilai yang benar untuk 1 <= n <= 10 9 -1.
sumber
J, 56
Kata kerja alih-alih skrip mandiri karena pertanyaannya ambigu.
Pemakaian:
sumber
Scala, 145 karakter
sumber
(n*n)
akan lebih pendekn*n
, atau apakah spasi tidak cukup untuk memisahkan ekspresi if darielse
?def h(s: String):String=if(s=="1")"H"else if(s=="4")"Unh"else h(s.map(_.asDigit).map(a=>a*a).sum+"");print(h(readLine)+"appy")
J (50)
Saya yakin J-er lebih kompeten daripada saya bisa membuat ini lebih pendek. Saya seorang newb relatif.
Baru dan ditingkatkan:
Lebih baru dan lebih ditingkatkan, terima kasih kepada ɐɔıʇǝɥʇuʎs:
sumber
("."0)
. Itu menghasilkan kesalahan peringkat, tetapi jika saya tidak membagi 'Happy' dan membiarkan hasilnya dalam kotak, saya dapat menyimpan karakter.("."0)
adalah bahwa kata sambung berlaku untuk seluruh kata kerja kereta sebelumnya yang dilampirkan, yang bukan yang saya inginkan. Jika saya katakan+/@:("."0)@":
, itu sangat berbeda dari+/@:"."0@:
yang sebenarnya(+/@:".)"0@:
.'Unhappy';'Happy'
denganUnhappy`Happy
.Python (91 karakter)
sumber
Gangguan Umum 138
Lebih mudah dibaca:
Akan lebih pendek untuk hanya mengembalikan "Happy" atau "Unhappy" langsung dari
(do)
, tetapi bisa dibilang itu tidak akan dihitung sebagai keseluruhan programsumber
K, 43
sumber
Jelly , 17 byte (tidak bersaing *)
* Bahasa tantangan pasca-tanggal
Cobalah online!
Bagaimana?
sumber
Perl 5 - 77 Bytes
$ n adalah nilai input
sumber
05AB1E , 21 byte
Cobalah secara online atau verifikasi 100 kasus uji pertama .
Penjelasan:
Setiap angka pada akhirnya akan menghasilkan salah satu
1
atau4
, jadi kami mengulang tanpa batas, dan berhenti segera setelah angka di bawah 5.Lihat ini ujung 05AB1E saya (bagian Cara menggunakan kamus? ) Untuk memahami mengapa
'ŽØ
adalah"happy"
.sumber
C ++ 135, 2 Baris
Ini adalah versi modifikasi dari yang saya lakukan di sini:
/programming/3543811/code-golf-happy-primes/3545056#3545056
sumber
&999
dilakukan? Dan bagaimana cara kerjanya jikaj
nilai sampah?if(j==999){n = 0;}else{n=n*n +i;}
, j seharusnya tidak menjadi nilai sampah, global nol diinisialisasi.Ya, tantangan ini memiliki tiga tahun; ya, sudah memiliki jawaban pemenang; tetapi karena aku bosan dan melakukan ini untuk tantangan lain, kupikir aku mungkin memasangnya di sini. Kejutan mengejutkan, panjang - dan ...
Java -
280264 byteTidak Disatukan:
sumber
C # 94 byte
Untuk nomor apa pun (as
int
),h()
akan mengembalikan nilai yang benar. Anda dapat mencoba kode di .NetFiddle .Kudos kepada pengguna yang tidak diketahui untuk algoritme asli .
sumber
Clojure,
10797 bytePembaruan: Menghapus
let
ikatan yang tidak perlu .Asli:
Pertama kali menggunakan bersarang
for
: osumber
R,
11791 byte-16 byte terima kasih kepada Giuseppe
sumber
strtoi
alih-alihas.numeric
danpaste
alih-alihas.character
, tetapi ada pendekatan yang lebih pendek untuk mendapatkan digit . Jika Anda menggunakan`if`(a-1,"unhappy","happy")
itu harus menyimpan byte lain. Akhirnya, Anda dapat membuat anonim ini untuk mengurangi beberapa byte lagi.Perl 5 , 62 + 1 (
-p
) = 63 byteCobalah online!
sumber
Python 2 , 71 byte
Cobalah online!
... atau, untuk jumlah byte yang sama:
Cobalah online!
sumber
C: 1092 karakter
sumber