একটি সংখ্যার তালিকা রূপান্তরকারী করুন


20

আপনি যখন একটি প্রোগ্রাম থেকে অন্য প্রোগ্রামে সংখ্যার (ভেক্টর, অ্যারে ...) একটি তালিকা কপি-পেস্ট করতে চান তখন কি এটাকে ঘৃণা করবেন না, তবে যে ফর্ম্যাটটিতে আপনার সংখ্যা রয়েছে সেটির সাথে আপনার প্রয়োজনীয় বিন্যাসটির সাথে মেলে না ?

উদাহরণস্বরূপ, ম্যাটল্যাব-এ আপনার মতো একটি স্থান পৃথক তালিকা থাকতে পারে:

[1 2 3 4 5]    (you can also have it comma separated, but that's not the point)

পাইথনে আপনাকে সেই তালিকাটিকে বৈধ ইনপুট তৈরি করতে কমা প্রবেশ করতে হবে, সুতরাং আপনাকে এটিকে রূপান্তর করতে হবে

[1, 2, 3, 4, 5]

এটা কাজ করতে. সি ++ এ আপনি এর মতো কিছু চাইবেন:

{16,2,77,29}

ইত্যাদি।

প্রত্যেকের জীবনকে সহজ করার জন্য, আসুন একটি তালিকা রূপান্তরকারী তৈরি করুন, এটি যে কোনও ফরমেটে * একটি তালিকা নেয় এবং অন্য নির্দিষ্ট ফর্ম্যাটে একটি তালিকা আউটপুট দেয়।

বৈধ বন্ধনীগুলি হ'ল:

[list]
{list}
(list)
<list>
list      (no surrounding brackets)

বৈধ ডিলিমিটারগুলি হ'ল:

a,b,c
a;b;c
a b c
a,  b,  c       <-- Several spaces. Must only be supported as input.
a;     b; c     <-- Several spaces. Must only be supported as input.
a   b   c       <-- Several spaces. Must only be supported as input. 

দ্রষ্টব্য, ইনপুটটিতে সংখ্যার মধ্যে যে কোনও স্পেস থাকতে পারে, তবে আউটপুটে শূন্যস্থান (যদি ,বা ;সীমানা হিসাবে ব্যবহৃত হয়), বা একটি একক স্থান (যদি এটি স্থান-সীমিত থাকে) থাকতে পারে।

ইনপুট তালিকার পাশাপাশি, একটি স্ট্রিং (বা দুটি অক্ষর) থাকবে যা আউটপুট ফর্ম্যাটটি সংজ্ঞায়িত করে। বিন্যাস স্ট্রিং প্রথমে উদ্বোধনী বন্ধনী টাইপ হতে হবে (শুধুমাত্র), [, (, <, {বা (শেষ এক একটি একক সময় ব্যবহৃত কোন পার্শ্ববর্তী বন্ধনী হয় স্থান)। বন্ধনী টাইপ ডিলিমিটার ধরণ ,, ;বা (সর্বশেষে একক স্থান) অনুসরণ করবে। দুটি ইনপুট ফর্ম্যাট অক্ষরকে উপরে বর্ণিত ক্রমে একক যুক্তি (স্ট্রিং বা পরপর দুটি অক্ষর) হিসাবে গ্রহণ করতে হবে।

বিন্যাসের স্ট্রিংগুলির কয়েকটি উদাহরণ:

[,    <-- Output format:   [a,b,c]
{;    <-- Output format:   {a;b;c}
      <-- Two spaces, output list has format:   a b c   

নিয়মাবলী:

  • আউটপুটে নেতৃস্থানীয় স্পেস থাকতে পারে না
  • আউটপুটটিতে পেছনের স্থান এবং একটি নতুন লাইন থাকতে পারে
    • আউটপুট শুধুমাত্র সংখ্যার তালিকা হওয়া উচিত , না ans =বা অনুরূপ
  • ইনপুটটি পূর্ণসংখ্যা বা দশমিক সংখ্যার (দুটি ধনাত্মক এবং নেতিবাচক (এবং শূন্য)) এবং দুটি অক্ষরের একটি স্ট্রিং হবে
    • যদি ইনপুটটিতে কেবল থাকে ইনপুটটিতে পূর্ণসংখ্যা থাকে তবে আউটপুট তালিকায় কেবলমাত্র পূর্ণসংখ্যা থাকা উচিত। যদি ইনপুট তালিকায় পূর্ণসংখ্যা এবং দশমিক সংখ্যা থাকে তবে সমস্ত আউটপুট সংখ্যা দশমিক সংখ্যা হতে পারে। (পূর্ণসংখ্যা হিসাবে পূর্ণসংখ্যার হিসাবে রাখা এটি alচ্ছিক)
    • দশমিক পয়েন্টের পরে সর্বাধিক সংখ্যার সমর্থন করা উচিত 3
    • ইনপুটটি দুটি আর্গুমেন্ট হবে। অর্থাৎ সংখ্যাগুলি একটি যুক্তিতে থাকে এবং বিন্যাসের স্ট্রিংটি একটি একক যুক্তি।
  • কোডটি কোনও প্রোগ্রাম বা ফাংশন হতে পারে
  • ইনপুট ফাংশন আর্গুমেন্ট বা STDIN হতে পারে

কিছু উদাহরণ:

1 2 3 4
[,
[1,2,3,4]

<1;  2;  3>
 ;    <-- Space + semicolon
1;2;3
not valid:  1.000;2.000;3.000   (Input is only integers => Output must be integers)

{-1.3, 3.4, 4, 5.55555555}
[,
[-1.300,3.400,4.000,5.556]  (5.555 is also valid. Rounding is optional)
also valid: [-1.3,3.4,4,5.55555555]

বাইটস মধ্যে সংক্ষিপ্ত কোড। বরাবরের মতো, চ্যালেঞ্জ পোস্ট হওয়ার দিন থেকেই বিজয়ী নির্বাচন করা হবে। পরবর্তী পোস্ট করা উত্তরগুলি যদি বর্তমান বিজয়ীর চেয়ে কম হয় তবে তারা জিততে পারে।


লিডারবোর্ড

এই পোস্টের নীচে স্ট্যাক স্নিপেট উত্তরগুলি থেকে ক্যাটালগ তৈরি করে a) ভাষার প্রতি সংক্ষিপ্ত সমাধানের তালিকা হিসাবে এবং খ) সামগ্রিক লিডারবোর্ড হিসাবে।

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেম্পলেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

## Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

## Ruby, <s>104</s> <s>101</s> 96 bytes

যদি আপনি নিজের শিরোনামে একাধিক সংখ্যা অন্তর্ভুক্ত করতে চান (যেমন আপনার স্কোর দুটি ফাইলের সমষ্টি বা আপনি পৃথকভাবে দোভাষী পতাকা দণ্ডের তালিকা করতে চান), নিশ্চিত করুন যে আসল স্কোরটি শিরোনামের শেষ সংখ্যা:

## Perl, 43 + 2 (-p flag) = 45 bytes

আপনি ভাষাটির নামটিকে একটি লিঙ্কও তৈরি করতে পারেন যা স্নিপেটে প্রদর্শিত হবে:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


পিছনে এবং শীর্ষস্থানীয় সাদা স্থান অনুমোদিত?
ওভাররেੈਕਟਰ

@ প্রেমিক, প্রথম দুটি নিয়ম দেখুন। শীর্ষস্থানীয় হোয়াইটস্পেস ঠিক নেই, অনুসরণ করা ঠিক আছে।
স্টিভি গ্রিফিন

আমরা কি বিপরীত ক্রমে ইনপুট নিতে পারি? (প্রথমে বিসর্জনকারীদের, দ্বিতীয়টিকে
তালিকাবদ্ধ করুন

@ মার্টিনব্যাটনার, হ্যাঁ এটি নির্দিষ্ট করা হয়নি যে এটি প্রথমে তালিকাভুক্ত হতে হবে, তাই আপনি চয়ন করতে পারেন।
স্টিভি গ্রিফিন

জে _নেতিবাচক উপাদানগুলি বোঝাতে ব্যবহার করে। :(
জগারব

উত্তর:


1

সিজেম, 27 বাইট

l)l_5ms`-SerS%*\S-_o_'(#(f-

এখানে চেষ্টা করুন।

ব্যাখ্যা

l      e# Read the format string.
)      e# Extract the separator.
l_     e# Read the list.
5ms`   e# Get a string that contains -.0123456789.
-      e# Get the characters in the list that are not in the string.
Ser    e# Replace those characters with spaces.
S%     e# Split by those characters, with duplicates removed.
*      e# Join with the separator.
\S-    e# Remove spaces (if any) from the left bracket.
_o     e# Output a copy of that character before the stack.
_'(#   e# Find '( in the left bracket string.
(      e# Get -1 if '( is the first character, and -2 if it doesn't exist.
f-     e# Subtract the number from every character in the left bracket string,
          making a right bracket.

8

জাভাস্ক্রিপ্ট (ES6), 75 82

বেনামে ফাংশন হিসাবে

সম্পাদনা করুন: 2 বাইট সংরক্ষিত thx @ ব্যবহারকারী 81655 (এবং আরও 5 জন এটি পর্যালোচনা করছে)

(l,[a,b])=>a.trim()+l.match(/[-\d.]+/g).join(b)+']})> '['[{(< '.indexOf(a)]

পরীক্ষার স্নিপেট

F=(l,[a,b])=>a.trim()+l.match(/[-\d.]+/g).join(b)+']})> '['[{(< '.indexOf(a)]

// Test
console.log=x=>O.innerHTML+=x+'\n'
// default test suite
t=[['1 2 3 4','[,'],['<1;  2;  3>',' ;'],['{-1.3, 3.4, 4, 5.55555555}','[,']]
t.forEach(t=>console.log(t[0]+' *'+t[1]+'* '+F(t[0],t[1])))
function test() { console.log(P1.value+' *'+P2.value+'* '+F(P1.value,P2.value)) }
#P1 { width: 10em }
#P2 { width: 2em }
P1<input id=P1>
P2<input id=P2>
<button onclick="test()">-></button>
<pre id=O></pre>


6

সিজেম, 35 34 বাইট

l(S-l"{[<(,}]>);":BSerS%@*1$B5/~er

এটি এখানে পরীক্ষা করুন।

প্রথম লাইনে ফর্ম্যাট এবং দ্বিতীয়টিতে তালিকার প্রত্যাশা।

ব্যাখ্যা

l   e# Read the format line.
(   e# Pull off the first character, which is the opening bracket.
S-  e# Set complement with a space, which leaves brackets unchanged and turns a space
    e# into an empty string.
l   e# Read the list.
"{[<(,}]>);":B
    e# Push this string which contains all the characters in the list we want to ignore.
Ser e# Replace each occurrence of one of them with a space.
S%  e# Split the string around runs of spaces, to get the numbers.
@   e# Pull up the the delimiter string.
*   e# Join the numbers in the list with that character.
1$  e# Copy the opening bracket (which may be an empty string).
B5/ e# Push B again and split it into chunks of 5: ["{[<(," "}]>);"]
~   e# Unwrap the array to leave both chunks on the stack.
er  e# Use them for transliteration, to turn the opening bracket into a closing one.

5

পাইথ, 33 বাইট

rjjezrXwJ"<>[]  {}(),;"d7@c6JChz6

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট

ব্যাখ্যা:

J"<>[]  {}(),;"  assign this string to J

rjjezrXwJd7@c6JChz6   implicit: z = first input string, e.g. "[;"
       w              read another string from input (the list of numbers)
      X Jd            replace every char of ^ that appears in J with a space
     r    7           parse ^ (the string of numbers and spaces) into a list
  jez                 put z[1] (the separator symbol) between the numbers
            c6J       split J into 6 pieces ["<>", "[]", "  ", "{}", "()", ",;"]
               Chz    ASCII-value of z[0] (opening bracket symbol)
           @          take the correspondent (mod 6) brackets from the list
 j                    and put the numbers between these brackets
r                 7   remove leading and trailing spaces

এটি কীভাবে কাজ করে তার একটি ব্যাখ্যা আপনি যুক্ত করতে পারেন?
শেলভাকু

1
আপনি এখানে আছেন
জাকুব

5

পাওয়ারশেল, 108 100 95 85 বাইট

$i,$z=$args;($z[0]+($i-split'[^\d.-]+'-ne''-join$z[1])+' }) >]'[($z[0]-32)%6]).Trim()

(পূর্ববর্তী সংস্করণগুলির জন্য পুনর্বিবেচনার ইতিহাস দেখুন)

সরিয়ে $bএবং আরও 15 বাইট গল্ফ করে$sঅভ্যন্তরীণ স্ট্রিংয়ে ভেরিয়েবলগুলি এবং পরিবর্তন ।

এই মধ্যে দুটি স্ট্রিং এবং তাদের দোকানে যেমন ইনপুট নেয় $iএবং $zতারপর, আমরা একটি নতুন আউটপুট স্ট্রিং গঠন করা। ভেতরের বাম বন্ধনী -splitগুলি $iএকটি Regex সঙ্গে শুধুমাত্র সাংখ্যিক সংখ্যাগুলি নির্বাচন, তারপর -joinফিরে অনুরোধ বিভেদক একসাথে s। আমরা ডিলিমিটার ইনপুট (যেমন, [) এর প্রথম চরিত্রের সাথে একমত এবং প্রথম অক্ষরের ASCII মান এবং কিছু গঠনের কৌশলগুলির উপর ভিত্তি করে একটি স্ট্রিংয়ের সাথে সূচি দিয়ে এটি বন্ধ করি। বাইরের .Trim()যেকোনো নেতৃস্থানীয় বা পিছনের স্থান সরিয়ে দেয়।


আমি মনে করি আপনি আপনার বন্ধনী বন্ধনী এক্সপ্রেশনকে "]})>"["[{(< ".IndexOf($b[0])]এরকম কিছু দিয়ে প্রতিস্থাপন করতে পারেন ' }) >]'[($b[0]-32)%6]($b[0]-32)%6আপনি দেয় 0,2,4,5,1বন্ধনী অক্ষর, যা আপনি বন্ধ বন্ধনী স্ট্রিং মধ্যে সূচক করতে ব্যবহার করতে পারেন খোলার জন্য ' }) >]'। একটি সংক্ষিপ্ত "সূত্র" থাকতে পারে, তবে এটি যথেষ্ট ভাল বলে মনে হচ্ছে।
ডানকো দুর্বিć

@ দানকোডুর্বিć দুর্দান্ত! আমি ASCII মানগুলির উপর ভিত্তি করে সঠিক আউটপুট চরিত্রটি নির্বাচন করার জন্য কিছু গণিত নিয়ে আসার চেষ্টা করছিলাম, তবে আমি সঠিক সূত্রটি খুঁজে পাইনি। আমি ()একে অপরের ঠিক পাশেই হয়ে উঠতে থাকি , কিন্তু অন্য বন্ধনীগুলির মধ্যে একটি চরিত্র রয়েছে, তাই আমি সূচী দিয়ে চলেছি। ধন্যবাদ!
অ্যাডমবর্কবর্ক

অপারেটরের String.Replace()পরিবর্তে ব্যবহার করে -replaceআপনাকে আরও 2 বাইট কিনে ফেলতে হবে (এর সাথে কোনও চরিত্রের শ্রেণিটি পালাতে বা সংজ্ঞায়িত করার দরকার নেই [])
ম্যাথিয়াস আর জেসেন

@ ম্যাথিয়াসআর.জেসেন আমি এখানে কিছু অনুপস্থিত .Replace('[]{}()<>;,',' ')না করা না পারলে স্বতন্ত্র চরিত্রগুলি ধরা পড়বে না পরিবর্তে প্রতীকী পুরোটির সাথে মিলিয়ে দেখার চেষ্টা করবে, যা বিদ্যমান নেই। আমাদের Regex.Replace ব্যবহার করতে হবে , যার মধ্যে একটি [regex]::.NET কল জড়িত এবং পরিবর্তে কোডটি লম্বা করবে।
অ্যাডমবর্কবার্ক

টুইটারে আমি ব্যবহার করে অন্য বাইট golfed -ne''পরিবর্তে |?{$_}
অ্যাডমবর্কবর্ক

4

পাইথন 2, 96 বাইট

import re
lambda(a,(b,c)):(b+c.join(re.findall('[-\d\.]+',a))+'])>} '['[(<{ '.index(b)]).strip()

যেমন কল করুন:

f(('{-1.3, 3.4, ,4, 5.55555555}','[,'))

আউটপুট:

[-1.3,3.4,4,5.55555555]

2

জাভাস্ক্রিপ্ট (ES6), 82 92 116 92 বাইট

(a,b)=>(c=a.match(/-?\d+(\.\d+)?/g).join(b[1]),d=b[0],d<"'"?c:d+c+"]}>)"["[{<(".indexOf(d)])

একটি বেনামি ফাংশন, এটি এভাবে চালান

((a,b)=>(c=a.match(/-?\d+(\.\d+)?/g).join(b[1]),d=b[0],d<"'"?c:d+c+"]}>)"["[{<(".indexOf(d)]))("{1;  2;3;   4}","<;")

এটি সম্ভবত আরও গল্ফ করা যেতে পারে ..

Ungolfed

(a,b)=>(                             // "{1;  2;3;   4}", "<;"
    c=a.match(/-?\d+(\.\d+)?/g)      // regex to match decimals
    .join(b[1]),                     // c -> "1;2;3;4"
    d=b[0],                          // d -> "<"
    d<"'" ?                          // if d is smaller than ' then ...
        c :                          // return just "1;2;3;4"
        d + c +                      // "<" + "1;2;3;4" + ...
        "]}>)" [ "[{<(".indexOf(d) ] // "]}>)"[2] -> ">"
)

আমি মনে করি আপনাকে একটি স্ট্রিং হিসাবে নিতে হবে, তালিকা নয়।
ওভাররেੈਕਟਰ

সম্পূর্ণরূপে এটি ভুল বুঝেছি : The input will be a list of integer or decimal numbers (both positive and negative (and zero)), and a string of two characters. এটি স্থির করে রাখুন, ধন্যবাদ
বাসপ্রডোম্ব কম্বারউবউবউবব

2

গণিত, 108 বাইট

গাণিতিক স্ট্রিং ইনপুটগুলির সাথে সাধারণত আনাড়ি হয় যতক্ষণ না স্ট্রিংটিকে কোনও পাঠ্য হিসাবে ব্যাখ্যা করা হয়।

c=Characters;t_~f~p_:=({b,s}=c@p;b<>Riffle[StringCases[t,NumberString],s]<>(b/.Thread[c@"[ {<(" -> c@"] }>)"]))

ব্যাখ্যা

StringCases[t,NumberString]সংখ্যা স্ট্রিংয়ের তালিকা প্রদান করে।

Riffleসংখ্যার মধ্যে বিভাজক সন্নিবেশ করান।

/.Thread[c@"[ {<(" -> c@"] }>)"]) বাম "বন্ধনী" টি ডান বন্ধনী দ্বারা প্রতিস্থাপন করে।

<>এর ইনফিক্স ফর্ম StringJoin। এটি সাবস্ট্রিংগুলিকে একসাথে আঠালো করে তোলে।


2

মতলব, 85 বাইট

@(s,x)[x(1) strjoin(regexp(s,'-?\d+\.?\d*','match'),x(2)) x(1)+(x(1)~=32)+(x(1)~=40)]

উদাহরণ ব্যবহার:

>> @(s,x)[x(1) strjoin(regexp(s,'-?\d+\.?\d*','match'),x(2)) x(1)+(x(1)~=32)+(x(1)~=40)]
ans = 
    @(s,x)[x(1),strjoin(regexp(s,'-?\d+\.?\d*','match'),x(2)),x(1)+(x(1)~=32)+(x(1)~=40)]

>> ans('1 2.4 -3 -444.555 5', '[,')
ans =
[1,2.4,-3,-444.555,5]

1

জুলিয়া, 95 বাইট

f(l,s)=(x=s[1]<33?"":s[1:1])*join(matchall(r"[\d.-]+",l),s[2])*string(x>""?s[1]+(s[1]<41?1:2):x)

এটি একটি ফাংশন f যা দুটি স্ট্রিং গ্রহণ করে এবং একটি স্ট্রিং প্রদান করে।

Ungolfed:

function f{T<:AbstractString}(l::T, s::T)
    # Extract the numbers from the input list
    n = matchall(r"[\d.-]+", l)

    # Join them back into a string separated by given separator
    j = join(n, s[2])

    # Set the opening bracket type as the empty string unless
    # the given bracket type is not a space
    x = s[1] < 33 ? "" : s[1:1]

    # Get the closing bracket type by adding 1 or 2 to the ASCII
    # value of the opening bracket unless it's an empty string
    c = string(x > "" ? s[1] + (s[1] < 41 ? 1 : 2) : x)

    # Put it all together and return
    return x * j * c
end

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