टेक-बैक काउंटिंग एल्गोरिथ्म


14

जो बच्चे सीख रहे हैं कि कैसे संख्याओं की गणना करना जानते हैं, लेकिन उन रनों को ठीक से नहीं डाल सकते हैं।

उदाहरण के लिए, वे कह सकते हैं:

1,2,3,4,7,8,9,10

कभी-कभी बच्चों को एहसास होगा कि उन्होंने कुछ संख्याओं को छोड़ दिया, और वापस चले गए:

1,2,3,4,7,8,5,6,7,8,9,10

यह स्पष्ट रूप से बेहतर पैटर्न है। हमें उनकी पहचान करने की जरूरत है।

इन सूचियों की पहचान करने के लिए:

  1. हम न्यूनतम Mऔर अधिकतम Nसूची की पहचान करते हैं

  2. हम सूची के माध्यम से कदम रखते हैं। यदि वर्तमान संख्या सूची के किसी भी सदस्य से अधिक या उसके बराबर है, तो हम वर्तमान संख्या को हटा देते हैं।

  3. Iff शेष सूची से सभी नंबरों को शामिल Mकरने के लिए Nहै, तो हम एक truthy मान।

आप मान सकते हैं कि आपकी इनपुट सूची में कम से कम 1 तत्व होगा। आप मान सकते हैं कि सभी पूर्णांक गैर-नकारात्मक होंगे।

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

Truthy:

0
10
0 0 0 
1 0 1
0 1 2 3 4 5 6 7 8 9 10
0 1 2 3 0 1 2 3
0 1 2 3 4 5 5
0 1 1 2 2 3
0 3 6 1 4 7 2 5 8 3 4 5 6 7 8
1 3 5 7 2 3 4 5 6 7
5 6 0 1 2 3 6 7 4 5 6 7
5 6 7 8
5 5 6 7 8
4 6 7 8 3 4 5 6 7 8

Falsy:

1 0
4 3 2 1
1 2 3 7 8 9
0 1 2 3 1 3
0 1 2 3 1 3 4
0 1 2 3 1 3 2 4
0 1 2 3 1 3 2 4 3
1 3 5 7 2 4 6 8
0 1 2 1 3 4 5 6
4 5 6 3 4 5

यह , इसलिए अपने उत्तरों को यथासंभव छोटा करें!


बहुत स्पष्ट नहीं: क्या [0,1,2,3,4,5,4,3,3,1] को सच या गलत माना जाना चाहिए?
जीबी

1
@ जीबी झूठा। जब आप दूसरे तत्व पर होते हैं, तो आप इसे चरण 2 पर हटा देते हैं (क्योंकि 1बाद में एक और पंक्ति नीचे होती है)। आप हर दूसरे तत्व को भी निकाल देंगे (अंतिम 1 को छोड़कर), इसलिए आप इसे समाप्त कर देंगे 0 1, जो नहीं है0 1 2 3 4 5
नाथन मेरिल

जवाबों:


6

05AB1E , 5 बाइट्स

मैं इस काम में 100% निश्चित नहीं हूं, लेकिन यह सभी परीक्षण मामलों से गुजरता है और मुझे ऐसी कोई भी स्थिति नहीं मिली जहां यह विफल हो।

Ú¥1QP

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

Ú¥1QP   Main link. Argument a
Ú       Reverse uniquify a, keeps only last occurence of each element
 ¥      Get all deltas - all 1 if ascending list
  1Q    Compare all deltas to 1
    P   Product of all results

7 बाइट्स, वास्तव में
वैल का कहना है कि मोनिका

2
@val नहीं, 05AB1E एक कस्टम एन्कोडिंग, 05AB1E का उपयोग करता है।
एग्री द आउटग्रीक

2

जेली , 10 9 बाइट्स

ṀrṂɓṚ«\Q⁼

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

यह काम किस प्रकार करता है

ṀrṂɓṚ«\Q⁼  Main link. Argument: A (array)

Ṁ          Yield the maximum of A.
  Ṃ        Yield the minimum of A.
 r         Yield R := [max(A), ... min(A).
   ɓ       Begin a new chain. Left argument: A. Right argument: R
    Ṛ      Reverse A.
     «\    Take the cumulative minimum.
       Q   Unique; deduplicate the results.
        ⁼  Compare the result with R.

दिलचस्प है, ɓएक अपेक्षाकृत नई सुविधा है?
ETHproductions

हाँ, यह जोनाथन एलन द्वारा एक पुल अनुरोध से है।
डेनिस

अहा, 13 दिन पहले। हालांकि यह अभी तक इस्तेमाल नहीं देखा गया था (हो सकता है कि आप या जोनाथन के पास है और मैं इसे याद कर रहा हूं)।
ETHproductions

यहाँ असली दिलचस्प हिस्सा «\मेरी राय में है।
एरिक आउटरीक



1

PHP , 148 130 बाइट्स

-18 बाइट्स, धन्यवाद @Christoph

$a=explode(' ',$argn);$b=range(min($a),max($a));foreach($a as$i=>&$k)for(;++$i<count($a);)$k<$a[$i]?:$k=-1;echo!array_diff($b,$a);

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


ठीक है यहाँ टिप्पणी करने के लिए बहुत कुछ: $argnहमेशा एक स्ट्रिंग foreachहै उस पर काम नहीं करता है। आप $argvइनपुट के रूप में एक सरणी प्राप्त करने के लिए उपयोग कर सकते हैं लेकिन सावधान रहें कि इसमें हमेशा प्रथम तत्व के रूप में फ़ाइल नाम होता है। आप उपयोग करते हैं $mऔर $nकेवल एक बार ताकि आप $bपहले से बना रहे बहुत सारे बाइट्स बचा सकें $b=range(min($a),max($a));:। कलाकार (bool)पूरी तरह से अनावश्यक है। if($k>=$a[$s])$a[$i]=null;को $k<$a[$s]?:$a[$i]=-1;। : संदर्भ हम ऐसा कर सकते हैं का उपयोग करना foreach($a as$i=>&$k)(+1 बाइट) और $a[$i]करने के लिए $k(-4 बाइट)। इसके अलावा जो हमें छोड़ देता है $s=$iक्योंकि हम $iसीधे अब इसे पुन: व्यवस्थित कर सकते हैं।
क्रिस्टोफ

परिणाम इस तरह दिखता है $a=$argn;$b=range(min($a),max($a));foreach($a as$i=>&$k)for(;++$i<count($a);)$k<$a[$i]?:$k=-1;echo!array_diff($b,$a);(117 बाइट्स)। लेकिन यह अभी भी $argnगलत तरीके से उपयोग करता है। $a=explode(' ',$argn);13 अतिरिक्त बाइट्स के लिए इसे ठीक करेगा।
क्रिस्टोफ

1
कोई दिक्कत नहीं है ! हमेशा एक नया PHP गोल्फर खोजने के लिए अच्छा है मुझे आशा है कि आप और अधिक देख सकते हैं :) या तो टाइटस, जोर्ग या मुझे हमेशा मदद करने के लिए हैं!
क्रिस्टोफ

1
@Christoph $_GETइनपुट सरणी के रूप में उपयोग क्यों नहीं किया जाता है? इस मामले explodeमें $bचर का उपयोग नहीं करने के लिए
एडिटोनल

1
@Christoph ठीक है इस मामले में हमें 7.1 के तहत एक संस्करण की आवश्यकता है और हम ~ इसे ऑनलाइन
जोर्ग हल्सरमैन

1

जावा 8, 264 262 बाइट्स

import java.util.*;l->{int m=Collections.max(l),n=Collections.min(l),i=0,q;for(;i<(q=l.size());i++)if(l.subList(i+1,q).size()>0&&l.get(i)>=Collections.min(l.subList(i+1,q)))l.remove(i--);for(i=0;n<=m;)if(i<l.size()&&l.get(i++)==n)n++;else return 0>1;return 1>0;}

स्पष्टीकरण:

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

import java.util.*;                 // Import for Collections

l->{                                // Method with integer-ArrayList parameter and boolean return-type
  int m=Collections.max(l),         //  Max of the list
      n=Collections.min(l),         //  Min of the list
      i=0,q;                        //  Two temp integers
  for(;i<(q=l.size());i++)          //  Loop (1) over the list
    if(l.subList(i+1,q).size()>0    //   If the sublist right of the current item is not empty
    &&l.get(i)>=Collections.min(l.subList(i+1,q))) 
                                    //   and if the current item is larger or equal to the lowest value of this sublist
      l.remove(i--);                //    Remove the current item from the main list
                                    //  End of loop (1) (implicit / single-line body)
  for(i=0;n<=m;)                    //  Loop (2) from min to max
    if(i<l.size()                   //   If the current item doesn't exceed the list's size
    &&l.get(i++)==n)                //   and the items are in order so far
      n++;                          //    Go to the next item
    else                            //   Else:
      return 0>1;//false            //    Return false
                                    //  End of loop (2) (implicit / single-line body)
  return 1>0;//true                 //  Return true
}                                   // End of method

1

आर, 88 85 बाइट्स

y=NULL;for(i in x<-scan())if(all(i<x[-(1:(F<-F+1))]))y=c(y,i);all(min(x):max(x)%in%y)

यह संभवत: आगे नीचे गोल्फ हो सकता है। के तत्वों पर लूप x, जाँच करता है कि क्या आने वाले सभी मान बड़े हैं, और उसके बाद ही वह तत्व रखता है। पाश के बाद यह से एक दृश्य बनाता min(x)करने के लिए max(x), और साथ चेक के %in%सभी मानों का कम कर दिए हैं संस्करण में शामिल हैं या x


डेनिस के उत्तर को पोर्ट करके हम 53 बाइट्स तक नीचे जा सकते हैं। function(n)all(unique(cummin(rev(n)))==max(n):min(n))
ग्यूसेप

1

जावास्क्रिप्ट (ईएस 6), 60 बाइट्स

s=>(o={},s.reverse().every((n,i)=>!i|o[n+1]|o[n]&&(o[n]=1)))

Ungolfed:

s=>(
  o={},
  s.reverse().every((n,i)=>
    !i|o[n+1]|o[n]&&(o[n]=1)
  )
)

यह एक सरल एल्गोरिथ्म है:

सरणी को रिवर्स में बदलें, और सुनिश्चित करें कि प्रत्येक संख्या (पहले को छोड़कर) पहले से देखी गई संख्या से कम या बराबर है।

स्निपेट:


1

हास्केल, 62 बाइट्स

g(a:b)=[a|all(a<)b]++g b
g a=a
f x=g x==[minimum x..maximum x]

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

परिभाषा का एक सीधा कार्यान्वयन जहां gतत्वों को हटा देता है यदि वे तत्व = अपने अधिकार के तत्वों की तुलना में हैं।


1

सी #, 69 बाइट्स

s=>s.Where((e,i)=>s.Skip(i+1).All(r=>e<r)).Count()==s.Max()-s.Min()+1

संक्षेप में:
s = इनपुट (एस) इक्विटी
एस तत्व से लेते हैं, जहां इस एक के बाद सभी आइटम (छोड़ें (I) ndex + 1 आइटम), वर्तमान मूल्य
इनकी गणना अधिक है, और देखें कि क्या शेष राशि अपेक्षित राशि के बराबर है ((अधिकतम) इमम वैल्यू माइनस (मिनट) इमम) संख्या की संख्या

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


@MDXF क्या आप उसका स्वागत करना चाहते हैं?
स्टेन स्ट्रम

@StanStrum क्या मैंने नियमों को गलत समझा? क्या मेरा अंग्रेजी बहुत गन्दा है? iam- पहली बार पोस्टिंग ...
बरोडस

नहीं नहीं! PPCG में एक नवागंतुक का स्वागत करना मेरे लिए सौभाग्य की बात है, और मैं उससे पूछ रहा था कि क्या वह आपसे हाय कहना चाहता है
स्टेन स्ट्रम

लगता है विशेषाधिकार आप दोनों को है। धन्यवाद, लोग ^ ^
बारोडस

यह एक शानदार पहला उत्तर है, आशा है कि आप पीपीसीजी के अपने भविष्य में मज़े करेंगे!
स्टेन स्ट्रम

0

जावास्क्रिप्ट (ईएस 6), 82 73 72 70 बाइट्स

एक बूलियन देता है।

a=>a.filter((x,i)=>k-=a.every(y=>~i--<0|y>x,m=x>m?x:m),m=k=0)[0]+~m==k

कैसे?

हम पुनरावृति पर प्रत्येक तत्व एक्स इनपुट सरणी के एक अधिकतम का सामना करना पड़ा मूल्य का ट्रैक रखने के मीटर और संख्या -k मूल्यों की तुलना में अधिक नहीं कर रहे हैं या उनके सही करने के लिए किसी भी सदस्य के बराबर की। परिभाषा के अनुसार, मान्य मान कड़ाई से बढ़ते क्रम में दिखाई देते हैं।

हम filter()इसके बजाय का उपयोग करते हैं map(), ताकि सभी तत्व फ़िल्टर न हो जाएं जब तक कि कश्मीर नकारात्मक नहीं हो जाता। यह हमें पहले वैध तत्व को अलग करने की अनुमति देता है, जो कि सरणी का न्यूनतम मूल्य होने की गारंटी भी है।

अंत में, हम परीक्षण करते हैं कि क्या minimum - (maximum + 1) == -number_of_valid_elements:

a.filter(...)[0] + ~m == k

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

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