টার্নারি অপারেটরগুলির একটি অভিব্যক্তি মূল্যায়ন করুন


29

বর্ণমালা উপর একটি ব্যাকরণ বিবেচনা করুন { 0, 1, ?, :} দ্বারা সংজ্ঞায়িত প্রকাশনা নিয়ম

s → 010 ?s :s ┃ 1 ?s :s

গুলি থেকে উত্পন্ন একটি স্ট্রিং দেওয়া হয়েছে , যেখানে ?:এটি ডান-অ্যাসোসিয়েটিভ (উদাহরণস্বরূপ, a?B?X:Y:c?d:e?f:gঅর্থ a?(B?X:Y):(c?d:(e?f:g))) একটি এক্সপ্রেশন হিসাবে পার্স করুন এবং এটি নিম্নলিখিত শব্দার্থবিজ্ঞানের সাথে মূল্যায়ন করুন:

eval(0) = 0
eval(1) = 1
eval(0?a:b) = eval(b)
eval(1?a:b) = eval(a)

ফলাফল 0 হলে আউটপুট কিছু স্থির মান; যদি আউটপুট 1 হয় , একটি পৃথক নির্দিষ্ট মান আউটপুট দেয়। আপনার উত্তরে আপনার নির্বাচিত আউটপুট মানগুলি উল্লেখ করুন (উদাঃ 0/ 1, বা False/ True)।

পরীক্ষার মামলা

0 -> 0
1 -> 1
0?0:1 -> 1
0?1:0 -> 0
1?0:1 -> 0
1?1:0 -> 1
0?1?0:1:1 -> 1
1?0?1:1:1 -> 1
1?0:1?0:1?1:1 -> 0
1?1?1:0?1?0:0:0:0 -> 1
1?0:1?0?1:1?1:0:1?1?1:1:1?0:1 -> 0
1?1?1:0?0?1:1:0?1:0:1?1?0?0:0:1?1:0:0?1?0:1:1?0:1 -> 1
0?0?1?0?0:1:0?0:0:0?0?1:1:1?0:1:0?0?0?1:0:0?1:1:1?1?0:1:1 -> 0

বিধি

  • আপনি কিছু ভাষা প্রোগ্রামিং ভাষায় স্ট্রিংগুলি কোড হিসাবে ব্যাখ্যা করে এটি চালাতে (যেমন জাভাস্ক্রিপ্ট / পার্ল / রুবি / পাইথনের eval) ব্যবহার করতে পারেন' s
  • এটি বলেছিল, আপনার কোডটি আসলে পার্স করতে হবে না এবং তারপরে ইনপুট স্ট্রিংটি মূল্যায়ন করবে না। সমান ফলাফল অর্জন করতে আপনি যে কোনও পদ্ধতির গ্রহণ করতে পারেন এবং আগের নিয়ম লঙ্ঘন করেন না।
  • আপনার প্রোগ্রাম বিরুদ্ধে পরীক্ষা করা হবে perl -le 'print eval<>'
  • সবচেয়ে সংক্ষিপ্ততম কোড (বাইটে) জিতেছে।

ভাষার অন্তর্নির্মিত ভাষা যেমন স্ট্রিংকে মৌলিকভাবে পরিবর্তন করার পরে $ my_language কোড হিসাবে ব্যাখ্যা করে এমন eval এর মতো ভাষা ব্যবহার সম্পর্কে কীভাবে?
Adám

বিল্টিনগুলি কীভাবে স্ট্রিংকে $ some_ other_language কোড হিসাবে ব্যাখ্যা করে ?
মেগো

@ অ্যাডম এটি বাতিল করা হবে, দুঃখিত।
লিন

@ মেগো হুম, সেখানে একটি তুচ্ছ প্রতারণার সুযোগ রয়েছে, তাই আমি এই ধরনের সমস্ত বিল্ট-ইনগুলি কভার করার নিয়মটি বাড়িয়েছি।
লিন

1
মার্টিন পরীক্ষার বিষয় আলোকে, সম্ভবত এটি হিসাবে ব্যাকরণ সংজ্ঞায়িত করতে সহজ হবে S → T | T ? S : S, T → 0 | 1, associativity সম্পর্কে কথা বলতে প্রয়োজন সরানোর?
পিটার টেলর

উত্তর:


5

গল্ফস্ক্রিপ্ট, 21 বাইট

2/-1%{)2%{0`=@@if}*}/

এই আউটপুট 0বা 1। ইনপুটটিতে একটি একক পেছনের নতুন লাইন রয়েছে বলে ধরে নেওয়া হয়। ~(যা স্ট্রিংগুলির মূল্যায়ন করে) ব্যবহার করা একটি বাইট সংরক্ষণ করবে:

2/-1%{)2%{~!@@if}*}/

এটি http://golf.shinh.org/reveal.rb?The+B+ প্রোগ্রামগ্রামিং + ভাষা / টেলগুলি_1462638030&gs এর উপর ভিত্তি করে ।


17

রেটিনা , 23 বাইট

r-1=+`0\?.:|1\?(.):.
$1

এটি অনলাইন চেষ্টা করুন! (প্রথম লাইন একটি লাইনফিড-বিচ্ছিন্ন পরীক্ষা স্যুট সক্ষম করে))

ব্যাখ্যা

এটি আসলে মোটামুটি সহজ। ইনপুটটি বারবার ( +) কেবলমাত্র অক্ষরগুলির সাথে থাকা টের্নারিগুলির মূল্যায়ন করে ফলাফলকে হ্রাস করা হয় । এটি ডান-অ্যাসোসিয়েটিভভাবে সম্পন্ন হয়েছে তা নিশ্চিত করতে, আমরা ডান থেকে বামে ম্যাচগুলি সন্ধান করি ( r) এবং আমরা খুঁজে পাওয়া শেষ ম্যাচটি কেবল প্রতিস্থাপন করি ( -1=)।

রেজেক্স নিজেই মেলে 0\?.:এবং এটিকে সরিয়ে দেয় (কেবলমাত্র স্টাফ পরে রেখে :) বা এর 1\?.:.পরে মান সহ এটি প্রতিস্থাপন করে ?


যদি রেজেক্সটি ডান দিক থেকে শুরু হয় তবে আপনি কি স্টেন্টের 1পরিবর্তে স্ট্যান্ড ম্যাচটি প্রসেস করবেন না -1?
লিকি নুন

@ ল্যাকিয়ুন দুর্ভাগ্যক্রমে, আমি মনে করি সীমা প্রয়োগের আগে আমি ম্যাচগুলি উল্টে দিয়েছি।
মার্টিন এন্ডার

10

হাস্কেল, 106 101 100 90 83 বাইট

এটি হাস্কেলের প্যাটার্ন মেলানোর ক্ষমতার উপর ভারীভাবে নির্ভর করে। প্রথমত, আমরা স্ট্রিংটি এমনভাবে বিপরীত করি যে আমরা কেবল প্রথম উপস্থিতির জন্য সিচ করতে পারি b:a?x(যা সাধারণত এটি পড়তে পারে x?a:b) এবং এর মান দিয়ে এটি প্রতিস্থাপন করতে পারি। এটি স্বয়ংক্রিয়ভাবে সঠিক সাহচর্য সরবরাহ করে । এখানে আমরা x:xsপ্যাটার্নটি ব্যবহার করি । এটি ফাংশনটি fকী করছে। তারপরে আমরা মূলত fএর আউটপুটটিতে বারবার প্রয়োগ করি, যতক্ষণ না আমাদের একক সংখ্যা (0 বা 1) বাকি থাকে।

12 লাইটের জন্য লিনকে ধন্যবাদ!

f(b:':':a:'?':x:l)|x>'0'=a:l|1>0=b:l
f(x:l)=x:f l
f x=x
until((<2).length)f.reverse

8

ব্রেইনফাক, 82 64 63 বাইট

+
[
  ,>>,>
  +++++++[<---<<-[------>>]<-]
  <<
  [
    ->[<++>[+]]
  ]
  +>[>>]
  <<<-
]
<.

আউটপুট \xffজন্য 0এবং \x00জন্য হয় 1। ব্রেইনফাক বাস্তবায়ন অবশ্যই প্রারম্ভিক কক্ষের বাম দিকে যেতে দেওয়া উচিত।

এটি মূলত xsot এর পাইথন উত্তরের মতো একই পদ্ধতির ব্যবহার করে তবে আমার প্রাথমিক 82-বাইট জমা দেওয়ার তুলনায় শাখাটি অনুসরণ করা সম্ভবত আরও কঠিন:

-
[
  +
  [
    ->,,>+++++++[<--------->-]
    <[<++>[+]]
    <
  ]
  ,->,>+++++++[<[-------<]>>-->-]
  <[<]
  <
]
>>.

(এই সমাধান জন্য, আউটপুট \xfeজন্য 0এবং \xffজন্য 1, এবং ব্যাপকতর সামঞ্জস্য একটি newline সঙ্গে অর্জিত হয় যখন ইনপুট প্রান্ত।)

যদি আপনি xsot এর সমাধান বিশ্লেষণ করতে বিরক্ত না হন তবে ধারণাটি হ'ল: বাম থেকে ডানে এগিয়ে যান। যদি আপনি দেখতে পান 1?তবে লোভ দেখিয়ে এটিকে বাতিল করুন। যদি আপনি দেখতে পান 0?তবে তার সাথে সংশ্লিষ্টগুলির মধ্যে সমস্ত কিছু ফেলে দিন :। যখন ?দ্বিতীয় চরিত্র হিসাবে উপস্থিত হবে না, লুপিং বন্ধ করুন এবং অবশিষ্ট স্ট্রিংয়ের প্রথম অক্ষরটি মুদ্রণ করুন।

সুতরাং, 82-বাইট সমাধানটি সেই স্কিমটিকে বেশ কাছাকাছিভাবে আয়না করে। অভ্যন্তরীণ লুপটি 0?এক্সসটের অভ্যন্তরীণ লুপের মতো পরিচালনা করে । কোনও ইনপুট অক্ষর না পরীক্ষা করে প্রধান লুপটি প্রবেশের জন্য কিছু যত্ন নেওয়া হয়; উদাহরণস্বরূপ, আমরা দ্বিতীয় অক্ষরটি ?মূল লুপের শেষে একবারে ছিল কিনা এবং মূল লুপটি প্রবেশের আগে শুরুতেও নয় তা যাচাই করতে চাই ।

-৩-বাইট সমাধানটি মূলত অভ্যন্তরীণ এবং বাহ্যিক লুপগুলিকে একের সাথে একত্রিত করে, যা আমি সন্দেহ করি those লুপগুলির মধ্যে সাদৃশ্য দেওয়া সম্ভব হয়েছিল। মূল লুপের স্মৃতি বিন্যাসটি বর্ণনা করা যেতে পারে:

[s] d c

যেখানে [x]বর্তমান ঘরটি বোঝায় - sডামি ননজারো মান হিসাবে শুরু হয় যা কেবলমাত্র আমরা এখনও লুপিংয়ের ইঙ্গিত দেয় এবং অবিলম্বে একটি ইনপুট চরিত্রের ( 0বা হয় 1) দিয়ে ওভাররাইট করা হয় । অন্যথায় অন্যথায় dযদি আমরা মাঝখানে থাকি তবে ঘরটি (নেতিবাচক) গভীরতা ধারণ করে । পারেন হতে যাচ্ছে বা বা সম্পর্কে newline বা ফাইলের শেষে।0?0c?:

আপডেট করার পরে sএবং cআমরা সেই অনুযায়ী 0?আপডেট dকরে এবং পয়েন্টারটি সামঞ্জস্য করে কেসটি পরিচালনা করি, অন্যথায় আমরা পরবর্তী পুনরাবৃত্তির cমান হিসাবে বর্তমান মানটি ব্যবহার করি d, বা আমাদের হয়ে গেলে থামিয়ে দেয়।


7

পাইথন 2, 76 74 73 72 বাইট

a=`id`
for c in input()[::-1]:a=(c+a,a[ord(c)*7%9]+a[4:])[a>'?']
print a

এড়ানোর জন্য স্ট্রিং আক্ষরিক হিসাবে ইনপুট সহ raw_

আউটপুট হয় 0বা 1অনুসরণ করা হয় <built-in function id>


1
হা হা, আমি আপনার উত্তরটি বি ল্যাংয়ের জন্য পড়েছিলাম এবং প্রায় একটি অভিন্ন উত্তর পোস্ট করতে চলেছি! এখানে একটি অতিরিক্ত অপ্টিমাইজেশন রয়েছে:3>>int(c)
এক্সসট

এটি কিভাবে কাজ করে তা বোঝানোর জন্য যত্নশীল? সত্যিই ঝরঝরে দেখাচ্ছে
ওয়ার্ল্ডসেন্ডার

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

+ `id`কৌতুক…! ভাল হয়েছে :)
লিন

5

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

s=input()
while'?'<=s[1:]:
 n=s<'1'
 while n:s=s[2:];n+=-(s[1]<'?')|1
 s=s[2:]
print s[0]

ইনপুটটি স্ট্রিং আক্ষরিক হিসাবে নেওয়া হয়।


5

গ্রিম , 34 31 বাইট

E=d|d\?E.E
e`\1|\1\?_.E|\0\?E._

ছাপে 1truthy ইনপুট জন্য এবং 0falsy বেশী জন্য। এটি অনলাইন চেষ্টা করুন! দুর্ভাগ্যক্রমে টিআইও-তে শেষ পরীক্ষার কেস মেমরির বাইরে চলে গেছে।

ব্যাখ্যা

ডান-associativity মূলত মানে যে a?b:c, aসবসময় পারেন হয় 0বা 1একটি লম্বা অভিব্যক্তি কখনোই। আমি কেবল পুনরাবৃত্তভাবে এমন একটি প্যাটার্ন সংজ্ঞায়িত করব যা এর মতো সত্যবাদী অভিব্যক্তির সাথে মেলে এবং এর বিপরীতে ইনপুটটি পরীক্ষা করে। এসগুলি যদি সবগুলি পরীক্ষা করা হয় তবে প্রতিটি :সত্যই সত্যই তা পরীক্ষা করাও অপ্রয়োজনীয় : ইনপুটটিতে সমান সংখ্যক এস এবং এস রয়েছে এবং কিছুকে যদি ভুল হিসাবে শ্রেণিবদ্ধ করা হয় তবে সংশ্লিষ্টটি মিলতে ব্যর্থ হবে এবং গ্রিমের মিল রয়েছে ইঞ্জিন ব্যাকট্র্যাক হবে।:??:?::

E=d|d\?E.E
E=                      Define nonterminal E (for "expression") as
  d|                     a digit, OR
    d                    a digit,
     \?                  a literal ?,
       E                 a match of E,
        .                any character (will match a :), and
         E               another match of E.
e`\1|\1\?_.E|\0\?E._
e`                      Match entire input against this pattern (truthy expression):
  \1|                    a literal 1, OR
     \1\?                a literal 1?,
         _               a recursive match of truthy expression,
          .              any character (will match a :), and
           E|            any expression, OR
             \0\?E._     the same, but with 0 in front, and _ and E swapped.

5

হাস্কেল, 79 71 70 62 60 56 বাইট

সম্পাদনা: 3 বাইটের জন্য @ জগারব এবং 4 বাইটের জন্য @ নিমিকে ধন্যবাদ!

e(x:'?':r)|a:_:s<-e r=last$e s:[a:tail(e s)|x>'0']
e x=x

এটি একটি পুনরাবৃত্তির পদ্ধতি যা "কিছু নির্দিষ্ট মান" -আউটপুট বিধিটিকে কিছুটা অবমাননা করে । সম্পাদনা: টিউপসগুলি থেকে মুক্তি পাওয়া কেবল 8 টি বাইট সংরক্ষণ করে না, এটি একটি ভাল আউটপুটও দেয়: "0"বা "1"

অবরুদ্ধ সংস্করণ:

eval (x:'?':r1) = if x=='1' then (a, r3) else (b, r3)
    where (a,':':r2) = eval r1
          (b, r3)    = eval r2
eval (x:r) = (x,r)

এটা কিভাবে কাজ করে? ফাংশন অভিব্যক্তির অন্তর্নিহিত গাছ ঘোরে
eval

eval 1?0?0:1:0?1:0 -> eval 1?          :
                             eval 0?0:1 eval 0?1:0

এবং ফর্ম একটি tuple প্রদান (result, rest)
প্রথম প্যাটার্ন (x:'?':r1)ম্যাচ xথেকে '1'এবং r1থেকে "0?0:1:0?1:0"। উপ-এক্সপ্রেশন এবং রিটার্নগুলি মূল্যায়নের evalজন্য পুনরাবৃত্তভাবে আবেদন করা । এটি প্যাটার্ন ফলনের সাথে মিলছে এবং । এই উপ-সূত্রটিও পুনরাবৃত্তির সাথে মূল্যায়ন করা হয় যাতে এবং । কিনা পরীক্ষা করুন হয় বা এবং বিনিময়ে পারেন বা ।r10?0:1(0,":0?1:0")(a,':':r2)a=0r2=0?1:0b='0'r3=""x'1''0'(a, r3)(b, r3)


1
চমৎকার পন্থা! x>'0'জায়গায় কাজ করবে x=='1'?
জাগারব

ধন্যবাদ, চর নিয়ে কাজ করার সময় আমি এটির কথা ভাবিনি।
লাইকনি

1
আমি মনে করি আপনি এটি ':'দ্বারা প্রতিস্থাপন করতে পারেন _
Zgarb

হ্যাঁ, তারপরে কোডটি এমনকি ন্যায়বিচারের পরিবর্তে স্বেচ্ছাসেবী সীমানার জন্য কাজ করে :। আবার ধন্যবাদ!
লাইকনি

1
নিস! আপনি এর if .. then .. elseসাথে প্রতিস্থাপন করতে পারেন last$e s:[a:tail(e s)|x>'0']
নিমি

3

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

f=s=>s[1]?f(s.replace(/0\?.:|1\?(.):.(?!\?)/,"$1")):s

রিটার্ন 0বা 1বৈধ ইনপুট জন্য; অবৈধ ইনপুট জন্য স্তব্ধ। ব্যাখ্যা: যেহেতু একটি স্ট্রিং উল্টানো জাভাস্ক্রিপ্টে বিশ্রী, তাই আমার প্রথম 71-বাইট প্রয়াস নেতিবাচক বর্ণনাহীন ব্যবহার করে কাজ করেছে ?যা অন্যথায় সাহচর্যকে বিঘ্নিত করবে:

f=s=>s[1]?f(s.replace(/(.)\?(.):(.)(?!\?)/,(_,a,b,c)=>+a?b:c)):s

যেহেতু এটি কিছুটা দীর্ঘ ছিল তাই আমি ভাবছিলাম যে আমি রেজেজেপ-এ সিদ্ধান্ত গ্রহণের মাধ্যমে বিষয়গুলির উন্নতি করতে পারি কিনা। দেখা গেল, এটি তাত্ক্ষণিক সাফল্য ছিল না, কারণ এটি 71 বাইটও নিয়েছিল:

f=s=>s[1]?f(s.replace(/0\?.:(.)(?!\?)|1\?(.):.(?!\?)/,"$1$2")):s

তারপরে এটি আমার কাছে ঘটেছিল 0?0:এবং 0?1:সাহিত্যিকতার জন্য উদ্বেগ ছাড়াই সর্বদা কোনও বিকল্প নেই। এটি আমাকে প্রায় 25% বাঁচিয়েছে।


উপরে আপনার কোড ব্লকটি অনুপস্থিত f=। আপনার বাইট গণনা এটি অ্যাকাউন্টে নিচ্ছে কিনা তা আমি পরীক্ষা করে দেখিনি।
প্যাট্রিক রবার্টস

@ পেট্রিকরোবার্টস আমি চিরকাল তা করছি, কারণ আমি লগ থেকে অনুলিপি করছি যা কেবলমাত্র অ্যাসাইনমেন্টের ফলাফলটি দেখায় (যা অবশ্যই অনার্সিউভ ফাংশনের জন্য যথেষ্ট)।
নীল

@ নীল আপনি আউটপুট পরিবর্তে লগ ইনপুট থেকে অনুলিপি করতে পারেন
ASCII- কেবল

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

3

পার্ল, 32 + 1 ( -pপতাকা) = 33 বাইট

@ মিচ সোয়ার্টকে সম্পূর্ণ কৃতিত্ব , কারণ তার সমাধানটি আমার চেয়ে 14 বাইট কম ছিল! মিঃ
থেকে 1 বাইট দীর্ঘ দীর্ঘ সমাধানের পরামর্শ দেওয়ার জন্য @ নীলকেও ধন্যবাদ জানাই

s/.*\K(0\?..|1\?(.)..)/\2/&&redo

-pপতাকা প্রয়োজন , পাশাপাশি চালানো -M5.010বা -Eচালানোর জন্য। এই ক্ষেত্রে :

perl -pE 's/.*\K(0\?..|1\?(.)..)/\2/&&redo' <<< "0
0?0:1
0?1?0:1:1
1?0:1?0?1:1?1:0:1?1?1:1:1?0:1
0?0?1?0?0:1:0?0:0:0?0?1:1:1?0:1:0?0?0?1:0:0?1:1:1?1?0:1:1"

ব্যাখ্যা : এটা মূলত ব্লক হ্রাস a?b:c(শেষ থেকে শুরু নিশ্চিত কোন হতে ?মধ্যে অনুসরণ করে) bবা cএর truthness উপর নির্ভর করে aযে পর্যন্ত না স্ট্রিং শুধুমাত্র রয়েছে, বহুবার 1বা 0


-আপনার স্কোর দিকে গণনা করা হয় না? এইচআরএম। আকর্ষণীয় ... ভাল উত্তর!
মেয়রমন্টি

@ মায়োরমন্টি 1-লাইনারের জন্য আপনি কেবলমাত্র 1 বাইট ব্যয় perl -e '<code>'যুক্ত করে কমান্ড লাইনে এটি শুরু করতে পারেন । pperl -pe '<code>'
নিল

@ নীল আহ, এটি উপলব্ধি করে
মেয়রমন্তি

আসলে আপনাকে স্ট্রিংটি বিপরীত করতে হবে না, আপনি কেবলমাত্র নেতিবাচক চেহারা নিতে পারেন ?, আমি এটিকে 34 বাইটে এভাবে কাটতে সক্ষম হয়েছি।
নিল

এখানে একটি 32 + 1 রয়েছে:s/.*\K(1\?(.)..|0\?..)/\2/&&redo
মিচ শোয়ার্জ

2

পাইথন 3, 93 69 বাইট

def f(s):z=s.pop;r=z(0);return s and':'<z(0)and(f(s),f(s))[r<'1']or r

ইনপুট অক্ষরের একটি তালিকা হিসাবে স্ট্রিং, আউটপুট হয় "0"বা"1"

>>>f(list("0?0:1"))
<<<"1"

অবরুদ্ধ সংস্করণ:

def parse(s):
    predicate = s.pop(0)
    if s and s.pop(0) == '?':
        left, right = parse(s), parse(s)
        if predicate == '0':
            return right
        return left
    return predicate

আর একটি চেষ্টা করুন, তবে যথেষ্ট বেশি বাইট সহ:

i=input()[::-1]
a=[i[0]]
for o,z in zip(i[1::2],i[2::2]):a+=[z]if o<'?' else[[a.pop(),a.pop()][z>'0']]
print(a[0])

আপনার উত্তরটি কোনও ফাংশন হতে পারে - আপনি দ্বিতীয় লাইনটি সরাতে পারেন।
লিন

এটি স্পষ্টত অন্বেষিত, কারণ এটি পরীক্ষার কেসগুলিতে উত্তীর্ণ হয় না, এবং অদ্বিতীয় সংস্করণটি রানটাইম ত্রুটি দেয়। যদিও আপনার প্রাথমিক ধারণাটি ভাল। কিছু সামঞ্জস্যের সাথে আমি পাইথন 2 এ 68 এবং পাইথন 3-এ 69 পেয়েছি
মিচ শোয়ার্জ

1
আমি মনে করি এটি নিজের নিজের মধ্যে সম্পাদনা করার চেয়ে উত্তর দেওয়ার জন্য আমার পক্ষে আরও জ্ঞান লাভ করেছে (যেহেতু আমি আপনার উত্তরটি দেখার আগে আমি এই ধরণের পদ্ধতির কথা ভাবছিলাম না) অথবা আপনার উত্তরটি বগি হওয়ার সময় অপেক্ষা করতে বসেছি। এখানে আমি mentioned৮ টি উল্লেখ করেছি def f(s):x=s.pop(0);return[]<s<s.pop(0)>'>'and(f(s),f(s))[x<'1']or xএবং পাইথন 3 এর জন্য আপনার সামান্য সম্পাদনার দূরত্ব রয়েছে def f(s):z=s.pop;r=z(0);return s and':'<z(0)and(f(s),f(s))[r<'1']or r
মিচ শোয়ার্টজ

ধন্যবাদ @ মিচশওয়ার্টজ, বামের পরিবর্তে ডান দিক থেকে অনেকটা পার্স,
গোটচা

1
অন্যথায়, ডান পরিবর্তে বাম, ~~~
ওয়ার্ল্ডসেন্ডার

1

এসইডি, 75 74 68 (-র জন্য 40 + 1) 41

:
s,(.*)1\?(.):.,\1\2,
s,(.*)0\?.:,\1,
t

আপনি সম্ভবত তার মন্তব্যে @ মিচশওয়ার্টজ এর কৌশলটি ব্যবহার করে এটি কেটে ফেলতে পারেন , যদিও আপনাকে (.*)অতিরিক্ত প্রতিস্থাপনের শব্দটি ব্যবহার করতে এবং যুক্ত করতে হতে পারে ।
নিল

@ নীল, আপনি ঠিক থাকতে পারেন, তবে কীভাবে এটি কাজ করবেন তা আমি বুঝতে পারি না।
রিলে 21


@ মিচশওয়ার্টজ হে, ফাঁকা লেবেলগুলি কি কাজ করে? তবে আমি মনে করি আপনি এর \3পরিবর্তে বোঝাতে চেয়েছিলেন \2। এছাড়াও, আপনি ;পেতে লাইনগুলিতে যোগদান করতে পারেন :;s/(.*)(1\?(.):.|0\?.:)/\1\3/;t
নিল

@ নীল আমার \3তাই ছিল তার মানে আমি ভুল করে আগের সংস্করণটি অনুলিপি করেছি। আমি সেমিকোলন সম্পর্কে জানি। তবে ইয়াক, আপনি কেন সেমিকোলন ব্যবহার করতে চান।
মিচ শোয়ার্জ

0

বাশ + জিএনইউ ইউটিলিটিস, 42

rev|sed -r ':
s/(.):.\?0|.:(.)\?1/\1\2/
t'

অন্যান্য প্যাটার্ন-ম্যাচের উত্তরের বেশিরভাগের অনুরূপ ধারণা।

ভাবনা


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