সোমবার মিনি-গল্ফ # 6: মীসিজেসেস আপ টীেক্সেক্সেক্সেক্সটেক্সট


48

সোমবার মিনি-গল্ফ: প্রতিটি সোমবার পোস্ট করা (আশাবাদী) সংক্ষিপ্ত চ্যালেঞ্জগুলির একটি সিরিজ ।

সত্য গল্প 1 : অন্য দিন, আমি আমার ট্যাবলেটে ঘুরে বেড়াচ্ছিলাম যখন আমি জাভাস্ক্রিপ্ট পরীক্ষা করার জন্য সাধারণত আমার পিসিতে যে পৃষ্ঠাটি ব্যবহার করি তা দেখার জন্য আমার ধারণা ছিল had পৃষ্ঠাটি লোড হওয়ার পরে, আমি এই সাধারণ প্রোগ্রামটিতে প্রবেশ করেছি:

alert("Hello!")

আমি তখন এক্সিকিউট বোতাম টিপতে এগিয়ে গেলাম, এবং যখন আমাকে জানিয়েছিল যে আমি যে কোডটি লিখেছি তা অবৈধ। আমি পাঠ্যবাক্সটিতে দ্বিতীয়বার নজর রেখে এটিকে দেখেছি:

alllelelerlerlertlert("Heeelelellellelloello!")

Wha ??? আমি যে প্রবেশ করলাম তা নয়! তাহলে এখানে কী হয়েছে? এটি চিত্রিত করার জন্য, আমি দুটি সাধারণ লাইন প্রবেশ করলাম:

abcdefg
0123456

এটি হিসাবে দেখা গেল:

abbbcbcbcdbcdbcdebcdebcdefbcdefbcdefgbcdefg
0112123123412345123456

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

0112123123412345123456
0
 1
  12
    123
       1234
           12345
                123456

তবে চিঠির বিভাগগুলির কী হবে? এক মিনিটের জন্য চিন্তা করার পর, আমি বুঝতে পারি যে এটা ঠিক একই, কিন্তু একবার প্রতিটি উপধারা পুনরায় পরিবর্তে, এটা পুনরাবৃত্তি দুইবার :

abbbcbcbcdbcdbcdebcdebcdefbcdefbcdefgbcdefg
a
 bb
   bcbc
       bcdbcd
             bcdebcde
                     bcdefbcdef
                               bcdefgbcdefg

এই কৌশলগুলির সংমিশ্রণে দুটির সংমিশ্রণ কাজ করে:

abc123z
abbbcbcbc1bc12bc123bc123zbc123z
a
 bb
   bcbc
       bc1
          bc12
              bc123
                   bc123zbc123z

যাই হোক না কেন সামান্য ত্রুটি এই যতিচিহ্ন এবং স্পেস এ রিসেট বলে মনে হয় কারণ, তাই abc defহয়ে abbbcbc deeefef

এই মুহুর্তে, আমি এটি খুঁজে বের করতে এবং এটি একটি আকর্ষণীয় চ্যালেঞ্জে পরিণত করতে এতটাই মগ্ন হয়ে পড়েছিলাম যে আমি কেন সেখানে প্রথম স্থানে ছিলাম তা ভুলে গিয়েছিলাম। (তবে আমি কীভাবে সাধারণভাবে টাইপ করতে পারি তা বুঝতে পেরেছি: প্রতিটি চরিত্রের পরে স্পেস-ব্যাকস্পেস টিপুন ed

চ্যালেঞ্জ

চ্যালেঞ্জের লক্ষ্য হ'ল এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা পাঠ্যটিতে প্রক্রিয়া করার জন্য নেয়, উপরের তালিকাভুক্ত পরিবর্তনগুলি করে এবং ফলাফলকে আউটপুট / ফিরিয়ে দেয়।

বিস্তারিত

  • ইনপুটটিতে কেবল প্রিন্টযোগ্য এএসসিআইআই থাকবে এবং কোনও ট্যাব বা নিউলাইন থাকবে না।

টেস্ট-মামলা

ইনপুট: (প্রতি লাইনে একটি)

Mess up text
This is some longer text.
CAPS LOCK && "Punc-tua"+'tion'
under_score_style
CaPs wItHIn loWERs
1337 numb3r5
abcdefghij 0123456789
Code-golf is the best!

আউটপুট:

Meeesesessess upp teeexexextext
Thhhihihishis iss sooomomomeome looononongongongeongeongeronger teeexexextext.
CAAAPAPAPSAPS LOOOCOCOCKOCK && "Puuunununcunc-tuuuaua"+'tiiioioionion'
unnndndndendendernder_scccococorcorcorecore_stttytytyltyltyletyle
CaaaPaPaPsaPs wIIItItItHItHItHIItHIItHInItHIn loooWoWoWEoWEoWERoWERoWERsoWERs
1333337 nuuumumumbumbumb3umb3rumb3rumb3r5
abbbcbcbcdbcdbcdebcdebcdefbcdefbcdefgbcdefgbcdefghbcdefghbcdefghibcdefghibcdefghijbcdefghij 0112123123412345123456123456712345678123456789
Cooodododeode-gooolololfolf iss thhhehe beeesesestest!

স্কোরিং

এটি , তাই বাইট জেতে সংক্ষিপ্ততম বৈধ কোড। টাইব্রেকার সাবমিশনে যায় যা তার চূড়ান্ত বাইট গণনাটি প্রথম পৌঁছেছিল। বিজয়ী আগামী সোমবার ২ নভেম্বর নির্বাচিত হবে, শুভকামনা!

সম্পাদনা: এবং বিজয়ী হলেন ... @ মার্টিনব্যাটনার অবিশ্বাস্য 43-বাইট সমাধানের জন্য রেটিনা ব্যবহার করছেন !

1 হ্যাঁ, এই গল্পটি সম্পূর্ণ সত্য এবং আপনার যদি আরও কোনও ব্যাখ্যা প্রয়োজন হয় তবে পাদটীকা 1 দেখুন।


1
সেই বিরাম ' '.join(x[0]+''.join(2*x[1:i]for i in range(1,len(x)+1)) for x in raw_input().split())
বিধানের

কাশি Chrome ব্যবহার করুন DevTools কাশি
kirbyfan64sos

@ ডক্টর আমার উত্তরের সম্পাদনার ইতিহাসটি দেখুন: পি
বিটা

1
@ বেটাডেকে মহান মন একসাথে ভাবেন;)
থিডক্টর

ইনবি 4 কেউ এমন একটি ভাষা তৈরি করে যেখানে আপনাকে আসলে এটি টাইপ করতে হয়।
DJgamer98

উত্তর:


13

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

.(?<=[^_\W]([^_\W]+))(?<=(\1)(?<=\D))?
$1$2

-sপতাকা সহ একটি ফাইল থেকে কোড চালান Run যেহেতু এটি কেবলমাত্র একক রেজেক্স বিকল্প, আপনি এটি এখানে পরীক্ষা করতে পারেন (ফলাফলগুলি দেখার জন্য প্রসঙ্গে ট্যাবে ক্লিক করুন)।

ব্যাখ্যা

এটি কোনও অঙ্ক এবং বর্ণের সাথে মেলে যা কোনও রানের ক্ষেত্রে প্রথম নয়। যে .কোনও নন-লাইনফিড অক্ষরের সাথে মেলে থাকতে পারে, ততক্ষণে অন্য শর্তগুলি নিশ্চিত করে:

(?<=[^_\W]([^_\W]+))

এটি পরে অবস্থান থেকে পিছনে মেলে .। প্রথমে এটি এক বা একাধিক বর্ণানুক্রমিক অক্ষরের সাথে মেলে এবং তাদের 1সাথে গোষ্ঠীতে ক্যাপচার করে ([^_\W]+)। এটি তাত্ক্ষণিকভাবে নিশ্চিত করে যে .নিজেই একটি বর্ণানুক্রমিক চরিত্রের সাথে সম্পর্কিত। তারপরে অতিরিক্তটি [^_\W]নিশ্চিত করে যে বর্তমান রানটিতে আরও একটি বর্ণমালার চরিত্র রয়েছে যা আমরা ম্যাচটি অন্তর্ভুক্ত করি না । এখন গ্রুপটি 1হ'ল আমরা ম্যাচটি যদি এটি একটি সংখ্যার সাথে প্রতিস্থাপন করতে চাই - যদি এটি একটি অক্ষর হয় তবে আমরা এটি দুটি বারের সাথে এটি প্রতিস্থাপন করতে চাই। এইখানেই দ্বিতীয় চেহারাটি খেলতে আসে:

(?<=(\1)(?<=\D))?

এটি একটি alচ্ছিক, সুতরাং এটি ব্যর্থ হলে এটি ম্যাচটি মোটেই প্রভাব ফেলবে না। এটি প্রথমে নিশ্চিত করে যে .এটির মাধ্যমে অঙ্কটি ছিল না(?<=\D) - সুতরাং বর্ণগুলির পিছনে কেবল তখনই প্রাসঙ্গিক হয় যখন আমরা অক্ষরের সাথে মেলে থাকি। \1সেক্ষেত্রে আমরা আরও একবার গ্রুপের সাথে মেলে (এটি সর্বদা মেলে, কারণ আমরা গ্রুপটিকে একই অবস্থান থেকে ক্যাপচার করেছি), তবে এটি গ্রুপে ক্যাপচার করি 2

অতএব, আমরা কেবলমাত্র উভয় গোষ্ঠীর ( $1$2) এর বিষয়বস্তু দিয়ে রেজেক্সকে প্রতিস্থাপন করি । ম্যাচটি যদি একটি অঙ্ক ছিল $2তবে এখনও খালি থাকবে এবং আমরা একবারে উপসর্গটি আবার লিখব। যদি এটি একটি চিঠি ছিল, $2একই হয় $1এবং আমরা এটি আবার দুবার লিখি।


8

জাভাস্ক্রিপ্ট (ES6) 82

Mwr247 দ্বারা প্রস্তাবিত রিজেপক্স অপটিমাইজেশন ব্যবহার করে

s=>s.replace(/([\W_])|./g,(x,y)=>y?(f=0,x):f?(p+=x,p+(-x-1?z:p)):(p=z,f=x),f=z='')

কোনও সাম্প্রতিক ব্রাউজারে নীচে স্নিপেট চালনা পরীক্ষা করুন

F=s=>s.replace(/([\W_])|./g,(x,y)=>y?(f=0,x):f?(p+=x,p+(-x-1?z:p)):(p=z,f=x),f=z='')

// document.write(F(prompt('Insert string')))

// TEST
console.log=x=>O.innerHTML+=x+'\n'

function test()
{
  O.innerHTML=F(I.value)
}

;[
 ['Mess up text','Meeesesessess upp teeexexextext']
,['This is some longer text.',
  'Thhhihihishis iss sooomomomeome looononongongongeongeongeronger teeexexextext.']
,['CAPS LOCK && "Punc-tua"+\'tion\'',
  'CAAAPAPAPSAPS LOOOCOCOCKOCK && "Puuunununcunc-tuuuaua"+\'tiiioioionion\'']
,['CaPs wItHIn loWERs'
  ,'CaaaPaPaPsaPs wIIItItItHItHItHIItHIItHInItHIn loooWoWoWEoWEoWERoWERoWERsoWERs']
,['1337 numb3r5','1333337 nuuumumumbumbumb3umb3rumb3rumb3r5']
,['abcdefghij 0123456789'
 ,'abbbcbcbcdbcdbcdebcdebcdefbcdefbcdefgbcdefgbcdefghbcdefghbcdefghibcdefghibcdefghijbcdefghij 0112123123412345123456123456712345678123456789']
,['Code-golf is the best!'
  ,'Cooodododeode-gooolololfolf iss thhhehe beeesesestest!']
].forEach(t => (
  i=t[0],x=t[1],r=F(i),
  console.log('Test ' + (r==x?'OK':'Fail')+'\nInput:  '+i+'\nResult: '+r+'\nCheck:  '+x+'\n')
))
#I { width: 50% }
Your test<input id=I><button onclick="test()">-></button>
<pre id=O></pre>


পবিত্র গরু! আমি এটি করতে চেয়ে তার উপায় (এবং আরও ভাল) এটি ছিল (nhhaa̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳i এর পদ্ধতির অনুরূপ)। +1
ETH প্রোডাকশনগুলি

7

জাভাস্ক্রিপ্ট (ES6), 92 88 87

f=>f.replace(/[^_\W]+/g,m=>m[0]+[...m].slice(1).reduce((a,e)=>a+=(y+=e,++e?y:y+y),y=''))

এটিকে কীভাবে গল্ফ দেওয়া যায় তা আমার কোনও ধারণা নেই ...

গ্লোভড ডাউন ডাউন রেগেক্স এবং ফাংশন হ্রাস করার জন্য একটি বাইট গল্ফের জন্য ETH প্রোডাকশনগুলির জন্য Mwir247 ধন্যবাদ


আপনার /[^_\W]+/g
রেজেক্সের

আমি বিশ্বাস করি এটি এই .reduceফাংশনটির জন্য কাজ করবে : (a,e)=>a+=(y+=e,++e?y:y+y)(1 বাইট ছোট)
ইটিএইচ প্রডাকশনগুলি

5

হাস্কেল, 215 200 বাইট

import Data.List
import Data.Char
c=concatMap
p c=[isDigit c,isAlpha c]
r(Just n)=c id.replicate(n+1)
r _=id
f(h:t)=h:(c(\s->r(findIndex id.p$last s)s).tail.inits)t
m=c f.groupBy(\a b->or$p a==or$p b)

এটি একটি জগাখিচুড়ি.

সমস্ত অদ্ভুত কৌতুক পড়তে মজা করুন, আমি কখনও ভাবিনি যে আমি এটি বেশি ব্যবহার করব id

এটা খুব খারাপ, কাপড় ইতিমধ্যে অর্ধেক কাজ এখানে করে আমদানিকৃত করা প্রয়োজন ( isDigit, isAlpha, inits)।


2
এটা lang-hsনা lang-haskell। নির্দিষ্ট করে lang-haskellএটি সম্ভবত একটি ডিফল্ট হাইলাইটার ব্যবহার করে শেষ হয়।
বাকুরিউ


3

হাস্কেল, 183 181 বাইট

import Data.Char
b(x:y)|h x=x:c[]y|2>1=x:b y
b[]=[]
h y=isDigit y||isAlpha y
c x l@(y:z)|h y=c(y:x)z|2>1=c x[]++b l
c x[]=reverse$g$x
g[]=[]
g a@(x:y)|isDigit x=a++g y|2>1=a++a++g y

ব্যবহার:

b"Hello, world!"
>"Heeelelellellelloello, wooorororlorlorldorld!"

লিফ উইলার্টসের উত্তরের সাথে এটি মূলত আলাদা কিনা তা জানেন না। তবে এখানে আলগোরিদিম।

  1. বৈধ পত্রের জন্য অনুসন্ধান (চিঠি বা সংখ্যা)
  2. যদি এটি চিঠি দেয় তবে চিঠি সংগ্রহ করা শুরু করুন। তবে এটি বিপরীতভাবে সঞ্চিত হয়, স্ট্রিংটি বিপরীত করুন। এবং প্রথম আইটেম বাদ দেওয়া হয়।
  3. এটি যেমন অবৈধ চিঠিটি আঘাত করেছে, তেমনি বিপরীত ইনপুট দিয়ে প্রশ্নের রূপান্তর করুন। প্রশ্নের রূপান্তরটি বিপরীত।

আমি একরকম অপ্রয়োজনীয় বন্ধনী রাখি।


0

টি-এসকিউএল, 357 বাইট

create proc x(@s varchar(99),@z int=0,@i int=0,@y varchar(99)='',@x varchar(99)='',@w varchar(99)='') as

while LEN(@s)>0
begin
    select @z=patindex('%[^0-z]%',@s+' '),@i=1,@w+=LEFT(@s,1)
    while @i<@z-1
    begin
        select @y=SUBSTRING(@s,2,@i)
        ,@x+=@y            
        ,@i+=1
        if @y like'%[a-z]'set @x+=@y
    end
select @w+=@x+SUBSTRING(@s,@z,1)
        ,@x=''
        ,@s=REPLACE(@s,left(@s,@z),'')
end

select @w

যেমন: exec x(@s='1337 numb3r5') রিটার্ন1333337 nuuumumumbumbumb3umb3rumb3rumb3r5


0

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

i=raw_input();s=r='';g=1
for c in i:
 s+=c
 if g:r+=c;g=0;s=''
 elif c.isalpha():r+=s*2
 elif '/'<c<':':r+=s
 else:g=1;r+=c
print r

অক্ষরগুলির মাধ্যমে লুপ হয় এবং প্রয়োজনে সংরক্ষণ / পুনরাবৃত্তি করে।


0

পিপ, 41 বাইট

aR`[^_\W]+`{Y0a@0.Ya@{1,++y}X2-(_Q+_)MJa}

পাঠ্যটিকে একটি কমান্ড-লাইন আর্গুমেন্ট হিসাবে গ্রহণ করে। আমরা [^_\W]+কলব্যাক ফাংশন সহ সমস্ত আলফানিউমেরিক রান ( ) প্রতিস্থাপন করতে একটি রেজেক্স প্রতিস্থাপন ব্যবহার করি । এই ফাংশনটি শব্দের প্রতিটি চরিত্রের জন্য আরেকটি ফাংশনকে ম্যাপ করে, ক্রমান্বয়ে বৃহত্তর অক্ষর তৈরি করে (বৈশ্বিক চলককে yসূচকের সাথে রাখে) এবং অক্ষর একটি সংখ্যা না হলে তাদের এক্স 2 পুনরাবৃত্তি করে। (যার যুক্তিটি +একটি সংখ্যায় রূপান্তর করতে এবং তারপরে Qএটি মূল চরিত্রের সাথে স্ট্রিং-সমান কিনা তা পরীক্ষা করে ব্যবহার করার জন্য ব্যবহার করে )) এই প্রক্রিয়াটি প্রথম অক্ষরটিকে ছেড়ে দেয়, তবে আমাদের পরে এটি যুক্ত করতে হবে ( a@0.)।


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