सोमवार मिनी-गोल्फ # 6: Mesesesessess upp teeexexextext


48

सोमवार मिनी-गोल्फ: लघु चुनौतियों की एक श्रृंखला , हर सोमवार को पोस्ट (उम्मीद है!)।

सच्ची कहानी 1 : दूसरे दिन, मैं अपने टैबलेट पर चारों ओर खेल रहा था, जब मुझे उस पृष्ठ पर जाने का विचार था जिसका मैं सामान्य रूप से अपने पीसी पर जावास्क्रिप्ट परीक्षण के लिए उपयोग करता हूं। पृष्ठ लोड होने के बाद, मैंने इस सरल कार्यक्रम में प्रवेश किया:

alert("Hello!")

मैं तब Execute बटन दबाने के लिए आगे बढ़ा, और जब उसने मुझे बताया कि मेरे द्वारा दर्ज किया गया कोड अमान्य था, तो वह आश्चर्यचकित था। मैंने टेक्स्टबॉक्स पर दूसरा नज़र डाला और यह देखा:

alllelelerlerlertlert("Heeelelellellelloello!")

वा ??? यही नहीं मैंने प्रवेश किया! तो यहाँ क्या हुआ? इसका पता लगाने के लिए, मैंने दो सरल रेखाएँ दर्ज कीं:

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

इस बिंदु तक, मैं इसे पता लगाने और इसे एक दिलचस्प चुनौती में बदलने में इतना अवशोषित हो गया कि मैं भूल गया कि मैं वहां पहले स्थान पर क्यों था। (मैंने सामान्य रूप से टाइप करने का तरीका पता किया, हालांकि: हर चरित्र के बाद स्पेस-बैकस्पेस को दबाया। बहुत थकाऊ, लेकिन आपको वह करना होगा जो आप करते हैं।)

चुनौती

चुनौती का लक्ष्य एक प्रोग्राम या फ़ंक्शन लिखना है जो पाठ में संसाधित होने के लिए लेता है, ऊपर सूचीबद्ध परिवर्तन करता है, और परिणाम / आउटपुट देता है।

विवरण

  • इनपुट में केवल मुद्रण योग्य ASCII, और कोई टैब या newlines नहीं होगा।

परीक्षण के मामलों

इनपुट्स: (प्रति पंक्ति एक)

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!

स्कोरिंग

यह , इसलिए बाइट्स जीत में सबसे कम वैध कोड है। टाईब्रेकर प्रस्तुत करने के लिए जाता है जो पहले अपने अंतिम बाइट की गिनती तक पहुंच गया। विजेता को अगले सोमवार, 2 नवंबर को चुना जाएगा। शुभकामनाएँ!

संपादित करें: और विजेता है ... @ मार्टिनबटनर ने एक अविश्वसनीय 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())
TheDoctor

खांसी Chrome DevTools का प्रयोग खांसी
kirbyfan64sos

@ TheDoctor मेरे जवाब का संपादित इतिहास देखें: P
बीटा

1
@ बटेडेके महान दिमाग एक जैसे सोचते हैं;)
द डक्टर

inb4 कोई व्यक्ति ऐसी भाषा बनाता है जहाँ आपको वास्तव में इस तरह लिखना है।
डीजेगैमर 98

जवाबों:


13

रेटिना , 43 बाइट्स

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

-sध्वज के साथ एक फ़ाइल से कोड चलाएँ । चूँकि यह केवल एक रेगेक्स प्रतिस्थापन है, आप इसे यहाँ परीक्षण कर सकते हैं (परिणाम देखने के लिए प्रसंग टैब पर क्लिक करें)।

व्याख्या

यह किसी भी अंक और अक्षर से मेल खाता है जो एक रन में पहला नहीं है। .किसी भी गैर-लाइनफीड चरित्र से मेल खाने के दौरान , लुकबाइंड अन्य शर्तों को सुनिश्चित करते हैं:

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

यह स्थिति के बाद की स्थिति से पीछे की ओर मेल खाता है .। सबसे पहले इसे एक या अधिक अक्षरांकीय अक्षर से मेल खाता है और उन्हें समूह में कब्जा 1के साथ ([^_\W]+)। यह तुरंत सुनिश्चित करता है कि .स्वयं एक अल्फ़ान्यूमेरिक वर्ण से मेल खाता है। फिर अतिरिक्त [^_\W]यह सुनिश्चित करता है कि वर्तमान रन में एक और अल्फ़ान्यूमेरिक चरित्र है, जिसे हम मैच में शामिल नहीं करते हैं। अब समूह 1वह है जो हम मैच को प्रतिस्थापित करना चाहते हैं यदि यह एक अंक है - यदि यह एक पत्र है तो हम इसे दो बार इस स्ट्रिंग के साथ बदलना चाहते हैं। यही कारण है कि दूसरा लुकबाइंड खेलने में आता है:

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

यह एक वैकल्पिक है, इसलिए यदि यह विफल रहता है तो यह मैच को प्रभावित नहीं करेगा। यह पहली बार सुनिश्चित करता है कि यह एक अंक नहीं. था - इसलिए जब हम पत्र मिलान कर रहे हैं, तब यह खोज केवल प्रासंगिक है। उस स्थिति में, हम एक बार फिर समूह से मेल खाते हैं (यह हमेशा मेल खाता है, क्योंकि हमने समूह को उसी स्थिति से कैप्चर किया है), लेकिन इसे समूह में कैप्चर करें ।(?<=\D)\12

इसलिए, हम रीगेक्स को दोनों समूहों ( $1$2) की सामग्री के साथ बदल देते हैं । यदि मैच एक अंक था, तब $2भी खाली रहेगा और हम केवल एक बार उपसर्ग वापस लिखते हैं। यदि यह एक पत्र था, $2जैसा ही है $1और हम इसे दो बार लिखते हैं।


8

जावास्क्रिप्ट (ईएस 6) 82

Mwr247 द्वारा सुझाए गए regexp अनुकूलन का उपयोग करना

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>


पवित्र गाय! मेरे द्वारा किए जाने की तुलना में यह अलग (और बेहतर) है (ñ̷͉h̷̭̿a That'sh )d̷̰̀ĥ̷̳ के दृष्टिकोण के समान)। +1
ETHproductions

7

जावास्क्रिप्ट (ईएस 6), 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=''))

मुझे नहीं पता कि इसे कैसे नीचे गिराया जाए ...

कम समारोह में एक बाइट गोल्फ के लिए गोल्फ नीचे regex और ETHproductions के लिए धन्यवाद Mwir247


अपने रेगेक्स के लिए इसका प्रयोग करें: /[^_\W]+/g(3 अक्षर बचाता है)
Mwr247

मेरा मानना ​​है कि यह कार्य के लिए काम करेगा .reduce: (a,e)=>a+=(y+=e,++e?y:y+y)(1 बाइट छोटा)
ETHproductions

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)

यह एक गड़बड़ है।

सभी अजीब quirks पढ़ने का मज़ा लें, मैंने कभी नहीं सोचा था कि मैं idइसे बहुत उपयोग करूंगा ।

बहुत बुरा सामान है कि पहले से ही आधा काम यहां करता है (आयातित किए जाने की आवश्यकता isDigit, isAlpha, inits)।


2
यह lang-hsनहीं है lang-haskelllang-haskellयह निर्दिष्ट करके संभवतः एक डिफ़ॉल्ट हाइलाइटर का उपयोग करके समाप्त होता है।
बाकुरिउ

3

गामा, 57 वर्ण

\X?=?@set{s;}
<D1>=@append{s;$0}$s
<L1>=@append{s;$0}$s$s

नमूना रन:

bash-4.3$ gema '\X?=?@set{s;};<D1>=@append{s;$0}$s;<L1>=@append{s;$0}$s$s' <<< '1337 numb3r5'
1333337 nuuumumumbumbumb3umb3rumb3rumb3r5

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. जैसा कि यह अमान्य पत्र है, उल्टे इनपुट के साथ प्रश्न का रूपांतरण करें। प्रश्न का रूपांतरण उल्टा है। g.reverse, लेकिन चूंकि यह पहले से ही उलटा है, तो हम बस उल्टा करते हैं

मैं किसी तरह बेमानी ब्रैकेट रखता हूं।


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सूचकांक के वैश्विक चर रखने के साथ ) और X2 को दोहराता है यदि चरित्र एक संख्या नहीं है। (वह तर्क जिसके +लिए किसी संख्या में कनवर्ट करने के लिए उपयोग किया जाता है और फिर Qयह जांचने के लिए कि क्या यह मूल वर्ण के बराबर है।) यह प्रक्रिया पहले वर्ण को छोड़ देती है, हालांकि, इसलिए हमें इसे बाद में जोड़ना होगा ( a@0.)।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.