Thêm mà không cần thêm (hoặc bất kỳ trong số 4 toán tử số học cơ bản)


40

Vấn đề:

Mục tiêu của bạn là thêm hai số đầu vào mà không sử dụng bất kỳ toán tử toán học nào sau đây : +,-,*,/.

Ngoài ra, bạn không thể sử dụng bất kỳ hàm dựng sẵn nào được thiết kế để thay thế các toán tử toán học đó.

Ghi điểm:

Mã nhỏ nhất (về số byte) thắng.

Cập nhật

Hầu hết các chương trình tôi đã thấy hoặc ghép hai mảng chứa số của chúng hoặc tạo first numberthành một ký tự, nối các second numberký tự, sau đó đếm tất cả.

Bộ đếm mảng ngắn nhất: APL với 8 ký tự, bởi Tobia

Ghép mảng ngắn nhất: Golfscript với 4 ký tự, bởi Doorknob

Giải pháp logarit ngắn nhất: TI-89 Basic với 19 ký tự, bởi Quincunx

Giải pháp tích hợp: Mathicala với 45 ký tự, bởi Michael Stern

Thú vị nhất, theo ý kiến ​​của tôi: các toán tử bitwise trong javascript, bởi dave


Nó sẽ có phao?
Ismael Miguel

7
Nó sẽ có số âm? (Hiện tại, tất cả các câu trả lời đều cho rằng các con số sẽ dương, vì vậy bạn có thể không nên thay đổi điều đó)
Doorknob

4
Còn các giải pháp toán học thì sao? Bạn quên liệt kê những cái đó! Điều này tích hợp, và điều này chơi với logarit
Justin

3
Tại sao bạn chấp nhận một trong những giải pháp dài hơn? Có phải vì nó chấp nhận số âm trong khi các giải pháp ngắn nhất ( cái nàycái này ) thì không? Nếu vậy, câu trả lời của tôi hỗ trợ các số âm (nó cũng hỗ trợ dấu phẩy động) và ngắn hơn số này. Bạn đã gắn thẻ câu hỏi này dưới dạng mã golf , do đó bạn có nghĩa vụ phải chấp nhận giải pháp ngắn nhất .
Justin

2
Xác định "số". Bất kỳ số nguyên? Số nguyên không âm? Họ có phải là căn cứ 10 không?
SuperJedi224

Câu trả lời:


2

Smalltalk, 21 13

Tất cả những điều sau đây chỉ hoạt động trên các số nguyên dương. Xem câu trả lời khác của Smalltalk cho một câu nghiêm túc.

phiên bản 1

chuyển sang một số nguyên lớn và yêu cầu nó cho chỉ số bit cao của nó (xấu, lập chỉ mục ST là dựa trên 1, vì vậy tôi cần một sự thay đổi bên phải bổ sung):

(((1<<a)<<b)>>1)highBit

phiên bản 2

tương tự, và thậm chí ngắn hơn một chút (do các quy tắc ưu tiên của Smalltalk và không cần dịch chuyển đúng):

1<<a<<b log:2 

phiên bản 3

một biến thể khác của chủ đề "kích thước yêu cầu bộ sưu tập",
cho hai số a và b,

((Array new:a),(Array new:b)) size

sử dụng Khoảng thời gian làm bộ sưu tập, chúng tôi có được phiên bản thân thiện với bộ nhớ hơn ;-) trong 21 ký tự:

((1to:a),(1to:b))size

không khuyến khích cho crunching số nặng, mặc dù.

phiên bản4

Để giải trí, nếu bạn muốn đánh đổi thời gian cho bộ nhớ, hãy thử:

Time secondsToRun:[
   Delay waitForSeconds:a.
   Delay waitForSeconds:b.
]

thường đủ chính xác (nhưng không bảo đảm ;-)))

phiên bản5

ghi vào một tập tin và yêu cầu nó cho kích thước của nó

(
    [
        't' asFilename 
            writingFileDo:[:s |
                a timesRepeat:[ 'x' printOn:s ].
                b timesRepeat:[ 'x' printOn:s ]];
            fileSize 
    ] ensure:[
        't' asFilename delete
    ]
) print

45

Javascript (25)

while(y)x^=y,y=(y&x^y)<<1

Điều này thêm hai biến x và y, chỉ sử dụng các phép toán bit và lưu kết quả trong x.

Điều này làm việc với các số âm, quá.


1
@dave, nếu bạn chuyển sang một lúc, bạn có thể lưu thêm hai ký tự với while(y)x^=y,y=(y&x^y)<<1!
Dom Hastings


3
@ user3125280, Vấn đề không phải là "làm thêm mà không làm bổ sung" (hơi vô lý), mà là "làm thêm mà không có toán tử cơ bản"
Brian S

8
@ user3125280, tôi xin lỗi, nhưng bất kỳ sự thô lỗ nào bạn diễn giải từ nhận xét của tôi đều không có ý định. Tôi nghĩ rằng bạn sẽ gặp khó khăn khi tìm thấy rất nhiều người đồng ý rằng XOR nên được nhóm với PLUS trong danh mục "số học cơ bản". Thậm chí ngoài việc tìm kiếm những người đồng ý, OP còn gọi rõ ràng những gì các nhà khai thác không được phép và XOR không phải là một trong số họ. Ergo, đây là một câu trả lời hợp lệ.
Brian S

3
for(;y;y=(y&x^y)<<1)x^=yngắn hơn 1 byte :)
William Barbosa

22

C - 38 byte

main(){return printf("%*c%*c",3,0,4);}

Tôi gian lận một chút ở đây, OP nói không sử dụng bất kỳ toán tử toán học nào .

Các *trong printf()định dạng phương tiện mà các lĩnh vực rộng dùng để in các nhân vật được lấy từ một cuộc tranh cãi của printf(), trong trường hợp này, 3 và 4. Giá trị trả về của printf()là số ký tự in. Vì vậy, nó in một ' 'với chiều rộng trường là 3 và một với chiều rộng trường là 4, tạo tổng cộng 3 + 4 ký tự.

Giá trị trả về là các số được thêm vào trong printf()cuộc gọi.


3
Bạn nên tạo 3 và 4 tham số, và hàm không cần phải có main. Ngoài ra, nếu bạn không quan tâm những gì bạn in, bạn có thể thay thế một ' 'với 0và bỏ qua thứ hai.
ugoren

17

Python - 49 byte

Giả sử đầu vào theo vị trí trong các biến xy.

from math import*
print log(log((e**e**x)**e**y))

Đây byte 61 giải pháp là một chương trình đầy đủ:

from math import*
print log(log((e**e**input())**e**input()))

Xem xét rằng bạn đã không cấm lũy thừa, tôi đã phải đăng bài này. Khi bạn đơn giản hóa biểu thức bằng các thuộc tính của logarit, bạn chỉ cần lấy print input() + input().

Điều này hỗ trợ cả số âm và dấu phẩy động.

Lưu ý: Tôi đã làm theo lời khuyên của gnibbler và chia câu trả lời này thành ba. Đây là giải pháp Mathicala và đây là giải pháp TI-89 Basic .


Tôi đã cố gắng làm một cái gì đó tương tự như vậy với javascript, nhưng quên mất công thức là gì vì đã vài năm rồi tôi mới thấy nó và đang tìm kiếm trên mạng để tìm nó.
Victor Stafusa

4
@Victor Tôi tự tạo công thức. Tôi nhớ toán rất rõ.
Justin

1
Mathicala của bạn rất gần, bạn chỉ cần viết hoa các ký hiệu tích hợp. Nhật ký [Nhật ký [(E ^ E ^ x) ^ (E ^ y)]] hoạt động (23 ký tự hoặc 22 nếu bạn sử dụng ký hiệu @ cho gói chức năng bên ngoài).
Michael Stern

"Nếu tôi được phép giả sử đầu vào theo vị trí trong các biến x và y .." Tôi nghĩ bạn có thể - những người khác cũng làm như vậy.
blabla999

@MichaelStern: Bạn có thể lưu thêm hai ký tự bằng cách bỏ qua dấu ngoặc đơn xung quanh E^y. Sử dụng Log[Log[(E^E^x)^E^y]]dường như hoạt động tốt.
alexwlchan

14

JavaScript [25 byte]

~eval([1,~x,~y].join(''))

1
Câu trả lời của bạn có vẻ tệ (và thu hút downvote), nhưng nó thực sự là một câu trả lời hay. Vui lòng xóa cái này để loại bỏ các downvote và đăng lại cái này với một số văn bản giải thích nó. Tôi sẽ nâng cao câu trả lời mới của bạn.
Victor Stafusa

1
Bây giờ nó trông thực sự tốt, tôi thích nó. Chắc chắn là giá trị upvote nhiều hơn.
VisioN

13

Toán học, 21 byte

Có một số cách để làm điều này trong Mathematica. Một, sử dụng chức năng Tích lũy và ném mọi thứ trừ số cuối cùng trong đầu ra. Như với giải pháp khác của tôi dưới đây, tôi giả sử các số đầu vào nằm trong các biến ab. 21 byte.

Last@Accumulate@{a, b}

Thú vị hơn, mặc dù có 45 ký tự, sử dụng các số để xác định một dòng và tích hợp bên dưới nó.

Integrate[Fit[{{0, a}, {2, b}}, {x, 1}, x], {x, 0, 2}]

Như một phần thưởng, cả hai giải pháp đều hoạt động cho tất cả các số phức, không chỉ các số nguyên dương mà dường như là trường hợp đối với một số giải pháp khác ở đây.


2
Tôi yêu sự hòa nhập! (mặc dù, nói đúng ra điều này làm tăng thêm một cái gì đó). +1
blabla999

Giải pháp thứ 1 không hợp lệ. Trích dẫn tác giả của thử thách: "Ngoài ra, bạn không thể sử dụng bất kỳ hàm dựng sẵn nào được thiết kế để thay thế các toán tử toán học đó." Tôi đã đưa ra giải pháp này : function _(){return array_sum(func_get_args());}. Tôi phải gỡ nó xuống vì tôi không thể tìm ra cách ngắn để "sửa" nó.
Ismael Miguel

@Ismael Miguel Accumulation [] không được thiết kế để thay thế Plus. Nó tình cờ đưa ra tổng số danh sách các số trong số các kết quả đầu ra của nó và tôi tận dụng lợi thế đó.
Michael Stern

Nhưng nó làm tổng của tất cả các yếu tố trong danh sách đó, phải không? Nếu theo tôi, nó không hợp lệ như sử dụng array_sum()trong php, điều này cũng chính xác như vậy.
Ismael Miguel

3
@Ismael Miguel Có tồn tại hàm Mathicala tính tổng một mảng, được gọi là Total []. Tôi đồng ý rằng nó sẽ trái với các quy tắc như được chỉ định để sử dụng chức năng đó, nhưng tôi đã không làm như vậy. Đầu ra của Tích lũy [{a, b}] không phải là a + b.
Michael Stern

12

GolfScript, 6 4 ký tự / byte

Nhập vào dưới dạng 10, 5(=> 15).

~,+,

Đây +là mảng nối, không bổ sung.

Cách thức hoạt động của nó là ,được sử dụng để tạo một mảng có độ dài mà số đó là ( 0,1,...,n-2,n-1). Điều này được thực hiện cho cả hai số, sau đó các mảng được nối. ,được sử dụng lại cho một mục đích khác, để tìm độ dài của mảng kết quả.

Bây giờ, đây là mẹo . Tôi thực sự thích cái này vì nó lạm dụng định dạng đầu vào. Có vẻ như nó chỉ nhập một mảng, nhưng thực sự, vì đầu vào đang được thực thi dưới dạng mã GolfScript, lần đầu tiên ,đã được thực hiện cho tôi! (Phiên bản 6 ký tự cũ là ~,\,+,với định dạng đầu vào 10 5, tôi đã loại bỏ 2 ký tự bằng cách loại bỏ \,(mảng trao đổi)).

Phiên bản cũ (12) :

Tạo một chức năng f.

{n*\n*+,}:f;

Các *+là chuỗi lặp lại và nối tương ứng, không phải là hàm số học.

Giải thích: ntạo chuỗi một ký tự (một dòng mới). Điều này sau đó được lặp đi lặp lại nhiều alần, sau đó điều tương tự được thực hiện với b. Các chuỗi được nối, và sau đó ,được sử dụng cho chiều dài chuỗi.


Nó cũng hoạt động cho các số âm?
Michael Stern

@MichaelStern Không, nhưng điều đó không bao giờ được đề cập trong câu hỏi. Hmm, tôi đã thêm một bình luận. Hầu hết (trên thực tế, tất cả ) các câu trả lời khác cũng giả định tích cực.
Doorknob

Xem giải pháp Mathicala của tôi. Trong ngôn ngữ phù hợp, giải pháp cho số âm là có thể.
Michael Stern

@MichaelStern LOL @ "ngôn ngữ phù hợp" trên trang này của tất cả các địa điểm trên thế giới
Tobia

10

C, 29 27 byte

Sử dụng số học con trỏ:

f(x,y)char*x;{return&x[y];}

x được định nghĩa là một con trỏ, nhưng người gọi sẽ truyền một số nguyên.

Một người dùng ẩn danh đã đề xuất các mục sau - cũng là 27 byte, nhưng các tham số là số nguyên:

f(x,y){return&x[(char*)y];}

Dạng đầu tiên có thể bị hỏng nặng nếu truyền hai ints trên các hệ thống phổ biến hiện nay intcó 32 bit và con trỏ có 64 bit. Thứ hai tránh được vấn đề đó.
hvd

@hvd, Cả hai đều hoạt động, ít nhất là trên Linux 64bit. Các tham số nguyên được mở rộng đến kích thước đăng ký máy nào.
ugoren

Ah, đủ công bằng, đồng ý rằng đó có thể sẽ là trường hợp phổ biến. Tuy nhiên, sẽ bình luận lại nếu tôi có thể tìm thấy một ví dụ cụ thể không hoạt động. :)
hvd

8

Brainf * ck, 9 36

,>,[-<+>]

++[->,[->>[>]+[<]<]<]>>>[<[->+<]>>]<

Điều này hoạt động mà không sử dụng bổ sung đơn giản; nó đi qua và đặt dấu vết của 1 giây và sau đó đếm chúng

Lưu ý: Việc +-chỉ đơn thuần là gia số đơn lẻ và không có gì có thể được thực hiện trong brainf * ck mà không có chúng. Chúng không thực sự cộng / trừ nên tôi tin rằng điều này vẫn còn có giá trị.


-1. Đây là bổ sung đơn giản. Nếu bạn đã làm một cái gì đó không phải là cộng, nhân, v.v., thì nó sẽ được tính, nhưng như vậy, điều này không được tính.
Justin

@Quincunx Tôi đã sửa nó; tôi đã làm điều đó bằng cách đi qua và để lại dấu vết của những người sau đó quét qua và 'nhặt' con đường đó
HỎI

3
Đảo ngược. Công việc tốt.
Justin

6

J (6)

Bạn đã không nói rằng chúng tôi không thể sử dụng chức năng succ:

>:@[&0

Sử dụng:

   9>:@[&0(8)
17

Nó chỉ thực hiện 9 lần lặp lại >:trên 8.

Cách tiếp cận danh sách nối cũng hoạt động : #@,&(#&0). Và - tôi biết điều đó trái với quy tắc - Tôi không thể để câu trả lời này mà không có giải pháp J-ish nhất: *&.^(phép nhân theo cấp số nhân).


5

Bản tin, 41

Chúng tôi xác định hàm với biểu thức 41 byte dài như sau:

/a{0 moveto 0 rmoveto currentpoint pop}def

Sau đó, chúng tôi gọi nó là:

gs -q -dBATCH -c '/a{0 moveto 0 rmoveto currentpoint pop}def' -c '10 15 a ='

Mà cho

25.0

Nó dễ dàng xử lý các tiêu cực và nổi, không giống như hầu hết các đối thủ cạnh tranh :-)



4

Smalltalk (nghiêm túc), 123 118 105 (*)

Xin lỗi vì đã trả lời hai lần, nhưng hãy coi đây là một câu trả lời nghiêm túc, trong khi câu hỏi còn lại giống như sự hài hước. Điều sau đây thực sự được thực hiện ngay tại thời điểm này trong tất cả các máy của chúng tôi (mặc dù về phần cứng). Kỳ lạ là nó không xuất hiện trong tâm trí của ai khác ...

Bằng cách kết hợp hai nửa bổ trợ và thực hiện song song tất cả các bit của các từ, chúng tôi nhận được (đầu vào a, b; đầu ra trong s) phiên bản có thể đọc được:

  s := a bitXor: b.            
  c := (a & b)<<1.             

  [c ~= 0] whileTrue:[        
     cn := s & c.
     s := s bitXor: c.
     c := cn<<1.
     c := c & 16rFFFFFFFF.
     s := s & 16rFFFFFFFF.
  ].
  s           

Các vòng lặp là để truyền mang. Các mặt nạ đảm bảo rằng các số nguyên đã ký được xử lý (không có chúng, chỉ có số không dấu là sở hữu). Họ cũng xác định độ dài từ, ở trên là cho hoạt động 32 bit. Nếu bạn thích bổ sung 68 bit, hãy đổi thành 16rFFFFFFFFFFFFFFF.

phiên bản golf (123 ký tự) (tránh mặt nạ dài bằng cách sử dụng lại trong m):

[:a :b||s c n m|s:=a bitXor:b.c:=(a&b)<<1.[c~=0]whileTrue:[n:=s&c.s:=s bitXor:c.c:=n<<1.c:=c&m:=16rFFFFFFFF.s:=s&m].s]

(*) Bằng cách sử dụng -1 thay vì 16rFFFFFFFF, chúng ta có thể chơi golf tốt hơn, nhưng mã không còn hoạt động đối với các số chính xác tùy ý, chỉ dành cho smallIntegers có kích thước từ máy (đại diện cho LargeIntegers không được xác định trong tiêu chuẩn Ansi):

[:a :b||s c n|s:=a bitXor:b.c:=(a&b)<<1.[c~=0]whileTrue:[n:=s&c.s:=s bitXor:c.c:=n<<1.c:=c&-1.s:=s&-1].s]

điều này mang lại kích thước mã xuống 105 ký tự.


Đây là mã golf, vì vậy golf câu trả lời của bạn.
Victor Stafusa

1
không có cơ hội chiến thắng, nhưng tôi sẽ làm điều đó cho bạn ;-)
blabla999

Rất vui khi thấy một câu trả lời của Smalltalk!
Bàn chải đánh răng

4

APL, 8 và 12

Không có gì mới ở đây, phiên bản đếm mảng:

{≢∊⍳¨⍺⍵}

và phiên bản nhật ký log:

{⍟⍟(**⍺)**⍵}

Tôi chỉ nghĩ rằng họ trông thật tuyệt trong APL!

{≢     }       count
  ∊            all the elements in
   ⍳¨          the (two) sequences of naturals from 1 up to
     ⍺⍵        both arguments

 

{⍟⍟        }   the double logarithm of
   (**⍺)       the double exponential of ⍺
        *      raised to
         *⍵    the exponential of ⍵

2
Công bằng mà nói, mọi thứ đều tuyệt vời trong APL.
Michael Stern

Bạn có thể biến hàm đầu tiên thành hàm tiền tố ngầm cho 5:≢∘∊⍳¨
Adám

@ Adám Có, nhưng tôi không thích các hàm ngầm và tôi thấy chúng khó đọc.
Tobia

@Tobia Có lẽ bạn không thích chúng bạn thấy chúng khó đọc? Tôi đang điều hành một hội thảo về đó Bạn đã thấy bài học của tôi về nó chưa?
Adám

@ Adám tuyệt, cảm ơn bạn! Sẽ kiểm tra xem nó ra.
Tobia

4

sed, 359 byte (không có định dạng ưa thích)

Xin lỗi vì câu trả lời muộn, và có lẽ là câu trả lời dài nhất ở đây cho đến nay. Nhưng tôi muốn xem nếu điều này là có thể với sed:

                       s/([^ ]+) ([^ ]+)/\1:0::\2:/
                       :d /^([^:]+):\1::([^:]+):/tx
                       s/(:[^:]*)9([_:])/\1_\2/g;td
s/(:[^:]*)8(_*:)/\19\2/g;s/(:[^:]*)7(_*:)/\18\2/g;s/(:[^:]*)6(_*:)/\17\2/g
s/(:[^:]*)5(_*:)/\16\2/g;s/(:[^:]*)4(_*:)/\15\2/g;s/(:[^:]*)3(_*:)/\14\2/g
s/(:[^:]*)2(_*:)/\13\2/g;s/(:[^:]*)1(_*:)/\12\2/g;s/(:[^:]*)0(_*:)/\11\2/g
                       s/:(_+:)/:1\1/g; y/_/0/; # #
                       bd;  :x  s/.*::([^:]+):/\1/;
                       # # # # # # #  # # # # # # #

Điều này tương tự với https://codegolf.stackexchange.com/a/38087/11259 , chỉ đơn giản là tăng số trong một chuỗi. Nhưng thay vào đó, nó thực hiện các hoạt động gia tăng trong một vòng lặp.

Đầu vào được lấy từ STDIN dưới dạng "x y". Đó là lần đầu tiên được chuyển đổi thành "x: 0 :: y:". Sau đó, chúng tôi tăng tất cả các số đến sau ký tự ":", cho đến khi chúng tôi nhận được "x: x: :( x + y):". Sau đó, chúng tôi cuối cùng đã trở lại (x + y).

Đầu ra

$ printf "%s\n" "0 0" "0 1" "1 0" "9 999" "999 9" "12345 67890" "123 1000000000000000000000"  | sed -rf add.sed
0
1
1
1008
1008
80235
1000000000000000000123
$

Lưu ý rằng điều này chỉ hoạt động cho các số tự nhiên. Tuy nhiên (về lý thuyết ít nhất) nó hoạt động cho các số nguyên lớn tùy ý. Vì chúng tôi đang thực hiện các thao tác tăng x trên y, nên việc đặt hàng có thể tạo ra sự khác biệt lớn về tốc độ: x <y sẽ nhanh hơn x> y.


4

Dấu gạch ngang , 18 byte

time -f%e sleep $@

Yêu cầu thời gian GNU 1.7 trở lên. Đầu ra là STDERR.

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

Lưu ý rằng điều này sẽ không hoạt động trong tro B , vì lệnh thời gian dựng sẵn của nó khác với thời gian GNU.

Với chi phí của một byte bổ sung, \timecó thể được sử dụng thay vì timebuộc Bash sử dụng lệnh bên ngoài.


Điều gì xảy ra nếu một trong những đầu vào là âm?
Michael Stern

4
Nó thất bại. Cũng giống như tất cả các câu trả lời khác.
Dennis

5
Drats! Tôi hy vọng nó đã cho kết quả trước khi câu hỏi được hỏi.
Tobia

3
Vâng. Tôi cũng rất hy vọng rằng bằng cách chèn ngẫu nhiên, sleep -3tôi có thể tăng tốc các chương trình của mình. Thật là một sự thất vọng.
Alfe

1
@userunknown \timecũng hoạt động tốt trong Bash.
Dennis

3

Javascript (67)

Có lẽ tốt hơn nhiều

a=Array;p=Number;r=prompt;alert(a(p(r())).concat(a(p(r()))).length)

Bạn không nên đưa ra một câu trả lời dứt khoát mà không biết nó có cần phao hay không. Và nó sẽ không xử lý NaN. Nhưng nó là một mã khá hay!
Ismael Miguel

Tôi nghĩ tất cả joinsđều không cần thiết. Các nhà Arrayxây dựng tạo ra một mảng undefineds, có thể được tính:a=Array;p=parseInt;r=prompt;alert(a(p(r())).concat(a(p(r()))).length)
Ben Reich

@BenReich, bạn nói đúng, cảm ơn
Michael M.

@Michael Ngoài ra, nhà Numberxây dựng lưu 2 ký tựparseInt
Ben Reich

@Michael Ngoài ra, nếu bạn loại bỏ alert, đầu ra vẫn sẽ chuyển đến bảng điều khiển, nhưng điều đó làm cho câu trả lời ít thú vị hơn một chút. Bạn cũng có thể sử dụng lại promptbiến thay vì cảnh báo, (hàm tạo cảnh báo đối số bằng dấu nhắc). Dù sao, câu trả lời tốt đẹp!
Ben Reich

3

Ruby, 18 ký tự

a.times{b=b.next}

Và hai biến thể dài dòng hơn, 29 ký tự

[*1..a].concat([*1..b]).size

Một phiên bản khác, 32 ký tự

(''.rjust(a)<<''.rjust(b)).size

3

C # - trên thế hệ mã bay

Vâng, thực sự có một bổ sung trong đó, nhưng không phải là toán tử + và thậm chí không phải là một hàm khung có thêm, thay vào đó chúng ta tạo ra một phương thức nhanh chóng để thêm vào.

public static int Add(int i1, int i2)
{
    var dm = new DynamicMethod("add", typeof(int), new[] { typeof(int), typeof(int) });
    var ilg = dm.GetILGenerator();
    ilg.Emit(OpCodes.Ldarg_0);
    ilg.Emit(OpCodes.Ldarg_1);
    ilg.Emit(OpCodes.Add);
    ilg.Emit(OpCodes.Ret);
    var del = (Func<int, int, int>)dm.CreateDelegate(typeof(Func<int, int, int>));
    return del(i1, i2);
}


2

R 36

function(x,y)length(rep(1:2,c(x,y)))

trong đó repxây dựng một vectơ của xnhững người theo sau bởi ytwos.


2
Bạn có thể tạo một chương trình ngắn hơn một chút:length(rep(1:2,scan()))
Masclins

2

TI Basic 89 - 19 byte

Chạy cái này trong TI-89 (Màn hình chính hoặc ứng dụng lập trình):

ln(ln((e^e^x)^e^y))

Điều này sử dụng các quy tắc nhật ký để tính toán x+y, giống như trong giải pháp này . Là một phần thưởng, nó hoạt động cho số thập phân và số nguyên. Nó hoạt động cho tất cả các số thực. Nếu quy tắc logarit vẫn còn hiệu lực với số mũ phức tạp, thì điều này cũng hoạt động với số phức. Tuy nhiên, máy tính của tôi phun ra rác khi tôi cố gắng chèn các số mũ phức tạp.


3
Không phải là ln1 byte trong TI Basic? Ngoài ra, bạn có thể bỏ các dấu ngoặc đơn đóng, đưa giá trị này xuống còn 15 byte.
ɐɔıʇǝɥʇuʎs

2

Cảm ơn Michael Stern đã dạy tôi ký hiệu Mathicala .

Toán học - 21 20 byte

Log@Log[(E^E^x)^E^y]

Điều này sử dụng cách tiếp cận tương tự như giải pháp này , nhưng nó nằm trong Mathicala để làm cho nó ngắn hơn. Điều này hoạt động cho số âm và dấu phẩy động cũng như số nguyên trong xy.

Đơn giản hóa biểu thức bằng cách sử dụng quy tắc log mang lại x+y, nhưng điều này là hợp lệ vì nó sử dụng lũy ​​thừa, không phải là một trong 4 toán tử cơ bản.


Bạn có chắc chắn nó hoạt động cho số phức?
Michael Stern

2

C # - chuỗi số

Chúng tôi chuyển đổi cả hai số thành chuỗi, thực hiện bổ sung với cắt chuỗi (với carry và mọi thứ, bạn biết), sau đó phân tích lại thành số nguyên. Đã thử nghiệm với i1, i2 trong 0..200, hoạt động như một lá bùa. Tìm một bổ sung trong cái này!

public static int Add(int i1, int i2)
{
    var s1 = new string(i1.ToString().Reverse().ToArray());
    var s2 = new string(i2.ToString().Reverse().ToArray());
    var nums = "01234567890123456789";
    var c = '0';
    var ret = new StringBuilder();
    while (s1.Length > 0 || s2.Length > 0 || c != '0')
    {
        var c1 = s1.Length > 0 ? s1[0] : '0';
        var c2 = s2.Length > 0 ? s2[0] : '0';
        var s = nums;
        s = s.Substring(int.Parse(c1.ToString()));
        s = s.Substring(int.Parse(c2.ToString()));
        s = s.Substring(int.Parse(c.ToString()));
        ret.Append(s[0]);
        if (s1.Length > 0)
            s1 = s1.Substring(1);
        if (s2.Length > 0)
            s2 = s2.Substring(1);
        c = s.Length <= 10 ? '1' : '0';
    }
    return int.Parse(new string(ret.ToString().ToCharArray().Reverse().ToArray()));
}

2

C (79)

void main(){int a,b;scanf("%d%d",&a,&b);printf("%d",printf("%*c%*c",a,0,b,0));}


2

APL: 2

1⊥

Điều này chuyển đổi các số từ cơ sở 1, vì vậy (n * 1 ^ 1) + (m * 1 ^ 2) chính xác là n + m.

Có thể dùng thử trên TryApl.org


2

TI-CƠ BẢN, 10

Thêm XY

ln(ln(e^(e^(X))^e^(Y

1
Bạn chắc chắn biết cách sao chép các giải pháp: codegolf.stackexchange.com/a/21033/9498
Justin

Đầu tiên, nó không hoạt động vì nó sử dụng log (thay vì ln (. Thứ hai, nó thực sự là mười byte nếu được viết dưới dạng ln (ln (e ^ (e ^ (X)) ^ e ^ (Y.
lirtosiast

2

K, 2 byte

#&

Ví dụ sử dụng:

  #&7 212
219

Áp dụng toán tử "where" (monadic &) cho các số trong danh sách đầu vào (có thể lấy tự do với định dạng đầu vào). Điều này sẽ tạo ra một danh sách chứa số 0 đầu tiên theo sau là số thứ hai:

  &3 2
0 0 0 1 1

Thông thường toán tử này được sử dụng như một "tập hợp" để tạo ra một danh sách các chỉ số của các phần tử khác không trong danh sách boolean, nhưng dạng tổng quát đôi khi có ích.

Sau đó, chỉ cần lấy số lượng của danh sách đó (monadic #).

Nếu giải thích của tôi về các yêu cầu đầu vào là không thể chấp nhận được, thì giải pháp dài hơn một chút sau đây cũng thực hiện thủ thuật tương tự:

{#&x,y}

2

Bình thường , 29 byte

AQW!qG0=k.&GH=HxGH=k.<k1=Gk)H

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

Trình đầu tiên của tôi ở đây!

Điều này biên dịch thành:

assign('Q',eval_input())     # Q
assign('[G,H]',Q)            #A
while Pnot(equal(G,0)):      #  W!qG0
  assign('k',bitand(G,H))    #       =k.&GH
  assign('H',index(G,H))     #             =HxGH  (index in this case is XOR)
  assign('k',leftshift(k,1)) #                  =k.<k1
  assign('G',k)              #                        =Gk)
imp_print(H)                 #                            H

1
Chào mừng đến với trang web!
Thuật sĩ lúa mì
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.