এক্সচেঞ্জ রেট সারণীতে প্রদত্ত এক্সচেঞ্জগুলির সর্বাধিক লাভজনক ক্রম সন্ধান করুন।
উদাহরণ হিসাবে বিবেচনা করুন মুদ্রাগুলি একটি রিরি (আপনার হোম মুদ্রা), বি আহত, সি এডি এবং ডি এনার যেখানে একের পর এক হার (যে কোনও লেনদেনের হার আরোপ করার পরে) এ (সারি, কলাম) এন্ট্রি দিয়ে দেওয়া হয় নীচে এক্সচেঞ্জ রেট টেবিল:
TO
A B C D
A 0.9999 1.719828 4.509549 0.709929
F B 0.579942 0.9999 2.619738 0.409959
R
O C 0.219978 0.379962 0.9999 0.149985
M
D 1.39986 2.429757 6.409359 0.9999
স্পষ্টতই এ এর জন্য এ বিনিময় কোনও দুর্দান্ত ধারণা নয় কারণ এই ডেস্কটি আপনাকে কিছু না করার জন্য খুশিতে চার্জ করবে।
স্পষ্টতই কম, তবে এই টেবিলটির সাথে সত্য, অন্য যে কোনও মুদ্রার জন্য এ বিনিময় এবং তারপরে আবার বিনিময় হ'ল লোকসানের ক্ষতি:
via B: 1.719828 × 0.579942 = 0.997400489976
via C: 4.509549 × 0.219978 = 0.992001569922
via D: 0.709929 × 1.39986 = 0.99380120994
যাইহোক, বিনিময় একজন থেকে ডি তারপর ডি করার বি তারপর বি ফিরে একটি করে মুনাফা (যথেষ্ঠ রাজধানী না হার মানবো করার rounding করতে):
0.709929 × 2.429757 × 0.579942 = 1.0003738278192194
সুযোগ থাকা অবস্থায় কেউ এই "ফ্রি লাঞ্চ" বারবার নিতে পারে।
কিন্তু একটি এমনকি আরো enticing শৃঙ্খল এখানে বিদ্যমান, যথা একটি থেকে ডি তারপর ডি করার সি তারপর সি থেকে বি এবং পরিশেষে বি ফিরে একটি :
0.709929 × 6.409359 × 0.379962 × 0.579942 = 1.0026612752037345
চ্যালেঞ্জের বিশদ
যে কোনও যুক্তিসঙ্গত বিন্যাসে একটি বিনিময় হারের সারণী দেওয়া হয়েছে যা হোম-মুদ্রার অর্থ স্থির করে (যেমন 1 ম সারির এবং 1 ম কলাম সর্বদা হোম-মুদ্রা)
(বা এই জাতীয় সারণী এবং হোম-কারেন্সি সূচক দেওয়া থাকে)
একটি * খুঁজে পান কোনও মুদ্রার ব্যবহারের পুনরাবৃত্তি না করে মুদ্রা তালিকার সূচক হিসাবে হোম মুদ্রার সাথে শুরু এবং শেষ হওয়া এক্সচেঞ্জগুলির সর্বাধিক সালিসি ক্রম (যেমন একটি Y-> এক্স এক্সচেঞ্জ একটি এক্স-> ওয়াই অনুসরণ করতে পারে, তবে একটি এক্স-> ওয়াই নাও করতে পারে একটি এক্স-> ওয়াই) অনুসরণ করুন।
যদি এই জাতীয় লাভজনক সুযোগ না পাওয়া যায় তবে একটি শূন্য তালিকা পাওয়া যায় না, বা অন্য কোনও ফলাফল কোনও চিহ্নিত সুযোগের সাথে বিভ্রান্ত না হয়।
- যেমন উপরের উদাহরণের জন্য ( এ-> ডি, ডি-> সি, সি-> বি, বি-> এ ):
- 0-ইনডেক্সিং ব্যবহার করে কেউ ফিরে আসতে পারে
[[0,3],[3,2],[2,1],[1,0]]
বা[0,3,2,1,0]
- 1-ইনডেক্সিং ব্যবহার করে কেউ ফিরে আসতে পারে
[[1,4],[4,3],[3,2],[2,1]]
বা[1,4,3,2,1]
অস্পষ্টতা না থাকায় অন্য ফর্ম্যাটগুলি ঠিক আছে।
- লক্ষ্য রাখার একটি বিষয় হ'ল বাড়ি-> বাড়ি (বোকা ডেস্ক) থেকে একক লেনদেন হওয়ার পক্ষে সেরা সুযোগটি পাওয়া সম্ভব। যদি আপনি উপরের ফ্ল্যাটের বিকল্পের উভয় প্রান্ত (যেমন [3,2,1]
বা [4,3,2]
) এবং হোম নোটের সূচককে "কোনও সুযোগের জন্য" খালি তালিকা থেকে বাদ দিয়ে যাওয়ার সিদ্ধান্ত নেন তবে নিশ্চিত করুন যে হোম-> বাড়িটিও খালি তালিকা নয়।
* যদি একাধিক সমানভাবে লাভজনক বৈধ সুযোগগুলি ঘটে থাকে তবে তাদের মধ্যে কোনওটি, তাদের মধ্যে কিছু বা তাদের সমস্ত ফিরিয়ে দিন।
বেলম্যান-ফোর্ড অ্যালগরিদম এটির কাছে যাওয়ার এক উপায়, তবে গল্ফের পক্ষে সম্ভবত সেরা উপযুক্ত নয়।
পরীক্ষার মামলা
প্রদর্শিত ইনপুটগুলি উদাহরণে ব্যবহৃত ব্যবস্থায় রয়েছে এবং প্রদর্শিত ফলাফলগুলি টু মুদ্রা-সূচকগুলি তালিকাতে 0-সূচি ব্যবহার করে (যখন কোনও সুযোগ থাকে তখন হোম মুদ্রাটি কেবল শেষের শেষে থাকে; কোনও সুযোগ খালি তালিকা নয়)।
[[0.999900, 1.719828, 4.509549, 0.709929],
[0.579942, 0.999900, 2.619738, 0.409959],
[0.219978, 0.379962, 0.999900, 0.149985],
[1.399860, 2.429757, 6.409359, 0.999900]] -> [3, 2, 1, 0]
[[0.9999, 1.5645, 0.9048, 1.0929],
[0.6382, 0.9999, 0.5790, 0.6998],
[1.1051, 1.7269, 0.9999, 1.2087],
[0.9131, 1.4288, 0.8262, 0.9999]] -> [1, 2, 0]
[[0.9999, 1.4288, 0.8262, 0.9131],
[0.6998, 0.9999, 0.5790, 0.6382],
[1.2087, 1.7269, 0.9999, 1.1051],
[1.0929, 1.5645, 0.9048, 0.9999]] -> [1, 2, 3, 1, 0]
[[1.002662, 1.719828, 4.509549, 0.709929],
[0.579942, 0.999900, 2.619738, 0.409959],
[0.219978, 0.379962, 0.999900, 0.149985],
[1.399860, 2.429757, 6.409359, 0.999900]] -> [3, 2, 1, 0, 0]
[[1.002662, 1.719828, 4.509549, 0.709929],
[0.579942, 1.002604, 2.619738, 0.409959],
[0.219978, 0.379962, 1.003000, 0.149985],
[1.399860, 2.429757, 6.409359, 1.002244]] -> [3, 3, 2, 2, 1, 1, 0, 0]
[[0.9999, 1.4288, 0.8262, 0.9131],
[0.6998, 0.9999, 0.5790, 0.6382],
[1.2087, 1.7269, 1.0001, 1.1051],
[1.0929, 1.4974, 0.9048, 0.9999]] -> [1, 2, 2, 0]
[[0.9999, 1.3262, 0.7262, 0.9131],
[0.6998, 0.9999, 0.5490, 0.6382],
[1.2087, 1.7269, 0.9999, 1.2051],
[1.0929, 1.5645, 0.9048, 0.9999]] -> [3, 2, 3, 1, 0]
[[0.9999, 1.5645, 0.9048, 0.5790],
[0.6382, 0.9999, 0.5790, 0.3585],
[1.1051, 1.7269, 0.9999, 0.6391],
[1.7271, 2.6992, 1.5645, 0.9999]] -> [1, 2, 0] and/or [3, 2, 0]
[[0.9999, 1.2645, 0.7048, 0.3790],
[0.4382, 0.9999, 0.3790, 0.1585],
[1.0001, 1.5269, 1.0001, 0.4391],
[1.5271, 2.4992, 1.3645, 0.9999]] -> []
[[0.9999, 1.2645, 0.7048, 0.3790],
[0.4382, 0.9999, 0.3790, 0.1585],
[0.9999, 1.5269, 1.4190, 0.4391],
[1.5271, 2.4992, 1.3645, 0.9999]] -> [2, 2, 0]
এটি কোড-গল্ফ তাই বাইটের মধ্যে সংক্ষিপ্ত সমাধানটি জিততে পারে, তবে প্রতিযোগিতাটি অন্তর্-ভাষাও তৈরি করা উচিত, সুতরাং কোড-গল্ফিংয়ের ভাষাগুলি আপনাকে আপনার প্রিয়তে জমা দেওয়া বন্ধ রাখবেন না!