वजन का ढेर


13

चुनौती:

आपको इनपुट के रूप में वजन के ढेर की ASCII छवि दी जाएगी, और ढेर के संयुक्त वजन का उत्पादन करना होगा।

यहाँ छवि विवरण दर्ज करें

प्रारूप:

5 अलग-अलग वजन हैं, 1, 2, 5, 10, 20 पासरे (या कुछ अन्य मनमाना इकाई) का वजन ।

वज़न इस तरह दिखता है, आरोही क्रम में:

1:   __
    |__|

2:   ______
    |______|

5:   ______
    |      |
    |______|

10:  ______________
    |              |
    |______________|

20:  ____________________
    |                    |
    |____________________|

वज़न सममित रूप से रखा जाएगा (उदाहरण छवि में), आवश्यक रूप से क्रमबद्ध क्रम में नहीं। वजन सीमाएं साझा करेगा, जहां लागू हो:

परीक्षण के मामलों:

आप परीक्षण मामलों के रूप में सभी एकल वजन का उपयोग कर सकते हैं।

   __
 _|__|_
|______|
|      |
|______|
1 + 2 + 5 = 8

 ____________________
|                    |
|____________________|
   |              |
   |______________|
        _|__|_
       |______|
       |      |
       |______|          
20 + 10 + 1 + 2 + 5 = 38 

 ______
|______|
|______|
|______|
|______|
2 + 2 + 2 + 2 = 8

अतिरिक्त नियम:

  • आप अतिरिक्त अग्रणी स्थान नहीं मान सकते हैं । सबसे बड़ा वजन बाईं ओर सभी तरह का होगा।
  • आप अनुगामी स्थान और नई रेखाएँ मान सकते हैं।
  • आप मान सकते हैं कि अधिकतम 10 वज़न होगा
  • आप एक वैकल्पिक प्रारूप पर इनपुट ले सकते हैं, लेकिन आप कुछ और द्वारा उपयोग किए गए वर्णों को स्थानापन्न नहीं कर सकते

यह इसलिए प्रत्येक भाषा में बाइट्स में सबसे छोटा कोड जीत जाता है। स्पष्टीकरण हमेशा की तरह प्रोत्साहित किया जाता है।


आपका चुनौती मुझे लिखने के लिए प्रेरित इस एक । किसी भी सुझाव की सराहना की है!
tgrass12

जवाबों:


7

जेली ,  24  23 बाइट्स

ḟ⁶Ỵẹ€”|IFṚ’œṗ$Ḅ:3“ÇÞ‘yS

इसे ऑनलाइन आज़माएं!

कैसे?

वज़न की पहचान उनकी चौड़ाई और ऊँचाई से की जा सकती है। चौड़ाई को रेखा के |वर्णों के बीच की दूरी को देखकर मापा जा सकता है । यदि हम पहले सभी रिक्त स्थान को हटाते हैं, तो ऊँचाई दो की ऊँचाई एक की चौड़ाई के साथ इस तरह की रेखा का योगदान देगी।

अलग-अलग वज़न की चौड़ाई 3, 7, 7, 15, 21(वज़न के लिए 1, 2, 5, 10, 20क्रमशः) है। 1ऊँचाई दो में से एक अनुगामी जोड़कर हम पाते [3],[7],[7,1],[15,1],[21,1]हैं कि ये बाइनरी से परिवर्तित होते हैं 3,7,15,31,43, पूर्णांक तीन से विभाजित होने से हमें प्राप्त होता है 1,2,5,10,14, जो कि वज़न को छोड़कर 14ज़रूरतों को छोड़कर होता है 20

ḟ⁶Ỵẹ€”|IFṚ’œṗ$Ḅ:3“ÇÞ‘yS - Link: list of characters    e.g. <example 2>
 ⁶                      - literal space character
ḟ                       - filter discard
  Ỵ                     - split at new lines
     ”|                 - literal pipe character
   ẹ€                   - get indices for €ach             [[],[1,2],[1,22],[1,2],[1,16],[2,5],[1,8],[1,2],[1,8]]
       I                - incremental differences          [[],[1],[21],[1],[15],[3],[7],[1],[7]]
        F               - flatten                          [1,21,1,15,3,7,1,7]
         Ṛ              - reverse                          [7,1,7,3,15,1,21,1]
             $          - last two links as a monad:
          ’             -   decrement                     [6,0,6,2,14,0,20,0]
           œṗ           -   partition at truthy indices   [[],[7,1],[7],[3],[15,1],[21,1]]
              Ḅ         - convert from binary             [0,15,7,3,31,43]
               :3       - integer divide by three         [0,5,2,1,10,14]
                 “ÇÞ‘   - code-page-indices               [14,20]
                     y  - translate                       [0,5,2,1,10,20]
                      S - sum                             38

वैकल्पिक रूप से उपयोग किए गए रूपांतरण से पहले के 21साथ मापा चौड़ाई को बदलें :30“ßœ‘y

ḟ⁶Ỵẹ€”|IF“ßœ‘yṚ’œṗ$Ḅ:3S

4

पायथन 2 , 77 बाइट्स

lambda x:sum(i/21*x.count('|'+i%21*' _'[i<50]+'|')for i in[23,48,69,224,440])

इसे ऑनलाइन आज़माएं!

[i/21, i%21, ' _'[i<50] for i in [23,48,69,224,440]][1, 2, '_'], [2, 6, '_'], [3, 6, ' '], [10, 14, ' '], [20, 20, ' ']प्रत्येक वजन के आधार में निम्न , वर्ण और वर्ण का प्रतिनिधित्व करने वाली निम्नलिखित त्रिवेणी उत्पन्न करेगा , जिसका उपयोग प्रत्येक भार का एक अद्वितीय एकल-रेखा प्रतिनिधित्व बनाने के लिए किया जाएगा।
चूँकि 3rd वज़न 2 के साथ ओवरलैप होगा, इसलिए मैं इसके बेस को बॉडी ( _-> ) से रिप्लेस करता हूँ और वैल्यू को 3घटाता हूँ (यह बेस को 2और बॉडी को उसी हिसाब से काउंट करेगा 3, जिसके परिणामस्वरूप 5)


4

रेटिना 0.8.2 , 60 बाइट्स

T`|`!
!__!
1
!_{6}!
11
! {6}!
3$*
!.{14}!
5$*
!.{20}!
10$*
1

इसे ऑनलाइन आज़माएं! व्याख्या: मिलान की आसानी के लिए एस |को !एस के साथ बदल दिया जाता है , फिर भार को एकात्मक और कुल में बदल दिया जाता है। केवल दिलचस्प भाग यह है कि 5वजन एक का योग माना जाता है 2और एक 3, वजन, जबकि 10और 20वजन आधा वजन के सिर्फ दो लाइनें हैं।



2

पायथन 3 , 76 बाइट्स

lambda t:sum([1,2,3,5,5,9,11][len(x)//4+(x<'_')]for x in t.split('|')[1::2])

इसे ऑनलाइन आज़माएं!

कैसे?

sum([1,2,3,5,5,9,11][len(x)//4+(x<'_')]for x in t.split('|')[1::2])
                                                t.split('|')         - split ascii art into pieces
                                                            [1::2])  - weights are at odd indexes
                                       for x in                      - iterates over the weights
                     len(x)//4                                       - map widths to 0,1,3,5,7
                              +(x<'_')                               - add 1 if the first row of 2-row weight
    [1,2,3,5,5,9,11][                 ]                              - value of each part of a weight
sum(                                                              )  - add 'em all up

1

मुझे यकीन है कि कुछ सुधार किए जाने हैं, लेकिन इस समय मेरे पास है:

ग्रूवी, 131 बाइट्स

def f(s){s.split('\n').sum{n=0;[2:1,6:2,14:5,20:10].each{k,v->if(it==~".*\\|[ _]{$k}\\|.*"){n=v+(!it.contains('_')&&k==6?1:0)}};n}}

इनपुट Stringको एक में परिवर्तित करता है Collection<String>और फिर कुल प्राप्त करने के लिए प्रत्येक पंक्ति के परिणामों को बताता है। उपयोग करता है Mapजहां कुंजी पाइप वर्णों के बीच रिक्त स्थान या अंडरस्कोर की संख्या है और मूल्य इसी पासरेस राशि है। यदि रेखा एक महत्वपूर्ण पैटर्न से मेल खाती है, तो यह निर्धारित करने के लिए कुंजी को रेगेक्स में प्लग किया गया है। एक कैविएट उस मामले में 1 जोड़ने के लिए सहायक है जहां पाइपों के बीच प्रतिस्थापन की लंबाई 6 है और रिक्त स्थान से बना है (अंडरस्कोर के विपरीत)। यदि कोई पैटर्न मैच नहीं करता है, तो लाइन का मान 0 है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.