2015-11-18 7 views
6

मैंने एक एल्गोरिदम बनाया है जो एक गैर-नकारात्मक इंट मान लेता है, जो कुल संख्या का प्रतिनिधित्व करता है, और एक ट्रिपल देता है जो (दिन, घंटे, मिनट) देता है जो इससे मेल खाता है। ,हास्केल - एल्गोरिदम पूरा करने के लिए अधिक कुशल तरीका?

calcdays :: Int -> Int 
calcdays x = x `div` (24*60) 

calchours :: Int -> Int 
calchours x = (x - ((calcdays x)*24*60)) `div` 60 

calcmins :: Int -> Int 
calcmins x = (x - ((calcdays x)*24*60) - ((calchours x)*60)) 

dayshoursmins :: Int -> (Int,Int,Int) 
dayshoursmins x = (calcdays x, calchours x, calcmins x) 

केवल बुनियादी हास्केल परिचालन (गार्ड, divs, Mods आदि) का उपयोग करते हुए वहाँ प्रोग्रामिंग का एक और अधिक सरल तरीका यह समारोह है:

यहाँ मेरी कोड है?

संपादित करें:

मैं एक सुझाव नीचे का इस्तेमाल किया है इस कोड को सरल बनाने के लिए है, जबकि qoutRem समाधान के रूप में सरल नहीं, मैंने सोचा कि मैं इसे पोस्ट कर सकता है:

calcdays :: Int -> Int 
calcdays x = x `div` (24*60) 

calchours :: Int -> Int 
calchours x = (x `mod` (24*60)) `div` 60 

calcmins :: Int -> Int 
calcmins x = (x `mod` (24*60)) `mod` 60 

dayshoursmins :: Int -> (Int,Int,Int) 
dayshoursmins x = (calcdays x, calchours x, calcmins x) 
+4

मैं हास्केल बात नहीं करते की तरह somethink लेकिन एल्गोरिथ्म सामान्य रूप से इस प्रकार है: ', इनपुट लेने के 60 से विभाजित, शेष मिनट हिस्सा है, परिणाम तो है 24 से विभाजित, शेष घंटे का हिस्सा है, नतीजा दिन का हिस्सा है। तो आपको अलगाव में निष्पादित करने के बजाय गणनाओं को चेन करना होगा। – biziclop

+0

हां, हालांकि, हास्केल में, आप चर सेट नहीं कर सकते हैं, इसलिए मुझे यह सुनिश्चित नहीं है कि इसे कैसे प्राप्त किया जाए। –

+1

आपको चर सेट करने की आवश्यकता नहीं है, केवल परिणाम को अगले चरण में सीधे फ़ीड करें। हालांकि मैं वाक्यविन्यास के बारे में अनिश्चित हूँ। – biziclop

उत्तर

12

मुझे लगता है कि इस

dayshoursmins x = (d,hr,mr) where 
(h,mr) = quotRem x 60 
(d,hr) = quotRem h 24 
+0

मुझसे बड़ा +1 - यह सही तरीका है। मैं 'quotRem' बनाम' divMod' के बारे में सामान्य quibble भी करने जा रहा था, लेकिन मुझे लगता है कि इस मामले में 'quotRem' वास्तव में नकारात्मक संख्याओं पर क्या उम्मीद है! –

+0

हास्केल में एक भिखारी के रूप में, मुझे 'quotRem' के बारे में पता नहीं था। यह बहुत अच्छा है, बहुत आसान, धन्यवाद। –

+1

मैंने div खोजने के लिए [hoogle] (https://www.haskell.org/hoogle/) का उपयोग किया। इसी प्रकार के फ़ंक्शंस आमतौर पर एक साथ सूचीबद्ध होते हैं और [prelude] (http://hackage.haskell.org/package/base-4.8.1.0/docs/Prelude.html#v:div) उसी अनुभाग में 'quotRem' सूचीबद्ध करता है। –

3

आप

उपयोग कर सकते हैं
a `mod` b 

सीधे शेष प्राप्त करने के लिए।

और आप उप-अभिव्यक्ति की गणना करने के लिए let or where का उपयोग कर सकते हैं।

संबंधित मुद्दे