लगातार पूर्णांक को संक्षिप्त करें


22

संबंधित: मुझे बताएं कि मुझे कितनी गणित की समस्याएं हैं!

चुनौती

एक पूर्णतया सकारात्मक सख्ती से बढ़ते हुए पूर्णांक सूची L और एक पूर्णांक 3 ≤ N positive की लंबाई को देखते हुए, L के लगातार पूर्णांक के मध्य पूर्णांक को लंबाई के साथ चलाता है। N एक एकल डैश के साथ -

नियम

  • क्षैतिज व्हाट्सएप अप्रासंगिक है।
  • आप वैकल्पिक रूप से अपनी भाषा की डिफ़ॉल्ट सूची प्रारूप के परिचयकर्ता, विभाजक और टर्मिनेटर वर्णों को संरक्षित कर सकते हैं। देखें प्रारूप उदाहरण नीचे,।

डेटा उदाहरण

इन सभी उदाहरणों का उपयोग करते हैं L = 3 5 6 7 8 10 11 12 14 16 17 18 19 20 21 22 24

N = 33 5 - 8 10 - 12 14 16 - 22 24

N = 43 5 - 8 10 11 12 14 16 - 22 24

N = 53 5 6 7 8 10 11 12 14 16 - 22 24

N = 83 5 6 7 8 10 11 12 14 16 17 18 19 20 21 22 24

प्रारूप उदाहरण

इनपुट के लिए
L = [3,5,6,7,8,10,11,12,14,16,17,18,19,20,21,22,24]और N = 3
सभी नीचे की पंक्तियाँ, वास्तविक प्रतिक्रियाओं और स्ट्रिंग के रूप में मान्य प्रतिक्रियाओं का उदाहरण हैं:

[3,5,"-",8,10,"-",12,14,16,"-",22,24]
[3,5,-,8,10,-,12,14,16,-,22,24]
[3,5-8,10-12,14,16-22,24]
3,5-8,10-12,14,16-22,24

वही अन्य सूची प्रारूपों के साथ लागू होता है, जैसे {1 2 3}और (1; 2; 3)आदि संदेह में? पूछना!


क्या इसका उपयोग करना आवश्यक है -या क्या हमें एक अलग प्रतीक का उपयोग करने की अनुमति है?
मील

@ मील्स एक अलग प्रतीक बाइट्स को बचाएगा?
एडम जूल

मैं अनंत का उपयोग करने के बारे में सोच रहा हूं _ताकि मैं जम्मू में संख्यात्मक सरणियों पर काम कर
मील

@ मीलों आह, हाँ, आप आगे क्यों नहीं जाते हैं और ऐसा करते हैं, लेकिन इसके बारे में कुछ न करें, और अगर आप परेशान हो सकते हैं, तो (मैं अब और अधिक) बॉक्सिंग समाधान लिखता हूं '-'। तुम भी डैश डालने से पहले सब कुछ स्ट्रिंग करने में सक्षम हो सकता है, नहीं?
एडम जूल

निम्नलिखित मान्य है? [3,5,-8,10,-12,14,16,-22,24](यह ऐसा प्रारूप है जो प्रकारों के संदर्भ में सबसे अधिक समझ में आता है)
लीकी नून

जवाबों:


7

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

-17 बाइट्स लीक थैंक्यू नन

x,n=input()
o=[]
i=1
while x:
 t=x[0]
 while[t+i]==x[i:i+1]:i+=1
 o+=[[t,'-',t+i-1],x[:i]][i<n];x=x[i:];i=1
print o

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



चाहेंगे while t+i==x[i]:काम करते हैं? या क्या मैं कुछ न कुछ भूल रहा हूं?
ज़चारि

@ Zacharý टूट जाता अगर iइसके आकार से अधिक मिलताx
रॉड

6

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

-2 बाइट्स के लिए धन्यवाद एग्री द आउटग्राफर (यदि मुख्य लिंक में इफ स्टेटमेंट लाकर)

Ḣ;Ṫj”-
IỊ¬1;œṗ⁸¹ÇL<¥?€F

[3,5,"-",8,10,"-",12,14,16,"-",22,24]प्रारूप में एक सूची लौटाने वाला एक डियाडिक लिंक ।

इसे ऑनलाइन आज़माएं! (पाद लेख रिक्त स्थान से अलग हो जाता है, डेटा उदाहरण प्रारूप को प्रिंट करने के लिए)।

कैसे?

Ḣ;Ṫj”- - Link 1, format a run: list R
Ḣ      -     head
  Ṫ    -     tail
 ;     -     concatenate
    ”- -     literal '-'
   j   -     join

IỊ¬1;œṗ⁸¹ÇL<¥?€F - Main link: list L, number N
I                - incremental differences
 Ị               - insignificant? (<=1)
  ¬              - not
   1;            - prepend a 1
       ⁸         - chain's left argument, L
     œṗ          - partition (L) at truthy indexes
              €  - for €ach row, R, in L:
             ?   -   if:
            ¥    -   condition: last two links as a dyad:
          L      -     length of R
           <     -     is less than N?
        ¹        -   then: identity - do nothing, yields R
         Ç       -   else: call the last link (1) as a monad with argument  R
               F - flatten into a single list

एक मोनडिक लिंक?
लीक नन

हेह, और उस पर एक "विशेष" एक।
जोनाथन एलन

अपने सामान को थोड़ा पीछे ले जाने से -2 के लिए मदद मिलती है।
आउटगोल्फ जूल

अच्छा सामान, धन्यवाद @EriktheOutgolfer!
जोनाथन एलन

4

पायथ, 23 बाइट्स

sm?<ldvzd[hd\-ed).ga=hZ

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

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

sm?<ldvzd[hd\-ed).ga=hZkQ

                        Q    autoinitialized to eval(input())
                 .g          group by k ↦
                    =hZ          Z += 1, returning new value (Z is autoinitialized to 0)
                   a   k         absolute difference with k
 m                           map d ↦
  ?                              if
    ld                               length of d
   <  vz                             less than eval(z) (z is autoinitialized to input())
        d                        then d
         [hd\-ed)                else [d[0], '-', d[-1]]
s                            concatenate

3

जाप , 24 बाइट्स

óÈÄ¥Yîl ¨V?Zv +'-+Zo :Z

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

व्याख्या

óÈ   Ä ¥ YÃ ®   l ¨ V?Zv +'-+Zo :Z
óXY{X+1==Y} mZ{Zl >=V?Zv +'-+Zo :Z}   Ungolfed
                                      Implicit: U = input array, V = input integer
óXY{      }                           Group U into runs such that for each pair X, Y:
    X+1==Y                              Y is exactly 1 more than X.
            mZ{                   }   Map each run Z to:
               Zl >=V?                  If Z has at least V items:
                      Zv     Zo           Z.unshift() and Z.pop() (the first and last items)
                         +'-+             joined with a hyphen.
                                :       Otherwise:
                                 Z        just Z.
                                      Implicit: output result of last expression



1

PHP 7, 137 136 134 117 110 108 बाइट्स

for($a=$argv,$i=2;$n=$a[$i++];$k<$a[1]||array_splice($a,$i,$k-2,"-"))for($k=print"$n ";$a[$i+$k]-++$k==$n;);

लेता है Lपहले तर्क से है, उसके बाद तत्वों को सूचीबद्ध करता है। इसे ऑनलाइन चलाएं -nrया इसके लिए प्रयास करें

बदलने के $L=($a=$argv) साथ $a=$argv,$L=पीएचपी <7 के लिए (+1 बाइट)।

टूट - फूट

for($a=$argv,$i=2;              # import input
    $n=$a[$i++];                # loop $n through list elements
    $k<$a[1]||                      # 3. if streak length ($k) is >=L ($a[1])
        array_splice($a,$i,$k-2,"-")    # then replace with "-"
)
for($k=print"$n ";                  # 1. print element and space
    $a[$i+$k]-++$k==$n;);           # 2. find consecutive numbers

1

रेटिना , 101 बाइट्स

\d+
$*
\b(1+) (?=1\1\b)
$1X
T`X` `\b((X)|1)+\b(?=.*¶(?<-2>1)+(?(2)(?!))11)
T`X`-
-1+(?=-)|¶1+

1+
$.&

इसे ऑनलाइन आज़माएं! Lपहली पंक्ति पर स्थान-पृथक सूची और Nदूसरी पंक्ति पर पूर्णांक बनाता है । स्पष्टीकरण: पहला चरण इनपुट को यूनरी में रूपांतरित करता है। दूसरा चरण लगातार पूर्णांक के बीच की जगह को बदलता है a X। तीसरा चरण लगातार पूर्णांकों के रन के लिए दिखता है जिनकी लंबाई से कम है Nऔर उनके Xएस को वापस रिक्त स्थान में बदल देता है। चौथा चरण Xएस को बदलता है -(यह -पहली जगह में एस का उपयोग करने की तुलना में 3 बाइट्स छोटा था ।) पांचवां चरण सभी पूर्णांकों को हटा देता है जो अभी भी एक रन के बीच में छोड़ दिया गया है, साथ ही साथ Nअंतिम चरण दशमलव में परिवर्तित होता है।



1

जे , 40 बाइट्स

;@((](,_,{:)/)^:(<:#)&.>]<;.1~1,1<}.-}:)

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

के _बजाय का उपयोग करता है -

व्याख्या

;@((](,_,{:)/)^:(<:#)&.>]<;.1~1,1<}.-}:)  Input: integer N (LHS), array L (RHS)
                                  }.      Behead L
                                     }:   Curtail L
                                    -     Subtract elementwise to get the increments
                                1<        Test if greater than 1
                              1,          Prepend a 1
                        ]                 Get L
                         <;.1~            Partition L into boxes using the previous array
                     & >                  Operate on each box (partition) with N
              ^:                            If
                   #                          The length of the partition
                 <:                           Is greater than or equal to N
   (](     )/)                                Reduce (right-to-left) it using
         {:                                     Tail
       _,                                       Prepend _
      ,                                         Append to LHS
                     &.>                    Box the result
;@                                        Raze - join the contents in each box

0

जेली, 39 37 36 बाइट्स

IỊṣ0;€1ṁ@
ÇL€<Ɠ¬TịÇḊ€Ṗ€F;€”-FyµŒgQ€F

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

तर्क के माध्यम से सरणी लेता है, और STDIN के माध्यम से पूर्णांक। TIO लिंक पाद लेख का उपयोग करता हैÇG इसलिए आउटपुट स्पेस-अलग है।

कैसे? (सरणी: a, पूर्णांक: n)

(`f`)
IỊṣ0;€1ṁ@
I          Deltas of `a`
 Ị         Insignificant (x -> abs(x)<=1) applied to each element
  ṣ0       Split at occurrences of `0`.
    ;€1    Append `1` to each element
       ṁ@  `a` shaped like that
ÇL€<Ɠ¬TịÇḊ€Ṗ€F;€”-FyµŒgQ€F
Ç                            `f`
 L€                          Length of each element
   <Ɠ                        x -> x < n applied to each element
     ¬                       Logical not of each element (because Jelly doesn't have <= nor >= atoms)
      T                      Nonzero indexes
       ịÇ                    Index `f` at those indexes
         Ḋ€Ṗ€                x -> x[1:-1] applied to each element
             F               Flatten
              ;€”-           Append a hyphen to each element
                  F          Flatten
                   y         Translate (replaces all elements to be deleted with a hyphen)
                    µ        Start a new monadic link
                     Œg      Group runs of equal elements
                       Q€    Uniquify each element (make runs of hyphens one hypen)
                         F   Flatten, yet again.

मुझे लग रहा है कि मैं गिर गया ... इस पर फ्लैट


0

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

(e,c)=>{for(i=0,R='';i<e.length;R+=(R&&',')+(u-m>=c?m+'-'+--u:e.slice(z,i))){m=u=e[i],z=i;while(e[++i]==++u);}return R}

एक अनाम फ़ंक्शन। आदेश में इनपुट लेता है Array L, Integer Nऔर परिणाम को अल्पविराम से अलग स्ट्रिंग के रूप में लौटाता है।


एक बाइट को बचाने के लिए करी का उपयोग करें e=>c=>
TheLethalCoder

0

Dyalog APL v16.0, 82 80 78 76 75 65 62 बाइट्स

{S/⍨1,⍨2≠/S←'-'@(⍸⊃∨/(-0,⍳⍺-3)⌽¨⊂(⍴⍵)↑∧/¨(⍺-1),/¯1⌽1=-2-/⍵)⊢⍵}

वाह, यह है ... बुरा। स्टेंसिल के साथ शायद बहुत कम समाधान है।

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

गोल्फ सुझाव का स्वागत करते हैं!


हाँ, इसका क्या?
जकार्इ

क्षमा करें, गलत जगह।
15

^ क्या मतलब है तुम्हारा?
जचार्इ

मेरी टिप्पणी एक अलग चुनौती पर आधारित थी।
Adám

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