Code for dumb processor

Đề bài:

Nhớ hồi làm game Shark Dash, có cái phone Droid X gì gì đó cùi bắp, GPU ko hỗ trợ lệnh if và biểu thức điều kiện trong code shader. Ai có hứng thú thì vào giải cho vui: có 4 biến float dương a, b, c, d, hãy viết lại đoạn code C sau mà ko dùng if hay biểu thức điều kiện: if (a < b) a = c; else a = d; được phép thoải mái dùng các hàm math như sin, cos, sqrt, abs, min, max, round, floor, ceil.

 

Bài giải:

 

Code C hay OpenGL thì bây giờ quên hết rồi, đành chịu , còn Java mất 10 phút (xem comment).

 

Bạn nào có cách giải khác thì cũng comment vô cho vui :D (any language welcome).

 

./.

About DucQuoc.wordpress.com

A coder, brother, and player at times...
This entry was posted in Coding, Feeling. Bookmark the permalink.

3 Responses to Code for dumb processor

  1. My solution:

    a = c * Math.round(Math.max((Math.abs(b – a) + b – a) / (2 * (b – a)), 0)) + d * Math.round(Math.max((Math.abs(a – b) + a – b) / (2 * (a – b)), 0)) + d * (1 – Math.round((a – b) / (a – b)));

    –Duc

  2. Cách giải ở trên có thể applied được với các trường hợp giá trị âm, dương, 0 … Và thậm chí cả trường hợp a=b (nhờ hàm Math.round của Java). Nếu ta chỉ cần tính trường hợp dương và a != b thì sẽ đơn giản hơn, chỉ cần min() với max() là đủ , không cần cả abs()

    Hàm cho số thực của C/C++ là fmin() và fmax() .

  3. Pingback: Sprint end DoW | DucQuoc's Blog

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s