अल्पविराम द्वारा अलग-अलग श्रेणियों की क्रमबद्ध सूची में अल्फ़ान्यूमेरिक वर्णों का स्ट्रिंग


12

दिए गए अक्षरांकीय वर्णों की एक स्ट्रिंग, जैसे

ABC321STPpJqZZr0

ASCII मान द्वारा छांटे गए "," -रूपित वर्ण श्रेणियों की सूची, आउटपुट को अनदेखा करना और डुप्लिकेट निकालना ( यानी केवल अपरकेस और न्यूमेरिक वर्णों को आउटपुट करना), जैसे

0-3, A-C, J, P-T, Z

नियम

  • आपके कार्यक्रम की लंबाई आपका आधार स्कोर है, हमेशा की तरह।
  • आपको अपने प्रोग्राम के भीतर उपरोक्त उदाहरण को (हार्डकोड) इनिशियलाइज़ करना होगा, लेकिन आप अपने प्रोग्राम की लंबाई से उस उदाहरण की लंबाई को छूट दे सकते हैं , उदाहरण के लिए, char* s="ABC321STPpJqZZr0";आप 16 वर्णों की छूट दे सकते हैं, अन्य 11 वर्णों की गिनती आपके प्रोग्राम की लंबाई की ओर हो सकती है।

बोनस (+50 इनाम)

  • चूँकि यह आज मेरे सहकर्मी के सामने एक वास्तविक समस्या थी, जिसे Tcl 8.0.5 में लिखने की आवश्यकता थी (एक प्राचीन संस्करण, जिसमें नवीनतम Tcl में से कई की कमी है), मैं 50 अंक देता हूँ, जिसमें से सबसे छोटा लिखता है T 8.0 8.0 .5 समाधान, यदि Tcl 8.0.5 में कम से कम 2 वैध प्रस्तुतियाँ हैं।

@FezVrasta - मैंने जानबूझकर ", "अंतरिक्ष को शामिल करने के लिए लिखा था , लेकिन हम आपके संपादन को छोड़ सकते हैं और इस टिप्पणी को उस संकेत के रूप में सेवा दे सकते हैं।
एंड्रयू चेयोंग

जानबूझकर क्यों गोल्फस्क्रिप्ट शामिल हैं? अन्य भाषाओं, जैसे बेफ़ुंज की अनुमति क्यों नहीं है?
जस्टिन

हम कह सकते हैं कि सभी निष्पक्ष खेल है। मैं बहुत आसानी से उनमें से अधिकांश की जांच करने में सक्षम नहीं होगा।
एंड्रयू चेयोंग

तो क्या वह कोड-गोल्फ टैग है?
VisioN

1
@ क्रोन - अच्छी पकड़। मेरे मामले में एबी लेकिन चूंकि पहले से ही कई प्रस्तुतियाँ हो चुकी हैं, आइए दोनों तरीकों की अनुमति दें।
एंड्रयू चेयोंग

जवाबों:


5

रूबी, 87-16 = 71

संपादित करें: कुछ वर्णों को जोड़ना था ताकि दो-वर्ण श्रेणियां सही ढंग से प्रदर्शित हों। Z में समाप्त होने वाली श्रेणियों के साथ बग को ठीक करने के ?[बजाय उपयोग करना ?Z

$><<[*?0..?[].join.gsub(/[^ABC321STPpJqZZr0]/i,$/).gsub(/\B.+\B/,?-).scan(/.-.|./)*', '

आप यहां आइडोन को चला सकते हैं ।


एक-लाइनर के लिए +1। विभिन्न तरीकों का बहुत चालाक उपयोग; यह वाकई शानदार है।
दानिएरो

1
ध्यान दें कि 2 अक्षरों gsub(/[]/i)से छोटा है tr(''.upcase)। इसके अलावा, scan(/.+/)-> split5 बचाता है, और एक दूसरे के $><<बजाय puts
हॉवर्ड

@ हावर्ड महान सुझाव, धन्यवाद!
पॉल प्रेस्टिज

2

जूलिया, 131

julia> l=sort(unique(uppercase("ABC321STPpJqZZr0")))
julia> prod([!(c+1 in l)?"$c"*(c==l[end]?"":", "):!(c-1 in l)?"$c":(c+1 in l)&&!(c+2 in l)?"-":"" for c in l])

"0-3, A-C, J, P-T, Z"

Ideone.com द्वारा समर्थित नहीं है, और संभवतः वैसे भी कुचल दिया जाएगा।


1
फिर भी धन्यवाद! Ideone.com बाधा केवल इतना था कि मैं इसका परीक्षण कर सकता था लेकिन मुझे लगता है कि मैं गोल्फरों की अखंडता पर भरोसा कर सकता हूं और उस नियम को हटा सकता हूं। वैसे भी +1।
एंड्रयू चींग

2

सी #, 221 बाइट्स

class P{
    static void Main(){
        var s="ABC321STPpJqZZr0";
        var l=new int[257];
        foreach(int c in s.ToUpper())
            l[c]=1;
        var r="";
        for(int i=0;i<255;){
            if(l[i++]-l[i]<0)
                r+=", "+(char)i;
            else if(l[i+1]-l[i]<0)
                r+="-"+(char)i;
        }
        System.Console.Write(r.Substring(2));
    }
}

2

सी, 193

char*s="ABC321STPpJqZZr0";
int c[99];memset(c,0,396);while(*s){++c[toupper(*s++)];}for(int i=0,f=1,r=0;
i<=99;++i){if(!r&&c[i])r=i;if(r&&!c[i]){if(!f)printf(", ");putchar(r);
if(i-r>1)printf("-%c",i-1);r=f=0;}}

क्या आप एक छोटी सी व्याख्या जोड़ सकते हैं?
जस्टिन

स्ट्रिंग पर ओवररेट करें, प्रत्येक अल्फ़ान्यूमेरिक वर्ण के उदाहरणों की एक गिनती जमा करते हुए। फिर, वर्णमाला क्रम में सभी अल्फ़ान्यूमेरिक वर्णों पर पुनरावृति, प्रत्येक कॉम्पैक्ट रेंज की शुरुआत को लिखना और, यदि उपयुक्त हो, तो रेंज के अंत के बाद एक डैश। यदि यह पहली सीमा नहीं है जो लिखा गया है, तो अल्पविराम-अंतरिक्ष विभाजक जोड़ें। कोड को एक मुख्य () फ़ंक्शन में उपयुक्त हेडर (stdio, string, ctypes) के साथ शामिल किया जाना चाहिए, इसलिए मैंने थोड़े को वहाँ धोखा दिया।
वॉरेन

2

GolfScript 57 54 52

 'ABC321STPpJqZZr0'
 {.95>32*-}%.|:x..{(}%&-x..{)}%&-+$2/{.|'-'*}%', '*

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

कोड पहले सब कुछ कैपिटल करता है:

{.95>32*-}%

फिर अद्वितीय वर्ण प्राप्त करता है और इसे एक चर में बचाता है:

.|:x

फिर, हम उन पात्रों को प्राप्त करते हैं जिनके प्रत्यक्ष पूर्ववर्ती स्ट्रिंग में नहीं हैं (ताकि वे एक सीमा का आरंभिक भाग हों):

..{)}%&-x

हम इसी तरह से श्रेणियों के सिरों को प्राप्त करते हैं x..{)}%&-

अब वास्तव में सूचियों को क्रमबद्ध करके, 2 के समूहों में छाँटकर और विभाजित करके सीमाएँ बनाते हैं:

+$2/

बाकी सिर्फ फॉर्मेटिंग है, *स्ट्रिंग जॉइन के रूप में।


1
आउटपुट में, पर्वतमाला को ',' और न सिर्फ 'द्वारा अलग किया जाना चाहिए,
पॉल प्रेस्टिज

1
इसके अलावा .95>{32-}{}if-> .95>32*-5 वर्ण बचाता है।
हावर्ड

@ हॉवर्ड महान! मुझे पता था कि वह हिस्सा उप-अपनाने वाला था।
बेन रीच

1
@Chron ने अंतरिक्ष मुद्दा तय किया!
बेन रीच

2

क्यू, 94

{","sv(,/){{"-"sv(?) -1 1#\:x}'[cut[;a]0,1_(&)1<(-':)"i"$'a:asc upper[x]inter y]}[x]'[.Q`n`A]}

1

पायथन 2.x, 304 - 16 = 288

यह निश्चित रूप से आगे गोल्फ हो सकता है, सभी टिप्पणियों का स्वागत है!

e=[""]*11;f=[""]*27
for c in"ABC321STPpJqZZr0".lower():e["0123456789".find(c)]=f["abcdefghijklmnopqrstuvwxyz".find(c)]=c
e[-1]=f[-1]=""
def h(j):
 g=[];k=l=i=0
 for e in j:
  if e:
   if not l:k=i;l=1
  elif l:l=g.append((k,i-1))
  i+=1
 print", ".join([j[m],j[m]+"-"+j[n]][n-m>1]for m,n in g)
h(e);h(f)

1

रिबल (218 - 16 = 202)

m: s: sort uppercase unique"ABC321STPpJqZZr0"i: :to-integer f: does[either 1 = length? x: copy/part m s[x][rejoin[x/1"-"last x]]]while[not tail? s: next s][if(1 + i pick back s 1)!=(i s/1)[prin join f", "m: s]]print f

गैर-छोटा संस्करण:

m: s: sort uppercase unique "ABC321STPpJqZZr0"
i: :to-integer

f: does [
    either 1 = length? x: copy/part m s [x] [rejoin [x/1 "-" last x]]
]

while [not tail? s: next s][
    if (1 + i pick back s 1) != (i s/1) [
        prin join f ", "
        m: s
    ]
]

print f

1

क्ष [११६ वर्ण]

{.a:();{m:6h$x;.a:.a,$[m[1]=1+m[0];45;m[0],44,m 1];1_x}/[x:asc distinct upper x];p where differ 6h$p:-3_10h$x[0],.a}

प्रयोग

{.a:();{m:6h$x;.a:.a,$[m[1]=1+m[0];45;m[0],44,m 1];1_x}/[x:asc distinct upper x];p where differ 6h$p:-3_10h$x[0],.a}"ABC321STPpJqZZr0"
उत्पादन
"0-3,A-C,J,P-T,Z"

चार्ट को सहेजने की गुंजाइश है, मैं कुछ अन्य विधि की कोशिश करूँगा और इसे पोस्ट करूँगा।


0

Tcl 8.0.5, 344 (360 बाइट्स)

set a ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
set s string
set x [join [lsort [split [$s toupper ABC321STPpJqZZr0] ""]] ""]
regsub -all (.)\\1+ $x \\1 x
set i 36
while {[incr i -1]} {set j -1
while {$i+[incr j]<36} {set y [$s range $a $j [expr $i+$j]]
regsub $y $x [$s index $y 0]-[$s index $y end],\  x}}
while {[regsub -all {(\w)(\w)} $x {\1, \2} x]} {}
puts $x

Tcl 8.0.5, 340 (356 बाइट्स)

कमान के साथ छेड़छाड़ renameने कुछ मज़ेदार चालें निकालीं ! मैंने उन्हें दूसरे धागे में प्रलेखित किया है ।

rename rename &
& set =
& regsub R
& string S
& while W
= a ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
= x [lsort [split [S toupper ABC321STPpJqZZr0] ""]]
R -all {(.) \1+| } $x \\1 x
= i 36
W {[incr i -1]} {= j -1
W {$i+[incr j]<36} {= y [S range $a $j [expr $i+$j]]
R $y $x [S index $y 0]-[S index $y end],\  x}}
W {[R -all {(\w)(\w)} $x {\1, \2} x]} {}
puts $x

Tcl 8.0.5, 332 (348 बाइट्स) [अस्थिर - $ PATH पर निर्भर करता है]

info script ""
set tcl_interactive 1
set a ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
set x [lso [sp [st toupper ABC321STPpJqZZr0] ""]]
regs -all {(.) \1+| } $x \\1 x
set i 36
wh {[inc i -1]} {set j -1
wh {$i+[inc j]<36} {set y [st range $a $j [exp $i+$j]]
regs $y $x [st index $y 0]-[st index $y end],\  x}}
wh {[regs {(\w)(\w)} $x {\1, \2} x]} {}
pu $x

करने के लिए क्रेडिट @JohannesKuhn के लिए इंटरैक्टिव चाल


1
कभी-कभी आप बाइट्स whileको timeकंस्ट्रक्शंस द्वारा रिप्लेस कर सकते हैं । codegolf.stackexchange.com/a/126236/29325
sergiol
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.