আমার কুকুর সত্যিই কি শুনতে


82

আমার কুকুরটিকে রেক্স বলা হয়। যতবার আমি তাকে তিরস্কার করি, তিনি খুব মুগ্ধ হন না এবং আমি যখন তাঁর নামটি উচ্চারণ করি কেবল তখনই আমি তাকে প্রতিক্রিয়া দেখি। যদি আমি বলি

Rex, I told you not to do this! You're making me angry Rex!

তিনি যা শুনেন তা হ'ল

Rex, * **** *** *** ** ** ****! ***'** ****** ** ***** Rex!

চ্যালেঞ্জ : একটি ইনপুট স্ট্রিং প্রদত্ত, আপনার প্রোগ্রামটিকে একই স্ট্রিং আউটপুট করতে হবে যেখানে শব্দের উপস্থিতির অক্ষরগুলি বাদ দিয়ে সমস্ত অক্ষর অক্ষরে তারকাদের পরিবর্তিত করা Rexউচিত, যাকে অবশ্যই বাচ্চারিত করা উচিত। বর্ণমালাবিহীন অক্ষরগুলিও বাদ পড়েছে।

বিশদ : চ্যালেঞ্জটি কেস-সংবেদনশীল, সুতরাং rexএটিও ছোঁয়াচে থাকা উচিত। শব্দটি Rexঅন্য শব্দের অংশ হতে পারে, সুতরাং উদাহরণস্বরূপ anorexicরেন্ডার করতে হবে ***rex**

আপডেট : এই চ্যালেঞ্জের প্রাথমিক পাঠ্যটি কীভাবে আন্ডারস্কোর বা সংখ্যা বা উচ্চারণের অক্ষরগুলি বিবেচনা করা উচিত তা স্পষ্ট করে দেয়নি, আমি এই চরিত্রগুলির জন্য কোনও বিশেষ প্রয়োজন নেই। সুতরাং, যতক্ষণ না অক্ষরে অক্ষরগুলি a-zA-Z(এবং উদাহরণগুলিতে উল্লিখিত ,!".একটিকেও) সঠিকভাবে পরিচালনা করা হয় ততক্ষণ কোনও সমাধান বৈধ ।

পরীক্ষার কেস:

ইনপুট : Rex lives in Rexland.

আউটপুট: Rex ***** ** Rex****.

ইনপুট : To call Rex, just say "Rex".

আউটপুট: ** **** Rex, **** *** "Rex".

ইনপুট : My cat is getting anorexic.

আউটপুট: ** *** ** ******* ***rex**.


27
টেস্ট কেস: Hello! Isn't this ... a nice challenge?কুকুর শুনতে পাচ্ছেন *****! ***'* *** ... * **** *********?? যদি তা হয় তবে আপনি এখন থেকে ঘোড়ায় কথা বলার কথা বিবেচনা করতে পারেন ...
স্টিভি গ্রিফিন

2
আমাদের কি কেবল সমর্থন করা প্রয়োজন a-zA-Z, বা এছাড়াও 0-9এবং / অথবা äëïöüÿãõñáéíóúýàèìòùçইত্যাদি ইত্যাদি? এবং আপনি এই সংক্রান্ত কিছু পরীক্ষার কেস যুক্ত করতে পারেন?
কেভিন ক্রুইজসেন

2
@ কেভিন ক্রুইজসেন যেহেতু প্রাথমিক চ্যালেঞ্জে $ 0-9 $ বা উচ্চারণযুক্ত চরিত্রগুলির উল্লেখ করা হয়নি, তাই তাদের চ্যালেঞ্জের অংশ হিসাবে বিবেচনা করবেন না।
ইয়ান ডেলানয়

7
যেহেতু "কুকুরগুলি ছোট হাতের এবং বড় হাতের মধ্যে পার্থক্য পায় না" , আউটপুট কেস ইনপুট থেকে আলাদা হতে পারে? (উদাহরণস্বরূপ: ইনপুট = "Rex lives in Rexland.", আউটপুট = "rex ***** ** rex****."; বা বিকল্প ইনপুট = "My cat is getting anorexic.", আউটপুট = "** *** ** ******* ***Rex**.")
জোনাথন অ্যালান

5
কেন এই চ্যালেঞ্জটি "ব্লা" এর পরিবর্তে
hBy2Py

উত্তর:


24

রেটিনা , 24 21 বাইট

i`(rex)|(\w)
$1$#2$**

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

ব্যাখ্যা

rexএগুলি স্কেপিংগুলি পাশাপাশি মেলাও সহজ, কারণ ম্যাচগুলি ওভারল্যাপ করতে পারে না। সুতরাং আমরা যদি rexঅন্য বর্ণগুলিকে অগ্রাধিকার দিই তবে সেগুলি একক ম্যাচে আচ্ছাদিত হবে এবং স্বতন্ত্র-চিঠির ম্যাচগুলি স্পর্শ করবে না।

তবে ম্যাচের জন্য যে বিকল্পটি ব্যবহৃত হয়েছিল তার উপর নির্ভর করে আমরা কীভাবে বিভিন্ন জিনিস করব? দুর্ভাগ্যক্রমে, রেটিনার বুস্ট রেজেক্স গন্ধের মতো কোনও শর্তাধীন বিকল্প সংশ্লেষ নেই (এখনও)। তবে আমরা একক প্রতিস্থাপনে উভয় বিকল্পকে অন্তর্ভুক্ত করে এবং এটির মধ্যে কেবল একটির শূন্যস্থান নিশ্চিত করে এটি নকল করতে পারি:

  • $1প্রথম ক্যাপচারিং গ্রুপ, অর্থাৎ (rex)। আমরা যদি rexএটির সাথে মেলে তবে তা সহজেই ফিরে লিখে দেয় (সুতরাং এটি কিছুই করে না), তবে আমরা যদি এটি মেলে না rexতবে $1এটি একটি খালি স্ট্রিং এবং অদৃশ্য হয়ে যায়।
  • $#2$**হিসাবে পড়া উচিত ($#2)$*(*)$#2হয় বার দলের সংখ্যা 2ব্যবহৃত হয়, IE (\w)। আমরা যদি মিলেছে rexএই হল 0, কিন্তু যদি আমরা অন্য কোন ব্যক্তি চিঠি মিলেছে, এই 1$*পরবর্তী চরিত্রটি তার বাম-হাতের ক্রম হিসাবে যতবার পুনরাবৃত্তি করে। সুতরাং এই অংশটি *স্বতন্ত্র-বর্ণের মিলগুলির জন্য একটি একক সন্নিবেশ করায় এবং কিছুই নয় rex

রেটিনা zb এর \aজন্য নেই [a-z]?
লিকি নুন

নিবন্ধন করুন রেজেেক্স স্বাদে নিজেই কোনও বৈশিষ্ট্য যুক্ত করতে আমাকে রেজেক্সকে টোকনাইজ করতে হবে (বা এমনকি আমার নিজের গন্ধটি বাস্তবায়ন করতে হবে)।
মার্টিন ইন্ডার

163

** রেক্সএক্স 151 148 141 বাইট **

(কিন্ডা উপযুক্ত মনে হয়েছিল)

i=arg(1)
m=i
o=translate(m,'',xrange('A','z'),'*')
p=0
do forever
   p=pos('REX',m,p+1)
   if p=0 then leave
   o=overlay(substr(i,p,3),o,p)
end
say o

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

অ-রেক্সএক্সারদের জন্য নোট:

  1. অনুবাদ হ'ল একটি চরিত্র প্রতিস্থাপন ফাংশন (নাম আইবিএম এমএফ-এর একত্রিত নির্দেশিকা থেকে আসে)। এটি স্ট্রিং 3 এর অক্ষরের জন্য স্ট্রিং 1 অনুসন্ধান করে। প্রতিবার এটির সন্ধান করলে এটি স্ট্রিং 2 এ একই অবস্থানের সাথে প্রতিস্থাপন করে। স্ট্রিং 2 খুব ছোট হলে এটি প্যাডের অক্ষর দিয়ে প্যাড করা হয়।

অনুবাদ ফাংশন জন্য এখানে দেখুন

  1. ওভারলে কেবল স্ট্রিং 2 এর উপরে স্ট্রিং 2 -কে নির্দিষ্ট অবস্থানে ওভারলে করে।

ওভারলে ফাংশন জন্য এখানে দেখুন


52
... তবে কুকুরটি ভেবেছিল সে এটিকে রেক্স * এ প্রোগ্রাম করেছে।
গিটারপিকারটি

10
এর মধ্যে কতটি উত্সব নিছক ভাষা নির্বাচনের জন্য ?! : ডি
শেজি

72
@ শেগি কমপক্ষে তাদের সকলের
TheLethalCoder

24

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

s=>s.replace(/rex|\w/gi,m=>m[1]?m:"*")

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

o.innerText=(f=

s=>s.replace(/rex|\w/gi,m=>m[1]?m:"*")

)(i.value="Rex, I told you not to do this! You're making me angry Rex!")
oninput=_=>o.innerText=f(i.value)
<input id=i><pre id=o>


ব্যাখ্যা

s=>            :Anonymous function that takes the string as an argument via parameter s.
s.replace(x,y) :Replace x in s with y.
/rex|\w/gi     :Case-insenstive regular expression that globally matches all occurrences
                of "rex" or any single letter, number or underscore.
                (numbers & underscores will never be included in the input.)
m=>            :Anonymous function that takes each match as an argument via parameter m.
m[1]?          :If string m has a second character, ...
                (Equivalent to m.charAt(1))
m              :Return m, ...
:"*"           :Otherwise return "*".


1
সুন্দর সমাধান!
স্টিভ বেনেট

13

এপিএল (ডায়ালগ ইউনিকোড) , 22 বাইট এসবিসিএস

'rex' '\w'R'\0' '*'1

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

সাধারণ পিসিআরই আর এপিলেস।

⍠1সংবেদনশীলতা কেস সেট করে। কেবল rexনিজের এবং অন্যান্য সমস্ত অক্ষরের সাথে অস্ট্রিস্কগুলি প্রতিস্থাপন করে।


\wআন্ডারস্কোর চরিত্রটি অন্তর্ভুক্ত করে এটি ধরে নিলে এটি রেজেক্স - আমি এপিএল জানি না।
শেগি

@ শেগি ইয়ে, ডায়ালগ এপিএল পিসিআরই ব্যবহার করে তবে ওপি থেকে নিশ্চিত হওয়া যায়নি যে আন্ডারস্কোরগুলি ঘটবে। যেমন অঙ্কগুলি হবে না will
অ্যাডম

অন্যথায় না বললে আমাদের কী তা ঘটতে পারে তা ধরে নেওয়ার দরকার নেই?
শেগি

@ শেগি সাধারণতঃ হ্যাঁ, তবে এটি মনে করে যে যা উল্লেখ করা হয়নি তা ঘটবে না। ওপিতে কেবল কমা, সময়কাল, স্থান এবং বিস্ময়কর বিন্দুর উল্লেখ রয়েছে।
অ্যাডম

হুম ... আমি মনে করি আমি নিশ্চিত হওয়ার অপেক্ষায় থাকব যে তারা ঘটবে না , কারণ আমি \wএখন কয়েকটি উত্তর সম্পর্কে মন্তব্য রেখেছি !
শেগি

11

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

23 বাইট কোড + -pপতাকা।

আমি মার্টিন ইন্ডারের রেগেক্সকে তার রেটিনা উত্তর থেকে (যা পার্লের সাথে সংক্ষিপ্ত আকারে ঘটে বলে ধন্যবাদ \pl) ব্যবহার করেছি এবং কেবল এস /// এর ডান দিকটি মানিয়ে নিতে হয়েছিল।

s%(rex)|\pl%$1//"*"%gie

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


8

রেটিনা , 32 31 বাইট

iS`(rex)
%iT`Ll`*`^(?!rex).*
¶

এটি অনলাইন চেষ্টা করুন! ব্যাখ্যা: শব্দটি rexএবং সমস্ত কিছুর সংঘটনগুলিতে স্ট্রিংকে বিভক্ত করে তবে ম্যাচগুলি রাখে। তারপরে, যে লাইনে শুরু হয় না rex(অর্থাত "" সমস্ত কিছু "), অক্ষরে *s তে পরিবর্তন করুন । অবশেষে, সবকিছু আবার একসাথে যোগদান করুন।


3
কমপক্ষে দ্বিতীয়বারের মতো আমি ভাবছি প্রতিলিপি মোড অ-ম্যাচগুলি
মার্টিন এন্ডার

@ মার্টিনএেন্ডার খুব দেরী করেছেন :
জন ডিভোরাক

8

সি, 99 97 92 86 74 72 72 65 বাইট

f(char*s){*s&&f(s+=strnicmp("Rex",s,3)?!isalpha(*s)||(*s=42):3);}

পেলস আইডিই এনভায়রনমেন্ট ফাংশন স্ট্রিংক্যাম্প সরবরাহ করে (সাথে / সাথে সংকলন করুন)। এই ফাংশনটি strncasecmp এর মতো। এটি এখানে কাজ করে দেখুন (প্রতিস্থাপন ফাংশন সহ)।

আউটপুটটি প্রথম প্যারামিটারে সঞ্চয় করা হয় যা একটি ইন / আউট প্যারামিটার।

জোহান ডু টোইটকে আমাকে জানাতে দেওয়ার জন্য ধন্যবাদ যে পুনরাবৃত্তি সামান্য কম হয়।


এখানে একটি সি পরিবেশ রয়েছে যা স্ট্রান্সকিপি সরবরাহ করেছে যাতে আপনি এটি 69 এ পেতে পারেন I've এটি সিডিতে পেয়েছি।
জোশুয়া

1
@ জোশুয়া ধন্যবাদ সিডি কি?
2501

বোরল্যান্ড সি ++ 4.5
জোশুয়া

7

রুবি, 36 35 32 বাইট

->s{s.gsub(/(rex)|\w/i){$1||?*}}

পরীক্ষা হিসাবে:

f=->s{s.gsub(/(rex)|\w/i){$1||?*}}

tests = [
  ["Rex, I told you not to do this! You're making me angry Rex!", "Rex, * **** *** *** ** ** ****! ***'** ****** ** ***** Rex!"],
  ["Rex lives in Rexland.", "Rex ***** ** Rex****."],
  ["To call Rex, just say \"Rex\".", %q(** **** Rex, **** *** "Rex".)],
  ["My cat is getting anorexic.", "** *** ** ******* ***rex**."]
] 

tests.each do |input, output|
  if f.call(input) == output
    puts "Fine for #{input.inspect}"
  else
    puts "Problem with :\n#{input.inspect}"
    puts f.call(input)
    puts output
  end
  puts
end

এটি ফলাফল:

Fine for "Rex, I told you not to do this! You're making me angry Rex!"

Fine for "Rex lives in Rexland."

Fine for "To call Rex, just say \"Rex\"."

Fine for "My cat is getting anorexic."

6

পিএইচপি, 78 বাইট

<?=preg_replace("#[a-df-qs-wyz]|r(?!ex)|(?<!r)e|e(?!x)|(?<!re)x#i","*",$argn);

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

পিএইচপি, 84 বাইট

<?=preg_replace_callback("#(rex)|\pL#i",function($t){return$t[1]?$t[1]:"*";},$argn);

-1 \wপরিবর্তে বাইট এর \plক্ষেত্রে আন্ডারস্কোর এবং সংখ্যাগুলিও প্রতিস্থাপন করা হয়

\pL[a-z]বা হিসাবে সংক্ষিপ্ত[[:alpha:]]

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


আপনি \wপরিবর্তে ব্যবহার করতে পারেন \pL
অ্যাডম

@ অ্যাডাম আপনাকে ধন্যবাদ এটি আমার দীর্ঘতর পদ্ধতির জন্য কেবলমাত্র 1 বাইটকে খাটো করে তোলে এবং আন্ডারস্কোর বা সংখ্যার ক্ষেত্রে কী করা উচিত তা সত্যিই পরিষ্কার নয়
জার্গ হালসারম্যান


@ অ্যাডাম আমি এটির জন্য একটি অতিরিক্ত বিষয় তুলে ধরেছি এবং কেন আমি আরও উন্নতি পেয়েছি তার দীর্ঘতর পদ্ধতির সম্পাদনা করেছি
জার্গ হালসারম্যান

5

সি (পসিক্সে জিসিসি), 167 118 93 87 বাইট

i,j;f(char*s){for(i=0;j=s[i];i++)strncasecmp("Rex",s+i,3)?s[i]=isalpha(j)?42:j:(i+=2);}

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


f(char*s){for(;*s;s++)strncasecmp("Rex",s,3)?putchar(isalpha(*s)?42:*s):write(1,s-2,3,s+=2);}। কি ধরণের যাদু f(s)char*s;{}? আমি এই সিনট্যাক্স এর আগে কখনও দেখিনি।
ক্রিস্টোফ

ওহ, এটিতে আরও একটি প্যারামিটার ছিল তবে আমি এটি সরিয়ে দিতে ভুলে গেছি।
betseg

সঠিকভাবে কাজ করে না, কারণ ফাংশনে কেবল প্রথম কলটি কাজ করে। এখানে দেখুন: tio.run/nexus/… ফাংশন আকারে সমাধান, যেমন এটির জন্য , অবশ্যই আবার কল করতে এবং সঠিক ফলাফল দিতে সক্ষম হতে হবে।
2501

@ 2501 ধন্যবাদ, স্থির।
betseg

5

পাইথন 2 বা 3, 75 73 70 বাইট

import re;f=lambda s:re.sub('(?i)(rex)|\w',lambda x:x.group(1)or'*',s)

মূলত আমার রুবির উত্তর মত

-২ বাইটস @ ওয়ানড্রক্রিটকে ধন্যবাদ thanks

পরীক্ষা হিসাবে:

tests = [
  ["Rex, I told you not to do this! You're making me angry Rex!", "Rex, * **** *** *** ** ** ****! ***'** ****** ** ***** Rex!"],
  ["Rex lives in Rexland.", "Rex ***** ** Rex****."],
  ["To call Rex, just say \"Rex\".", "** **** Rex, **** *** \"Rex\"."],
  ["My cat is getting anorexic.", "** *** ** ******* ***rex**."]
]


for test_in, test_out in tests:
    print(test_in)
    print(f(test_in))
    print(f(test_in) == test_out)

1
আপনি 2 বাইট সংরক্ষণ করতে পারবেন এর মধ্যে x.group(1) or '*'
ব্যবধানটি

@ ওয়ানড্রিকেট: আপনাকে অনেক ধন্যবাদ, পাইথনে এটি আমার প্রথম গল্ফ উত্তর।
এরিক ডুমিনিল

5

জাভা 8, 187 192 168 164 159 138 বাইট

s->{for(int i=0;i<s.length();System.out.print(s.regionMatches(0<1,i,"rex",0,3)?s.substring(i,i+=3):s.replaceAll("\\w","*").charAt(i++)));}

-২৮ বাইট @ অলিভিগ্রগ্রোয়ারকে ধন্যবাদ।

ব্যাখ্যা:

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

s->{                         // Method with String parameter and no return-type
  for(int i=0;i<s.length();  //  Loop over the characters of the input-String
    System.out.print         //   Print:
     s.regionMatches(1>0,i,"rex",0,3)? 
                             //    If we've found "rex" (case-insensitive):
      s.substring(i,i+=3)    //     Print this REX-word (case-sensitive)
     :                       //    Else:
      s.replaceAll("\\w","*").charAt(i++));
                             //     Print the current character,
                             //     or '*' if it's an alpha-numeric character

@ শেগি এখনই ঠিক করা উচিত। মন্তব্যগুলিতে এটি নির্দিষ্ট করার আগে এটি পোস্ট করা হয়েছিল যে 0-9এবং উচ্চারণযুক্ত অক্ষরগুলি অন্তর্ভুক্ত করা উচিত নয়, কেবল a-zA-Zউচিত।
কেভিন ক্রুইজসেন

আপনি কি সাথে প্রতিস্থাপন "[a-zA-z]"করতে পারেন /[a-z]/i?
শেগি

@ শেগি হ্যাঁ / না জাভা উদাহরণস্বরূপ পাইথন বা সি # এর থেকে কিছুটা আলাদা রেজেক্স সিনট্যাক্স ব্যবহার করে। সুতরাং হ্যাঁ, কেস-সংবেদনশীল রেজেক্স ব্যবহার করা সম্ভব তবে এটি আরও একবার বাইট হবে: "[a-zA-Z]"-> "(?i)[a-z]"
কেভিন ক্রুইজসেন

1
আমি মনে করি আপনার s.regionMatches(0<1,i,"rex",0,3)পরিবর্তে ব্যবহার করা উচিত s.toLowerCase().substring(i,i+(i>l-3?1:3)).equals("rex")
অলিভিয়ার

1
@ কেভিন ক্রুজসেন আপনার বর্তমান কোডটি নিন (168 বাইটে), ভেরিয়েবলটি সরিয়ে l4 বাইট সংরক্ষণ করুন।
অলিভিয়ার

4

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

import re
print re.sub(r'(?i)[a-df-qs-wyz]|r(?!ex)|(?<!r)e|e(?!x)|(?<!re)x','*',input())

আমার ধারণা যে ছোট করা যায়? :)


1
আপনি 2 বাইট অফ অফ আর্গুমেন্টের মধ্যে কমা করার পরে ফাঁকা স্থানগুলি থেকে মুক্তি পেতে পারেন।
মেগো

4

সেড , 37 33 বাইট

-R ফ্ল্যাগের জন্য 36 বাইট সোর্সকোড + 1 বাইট।

s:(rex)|\w:\1*:Ig
s:(rex)\*:\1:Ig

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


@ শেগি মাথা আপ জন্য ধন্যবাদ!
ম্যাক্সিম মিখায়লভ

আপনি এর .পরিবর্তে ব্যবহার করুন\*
ক্রিটিক্সী লিথোস

3

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

/[rR][eE][xX]/=$0
<L1>=\*

নমুনা রান:

bash-4.3$ gema '/[rR][eE][xX]/=$0;<L1>=\*' <<< "Rex, I told you not to do this! You're making me angry Rex!
Rex lives in Rexland.
To call Rex, just say \"Rex\".
My cat is getting anorexic."
Rex, * **** *** *** ** ** ****! ***'** ****** ** ***** Rex!
Rex ***** ** Rex****.
** **** Rex, **** *** "Rex".
** *** ** ******* ***rex**.

বেদনাদায়ক সত্য যে হতে পারে \CRex=$0;<L1>=\*, তবে দুর্ভাগ্যক্রমে $0টেমপ্লেটটি রয়েছে, ম্যাচটি নয়। ☹


3

রেটিনা , 54 50 49 বাইট

গল্ফড 5 বাইট @ মার্টিনইেন্ডারকে ধন্যবাদ

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

i(`[\w-[rex]]
*
(?<!r)e|e(?!x)|r(?!ex)|(?<!re)x
*

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


@ এমিগনা ঠিক বুঝতে পেরেছেন যে আমার সমাধানটি কার্যকর হয় না dex, এটি আপনার দেওয়া *e*সময় দেয় **x
ক্রিটসি লিথোস

আপনি যদি (প্রথম স্তরের পরে উভয় স্তরের গোষ্ঠী করেন তবে আপনাকে iদ্বিতীয় পর্যায়ে কনফিগার করতে হবে না।
মার্টিন এন্ডার

এবং আপনার প্রথম regex হিসাবে লেখা যেতে পারে [a-z-[rex]]
মার্টিন ইন্ডার

@ মার্টিনইন্ডার ধন্যবাদ, আমি প্রথমবারের মতো চরিত্রের ক্লাস দেখছি যেখানে আপনি নির্দিষ্ট চরিত্রগুলি বাদ দিতে পারবেন
ক্রিটিক্সী লিথোস

এগুলি বেশ কয়েকটি স্বাদে বিদ্যমান তবে আমি বিশ্বাস করি তাদের জন্য নেট নেট সিনট্যাক্সটি অনন্য।
মার্টিন ইন্ডার

3

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

{$args|%{$_-replace'(rex)|\p{L}','$1*'-replace'(x)\*','$1'}}

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


আমার ভুল. আমি প্রতিস্থাপন করেছি \wকরতে \p{L}
আন্দ্রে ওদেগোভ

আকর্ষণীয় ধারণা। নোট করুন যে $argsঅ্যারে হিসাবে ব্যবহার করার ফলে পরিণতি হয় যখন জিনিসগুলিকে উদ্ধৃত করা হয়, যেমন একটি উদাহরণ হিসাবে। এবং যদি আপনি যাইহোক প্রথম যুক্তিটি ব্যবহার করেন তবে আপনার প্রয়োজন হবে না foreach
জোয়

@ আন্দ্রেইওদেগোভ আপনি আবার যেতে পারেন \w। পার্শ্ব নোট: ধনুর্বন্ধনী \p{L}সত্যিই প্রয়োজন হয়?
অ্যাডম

1
খুব সুন্দর রেইজেক্স, "$args"-replace'(rex)|\p{L}','$1*'-replace'(x)\*','$1'সামগ্রিকভাবে অনেক খাটো , কোটে মোড়ানো এগুলি সবগুলিকে $argsএকক স্ট্রিংয়ে পরিণত করে এবং আপনাকে অনেক সাশ্রয় দেয়।
কলসডাব্লু

@ Adám .NET এ কোঁকড়া ধনুর্বন্ধনী প্রয়োজন।
আন্দ্রে ওদেগোভ

3

কোয়াডআর , 11 10 + 1 = 11 বাইট

iপতাকাটির জন্য +1 বাইট ।

rex
\w
&
*

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

ব্যাখ্যা: কেস-সংবেদনশীলতার rexসাথে যথাক্রমে নিজের এবং অ্যাট্রিস্টকগুলির সাথে শব্দ-অক্ষর প্রতিস্থাপন করুন ।


2

এমএটিএল , 24 বাইট

42y3Y2mFGk'rex'Xf!3:q+((

ইনপুটটি একক উদ্ধৃতিতে আবদ্ধ একটি স্ট্রিং।

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

ব্যাখ্যা

ইনপুট বিবেচনা করুন 'Rex lives in Rexland.'

42    % Push 42 (ASCII for '*')
      % STACK: 42
y     % Implicit input. Duplicate from below
      % STACK: 'Rex lives in Rexland.', 42, 'Rex lives in Rexland.'
3Y2   % Push string 'ABC...YZabc...yz'
      % STACK: 'Rex lives in Rexland.', 42, 'Rex lives in Rexland.', 'ABC...YZabc...yz'
m     % Ismember
      % STACK: 'Rex lives in Rexland.', 42, [1 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 0]
F     % Push false
      % STACK: 'Rex lives in Rexland.', 42, [1 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 0], 0
Gk    % Push input lower-cased
      % STACK: 'Rex lives in Rexland.', 42, [1 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 0], 0, 'rex lives in rexland'
'rex' % Push this string
      % STACK: 'Rex lives in Rexland.', 42, [1 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 0], 0, 'rex lives in rexland', 'rex'
Xf!   % Strfind and transpose: gives indices of matchings as a column vector
      % STACK: 'Rex lives in Rexland.', 42, [1 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 0], 0, [1; 14]
3:q   % Push [0 1 2]
      % STACK: 'Rex lives in Rexland.', 42, [1 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 0], 0, [1; 14], [0 1 2]
+     % Addition, element-wise with broadcast
      % STACK: 'Rex lives in Rexland.', 42, [1 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 0], 0, [1 2 3; 14 15 16]
(     % Assignment indexing: sets indicated entries to 0
      % STACK: 'Rex lives in Rexland.', 42, [0 0 0 0 1 1 1 1 1 0 1 1 0 0 0 0 1 1 1 1 0]
(     % Assignment indexing: sets indicated entries to 42 (that is, '*'). Implicit display
      % 'Rex ***** ** Rex****.'


2

পার্ল, 31 বাইট

s/(rex)|[a-z]/$1||"*"/ieg;print

-nবিকল্পের সাথে পার্লটি ইনভোক করুন । উদাহরণ স্বরূপ:

echo 'To call rex, just say "Rex".'| perl -ne 's/(rex)|[a-z]/$1||"*"/ieg;print'
** **** rex, **** *** "Rex".

[a-z]\wইনপুটটিতে কখনই সংখ্যা বা আন্ডারস্কোর থাকবে না বলে এখন এটি প্রতিস্থাপন করা যেতে পারে ।
শেগি

আপনি এর -pপরিবর্তে -nএবং মুছে ফেলতে পারেন;print
wastl

2

বাশ , 128 বাইট

r=REXrex;a=`tr -c $r'",. !
' l<<<$1`;for i in {r,R}{e,E}{x,X};{
a=`echo ${a[@]//$i/$(tr $r f-k<<<$i)}`;}
tr $r l<<<$a|tr f-l $r*

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

আমি আমার পূর্ববর্তী উত্তরের উপর দৃ to়তা বদ্ধ করছি, অ-কার্যকরী বাশ অ্যারের স্ট্রিং প্রতিস্থাপন করুন এবং কোনও প্রাগ প্রতিস্থাপন করুন!

কম গল্ফড:

    a=`echo $1 |tr -c 'REXrex.,\"! ' 'z'`;        -> a replaces with z chars in input not matching REXrex or punctuation
    for i in {r,R}{e,E}{x,X}; {                   -> iterates over rex .. rEx .. REX
      j=$(tr 'REXrex' 'ABCabc' <<<$i)}            -> holds a for r, A for R, ando so on
      a=`echo ${a[@]//$i/$j`;                     -> replace each combination of rex .. rEx .. REX with abc ... aBc.. ABC
    }
    tr 'REXrex' 'z' <<<$a |tr 'ABCabcz' 'REXrex*' -> replaces each remainig r,e,x,R,E,X with z and finally each ABC with REX and z with *

প্রসারণের কারণে * এর পরিবর্তে জেড ব্যবহার করতে হয়েছিল


2
এটি সঠিক সরঞ্জামটি নয় বলে মনে হচ্ছে: পি
মার্কোসমে

1
যখন আপনি trকিছু विस्तारযোগ্য কিছুই না রাখেন তখন প্যারামিটারের উদ্ধৃতি না দিয়ে আপনি কয়েকটি অক্ষর সংরক্ষণ করতে পারেন ।
manatwork

আপনার অন্যান্য ব্যাশের উত্তরের বিষয়ে: ঠিক করতে নির্দ্বিধায়, এবং তারপরে মোছার অনুরোধের জন্য মনোযোগ দেওয়ার জন্য পতাকাঙ্কিত করুন।
আর

1
আবার খুঁজছেন, r=REXrexমূল্যবান একটি ভেরিয়েবলের জন্য বেশ কয়েকটি রেেক্স রয়েছে ।
manatwork

আপনি উদ্ধৃত স্ট্রিং এর বাইরে $ R রাখা থাকে, তাহলে আপনি পার্শ্ববর্তী পরিবর্তন করার দরকার নেই 'করার ", আক্ষরিক অব্যাহতি তাই কোন প্রয়োজন "। অবশ্য, তারপর আপনি পরিবর্তে যে জায়গায় লাইন ভঙ্গ করে একটি আক্ষরিক সম্পর্কে newline লিখুন \n: $r'",. !␤'
manatwork

2

জাভা 7, 96 98 97 96 বাইট

অনুপস্থিত ই এর আগে r বা x এর পরে অনুপস্থিত জন্য +2 বাইট তবে উভয়ই নয়

-1 বাইট পরিবর্তন [a-z&&[^rex]]করতে(?![rex])\\w

String a(String s){return s.replaceAll("(?i)r(?!ex)|(?<!r)e|e(?!x)|(?<!re)x|(?![rex])\\w","*");}

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

জাভা ব্যবহার করে প্রতিস্থাপনের জন্য একটি রেগেক্স সংস্করণ

এই রেজেক্সের সমস্ত কিছুর পরিবর্তে একটি * (জাভা \ w এ নোট \\ ডাব্লু হিসাবে পালাতে হবে)

(?i)r(?!ex)|(?<!r)e|e(?!x)|(?<!re)x|(?![rex])\w

(?i)                                                   // Case Insensitive
    r(?!ex)                                            // Any r not followed by ex
           |(?<!r)e                                    // Or any e not preceded by r
                   |e(?!x)                             // Or any e not followed by x
                          |(?<!re)x                    // Or any x not preceded by re
                                   |(?![rex])\w        // Or any other word character

2

সি #, 93 90 বাইট

s=>System.Text.RegularExpressions.Regex.Replace(s,"(?i)rex|\w",m=>m.Length>1?m.Value:"*");

বিশ্বাস করুন দীর্ঘ নামের জায়গার কারণে আমি এখানে প্রথম প্রথম # সি উত্তর ব্যবহার করে একটি রেজেেক্স ব্যবহার করেছি System.Text.RegularExpressions


আমি আমার উত্তরটি লেখার সময় তা বুঝতে পারি নি তবে এটি @ শ্যাগির জাভাস্ক্রিপ্ট উত্তরের সি # সংস্করণ বলে মনে হচ্ছে ।


1
আপনি আমার সম্পর্কে স্বতন্ত্রভাবে আপনার উত্তর নিয়ে এসেছেন, যদিও উল্লেখ করার জন্য ধন্যবাদ।
শেগি

@ শেগি আহ ধন্যবাদ জানতেন না এটি আপডেট হয়েছে
থেলথল কোডার 11'17

1

সিজেম , 39 বাইট

q{_3<_el"rex"=3{elc_'{,97>&'*@?1}?\o>}h

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

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

q           e# Read the input.
{           e# Do:
 _3<        e#  Copy the string and get its first three characters.
 _el"rex"=  e#  Check case-insensitively if they equal "rex".
  3         e#   If they do, push 3.
  {         e#   If they don't:
   elc_     e#    Take the first character of the three, and make it lowercase.
   '{,97>&  e#    Take its set intersection with the lowercase alphabet. Returns a non-empty
            e#      string (truthy) if it's a letter or an empty string (falsy) if not.
   '*@?     e#    Push a * if the char is a letter, or itself if it's not.
   1        e#    Push 1.
  }?        e#  (end if)
 \o         e#  Print the second-from-the-top stack item.
 >          e#  Slice the string after the first 3 or 1 characters, depending on previous outcome.
}h          e# Repeat the above until the string is empty.

1

VimScript, 34 বাইট

s/\v(rex|r@<=ex|(re)@<=x)@!\w/*/gi

এবং এখানে একটি আকর্ষণীয় প্রতিস্থাপন যা প্রায় কাজ করে:

s/\vr(ex)@!|<e|<x|[rex]@!\w/*/gi

স্ট্রিংটিতে বারবার এটি চালানোর কল্পনা Rex, dex, I told you not to do this! You're making me angry Rex!করুন প্রথম লাইনের পরে স্ট্রিংটি Rex, *ex, * **** *** *** ** ** ****! ***'*e ****** *e ***** Rex!দ্বিতীয় পাসের ফলস্বরূপ হবে Rex, **x, * **** *** *** ** ** ****! ***'** ****** ** ***** Rex!এবং তৃতীয় পাসটি এটি শেষ করবে। পরবর্তী কোনও পাসের স্ট্রিং পরিবর্তন হবে না। তবে এটি পেতে 3 টিরও বেশি বিকল্প নিতে পারে, উদাহরণস্বরূপ স্ট্রিংয়ের ক্ষেত্রে xxxxxxxx। সুতরাং, যদি বিষয়গুলি পরিবর্তন করা বন্ধ না করা বা ইনপুটটির দৈর্ঘ্যের চেয়ে বহুগুণ উপরের বিকল্পটি চালানোর কোনও সহজ উপায় থাকে তবে এটি অন্য সমাধান হতে পারে। আমি বাজি ধরেছিলাম এটি ভি-তে করা যেতে পারে তবে এটি সম্ভবত 34 বাইটের বেশি হবে।


ধারণার জন্য ধন্যবাদ! এখানে একটি ভি উত্তর দেওয়া আছে । :)
DJMcMayhem

1

জেলি , 23 বাইট

মামলার বিষয়ে আমার প্রশ্নের 24 ঘন্টারও বেশি প্রতিক্রিয়া নেই , তাই আমি এই অস্থায়ী 23 বাইটার পোস্ট করব।

“rex”
Œlœṣ¢µØaW;”*yµ€j¢

অনলাইনে চেষ্টা করে দেখুন পরীক্ষার কেসগুলি !

কিভাবে?

“rex” - Link 1, get "rex": no arguments
“rex” - literal "rex"

Œlœṣ¢µØaW;”*yµ€j¢ - Main link: string s (or list of characters)
Œl                - convert s to lowercase
    ¢             - call the last link (1) as a nilad (get "rex")
  œṣ              - split left (s) at sublists equal to right ("rex")
     µ            - call the result t
             µ€   - for each word, w, in t:
      Øa          -   literal: lowercase alphabet
        W         -   wrap it in a list
          ”*      -   literal: '*'
         ;        -   concatenate the wrapped alphabet with the asterisk
            y     -   translate: replace all lowercase letters with asterisks.
                ¢ - call the last link (1) as a nilad (get "rex")
               j  - join left (translated, split text) with copies of right ("rex")

আমি নিশ্চিত যে এটি বৈধ কিনা। এটি পরীক্ষার কেসের সাথে মেলে না।
Okx

আমার নোটটি শীর্ষে দেখুন এবং আমার প্রশ্নে ওপিকে দেখুন।
জোনাথন অ্যালান

(যদিও দুর্ভাগ্যক্রমে আমি যে মন্তব্যে লিখিত ছিলাম সেখানে ওপি বলেছিল যে "কুকুররা এখন ছোট হাতের অক্ষর এবং বড় হাতের মধ্যে পার্থক্য পায় না")
জোনাথন অ্যালান

1

সিজেএম , 26 বাইট (বড় হাতের আউটপুট) / 36 বাইট (কেস-সংরক্ষণ)

qeu"REX":R/{__el-'*@?}f%R*

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

যদি লেটার কেস সংরক্ষণ করার প্রয়োজন হয় (যেহেতু এটি এখনও কিছুটা অস্পষ্ট ), এটি 10 ​​টি অতিরিক্ত বাইট সহ সম্পন্ন করা যেতে পারে:

q_32f&:i\eu"REX":R/{__el-'*@?}f%R*.|

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

যাইহোক, এই উত্তরটি লেখার সময়, আমি সিজোমে আমি কী ডিজাইন বাগ হিসাবে বিবেচনা করব তা খুঁজে পেয়েছি: বিটওয়াইজ অপারেটরগুলি &এবং |দুটি চর মানগুলির মধ্যে সংজ্ঞায়িত নয়, তাই আমি .|বিটওয়াইস বা দুটি স্ট্রিং ব্যবহার করতে পারি না । সমাধানটি, যা আমার জন্য অতিরিক্ত দুটি বাইট ব্যয় করে শেষ হয়েছিল, প্রথমে :iএকটি স্ট্রিংকে একটি পূর্ণসংখ্যার অ্যারেতে রূপান্তর করা, যা পরে অন্য স্ট্রিং দিয়ে ORed করা যায়। (আসলে আমার জন্য তিনটি বাইট খরচ হয়েছে , কারণ যদি &দুটি অক্ষরের মধ্যে কাজ করা হয়, তবে আমি চিঠি মামলার তথ্য সংরক্ষণ করার Sf&পরিবর্তেও ব্যবহার করতে পারতাম 32f&))

ইতিবাচক দিক থেকে, আমি আবিষ্কার করেছি যে {...}f%স্ট্রিংগুলির একটি অ্যারেতে অক্ষরগুলি পুনরাবৃত্তি করার জন্য প্রত্যাশার মতো কাজ করে। খুশী হলাম।

যাইহোক, এখানে 36-বাইট কোডের একটি (হালকা) মন্তব্য করা সংস্করণ:

q                                       "read input";
 _32f&:i\                               "save the case bit of each input char";
         eu"REX":R/                     "uppercase input and split it on 'REX'";
                   {                    "start code block:"
                    __el-'*@?           "c = (c != lowercase(c) ? '*' : c)";
                             }f%        "apply block to chars in each substring";
                                R*      "join the substrings with 'REX' again";
                                  .|    "bitwise OR the case bits back in";

কেস-সেভিং ট্রিকটি কাজ করে কারণ ASCII অক্ষরের ক্ষেত্রে কেবল ASCII কোডের পঞ্চম বিট দ্বারা নির্ধারিত হয়: এই বিটটি বড় হাতের অক্ষরের জন্য 0 এবং ছোট হাতের অক্ষরের জন্য 1 হয়। সুতরাং, 32 = 2 5 এর সাথে অক্ষর কোডের বিটওয়াইস এবং অবাক করে কেস বিট বের করে এবং কিছুটা বড় অক্ষরে অক্ষরে অক্ষরে ORing করা তাদের মূল কেসটিকে পুনরুদ্ধার করে।

অবশ্যই, অক্ষরহীন অক্ষরগুলির পঞ্চম বিটের জন্য নির্বিচার মান থাকতে পারে (যদিও, ASCII অক্ষরগুলি সংগঠিত করার কারণে, বেশিরভাগ বিরামচিহ্নগুলিতে পঞ্চম বিটটি 1 তে সেট করা থাকে) তবে এটি কোনও ব্যাপার নয়, যেহেতু এই অক্ষরগুলি রেখে গেছে বড় হাতের অক্ষর দ্বারা এবং অক্ষরটি সেন্সরিং লুপ দ্বারা যেভাবেই হোক না কেন, এবং নিজের পঞ্চম বিটের সাহায্যে কোনও চরিত্রকে ঘোরানো এটি পরিবর্তন করে না। এছাড়াও, সুবিধামতভাবে, *চরিত্রটির ইতিমধ্যে পঞ্চম বিট সেট রয়েছে, সুতরাং এটিও ফাইনালের দ্বারা অপরিবর্তিত রয়েছে .|


1

পাইপ , 21 19 বাইট

qR-`(rex)|\w`{b|'*}

স্টিডিন থেকে স্টপআউট আউটপুট লাগে। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

q                    Read a line of stdin
 R                   and replace
   `(rex)|\w`          a regex matching `rex` or any single alphanumeric character,
  -                    case-insensitive
             {    }  with this callback function:
              b|'*     If the 1st capture group (rex) matched, return it, else asterisk
                       The result of the replacement is auto-printed

1

ভি , 27 , 24 বাইট

আমি উভয় উত্তর রেখে দিচ্ছি, কারণ আমি মনে করি তারা সমান আকর্ষণীয়।

27 বাইট

òÓãr¨ex©À!ü¼eü¼xü[rex]À!÷/*

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

ভি তে এই ধারণাটি করার জন্য ব্রায়ান ম্যাকচ্যাচনের ধন্যবাদ জানাই to

Hexdump:

00000000: f2d3 e372 a865 78a9 c021 fcbc 65fc bc78  ...r.ex..!..e..x
00000010: fc5b 7265 785d c021 f72f 2a              .[rex].!./*

ব্যাখ্যা:

ò                           " Until the output stops changing...
 Óãr¨ex©À!ü¼eü¼xü[rex]À!÷/* " Run the compressed vim regex:

:s/\vr(ex)@!|<e|<x|[rex]@!\w/*/gi

24 বাইট

Óãrex/ò&ò
HòÓ÷/*/e
jjòÍî

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

Ó           " Substitute
 ã          "   (case-insensitive)
  rex       "   'rex'
     /      " with
       &    "   'rex'
      ò ò   "   Surrounded in new lines
ò           " Recursively...
 Ó          "   Substitute...
  ÷         "     A word character
   /        "   with
    *       "     An asterisk
     /e     "     (don't break if there are 0 matches)
jj          "   Move down 2 lines
  ò         " end the recursive loop
   Íî       " Remove all newlines
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.