Orang-orang terus mengatakan kepada saya bahwa kuadrat angka adalah angka yang dikalikan dengan sendirinya. Ini jelas salah. Cara yang benar untuk mengkuadratkan angka adalah dengan membuatnya menjadi kuadrat, dengan menumpuknya di atas dirinya sendiri beberapa kali sama dengan jumlah digit yang dimilikinya, dan kemudian membaca semua angka dari kuadrat yang dihasilkan, baik secara horizontal (dari hanya dari kiri ke kanan) dan vertikal (hanya dari atas ke bawah), dan kemudian menambahkannya bersama. Jadi, untuk angka 123, pertama-tama Anda membuat kotak:
123
123
123
Kemudian Anda mengambil semua baris dan kolom dari kotak, dan menambahkannya bersama-sama:
123+123+123+111+222+333
Yang memberi kita hasil 1035
.
Untuk angka negatif, Anda menumpuk secara normal (ingat bahwa Anda hanya menghitung jumlah digit , sehingga tanda negatif tidak termasuk dalam panjangnya), dan kemudian baca angka horisontal secara normal (dengan tanda negatif), lalu abaikan tanda negatif untuk angka vertikal. Jadi, untuk nomornya -144
kita mendapatkan kotak:
-144
-144
-144
Yang memberi kita -144-144-144+111+444+444
, yang sama dengan567
Untuk angka dengan hanya satu digit, kuadrat selalu sama dengan angka dua kali lipat (dibaca sekali secara horizontal dan sekali secara vertikal). Jadi 4
beri kami
4
Yang memberi kita 4+4
, yang sama dengan 8
.
Untuk angka dengan bagian desimal, susun secara normal (ingat bahwa hanya digit yang dihitung dalam berapa kali Anda menumpuk angka, dan oleh karena itu, angka desimal tidak dihitung), dan abaikan simbol desimal ketika membaca angka vertikal. Misalnya, nomor 244.2
memberi kita
244.2
244.2
244.2
244.2
Yang memberi kita 244.2+244.2+244.2+244.2+2222+4444+4444+2222
, yang sama dengan 14308.8
.
Angka pecahan atau kompleks tidak dapat dikuadratkan.
Tugas Anda:
Saya bosan menghitung angka dengan cara saya sendiri, jadi saya memutuskan untuk mengotomatiskan prosesnya. Tuliskan saya program atau fungsi yang membutuhkan float atau string, mana yang Anda suka, sebagai input dan mengembalikan hasil kuadrat dengan cara saya.
Contoh:
123 -> 1035
388 -> 3273
9999 -> 79992
0 -> 0
8 -> 16
-6 -> 0
-25 -> 27
-144 -> 567
123.45 -> 167282.25
244.2 -> 14308.8
2 -> 4
-0.45 -> 997.65
0.45 -> 1000.35
Mencetak:
Tangan saya semakin sempit karena menulis semua kotak itu, dan komputer saya tidak mendukung copy / paste, jadi entri dengan jumlah kode paling sedikit untuk saya ketik (diukur dalam byte untuk beberapa alasan?) Menang!
244.2
bukan nomor pelampung. Itu tidak dapat dikonversi ke string"244.2"
.Jawaban:
05AB1E , 7 byte
Cobalah online!
Penjelasan
sumber
Jelly ,
1312 byteTautan monadik yang menerima daftar karakter (angka desimal yang terbentuk dengan baik, angka nol di depan menjadi persyaratan untuk -1 <n <1 ) dan mengembalikan angka.
Cobalah online!
14 byte untuk menerima dan nomor kembali (input terbatas pada +/- 10 -5 oleh
ŒṘ
):ŒṘfØDẋ€L$ŒV+⁸S
.Bagaimana?
sumber
+€
dengan+
dalam versi 15-byte untuk -1.Haskell,
5956 byteInput diambil sebagai string.
Cobalah online!
Bagaimana itu bekerja
sumber
Japt v2 , 16 byte
Uji secara online!
Penjelasan
sumber
C # (.NET Core),
150141133 byteDisimpan 9 byte berkat @TheLethalCoderMenyimpan 8 byte lainnya berkat @TheLethalCoder
Cobalah online!
Mengambil string sebagai input dan menampilkan angka 'kuadrat' sebagai pelampung.
Kode ini mengikuti algoritma berikut:
Buat string baru dari input, tetapi tanpa titik dan simbol desimal, sehingga kita bisa mendapatkan panjang dan angka untuk kolom dari sana.
Hitung input kali panjang string yang kami buat di titik 1.
Untuk setiap kolom di 'kotak' kami, buat string baru dengan nomor kolom dan panjang baris dan tambahkan ke hasil kami.
Contoh:
Memasukkan:
-135.5
1355
, yang memiliki panjang4
.-135.5 * 4 = -542
.1111
,3333
,5555
,5555
.Jika kita menjumlahkan angka-angka ini, kita dapatkan
15012
, yang akan dihasilkan oleh program kita.sumber
string.Replace()
, tapi saya kira itulah satu-satunya cara kerjanya!i
danl
mengapung..Length
tidak dapat secara implisit dikonversi menjadi float.a=>{var c=a.Replace(".","").Replace("-","");int i=0,l=c.Length;var r=float.Parse(a)*l;for(;i<l;)r+=int.Parse(new string(c[i++],l));return r;}
141 byte Mungkin dapat menyimpan dengan mengambil input sebagaifloat
dan melemparkan ke string dengann+""
tetapi saya belum memeriksa.Brachylog , 23 byte
Cobalah online!
Brachylog tidak cocok dengan pelampung ...
Penjelasan:
sumber
Sekam , 15 byte
Mengambil string dan mengembalikan nomor. Cobalah online!
Penjelasan
Agak menyebalkan bahwa fungsi parsing
r
bawaan memberikan kesalahan parse pada input yang tidak valid alih-alih mengembalikan nilai default, yang berarti bahwa saya harus secara eksplisit menyaring kolom yang terdiri dari non-digit. Jika mengembalikan 0 pada input yang salah bentuk, saya bisa menjatuhkanfΛ±
dan menyimpan 3 byte.sumber
Python 3 ,
95 94 87 8584 byteTest Suite .
Python 3 , 78 byte
Test Suite.
Pendekatan kedua adalah port ke Python 3 yang terinspirasi oleh solusi @ officialaimm.
sumber
Python 2 ,
8174 byte-7 byte terima kasih kepada @Mr. Xcoder :
'/'<i
Cobalah online!
Penjelasan:
Say
123.45
diberikan sebagai input.[i for i in`x`if"/"<x]
memberikan daftar bilangan bulat yang dirubah['1','2','3','4','5']
(yang jugaz
). Sekarang kita beralih melalui[x]+z
yaitu[123.45,'1','2','3','4','5']
, mengalikan setiap elemen denganlen(z)
, di sini5
dan mengkonversi masing-masing menjadi Float (sehingga string juga mengkonversi sesuai), menghasilkan[617.25,11111.0,22222.0,33333.0,44444.0,55555.0]
. Akhirnya kami menghitungsum(...)
dan mendapatkan167282.25
.sumber
i.isdigit()
dengan"/"<i<":"
i.isdigit()
dengan"/"<i
, pada kenyataannya, karena keduanya.
dan-
memiliki kode ASCII lebih rendah dari angka, dan/
ada di antara keduanyaJavaScript,
7562 byteCobalah online
-2 byte terima kasih kepada Arnauld
-5 byte terima kasih kepada Shaggy (saya pikir fungsinya harus menerima angka, tetapi sekarang saya melihat bahwa banyak jawaban lain menerima string juga)
sumber
Perl 5 ,
3733 + 1 (-p) =3834 byteCobalah online!
Menggunakan beberapa trik dari kode Dom untuk mencukur 4 byte
Dijelaskan:
sumber
-n
dan-p
secara harfiah membungkuswhile(){...}
kode sehingga}{
keluar dari itu. Ini terhapus$_
tetapi jika Anda menggunakan$\
sebagai variabel Anda masih akan dicetak sejak saat itu$\
ditambahkan ke setiap cetak. Berarti Anda dapat menyimpan nomor atau sesuatu di dalamnya dan mengabaikannya$_
. Tidak yakin itu penjelasan yang bagus, tetapi lihat Tips untuk bermain golf di thread Perl , saya yakin itu akan menjelaskannya dengan lebih baik! Senang telah membantu skor Anda!Jelly , 17 byte
Cobalah online!
sumber
Pyth, 18 byte
Coba di sini.
sumber
Pyth ,
2120 byteSuite uji.
Menggunakan pendekatan yang sama sekali berbeda dari jawaban @ EriktheOutgolfer , yang membantu saya bermain golf 1 byte dalam obrolan, dari 22 hingga 21.
Penjelasan
sumber
Oktaf ,
10082 byteTerima kasih banyak @TomCarpenter karena mengajari saya bahwa tugas memiliki nilai balik dan menyelamatkan saya
18
byte!Cobalah online!
Tidak Terikat / Penjelasan
Cara kerjanya adalah pada dasarnya kita perlu menambahkan angka itu sendiri
n
kali dan kemudian menambahkan jumlah kolom. Penjumlahans' * logspace(0,n-1,n)
mencapai jumlah kolom, misalnya jikav=-123.4
matriks itu adalah:Jadi kita hanya perlu melakukannya
sum
dan kita sudah selesai.sumber
@(v)(n=nnz(s=strrep(num2str(abs(v)),'.','')-'0'))*v+sum(sum(s'*logspace(0,n-1,n)))
. Cobalah online!Swift 4 ,
139134 byteTest Suite.
Penjelasan
func f(s:String)
- Menentukan fungsif
dengan parameter String eksplisits
.let k=s.filter{"/"<$0}
- Memfilter digit: Saya perhatikan keduanya-
dan.
memiliki nilai ASCII yang lebih kecil dari semua digit, dan/
berada di antara.
,-
dan0
. Oleh karena itu, saya hanya memeriksa apakah"/"
lebih kecil dari karakter saat ini, seperti yang saya lakukan dalam jawaban Python saya.print(...)
- Mencetak hasilnya.Float(s)!*Float(k.count)
- Mengonversi String dan jumlah digit ke Float dan mengalikannya (Swift tidak memungkinkan penggandaan Float dan Int :()). Jadi itu menambah jumlahx
kali, di manax
jumlah digit yang dikandungnya.k.map{Int(String(repeating:$0,count:k.count))!
-k.map{}
memetakank
dengan nilai saat ini$0
.String(repeating:$0,count:k.count)
mengambil setiap digit, membuat Stringx
dengan angka yang identik danFloat(...)!
mengubahnya menjadi angka Floating-point..reduce(0,+)
- Mendapat jumlah daftar di atas.Dan akhirnya
+
merangkum dua hasil.Mari kita ambil contoh!
Katakanlah String kita
"0.45"
. Pertama, kami memfilter digit, jadi kami tinggal bersama0, 4, 5
. Kami mengkonversi"0.45"
ke Float dan kalikan dengan jumlah digit:0.45 * 3 = 1.35
. Kemudian kita mengambil setiap digit dan mengubahnya menjadi String mengulangi digit yang sampai memenuhi lebar persegi (berapa banyak digit ada):0, 4, 5 -> 000, 444, 555
. Kami menjumlahkan ini000 + 444 + 555 = 999
,. Kemudian kita hanya menambahkan hasil bersama-sama:1.35 + 999 = 1000.35
.sumber
C #,
139137 byteDisimpan 2 byte berkat @Ian H.
Cobalah online!
Versi Lengkap / Terformat:
sumber
var d=(n+ ...
alih-alihvar d = (n ...
.Mathematica, 107 byte
sumber
PHP,
7888 +1 byteJalankan sebagai pipa dengan
-nR
.Dapat menghasilkan peringatan di PHP 7.1. Ganti
$c,$e
dengan$c>0?$c:0,$e
untuk memperbaiki.sumber
Python 3 , 68
707377byteCobalah online!
Simpulkan setiap karakter digit dan ulangi dengan jumlah karakter digit secara keseluruhan, buat menjadi bilangan bulat, dan tambahkan ke
n
. Dengan cara inin
ditambahkand
kali, bagian horizontal dari penjumlahan, bersama dengan pengulangan digit, yang merupakan bagian vertikal. Awalnya digunakanstr.isdigit
tetapi>"/"
, terima kasih kepada orang lain di utas ini, menyelamatkan banyak byte. Menghemat dua byte dengan mengambiln
sebagai string, tetapi hasilnya lebih berantakan.Cobalah online!
sumber