স্বর অক্ষর এবং অঙ্ক রান


14

কেবলমাত্র বর্ণানুক্রমিক ASCII অক্ষর সমন্বিত এবং একটি অক্ষর দিয়ে শুরু করে একটি ইনপুট স্ট্রিং দেওয়া হয়েছে, প্রতিটি অক্ষরটি অঙ্কের সাথে অদলবদল করে যা অনুসরণ করে।

একটি রান ক্রমাগত অক্ষর বা অঙ্কের ক্রম। নোট করুন যে ক্ষেত্রে অক্ষরের একটি রান দিয়ে ইনপুট স্ট্রিংটি শেষ হয়, সেখানে এই রানটি আউটআউট করা যায়।

ওয়াক-থ্রো উদাহরণ

উদাহরণস্বরূপ, ইনপুট স্ট্রিং দেওয়া uV5Pt3I0:

  1. অক্ষরের রান এবং অঙ্কের রান পৃথক করুন: uV 5 Pt 3 I 0
  2. জোড়া জোড়া শনাক্ত করুন: (uV 5) (Pt 3) (I 0)
  3. জোড়া রান অদলবদল: (5 uV) (3 Pt) (0 I)
  4. শ্রেণীবদ্ধভাবে সংযুক্ত করা: 5uV3Pt0I

উদাহরণ

uV5Pt3I0 -> 5uV3Pt0I
J0i0m8 -> 0J0i8m
abc256 -> 256abc
Hennebont56Fr -> 56HennebontFr
Em5sA55Ve777Rien -> 5Em55sA777VeRien
nOoP -> nOoP

এটি তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর। ব্যাখ্যা উত্সাহিত হয়।

উত্তর:


9

জেলি , 9 বাইট

~ṠŒg⁸ṁṭ2/

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

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

~ṠŒg⁸ṁṭ2/  Main link. Argument: s (string)

~          Apply bitwise NOT.
           Bitwise operators attempt to cast to int, so if c is a digit, this
           yields ~int(c), a negative number.
           If c cannot be cast to int, ~ will yield 0.
 Ṡ         Take the sign.
           We've now mapped digits to -1, non-digits to 0.
  Œg       Group consecutive equal elements.
    ⁸ṁ     Mold s as the result, grouping run of digits and runs of non-digits.
       2/  Reduce all pairs of runs by...
      ṭ        tack, appending the first run of the pair to the second run.

15

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

(\D+)(\d+)
$2$1

এই Regex প্রতিস্থাপন (\D+)(\d+)সঙ্গে $2$1। এর অর্থ কী তা যদি আপনি না জানেন তবে তা ভাঙা যাক।

এর \Dঅর্থ 'কোনও সংখ্যার নয় এমন কোনও কিছুর সাথে মিল'। \dমানে 'একটি সংখ্যার সাথে মিলে যাওয়া'। +সাইন মানে 'একবার অন্তত এই ম্যাচে কিন্তু সম্ভব যতবার যেমন মেলানোর চেষ্টা'। বন্ধনী একটি গোষ্ঠী সংজ্ঞায়িত করে। প্রথম গ্রুপটি (\D+)এবং দ্বিতীয়টি(\d+)

দ্বিতীয় লাইনে আমরা বলি যে আমরা দ্বিতীয় গ্রুপের সাথে যা কিছু মিলেছে তার সাথে প্রথম গ্রুপের সাথে যা কিছু মিলেছে তা অনুসরণ করতে চাই। এটি কার্যকরভাবে অক্ষর এবং অঙ্কের রান অদলবদল করে।

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


7

হাস্কেল , 58 56 বাইট

২ লাইট বন্ধ করে দেওয়ার জন্য @ লাইকোনিকে ধন্যবাদ

f""=""
f s|(a,(b,y))<-span(<':')<$>span(>'9')s=b++a++f y

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

Ungolfed:

f "" = ""
f string | (letters, afterLetters) <- span (> '9') string
         , (numbers, afterNumbers) <- span (< ':') afterLetters
         = numbers ++ letters ++ f afterNumbers

সঙ্গে দুটি বাইট সংরক্ষণ করুন (a,(b,y))<-span(<':')<$>span(>'9')s
লাইকনি

1
আরও বেশি দিয়ে সংরক্ষণ করুন (a,(b,y):_)<-lex<$>span(>'9')s: এটি অনলাইনে চেষ্টা করুন!
লাইকনি

@ লাইকনি: টিপটির জন্য ধন্যবাদ! আমি কীভাবে lexকাজ করে সে সম্পর্কে সত্যই আমি পরিষ্কার নই , তাই আপাতত এগুলি অন্তর্ভুক্ত করা থেকে বিরত থাকব। যাই হোক না কেন, জেনে রাখা ভাল যে প্রিলিডে এর মতো কিছু রয়েছে
জুলিয়ান ওল্ফ




6

জাপট (v2.0a0), 16 বাইট

q/(\d+/ ò mw c q

এটি অনলাইন পরীক্ষা!

দ্রষ্টব্য: এটি একটি অস্থির আলফা, সুতরাং যদি এই লিঙ্কটি বিরতি হয় তবে আপনি v1.4.4 এ কিছুটা দীর্ঘতর সংস্করণ ব্যবহার করতে পারেন: এটি অনলাইনে পরীক্ষা করুন!

ব্যাখ্যা

q/(\d+/ ò mw c q  : Implicit input              "uV5Pt3I0"
q                 : Split input on
 /(\d+/           :   runs of digits, keeping each run. (This compiles to the regex /(\d+)/g)
                  : This gives                  ["uV","5","Pt","3","I","0",""]
        ò         : Take every pair of items.   [["uV","5"],["Pt","3"],["I","0"],[""]]
          m       : Map each pair by
           w      :   reversing.                [["5","uV"],["3","Pt"],["0","I"],[""]]
             c    : Flatten into one array.     ["5","uV","3","Pt","0","I",""]
               q  : Join into a single string.  "5uV3Pt0I"
                  : Implicit: output result of last expression

এটি করার কোনও উপায় আছে কিনা তা বের করার চেষ্টা করছিল ò
শেগি

5

সিজেম , 32 30 28 বাইট

q{i_64>X\:X^{])[}&c}/]]2/Wf%

সিজেমের কোনও রেজেক্স নেই এবং কোনও "ডিজিট এবং অক্ষরে বিভক্ত" বা হোয়াট নোট নেই, সুতরাং এটি একধরনের বেদনাদায়ক ছিল।

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

ব্যাখ্যা

q      e# Read the input.
{      e# Do the following for every char c:
 i     e#  Get c's codepoint.
 64>   e#  Check if it's greater than 64 (i.e. if it's a letter), pushing 1 or 0.
 X     e#  Push X (variable predefined to 1).
 \:X   e#  Store whether c was a letter or digit into X.
 ^{    e#  If (old X) XOR (new X) is 1:
  ]    e#   Close the current array.
  )    e#   Pull out its last character.
  [    e#   Open a new array.
 }&    e#  (end if)
 c     e#  Turn the codepoint back into a character. This also shoves it into the new array, 
       e#  in case one was opened.
}/     e# (end for)
]      e# Close the final array, since it hasn't been closed yet.
]      e# Wrap the whole stack into an array.
2/     e# Split elements into groups of 2.
Wf%    e# Reverse each group.
       e# Implicitly flatten and print.

4

গেমা , 11 টি অক্ষর

<L><D>=$2$1

নমুনা রান:

bash-4.4$ gema '<L><D>=$2$1' <<< 'Em5sA55Ve777Rien'
5Em55sA777VeRien

সুতরাং ... সংক্ষিপ্ত। মানে, এটি কোনও গল্ফের ভাষা নয় এবং কেবল ১১? কি দারুন.
এরিক আউটগল্ফার

হ্যাঁ, তবে কেবলমাত্র সেই কাজের জন্য যা একই ইনপুটটিকে দু'বার স্পর্শ করার প্রয়োজন হয় না। তারপরে তা হয়ে ওঠে দুঃস্বপ্ন। ☹
ম্যান্যাটওয়ার্ক

আপনার অন্য একটি পোস্টের মাধ্যমে জেমাকে খুঁজে পেয়েছে ... দুর্দান্ত ভাষা। আপনি জেমাকে কতটা অস্পষ্ট বলবেন?
জোনা

@ জোনাহ, আমি বলব এর একমাত্র অস্পষ্ট অংশ হল ডোমেন। যদিও এটি আংশিক কারণ বৈশিষ্ট্যটি আন্ডার-ডকুমেন্টেড। অন্যথায় ভাষা হ'ল দুর্দান্ত কিন্তু বেদনাদায়ক সীমিত বৈশিষ্ট্যগুলির সংগ্রহ। (উদাহরণস্বরূপ শনাক্তকারীরা শিলা, তবে তারা যদি নিয়মিত অভিব্যক্তি চরিত্রের ক্লাসগুলির মতো সংযুক্ত করা যায় তবে তারা অনেক বেশি শক্তিশালী হবে))
manatwork

90 এর দশকে জেমার কতটা জনপ্রিয় ছিল? এবং এটির কোনও আধুনিক প্রতিযোগী / প্রতিযোগী রয়েছে? আপনি এটি কাজের জন্য ব্যবহার করেন বা এটি মজাদার জন্য খুঁজে পেয়েছেন?
জোনা


2

জাপট, 18 বাইট

r"(%D+)(%d+)""$2$1

এটা পরীক্ষা করো


আপনি ব্যাখ্যা যোগ করতে পারেন?
জিম

@ জিম, এটি আমার জেএস সলিউশনের একটি বন্দর (জাপাটি জেএসে স্থানান্তরিত করে), যা বেশ স্ব-বর্ণনামূলক হওয়া উচিত। যদি তা না হয় তবে Okx এর রেটিনা সমাধানে ব্যাখ্যাটি দেখুন; আমার দুজনেই ঠিক একই কাজ করে।
শেগি

4
??? @ ডাউনভোটার: দয়া করে প্রতিক্রিয়া জানান।
শেগি

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

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

2

সেড, 29 বাইট

s/([^0-9]+)([0-9]+)/\2\1/g

-আর দিয়ে চালান।

গ্রুপগুলি ক্যাপচার করে এবং তাদের বিপরীত ক্রমে প্রতিস্থাপন করে।


আপনি সংক্ষিপ্ত [A-Za-z]করতে পারেন [^0-9]। তবে আপনার কোডের অংশ হিসাবে আপনাকে পতাকাটি গণনা করতে হবে।
ডেনিস

পতাকাটি কত হিসাবে গণনা করা হয়?
এটি গাই

মধ্যে পার্থক্য sed <command>এবং sed -r <command>, তাই তিন বাইট।
ডেনিস

@ ডেনিস, এটি sed -f filenameএবং sed -rf filename(বা এর মধ্যে sed -e 'command'এবং sed -re 'command') এর মধ্যে পার্থক্য : একক বাইট।
টবি স্পিড 12

প্রশ্নটির মূল বাক্যাংশটি (" চিঠি দিয়ে শুরু করা ") মিস করেছি , তাই s/([a-z]+)([0-9]+)|([0-9]+)([a-z]+)/\2\1\4\3/gi48 বাইটে ছিল। অন্যথায়, অনেক একই।
টবি স্পিড 12

2

জেলি , 12 বাইট

e€ØDŒg⁸ṁs2Ṛ€

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

ব্যাখ্যা:

e€ØDŒg⁸ṁs2Ṛ€ Accepts a string
eۯD         Check if each char is in ['0'..'9']
    Œg       Split runs of 0s and 1s (respectively letter and digit runs)
      ⁸ṁ     Replace with input, keeping the split
        s2   Get pairs of runs, last left alone if letter run
          Ṛ€ Swap each pair

2
আপনি ব্যাখ্যা যোগ করতে পারেন?
জিম

@ জিম যোগ করেছেন ব্যাখ্যা।
এরিক আউটগল্ফার

2

পিএইচপি, কোনও রেজেস, 73 বাইট নেই

for(;a&$c=$argn[$i++];$p=$c)$c<A?print$c:$s=($p<A?!print$s:$s).$c;echo$s;

পাইপ হিসাবে চালান -nRবা এটি অনলাইনে পরীক্ষা করুন

ভাঙ্গন

for(;a&$c=$argn[$i++];  # loop through input
    $p=$c)                  # 2. remember character
    $c<A                    # 1. if digit
        ?print$c            # then print it
        :$s=($p<A           # else if previous character was digit
            ?!print$s           # then print and reset string
            :$s                 # else do nothing
        ).$c;                   # append current character to string
echo$s;                 # print remaining string

আমি চাইছি আপনি এর ~পরিবর্তে ব্যবহার করতে পারেনa&
জার্গ হালসারম্যান


1

সি #, 71 বাইট

s=>System.Text.RegularExpressions.Regex.Replace(s,@"(\D+)(\d+)","$2$1")

কেবলমাত্র লজ্জার নিয়মিত প্রকাশগুলি সি # তে দীর্ঘ।

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

সম্পূর্ণ / ফর্ম্যাট সংস্করণ:

using System;

class P
{
    static void Main()
    {
        Func<string, string> f = s => System.Text.RegularExpressions.Regex.Replace(s, @"(\D+)(\d+)", "$2$1");

        Console.WriteLine(f("uV5Pt3I0"));
        Console.WriteLine(f("J0i0m8"));
        Console.WriteLine(f("abc256"));
        Console.WriteLine(f("Hennebont56Fr"));
        Console.WriteLine(f("Em5sA55Ve777Rien"));
        Console.WriteLine(f("nOoP"));

        Console.ReadLine();
    }
}

আপনি কি টিআইও-তে কোনও লিঙ্ক যুক্ত করতে পারেন ?
জিম

@ জিম সম্পন্ন আমি সাধারণত এটি প্রাথমিকভাবে যোগ করতে খুব অলস, বিশেষত যখন আমি এখনও কোনও উন্নতি খুঁজছি।
TheLethalCoder

1

ক্লোজার, 104 88 বাইট

ওহ রেজেক্স সত্যই কার্যকর ... যাইহোক ( টিআইও ):

#(apply str(flatten(map reverse(partition-all 2(partition-by(fn[i](< 47(int i)58))%)))))

partition-byfunction ফাংশনটির রিটার্ন মানের উপর ভিত্তি করে একটানা রানগুলিতে partition-allবিভক্ত হয়, 2 এর পার্টিশনে বিভক্ত হয় (আমরা যে map reverseজোড়গুলিকে অদলবদল করব) তাদের বিপরীত করে দেয়,flatten নেস্টেড তালিকা কাঠামো থেকে মুক্তি পায় এবং শেষ পর্যন্ত আমরা একটি স্ট্রিং আউটপুট করব। partitionপরিবর্তে যদি ব্যবহৃত হয়partition-all এবং আমাদের বিশিষ্ট অংশগুলি থাকে তবে শেষটিটি বাতিল হয়ে যায়।

মূল ব্যবহৃত বাগাড়ম্বরপূর্ণ কিন্তু মজা (juxt second first)এবং (set"0123456789")পরিবর্তে reverseও ব্যাপ্তিগুলি পূর্ণসংখ্যা হওয়া ASCII।

#(apply str(flatten(map(juxt second first)(partition-all 2(partition-by(comp not(set"0123456789"))%)))))

আপনি টিআইও এবং একটি ব্যাখ্যা একটি লিঙ্ক যুক্ত করতে পারেন ?
জিম

1

কোয়াডআর , 15 বাইট

(\D+)(\d+)
\2\1

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

Okx থেকে স্পষ্টত চুরির ব্যাখ্যা :

এই Regex প্রতিস্থাপন (\D+)(\d+)সঙ্গে \2\1। এর অর্থ কী তা যদি আপনি না জানেন তবে তা ভাঙা যাক।

এর \Dঅর্থ 'কোনও সংখ্যার নয় এমন কোনও কিছুর সাথে মিল'। \dমানে 'একটি সংখ্যার সাথে মিলে যাওয়া'। +সাইন মানে 'একবার অন্তত এই ম্যাচে কিন্তু সম্ভব যতবার যেমন মেলানোর চেষ্টা'। বন্ধনী একটি গোষ্ঠী সংজ্ঞায়িত করে। প্রথম গ্রুপটি (\D+)এবং দ্বিতীয়টি(\d+)

দ্বিতীয় লাইনে আমরা বলি যে আমরা দ্বিতীয় গ্রুপের সাথে যা কিছু মিলেছে তার সাথে প্রথম গ্রুপের সাথে যা কিছু মিলেছে তা অনুসরণ করতে চাই। এটি কার্যকরভাবে অক্ষর এবং অঙ্কের রান অদলবদল করে।


1

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

$args|%{$_ -replace '(\D+)(\d+)','$2$1'}

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


পাওয়ারশেল এটির জন্য বেশ আদর্শ, এটি দেখে যে এটি রেগেক্স অনুসন্ধান এবং বাক্সের বাইরে প্রতিস্থাপনকে সমর্থন করে। রেপেক্স সমাধানের জন্য প্রপসগুলি @ ওকএক্স এ যান ।


1

পিপ , 17 বাইট

aR-C+XL.C+XD{c.b}

Takes input as a command-line argument. Try it online!

Explanation

This uses the standard regex-replacement strategy, somewhat golfed.

The regex is -C+XL.C+XD, which evaluates to `(?i)([a-z]+)(\d+)`:

   XL       Preset regex variable for lowercase letter: `[a-z]`
  +         Apply + to the regex: `[a-z]+`
 C          Wrap the regex in a capturing group: `([a-z]+)`
-           Apply the case-insensitive flag: `(?i)([a-z]+)`
        XD  Preset regex variable for digit: `\d`
       +    Apply + to the regex: `\d+`
      C     Wrap the regex in a capturing group: `(\d+)`
     .      Concatenate the two regexes: `(?i)([a-z]+)(\d+)`

The replacement is {c.b}, a callback function that concatenates the second group (c) and the first group (b). (The first argument to the function, a, contains the whole match.)

This is three bytes shorter than the naive aR`(\D+)(\d+)``\2\1`.


1

brainfuck, 98 bytes

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

Try it online!

Explanation

This program maintains a queue of letters than haven't been output yet, and outputs them when appropriate.

The key to this program is >>----[---->+<<<-[>]>]. The three cells right of the input cell start out at zero. If the input is a code point between 1 and 63 inclusive, this moves the pointer one space right and places the input two spaces right of this new position. Otherwise, the pointer moves two spaces right, the cell one space right of the new position becomes 63, and the same 63 is subtracted from the input cell. This neatly divides the input into letters (65-122) and digits (48-57).

,[                       Take first input byte and start main loop
  >>                     Move two cells to the right
  ----[---->+<<<-[>]>]   (See above)
  >>                     Move two cells to the right
                         This cell contains the input if it was a digit, and 0 if input was a letter
  [                      If input was a digit:
   .                     Output digit immediately
   [[-]<]                Zero out digit and working cell
   <<[-]+>>              Set flag so we know later that we've output a digit
  ]
  <                      Move one cell left
                         This cell contains 63 if input was a letter, and 0 if input was a digit
  [                      If input was a letter:
   [-<<<+>>>]            Add 63 back to input letter
   <<<<                  Move to flag
   [                     If a digit has been output since the last letter read:
    -                    Clear flag
    <[<]>                Move to start of queue
    [.[-]>]              Output and clear all queued letters
   ]
   >[-<+>]>              Move input to end of queue
  ]
,]                       Repeat until no input remains
<[-]                     Clear flag if present
<[<]>                    Move to start of queue
[.>]                     Output all queued letters

Congratulation for having a brainfuck answer which is not the longest of the answers!
Jim


0

Mathematica, 129 bytes

(n=NumberString;l=Length;s=Riffle[a=StringCases[#,n],b=StringSplit[#,n]];If[l@a==0,s=#,If[l@a<l@b,AppendTo[s,b[[-2;;]]]]];""<>s)&

Can you add an explanation / ungolfed version?
Jim

nothing much to explain...detects NumberString divides into 2 sets and riffles.Plus some "If" conditions in order to work perfectly
J42161217
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.