Cops - căn bậc hai lần căn bậc hai


37

Lưu ý: Đây là chủ đề của cảnh sát , nơi người ta nên đăng mã bị xáo trộn. Đây là chủ đề của tên cướp nơi nguồn bị bẻ khóa nên được đăng và liên kết với câu trả lời của cảnh sát.


Nhiệm vụ: Viết chương trình an toàn ngắn nhất nhân số căn bậc hai của một số nguyên n với bình phương n

Đây là , vì vậy các quy tắc là:

  • Trong câu trả lời của bạn, hãy đăng một phiên bản được xáo trộn của mã nguồn của bạn (các ký tự phải được viết theo bất kỳ thứ tự nào). Phiên bản tranh giành không nên hoạt động!
  • Bạn có thể lấy đầu vào theo bất kỳ cách tiêu chuẩn nào, tương tự với đầu ra. Mã hóa bị cấm
  • Sau khi mã bị bẻ khóa bởi kẻ cướp (nếu điều này xảy ra), bạn phải đề cập rằng mã của bạn đã bị bẻ khóa trong tiêu đề của bạn và thêm một spoiler vào cơ thể câu trả lời của bạn với mã chính xác của bạn
  • Điều tương tự cũng áp dụng cho các câu trả lời an toàn (đề cập rằng nó an toàn và thêm spoiler )
  • Mã được coi là an toàn nếu không có ai bẻ khóa trong 5 ngày sau khi đăng nó và bạn có thể tùy ý chỉ định rằng trong tiêu đề
  • Bạn phải xác định ngôn ngữ lập trình của bạn
  • Bạn nên chỉ định số byte của bạn
  • Bạn phải nêu cơ chế làm tròn trong câu trả lời của bạn (xem bên dưới)

Bạn có thể giả sử rằng kết quả thấp hơn 2 32n luôn dương. Nếu kết quả là một số nguyên, bạn phải trả về giá trị chính xác có hoặc không có dấu thập phân; mặt khác, độ chính xác thập phân tối thiểu sẽ là 3 chữ số thập phân với bất kỳ cơ chế làm tròn nào bạn chọn, nhưng có thể bao gồm nhiều hơn. Bạn phải nêu cơ chế làm tròn trong câu trả lời của bạn. Bạn không được phép trả về dưới dạng phân số (cặp tử số, mẫu số - xin lỗi, Bash!)

Ví dụ:

In -> Out

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

Câu trả lời ngắn nhất an toàn vào cuối tháng 4 sẽ được coi là người chiến thắng.


2
Liên quan. (Cùng quy tắc CnR, nhiệm vụ khác nhau.)
Martin Ender

2
@MartinEnder Nếu nhiệm vụ là điều duy nhất khác nhau, thì đó có phải là một bản sao không?
Nathan Merrill

1
@NathanMerrill Tôi không biết, tôi không nghĩ rằng chúng tôi có bất kỳ hướng dẫn trùng lặp nào được thiết lập cho thử thách cảnh sát và cướp, nhưng nếu tôi hỏi một thử thách chơi gôn mã mới , trong đó điều "duy nhất" khác với golf mã trước đó là nhiệm vụ, nó thường không được coi là một bản sao. ;) (Điều đó nói rằng, tôi đồng ý rằng CnR có lẽ thú vị hơn nếu chúng ta thay đổi phần CnR của thử thách, chứ không phải nhiệm vụ cơ bản.)
Martin Ender

1
Chúc mọi người may mắn! Tôi thực sự vui mừng vì bạn đã quyết định mở lại điều này. Nhìn về phía trước để xem câu trả lời thú vị!
Ông Xcoder

2
Tôi đã viết mã của mình để làm việc cho đầu vào lên tới 2 ^ 32 ... Đó là lý do tại sao tôi hỏi về lỗi làm tròn, thay vì đánh dấu vào thời điểm đó
fnɛtɪk

Câu trả lời:


2

05AB1E, 20 byte - an toàn

Một cách tiếp cận hoàn toàn khác với câu trả lời trước đây của tôi.

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

Không làm tròn số.

Ví dụ chạy

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

Tôi không nghi ngờ gì nữa @Emigna sẽ bẻ khóa nó trong nháy mắt, nhưng eh, người ta phải thử! : -D


Dung dịch

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

Điều này đang sử dụng thực tế là trình tự này:

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

hội tụ đến sqrt (x) và nhanh chóng về cơ bản (xin lỗi, không tìm thấy cách định dạng phương trình toán học trong PCG).

Giải thích chi tiết

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)

Hãy thử trực tuyến!


17

Python 3 , 44 byte ( đã bẻ khóa )

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

Không làm tròn số. Điểm nổi chính xác.


4
Thôi nào, cái này xứng đáng được nhiều điểm hơn, nó thật sáng tạo! Có sự đối xứng, và tất cả các từ là từ thực sự.
Erik the Outgolfer

Nếu tôi không thực hiện bất kỳ sai lầm ngớ ngẩn ... Cracked
KSab

11

MATL , 12 byte ( bị bẻ khóa bởi @tehtmi )

'Un&0P'/^:+1

Không làm tròn số; sử dụng điểm nổi.

Giải pháp dự định (khác với giải pháp được tìm thấy bởi @tehtmi):

:&+n10U'P'/^

Giải trình

:&+ % 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 Thật vậy! Làm tốt! Giải pháp dự định của tôi là khác nhau; Tôi vừa đăng nó
Luis Mendo


10

Perl, 42 byte (An toàn)

Có 41 byte mã và -pcờ (không có cờ nào khác).

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

Kết quả không được làm tròn (hoặc được làm tròn đến cùng một điểm mà Perl sẽ làm tròn bằng cách thực hiện $_ = (sqrt $_) * ($_ ** 2)).

Dung dịch:

$_=eval".i44<4}{|~"=~s/./chr-10+ord$\&/gre
(không có \trước &spoiler - markdown dường như không thích $theo sau &)
Hãy thử trực tuyến!

Giải trình:

.i44<4}{|~$_**2*sqrtnhưng với tất cả các nhân vật thay thế bằng nhân vật với mã ascii của nó + 10 (mã ascii của $36, vì vậy nó trở nên .có ascii code đang 46, vv).
Mục đích của s/./chr-10+ord$\&/gresau đó là hoàn tác việc chuyển đổi này: nó thay thế từng ký tự bằng ký tự với mã ascii 10 thấp hơn. ( chr-10+ord$\&Có lẽ là rõ ràng hơn như chr(ord($\&)-10)nơi chrtrả về nhân vật tương ứng với một mã ascii, và ordtrả về mã ascii tương ứng với một nhân vật).
cuối cùng, evalđánh giá chuỗi này, và do đó tính kết quả, được lưu trữ $_, được in ngầm ở cuối nhờ -pcờ.


Thật. Tôi đã cố gắng chỉnh sửa nhanh chóng vì tôi thấy 4 phiếu mở lại và hy vọng sẽ sửa câu hỏi trước khi lần thứ 5 được bỏ. Nếu câu hỏi đã được để lại trong hộp cát cho đến khi nó sẵn sàng, nó sẽ tốt hơn cho tất cả những người liên quan.
Peter Taylor

@PeterTaylor Chắc chắn, không có vấn đề gì, và dù sao thì nó cũng rất rõ ràng (tôi không đổ lỗi cho bất kỳ ai, mà chỉ chỉ ra một dòng chảy nhỏ (mà tôi đã sửa ngay lập tức (giới thiệu lỗi chính tả trong quy trình)). Và tôi không thể đồng ý nhiều hơn về phần hộp cát.
Dada

bạn có thể giải thích một chút không?
phuclv

@ LưuViênPhúc Ý bạn là nếu tôi có thể giúp bạn một chút giúp đỡ để bẻ khóa nó? mmh ... mã bắt đầu bằng $_=. Và có một evalnơi nào đó. (đó không phải là nhiều nhưng tôi cảm thấy tôi không thể cung cấp cho bạn nhiều hơn mà không cung cấp cho bạn quá nhiều thông tin)
Dada

8

Octave, 43 byte (An toàn)

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

Đây là một tập lệnh yêu cầu đầu vào từ dòng lệnh (nó không phải là một chức năng). Đó là độ chính xác của dấu phẩy động (vì vậy không làm tròn số).

Dung dịch:

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

Giải trình:

eval( <string> ) % Evaluated the string inside the brackets and executes it
Tất cả mọi thứ trong evalcuộc gọi được đánh giá như input('')^2.5

thế nào?

-[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'

Thêm vectơ đầu tiên vào chuỗi này sẽ chuyển đổi nó thành vectơ số nguyên:
[105, 110, 112, 117, 116, 40, 39, 39, 41, 94, 50, 46, 53]

evalngầm chuyển đổi nó thành một chuỗi và những con số này thực sự là: input('')^2.5


1
Điều này thật khó. Làm tốt!
Luis Mendo

7

C, 50 byte ( Bị bẻ khóa bởi fergusq )

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

Sử dụng làm tròn chuẩn IEEE754. Như được lưu ý bởi câu trả lời của fergusq, có thể yêu cầu -lmtùy thuộc vào trình biên dịch của bạn.



@fergusq đúng, và gần như chính xác những gì tôi đã có. Làm tốt; Tôi nghĩ rằng tôi đã để lại đủ số lượng cá trích đỏ ở đó để khiến mọi người bận rộn lâu hơn nhiều!
Dave

@Dave Wow, có vẻ như là một lỗi cú pháp lúc đầu.
Erik the Outgolfer

6

Mathicala, 131 byte, không cạnh tranh?, Đã bị bẻ khóa

Điều này đã bị bẻ khóa bởi @ lanlock4 ! Tuy nhiên, tôi vẫn có các điểm internet để ban cho một người tìm ra giải pháp ban đầu, nơi tất cả các nhân vật thực sự cần thiết ....

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

Điều này được dự định như một câu đố. Mặc dù bạn có thể sử dụng các ký tự trên theo cách bạn muốn, tôi chắc chắn có ý định cho câu trả lời theo mẫu

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

trong đó các dòng đầu tiên và thứ ba chỉ là một trình bao bọc để làm tròn và hiển thị hợp pháp (nó ghi mọi đầu ra thành chính xác ba chữ số thập phân, được làm tròn) và dòng thứ hai là phiên bản được xáo trộn của các đoạn mã. Đầu ra mẫu:

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

(Mathematica là phần mềm không miễn phí, nhưng có một hộp cát Wolfram nơi có thể kiểm tra số lượng mã khiêm tốn. Ví dụ: cắt và dán mã

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

định nghĩa một hàm mà sau đó bạn có thể gọi như f@6hoặc f[9], nó thực hiện tương tự như phiên bản mã được xắp xếp lại ở trên. Vì vậy, điều này thực sự phải không cạnh tranh?)



6

Swift - 64 byte (An toàn)

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

Không làm tròn và hiển thị .0ngay cả khi kết quả là số nguyên.




4

C #, 172 byte ( Được bẻ khóa bởi SLuck49 )

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

Mã này là một chương trình đầy đủ.

Có bảy nhân vật không gian khi bắt đầu.

Đầu vào được đọc mẫu STDIN và được in thành STDOUT. Kết quả là trong double, không làm tròn số.

Mã gốc không được mã hóa:

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

Không làm tròn số. Điểm nổi chính xác.


Thật sao, 3 lambdas?
Ông Xcoder

3

Haskell, 64 byte, ( bị bẻ khóa bởi Laikoni )

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

Hoạt động điểm nổi Haskell tiêu chuẩn.

Phiên bản gốc của tôi là:

sản phẩm. ((($ succ $ cos $ 0) (flip (**).) [id, người nhận])). flip (id)



@Laikoni: làm tốt lắm!
nimi

3

Fourier , 124 119 byte

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

Không có khoảng trắng hoặc ký tự dòng mới.

Căn bậc hai được làm tròn đến số nguyên gần nhất vì Fourier dường như không xử lý bất cứ thứ gì ngoài số nguyên (và vì @ATaco có sự cho phép, tôi hy vọng điều này ổn)

đã sửa một lỗi chỉnh sửa, nếu bạn đã bẻ khóa này, thì trước đó là chức năng

Nhận ra rằng tôi đã hiểu nhầm một phần của mã và đang sử dụng nhiều ký tự hơn mức tôi cần

Nếu tôi bỏ lỡ bất cứ điều gì hãy cho tôi biết




3

Octave, 30 byte (An toàn)

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

Một chút đơn giản hơn so với cái đầu tiên của tôi. Không nên quá khó, nhưng hy vọng đó là một câu đố vui.


2
Không ^? Hmmm ...
Luis Mendo

1
Đã đến với điều này @(e)(e**((i/(i+i))+~sum(e:j)))nhưng nó chỉ n^1.5... điều này khó khăn.
Kyle Gullion

3

Ồ, 11 byte

M ⁿ¡D¼½;+1I

Sử dụng với -ccờ. Sử dụng mã hóa CP-437.


Tôi xin lỗi, nhưng bạn có chắc chắn điều này là chính xác?
dùng4867444

Bây giờ không ai đã bẻ khóa nó trong thời gian truyền đạt, hãy chia sẻ giải pháp của bạn? Tôi rất tò mò :)
user4867444

Hiện tại, đây là câu trả lời ngắn nhất được coi là an toàn. Tôi sẽ chấp nhận nó, nhưng nếu bạn không đăng mã gốc trong 5 ngày, tôi sẽ bỏ chọn điều này, vì tôi không chắc điều này là có thể. EAGER cũng thấy giải pháp
Ông Xcoder

2
@ RomanGräf cố gắng tìm giải pháp của bạn, xin vui lòng. Nếu không, tôi sẽ bỏ chọn điều này ...
Ông Xcoder

1
@ RomanGräf: ping? Vẫn rất háo hức để xem giải pháp đó :)
user4867444


2

Javascript, 123 byte, bị bẻ khóa bởi notjagan

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

Mã này là một chức năng đầy đủ

Có một nhân vật không gian ở đầu danh sách các nhân vật

Làm tròn câu trả lời này là độ chính xác của dấu phẩy động cho Javascript, độ chính xác nằm trong khoảng 10 ^ -6 cho mỗi câu trả lời.

Ngắn hơn vì độ chính xác không cần phải duy trì ở mức cao như tôi nghĩ.

Tôi đã nhận ra rằng nó sẽ dễ giải quyết hơn nhiều so với lúc đầu tôi đã làm nhưng nó đã ở đó: P

Mã ban đầu:

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)))))}

Phương pháp Newton, áp dụng 5 lần từ công suất gần nhất của 2



2

Ruby, 35 byte (bị bẻ khóa bởi xsot )

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

Không làm tròn số. Điểm nổi chính xác.



2

05AB1E , 47 byte

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

Không tròn, sử dụng độ chính xác điểm nổi.





2

Excel, 26 byte

=(())*//11122AAAIINPQRSST^

Không làm tròn số.

Lưu ý: Vì Excel là phần mềm trả phí, nên phần mềm này cũng hoạt động trong LibreScript miễn phí


1
Có cách nào để chạy cái này mà không cần mua Excel không? Hiện tại, có sự đồng thuận rằng các ngôn ngữ không miễn phí không thể được sử dụng trong cảnh sát và tên cướp.
Thuật sĩ lúa mì

1
Nên làm việc trong Libreoffice miễn phí, nhưng tôi sẽ kiểm tra và liên hệ lại.
pyjama

1
Hoạt động tốt.
pyjama


@WheatWizard, không còn liên quan nữa, nhưng tôi nghĩ rằng sự đồng thuận là: Ngôn ngữ không miễn phí có thể được sử dụng, nhưng nên được đánh dấu là không cạnh tranh .
Stewie Griffin

2

RProgN 2 , 6 byte ( Được bẻ khóa bởi @notjagan )

š2]^*\

Không làm tròn, hiển thị nhiều vị trí thập phân. Không hiển thị bất kỳ cho một giải pháp số nguyên.


2
Điều này thực sự thực hiện n²√n? Tôi có thể dễ dàng lấy nó để tính toán n² + √n, nhưng tôi không thể tìm thấy cách bạn có các điều khoản để nhân lên.
notjagan

@notjagan tôi cũng vậy ... đã cố gắng trong 2 giờ để bẻ khóa và không có gì hoạt động. ATaco bạn có chắc chắn rằng nguồn là chính xác?
Ông Xcoder

@ Mr.Xcoder Ah, bạn khá chính xác. Xin lỗi vì đã lãng phí thời gian tập thể của bạn! Xin vui lòng xem các nguồn chỉnh sửa.
ATaco

Bây giờ nó có ý nghĩa!
Ông Xcoder

Một chút muộn vì tôi bận, nhưng bị nứt .
notjagan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.