কমা-বিভাজিত রেঞ্জের বাছাই করা তালিকায় বর্ণানুক্রমিক অক্ষরের স্ট্রিং


12

অরক্ষিত অক্ষরযুক্ত অক্ষরের একটি স্ট্রিং দেওয়া হয়েছে, যেমন

ABC321STPpJqZZr0

আউটপুট একটি "," অক্ষর রেঞ্জের তালিকাভুক্ত তালিকা, ASCII মান অনুসারে বাছাই করা, কেস উপেক্ষা করে ডুপ্লিকেটগুলি সরানো ( যেমন কেবলমাত্র বড় হাতের এবং সংখ্যাযুক্ত অক্ষরের আউটপুট), উদাহরণস্বরূপ

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

বিধি

  • আপনার প্রোগ্রামটির দৈর্ঘ্য যথারীতি আপনার বেস স্কোর।
  • তুমি তোমার প্রোগ্রামের মধ্যে আরম্ভ হবে (হার্ডকোড) উপরোক্ত উদাহরণে, কিন্তু আপনি আপনার প্রোগ্রাম দৈর্ঘ্য, থেকে উদাহরণস্বরূপ দৈর্ঘ্য ছাড় পারে যেমন জন্য char* s="ABC321STPpJqZZr0";আপনি 16 অক্ষর ছাড় হতে পারে, অন্যান্য 11 অক্ষর আপনার প্রোগ্রাম দৈর্ঘ্য দিকে গণনা।

বোনাস (+50 অনুগ্রহ)

  • যেহেতু আজ আমার সহকর্মীর দ্বারা এটি বাস্তব সমস্যার মুখোমুখি হয়েছিল, এটি টিসিএল ৮.০.৫ (একটি প্রাচীন সংস্করণ, যেখানে সর্বশেষতম টিসিএল বিল্ট-ইনগুলির অভাব রয়েছে) রচনার প্রয়োজন , আমি সংক্ষিপ্ততম টিসিএল ৮.০ লেখার জন্য 50 পয়েন্ট দেব .5 সমাধান, টিসিএল 8.0.5 এ যদি কমপক্ষে 2 টি বৈধ জমা রয়েছে।

@ ফেজব্রাস্টা - আমি ইচ্ছাকৃতভাবে ", "স্থানটি অন্তর্ভুক্ত করার জন্য লিখেছিলাম , তবে আমরা আপনার সম্পাদনাটি ছেড়ে দিতে পারি এবং এই মন্তব্যটিকে সেই ইঙ্গিত হিসাবে দেখিয়ে দিতে পারি ।
অ্যান্ড্রু চিউং

কেন ইচ্ছাকৃতভাবে গল্ফস্ক্রিপ্ট অন্তর্ভুক্ত? বেফুঞ্জের মতো অন্যান্য ভাষাগুলিকে কেন অনুমতি দেবেন না?
জাস্টিন

আমরা বলতে পারি সবই ন্যায্য খেলা is আমি কেবল তাদের খুব সহজেই খুব সহজে পরীক্ষা করতে সক্ষম হবো না।
অ্যান্ড্রু চেং

তাহলে কি সেই কোড-গল্ফ ট্যাগ?
ভিজিওন

1
@ ক্রোন - ভাল ক্যাচ আমার ক্ষেত্রে এবি কিন্তু যেহেতু ইতিমধ্যে অনেকগুলি জমা দেওয়া হয়েছে, আসুন উভয় উপায়ে অনুমতি দিন।
অ্যান্ড্রু চিউং

উত্তর:


5

রুবি, 87-16 = 71

সম্পাদনা: কিছু অক্ষর যুক্ত করতে হয়েছিল যাতে দ্বি-চরিত্রের রেঞ্জগুলি সঠিকভাবে প্রদর্শিত হয়। এছাড়াও জেডে শেষ হওয়া ব্যাপ্তিগুলির সাথে বাগ ঠিক করার ?[পরিবর্তে ব্যবহার করা?Z

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

আপনি এখানে আইডিয়ন রান দেখতে পারেন ।


ওয়ান-লাইনারের জন্য +1। বিভিন্ন পদ্ধতির খুব চতুর ব্যবহার; এটি সত্যিই উজ্জ্বল।
ডানিরো

1
নোট যা 2 টি অক্ষরের gsub(/[]/i)চেয়ে সংক্ষিপ্ত tr(''.upcase)। তদতিরিক্ত, scan(/.+/)-> split5 এবং $><<তার পরিবর্তে putsঅন্য একটি সংরক্ষণ করে ves
হাওয়ার্ড

@ দুর্দান্ত পরামর্শ, ধন্যবাদ!
পল প্রেস্টিজ

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
যাই হোক ধন্যবাদ! আইডিয়ন ডট কম সীমাবদ্ধতা কেবল তাই আমি এটি পরীক্ষা করতে পেরেছিলাম তবে আমি মনে করি আমি গল্ফারদের অখণ্ডতার উপর বিশ্বাস রাখতে পারি এবং সেই নিয়মটি সরাতে পারি। +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;}}

আপনি একটি ছোট ব্যাখ্যা যোগ করতে পারেন?
জাস্টিন

স্ট্রিংয়ের উপরে ইটারেট করুন, প্রতিটি বর্ণানুক্রমিক চরিত্রের উদাহরণগুলির একটি গণনা জমে। তারপরে, প্রতিটি কমপ্যাক্ট রেঞ্জের প্রারম্ভ লিখতে এবং বর্ণনানুক্রমিক ক্রমে সমস্ত বর্ণানুক্রমিক অক্ষরের উপর পুনরাবৃত্তি করুন এবং যদি উপযুক্ত হয় তবে ব্যাপ্তির শেষের পরে একটি ড্যাশ। এটি যদি লেখা হয় এমন প্রথম পরিসরটি না হয়, কমা-স্পেস বিভাজক যুক্ত করুন। কোড অবশ্যই একটি মূল () ফাংশনে এম্বেড করা উচিত যথাযথ শিরোনাম (স্টিডিও, স্ট্রিং, সিটিপস) অন্তর্ভুক্ত, সুতরাং আমি সেখানে প্রতারিত হই।
উষ্ণতা

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 টি অক্ষর সংরক্ষণ করে।
হাওয়ার্ড

@ হাওয়ার্ড গ্রেট! আমি জানি যে অংশটি suboptimal ছিল।
বেন রেইচ

1
@ ক্রোন স্থির সমস্যা স্থির!
বেন রেইচ

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

প্রশ্ন [১১6 অক্ষর]

{.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

টিসিএল 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কোডগল্ফ.স্ট্যাক্কেঞ্জাওন.এইএ
সার্জিওল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.