Polisi - kali kuadrat akar kuadrat


37

Catatan: Ini adalah utas polisi , tempat seseorang harus memposting kode acak. Ini adalah utas perampok di mana sumber yang retak harus diposting dan dihubungkan dengan jawaban polisi.


Tugas: Menulis terpendek aman Program yang mengalikan akar kuadrat dari bilangan bulat n dengan kuadrat n

Ini , jadi aturannya adalah:

  • Dalam jawaban Anda, poskan versi acak dari kode sumber Anda (karakter harus ditulis dalam urutan apa pun). Versi acak seharusnya tidak berfungsi!
  • Anda dapat mengambil input dengan cara standar apa pun, hal yang sama berlaku untuk output. Hardcoding dilarang
  • Setelah kode diretas oleh perampok (jika ini terjadi), Anda harus menyebutkan bahwa kode Anda telah diretas dalam judul Anda dan menambahkan spoiler ke tubuh jawaban Anda dengan kode persis Anda
  • Hal yang sama berlaku untuk jawaban aman (sebutkan bahwa itu aman dan tambahkan spoiler )
  • Kode dianggap aman jika tidak ada yang meretasnya dalam 5 hari setelah mempostingnya dan Anda dapat menentukannya dalam judul
  • Anda harus menentukan bahasa pemrograman Anda
  • Anda harus menentukan jumlah byte Anda
  • Anda harus menyatakan mekanisme pembulatan dalam jawaban Anda (lihat di bawah)

Anda dapat mengasumsikan bahwa hasilnya lebih rendah dari 2 32 dan n selalu positif. Jika hasilnya bilangan bulat, Anda harus mengembalikan nilai tepat dengan atau tanpa titik desimal; jika tidak, presisi desimal minimum akan menjadi 3 tempat desimal dengan mekanisme pembulatan pilihan Anda, tetapi dapat memasukkan lebih banyak. Anda harus menyatakan mekanisme pembulatan dalam jawaban Anda. Anda tidak boleh kembali sebagai pecahan (pembilang, pasangan penyebut - maaf, Bash!)

Contoh:

In -> Out

4 -> 32.0 (or 32)
6 -> 88.18163074019441 (or 88.182 following the rules above)
9 -> 243.0
25 -> 3125.0

Jawaban aman terpendek pada akhir April akan dianggap sebagai pemenang.


2
Terkait (Aturan CnR yang sama, tugas yang berbeda.)
Martin Ender

2
@ MartinEnder Jika tugasnya adalah satu-satunya yang berbeda, bukankah itu duplikat?
Nathan Merrill

1
@NathanMerrill Saya tidak tahu, saya tidak berpikir kita memiliki pedoman duplikat yang ditetapkan untuk tantangan polisi dan perampok, tetapi jika saya bertanya tantangan kode-golf baru , di mana "satu-satunya" hal yang berbeda dari kode golf sebelumnya adalah tugasnya, biasanya tidak dianggap duplikat. ;) (Yang mengatakan, saya setuju bahwa CnR mungkin lebih menarik jika kita mengubah bagian CnR dari tantangan, bukan tugas yang mendasarinya.)
Martin Ender

1
Semoga beruntung semuanya! Saya sangat senang Anda telah memutuskan untuk membuka kembali ini. Berharap untuk melihat jawaban yang menarik!
Tn. Xcoder

2
Saya telah menulis kode saya untuk input hingga 2 ^ 32 ... Itulah sebabnya saya bertanya tentang kesalahan pembulatan, agak melenceng pada saat itu
fəˈnɛtɪk

Jawaban:


2

05AB1E, 20 byte - aman

Pendekatan lain yang sama sekali berbeda dari jawaban saya sebelumnya.

****++/133DDFPTs}¹¹Ð

Tidak ada pembulatan.

Contoh berjalan

In   -> Out
0    -> 0
4    -> 32.0
6    -> 88.18163074019441
25   -> 3125.0
7131 -> 4294138928.896773

Saya tidak ragu @ Emigna akan memecahkannya dalam sekejap, tapi eh, kita harus coba! :-D


Larutan

D1TFÐ*D¹3*+s3*¹+/*}P

Ini menggunakan fakta bahwa urutan ini:

u_0 = 1, u_ {n + 1} = u_n * (u_n ^ 2 + 3 x) / (3 u_n ^ 2 + x)

konvergen ke sqrt (x), dan cepat kubik pada saat itu (maaf, tidak menemukan cara memformat persamaan matematika di PCG).

Penjelasan detail

D1TFÐ*D¹3*+s3*¹+/*}P
D1                   # Duplicate the input, then push a 1: stack is now [x, x, 1] (where x is the input)
  TF                 # 10 times (enough because of the cubic convergence) do
    Ð                # triplicate u_n
     *               # compute u_n ^ 2
      D              # and duplicate it
       ¹3*+          # compute u_n ^ 2 + 3 x
           s         # switch that last term with the second copy of u_n ^ 2
            3*¹+     # compute 3 u_n ^ 2 + x
                /    # compute the ratio (u_n ^ 2 + 3 x) / (3 u_n ^ 2 + x)
                 *   # compute u_n * (u_n ^ 2 + 3 x) / (3 u_n ^ 2 + x), i.e. u_{n+1}, the next term of the sequence
                  }  # end of the loop
                   P # compute the product of the whole stack, which at that point contains u_10 (a sufficiently good approximation of sqrt(x)), and the 2 copies of the input from the initial D: we get x ^ 2 * sqrt(x)

Cobalah online!


17

Python 3 , 44 byte ( retak )

'**:(((paraboloid / rabid,mad,immoral))):**'

Tidak ada pembulatan. Akurasi titik mengambang.


4
Ayo, ini layak mendapat lebih banyak poin, sangat kreatif! Ada simetri, dan semua kata adalah kata nyata.
Erik the Outgolfer

Jika saya tidak melakukan kesalahan konyol ... Retak
KSab

11

MATL , 12 byte ( dipecahkan oleh @tehtmi )

'Un&0P'/^:+1

Tidak ada pembulatan; menggunakan floating point.

Solusi yang dimaksudkan (berbeda dari yang ditemukan oleh @tehtmi):

:&+n10U'P'/^

Penjelasan

:&+ % Create a matrix of size n × n, where n is implicit input
n % Number of elements. Gives n^2
10U % 10 squared. Gives 100
'P' % 'P' (ASCII code 80)
/ % Divide. Gives 1.25
^ % Power. Implicit display



@tehtmi Memang! Sudah selesai dilakukan dengan baik! Solusi yang saya maksudkan berbeda; Saya baru saja mempostingnya
Luis Mendo


10

Perl, 42 byte (Aman)

Ada 41 byte kode dan -pbendera (tidak ada bendera lain).

/"/4~~r..rso4r<_$4va=eg1de|i/h0-&$c={}l+"

Hasilnya tidak bulat (atau lebih tepatnya dibulatkan ke titik yang sama Perl akan diakhiri dengan melakukan $_ = (sqrt $_) * ($_ ** 2)).

Larutan:

$_=eval".i44<4}{|~"=~s/./chr-10+ord$\&/gre
(tanpa spoiler \sebelum &- markdown sepertinya tidak suka $diikuti oleh &)
Coba online!

Penjelasan:

.i44<4}{|~ aku s $_**2*sqrt tetapi dengan setiap karakter diganti dengan karakter dengan kode ascii nya + 10. (kode ascii dari $adalah 36, sehingga menjadi .yang ascii kode 46, dll).
Tujuannya s/./chr-10+ord$\&/greadalah untuk membatalkan transformasi ini: ia mengganti setiap karakter dengan karakter dengan kode ascii 10 lebih rendah. ( chr-10+ord$\&Mungkin lebih jelas sebagai chr(ord($\&)-10)mana chrmengembalikan karakter sesuai dengan kode ascii, dan ordmengembalikan kode ascii yang sesuai dengan karakter).
akhirnya, evalmengevaluasi string ini, dan dengan demikian menghitung hasilnya, yang disimpan $_, yang dicetak secara implisit di akhir berkat -pflag.


Benar. Saya mencoba mengedit dengan cepat karena saya melihat 4 suara dibuka kembali dan berharap untuk memperbaiki pertanyaan sebelum tanggal 5 dilemparkan. Jika pertanyaan telah ditinggalkan di kotak pasir sampai siap, itu akan lebih baik untuk semua yang terlibat.
Peter Taylor

@PeterTaylor Tentu, tidak ada masalah, dan lagi pula itu tebal sehingga cukup terlihat (saya tidak menyalahkan siapa pun, tetapi hanya menunjuk aliran kecil (yang saya koreksi segera (memperkenalkan kesalahan ketik dalam proses))). Dan saya sangat setuju dengan bagian sandbox.
Dada

dapatkah kau jelaskan sedikit?
phuclv

@ LưuVĩnhPhúc Maksud Anda jika saya dapat memberikan sedikit bantuan untuk memecahkannya? mmh ... kodenya dimulai dengan $_=. Dan ada suatu evaltempat. (itu tidak banyak tapi saya merasa saya tidak bisa memberi Anda lebih banyak tanpa memberi Anda terlalu banyak informasi)
Dada

8

Oktaf, 43 byte (Aman)

$'()*+,-/23579:[]aelnouv'*,-23:[]lu',-23]',

Ini adalah skrip yang memerlukan input dari baris perintah (ini bukan fungsi). Akurasi floating point (jadi tidak ada pembulatan).

Larutan:

eval(-[5,-2:3,-3:2]+['nlouu*$$',39,']2/7'])

Penjelasan:

eval( <string> ) % Evaluated the string inside the brackets and executes it
Segala sesuatu di dalam evalpanggilan akan dievaluasi menjadi input('')^2.5

Bagaimana?

-[5,-2:3,-3:2] % A vector: [-5, 2, 1, 0, -1, -2, -3, 3, 2, 1, 0, -1, -2]
['nlouu**$$',39,']2/7'] % This is a string: nlouu**$ concatenated with the number
. % 39 (ASCII ']'), and ']2/7'. Thus, combined: 'nlouu**$$']2/7'

Menambahkan vektor pertama ke string ini akan mengubahnya menjadi vektor integer:
[105, 110, 112, 117, 116, 40, 39, 39, 41, 94, 50, 46, 53]

evalsecara implisit mengonversinya menjadi string, dan angka-angka ini kebetulan adalah: input('')^2.5


1
Ini sulit. Sudah selesai dilakukan dengan baik!
Luis Mendo

7

C, 50 byte ( Retak oleh fergusq )

%(())   ,-12225;>\\aaabbdddeeefffllnoooprrttuuuuw{

Menggunakan pembulatan IEEE754 standar. Seperti dicatat oleh jawaban fergusq, mungkin memerlukan -lmtergantung pada kompiler Anda.



@fergusq benar, dan hampir persis apa yang saya miliki. Sudah selesai dilakukan dengan baik; Kupikir aku sudah meninggalkan cukup banyak ikan haring merah di sana untuk membuat orang lebih sibuk lagi!
Dave

@ Dave Wow, itu kelihatannya seperti kesalahan sintaks pada awalnya.
Erik the Outgolfer

6

Mathematica, 131 byte, tidak bersaing ?, retak

Ini telah dipecahkan oleh @ lanlock4 ! Namun, saya masih memiliki poin internet untuk memberikan seseorang yang menemukan solusi asli, di mana semua karakter sebenarnya diperlukan ....

f[y_]:=With[{x=@@@@@@#####^^&&&(((()))){{}}111111,,+-/y},Print[#,".",IntegerString[Round@#2,10,3]]&@@QuotientRemainder[1000x,1000]]

Ini dimaksudkan sebagai teka-teki. Meskipun Anda dapat menggunakan karakter di atas seperti yang Anda inginkan, saya pasti bermaksud jawaban untuk mengikuti formulir

f[y_]:=With[{x=
    @@@@@@#####^^&&&(((()))){{}}111111,,+-/y
},Print[#,".",IntegerString[Round@#2,10,3]]&@@QuotientRemainder[1000x,1000]]

di mana baris pertama dan ketiga hanyalah pembungkus untuk membuat pembulatan dan tampilan legal (ia menulis setiap output tepat tiga tempat desimal, bulat), dan baris kedua adalah versi acak dari isi kode. Output sampel:

6 -> 88.182
9 -> 243.000
9999 -> 9997500187.497

(Mathematica adalah perangkat lunak tidak bebas, tetapi ada kotak pasir Wolfram di mana dimungkinkan untuk menguji jumlah kode sederhana. Misalnya, memotong dan menempelkan kode

f[y_]:=With[{x=
    y^2.5
},Print[#,".",IntegerString[Round@#2,10,3]]&@@QuotientRemainder[1000x,1000]]

mendefinisikan suatu fungsi, yang selanjutnya dapat Anda panggil seperti f@6atau f[9], yang melakukan hal yang sama dengan versi kode yang diuraikan secara acak. Jadi, apakah ini benar-benar harus non-bersaing?)



6

Swift - 64 byte (Aman)

prot Fdnufi;nooitamunc xetgru(->atl)Ior:n{tFn pg,F(ao.o25t)(w)l}

Tidak pembulatan, dan menampilkan .0bahkan jika hasilnya bilangan bulat.




4

C #, 172 byte ( Cracked oleh SLuck49 )

       (((((())))))***,,,,......1225;;;;;;<====>CFLMMMMMPPPRSSSSSWaaaaaaabbbbcccddddddeeeeeeeeeeegghiiiiiiiillllllmmnnnnnnnooooooooqqqqrrrssssssssstttttttttuuuuuuuvvwyy{{}}

Kode ini adalah program lengkap.

Ada tujuh karakter spasi di awal.

Input dibaca dari formulir STDIN dan dicetak ke STDOUT. Hasilnya adalah double, tidak ada pembulatan yang dilakukan.

Kode Asli ungolfed:

using System;
using S = System.Console;

class P
{
    static void Main()
    {
        var t = S.ReadLine();
        double q = int.Parse(t);
        Func<double, double, double> M = Math.Pow;
        S.Write(M(q, 2 * .25) * M(q * q, 1));
    }
}




3

Python 3.6, 59 byte

ba(,b5,d' (,a/([m:'-)oa)(bl*aadplma dba](r)d )l*d,:)*m:-mml

Tidak ada pembulatan. Akurasi titik mengambang.


Sungguh, 3 lambda?
Tn. Xcoder

3

Haskell, 64 byte, ( dipecahkan oleh Laikoni )

$$$$$$(((((())))))**,...0<<<>>>[]cccccdddeffiiiiilloopppprrsstuu

Operasi titik mengambang Haskell standar.

Versi asli saya adalah:

produk. ((($ succ $ cos $ 0) (flip (**).) [id, penerima])). flip (id)



@Laikoni: bagus sekali!
nimi

3

Fourier , 124 119 Bytes

((()))*******--011111<=>>>HHINNNN^^^eeehhhhkkkkmmmmmmmmmmmmmmmmossuuuuuuuuuuuuuuuuu{{{{{{{{{{}}}}}}}}}}~~~~~~~~~~~~~~~~

Tidak ada spasi putih atau karakter baris baru.

Root kuadrat dibulatkan ke bilangan bulat terdekat karena Fourier tampaknya tidak menangani apa pun selain bilangan bulat (dan karena @ATaco mendapat izin, saya harap ini ok)

memperbaiki kesalahan pengeditan, jika Anda sudah memecahkan ini, sebelumnya berfungsi

Menyadari bahwa saya telah salah mengerti bagian dari kode, dan menggunakan lebih banyak karakter daripada yang saya butuhkan

Jika saya melewatkan sesuatu, beri tahu saya




3

Octave, 30 bytes (Safe)

(((((())))))**++/:@eeeiiijmsu~

A bit simpler than my first one. Shouldn't be too hard, but it's hopefully a fun puzzle.


2
No ^? Hmmm...
Luis Mendo

1
Came up with this @(e)(e**((i/(i+i))+~sum(e:j))) but it's only n^1.5...this one's tricky.
Kyle Gullion

3

Ohm, 11 bytes

M ⁿ¡D¼½;+1I

Use with -c flag. Uses CP-437 encoding.


I'm sorry, but are you quite sure this is correct?
user4867444

Now that no one has cracked it in the imparted time, mind sharing your solution please? I'm very curious :)
user4867444

For now, this is the shortest answer considered safe. I will accept it, but if you do not post your original code in 5 days, I will uncheck this, since I am not sure this is possible. EAGER too see your solution
Mr. Xcoder

2
@RomanGräf try to find your solution, please. Otherwise I will uncheck this...
Mr. Xcoder

1
@RomanGräf : ping? Still very eager to see that solution :)
user4867444


2

Javascript, 123 bytes, Cracked by notjagan

 """"""((((((((()))))))))********,--.....//2;;======>>Seeeeeeegggggggggggghhhhhhhhhhhilllllnnnnnnnnnnorrrsstttttttttttttu{}

This code is a full function

There is one space character at the very start of the list of characters

The rounding of this answer is the floating point precision for Javascript, accuracy is within 10^-6 for every answer.

Got shorter because the precision didn't need to be maintained quite as high as I thought it did.

I had realized that it would be much easier to solve than I initially had made it but it was already there :P

Initial code:

g=t=>t-(t*t-n)/("le".length*t);e=h=>{n=h*h*h*h*h,s=2**(n.toString("ng".length).length/"th".length);return g(g(g(g(g(s)))))}

Newtons method, applied 5 times from the closest power of 2



2

Ruby, 35 bytes (cracked by xsot)

'a'0-a<2<e<2<l<3<v<4<4<4<5<5<6>7{9}

No rounding. Floating point accuracy.



2

05AB1E, 47 bytes

)*.2555BFHIJJKKKPQRST``cgghilnstwx}«¹¹Áöž‚„…………

Does not round, uses floating point accuracy.





2

Excel, 26 bytes

=(())*//11122AAAIINPQRSST^

No rounding.

Note: As Excel is paid software, this works also in free LibreOffice


1
Is there a way to run this without buying Excel? Currently it is the consensus that non free languages cannot be used in cops and robbers.
Wheat Wizard

1
Should work in free Libreoffice, but I'll check and reach back.
pajonk

1
Works just fine.
pajonk


@WheatWizard, not relevant anymore, but I think the consensus is: Non-free languages can be used, but should be marked as non-competing.
Stewie Griffin

2

RProgN 2, 6 Bytes (Cracked by @notjagan)

š2]^*\

No rounding, displays many decimal places. Does not display any for an integer solution.


2
Does this really perform n²√n? I can easily get it to calculate n² + √n, but I can't for the life of me see how you got the terms to multiply.
notjagan

@notjagan me too... have been trying for 2 hours to crack it and nothing works. ATaco are you sure that the source is correct?
Mr. Xcoder

@Mr.Xcoder Ah, you're quite correct. Sorry for wasting your collective times! Please see the edited source.
ATaco

Now it makes sense!
Mr. Xcoder

A bit late because I was busy, but cracked.
notjagan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.