বিপরীত ইতিবাচক রান


22

ইনপুট

আপনার ইনপুটটি হ'ল সংখ্যার একটি স্ট্রিং সহ যে কোনও যুক্তিসঙ্গত ফর্ম্যাটে একক-অঙ্কের সংখ্যার তালিকা। ইনপুট খালি হবে না।

আউটপুট

আপনার আউটপুটটি ইনপুট তালিকা হবে তবে ননজারো ডিজিটের প্রতিটি সর্বাধিক রান বিপরীত হবে।

উদাহরণ

ইনপুট বিবেচনা করুন

95883007414830
<--->  <---->

যেখানে ননজারো রানগুলি তীরগুলি দিয়ে চিহ্নিত করা হয়েছে। এই প্রতিটি রানের বিপরীতে, আমরা আউটপুট প্রাপ্ত

38859003841470

বিধি এবং স্কোরিং

আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন। সর্বনিম্ন বাইট গণনা জয়, এবং মান লুফোলগুলি অনুমোদিত নয়।

এই চ্যালেঞ্জটি সম্পর্কিত তবে আরও জটিল, কারণ এতে অতিরিক্ত স্ট্রিং প্রসেসিং অন্তর্ভুক্ত রয়েছে।

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

4 -> 4
00 -> 00
123 -> 321
0010 -> 0010
12000345 -> 21000543
18161604 -> 61618104
95883007414830 -> 38859003841470
010230456078912 -> 010320654021987
357509902003550 -> 575309902005530
2492882377675046 -> 5767732882942064
03026302053000357099 -> 03036202035000753099

লিডারবোর্ড

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

## Language, N bytes

স্ট্রাইকথ্রু ট্যাগ ব্যবহার করে আপনি শিরোনামে পুরানো স্কোর রাখতে পারেন: 57<s>57</s> হিসাবে প্রদর্শিত হবে ।

উত্তর:



8

আইপিওএস , 5 বাইট

'0!r%

%জিরোগুলিতে ইনপুট স্ট্রিং বিভক্ত করে, rপ্রতিটি স্ট্রিংয়ের কমান্ড (বিপরীত) প্রয়োগ করে এবং ফলাফলটি শূন্যগুলিতে ফিরে আসে।


7

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

S`0
O%^$`.

¶
0

এটি অনলাইন চেষ্টা করুন! (একবারে সমস্ত পরীক্ষার কেস চালানোর জন্য সামান্য সংশোধিত।)

ব্যাখ্যা

S`0

0এর চারপাশে ইনপুটটি বিভক্ত করুন , প্রত্যেকটি (সম্ভবত খালি) নিজের লাইনে অ-শূন্য অঙ্কের রান রাখুন।

O%^$`.

এটি প্রতিটি লাইনকে বিপরীত করে:

  • প্রতিটি লাইনে পৃথকভাবে স্টেজ প্রয়োগ করা %
  • প্রতিটি চরিত্রের সাথে পৃথকভাবে মিলছে .
  • $খালি স্ট্রিং (খালি দ্বিতীয় লাইন) দিয়ে বিকল্পের ( ) ফলাফলের দ্বারা এটি বাছাই করা । অর্থাৎ এটি মোটেও বাছাই করে না, যেহেতু সমস্ত ধরণের মানগুলি অভিন্ন।
  • তারপরে সাজানো অক্ষরের ক্রমটিকে বিপরীত করে।

অবশেষে:

¶
0

লাইনফিডগুলি আবার 0এস-এ পরিণত করুন।



5

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

s->replace(s,r"[^0]+",reverse)

এটি একটি অনামী ফাংশন যা একটি স্ট্রিং গ্রহণ করে এবং একটি স্ট্রিং প্রদান করে। এটি কল করতে, এটি একটি ভেরিয়েবলের জন্য বরাদ্দ করুন।

replaceফাংশন একটি ফাংশন প্রতিটি খেলায় প্রয়োগ ফলাফল নিয়ে একটি রেগুলার এক্সপ্রেশন এর ম্যাচ প্রতিস্থাপন করার ক্ষমতা প্রদান করে। এক্ষেত্রে আমরা ম্যাচযুক্ত পাঠ্যে প্রয়োগ করা ফাংশনের [^0]+ফলাফলের সাথে সেই রানগুলি ব্যবহার করে এবং প্রতিস্থাপন করতে পারি reverse

সমস্ত পরীক্ষার কেস অনলাইনে যাচাই করুন!


4

রেটিনা, 25 24

O^$#`[^0](?=(.*?0)*)
$#1

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

মার্টিনকে ধন্যবাদ 1 বাইট সংরক্ষিত!

বিপরীত ক্রমে অঙ্কটি অনুসরণ করে এমন শূন্যের সংখ্যা দ্বারা ননজারো অঙ্কগুলি সাজান।

একটি সংক্ষিপ্ত প্রোগ্রাম পেতে প্রতি লাইন মোডের চতুর ব্যবহারের জন্য মার্টিনের সমাধান দেখুন !


4

জल्फ, 8 বাইট

RΜGi0λ_0

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

ব্যাখ্যা

RΜGi0λ_0
  Gi0     split input on zeroes
 Μ   λ_   map over reversal as a lambda
R      0  join by zeroes

কোড স্ক্রিনটি যদি ল্যাম্বদার মতো লাগে তবে এটি স্কুইট করুন।

সমতুল্য 8-বাইট উত্তর:

RΜGi0΅O0

একই জিনিস, তবে এটি ΅Oপরিবর্তে (স্ট্রিং মিরর ল্যাম্বদা) ব্যবহার করে।


আমি বলব এটি মজাদার আকারে কিছু পাঠ্যের মতো দেখায় যখন আমি এটি স্ক্রিন্ট করি। আমার এই টেলিস্কোপটি দূরে রাখা উচিত।
বিড়াল

1
@ কেট না, না, রাখুন, তবে ল্যাম্বদাটি দেখুন যখন আপনি করেন।
কনর ও'ব্রায়ান


3

পাইথন, 58 50 বাইট

lambda x:"0".join([n[::-1] for n in x.split("0")])

একটি স্ট্রিং এক্সে নিয়ে যায় এবং জিরোতে বিভক্ত হয় এবং বিভক্ত প্রতিটি উপাদানকে বিপরীত করে একটি শূন্য যোগ করে এবং এই বিয়োগটি শেষ শূন্যকে ফেরত দেয়।


1
পিপিসিগিতে আপনাকে স্বাগতম :) আপনি যা করতে সক্ষম হবেন "0".joinএবং তারপরে সংযোজন এবং স্লাইসটি ফেলে দিন।
FryAmTheEggman

@ ফ্রাইআম দ্য এজম্যান টিপটির জন্য ধন্যবাদ
1232

কোনও সমস্যা নেই :) আপনি ]এবং এর মধ্যে স্থানও সরাতে পারেন for। আপনি চাইলে আরও পয়েন্টারের জন্য আমাদের টিপস পৃষ্ঠাটি দেখতে পারেন।
FryAmTheEggman

7
lambda x:"0".join(n[::-1]for n in x.split("0"))
orlp

3

গণিত, 30 বাইট

Join@@Reverse/@#~SplitBy~Sign&

যেমন Join@@Reverse/@#~SplitBy~Sign&[{1,2,3,0,0,5,9,0}]={3, 2, 1, 0, 0, 9, 5, 0}


2

পাওয়ারশেল v2 +, 45 বাইট

($args-split0|%{-join$_[$_.length..0]})-join0

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

ব্যাখ্যা

এটি কীভাবে কাজ করে তার একটি উদাহরণ - ধরা যাক 123045ইনপুট $args। পরে -splitউপর 0, পাইপলাইন একটি অ্যারের থাকতে হবে (123,45)। প্রথম লুপটির সাথে |%{...}বর্তমান উপাদানটির $_সমান 123পরিমাণ রয়েছে, যা পরে স্পষ্টভাবে স্ট্রিং হিসাবে নিক্ষেপ করা হয়, তারপরে []সূচকের সাথে বিপরীত হয় । এটি ('3','2','1')এটিকে একটি চর-অ্যারে হিসাবে তৈরি করে। লুপগুলি -joinসেটিকে আবার স্ট্রিতে ফেলে দেয় "321"এবং পাইপলাইনে রেখে দেয়। পরবর্তী (শেষ) লুপ পুনরাবৃত্তি ইনপুটটিকে উল্টায় "54"। তাই এখন আমাদের পাইপলাইন হয় "321", "54"। এটি পেরেন্সে এনপ্যাপুলেটেড ()তাই এটি একটি অ্যারে রূপান্তরিত হয়, এবং -joinফলস্বরূপ আউটপুট স্ট্রিং উত্পাদন করতে শূন্যের সাথে একসাথে ফিরে ফিরে আসে re"321054"। এটি পাইপলাইনে রেখে গেছে এবং কনসোলে আউটপুট অন্তর্ভুক্ত।

যদি মূল ইনপুটগুলিতে পরবর্তী শূন্যগুলি থাকে তবে অ্যারেটি নাল উপাদান দ্বারা বিস্তৃত হবে, সুতরাং আউটপুটে সঠিক শূন্য রয়েছে। উদাহরণস্বরূপ, 1230045-split0রূপান্তরিত হয় (123,,45)এবং জিনিসগুলি উপরের মতো চলতে থাকে।



2

ফ্যাক্টর, 35 বাইট

পাইফন ও ক্লোজারকে মারধর, বুয়া!

[ "0"split [ reverse ] map "0"join ]

এই বেনামে ফাংশনটি এই পাইথন উত্তরের আক্ষরিক অনুবাদ ।

এটি বেশ সহজ, কেবল জিরোগুলিতে স্ট্রিংকে বিভক্ত করুন, ফলাফলের অ্যারের প্রতিটি উপাদানকে বিপরীত করুন এবং এর সাথে সমস্ত উপাদানগুলিতে (শূন্য দৈর্ঘ্যের স্ট্রিং সহ) যোগ দিন "0"

সমস্ত পরীক্ষার ক্ষেত্রে এটির উদাহরণ রয়েছে:

IN: scratchpad auto-use {
        "4"
        "00"
        "123"
        "0010"
        "12000345"
        "18161604"
        "95883007414830"
        "010230456078912"
        "357509902003550"
        "2492882377675046"
        "03026302053000357099"
        }
        [ 
          "0" split [ reverse ] map "0" join
        ]
        map .

{
    "4"
    "00"
    "321"
    "0010"
    "21000543"
    "61618104"
    "38859003841470"
    "010320654021987"
    "575309902005530"
    "5767732882942064"
    "03036202035000753099"
}

"00120"-> { "" "" "12" "" }-> { "" "" "21" "" }->"00210"


2

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

r%(0:t)=r++0:[]%t
r%(h:t)=(h:r)%t
r%_=r
([]%)

পুনরাবৃত্তভাবে বিপরীত rখণ্ডটি এতদূর পর্যন্ত জমা করে , যখন 0এটি পৌঁছে যায় তখন তা প্রিনড করে । যখন বাকী স্ট্রিং খালি থাকে তখন এটিও স্রাব হয় r

প্রথম দুটি কিছু কোড পুনরাবৃত্তি করেছিল, তবে আমি তাদের সংযুক্ত করার জন্য আরও ছোট উপায় খুঁজে পাইনি (45 এবং 47 বাইট):

r%(h:t)|h<1=r++h:[]%t|1>0=(h:r)%t
r%_=r
([]%)

r%l|0:t<-l=r++0:[]%t|h:t<-l=(h:r)%t
r%_=r
([]%)

আমি মনে করি আপনার # 2 লাইনে আরও একটি জুটি বন্ধনী প্রয়োজন:r%(h:t)=(h:r)%t
নিমি


1

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

স্ট্রিং সংস্করণ:

s=>s.replace(/[^0]+/g,r=>[...r].reverse().join``)

@ কেভিন লউকে একটি বাইট সংরক্ষণ করে!

অ্যারে সংস্করণ (60 বাইট):

a=>a.map((n,i)=>n?a[z-i+[...a,0].indexOf(0,i)]:(z=i,0),z=-1)

1

জে, 20 18 বাইট

0}:@;@(<@|.;.1)@,]

এই সাহায্য করার জন্য Zgarb ধন্যবাদ! একটি সঠিক আর্গুমেন্ট হিসাবে একটি স্থান-বিভাজিত তালিকা নেয়।

-২ বাইট জাগরবকে ধন্যবাদ!


1

ক্লোজার / ক্লোজার স্ক্রিপ্ট, 44 টি অক্ষর

#(flatten(map reverse(partition-by pos? %)))

অন্যদের মতো একই সমাধান, দীর্ঘ ক্রিয়াকলাপের নামগুলির জন্য আরও ভার্জোজ ধন্যবাদ। এর কারণেই এটি পোস্ট করা হয়নি, তবে এটি অন্য কিছু উত্তরকে মারধর করে তবে কেন নয়?

যে কোনও সিকোয়েন্স টাইপের কাজ করে। ক্লজিউরস্ক্রিপ্টে এটি স্ট্রিংগুলিতেও কাজ করে যেহেতু স্ট্রিংগুলি অক্ষরের তালিকাগুলি হিসাবে প্রক্রিয়াজাত হয়, যা সত্যিকার অর্থে মাত্র 1-দৈর্ঘ্যের স্ট্রিং, যা পছন্দ মতো সংখ্যায় বাধ্য হয় pos?


1

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

import Data.Lists
(reverse=<<).split(oneOf"0")

ব্যবহারের উদাহরণ: (reverse=<<).split(oneOf"0") $ "0123004500678090"-> "0321005400876090"

দুঃখজনকভাবে splitফাংশনটির জন্য ব্যয়বহুল আমদানি প্রয়োজন। প্রতিটি ইনপুট তালিকা বিভক্ত করুন 0, উদাহরণস্বরূপ split(oneOf"0") "0120030"-> ["","0","12","0","","0","3","0",""], প্রতিটি অংশ বিপরীত এবং একক স্ট্রিং মধ্যে সংক্ষিপ্ত।



1

জাভা, 179 বাইট (আমদানি সহ)

import java.util.*;static void r(String s){StringJoiner x= new StringJoiner("0");for(String a:s.split("0",s.length())){x.add(new StringBuilder(a).reverse());}System.out.print(x);}

একটি স্ট্রিং ইনপুট নেয় এবং অক্ষরগুলি শূন্য দ্বারা বিভক্ত করে তারপরে স্ট্রিংজাইনার শ্রেণিতে অ্যাড পদ্ধতিটি কল করে তাদের আবার যুক্ত করে।


1

ওরাকল এসকিউএল 11.2, 131 123 বাইট

এক্সএমএল ফাংশন আপত্তিজনক।

SELECT LISTAGG(REVERSE(COLUMN_VALUE||''))WITHIN GROUP(ORDER BY rownum)FROM XMLTABLE(('"'||REPLACE(:1,'0','","0","')||'"'));

1

পার্ল, 22 বাইট

-pবিকল্পের জন্য +1 সহ :

s/[^0]+/reverse$&/eg

এটি একটি খুব তুচ্ছ বিকল্প - খুব বিরক্তিকর জন্য দুঃখিত। মনে রাখবেন যে যদি আপনার ইনপুটটি নিউলাইন-টার্মিনেট হয় (যেমন perl -pe 's/[^0]+/reverse$&/eg' <<<21000543ব্যাশে ব্যবহার করা) তবে এটি অঙ্কগুলি সহ নিউলাইনটি ধরবে - ব্যবহার echo -nবা printfতা এড়াতে। বিকল্পভাবে, অতিরিক্ত অতিরিক্ত বাইটের জন্য, চরিত্রের শ্রেণীতে পরিবর্তন করুন [1-9]এবং আপনি প্রতি লাইনে অনেকগুলি ইনপুট সরবরাহ করতে পারেন।


1

সি, 105 বাইট

#define x(o)for(p=s;*s&&'0'o*s;++s);for(r=s;r-->p;putchar(*r));
f(s,p,r)char*s,*p,*r;{x(^)x(==)*s&&f(s);}

fনুল-টার্মিনেটেড স্ট্রিং হিসাবে অঙ্কের তালিকার সাথে কল করুন এবং এটি সঠিক আউটপুট প্রিন্ট করবে।

অবহেলিত এবং ব্যাখ্যা:

f(s,p,r)
char*s,*p,*r; // K&R style to avoid repeating `char`
{

    // x(^)x(==) expands to...

    // Find the next zero digit
    for(p = s; *s && '0' ^ *s; ++s)
        ;

    // Print that run backwards
    for(r = s; r-- > p; putchar(*r))
        ;

    // Find the next non-zero digit
    for(p = s; *s && '0' == *s; ++s)
        ;

    // Print that run backwards (no difference, it's all zeros)
    for(r = s; r-- > p; putchar(*r))
        ;

    // If there's more string, recurse
    *s && f(s);
}

কলিরুতে এটি সরাসরি দেখুন


0

পার্ল 5, 52 বাইট

একটি সাবরুটিন:

{$_=pop;y/0/ /;map$i.=reverse,split/\b/;$i=~y/ /0/r}

-a(স্ট্রবেরি অন্তত) কাজ করে না যখন ইনপুট স্ট্রিং প্রান্ত 0, যেহেতু split/\b/অন্তর্ভুক্ত $/সঙ্গে 0
এমএস 210

0

আসলে, 22 বাইট

k"a%sa"%'0@s♂R'0j#pXdX

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

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

ব্যাখ্যা:

k"a%sa"%'0@s♂R'0j#pXdX
k"a%sa"%                surround input with "a" characters
        '0@s            split on 0
            ♂R          reverse each piece
              '0j       join on 0
                 #pXdX  listify, remove first and last element (the "a"s)

0

সি #, 131 বাইট ##

সমাধান ত্রুটিযুক্ত!

string j(string i){foreach(var s in i.Split('0'))if(s!="")i=i.Replace(s,new string(s.ToCharArray().Reverse().ToArray()));return i;}

ungolfed:

string j(string input)
    {

        string[] a = input.Split('0');

        foreach (string s in a)
        {
            if (s!="")
            input=input.Replace(s, new string(s.ToCharArray().Reverse().ToArray()));
        }

        return input;
    }

1
আমি বিশ্বাস করি যে যখন একটি স্ট্রিংটি বিপরীত করা উচিত তখন অন্যটির উপসেট হয় তখন এই পদ্ধতিটির একটি ত্রুটি রয়েছে। যদি ইনপুট দেওয়া হয় 01201230তবে এটি ফিরে আসবে 02102130। স্ট্রিং.পরিবর্তন পদ্ধতিটি প্রথম স্ট্রিংয়ের সমস্ত উপস্থিতিকে দ্বিতীয়টির সাথে প্রতিস্থাপন করে। বিপরীত হওয়ার সময় যদি কোনও প্যাটার্ন প্রদর্শিত হয় ( 0120210ফিরে আসবে 0120120) তবে এই বাগটিও ঘটতে পারে ।
জিনারিজ

আমি
এটির

0

সি #, 133 বাইট


Golfed

String m(String s){for(int i=0,p=i;i<s.Length;i++){if(s[i]=='0'){p=i+1;}else{s=s.Insert(p,s[i].ToString()).Remove(i+1,1);}}return s;}

Ungolfed

String m( String s ) {
    // i = Index on the String
    // p = Pointer of the last '0' found
    for (int i = 0, p = i; i < s.Length; i++) {
        if (s[ i ] == '0') {
            // Move the 'p' pointer to the index after this '0'
            p = i + 1;
        } else {
            // Insert the Char at the Index location to the Pointer location 
            //    and remove the one at the Index Location + 1,
            //    since the String was incremented by one char due to the 'Insert()'.
            s = s.Insert( p, s[ i ].ToString() )
                 .Remove( i + 1, 1 );
        }
    }

    return s;
}

সম্পূর্ণ কোড

using System;
using System.Collections.Generic;

namespace Namespace {
    class Program {
        static void Main( String[] args ) {
            List<String> ls = new List<String>() {
                "4",
                "00",
                "123",
                "0010",
                "12000345",
                "18161604",
                "95883007414830",
                "010230456078912",
                "357509902003550",
                "2492882377675046",
                "03026302053000357099"
            };

            foreach (String s in ls) {
                String f = m( s );

                Console.WriteLine( String.Format( "{0,30}", s.Replace( "0", "0 " ) ) );
                Console.WriteLine( String.Format( "{0,30}", f.Replace( "0", "0 " ) ) );
                Console.WriteLine( "" );
            }

            Console.ReadLine();
        }

        static String m( String s ) {
            for (Int32 i = 0, p = i; i < s.Length; i++) {
                if (s[ i ] == '0') {
                    p = i + 1;
                } else {
                    s = s.Insert( p, s[ i ].ToString() ).Remove( i + 1, 1 );
                }
            }

            return s;
        }
    }
}

এখনই লক্ষ্য করা গেছে যে @ ডাউনরেপ_নেশন ইতিমধ্যে এখানে সি # এর জন্য একটি সমাধান পোস্ট করেছে, যা আমার
কোডকে

0

জাভা, 126

a->{String r="",t[]=a.split("0");for(String s:t){r+=new StringBuilder(s).reverse()+"0";}return r.substring(0, r.length()-1);}

আপনি যদি sসামনে দিয়ে ভেরিয়েবলটি ঘোষণা করেন rএবং t[], আপনি sলুপের জন্য প্রকারের ঘোষণাকে বাদ দিতে পারেন ?
সাইয়েস

না, আমি এটি যাচাই করেছি, লুপগুলির জন্য বর্ধিত করার জন্য সদ্য ঘোষিত ভেরিয়েবলের প্রয়োজন।
আশাকরি

হাহ। এটা বিরক্তিকর. ওহ ভাল
সাইয়েস

0

ক্লোজার, 37 বাইট

#(mapcat reverse(partition-by #{0}%))

এর #{0}পরিবর্তে pos?(সাথে একত্রিত করে 1 বাইট সংরক্ষণ করুন %) এবং এর mapcatপরিবর্তে ব্যবহার করে (flatten(map। তবুও ফ্যাক্টরের চেয়ে দীর্ঘ ।

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