Tạo số tiền riêng biệt


10

Bạn nên viết một chương trình hoặc hàm nhận số nguyên làm đầu vào và đầu ra hoặc trả về hai số nguyên có tổng là số nguyên đầu tiên.

Có một yêu cầu nữa: không có số nào có thể là một phần của đầu ra cho hai đầu vào khác nhau .

Chi tiết

  • Bạn sẽ có thể xử lý các đầu vào cho ít nhất là phạm vi -32768 .. 32767(bao gồm).
  • Nếu kiểu dữ liệu của bạn không thể xử lý các số nguyên tùy ý, điều đó tốt nhưng thuật toán của bạn sẽ hoạt động cho các số lớn và nhỏ tùy ý trong lý thuyết.

Ví dụ

Mỗi khối hiển thị một phần của giải pháp đúng hoặc không chính xác ở định dạng input => output.

1 => 6 -5
2 => -2 4
15 => 20 -5

Incorrect, as `-5` is used in two outputs.

-5 => -15 10
0 => 0 0
1 => 5 6
2 => -5 7

Incorrect, as `5 + 6` isn't `1`.

-1 => -1 0
0 => 6 -6
2 => 1 1

Can be correct if other outputs doesn't collide.

Đây là mã golf nên mục ngắn nhất sẽ thắng.


Bạn có thể giới hạn phạm vi đầu vào là -32768 .. 32767 để chúng tôi không phải sử dụng số nguyên 17 bit không?
FUZxxl

@FUZxxl Xấu của tôi, đó là ý định. Đã sửa.
ngẫu nhiên

Đầu ra có thể là một danh sách / mảng / tuple / set / etc chứa hai số nguyên không? (Ví dụ: f (1) => [2, -1])
đơn cực

Dường như có một số giải pháp về cơ bản dựa vào kích thước số nguyên bị hạn chế - ví dụ: bằng cách nhân số đầu vào với số dương lớn và số âm lớn. Dường như với tôi rằng các giải pháp như vậy đang thất bại với yêu cầu rằng "thuật toán của bạn nên hoạt động cho các số lớn và nhỏ tùy ý trong lý thuyết". Tôi có đang đọc sai câu hỏi không?
mathmandan 18/07/2015

Câu trả lời:


9

Bình thường, 8 byte

_J^Q3+QJ

Trình diễn. Tương đương với mã Python 2:

Q=input()
J=Q**3
print -J
print Q+J

Vì vậy, đầu ra có hình thức (-n**3, n+n**3)

Một số kết quả đầu ra:

-5 (125, -130)
-4 (64, -68)
-3 (27, -30)
-2 (8, -10)
-1 (1, -2)
 0 (0, 0)
 1 (-1, 2)
 2 (-8, 10)
 3 (-27, 30)
 4 (-64, 68)
 5 (-125, 130)

Đây là những điểm khác biệt bởi vì các hình khối có khoảng cách đủ xa mà việc thêm nvào n**3không đủ để vượt qua khoảng cách đến khối tiếp theo: n**3 < n+n**3 < (n+1)**3cho dương nvà đối xứng cho âm n.


Bạn không cần ,ngay từ đầu, hai dòng dường như được cho phép.
Maltysen 18/07/2015

@Maltysen Tôi đã thử gỡ bỏ nó, nhưng chỉ in số thứ hai. Có lẽ Jnhiệm vụ ngăn chặn in ấn?
xnor

Ồ vâng, bạn đúng, xin lỗi.
Maltysen 18/07/2015

-trong pyth không phải là toán tử phủ định đơn nguyên _, do đó, nó _J^Q3+QJhoạt động như mong đợi.
Maltysen

@Maltysen Thật ra, cái đó hiệu quả, tôi chỉ cần Jkhông ở bên ngoài. Cảm ơn đã chọc tôi về điều này.
xnor

8

Người tuyết 0.1.0 , 101 ký tự

}vg0aa@@*45,eQ.:?}0AaG0`NdE`;:?}1;bI%10sB%nM2np`*`%.*#NaBna!*+#@~%@0nG\]:.;:;bI~0-NdEnMtSsP" "sP.tSsP

Đầu vào trên STDIN, đầu ra được phân tách bằng dấu cách trên STDOUT.

Điều này sử dụng phương pháp tương tự như câu trả lời của isaacg.

Phiên bản được bình luận với dòng mới, cho "khả năng đọc":

}vg0aa          // get input, take the first char
@@*45,eQ.       // check if it's a 45 (ASCII for -) (we also discard the 0 here)
// this is an if-else
:               // (if)
  ?}0AaG        // remove first char of input (the negative sign)
  0`NdE`        // store a -1 in variable e, set active vars to beg
;
:               // (else)
  ?}1           // store a 1 in variable e, set active vars to beg
;bI             // active variables are now guaranteed to be beg
%10sB           // parse input as number (from-base with base 10)
%nM             // multiply by either 1 or -1, as stored in var e earlier
2np`*`          // raise to the power of 2 (and discard the 2)
%.              // now we have the original number in b, its square in d, and
                //   active vars are bdg
*#NaBna!*+#     // add abs(input number) to the square (without modifying the
                //   input variable, by juggling around permavars)
@~%@0nG\]       // active vars are now abcfh, and we have (0>n) in c (where n is
                //   the input number)
:.;:;bI         // if n is negative, swap d (n^2) and g (n^2+n)
~0-NdEnM        // multiply d by -1 (d is n^2 if n is positive, n^2+n otherwise)
tSsP            // print d
" "sP           // print a space
.tSsP           // print g

Bình luận về giải pháp Snowman đầu tiên trên PPCG: Tôi nghĩ mục tiêu thiết kế của tôi là làm cho ngôn ngữ của tôi trở nên khó hiểu nhất có thể đã đạt được.

Điều này thực sự có thể đã ngắn hơn rất nhiều, nhưng tôi là một thằng ngốc và quên thực hiện các số âm cho chuỗi -> phân tích số. Vì vậy, tôi phải tự kiểm tra xem liệu có một -ký tự đầu tiên và loại bỏ nó nếu có.


1
Cách tốt hơn Brainfuck.
giai đoạn

1
Đà điểu cảm thấy thế nào về điều này? ;)
Kade

6

Bình thường, 15 11 byte

4 byte nhờ @Jakube

*RQ,hJ.aQ_J

Trình diễn.

Bản đồ này như sau:

0  -> 0, 0
1  -> 2, -1
-1 -> -2, 1
2  -> 6, -4
-2 -> -6, 4

Và như vậy, trên, luôn luôn liên quan n^2n^2 + n, cộng hoặc trừ.


5

APL, 15 byte

{(-⍵*3)(⍵+⍵*3)}

Điều này tạo ra một hàm đơn nguyên chưa được đặt tên trả về cặp -n ^ 3 ( -⍵*3), n + n ^ 3 ( ⍵+⍵*3).

Bạn có thể thử nó trực tuyến .


2

Pyth - 11 10 byte

Chỉ cần nhân với 10e10 và -10e10 + 1 Cảm ơn @xnor đã cho tôi thấy rằng tôi có thể sử dụng CGcho số này.

*CGQ_*tCGQ

Hãy thử trực tuyến tại đây .


Bạn có thể làm cho một số lượng lớn phù hợp như CG.
xnor

@xnor thêm vào danh sách mẹo.
Maltysen

2

O , 17 15 9 byte

Sử dụng một số tính năng mới của O.

3 ^ .Q + p_p

Phiên bản cũ hơn

[i # .Z3 ^ * \ Z3 ^) _ *] o

1
Tôi bắt đầu thích những câu trả lời O này, mặc dù tôi muốn nó nhiều hơn nếu trình thông dịch không được viết bằng Java ...;)
kirbyfan64sos

@ kirbyfan64sos Nó không nhỏ như Pyth, nhưng nó có thể đánh bại CJam & GolfScript trong một số trường hợp. Nó thách thức có thể đánh bại bất cứ điều gì phải làm với mảng, vì chúng rất mạnh.
giai đoạn

1

Trăn 3, 29 27

Chỉnh sửa: không đáp ứng yêu cầu trong dấu đầu dòng "Chi tiết" thứ 2

Tiền thưởng: bao gồm từ -99998 đến 99998


lambda n:[99999*n,-99998*n]

Điều này tạo ra một hàm ẩn danh *, mà bạn có thể sử dụng bằng cách đặt trong ngoặc và sau đó đặt đối số vào ngoặc sau như sau:

(lambda n:[99999*n,-99998*n])(arg)

* Cảm ơn @ vioz- đã gợi ý điều này.


Ví dụ đầu vào / đầu ra:

>>> (lambda n:[99999*n,-99998*n])(1)
[99999, -99998]
>>> (lambda n:[99999*n,-99998*n])(2)
[199998, -199996]
>>> (lambda n:[99999*n,-99998*n])(0)
[0, 0]
>>> (lambda n:[99999*n,-99998*n])(-1)
[-99999, 99998]
>>> (lambda n:[99999*n,-99998*n])(-2)
[-199998, 199996]
>>> (lambda n:[99999*n,-99998*n])(65536)
[6553534464, -6553468928]

1
Bài đăng hay! Để bạn biết, bạn có thể xóa f=và để lại dưới dạng hàm ẩn danh, đây vẫn là một câu trả lời hợp lệ. Sau đó, bạn có thể giảm số byte của mình xuống 27 :)
Kade

1
"... thuật toán của bạn nên hoạt động cho các số lớn và nhỏ tùy ý trong lý thuyết." Rõ ràng (lambda n:[99999*n,-99998*n])(99999)(lambda n:[99999*n,-99998*n])(-99998)sẽ va chạm trong lý thuyết (và trong thực tế).
mathmandan 18/07/2015

@mathmandan Bạn nói đúng, tôi sẽ chỉnh sửa bài đăng của mình để làm rõ rằng nó không đáp ứng yêu cầu. Tôi sẽ cố gắng viết và kiểm tra mã mới nhưng tôi đang ở trên điện thoại di động.
đơn cực

0

Haskell, 16 byte

Tôi xấu hổ sao chép phương pháp của @ xnor. Có lẽ không tốt hơn thế này nhiều.

f x=(-x^3,x^3+x)
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.