স্ট্রিং নেগেট করুন


12

দাবি অস্বীকার : এটি আমার চ্যালেঞ্জ নয় তবে এই গুই বলেছেন আমি পোস্ট করা ঠিক ছিল।


মাঝে মাঝে আমি এর বিপরীতে কোনও শব্দ তৈরি করতে চাই, যেমন happinessযায় unhappiness। দুর্ভাগ্যক্রমে যখন এটি ঘটে তখন আমার মস্তিষ্কটি মাঝে মাঝে ফাঁকা হয়ে যায়। তারপরে একদিন, এই ঘটনার পরে, আমি আমার নিজের মনে মনে ভাবলাম "এটিই প্রোগ্রামগুলির জন্য!"

যেহেতু ইংরেজি ভাষার অনেকগুলি ব্যতিক্রম রয়েছে, তাই আমি একটি তালিকা তৈরি করেছি যাতে শুরুর চিঠির উপসর্গ রয়েছে

q or h          -> dis- (honest -> dishonest)
l                -> il-  (legal -> illegal)
m or p           -> im-  (mature -> immature)
r                -> ir-  (responsible -> irresponsible)
everything else  -> un-  (worthy -> unworthy)

কার্য

একটি স্ট্রিং হিসাবে একটি ইনপুট দেওয়া, তার নেতিবাচক মধ্যে স্ট্রিং তৈরি এবং ফলাফল ফলাফল। আপনি ধরে নিতে পারেন যে প্রদত্ত সমস্ত ইনপুট উপরের নিয়মগুলির সাথে মাপসই হবে। জমাগুলি প্রোগ্রাম বা ফাংশন হতে পারে, স্নিপেটগুলি নয়।

ইনপুট

প্যারামিটার হিসাবে বা STDIN থেকে নেওয়া একটি একক স্ট্রিং

আউটপুট

উপরের নিয়ম মেনে সেই স্ট্রিংয়ের অবহেলিত রূপ

জয় কিভাবে

এটি একটি তাই সংক্ষিপ্ততম কোড জয়ী


4
আমরা কি ধরে নিতে পারি যে আমরা কখনই একটি শব্দও পাই না যা একটি qছাড়া একটি দিয়ে শুরু হয় u?
বিড়াল বিড়াল

3
আমার মাথার উপরে বন্ধ, qadi, qat, উপরোক্ত qi, qirshএবং qwerty। (আমি প্রচুর স্ক্র্যাবল খেলি)
অ্যাডমবর্কবার্ক

4
@Wsbltc ওয়েল, বেশ কয়েকটি ন্যায্য , তবে তারা অন্যান্য ভাষা থেকে ধার করা শব্দগুলি এতটাই প্রশ্নবিদ্ধ যে তারা সত্যই ইংরাজী হিসাবে গণনা করছে কিনা। সুতরাং আমরা কি ধরে নিতে পারি যে একটি qসর্বদা uস্ট্রিংয়ের পরে একটি হয়?
ব্যবসায় বিড়াল

3
হ্যাঁ আপনি ধরে নিতে পারেন এটির সর্বদা একটি রয়েছেu

10
এই চ্যালেঞ্জটি কোনও প্যাডেন্টকে বেশ অসন্তুষ্ট করতে পারে ...
স্প্রেটি

উত্তর:


10

পাইথন, 55 বাইট

lambda n:'ddiiiiuiimmlrnss'[5-'rlmphq'.find(n[0])::7]+n

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


আমাদের different টি ভিন্ন প্রারম্ভিক চিঠিগুলি হ্যান্ডেল করা দরকার:
g-> dis, h-> dis, p-> im, m-> im, l-> il, r-> irএবং অন্যান্য সমস্ত কিছুই ->un

আমরা এই সমস্ত উপেক্ষাগুলিকে একটি স্ট্রিংয়ে সঞ্চয় করতে পারি এবং কাটানোর মাধ্যমে সঠিকটি বের করতে পারি:

 d      i      s
  d      i      s
   i      m
    i      m
     i      l
      i      r
       u      n

'ddiiiiuiimmlrnss'[i::7]

এখন আমাদের সূচনা সূচক গণনা করা দরকার i। স্ট্রিংতে অন্তর্ভুক্ত না থাকা সমস্ত কিছুর জন্য 'rlmphq'.find0 'r', 5 qএবং -1 প্রদান করে। 0 থেকে 6 পর্যন্ত প্রয়োজনীয় মান পেতে আমাদের এখনও 5 থেকে রিটার্ন মানটি বিয়োগ করতে হবে, যার ফলে এই কোডটি পাওয়া যাবে:

'ddiiiiuiimmlrnss'[5-'rlmphq'.find(n[0])::7]

সত্যিই সুন্দর!
স্টিভ বনেট

কেউ কীভাবে ব্যাখ্যা করতে পারে যে এটি কীভাবে কাজ করে? আমি বুঝতে পারছি কি ফালি স্বরলিপি সঙ্গে ঘটছে, কিন্তু জাদু স্ট্রিং কি ddiiiiuiimmlrnssএবং rlmphqএবং নম্বর 5জন্য, কেন ফালি লাফালাফি করা হয় 7?
কেটিংজ

@ কিটইঞ্জ একটি ব্যাখ্যা যুক্ত করেছেন। আমি আশা করি এটি আপনাকে সহায়তা করে
ovs

6

জিএনইউ সেড , 50 বাইট

এর জন্য +1 অন্তর্ভুক্ত -r

s/^q|^h/dis&/
s/^l|^r|^m/i&&/
s/^p/imp/
t
s/^/un/

অভিনব কিছু না। ব্যবহার &প্রতিস্থাপন কয়েক বদল একত্রিত করতে, এবং tগত এক এড়িয়ে যেতে প্রথম বদল এক ঘটবে।

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


5

জেলি , 30 বাইট

1ị“qmlrrhp”iị“3bµWI⁼ṡ÷ʠ$»œs5¤;

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

কিভাবে?

1ị“qmlrrhp”iị“3bµWI⁼ṡ÷ʠ$»œs5¤; - Main link: string
1ị                             - 1 index into the string (first character of the string)
           i                   - 1-based index of 1st occurrence of that in (else zero):
  “qmlrrhp”                    -     char list "qmlrrhp"
            ị                  - index into (1-based and modulo):
                            ¤  -     nilad followed by link(s) as a nilad:
             “3bµWI⁼ṡ÷ʠ$»      -         compressed string "dis"+"imili"+"run"="disimilirun"
                         œs5   -         split "equally" into 5: ["dis","im","il","ir","un"]
                             ; - concatenate with the string

লক্ষ্য করুন পুনরাবৃত্তি rমধ্যে “qmlrrhp”5th সূচক, যা, যদি রেফারেন্সড, prepending স্থাপিত হবে হয় un, তাই এটি সমানভাবে ভাল ছাড়া আর কিছু হতে পারে hবা p


4

/// , 59 56 বাইট

/^/\/\/#//#qu/disqu^h/dish^l/ill^m/imm^p/ipp^r/irr^/un/#

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

ইনপুট খুব শেষ পরে যায় #

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

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

/#qu/disqu//#h/dish//#l/ill//#m/imm//#p/ipp//#r/irr//#/un/# |everything after the ` |` is not code.
/#qu/disqu/                                                 |replace `qu` with `disqu`
           /#h/dish/                                        |replace `h` with `dish`.
                    /#l/ill/                                |replace `l` with `ill`.
                            /#m/imm/                        |replace `m` with `imm`.
                                    /#p/ipp/                |replace `p` with `ipp`.
                                            /#r/irr/        |replace `r` with `irr`.
                                                    /#/un/  |replace everything else with `un`.
                                                          # |safety control

অন্তর্দৃষ্টি: চ্যালেঞ্জ যথেষ্ট সহজ, শব্দের শুরুর উপর নির্ভর করে কেবল নেতিবাচক যুক্ত করুন। যাইহোক, /// এ, আপনি কেবল পারবেন না concatenate if [...], আপনি কেবল কোনও নির্দিষ্ট প্যাটার্ন অনুসরণ করে কিছু প্রতিস্থাপন করতে পারেন। সুতরাং এই প্রোগ্রামে, ইতিবাচক শব্দের সূচনাগুলি নেতিবাচক শব্দ শুরু দিয়ে প্রতিস্থাপন করা হয়েছে। #নিশ্চিত করুন যে একবার একটি নতুন শুরু যোগ করা হয়েছিল, কোন নতুন সূত্রপাত যোগ করা হবে করতে যোগ করা হয়েছিল। #এটা ': জাতিসংঘ অন্য সব কিছুর' কি সম্ভব করেছেন।

গলফ তিনি একটি নতুন প্রতিকল্পন শুরু অন্তর্ভুক্ত: /^/\/\/#/। এটি সমস্তটির ^সাথে প্রতিস্থাপন করে //#, যা মূল সংস্করণে একটি সাধারণ প্যাটার্ন ছিল।


3

টিআই-বেসিক, 104 বাইট

Prompt Str0
sub(Str0,1,1→Str2
Str0
If Str2="Q" or Str2="H
"DIS"+Ans
If Str2="L
"IL"+Ans
If Str2="M" or Str2="P
"IM"+Ans
If Str2="R
"IR"+Ans
If Ans=Str0
"UN"+Ans
Ans

সমস্ত মূলধনপত্রের প্রয়োজন।

ব্যাখ্যা:

Prompt Str0             # 4 bytes, input user string to Str0
sub(Str0,1,1→Str2       # 12 bytes, store first character in Str2
Str0                    # 3 bytes, store Str0 in Ans
If Str2="Q" or Str2="H  # 14 bytes, if the first letter was Q or H
"DIS"+Ans               # 8 bytes, store DIS+Ans in Ans
If Str2="L              # 7 bytes, If the first letter was L
"IL"+Ans                # 7 bytes, store IL+Ans in Ans
If Str2="Q" or Str2="H  # 14 bytes, if the first letter was Q or H
"IM"+Ans                # 7 bytes, store DIS+Ans in Ans
If Str2="R              # 7 bytes, if the first letter was R
"IR"+Ans                # 7 bytes, store IR+Ans in Ans
If Ans=Str0             # 6 bytes, if Ans has not been changed (first letter was none of the above)
"UN"+Ans                # 7 bytes, store UN+Ans in Ans
Ans                     # 1 byte, implicitly return Ans

3

জাভাস্ক্রিপ্ট ( 71 64 61 বাইট)

w=>({q:a='dis',h:a,l:'il',m:b='im',p:b,r:'ir'}[w[0]]||'un')+w

সম্পাদনা:

  • @ ইরতিসাইডোহলকে ( charAt(0)-> [0]) ধন্যবাদ 7 বাইট সংরক্ষণ করা হয়েছে
  • @ Edc65 (ভেরিয়েবলগুলিতে ভাগ করা উপসর্গ নির্ধারণ করে) এর জন্য 3 বাইট সংরক্ষণ করা হয়েছে

var f = w=>({q:a='dis',h:a,l:'il',m:b='im',p:b,r:'ir'}[w[0]]||'un')+w;

function onChange() {
   var word = event.target.value;
   var output = f(word);
   document.getElementById('output').innerHTML = output;
}
Input Word: <input type='text' oninput='onChange()'/><br/>
Output Word: <span id="output">


1
আপনি যদি আই 7 এর সাথে পিছনে সামঞ্জস্যতা সম্পর্কে চিন্তা না করেন তবে আপনি কি এর w[0]পরিবর্তে ব্যবহার করতে পারবেন না w.charAt(0)?
এরটি সিডোহাল

@ ইরতিসিডোহল ধন্যবাদ!
সবেমাত্র

আমি এখানে নতুন, তবে উত্তর দিয়ে w=>...কি আইন দিয়ে শুরু করা বৈধ ? আসল ফাংশন সংজ্ঞা অন্তর্ভুক্ত করা হবে let f=w=>...? (সম্ভবত কোথাও একটি FAQ এ আচ্ছাদিত ...)
স্টিভ বনেট

@ স্টিভবেনেট হ্যাঁ এটি বৈধ। ফাংশনটির নামকরণ প্রাসঙ্গিক নয়
edc65

1
w=>({q:a='dis',h:a,l:'il',m:b='im',p:b,r:'ir'}[w[0]]||'un')+w3 বাইট কম
edc65

2

ব্যাচ, 114 বাইট

@set/pw=
@set p=un
@for %%p in (dis.q dis.h il.l im.m im.p ir.r)do @if .%w:~,1%==%%~xp set p=%%~np
@echo %p%%w%

কাস্টম উপসর্গের তালিকার বিপরীতে শব্দের প্রথম অক্ষর পরীক্ষা করে এবং যদি এর থেকে পূর্বনির্ধারিত থেকে উপসর্গটি পরিবর্তন করা হয় unqu21 বাইটের ব্যয়ে স্পেশাল কেসিং সম্ভব।


2

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

f l=maybe"un"id(lookup(l!!0)$zip"qhlmpr"$words"dis dis il im im ir")++l

ব্যবহারের উদাহরণ: f "legal"-> "illegal"এটি অনলাইন চেষ্টা করুন!

"un"যদি না পাওয়া যায় তবে এর ডিফল্ট মান সহ ইনপুট স্ট্রিংয়ের প্রথম চরটি সন্ধানের জন্য উপসর্গ / প্রতিস্থাপন জোড়াগুলির একটি সন্ধানের সারণী তৈরি করুন ।


2

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

^[^hqlmpr]
un$+
^[hq]
dis$+
^l
il$+
^[mp]
im$+
^r
ir$+

ব্যাখ্যা:

             {implicit replace stage}
^[^hqlmpr]   Append un to words starting with none of: hqlmpr
un$+         
^[hq]        Append dis to words starting with h or q
dis$+        
 ^l          Append il to words starting with l
il$+          
^[mp]        Append il to words starting with m or p
im$+    
^r           Append ir to words starting with r
ir$+

প্রথমবার আমি রেটিনা ব্যবহার করেছি। এটি একটি সুন্দর ঝরঝরে ভাষা।

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


খুব সুন্দর একটা ভাষাতে চেষ্টা করুন! +1
অর্জুন

এবং এটি দিয়ে আপনার 2500 প্রতিনিধি আছে! অভিনন্দন!
অর্জুন

এবং আপনার ব্যবহারকারী সূচক 26600!
অর্জুন

এত নিখুঁত বেস -10!
অর্জুন

2

জাভাস্ক্রীপ্ট, 72 71 66 61 60 59 বাইট

w=>('dis....il.im...im.dis.ir'.split('.')[w.charCodeAt(0)-104]||'un')+w

w=>'un.dis.dis.il.im.im.ir'.split('.')['qhlmpr'.indexOf(w[0])+1]+w

হ্যাঁ, এটি এখনও বিদ্যমান সমাধানের চেয়ে দীর্ঘ। :)

w=>['un','dis','im','il','ir']['qmlrhp'.search(w[0])%4+1]+w

যদি এর কোনও ব্যাখ্যা দরকার হয় তবে আমি Q / h এবং m / p জোড়গুলির সাথে তাদের সূচকটি একটি মোড 4 এর সাথে অনুসন্ধানের স্ট্রিংয়ের সাথে সংযুক্ত করে সুবিধাটি গ্রহণ করছি, তারপরে এটিকে উপসর্গের অ্যারেতে অনুসন্ধান হিসাবে ব্যবহার করে।


দুর্দান্ত উত্তর। এর searchপরিবর্তে 1 বাইট ব্যবহার করে সংরক্ষণ করুন indexOf। এবং আরো কিছু, আমি মনে করি ব্যবহার করে, &পরিবর্তে%
edc65

ধন্যবাদ! আমি সম্পর্কে জানতাম না search। কীভাবে & কৌশলগুলি তৈরি করবেন তা দেখতে পাচ্ছেন না - আমার অ্যারেটি কেবল 4 টি উপাদান হলে সঠিক হবে।
স্টিভ বনেট


1

গণিত, 107 বাইট

StringReplace[StartOfString~~x:#:>#2<>x&@@@{{"q"|"h","dis"},{"l","il"},{"m"|"p","im"},{"r","ir"},{_,"un"}}]

ব্যাখ্যা:

StartOfString~~x:#:>#2<>x&একটি খাঁটি ফাংশন যেখানে প্রথম যুক্তিটি স্ট্রিংয়ের শুরুতে ম্যাচের জন্য একটি স্ট্রিং প্যাটার্ন এবং দ্বিতীয় যুক্তিটি ম্যাচটি প্রিপেন্ড করার জন্য একটি স্ট্রিং। এটি এর মধ্যে ব্যবহারের জন্য উপযুক্ত একটি বিলম্বিত নিয়ম ফিরিয়ে দেয় StringReplace। এটি {{"q"|"h","dis"},{"l","il"},{"m"|"p","im"},{"r","ir"},{_,"un"}}নিয়মের তালিকার ফলস্বরূপ প্রতিটি জোড়াতে প্রয়োগ করা হয়

{
  StartOfString~~x:"q"|"h":>"dis"<>x,
  StartOfString~~x:"l":>"il"<>x,
  StartOfString~~x:"m"|"p":>"im"<>x,
  StartOfString~~x:"r":>"ir"<>x,
  StartOfString~~x_:>"un"<>x
}

অবশেষে এই তালিকাটি পাস করা হয়েছে StringReplaceযা স্ট্রিংগুলিতে একটি অপারেটর দেয়।


2
ম্যাথমেটিকার কি সব কিছুর জন্য বিল্টিন রয়েছে?


1

এক্সেল 78 বাইট

=TRIM(MID("  disdisil im im ir un",IFERROR(FIND(LEFT(A1),"qhlmpr"),7)*3,3))&A1

আমি বিভিন্ন পদ্ধতি ব্যবহার করে এমন কিছু ঘনিষ্ঠ প্রতিযোগী পেয়েছি যা ৮১ বাইট করেছে:

=IFERROR(CHOOSE(FIND(LEFT(A1),"qhlmpr"),"dis","dis","il","im","im","ir"),"un")&A1

এবং 84 বাইট:

=IFERROR(TRIM(MID("im disi"&LEFT(A1),MOD(FIND(LEFT(F1),"qlmhrp"),3)*3+1,3)),"un")&A1

0

রেক্সএক্স, 78 বাইট by

arg a
s.=un
s.q=dis
s.h=s.q
s.l=il
s.m=im
s.p=im
s.r=ir
p=left(a,1)
say s.p||a

UPPERCASE, যেমন শক্তিশালী -> ইমপোটেন্টে জবাব দিয়ে কয়েকটি বাইট সংরক্ষণ করে।



0

Clojure, 65 বাইট

#(str(get{\q"dis"\h"dis"\l"il"\m"im"\p"im"\r"ir"}(first %)"un")%)

আচ্ছা এটি বিরক্তিকর ... তবে আমি এটিকে আর ছোট করতে পারি না। অন্তত খুব কম শ্বেতস্থান আছে।


0

ওক্যামল, 85

(fun s->(match s.[0]with|'q'|'h'->"dis"|'l'->"il"|'m'|'p'->"im"|'r'->"ir"|_->"un")^s)

বেনামে ফাংশন, এর প্রথম চরটিতে প্যাটার্ন মেলানো ব্যবহার করে।

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