Làm thế nào để tôi viết một chức năng thêm? [đóng cửa]


42

Vấn đề:

Tôi là nhà phát triển chính cho một công ty lớn, chúng tôi đang tạo ra Skynet. Tôi đã được chỉ định

Viết hàm nhập và trả về tổng của chúng

QUY TẮC: Không có câu trả lời như

function sum(a,b){
    return "their sum";
}

EDIT: Câu trả lời được chấp nhận sẽ là câu trả lời nhiều nhất vào ngày 1 tháng 1 năm 2014

Lưu ý: Đây là một câu hỏi . Xin đừng coi trọng câu hỏi và / hoặc câu trả lời. Thêm thông tin ở đây .


31
Bạn có thể sử dụng plugin jQuery nhẹ của tôi : $.sum=function(a,b){return a+b};.
Máy xay sinh tố

5
Tôi biết đôi khi tôi nhận được một tài liệu tham khảo jQuery
Scrblnrd3

5
Tiếng Anh rực rỡ: p
Martijn Courteaux 28/12/13

5
Gợi ý câu hỏi (không chắc nó có tốt không): "GUISE HALP, tôi cần một thuật toán nhanh để tạo ra các khối bitcoin !!!!! Thật là khẩn cấp!"

5
Những câu trả lời khá liên quan. Tôi đề nghị mở một kết nối đến cơ sở dữ liệu của bạn và ban hành 'SELECT ' + a + ' + ' + b + ';'. Thật đơn giản và dễ hiểu.
Nick Chammas

Câu trả lời:


69

Đó là một vấn đề rất phức tạp! Đây là cách bạn giải quyết nó trong C #:

static int Sum(int a, int b)
{
    var aa = ((a & ~877 - b ^ 133 << 3 / a) & ((a - b) - (a - b))) | a;
    var bb = ((b ^ (a < 0 ? b : a)) & ((b - a) - (b - a))) | b;
    var cc = new List<int>();
    for (int i = 6755 & 1436; i < aa; i -= -1)
    {
        cc.Add((int)Convert.ToInt32(Math.Sqrt(6755 & 1437 >> ((b - a) - (b - a)))));
    }
    for (int i = 6755 & 1436; i < bb; i -= -1)
    {
        cc.Add((int)Convert.ToInt32(Math.Sqrt(6755 & 1437 >> ((a - b) - (a - b)))));
    }
    Func<int,int,int> importantCalculation = null;
    importantCalculation = (x, y) => y != 0 ? importantCalculation(x ^ y | (6755 & 1436) >> (int)(Convert.ToInt32(Math.Sqrt((b - a) - (b - a) - (-1))) - 1), (x & y) << (int)Convert.ToInt32((Math.Log10(1) + 1))) : x;
    return cc.Aggregate(importantCalculation);
}


Cách mã này hoạt động (Tôi sẽ không thêm lời giải thích này vào câu trả lời của mình cho OP lười biếng phải bị troll, đừng lo lắng): ((a & ~877 - b ^ 133 << 3 / a) & ((a - b) - (a - b))) | atrả về chỉ a((b ^ (a < 0 ? b : a)) & ((b - a) - (b - a))) | btrả về b.

6755 & 1436trả về 0, vì vậy trong vòng lặp, ithực sự bắt đầu bằng giá trị 0và bên trong vòng lặp, bạn thêm giá trị 1vào danh sách. Vì vậy, nếu a5b3, giá trị 1được thêm 8 lần vào danh sách.

Các importantCalculationchức năng là một chức năng rất dài mà không làm gì khác hơn là thêm lên hai con số. Bạn sử dụng Aggregatehàm LINQ để cộng tất cả các số. Cũng không cần thiết phải đưa ra kết quả của Convert.ToInt32một int, bởi vì nó đã là một int.

Mã này là thứ mà OP lười biếng sẽ không hiểu, đó chính xác là cường độ :-)


11
i - = -1. Rất sáng tạo. Tôi đã đạt đến giới hạn bình chọn ngày hôm nay, nhưng tôi sẽ nâng cao câu trả lời của bạn ngay khi tôi có thể.
Victor Stafusa

Miễn là bạn khẳng định rằng bất cứ điều gì khác hơn 6755 & 1436là hành vi không xác định, mặc dù nhận thức của OP rằng hầu hết các con số dường như hoạt động ...
Trojan

Ý nghĩa của '=>' là gì?
Ilya Gazman

2
@Babibu Tôi chưa bao giờ viết một dòng C # trong đời nhưng điều này gần như chắc chắn là một biểu thức lambda.
thwd

3
ồ, var x = Sum(0, 4)DivideByZeroException.
Phillip Scott Givens

60

Bash - 72 byte

Đôi khi các kỹ thuật bổ sung xác định truyền thống quá chính xác và nhanh chóng không cần thiết - có những lúc bạn muốn cho CPU nghỉ ngơi một chút.

Giới thiệu thuật toán SleepAdd mất mát .

#!/bin/bash
(time (sleep $1;sleep $2)) 2>&1|grep re|cut -dm -f2|tr -d s

Chạy mẫu:

> ./sleepadd.sh 0.5 1.5
2.001

Chức năng này được dự định là bạn đồng hành với SleepSort được đánh giá cao . Nó là một bài tập cho người đọc để điều chỉnh thuật toán này để tạo ra một SleepMax bị mất để có được số lớn hơn trong hai số.

Mẹo chuyên nghiệp: Thuật toán này có thể được tối ưu hóa hơn nữa - có thể tăng tốc độ gấp 2 lần, nếu các số được cung cấp cho nó được chia cho 2 trước.


5
Trolling 1: nó hoạt động nhưng chậm một cách ngu ngốc, sử dụng bộ đếm thời gian hệ thống để chờ tổng thời gian. Do đó, số lượng lớn hơn mất tuyến tính lâu hơn để thêm. Trolling 2: nó thậm chí hoạt động cho điểm nổi, nhưng câu trả lời luôn bị tắt bởi một lề nhỏ. Trolling 3: sử dụng grep, cắt và tr. Trolling 4: mọi tổng số trên 60 (giây) không được xử lý chính xác.
Bạo loạn

4
@S Breathetsu: cái gì, bạn đang nói không ai khác nghe nói về codec mp3? : P
Riot

7
Tôi đang nói rất ít người thực sự làm cho hiệp hội. Lame IS què mặc dù. Chủng tộc Vorbis.

7
+1 cho các cuộc chiến mã hóa âm thanh ngoài chủ đề ồ ạt :)
Riot

1
Tôi tin rằng phiên bản Bash-Hadoop của tôi dưới đây mạnh hơn và có thể mở rộng hơn !!!! 1 !! mười một! Nhưng tôi phải nói rằng, tôi thực sự yêu phiên bản của bạn, buồn ngủ là tuyệt vời! +1
Anony-Mousse

40

Java

public static void int sum(int a, int b)
{
    try
    {
       File file = File.createTempFile("summer", "txt");
       FileOutputStream fos = new FileOuptutStream(file);
       for (int i = 0; i < a; ++i) fos.write(1);
       for (int i = 0; i < b; ++i) fos.write(1);
       fos.flush();
       fos.close();
       return file.length();
    } catch(Throwable t)
    {
       return sum(a, b); // Try again!
    }
}

Điều này về cơ bản ghi một tệp có số byte phải bằng tổng thực tế. Khi tệp được ghi, nó sẽ hỏi bảng tệp đĩa về kích thước của tệp đó.


1
Có thể writehay flushném? Theo tôi, có vẻ như bạn nên di chuyển flushvào từng vòng lặp và bọc toàn bộ mọi thứ trong một lần thử để thử lại ghi nếu nó hoặc lỗi không thành công.
Anton Golov

3
Tôi đề nghị bạn nên sử dụng một trình soạn thảo với mã hóa ký tự mặc định thay vì luồng. Sau đó, nó có khả năng phá vỡ một hệ thống mà ký tự được chọn của bạn mã hóa thành nhiều byte.
Buhb

33

C

Trong thế giới lượng tử, bạn không thể phụ thuộc vào các toán tử nguyên tử như +, đây là cách tôi thực hiện bổ sung về mặt điện toán lượng tử:

#define DEPENDING (
#define ON 
#define EVERYTHING 32
#define DEFINED )
#define AS ON
#define WITH {
#define SOON if
#define FIX AS
#define TO =
#define REPEAT for(
#define SUBPOSED >>
#define SUPERPOSITION int
#define ADJUSTED <<
#define APPROACHES <
#define SUBPOSITION ++
#define MATCHES &
#define LEVEL DEPENDING
#define OF FIX
#define BY FIX
#define CONTINUUM 1
#define VOID ~-CONTINUUM
#define SUPERPOSED |
#define DO DEFINED WITH
#define CURVATURE }
#define ITSELF FIX
#define OTHERWISE CURVATURE else WITH
#define RETURN return

SUPERPOSITION ADD
    DEPENDING ON
        SUPERPOSITION SUPER_A,
        SUPERPOSITION SUPER_B
    DEFINED WITH
        FIX SUPERPOSITION A TO SUPER_A;
        FIX SUPERPOSITION B TO SUPER_B;
        FIX SUPERPOSITION RESULT TO VOID;
        FIX SUPERPOSITION CARRY TO VOID;
        FIX SUPERPOSITION I TO VOID;
        REPEAT
            FIX I TO VOID;
            I APPROACHES EVERYTHING;
            FIX I SUBPOSITION DEFINED WITH
                AS SOON AS LEVEL OF CARRY MATCHES CONTINUUM DO
                    AS SOON AS LEVEL OF A SUBPOSED BY I MATCHES CONTINUUM DO
                        AS SOON AS LEVEL OF B SUBPOSED BY I MATCHES CONTINUUM DO
                            FIX RESULT TO RESULT SUPERPOSED BY CONTINUUM ADJUSTED BY I;
                        FIX CURVATURE OF CONTINUUM;
                    OTHERWISE
                        AS SOON AS LEVEL OF B SUBPOSED BY I MATCHES CONTINUUM DO
                            FIX VOID; // yes, you never know what could go wrong
                        OTHERWISE
                            FIX RESULT TO RESULT SUPERPOSED BY CONTINUUM ADJUSTED BY I;
                            FIX CARRY TO VOID;
                        FIX CURVATURE OF CONTINUUM;
                    FIX CURVATURE OF CONTINUUM; // twice to make sure
                OTHERWISE
                    AS SOON AS LEVEL OF A SUBPOSED BY I MATCHES CONTINUUM DO
                        AS SOON AS LEVEL OF B SUBPOSED BY I MATCHES CONTINUUM DO
                            FIX CARRY TO CONTINUUM;
                        OTHERWISE
                            FIX RESULT TO RESULT SUPERPOSED BY CONTINUUM ADJUSTED BY I;
                        FIX CURVATURE OF CONTINUUM;
                    OTHERWISE
                        AS SOON AS LEVEL OF B SUBPOSED BY I MATCHES CONTINUUM DO
                            FIX RESULT TO RESULT SUPERPOSED BY CONTINUUM ADJUSTED BY I;
                        FIX CURVATURE OF CONTINUUM;
                    FIX CURVATURE OF CONTINUUM;
                FIX CURVATURE OF CONTINUUM;
            FIX CURVATURE OF CONTINUUM; // we did some stuff there, sure the curvature needs a lot of fixing
        FIX VOID; // clean up after ourselfves
        RETURN LEVEL OF SUPERPOSITION DEFINED AS RESULT;
    FIX CURVATURE OF ITSELF

2
+1 mặc dù cảm thấy quá dễ đọc đối với việc troll mã ...
Marc Claesen

29

Haskell

Tính toán giải pháp đúng trong thời gian O (n ^ 2) . Dựa trên functor ứng dụng mà cũng thực hiện Alternative.

{- Required packages:
 -   bifunctor
 -}
import Control.Applicative
import Data.Foldable
import Data.Traversable
import Data.Bifunctor
import Data.Monoid

-- Note the phantom types
data Poly n a = X n (Poly n a) | Zero
    deriving (Show)

twist :: Poly n a -> Poly n b
twist Zero = Zero
twist (X n k) = X n (twist k)

instance Functor (Poly n) where
    fmap _ = twist
instance Bifunctor Poly where
    second = fmap
    first f Zero    = Zero
    first f (X n k) = X (f n) (first f k)

-- Poly is a left module:
(<#) :: (Num n) => n -> Poly n a -> Poly n a
(<#) = first . (*)

instance (Num n) => Applicative (Poly n) where
    pure _ = X 1 empty
    Zero    <*> _      = empty
    (X n k) <*> q      = (twist $ n <# q) <|> (X 0 (k <*> q))

instance (Num n) => Alternative (Poly n) where
    empty = Zero
    Zero    <|> q       = q
    p       <|> Zero    = p
    (X n p) <|> (X m q) = X (n + m) (p <|> q)

inject :: (Num n) => n -> Poly n a
inject = flip X (X 1 Zero)


extract :: (Num n) => (Poly n a) -> n
extract (X x (X _ Zero)) = x
extract (X _ k)          = extract k
extract _                = 0

-- The desired sum function:
daSum :: (Traversable f, Num n) => f n -> n
daSum = extract . traverse inject

Ví dụ: daSum [1,2,3,4,5]sản lượng 15.


Cập nhật: Cách thức hoạt động: Một số a được biểu diễn dưới dạng đa thức xa . Một danh sách các số a1, ..., aN sau đó được biểu diễn dưới dạng mở rộng của (x-a1) (x-a2) ... (x-aN) . Tổng các số sau đó là hệ số của mức độ cao thứ hai. Để làm rõ hơn ý tưởng, một đa thức được biểu diễn dưới dạng hàm functor ứng dụng + thay thế mà không thực sự giữ một giá trị, chỉ mã hóa đa thức dưới dạng một danh sách các số (đẳng cấu thành Constant [n]). Các hoạt động ứng dụng sau đó tương ứng với phép nhân đa thức và các phép toán thay thế cho phép cộng (và chúng cũng tuân thủ các luật áp dụng / thay thế ).

Tổng các số sau đó được tính là ánh xạ từng số vào đa thức tương ứng và sau đó duyệt qua danh sách bằng cách sử dụng hàm số Polyứng dụng, tính toán tích của đa thức và cuối cùng trích xuất hệ số thích hợp ở cuối.


24

Bạn muốn thêm số ?!? Bạn có biết rằng đây là một hành động rất phức tạp? OK, mặt khác, bạn là nhà phát triển chính, bạn sẽ phải đối mặt với những vấn đề như thế này.

Đây là giải pháp đơn giản nhất tôi có thể tìm thấy:

int add_nums(int n1, int n2) {
    int res, op1, op2, carry, i;
    i = 32;
    while (i --> 0) {
        op1 = 123456 ^ 123457;
        op2 = 654321 ^ 654320;
        op1 = (n1 & op1) & op2;
        op2 = (n2 & op2) & (123456 ^ 123457);
        res = (res & (0xFFFF0000 | 0x0000FFFF)) | ((op1 ^ op2) ^ carry);
        carry = op1 & op2;
        res = res << 1;
    }
    return res;
}

Don Tiếtt trở thành con mồi cho nhà điều hành "+", nó hoàn toàn không hiệu quả. Hãy thoải mái chuyển toán tử "đi về phía" hoặc sử dụng nó cho các số nhỏ hơn ngày càng lớn hơn.


21

NODE.JS - SUMMMMYYMYYMY EDITION / IBM® Javascript Enterprise SUM Solution ™

Wow, đây là một câu hỏi cực kỳ khó, nhưng tôi sẽ cố gắng hết sức để trả lời câu hỏi này.

BƯỚC MỘT - Máy chủ TELNET

Đầu tiên chúng ta sẽ phải nhận đầu vào, bây giờ bất kỳ lập trình viên chuyên nghiệp và doanh nghiệp nào (như tôi) nên biết cách tốt nhất để nhận đầu vào là thiết lập máy chủ telnet !!!

Hãy bắt đầu với máy chủ telnet cơ bản:

// Load the TCP Library
net = require('net'),
ibm = {},
fs = require('fs'),
clients = [];

//CREATES TEH TCP SEVA FOR INPUT
//COMMAND SUM and OBJECT (a, b, c, etc..) IS ONLY ELIGBLE
net.createServer(function (socket) {
  clients.push(socket);
  socket.write("WELKOME TO TEH SUM SEVA XD\n");

  socket.on('data', function (data) {
    ccc = [0,0,0,0,0,0,0];
    if(!socket.needarray){
    newdata = ibm.CLEANSOCKET(data);
    if(newdata && newdata != '\b'){if(socket.nowdata){socket.nowdata += newdata}else{socket.nowdata = newdata}}else{
      if(socket.nowdata){
        if(socket.nowdata.replace(' ', '') == ('SUM')){
          socket.write("Enter teh numbers\n");
          socket.needarray = 1;
        }
        console.log(socket.nowdata);
        socket.nowdata = null;
      }}
      }else if(newdata == '\b'){ 
        socket.array = socket.array[socket.array.length - 1]
      }else{
        arraychar = ibm.CLEANARRAY(data);
        if(arraychar != ('\n' || '\b')){if(socket.array){socket.array += arraychar}else{socket.array = arraychar}}else if(arraychar == '\b'){
          socket.array = socket.array[socket.array.length - 1]
        }else{
          socket.write("Your sum: "+summm(socket.array));
          socket.end();
        }
      }
  });
}).listen(23);
ibm.CLEANSOCKET = function(data) {
    return data.toString().replace(/(\r\n|\n|\r)/gm,"");
}

ibm.CLEANARRAY = function(data) {
    return data.toString().replace(/(\r)/gm,"");
}

Thực sự không có gì đặc biệt với nó, đây là máy chủ telnet điển hình của bạn. Chúng tôi đã tạo một số chức năng dọn dẹp UNICODE cơ bản để cung cấp cho chúng tôi một chuỗi thô đẹp và chúng tôi cũng đã thêm SUMchức năng của mình.

Bây giờ người dùng sẽ phải nhập 'SUM'. Sau đó, nó sẽ nhắc họ nhập teh numberz, sau khi nhập hàm summm () được chạy và sẽ tính tổng của tất cả các số được nhập.

BƯỚC HAI - summm

Bây giờ là lúc để tạo summmchức năng của chúng tôi sẽ lấy tổng của tất cả các số được nhập.
Đây là mã:

//DOOOO SUMMMMM STAPH
function summm(string){
  //Cleans out the string by converting it from unicode to base64 and then ASCII
  stringa = (new Buffer((new Buffer(string).toString('base64')), 'base64').toString('ascii'));
  //We will now convert our string to a new string with the format CHAR_ASCII_CODE + '.', etc...
  x = '', c = 0;
  stringa.split('').forEach(function (i){
      c++;
      x += i.charCodeAt(0);
      if (c != stringa.length){x+= '.';}
  })
  stringb = x;
  m = '';
  stringb.split('.').forEach(function (i) {
      m += String.fromCharCode(i);
  });
  stringc = m;
  stringd = stringc.split(',');
  var stringsa;
  string.split(',').forEach( function (i) {
    if(!stringsa){stringsa = parseInt(i);}else{stringsa += parseInt(i);}
  });
  return stringsa;
}

Và ở đó bạn đi. Đó là giải pháp IBM hàng ngày của bạn. ĐIỆN THOẠI TẤT CẢ CÁC CÁCH!
Đầu tiên bạn nhập SUM.
Sau đó, máy chủ sẽ yêu cầu các số bạn muốn thêm và bạn có thể nhập chúng như sau:a, b, c, etc..

Tôi tin tưởng vào điều này, tất cả các botnet đang sử dụng IBM® Javascript Enterprise SUM Solution ™ hiện nay;).

Và đây là bằng chứng cho thấy mọi thứ hoạt động:
TỔNG HỢP(BẤM)


2
Bạn có phiền cho tôi biết IDE bạn đang sử dụng trong ảnh chụp màn hình không? Visual studio không cho tôi làm nổi bật cú pháp đó
Joe the Person

1
@JoethePerson: Đó không phải là một IDE, chỉ là một trình soạn thảo văn bản có giá quá cao gọi là "Văn bản cao siêu".
Apache

1
@JoethePerson Giống như Shiki cho biết trình soạn thảo văn bản của nó lạ mắt hơn một chút và nó có phiên bản miễn phí, xem tại đây: sublimetext.com .
C1D

@Shiki, tôi đồng ý với bạn và tôi đã tải xuống LightTable chỉ vài ngày trước nhưng tôi chưa mở nó vì tôi khá bận.
C1D

19

Đây là một giải pháp trong Java cho bạn. Nó dựa vào "định lý khỉ vô hạn" đã được kiểm chứng thời gian: nếu bạn đang ở trong một căn phòng có những con khỉ vô hạn, cuối cùng bạn sẽ bị bao phủ trong phân. Hoặc điều tương tự.

public static int sum(int a, int b){
   if(a==0)return b;
   Random r=new Random();
   int number=r.nextInt();
   if(number>a){
      return sum(a, b);
   }else{
      return sum(a-number, b+number);
   }
}

12
Thay thế return sum(a-number, b+number);bằng return sum(sum(a,-number), sum(b,number));. Bạn đã ăn thức ăn cho chó của riêng bạn phải không?
emory

@emory: Điều đó sẽ không hiệu quả, tôi nghĩ vậy.
Martijn Courteaux

@MartijnCourteaux Chương trình có một lỗ hổng nguy hiểm - đó là một trò troll trắng trợn. Nếu ai đó muốn hỏi nó là gì b+number, thì rõ ràng toàn bộ phương pháp là không cần thiết. Tốt hơn để che giấu điều đó. Thêm vào đó nó sẽ làm cho nó thậm chí chậm hơn.
emory

@emory: Được rồi, tôi đã thử nó và nó dường như hoạt động. Tuyệt vời :)
Martijn Courteaux

14

C - quá mức là giết tốt nhất

Máy tính chỉ có 0 và 1, vì vậy thực sự rất khó để thực hiện một giải pháp phù hợp, nhanh chóng và có thể mở rộng cho đến cách thêm. May mắn cho bạn, tôi đã phát triển skynet 0.1284a, vì vậy tôi biết cách giải quyết vấn đề nguy hiểm này.
Thông thường, bạn cần mua DLC thư viện tiêu chuẩn C, vì lõi không chứa nó, nhưng tôi đã xoay sở để "lừa" tôi thoát khỏi nó. Tóm lại, đây là phương pháp rẻ nhất và hiệu quả nhất.

#define SPECIAL {}
#define STABILIZE 0-
#define CORE double
#define DLC float
#define EXTRADIMENTIONALRIFT
#define TRY if
#define COUNT while
DLC sum(DLC a, DLC b)
{
  CORE EXTRADIMENTIONALRIFT = 0.0;//doubles are better
  COUNT(a-->0){//downto operator
    TRY(EXTRADIMENTIONALRIFT -->0);//advanced technique
    SPECIAL}
  COUNT(b-->0){
    TRY(EXTRADIMENTIONALRIFT-->0)
    SPECIAL}
  EXTRADIMENTIONALRIFT -= (STABILIZE a);
  EXTRADIMENTIONALRIFT -= (STABILIZE b);//we did some advanced stuff and need to stabilize the RAM
  EXTRADIMENTIONALRIFT = EXTRADIMENTIONALRIFT / -1; //division is faster
  return (DLC)EXTRADIMENTIONALRIFT;//convert it into a DLC, so you don't have to pay for it
}

Chỉ cần nhìn vào nó. Rõ ràng là xấu xa.


3
Lưu ý với OP: có lẽ bạn có thể tránh RÚT RA KHỎI TUYỆT VỜI, nhưng sau đó bạn phải chơi với vật lý lượng tử và bạn không muốn làm điều đó.

14

Con trăn

Sử dụng danh tính toán học log(ab) = log(a) + log(b)cho một giải pháp hoạt động với số lượng nhỏ, nhưng tràn ra cho bất kỳ ứng dụng thực tế nào.

Do đó, đảm bảo rằng lập trình viên lười biếng của chúng tôi sẽ nghĩ rằng nó hoạt động trên dữ liệu thử nghiệm, chỉ để nó bị sập trong thế giới thực.

import cmath
def get_sum(list):
     e_vals = map(lambda x: cmath.exp(x), list)
     prod   = reduce(lambda x, y: x*y, e_vals)
     return cmath.log(prod)

get_sum(range(1,10))  # correctly gives 45
get_sum(range(1,100)) # gives nan

Không hoạt động với python3 @ Ubuntu
s3lph

1
@the_Seppi Nó hoạt động hoàn toàn tốt. Chỉ cần thêm from functools import reducecho python3.
Bakuriu

13

C #

Bạn nên sử dụng đệ quy để giải quyết vấn đề của bạn

    public int Add(int a, int b)
    {
    if (b == 1)
    {
    //base case
    return ++a;
    }
    else 
    {
    return Add(Add(a, b-1),1);
    }

}

Nếu nó đủ tốt cho Peano, nó đủ tốt cho tất cả mọi người.


2
Tôi chỉ muốn đưa ra câu trả lời này. IMAO cái này và cái buồn ngủ cho đến nay là câu trả lời tốt nhất, vì những cái khác là phức tạp không cần thiết. Những thay vào đó vẫn hoàn toàn vô dụng nhưng ngắn gọn và thanh lịch. Thật quá dễ dàng (do đó nhàm chán) để làm cho chúng vô dụng bằng cách thêm độ phức tạp ngẫu nhiên.
o0 '.

1
Lý luận là hoàn hảo!
đệ quy.ninja

Không nên ++athay thế a++? (Chỉnh sửa phải có ít nhất 6 ký tự; có gì khác để cải thiện trong bài này không?) Ngu ngốc ngu ngốc ngu ngốc SO
o0 '.

@Lohoris - Vâng, đúng vậy. Cố định
Haedrian

9

C ++

Chúng tôi hy vọng một hoạt động như bổ sung sẽ rất nhanh. Nhiều câu trả lời khác chỉ đơn giản là không tập trung đủ vào tốc độ. Đây là một giải pháp chỉ sử dụng các thao tác bitwise , cho hiệu suất tối đa.

#include <iostream>

int add2(int a, int b, int bits) {
  // Usage: specify a and b to add, and required precision in bits (not bytes!)
  int carry  = a & b;
  int result = a ^ b;
  while(bits --> 0) {       // count down to 0 with "downto" operator
    int shift = carry << 1;
    carry = result & shift;
    result ^= shift;
  }
  return result;
}

int main() {
  // Test harness
  std::cout << add2(2, 254, 7) << std::endl;
  return 0;
}

1
Trolling 1: điều này thực sự hoạt động và là một cách thêm số hợp lệ - không quá xa cách phần cứng thực hiện. Tuy nhiên, đếm ngược sử dụng phép trừ, vì vậy nó hoàn toàn không phải là một giải pháp bitwise. Trolling 2: yêu cầu xác định độ chính xác theo bit; kết quả chính xác không chính xác trong câu trả lời vô nghĩa. Trolling 3: Toán tử "Dftimeo".
Bạo loạn

Thêm một số trình biên dịch nội tuyến!
Kiruse

8

Giải pháp tốt nhất của tôi cho đến nay, đưa ra một câu trả lời khá khó hiểu cho đến khi bạn chạy aVeryLargeNumber()

function aVeryLargeNumber(){return Math.log(Math.log(Math.log(Math.log(Math.round((Math.log(!![].join()^{}-({}=={})|(0x00|0x11111)-(0x111111&0x10111))/Math.log(2))/(Math.tan(Math.PI/4)*Math.tan(1.48765509)))+(0xFFFF))/Math.log(2))/Math.log(2))/Math.log(2))/Math.log(2)}
function add(a,b){
    var i=aVeryLargeNumber();
    i--;
    for(;i<b;i+=aVeryLargeNumber(),a+=aVeryLargeNumber());
    return a;

}

3
Đọc cái này làm mắt tôi chảy máu. +1

Nó trở về cái gì? Tôi không thực sự chạy nó.
Martijn Courteaux

Đối với những người không muốn chạy aVeryLargeNumber(): Nó trả về 1. (Tôi sẽ xóa cái này nếu OP ping tôi.)
apnorton

7

C ++ - Số Peano với siêu lập trình mẫu (với doge tùy chọn)

C, giống như nhiều ngôn ngữ lập trình khác làm phức tạp mọi thứ với lý do tuyệt đối. Một trong những hệ thống overcomplex nhất trong các ngôn ngữ này là số tự nhiên. C bị ám ảnh bởi biểu diễn nhị phân và tất cả các chi tiết hoàn toàn vô dụng khác.

Cuối cùng, số tự nhiên chỉ là số 0 hoặc một số số tự nhiên khác tăng thêm một. Những cái gọi là số Peano này là một cách hay để biểu diễn số và thực hiện tính toán.

Nếu bạn thích doge, tôi đã viết một phần mở rộng C ++ để cho phép sử dụng ngôn ngữ tự nhiên để lập trình. Tiện ích mở rộng và mã sau đây sử dụng tiện ích mở rộng của tôi có thể được tìm thấy tại: http://pastebin.com/sZS8V8tN

#include <cstdio>

struct Zero { enum { value = 0 }; };

template<class T>
struct Succ { enum { value = T::value+1 }; };

template <unsigned int N, class P=Zero> struct MkPeano;
template <class P>
struct MkPeano<0, P> { typedef P peano; };
template <unsigned int N, class P>
struct MkPeano { typedef typename MkPeano<N-1, Succ<P> >::peano peano; };

template <class T, class U> struct Add;
template <class T>
struct Add<T, Zero> { typedef T result; };
template <class T, class U>
struct Add<T, Succ<U> > { typedef typename Add<Succ<T>, U>::result result; };

main()
{
        printf("%d\n", MkPeano<0>::peano::value );
        printf("%d\n", MkPeano<1>::peano::value );

        printf("%d\n", Add< MkPeano<14>::peano, MkPeano<17>::peano >::result::value );
        printf("%d\n", Add< MkPeano<14>::peano, Add< MkPeano<3>::peano, MkPeano<5>::peano>::result >::result::value );
}

Để thêm sự ưu việt của phương pháp này: Toán học được thực hiện vào thời gian biên dịch! Không còn các chương trình chậm, người dùng của bạn không muốn đợi bạn tổng hợp những con số đó.

Và về phần nghiêm trọng:

  • Tôi không nghĩ rằng tôi phải nói điều này, nhưng điều này hoàn toàn vô lý.
  • Chỉ hoạt động cho các hằng số thời gian biên dịch.
  • Không hoạt động với số âm.
  • Câu trả lời được cung cấp bởi một người thực sự không thể tự tạo mẫu siêu dữ liệu, vì vậy tôi thậm chí sẽ không biết liệu nó có sai sót nào khác không.

Bạn bè của tôi nói với tôi để giáo điều mã, vì vậy tôi đã làm. Điều đó thật thú vị, nhưng tôi nghĩ rằng nó mất quá nhiều sự thật rằng điều này hoàn toàn ngu ngốc, vì vậy tôi chỉ đưa nó vào như một liên kết.


1
Ồ Doge như vậy. Rất upvote.
Marc Claesen

6

Tôi đã ngừng tin tưởng máy tính khi tôi biết về lỗi dấu phẩy động.

JavaScript này dựa trên kiểm tra lỗi chính xác của con người:

while(prompt("Is this the answer: " + Math.round(Math.random()* 1000000)) !== "yes") {}

5

"Viết hàm nhập và trả về tổng của chúng."

Đồng ý:

chuỗi tĩnh công khai inputAndReturnTheirSum () {
    System.out.print ("Nhập tổng của chúng:");
    trả về Máy quét mới (System.in) .nextLine ();
}


Đó là sở thích của tôi. : D
Jeroen Bollen

4

Kiểu Java hoặc C. Đây là O (log n). Lưu ý: Điều này không hoạt động cho a hoặc b âm.

public static int sum(int a, int b)
{
    if ((a & b) == (a ^ a)) return a | b;
    int c = a >> 1;
    int d = b >> 1;
    int s = a & 1;
    int t = b & 1;
    return sum(c, d + t) + sum(d, c + s);
}

Bản demo Ideone ở đây.


4

Bash với Truyền phát Hadoop

Rõ ràng, abcó thể trở nên thực sự lớn. Do đó, chúng ta phải sử dụng Hadoop!

# Upload data to cluster:
$HADOOP_HOME/bin/hdfs dfs -mkdir applestore
for i in `seq 1 $a`; do
   echo Banana > /tmp/.$i
   $HADOOP_HOME/bin/hdfs dfs -copyFromLocal /tmp/.$i applestore/android-$i$i
done
for i in `seq 1 $b`; do
   echo Orange > /tmp/.$i
   $HADOOP_HOME/bin/hdfs dfs -copyFromLocal /tmp/.$i applestore/java-$i$i
done
# Now we have all the data ready! Wow!
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \
-input applestore/ \
-output azure/ \
-mapper cat \
-reducer wc
# We can now download the result from the cluster:
$HADOOP_HOME/bin/hdfs dfs -cat azure/part-00000 | awk '{print $1;}'

Là một phần thưởng bổ sung, phương pháp này liên quan đến a catvà a wc. Điều này nên được vui vẻ để xem! Nhưng tôi có kế hoạch sử dụng Mahout cho việc này trong tương lai (mặc dù tôi thích mèo).

Đây phải là giải pháp có khả năng mở rộng nhất mà bạn nhận được cho câu hỏi này. Tuy nhiên, tôi có thể tưởng tượng rằng một giải pháp Hadoop đệ quy thanh lịch hơn nhiều.


1
Tôi chắc chắn nhìn thấy một chủ đề trong câu trả lời của bạn. + Điểm Trolling vì điều này đòi hỏi hadoop phải hoạt động và thất bại rất lộn xộn nếu $ HADOOP_HOME không được đặt.
Bạo loạn

4

Bỏ qua tất cả những người ngớ ngẩn với cách cư xử không chung chung và không thể kiểm chứng của họ. Chúng tôi cần một thư viện biểu diễn, mở rộng và đơn giản cho một dự án có quy mô như vậy. Nó phải hỗ trợ mở rộng và thay thế tại mọi điểm của mã. Vì thế, chúng ta cần một ngôn ngữ đơn giản và có thể mở rộng như nhau, đó là lý do tại sao ứng cử viên tốt nhất là C # .

Đây là lý do tại sao tôi giới thiệu cho bạn phiên bản beta của Phiên bản Doanh nghiệp Thư viện Commons Commons của tôi , phiên bản 0.8.4.4_beta1.3a numv129857_dist29.12.13 / master , tại phiên bản này hiển thị IOperablegiao diện, IAddablegiao diện để bạn có thể sử dụng các phương thức thêm hiệu quả của riêng mình và triển khai mặc định của IAddable:Addablelớp, sử dụng phép cộng bit cực kỳ hiệu quả, không gian lận và sử dụng phép trừ gốc chậm để dịch chuyển. Tất nhiên, giống như bất kỳ thư viện tốt, nó đi kèm với một nhà máy cho mọi loại nó hỗ trợ. Thư viện cũng tuân theo các nguyên tắc "tự xử lý", do đó bạn phải đảm bảo rằng đầu vào hợp lệ và đầu ra mong muốn là khả thi, vì nó sẽ không kiểm tra dữ liệu không hợp lệ. Đây là (Mã này được cấp phép theo Tập đoàn độc quyền chỉ đọc độc quyền của Tập đoàn Microsoft - Bản quyền cản trở này, Bản sửa đổi 3.1):

public interface IOperable {
    uint Value {get; set;}
}

public interface IAddable : IOperable {
    IAddable Add(IAddable a, IAddable b);
}

public class Addable : IAddable {
    public uint Value {get; set;}

    public Addable(uint value) {
        Value = value;
    }

    public IAddable Add(IAddable a, IAddable b) {
        uint carry = a.Value & b.Value;
        uint result = a.Value ^ b.Value;
        while (carry != 0) {
            uint shiftedcarry = carry << 1;
            carry = result & shiftedcarry;
            result ^= shiftedcarry;
        }
        return new Addable(result);
    }
}

public static class OperableFactory {
    public static IAddable GetAddable(uint value) {
        return new Addable(value);
    }
}

4

JavaScript

Lập trình là tất cả về thuật toán. Chúng ta hãy quay trở lại thuật toán cơ bản những gì chúng ta học được ở tuổi 3 - đếm ngón tay.

var fingers = 0;
var hands = 0;
var FINGER_NUMBER = 5;

/* MEAT */
function sum(a,b){
    while(a-- > 0) {
        finger_inc();
    }
    while(b-- > 0) {
        finger_inc();
    }

    return count_hands_and_fingers(); // We count the number of hands and fingers
}

/* Private functions */
function finger_inc(){
    if(++fingers >= FINGER_NUMBER) {
        hands++;
        fingers = 0;
    }
}

function count_hands_and_fingers() {
    var total_count = 0;
    total_count = hands * FINGER_NUMBER;
    total_count += fingers;
    return total_count;
}

document.write(sum(1,50));
  • Đầu tiên, là một nhà phát triển hàng đầu, chúng ta hãy lựa chọn ngôn ngữ khôn ngoan - đa nền tảng, trọng lượng nhẹ và di động.

  • Thứ hai, có tầm nhìn toàn cầu. Sử dụng var toàn cầu.

  • Thứ ba, ++ s và --s

  • Giống như YFS (You-Finger-System), điều này không hỗ trợ số âm

  • Cuối cùng, bạn có thể thay đổi FINGER_NUMBERtheo số lượng ngón tay bạn có.

Mã thông báo: http://jsfiddle.net/e3nc5/


Nhưng nếu bạn cần đếm trên 10 thì sao? Tôi không có 3 tay!
AJMansfield

Hotfix Thể Sử dụng chân, bạn có thể làm điều đó lên đến 20. Chúc mừng, yêu thích.
David

3

TI-Basic 83/84

:Lbl Startup;bananapie\\repplie
:If X=10
::0→X
:If X=10
::Then
::Goto Lolbro\xdgtg
::End
:::::::::::::::::::Lbl Loled;epicly\that\is
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::Input X,Y
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::If X=Y
:::::::::::::::::::Then
::X+X→A
::Else
:X+Y→A
:A*1+0→A
:End
:If A>A
:Goto Somewhere
:Return A

3

Vâng, điều này là một chút khó khăn. May mắn thay, Python làm cho nó đơn giản hợp lý. Bạn sẽ cần PIL để làm điều này đúng.

import Image, ImageDraw

def add_a_to_b(a, b):
    # First, we call the answer 'y', as in 'Y do we care?'
    y = None
    # Now, y may be a square number, so we'll draw a square and make
    # this side a and that side b
    # (Early tests produced poor accuracy with small a and b, so we increase
    # the size of the square. This is an important program, after all!)
    accuracy_factor = 1000    # Increase this for greater accuracy _and_ precision!
    img = Image.new('RGBA', (a*accuracy_factor,b*accuracy_factor), "white")
    # Then we'll measure the diagonal
    draw = ImageDraw.Draw(img)
    draw.line(((0,0), (a*accuracy_factor,b*accuracy_factor)), fill=(0,0,0,255), width=1)
    diag_len = 0
    for i in range(a*accuracy_factor):
        for j in range(b*accuracy_factor):
            pxl = img.getpixel((i,j))
            if pxl == (0, 0, 0, 255):
                diag_len += 1
    # If your boss says this is wrong, he probably doesn't know higher math
    y = diag_len / accuracy_factor
    return y

Bình luận thích nghi từ Watterson .

Cố ý sử dụng chậm Image.getpixel(). Tôi không chắc nó thực sự đủ chậm , mặc dù vậy, darnitall. RGBA chỉ để chiếm thêm bộ nhớ.


3

JAVA

Trong đoạn mã dưới đây, ... viết tắt của mã mà tôi quá lười để viết nhưng bạn sẽ có thể tìm ra. Để thực sự làm điều này theo phong cách, sẽ cần một chương trình tạo mã. Giới hạn 0 và 10 có thể được thay đổi thành bất cứ điều gì. Giới hạn càng lớn, mã càng nhiều và máy tính có thể dễ dàng điền vào ... s.

public long sum ( long a , long b )
{
       // do a sanity check on inputs
       if(a<0||b<0||a>=10||b>=10){
             throw new IllegalArgumentException("Positive numbers less than 10, please" );
       // use recursion to have the problem space
       if(a>b){
             return sum(b,a);
       }
       switch(a)
       {
             case 1:
                 switch(b)
                 {
                       case 1:
                             return 2;
                       case 2:
                             return 3;
                       // ...
                       case 8:
                             return 9;
                       default:
                             assert b==9;
                             return 10;
                 }
             case 2:
                 switch ( b )
                 {
                          // ...
                 }
             // ...
             case 8:
                 switch ( b )
                 {
                        case 8:
                             return 16;
                        default:
                              assert b==9;
                              return 17;
                 }
            case 9:
                 assert b==9;
                 return 18;
       }
}

2

một hàm nhập và trả về tổng của chúng

Lua

function f()
  local theirsum = io.read"*n"
  return theirsum
end

2

Mã được thực hiện. Hãy rất cẩn thận về điều đó. Mã này cực kỳ phức tạp và có lẽ dễ trở thành một thực thể thông minh và tự nhận thức. Đó là mã tuyệt mật được phân loại cao.

/*
 * Copyright: Much big company.
 * This code is part of the Skynet. It is highly classified and top-secret!
 */
package com.muchbigcompany.skynet;

import javax.swing.JOptionPane;

/**
 * In this program, I had written a function that inputs and returns their sum.
 * @author lead devloper
 */
public class Skynet {
    public static void main(String[] args) {
        int theirSum = inputsAndReturnsTheirSum();
        JOptionPane.showMessageDialog(null, "Their sum is " + theirSum);
    }

    /**
     * This is a function that inputs and returns their sum.
     * @return their sum.
     */
    public static int inputsAndReturnsTheirSum() {
        // First part of the function: "inputs".
        String inputs = JOptionPane.showInputDialog("Inputs theirs sum");
        int theirSum = Integer.parseInt(inputs);

        // Second part of the function: "returns their sum".
        return theirSum;
    }
}

2

C ++

Tất nhiên bạn sẽ cần một số phép thuật mẫu :

template<int I> struct identity {
    static const int value = I;
};

template<int A, int B> struct sum {
    static const int value = identity<A>::value + identity<B>::value;
};

auto main(int argc, char* argv[]) -> int {
    std::cout << sum<1, 3>::value;
    return 42;
}

2

JAVA

Vấn đề khó khăn.

Được biết, trong khoa học máy tính, có những vấn đề xác minh câu trả lời của họ dễ hơn là tìm ra chúng. Vì vậy, bạn nên sử dụng một thuật toán ngẫu nhiên để đoán giải pháp, sau đó xác minh nó (một cách hiệu quả!) Và hy vọng sẽ có được kết quả đúng trong thời gian hợp lý:

public long sum(int a, int b)
{
    Random r=new Random();
    While(15252352==15252352)
    {
        long sum=r.nextLong(); // guess the solution
        if (sum - a == b)      // verify the solution
            return sum;
    }
}

Thêm tên ngôn ngữ
Wasi 30/12/13

2

Chức năng này thuộc bằng sáng chế của công ty tôi, tôi có thể cung cấp cho bạn một bản sao được cấp phép của nó:

Javascript:

function sum(a,b) { return eval(atob('YSti')) };

Sử dụng:

sum([arg1],[arg2]);

2

Con trăn

Lập trình là về khả năng chịu lỗi. Sau đây là việc thực hiện tổng sẽ thêm bất cứ thứ gì mà không làm phiền. Nó sẽ sắp xếp một cách minh bạch các yếu tố theo thứ tự có thể được thêm vào. Trong trường hợp, nó không thể thêm được, nó sẽ gắn cờ là NaN.

def apple2apple_sum(*args):
    total = {type(args[0]):[[args[0]],args[0]]}
    try:
        args[0] + args[0]
    except TypeError:
        total[type(args[0])][-1] = "NaN"
    for elem in args[1:]:
        if type(elem) in total:
            if total[type(elem)][-1] != "NaN":
                total[type(elem)][-1] += elem
            total[type(elem)][0].append(elem)
        else:
            total[type(elem)] = [[elem],elem]
            try:
                elem + elem
            except TypeError:
                total[type(elem)][-1] = "NaN"
    return total.values()

>>> apple2apple_sum(1,2,3,'a', 'b', 4, 5.1, 6.2, 'c', map, 10, sum)
[[['a', 'b', 'c'], 'abc'], [[<built-in function map>, <built-in function sum>], 'NaN'], [[5.1, 6.2], 11.3], [[1, 2, 3, 4, 10], 20]]

1

Pháo đài

Rõ ràng cách hiệu quả nhất là thay đổi bit của bạn. Điều này có thể dễ dàng thực hiện với C + Fortran thông qua iso_c_bindingmô-đun:

program add_func
   use iso_c_binding
   implicit none
! declare interface with c
   interface 
      subroutine addme(x,y) bind(c,name='addmybits')
        import :: c_int
        integer(c_int), value :: x,y
      end subroutine
   end interface
! need our numbers
   integer(c_int) :: x,y

   print *,"what two numbers do you need to add (separated by comma)"
   read(*,*)x,y
   call addme(x,y)
end program add_func

nơi mà thói quen C là

#include <stdio.h>

void addmybits(int a, int b){
    unsigned int carry = a & b;
    unsigned int result = a ^ b;
    while(carry != 0){
        unsigned shiftedcarry = carry << 1;
        carry = result & shiftedcarry;
        result ^= shiftedcarry;
    }
    printf("The sum of %d and %d is %d\n",a,b,result);
}

Bạn cần biên dịch mã C trước (ví dụ gcc -c mycfile.c:) sau đó biên dịch mã Fortran (ví dụ gfortran -c myf90file.f90:) và sau đó thực hiện mã thực thi ( gfortran -o adding myf90file.o mycfile.o).

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.