ट्रैक
/
jq
jq
/
अभ्यास
/
पक्षियों की गिनती
पक्षियों की गिनती

पक्षियों की गिनती

सीखने का अभ्यास

परिचय

ऐरे

JSON एक ऐरे को इस तरह परिभाषित करता है:

ऐरे वैल्यू का एक क्रमबद्ध संग्रह होता है। ऐरे [ बाएँ ब्रैकेट से शुरू होता है और ] दाएँ ब्रैकेट पर खत्म होता है। वैल्यू को , कॉमा से अलग किया जाता है।

ऐरे में किसी भी तरह की JSON वैल्यू शून्य या उससे अधिक हो सकती हैं। ऐरे के सभी एलिमेंट का एक ही टाइप होना ज़रूरी नहीं है।

ऐरे बनाना

एलिमेंट को ऐरे में इकट्ठा करने के लिए ब्रैकेट का उपयोग कीजिए।

[1, 2, 3]

किसी स्ट्रीम को ब्रैकेट में बंद करके उसके एलिमेंट को एक ऐरे में लिया जा सकता है।

range(5)     # => a stream of 5 numbers
[range(5)]   # => the array [0, 1, 2, 3, 4]

साइज़

length फंक्शन ऐरे में एलिमेंट की संख्या लौटाता है।

इंडेक्सिंग और स्लाइसिंग

ऐरे की इंडेक्सिंग शून्य से शुरू होती है।

ब्रैकेट एक्सप्रेशन से ऐरे का कोई एलिमेंट निकालिए: .[2] तीसरा एलिमेंट देता है।

ऋणात्मक इंडेक्स ऐरे के अंत से पीछे की ओर गिने जाते हैं: .[-1] अंतिम एलिमेंट देता है; .[-2] अंत से दूसरा।

एक स्लाइस ऐरे का एक हिस्सा होता है। .[10:15] इंडेक्स 10 से शुरू होकर 5 एलिमेंट लौटाता है; अंतिम इंडेक्स शामिल नहीं होता।

कुछ सुविधाजनक फंक्शन भी हैं:

  • first पहला एलिमेंट देता है।
  • last अंतिम एलिमेंट देता है।
  • nth(n) इंडेक्स n पर मौजूद एलिमेंट देता है।

इटरेशन

jq सामान्य इटरेशन की ज़रूरतें पूरी करने के लिए कई फंक्शन देता है:

  • map(expr) एक नया ऐरे लौटाता है जिसमें expr को बारी-बारी से हर एलिमेंट पर लागू किया जाता है।

    [1, 2, 3] | map(. * 10)    # => [10, 20, 30]
    
    
  • select(expr) एक फंक्शन है जो expr को एक अकेली वैल्यू पर लागू करता है; अगर एक्सप्रेशन का परिणाम सही होता है, तो वह वैल्यू लौटा दी जाती है; अगर परिणाम गलत होता है, तो कुछ भी नहीं लौटाया जाता, null भी नहीं, बिल्कुल कुछ नहीं।

    इसे किसी ऐरे पर लागू करने के लिए map के साथ जोड़िए।

    [range(10)] | map(select(. % 2 == 0))    # => [0, 2, 4, 6, 8]
    

    या फिर select को किसी स्ट्रीम पर लागू कीजिए और परिणाम इकट्ठा कीजिए।

    [range(10) | select(. % 2 == 0)]    # => [0, 2, 4, 6, 8]
    
  • any(condition) और all(condition) एक बूलियन वैल्यू लौटाते हैं, जो बताती है कि ऐरे के कोई भी या सभी एलिमेंट शर्त पूरी करते हैं या नहीं।

    [1, 2, 3, 4] | any(. > 4)    # false
    [1, 2, 3, 4] | any(. >= 4)   # true
    
    [1, 2, 3, 4] | all(. >= 4)   # false
    [1, 2, 3, 4] | all(. <= 4)   # true
    

निर्देश

आप पक्षियों को बड़े चाव से देखते हैं और यह हिसाब रखते हैं कि पिछले सात दिनों में आपके बगीचे में कितने पक्षी आए।

आपके पाँच काम हैं, और ये सब आपके बगीचे में आने वाले पक्षियों की संख्याओं से जुड़े हैं।

1. जाँचिए कि पिछले सप्ताह की गिनतियाँ क्या थीं

आप पक्षियों की गिनती JSON फॉर्मैट में रखते हैं। एक "मुख्य" ऐरे में हर सप्ताह की गिनती के ऐरे रखे जाते हैं। हर सप्ताह की गिनती सात पूर्णांकों का एक ऐरे है, यानी सप्ताह के हर दिन के लिए एक संख्या। नए सप्ताह आप हमेशा मुख्य ऐरे के अंत में जोड़ते हैं। वह फिल्टर बनाइए जो पिछले सप्ताह की गिनतियाँ लौटाता है।

$ cat bird-counting-data.json
[
  ...,
  [0, 2, 5, 3, 7, 8, 4],
  [4, 5, 9, 10, 9, 4, 3]
]

$ jq -f bird-count.jq < bird-counting-data.json
{
  "last_week": [0, 2, 5, 3, 7, 8, 4],
  ...

2. जाँचिए कि कल कितने पक्षी आए थे

एक ऐसा फिल्टर बनाइए जो लौटाए कि कल आपके बगीचे में कितने पक्षी आए थे। पक्षियों की गिनती दिन के क्रम में लगी है: पहला एलिमेंट सबसे पुराने दिन की गिनती है और अंतिम एलिमेंट आज की गिनती।

$ jq -f bird-count.jq < bird-counting-data.json
{
  ...
  "yesterday": 4,
  ...

3. आने वाले पक्षियों की कुल संख्या निकालिए

एक ऐसा फिल्टर बनाइए जो लौटाए कि इस सप्ताह आपके बगीचे में कुल कितने पक्षी आए।

$ jq -f bird-count.jq < bird-counting-data.json
{
  ...
  "total": 44,
  ...

4. व्यस्त दिनों की संख्या निकालिए

कुछ दिन बाकी दिनों से ज़्यादा व्यस्त होते हैं। व्यस्त दिन वह है जिस दिन आपके बगीचे में पाँच या उससे ज़्यादा पक्षी आए हों। एक ऐसा फिल्टर बनाइए जो इस सप्ताह के व्यस्त दिनों की संख्या लौटाए।

$ jq -f bird-count.jq < bird-counting-data.json
{
  ...
  "busy_days": 4,
  ...

5. जाँचिए कि क्या कोई दिन ऐसा था जब एक भी पक्षी नहीं आया

एक ऐसा फिल्टर बनाइए जो true लौटाए अगर इस सप्ताह कोई ऐसा दिन था जब बगीचे में शून्य पक्षी आए; वरना false लौटाए।

$ jq -f bird-count.jq < bird-counting-data.json
{
  ...
  "has_day_without_birds": false
}
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
jq Exercism

पक्षियों की गिनती शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और jq को 12 कॉन्सेप्ट75 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।