এলিক্সির অ্যারে সিনট্যাকটিক চিনি


17

এলিক্সির, (লিঙ্কযুক্ত) তালিকাগুলি সেই ফর্ম্যাটে রয়েছে [head | tail]যেখানে মাথাটি কোনও কিছু হতে পারে এবং লেজটি বাকী তালিকার একটি তালিকা এবং []খালি তালিকা - এটির একমাত্র ব্যতিক্রম।

তালিকাগুলি এমনও লেখা যেতে পারে [1, 2, 3]যা সমান[1 | [2 | [3 | []]]]

আপনার কাজটি বর্ণিত হিসাবে একটি তালিকা রূপান্তর করা হয়। ইনপুটটি সর্বদা একটি বৈধ তালিকা হবে (এলিক্সির মধ্যে) কেবলমাত্র রেজেক্সের সাথে মিলে সংখ্যাগুলি \[(\d+(, ?\d+)*)?\]। আপনি ইনপুট নিতে পারেন (প্রতিটি কমা পরে একটি স্থান) বা ফাঁকা ছাড়াই। আউটপুট (প্রত্যেকের আগে এবং পরে একটি স্থান |) বা ফাঁকা স্থান ছাড়াই হতে পারে ।

শীর্ষস্থানীয় শূন্যগুলির সাথে ইনপুটগুলির জন্য আপনি জিরো ছাড়াই বা আউটপুট করতে পারেন।

আউটপুট হিসাবে ইনপুট অবশ্যই স্ট্রিং হিসাবে নেওয়া উচিত (কোনও ফাংশন লিখলে)।

উদাহরণ

[] -> []
[5] -> [5 | []]
[1, 7] -> [1 | [7 | []]]
[4, 4, 4] -> [4 | [4 | [4 | []]]]
[10, 333] -> [10 | [333 | []]]

সম্পর্কিত , ডুপ্লিকেট নয় অংশ হিসাবে ]এটি শেষ মোড যুক্ত জড়িত । তদ্ব্যতীত, এখানে হাস্কেল উত্তর সেখানকার উত্তরের থেকে একেবারেই আলাদা।


5
আমার কাছ থেকে। জটিল IO ফর্ম্যাট নিরুৎসাহিত করা হয়। যদি ইনপুটটি একটি তালিকা হয় তবে আমাদের 90% কোডের পরিবর্তে কেবলমাত্র ইনপুটটি পার্সিংয়ের পরিবর্তে এটি তালিকা হিসাবে নেওয়া যাক
জো কিং

2
আমাদের কি শীর্ষস্থানীয় 0s সমর্থন করতে হবে? তারা রেজেক্স ফিট।
জো কিং


5
@ জোকিং আমি যুক্তি দিয়েছিলেন যে এখানে চ্যালেঞ্জ নিজেই দুটি নির্দিষ্ট বিন্যাসের মধ্যে রূপান্তর সম্পর্কে, সুতরাং ইনপুট পার্স করা চ্যালেঞ্জের একটি মৌলিক অংশ এবং এতে অতিরিক্ত কিছু যোগ করা নয় not পিএস আমি এখনই বুঝতে পেরেছি যে আপনার ডাক নামটি আসলে xD
লিও

2
@ মুহম্মদসালমান: চ্যালেঞ্জটিকে "পার্সিং" হিসাবে ট্যাগ করা হয়েছে, সুতরাং একটি স্ট্রিং থেকে / স্ট্রিংয়ে রূপান্তর উদ্দেশ্য হিসাবে এটির একটি যথেষ্ট অংশ sub
নিমি

উত্তর:


9

হাস্কেল, 50 বাইট

f.read
f(a:b)='[':show(a+0)++'|':f b++"]"
f _="[]"

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

+0Haskell, টাইপ পরীক্ষক জানাতে চাই যে আমরা সংখ্যার তালিকা সাথে ডিল করা হয় দেয়, তাই readআমাদের জন্য ইনপুট স্ট্রিং বিশ্লেষণ করতে হবে।


1
+1, I love the +0 trick!
B. Mehta



4

Retina, 39 33 32 20 bytes

\b]
,]
+`,(.*)
|[$1]

Saved 13 bytes thanks to H.PWiz, ovs, ASCII-only, and Neil.
Try it online!

Explanation

\b]
,]

If we don't have an empty list, add a trailing comma.

+`,(.*)
|[$1]

While there are commas, wrap things with |[ thing ].


@ovs 24?
ASCII-


@ হওয়া ASCII শুধুমাত্র আপনি প্রতিস্থাপন দ্বারা অন্য 4 বাইট সংরক্ষণ করতে পারবেন \b]সঙ্গে ,]। (অন্যথায় আমি স্বাধীনভাবে একই সমাধানটি আবিষ্কার করেছি))
নীল

ওহ, এটা ঠিক. আমি \bকোনও কারণে ভুলে গিয়েছিলাম > _> 20 বাইট @ স্মৃতিবিজ্ঞান
এএসসিআইআই-


3

এলিক্সির , 111 85 বাইট

f=fn[h|t],f->"[#{h}|#{f.(t,f)}]"
[],_->"[]"
h,f->f.(elem(Code.eval_string(h),0),f)end

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

এর আগে আমি কখনও এলিক্সির ব্যবহার করিনি। একটি ফাংশন সংজ্ঞা দেয় যা একটি স্ট্রিং এবং নিজের কাছে একটি রেফারেন্স নেয় এবং একটি স্ট্রিং প্রদান করে।


3

সিলোন , 113 বাইট

String p(String s)=>s.split(" ,[]".contains).select((x)=>!x.empty).reversed.fold("[]")((t,h)=>"[``h`` | ``t``]");

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

এখানে এটি লিখিত আছে:

// define a function p mapping Strings to Strings.
String p(String s) =>
    // we split the string at all characters which are brackets, comma or space.
    s.split(" ,[]".contains)    // → {String+}, e.g.  { "", "1", "7", "" }
    // That iterable contains empty strings, so let's remove them.
    // Using `select` instead of `filter` makes the result a sequential instead of
    // an Iterable.
     .select((x)=>!x.empty)    // → [String*], e.g.   [1, 7]
    // now invert the order.
    // (This needs a Sequential (or at least a List) instead of an Iterable.)
     .reversed                 // → [String*], e.g.   [7, 1]
    // Now iterate over the list, starting with "[]", and apply a function
    // to each element with the intermediate result.
     .fold("[]")                       // → String(String(String, String))
    //    This function takes the intermediate result `t` (for tail) and an element
    //    `h` (for head), and puts them together into brackets, with a " | " in the
    //    middle. This uses String interpolation, I could have used `"+` and `+"`
    //    instead for the same length.
          ((t,h)=>"[``h`` | ``t``]");  // → String

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

যেমন (এখন মুছে ফেলা হয়েছে) মন্তব্যে ওভিএস দ্বারা উল্লিখিত: যদি কেউ প্রশ্নে নির্দেশিত ইনপুট এবং আউটপুটটির জন্য "স্পেস ব্যতীত" বিকল্প নির্বাচন করে, তবে কেউ আরও 3 বাইট (তাদের স্পেস সহ স্পষ্টতই) সুরক্ষিত রাখতে পারে।

আমাদের যদি ইনপুটটি বিশ্লেষণের প্রয়োজন না হয় তবে কেবল ইনপুট হিসাবে একটি সিকোয়েন্স পেতে পারে তবে এটি আরও সংক্ষিপ্ত হয়ে যায় (69 বাইট)।

String p(Object[]s)=>s.reversed.fold("[]")((t,h)=>"[``h`` | ``t``]");

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



2

SNOBOL4 (CSNOBOL4) , 114 বাইট

	I =INPUT
S	N =N + 1	
	I SPAN(1234567890) . L REM . I	:F(O)
	O =O '[' L ' | '	:(S)
O	OUTPUT =O '[' DUPL(']',N)
END

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

	I =INPUT				;* read input
S	N =N + 1				;* counter for number of elements (including empty list)
	I SPAN(1234567890) . L REM . I	:F(O)	;* get value matching \d until none left
	O =O '[' L ' | '	:(S)		;* build output string
O	OUTPUT =O '[' DUPL(']',N)		;* print O concatenated with a '[' and N copies of ']'
END

2

স্ট্যাক্স , 19 বাইট

É▲²:WlÖ└%ï╪☺╒▓"We↨Φ

এটি চালান এবং এটি ডিবাগ করুন

আমার প্রথম স্ট্যাক্স পোস্ট, তাই সম্ভবত অনুকূল নয়।

প্যাকযুক্ত এবং মন্তব্য করা হয়েছে:

U,                      Put -1 under input
  {                     Block
   i                      Push loop index, needed later
    '[a$'|++              Wrap the element in "[...|"
            m           Map
             '[+        Add another "["
                s2+     Get the latest loop index + 2
                   ']*+ Add that many "]"

এটি চালান এবং এটি ডিবাগ করুন



2

বেফুঞ্জ -98 (পাইফুঞ্জ) , 22 21 বাইট

'[,1;@j,]';#$&." |",,

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

যদি আউটপুটটিতে অদ্ভুত বিধিনিষেধ না থাকে তবে আমরা 18 সালে এটি করতে পারি:

'[,1;@j,]';#$&.'|,

মজার সত্য, এটি প্রযুক্তিগতভাবে এমন একটি প্রোগ্রাম যা পাইথনে কিছুই করে না।



2

আর , 84 71 69 বাইট

function(x){while(x<(x=sub('(,|\\d\\K(?=]))(.+)','|[\\2]',x,,T)))1;x}

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

  • -15 বাইটস @ কিরিললকে ধন্যবাদ।

1
আমার রুবির উত্তরের ভিত্তিতে একক বিকল্প সহ 71 বাইট
কিরিল এল

@KirillL। : ধন্যবাদ, আমি নিশ্চিত ছিলাম যে এটি করার জন্য একটি ছোট রেজেক্স ছিল, তবে আমি সর্বদা চেহারাগুলির সাথে গণ্ডগোল করি: D
digEmAll

-2 আরও , আমি সম্পূর্ণরূপে একটি সংক্ষিপ্ত \Kচেহারা সম্পর্কে ভুলে গেছি
কিরিল এল




1

জেলি , 18 বাইট

ŒVµ⁾[]jj⁾|[ṫ3;”]ṁ$

ফলাফল মুদ্রণের একটি সম্পূর্ণ প্রোগ্রাম (একাত্ত্বিক লিঙ্ক হিসাবে এটি অক্ষরের একটি তালিকা গ্রহণ করে তবে অক্ষর এবং পূর্ণসংখ্যার একটি তালিকা ফেরত দেয়)।

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

কিভাবে?

ŒVµ⁾[]jj⁾|[ṫ3;”]ṁ$ - Main link: list of characters  e.g. "[10,333]"
ŒV                 - evaluate as Python code              [10,333]
  µ                - start a new monadic chain, call that X
   ⁾[]             - list of characters                   ['[',']']
      j            - join with X                          ['[',10,333,']']
        ⁾|[        - list of characters                   ['|','[']
       j           - join                                 ['[','|','[',10,'|','[',333,'|','[',']']
           ṫ3      - tail from index three                ['[',10,'|','[',333,'|','[',']']
                 $ - last two links as a monad (f(X)):
              ”]   -   character                          ']'
                ṁ  -   mould like X                       [']',']'] (here 2 because X is 2 long)
             ;     - concatenate                          ['[',10,'|','[',333,'|','[',']',']',']']
                   - implicit (and smashing) print        [10|[333|[]]]

1

জাভা 10, 107 বাইট

s->{var r="[]";for(var i:s.replaceAll("[\\[\\]]","").split(","))r="["+i+"|"+r+"]";return s.length()<3?s:r;}

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

ব্যাখ্যা:

s->{                       // Method with String as both parameter and return-type
  var r="[]";              //  Result-String, starting at "[]"
  for(var i:s.replaceAll("[\\[\\]]","") 
                           //  Removing trailing "[" and leading "]"
             .split(","))  //  Loop over the items
    r="["+i+"|"+r+"]";     //   Create the result-String `r`
  return s.length()<3?     //  If the input was "[]"
          s                //   Return the input as result
         :                 //  Else:
          r;}              //   Return `r` as result

1

স্ট্যান্ডার্ড এমএল , 71 বাইট

fun p[_]="]|[]]"|p(#","::r)="|["^p r^"]"|p(d::r)=str d^p r;p o explode;

এটি অনলাইন চেষ্টা করুন! ফাঁকা ছাড়াই বিন্যাস ব্যবহার করে। যেমন it "[10,333,4]"ফলন "[10|[333|[4]|[]]]]"

ungolfed

fun p [_]       = "]|[]]"          (* if there is only one char left we are at the end *)
  | p (#","::r) = "|[" ^ p r ^ "]" (* a ',' in the input is replaced by "|[" and an closing "]" is added to the end *)
  | p (d::r)    = str d ^ p r      (* all other chars (the digits and the initial '[') are converted to a string and concatenated to recursive result *)

val f = p o explode  (* convert string into list of chars and apply function p *)

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


1

আর , 140 136 বাইট

জিউস্প্পির সাউন্ড পরামর্শ অনুযায়ী 4 বাইট নিচে।

function(l,x=unlist(strsplit(substr(l,2,nchar(l)-1),", ")))paste(c("[",paste0(c(x,"]"),collapse=" | ["),rep("]",length(x))),collapse="")

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


substrখাটো এবং প্রথম paste0হতে পারে paste136 বাইট এই জন্য।
জিউসেপ 16

1
ব্যবহার eval, parseএবং subপরিবর্তে unlist, strsplitএবং substrআমিও শুধুমাত্র 136 বাইট পরিচালিত (আমি ভেবেছিলাম এটা খাটো হতে পারে কিন্তু এটা ছিল না)
: Giuseppe

@ জিউজ্পে -4 বাইটের জন্য ধন্যবাদ! আমি আশা করি আমাদের কিছুটা খাটো হোক। পুনরাবৃত্তির সমাধান হতে পারে?
জেসি

1

আর , 108 বাইট

function(l)Reduce(function(x,y)paste0("[",x,"|",y,"]"),eval(parse(t=sub("]",")",sub("\\[","c(",l)))),"[]",T)

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

আগের তুলনায় আরও ভাল আর সমাধান খুঁজতে প্রায় এক বছর সময় লেগেছিল ... Reduceউত্তরটি জানা উচিত ছিল ! ফাঁকা স্থান ছাড়াই আউটপুট, ইনপুট ফাঁকা স্থানের সাথে বা ছাড়াও হতে পারে।




0

সেড + -E, 46 বাইট

:
s/\[([0-9]+)(, ?([^]]*)|())\]/[\1 | [\3]]/
t

একটি মোটামুটি সহজ পদ্ধতি। দ্বিতীয় লাইন এটি গ্রহণ করে [\d+, ...]এবং এতে পরিবর্তন করে [\d | [...]]। তৃতীয় লাইনটি প্রথম লাইনে ফিরে আসে, যদি বিকল্পটি সফল হয়। এটি ব্যর্থ হওয়া এবং তারপরে প্রোগ্রামটি শেষ না হওয়া অবধি বিকল্পটি পুনরাবৃত্তি করে। sed -E -f filename.sedস্টিডিনের মাধ্যমে ইনপুট পাস করে চলে Run


0

লাল , 110 বাইট

func[s][if s ="[]"[return s]replace append/dup replace/all b: copy s",""|[""]"(length? b)- length? s"]""|[]]"]

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

অবারিত সংস্করণটির ব্যাখ্যা:

f: func[s][                      
    if s = "[]" [return s]                    ; if the list is empty, return it    
    b: copy s                                 ; save a copy of the input in b 
    replace/all b "," "|["                    ; replace every "," with "|["  
    append/dup b "]" (length? b) - length? s  ; append as many "]" as there were ","
    replace b "]" "|[]]"                      ; replace the first "]" with "|[]]"     
]                                             ; the last value is returned implicitly

লাল এত সহজে পঠনযোগ্য, আমি সন্দেহ করি যে উপরের মন্তব্যগুলি যুক্ত করার দরকার ছিল :)


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