সংখ্যার একটি গ্রুপ থেকে প্রতিটি সংখ্যা ফেরত দিন


11

চ্যালেঞ্জ

প্রোগ্রামটি অবশ্যই সংখ্যার একটি গোষ্ঠীতে (কমা এবং হাইফেন দ্বারা পৃথক ক্রম) অন্তর্ভুক্ত সমস্ত সংখ্যা ফেরত দিতে হবে।

বিধি

  • s ক্রম স্ট্রিং হয়;
  • সমস্ত নম্বর অন্তর্ভুক্ত sহয় ইতিবাচক ;
  • সংখ্যা সর্বদা বৃদ্ধি পাবে ;
  • সংখ্যা কখনও পুনরাবৃত্তি করবে না
  • আপনি যখন উত্তর, এর জন্য আউটপুট প্রদর্শন s="1,3-5,9,16,18-23"

উদাহরণ

input(s)    outputs
-----------------
1           1
1,2         1,2
1-4         1,2,3,4
1-4,6       1,2,3,4,6
1-4,8-11    1,2,3,4,8,9,10,11

শুভকামনা। =)


1
আমাদের কি এমন ইনপুট ক্রম থাকবে যা ক্রমাগত বাড়ছে না, উদাহরণস্বরূপ: 4-9,1-2বা 1-3,9-6?
ম্যাট

1
নাকি ওভারল্যাপিং? আউটপুটটি বাছাই করতে হবে এবং ডুপ্লিকেট থাকতে হবে না?
পিটার টেলর

@ গ্যারেথ হ্যাঁ, এটি একটি কোড-গল্ফ, তারপরে সংক্ষিপ্ত উত্তরের জন্য দয়া করে ভোট দিন। ম্যাট এবং পিটার, আমি প্রশ্নটি সম্পাদনা করেছি, দয়া করে এটি পরীক্ষা করে দেখুন। ধন্যবাদ!
বেরনামারিয়ানো

এটি কি একটি সম্পূর্ণ প্রোগ্রাম হতে হবে, এবং আউটপুটের বিন্যাসে কোনও বাধা আছে?
ব্র্যাড গিলবার্ট 19

উত্তর:


6

গল্ফস্ক্রিপ্ট (24 টি অক্ষর)

','/{~.,!{~)),>~}*}%','*

যেমন

$ golfscript.rb expand.gs <<<"1,3-5,9,16,18-23"
1,3,4,5,9,16,18,19,20,21,22,23

আমার কাছে আসলে চারটি 24-চর সমাধান রয়েছে তবে আমি এটি বেছে নিয়েছি কারণ এতে কোনও বর্ণানুক্রমিক অক্ষর নেই।

কিভাবে এটা কাজ করে

# On the stack: a string such as "1,3-5,9,16,18-23"
','/
# Split on commas to get ["1" "3-5" "9" "16" "18-23"]
{
    # This is executed for each of those strings in a map
    # So stack holds e.g. "1" or "3-5"

    # Evaluate the string.
    # If it's a single number, this puts the number on the stack.
    # Otherwise it's parsed as a positive number followed by a negative number.
    ~
    # Stack holds e.g. 1 or 3 -5
    # Duplicate the last element on the stack and make a list of that length.
    # If it's negative or zero, the list will be empty
    .,
    # Negate. An empty list => 1; a non-empty list => 0
    !
    # If the string was a single number "n", the stack now holds n 0
    # If the string was a range "m-n", the stack now holds m -n 1
    # The following block will be executed 0 times for "n" and once for "m-n"
    {
        # Here we rely on twos-complement numbers satisfying ~n = -n -1
        # Stack: m -n
        ~))
        # Stack: m -(-n)-1+2  =  m n+1
        ,
        # Stack: m [0 1 2 ... n]
        >
        # Stack: [m m+1 ... n]
        ~
        # Stack: m m+1 ... n
    }*
}%
# On the stack: e.g. [1 3 4 5 9 16 18 19 20 21 22 23]
','*
# Joined by , to give the desired output

একটি অক্ষর ব্যবহার না করে আপনি কীভাবে 3-5 টি 3,4,5 এ প্রসারিত করতে পারেন -?
বেরনামারিয়ানো

বার্নামারিয়ানো, দুঃখিত, আমি আপনার প্রশ্নটি কোনওভাবে মিস করেছি। উত্তরটি বিস্তারিত ব্যাখ্যা দিয়ে প্রসারিত করব।
পিটার টেলর

7

পার্ল 25 26 25

$_ ক্রম স্ট্রিং হয়

s/-/../g;$_=join",",eval

নমুনা অধিবেশন:

[~/] $ perl -M5.010 -pe 's/-/../g;$_=join",",eval' <<< "1,3-5,9,16,18-23"
1,3,4,5,9,16,18,19,20,21,22,23

বিকল্পটির জন্য অক্ষর গণনায় 1 টি অক্ষর যুক্ত হয়েছে (ধন্যবাদ গ্যারেথ, ..কিন্ডা)।-n-p


আমি সম্ভবত চরিত্র গণনাটি ভুল করেছি (কমান্ড লাইন অপশন সহ)। আমার গণনা সংশোধন করতে নির্দ্বিধায় অনুগ্রহ করে দয়া করে
আর্দনেউ করুন

মেটাতে এই প্রশ্নের উত্তর দিয়ে গিয়ে আপনাকে কেবল nবিকল্পটির জন্য 1 টি অক্ষর যুক্ত করতে হবে ।
গ্যারেথ

সরান -M5.010অ্যান্ড এক্সচেঞ্জ -eজন্য-E
ব্র্যাড গিলবার্ট b2gills

4

গল্ফস্ক্রিপ্ট, 46 45

আমার প্রথম গল্ফ স্ক্রিপ্ট প্রোগ্রামটি শেষ হতে কয়েক ঘন্টা সময় লেগেছে।

{','/{'-'/{~}%.,1-{))+{,}/\-~}{~}if}%","*}:r; 

# call:
"1,3-5,9,16,18-23"r

# return:
1,3,4,5,9,16,18,19,20,21,22,23

আপনি এটি চেষ্টা করতে পারেন http://golfscript.apphb.com/

এই নৃশংসতার ব্যাখ্যা দেওয়ার জন্য আমার সেরা থ্রো:

{...}:r;     # makes a function block ... and names it r

','/         # slices the top element of stack from each ','
             # so we get ["1" "3-5" "9" "16" "18-23"]

{...}%       # makes a function block ... and calls it for 
             # each element in the list

'-'/{~}%     # slices the list by '-' and evals each element 
             # from string to int. ["1"] becomes [1], 
             # ["3-5"] becomes [3 5]

.,1-         # adds the length of the list -1 on top of the stack
             # so for [1] the stack becomes [1] 0, for [3 5]
             # it becomes [3 5] 1

# next we add two function blocks, they, like the 0/1 just before
# are used by an if clause a tiny bit later. First block is for 
# lists that have a 1 on top of them, the latter for ones with 0.

# First block, we have something like [3 5]

))+          # pops the top element of the array, increments 
             # it and puts back. [3 6]

## It seems {...}%~ is same as {...}/
## this is why these two are not in the code any more

{,}%         # , makes a list from 0 to n-1, where n is the parameter
             # so we get [[0 1 2] [0 1 2 3 4 5]]

~            # Dumps the outer array, [0 1 2] [0 1 2 3 4 5]

\            # swaps the two arrays

-            # set complement [3 4 5]

~            # dumps the array, so the elements are left in the stack

# Second block, we have something like [16]

~            # just dumps the array, 16

# Blocks end

if           # takes the top three elements of the stack, evaluates the 
             # first (0 or 1), runs second if true (anything but 
             # [], "", 0 or {} ), otherwise the third.

","*         # joins an array with ","

সম্পাদনা 1: সর্বশেষ {}% ~ কে {} / এ পরিবর্তন করেছে, আমার বর্ণনাটিও ভুল ছিল।


2
+1, কারণ যে কেউ গল্ফস্ক্রিপ্টে কোনও প্রোগ্রাম করছেন তারা এটি অর্জন করেছেন।
গ্যারেথ

@ গ্যারেথ ধন্যবাদ আমি প্রথমে ভেবেছিলাম আমি কেবল এটি পেরেলভাবে করব: পরিবর্তন - থেকে .. এবং এটি মূল্যায়ন কর। তারপরে আমি কোনও অ্যারে তৈরির কোনও বুদ্ধিমান উপায় খুঁজে পাইনি তাই আমি এটি করেছি। আমি নিশ্চিত যে কেউ গল্ফস্ক্রিপ্ট সহ 20 ডলার চর সমাধান নিয়ে আসবে।
shiona

আমার এই মুহুর্তে 24 জন রয়েছে, তাই আমি 20 জনকে একটি চ্যালেঞ্জ হিসাবে গ্রহণ করব;) যদিও আপনি কয়েকটি সহজেই সংরক্ষণ করতে পারেন। সমস্যা একটি প্রোগ্রাম, না একটি ফাংশন জন্য জিজ্ঞেস করল, যাতে আপনি প্রাথমিক হারাতে পারেন {এবং চূড়ান্ত }:r;এবং আপনি প্রতিস্থাপন পর এক সংরক্ষণ করতে পারবেন 1-সঙ্গে (। (ঘটনাচক্রে, আইআইআরসি এটিই একটি কৌশল যা আমি আমার প্রথম গল্ফস্ক্রিপ্ট প্রোগ্রামেও মিস করেছি)
পিটার টেলর

দ্রষ্টব্য মধ্যে একটি সূক্ষ্ম পার্থক্য আছে {...}%~এবং {...}/। যদি আপনি স্ট্যাকের সাহায্যে আরও কিছু অ্যাক্সেস করে থাকেন integer $তবে প্রথমটি সহজতর, কারণ আপনি স্ট্যাকের মধ্যে যা যা রেখেছেন তার জন্য প্রতিবার পূর্ণসংখ্যার সমন্বয় করতে হবে না।
পিটার টেলর


3

কে, 47

","/:,/${x+!1+y-x}.'2#'a,'a:"I"$'"-"\:'","\:0:0

পরীক্ষা ক্ষেত্রে

k)","/:,/${x+!1+y-x}.'2#'a,'a:"I"$'"-"\:'","\:0:0
1,3-5,9,16,18-23
"1,3,4,5,9,16,18,19,20,21,22,23"

","/:$,/{{x+!1+y-x}. 2#"J"$"-"\:x}'","\:0:0জন্য 43 বাইট
streetster

3

জেলি , 9 বাইট

⁾-ryṣ”,VF

এটি অনলাইন চেষ্টা করুন!

   y         Replace
⁾-r          hyphens with the letter r,
    ṣ”,      split on commas,
       V     evaluate every element,
        F    and flatten.

রেঞ্জ ডায়াড এর rদুপাশে দুটি আর্গুমেন্ট নেয় এবং তাদের মধ্যে একটি সমেত পরিসীমা তৈরি করে produces


2

জে, 53 43 41 39 38 টি অক্ষর

;(}.[:i.1+])/&.>".'- ,;'charsub 1!:1[1

কীবোর্ড থেকে ইনপুট নেয়:

   ;(}.[:i.1+])/&.>".'- ,;'charsub 1!:1[1
1-4,8-11
1 2 3 4 8 9 10 11

অনুরোধ করা পরীক্ষার ক্ষেত্রে আউটপুট:

   ;(}.[:i.1+])/&.>".'- ,;'charsub 1!:1[1
1,3-5,9,16,18-23
1 3 4 5 9 16 18 19 20 21 22 23

2

Hassium , 173 বাইট

এটি বেশ দীর্ঘ ছিল এবং শেষের দিকে পিছনে যেহেতু প্রতিদ্বন্দ্বিতা করা হবে না।

 func main(){p="1,2,3,5-8".split(",")for(c=0;c<p.length;c++){e=p[c]if(e.contains("-")){p=e.split("-")for(x=p[0].toInt();x<=p[1].toInt()print(x++ +",")){}}else print(e+",")}}

অনলাইন চালান এবং এখানে প্রসারিত দেখুন



1

পাইথন 2.7, 147 138 বাইট

Z, F = ইনপুট ()। বিভক্ত ( ','), []
আমি জেড ইন জন্য:
 এক্স = i.split ( '-')
 যদি লেন (এক্স)> 1: এফ + = রেঞ্জ (ইনট (এক্স [0]), ইনট (এক্স [1]) + 1)
 অন্য: F + + = [INT (এক্স [0])]
মুদ্রণ প্রবন্ধ (চ) [1: -1]

ব্যবহার:

>>> পাইথন নামস.পি
"1,3-5,9,16,18-23"
1, 3, 4, 5, 9, 16, 18, 19, 20, 21, 22, 23

সেরা প্রোগ্রাম নয় ...


1
পিপিসিজিতে আপনাকে স্বাগতম। আমি মনে করি আপনি ইনডেন্টের জন্য 1 টি জায়গা ব্যবহার করে নিজের উত্তরটি আরও খাটো করতে পারবেন।
ইন্ট্রিপিডকোডার

ধন্যবাদ @ সিন্ট্রেপিডকোডার, আমি জানতাম না যে আপনি একক স্পেস ইনডেন্ট ব্যবহার করতে পারেন।
অ্যালেক্স

1

ম্যাটল্যাব, 47 বাইট

disp(eval(['[',strrep(input(''),'-',':'),']']))

এই স্নিপেট কমান্ড উইন্ডো থেকে একটি স্ট্রিং ইনপুট পড়ে, '-' দ্বারা ':' প্রতিস্থাপন করে, স্ট্রিংয়ে বর্গাকার বন্ধনী যুক্ত করে এবং এর পরে এটির মূল্যায়ন করে, যাতে ইনপুটটি সংখ্যার পুরো অ্যারেতে প্রসারিত হবে।

উদাহরণ ইনপুট:

'1,3-5,9,16,18-23'

উদাহরণ আউটপুট:

1     3     4     5     9    16    18    19    20    21    22    23

আমি বিশ্বাস করি যে এই আউটপুটটির অনুমতি দেওয়া হয়েছে, কারণ চ্যালেঞ্জটি কেবল বলেছে যে একটি গোষ্ঠীর সমস্ত সংখ্যা প্রদর্শিত হবে।


কমা-বিচ্ছিন্ন আউটপুটটি আরও সুন্দর হবে, যদিও আমি 5-স্পেস-বিভাজিত প্যাটার্নটি দেখতে পারি, এটি আমার পক্ষে শীতল :)
বার্নমারিয়ানো


1

পাওয়ারশেল, 79 71 বাইট

('('+($args[0]-replace'-','..'-replace',','),(')+')'|iex|%{$_})-join','

এটি অনলাইন চেষ্টা করুন!

অভ্যন্তরীণ অংশটি "1,5-9,12" কে "(1), (5..9), (12)" ফর্ম্যাটে পরিবর্তিত করে যা পাওয়ারশেল বুঝতে পারে, তারপরে সেইটিকে iex দিয়ে কার্যকর করে, যা অ্যারের অ্যারে তৈরি করে। তারপরে প্রতিটি অভ্যন্তরীণ অ্যারের মাধ্যমে পুনরাবৃত্তি করুন, তারপরে অবশেষে সমস্ত বাহ্যিক অ্যারে উপাদান একসাথে যোগদান করুন

আমার "আমার সময় পরিচালনা করতে সহায়তা করুন" উত্তর থেকে কোড ধার করে

ব্যবহার

PS C:\Tools\Scripts\golfing> .\return-each-number-from-a-group-of-numbers.ps1 '1,3-5,9,16,18-23'
1,3,4,5,9,16,18,19,20,21,22,23

-8 বাইট ভেস্কাহ ধন্যবাদ



1

কে (ওকে) , 40 31 বাইট

সমাধান

,/{{x+!1+y-x}. 2#.:'"-"\x}'","\

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা:

ব্যাখ্যা যোগ করার সময় আরও গল্ফ পরিচালনা করা ...

,/{{x+!1+y-x}. 2#.:'"-"\x}'","\ / the solution
                           ","\ / split input on ","
  {                      }'     / apply lambda to each
                    "-"\x       / split x on "-"
                 .:'            / value (.:) each (')
               2#               / 2 take (dupe if only 1 element)
   {        }.                  / diadic lambda, 2 args x and y
         y-x                    / y subtract x
       1+                       / add 1
      !                         / range 0..n
    x+                          / add x
,/                              / flatten

0

Clojure, 110 বাইট

#(clojure.string/join","(for[s(.split %",")[a b][(map read-string(.split s"-"))]r(if b(range a(inc b))[a])]r))

স্ট্রিংগুলির সাথে কাজ করা খুব মজাদার নয় :(




0

আপনি প্রতিস্থাপন করতে পারেন c@সঙ্গে £?
অলিভার

@ অলিভার, এটি একটি পুরানো চ্যালেঞ্জ যেহেতু এটির I / O ফর্ম্যাটটি নির্দিষ্ট করে না, তাই আমি সাবধানতার দিক থেকে ভ্রান্ত হয়ে কমে বিস্মৃত স্ট্রিং হিসাবে ইনপুট নিয়েছি এবং সমতল অ্যারে হিসাবে আউটপুট আছি। সাধারণত, যদিও, হ্যাঁ, আমি স্ট্রিংগুলির একটি অ্যারে হিসাবে ইনপুট নির্দিষ্ট করেছিলাম, বহুমাত্রিক অ্যারে হিসাবে আউটপুট এবং £প্রথম 5 বাইটের জায়গায় সবেমাত্র ব্যবহৃত ।
শেগি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.