मेरी लाइसेंस प्लेट कितने अंक देती है?


31

(यह मेरा पहला कोड-गोल्फ सवाल है)

जब मैं एक बच्चा था, मेरे पिताजी और मैंने एक गेम का आविष्कार किया, जहां हम कारों पर देखी जाने वाली लाइसेंस प्लेट को कुछ सरल शब्दों के आधार पर कुछ बिंदु दे सकते हैं:

एक ही अक्षर या संख्या की X राशि X-1 अंक देती है, उदाहरण:

22 = 1 point
aa = 1 point
5555 = 3 points

संख्या प्रत्येक अभिगृह के बगल में होनी चाहिए, इसलिए 3353केवल 1 अंक देता है, क्योंकि 5 3 के क्रम को तोड़ता है।

आरोही या अवरोही क्रम में X संख्याओं का एक क्रम, कम से कम 3 पर, X अंक दें, उदाहरण:

123 = 3 points
9753 = 4 points
147 = 3 points

बिंदु प्रणाली केवल 1-अंकीय संख्या के लिए काम करती है, इसलिए 1919अंक नहीं देती है, और 14710केवल 3, (147) देती है।

दृश्यों को अधिक अंक बनाने के लिए जोड़ा जा सकता है, उदाहरण:

1135 = 4 points (1 point for 11 and 3 points for 135)
34543 = 6 points (3 points for 345 and 3 points for 543)

हालांकि आपको अतिरिक्त अंक के लिए 2 छोटे अनुक्रमों में एक बड़े अनुक्रम को काटने 1234 = 123, 234 (6 points)की अनुमति नहीं है : अनुमति नहीं है।

लाइसेंस प्लेट द्वारा दिए गए अंकों की संख्या निर्धारित करने के लिए, आपका कार्य एक अनुक्रम दिया गया है।

डेनमार्क में, लाइसेंस प्लेट इस तरह से संरचित हैं: सीसी II III, जहां सी चरित्र है और मैं पूर्णांक है, और इस प्रकार मेरे उदाहरण इनपुट इस संरचना को प्रतिबिंबित करेंगे। यदि आप चाहें, तो आप अनुक्रम को अपनी संरचना फिट कर सकते हैं, या, यदि आप वास्तव में साहसी महसूस करते हैं, तो प्रोग्राम को लाइसेंस प्लेट की संरचना का विश्लेषण करने दें और इस प्रकार यह दुनिया भर में किसी भी प्रकार की लाइसेंस प्लेट पर काम करता है। स्पष्ट रूप से उस संरचना का वर्णन करें जिसे आप अपने उत्तर में उपयोग करने का निर्णय लेते हैं।

आप किसी भी तरह से कृपया इनपुट ले सकते हैं, या तो एक स्ट्रिंग या एक सरणी मुझे सबसे अधिक समझ में आती है।

टेस्ट इनपुट | उत्पादन:

AA 11 111 | 5
AB 15 436 | 3
OJ 82 645 | 0
UI 65 456 | 6
HH 45 670 | 5
YH 00 244 | 5
AJ 00 754 | 1

अपने स्वयं के ढांचे को चुनने की प्रकृति के कारण, या यहां तक ​​कि सभी संरचनाओं को कवर करने के कारण, मैं जरूरी नहीं देखता कि कैसे एक विजेता को स्पष्ट रूप से निर्धारित किया जा सकता है। मुझे लगता है कि विजेता ने उस संरचना पर सबसे छोटा बाइट किया होगा जो उसने तय किया है। (और CICIC जैसा इनपुट न लें, बस इसे अपने लिए आसान बनाएं)

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

टिप्पणियों के कारण पूछने के लिए, मेरे पास साझा करने के लिए कुछ अतिरिक्त जानकारी है: आरोही या अवरोही संख्याओं का एक क्रम अंकगणितीय अनुक्रम को संदर्भित करता है, इसलिए X +/- a * 0, X +/- a * 1, ... X +/- a * n आदि इसलिए 3-5-7 उदाहरण के लिए 3 + 2 * 0, 3 + 2 * 1, 3 + 2 * 2. अनुक्रम नहीं है, हालांकि, 0 से शुरू करने की आवश्यकता है और न ही अंत में 0।

अधिक संस्करण:

आप किसी भी तरह से इनपुट कृपया दे सकते हैं, आपको इनपुट स्पेस, डैश या किसी अन्य चीज की आवश्यकता नहीं है जो लाइसेंस प्लेट को अधिक पठनीय बनाता है। यदि आप केवल बड़े अक्षरों या उस जैसे कुछ को स्वीकार करके बाइट्स बचा सकते हैं, तो आप ऐसा कर सकते हैं। केवल आवश्यकता यह है कि आपका कार्यक्रम एक स्ट्रिंग / सरणी / कुछ भी ले सकता है जिसमें दोनों वर्ण और संख्याएं हों, और बताए गए नियमों के अनुसार सही मात्रा में आउटपुट करें।


ढीले ढंग से संबंधित । PPCG में आपका स्वागत है और पहला अच्छा प्रश्न!
श्री एक्सकोडर

सुझाए गए परीक्षण का मामला: XX 87 654। मैं आपके सभी परीक्षण मामलों के लिए सही था, लेकिन किसी एक के लिए गलत था .. इसे ठीक करने पर काम करना।
केविन क्रूजेसेन

7
मैं दृढ़ता से सुझाव देता हूं कि आप एक निश्चित संरचना तय करें (मैं सुझाव देता हूं CCIIIII, कोई रिक्त स्थान नहीं है), या फिर इस समस्या में एक उद्देश्य जीत मानदंड का अभाव है, जिसे हम यहां के आसपास देखते हैं। जैसे, "(और CICIC जैसा इनपुट नहीं लेना है, बस इसे अपने लिए आसान बनाना है)" बहुत व्यक्तिपरक है। एक स्वीकार्य संरचना क्या है और क्या नहीं है?
लिन

1
@ लीन एक स्वीकार्य संरचना वह है जो वास्तव में अंक प्राप्त कर सकती है, सीआईसीआईसी के पास कभी भी एक अनुक्रम नहीं होगा जो किसी भी बिंदु को प्राप्त करता है, इसलिए यह स्वीकार्य नहीं है। और इसके शीर्ष पर, चुने हुए प्रोग्रामिंग भाषा और चुने हुए ढांचे पर बाइट्स में सबसे छोटा जवाब क्यों है, स्पष्ट, उद्देश्य जीत मानदंड नहीं? इस जीत के मानदंड में एक सरल, नियम का पालन करना आसान है, फिर भी डेवलपर को यह चुनने की स्वतंत्रता देता है कि वे किस तरह की संरचना के साथ काम करना चाहते हैं। दी यह विभिन्न विजेताओं का एक बहुत कुछ हो सकता है, लेकिन, वास्तव में, तो क्या?
Troels MB जेन्सेन

3
टेस्ट केस: IA99999(कोड अंकों का घटता क्रम होता है, लेकिन संख्याओं का नहीं)।
जरगब

जवाबों:


7

05AB1E , 25 22 20 18 बाइट्स

लो-केस अल्फाबेटिक चार्ट की एक स्ट्रिंग को स्वीकार करता है और कोई स्थान नहीं है।

Ç¥0Kγ€gXK>OIγ€g<OO

इसे ऑनलाइन आज़माएं! या टेस्ट सूट के रूप में


मैं स्पष्टीकरण के बिना 05AB1E नहीं पढ़ सकता;) लेकिन क्या आप रिक्त स्थान के बिना इनपुट प्राप्त करके बाइट्स बचा सकते हैं?
केविन क्रूज़सेन

@ Mr.Xcoder मुझे इसमें भी संदेह है। लेकिन मैं व्यक्तिगत रूप से 05AB1E नहीं पढ़ सकता हूं, इसलिए मैंने सोचा कि शायद एमिग्ना ने रिक्त स्थान से छुटकारा पाने / अनदेखी करने के लिए कोई कोड जोड़ा है। संभवतः यह किसी भी अतिरिक्त बाइट के बिना निहित है, लेकिन मैंने अभी मामले में पूछा था कि यह नहीं हुआ।
केविन क्रूज़सेन

मैंने सिर्फ एक स्विंग और पवित्र बकवास के लिए आपका कोड लिया, यह वास्तव में किसी भी लंबाई या अनुक्रम के लिए काम करता है! एकमात्र 'मुद्दा' यह है कि यह एबीसी के लिए 3 अंक भी देता है, जो कि अपने आप में गलत नहीं है, मैंने अभी इसके लिए कोई हिसाब नहीं दिया है, क्योंकि डेनमार्क में हमारे पास केवल प्रत्येक पत्र के बगल में 2 अक्षर हैं।
ट्रॉल्स एमबी जेन्सेन

2
@ केविनक्रूजसेन: इनपुट में कोई भी स्थान कई बाइट्स को नहीं बचा सकता है। मुझे वह हिस्सा याद आ गया जहाँ हम खुद तय कर सकते थे। सर उठाने के लिए धन्यवाद। (एक स्पष्टीकरण भी आ रहा है)।
एमिग्ना

@Eignigna मैंने इसे स्पष्ट रूप से प्रश्न में नहीं कहा था, मुझे लगा कि मैंने इस पर पर्याप्त संकेत दिया है जब मैंने लिखा था कि आप किसी भी तरह से इनपुट ले सकते हैं, कृपया या तो एक स्ट्रिंग या एक सरणी मुझे सबसे अधिक समझ में आती है।
ट्रॉल्स एमबी जेनसेन

7

भूसी , 20 16 15 बाइट्स

-1 बाइट @Zgarb को धन्यवाद

रिक्त स्थान के बिना और निचले मामले में इनपुट लेता है।

ṁ??¬o→LεL←gẊ¤-c

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

व्याख्या

           Ẋ      Map over all adjacent pairs
            ¤-c   get the difference of their codepoints
          g       Split into groups of equal elements
ṁ                 Map then sum
 ?       ←          If the head of the list is truthy (not 0)
  ?    ε              If the length of the list is 1
   ¬                    return 0
                       Else
    o→L                 return the length + 1
                     Else
        L             return the length

मुझे लगता है कि यहां K0हो सकता ¬है।
जरगब

हम्म, इस पर विफल लगता है IA99999
जरगब

@Zbb, निम्न मामले में इनपुट प्रारूप को बदल दिया।
H.PWiz

5

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

-3 बाइट्स लिन का धन्यवाद

लोअरकेस अक्षरों के साथ बाइट-स्ट्रिंग के रूप में इनपुट लेता है b'aa11111':।

def f(s):
 d=l=L=p=0
 for c in s:C=0!=d==c-l;p+=(c==l)+C*L;L=3>>C;d=c-l;l=c
 return p

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



1
C=0!=d==c-lऔर भी छोटा है।
लिन

2

जावा 8, 195 बाइट्स

a->{int r=a[0]==a[1]?1:0,i=3,j,p=a[2],x,y,z;for(;i<7;p=a[i++])for(r+=(x=a[i])==p?1:0,j=-4;++j<4;r+=j==0?0:i<6&&p+j==x&x+j==(y=a[i+1])?++i<6&&y+j==(z=a[i+1])?++i<6&&z+j==a[i+1]?5:4:3:0);return r;}

निश्चित रूप से दृश्यों के लिए जाँच करने के लिए एक और तकनीक का उपयोग करके कुछ और गोल्फ हो सकता है।

स्पष्टीकरण:

इसे यहाँ आज़माएँ।

a->{                      // Method with character-array parameter and integer return-type
  int r=                  //  Result-integer
        a[0]==a[1]?       //   If the two letters are equal:
         1                //    Start this result-integer at 1
        :                 //   Else:
         0,               //    Start the result-integer at 0 instead
      i=3,j,              //  Index-integers
      p=a[2],x,y,z;       //  Temp integers
   for(;i<7;              //  Loop (1) from index 3 to 7 (exclusive)
       p=a[i++])          //    And after every iteration: Set `p` and raise `i` by 1
     for(r+=(x=a[i])==p?  //   If the current digit (now `x`) equals the previous `p`:
             1            //    Raise the result-integer by 1
            :             //   Else:
             0,           //    Keep the result-integer the same
         j=-4;++j<4;      //   Inner loop (2) from -3 to 3 (inclusive)
       r+=j==0?           //    If `j` is 0:
           0              //     Skip it, so keep the result-integer the same
          :i<6            //    Else-if `i` is not 6,
           &&p+j==x       //    and the previous digit `p` + `j` equals the current digit,
           &x+j==(y=a[i+1])?
                          //    and the current digit `x` + `j` equals the next digit `y`:
            ++            //     Raise index `i` by 1 first,
              i<6         //     and check if `i` is not 6 again,
              &&y+j==(z=a[i+1])?
                          //     and if the new current digit `y` + `j` equals the next digit `z`:
               ++         //      Raise index `i` by 1 first again,
                 i<6      //      and check if `i` is not 6 again,
                 &&z+j==a[i+1]?
                          //      and if the new current digit `z` + `j` equals the next digit:
                  5       //       Raise the result-integer by 5
                 :        //      Else:
                  4       //       Raise it by 4 instead
              :           //     Else:
               3          //      Raise it by 3 instead
           :              //    Else:
            0             //     Keep it the same
     );                   //   End of inner loop (2)
                          //  End of loop (1) (implicit / single-line body)
  return r;               //  Return the result-integer
}                         // End of method

1

पायथ ,  51  50 बाइट्स (चौंका देने वाला)

+/|R0.+QZslM.MlZ+kfTsmm?&!-K.+sMkhK.AKkY.:>Q2d}3 5

सभी परीक्षण मामलों की जाँच करें या इसे यहाँ आज़माएँ।


मुझे अब एहसास हुआ कि मैं इसे छोटा कर सकता हूं, लेकिन अगर मैं इसे लगातार गोल्फ कर पाऊंगा तो अपडेट करूंगा।
श्री एक्सकोडर

1

आर , 153 , 145 , 143 बाइट्स

function(x){p=0;s=sum;if(x[1]==x[2])p=1;a=diff(strtoi(x[3:7]));p=p+s(a==0);l=sort(table(a[a!=0]),T);(p=p+s(l[(l[((s(l)>0)&(l[1]>1))]+1)>2]+1))}

अनाम फ़ंक्शन जो वर्ण वेक्टर लेता है और पूर्णांक देता है।
अपेक्षित इनपुटz(c("A", "A", "1", "1", "1", "1", "1"))

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

अनप्लग्ड संस्करण

function(x){
  pnt <- 0; s <- sum
  if(x[1] == x[2]) pnt <- 1
  a <- diff(strtoi(x[3:7]))
  pnt <- pnt + s(a == 0)
  l <- sort(table(a[a!=0]), T)
  (pnt <- pnt + s(l[(l[((s(l) > 0) & (l[1] > 1))] + 1) > 2] + 1))
}


0

पायथ , 48 42 बाइट्स

मेरे अजगर जवाब से सीधा पोर्ट। निम्न अक्षरों के साथ बाइट-स्ट्रिंग के रूप में इनपुट लेता है: b'aa11111 '।

यह पायथ में मेरी पहली बार कोडिंग है, इसलिए किसी भी सुझाव का स्वागत है: डी

KJ=b0VQ=d&KqK-NJ=+b+qNJ*dZ=Z-3yd=K-NJ=JN;b

इसे यहाँ आज़माएँ


0

जावास्क्रिप्ट, 216 192 186 202 201 बाइट्स

function f(s){var a=s.split(" "),c=a[1],a=a[0],r,h=b=i=p=0;for(i=0;i<4;i++){if(i<2&(r=a[i+1]-a[i]==a[i+2]-a[i+1])){p++;b=2}if(i>0){if(a[i]==a[i-1]){p++;h++}if(i<3&c[i]==c[i-1])p++}}return h==4?p+b:p-b}

unminified

function f(s){
    var a=s.split(" "),c=a[1],a=a[0],r,h=b=i=p=0;
    for(i=0;i<4;i++){
        if(i<2&(r=a[i+1]-a[i]==a[i+2]-a[i+1])){
            p++;
            b=2
        }
        if(i>0){
            if(a[i]==a[i-1]){
                p++;
                h++;
            }
            if(i<3&c[i]==c[i-1]) 
                p++;
        }
    }

    return h==4?p+b:p-b
}

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

  • केवल 0000 XXXप्रारूप के साथ काम करने के लिए कोड को कम कर दिया । (-24 बाइट्स)
  • जैसा कि @Titus ने सुझाव दिया है। (-6 बाइट्स)
  • एक बग तय किया जहां चार समान संख्याओं ने 3 के बजाय 7 का स्कोर दिया। (+16 बाइट्स)
  • पिछले अर्ध-बृहदान्त्र को हटा दिया। (-1 बाइट)
  • कोड में एक टाइपो फिक्स्ड। (कोई बाइट परिवर्तन)

मैं बाइट्स कैसे गिनूं?
ब्रायन एच।


वास्तव में इस तथ्य से नफरत है कि कोड ब्लॉक भाषा को मान्यता नहीं दे रहा है ...
ब्रायन एच।

वाक्य रचना हाइलाइटिंग चाहते हैं?
H.PWiz

btw, 00007 अंक देता है, क्या यह सही है? (यह एक अंकगणितीय अनुक्रम और एक ही समय में एक दोहराया संख्या अनुक्रम के रूप में पढ़ा जा रहा है)
ब्रायन एच।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.