URL- अनुकूल शीर्षक


28

इस साइट पर लोगों को वास्तव में उनके पद शीर्षक को अलंकृत करना पसंद है ...

Stewie's sequence: + * - / + * - /

हालाँकि, जब इस शीर्षक को पृष्ठ URL में शामिल किया जाना है, तो इसे सरल बनाया गया है:

stewies-sequence

चुनौती

आपका कार्य एक प्रोग्राम या फ़ंक्शन बनाना है, जिसे एक पद शीर्षक का प्रतिनिधित्व करते हुए, "URL-अनुकूल" रूपांतरण आउटपुट / रिटर्न देता है।

एल्गोरिथ्म है:

  • लोअरकेस में परिवर्तित करें (जहां लागू हो)
  • हर स्पेस ( ), पीरियड ( .), कॉमा ( ,) या स्लैश ( /) को डैश ( -) से बदलें
  • डैश को छोड़कर किसी भी गैर-अल्फ़ान्यूमेरिक वर्ण को निकालें।
  • आसन्न डैश ( a---b -> a-b) के समूहों को छोटा करें , जो किसी भी अग्रणी / अनुगामी को हटा दें।

कृपया ध्यान दें कि यह एल्गोरिथ्म एक सरलीकरण है, और हमेशा साइट के वास्तविक तरीके के समान परिणाम नहीं दे सकता है।


नियम

  • आप मान सकते हैं कि इनपुट:
    • खाली नहीं होगा।
    • कम से कम एक अल्फ़ान्यूमेरिक वर्ण होगा।
    • केवल ASCII रेंज में 32-126 (प्रिंट करने योग्य) वर्ण होंगे
  • पूर्ण कार्यक्रमों या कार्यों की अनुमति है।
  • एक बिलिन जो सटीक कार्य विनिर्देश करता है उसे अनुमति नहीं है
  • यह , इसलिए सबसे छोटा समाधान (बाइट्स में) जीतता है!

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

इस साइट पर अधिकांश पोस्ट परीक्षण के रूप में काम करेंगे, लेकिन यहाँ एक आसान सूची है:

Loading... Forever       -> loading-forever
N(e(s(t))) a string      -> nest-a-string
"Hello, World!"          -> hello-world
URL-Friendly titles      -> url-friendly-titles

C.U.S.R.S                -> c-u-s-r-s
1+2+3+4+...+n = -1/12?   -> 1234-n-1-12
How can I use cmp(a,b)   -> how-can-i-use-cmpa-b

कुछ लम्बी ...

Export The $PATH Variable, Line-By-Line   -> export-the-path-variable-line-by-line
Do n and n^3 have the same set of digits? -> do-n-and-n3-have-the-same-set-of-digits
Quine Anagrams! (Cops' Thread)            -> quine-anagrams-cops-thread
The Golfer Adventure - Chapter 1          -> the-golfer-adventure-chapter-1
Bootloader golf: Brainf***                -> bootloader-golf-brainf

और कुछ एज-केस जाँच नमूने (अधिक सुझाव देने के लिए स्वतंत्र महसूस):

0123   ->   0123
a a1   ->   a-a1
2-1=1  ->   2-11

अग्रणी -एस के बारे में क्या ? क्या उन्हें हटाना पड़ेगा? उदाहरण के लिए asdf-, क्या अंतिम -को हटाना होगा?
क्रिति लिथोस

अगर हम इस तरह से वर्णानुक्रम में हैं, तो क्या हम एक अंतर्निहित फ़ंक्शन का उपयोग कर सकते हैंif(isalphanum(ch))...
मुकुल कुमार

1
@KritiiLithos आसन्न डैश के समूह को कम करें (a --- b -> ab), जो भी लीडिंग / ट्रेलिंग हैं उन्हें हटा दें। मुझे लगता है कि इससे आपको स्पष्ट होना चाहिए।
मुकुल कुमार

और _अंडरस्कोर के बारे में क्या ? अंडरस्कोर होने पर मेरा कोड काम करता है।
क्रिति लिथोस

@ L3viathan को अब कोई फर्क नहीं पड़ता, मैंने अपना कोड बदल दिया ताकि अंडरस्कोर भी हटा दिया जाए
क्रिस्ति लिथोस

जवाबों:


7

रेटिना, 33 31 बाइट्स

T`L`l
[^a-z ,-9]+

\W+
-
^-|-$

(कार्यक्रम की एक नई रूपरेखा है)

मुझे यकीन नहीं है कि मैं इससे अधिक निचोड़ सकता हूं। यह सब कुछ कवर करना चाहिए। मामा फन रोल के समान आया। एक और 33 बाइट्स का संस्करण पुनरावर्ती रीजैक्स का उपयोग कर रहा है

इसे ऑनलाइन आज़माएं!

व्याख्या

T`L`l

यह रेखा सरल है, यह T ransliterating A-Z( L) से a-z( l,, लोअरकेस) द्वारा लोअरकेस में परिवर्तित हो जाती है ।


यह चरण सरल है, यह अनिवार्य रूप से सभी अनावश्यक पात्रों से छुटकारा दिलाता है ताकि बाद में खुद को बहुत परेशानी से बचा सके

[^a-z ,-9]+

[^a-z ,-9] किसी भी वर्ण से मेल खाता है जो नहीं है:

  • a-z: लोअरकेस वर्णमाला (याद रखें कि पूरा स्ट्रिंग पिछले आइटम के कारण लोअरकेस है)
  • : अंतरिक्ष जीवाणुओं
  • ,-9यह चार कोड रेंज ,है 9जिसमें से होता है ,-./0123456789, ठीक वैसा ही पात्र जो हमें चाहिए

इसके बाद हम सभी गैर अल्फ़ान्यूमेरिक चार्ट को डैश में बदल देते हैं (जो अब बस और है ,./-

\W+
-

यह (नहीं) मैच नहीं होगा _जो इसमें शामिल है \w(उपेक्षा \W) क्योंकि इसे पिछले चरण में हटा दिया गया था


मुझे लगता है कि जैसे इनपुट के लिए यह विफल हो जाएगा a = b
मार्टिन एंडर

मैं वास्तव में इसे स्वीकार करना चाहता हूं, लेकिन जैसा कि मार्टिन ने कहा, जब आप इनपुट करते हैं तो यह आसन्न डैश को छोटा नहीं करता है a = b:(
FlipTack

@ Flp.Tkc देर से प्रतिक्रिया के लिए खेद है (अभी फाइनल सप्ताह)। मैं दो और बाइट्स को निचोड़ने और इसे ठीक करने में कामयाब रहा हूं । मेरा मानना ​​है कि इस तरह के मामलों को अब सही ढंग से संभालती है
डाउनगैट

9

जावास्क्रिप्ट (ईएस 6), 90 82 79 75 बाइट्स

यह एकल के साथ काम करने का एक प्रयास है replace()। यह कोड केवल उन वर्णों को निकालता है जिन्हें हम रुचि रखते हैं और बाकी सब चीजों को अनदेखा करते हैं। हाइफ़न को संसाधित करने के लिए कुछ अतिरिक्त तर्क हैं।

s=>(s.toLowerCase().replace(/[ a-z,-9]/g,c=>S=c<'0'?s+'-':s=s?S+c:c,s=0),s)

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


1
इसके लिए ,a^a,, यह कोड देता है -aa-(प्रमुख / अनुगामी हाइफ़न हैं)
क्रिति लिथोस

@KritiiLithos ओह, इसे इंगित करने के लिए धन्यवाद। मैंने उस नियम पर ध्यान नहीं दिया। यह तय किया जाना चाहिए।
अरनौलड

9

वी , 41, 40, 37 , 36 बाइट्स

VuÍ[ .,\/]/-
Í0-9a-z­]
Í-«/-
Í^-ü-$

इसे ऑनलाइन आज़माएं! या एक बार में सभी परीक्षण मामलों की जाँच करें!

हमेशा की तरह, यहाँ इस में अप्रमाणित और गैर-ASCII वर्णों का एक समूह है, इसलिए यहाँ एक हेक्सडंप है:

0000000: 5675 cd5b 202e 2c5c 2f5d 2f2d 0acd 8430  Vu.[ .,\/]/-...0
0000010: 2d39 612d 7aad 5d0a cd2d ab2f 2d0a cd5e  -9a-z.]..-./-..^
0000020: 2dfc 2d24                                -.-$

यह इन जैसी चुनौतियां हैं जहां वी का "संकुचित रेगेक्स" सिस्टम काम में आता है।

व्याख्या

पहले चीजें पहले, हम सब कुछ को लोअरकेस में बदल देंगे। सौभाग्य से दो बाइट्स में ऐसा करने का वास्तव में सुविधाजनक तरीका है। मैंने उस बारे में एक टिप लिखी है । तो हम करते हैं

V           " Visually select this whole line
 u          " Convert this whole line to lowercase

उसके बाद हम संपीड़ित विकल्प कमांड का एक गुच्छा बनाते हैं। वी का संकुचित रेगेक्स कैसे काम करता है, इसका एक अच्छा अवलोकन यहां किया जा सकता है , लेकिन मूल विचार यह है कि हम कुछ पात्रों से बचने के लिए उच्च-बिट सेट कर सकते हैं। एक और सुविधा यह है कि पर्वतमाला (जैसे :%) और झंडे (जैसे /g) स्वचालित रूप से भरे हुए हैं। लेकिन अंत में, यह सभी स्थानापन्न आदेशों का अनुवाद करता है। वास्तव में, हम भी सीधे कार्यक्रम के बाकी हिस्सों का अनुवाद कर सकते हैं। इससे हमें यह मिलेगा:

:%s/[ .,/]/-/g
:%s/[^0-9a-z\-]//g
:%s/-\+/-
:%s/^-\|-$//g

यदि आप विम-रेगेक्स बोलते हैं, तो यह अधिक स्पष्ट होना चाहिए कि अब बाकी कार्यक्रम क्या करता है। तो यहाँ कार्यक्रम के बाकी है:

Í               " Substitute:
 [ .,\/]        "   a space, period, comma or forward slash. (Due to a strange bug, this needs to be escaped)
        /-      "   with a dash
Í               " Remove:
 [^0-9a-z­]     "   Any character that is not a dash or alpha-numeric
Í               " Substitute:
 -«             "   One or more dashes
   /-           "   with one dash
Í               " Remove:
 ^-             "   A dash at the beginning of a line
   ü            "   OR
    -$          "   a dash at the end of a line

8

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

1 बाइट्स ने thx @ETHproductions को बचाया

s=>s.toLowerCase().replace(/([ .,/-])|\W|_/g,(c,d)=>d?'-':'').replace(/^-*|-*$|-(?=-)/g,'')

परीक्षा

F=
s=>s.toLowerCase().replace(/([ .,/-])|\W|_/g,(c,d)=>d?'-':'').replace(/^-*|-*$|-(?=-)/g,'')

;[['Loading... Forever.....', 'loading-forever'],
['N(e(s(t))) a string', 'nest-a-string'],
['"Hello, World!"', 'hello-world'],
['URL-Friendly titles', 'url-friendly-titles'],
['C.U.S.R.S','c-u-s-r-s'],
['1+2+3+4+...+n = -1/12?', '1234-n-1-12'],
['How can I use cmp(a,b)', 'how-can-i-use-cmpa-b'],
['Export The $PATH Variable, Line-By-Line', 'export-the-path-variable-line-by-line'],
['Do n and n^3 have the same set of digits?', 'do-n-and-n3-have-the-same-set-of-digits'],
['Quine Anagrams! (Cops\' Thread)', 'quine-anagrams-cops-thread'],
['The Golfer Adventure - Chapter 1', 'the-golfer-adventure-chapter-1'],
['Bootloader golf: Brainf***', 'bootloader-golf-brainf'],
['0123', '0123'],
['a a1', 'a-a1'],
['2-1=1', '2-11']]
.forEach(t=>{
  var i=t[0],k=t[1],r=F(i)
  console.log(r==k?'OK':'KO',i+' -> '+r,r==k?'':k)
})


यह मेरे जवाब के रूप में बिल्कुल वैसा ही है जैसे कि यह एक नामित फ़ंक्शन में परिवर्तित हो जाता है
क्रिति लिथोस

लगता है कि आप *पिछले regex में पिछले की जरूरत नहीं है , हालांकि मैं गलत हो सकता है
ETHproductions

मुझसे गलती हो सकती है, लेकिन क्या आप सुनिश्चित हैं कि लुकहेड आवश्यक है?
कृति लिथोस

@KritiiLithos लुकहेड को स्ट्रिंग के अंदर कम से कम 1 रखने के लिए आवश्यक है, शुरू और अंत में सभी को हटाते समय
edc65

@ETHproductions सही है, धन्यवाद
edc65

4

पायथन 3, 103 100 96 95 बाइट्स

5 बाइट्स Flp.Tkc की बदौलत बच गए

import re
lambda s,y=re.sub,d='-':y('-+',d,y('[^0-9a-z-]','',y('[ .,/]',d,s.lower()))).strip(d)

@ Flp.Tkc वास्तव में ..
L3viathan

उफ़, मैंने गलती से इसे डाउनवोट कर दिया था। जब तक आप इस पोस्ट को संपादित नहीं करेंगे, मैं अपना वोट उल्टा नहीं कर सकता
कृति लिथोस

@ कृतिलिथोस डन
L3viathan 16

4

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

T`L`l
[^ az \ d।, / -] +

\ डब्ल्यू +
-
^ - | - $

इसे ऑनलाइन आज़माएं!

ट्रेलिंग न्यूलाइन पर ध्यान दें। अनिवार्य रूप से ओपी का कार्यान्वयन।


TIO लिंक थोड़ा अलग कोड की ओर
इशारा करता है

हाँ, मैंने अभी इसे ठीक किया है।
मामा फन रोल

1
आप T`L`lकम बाइट्स के साथ लोअरकेस में जाने के लिए उपयोग कर सकते हैं
डाउनवेज

a..इसी तरह से विफल रहता है
डाउनगैट

2
[\W]बस है\W
मार्टिन एंडर

3

MATL , 38 बाइट्स

'-'jyvk45y' .,/'m(t8Y245hm)'-*'45YX6L)

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें

व्याख्या

'-'jyv       % Take input line. Append and prepend a dash. Gives a char column vector
k            % Convert to lowercase
45y' .,/'m(  % Replace any of ' .,/' by a dash, using assignment indexing
t8Y245hm)    % Keep only alphanumeric chars or dashes, using reference indexing
'-*'45YX     % Replace each run of dashes by a single dash, using a regular expression
6L)          % Remove first and last chars, which are always dashes. Implicitly display

3

रूबी , 61 60 61 64 53 बाइट्स

(कोड के 52 बाइट प्लस एक बाइट के लिए -p)

$_=$_.tr("A-Z ,-/","a-z ").gsub(/[^\w ]/){}.split*?-

इसे ऑनलाइन आज़माएं!

tr()- अपर केस कैरेक्टर, स्पेस, कॉमा, पीरियड और स्लैश में कनवर्ट करें। व्हाट्सएप के -साथ अस्थायी रूप से स्थानापन्न करें ताकि मैं stripबाद में उपयोग कर सकूं ।
ध्यान दें कि अभिव्यक्ति का -चरित्र "A-Z ,-/"वास्तव में एक रेंज ऑपरेटर है, जो .चरित्र को भी परिवर्तन के अधीन बनाता है । यह युद्धाभ्यास वास्तव में बाइट्स से नहीं हटेगा, लेकिन यह फैंसी है इसलिए इसे रहना है।

gsub(/[^\w ]/){} - अनुमति नहीं सेट में सभी वर्णों को हटा दें।

split- तकनीकी रूप से, हमें उस सरणी की बिल्कुल आवश्यकता नहीं है, लेकिन splitअग्रणी और अनुगामी व्हाट्सएप को समाप्त करता है (जो वास्तव -में भेष में वर्ण है)। एक बोनस के रूप में, यह कई स्थानों के रन को एक साथ निचोड़ता है।

*?-- शॉर्टहैंड के लिए .join("-"); यह एक ही समय में पूर्ववर्ती splitऑपरेशन और व्हॉट्सएप परिवर्तन दोनों को उलट देता है । चरित्र शाब्दिकों के लिए संक्षिप्त संकेतन का उपयोग करके एक और बाइट को बचाया जाता है , जिससे कार्यक्रम को रूबी 1.9 या नए की आवश्यकता होती है।

अद्यतन 1: का उपयोग करते हुए getsरूबी के धारा संपादन मोड के बजाय एक बाइट बचाता है। ValueInk के सुझाव के
अनुसार वापस किया गया ।

अपडेट 2: (+3 बाइट्स कुल मिलाकर)

  • फिक्स्ड एज केस ..--hi, $/(→ hi) (+10 बाइट्स) - एक बार फिर यूजर वैल्यूइनके सौजन्य से
  • (+1 बाइट) के लिए मलूक लिया-p
  • इसके बजाय (+2 बाइट्स) से छुटकारा squeezeऔर उपयोग किया gsubगया , जिसने मुझे इसकी अनुमति दी:
  • stripअग्रणी और अनुगामी डैश (-10 बाइट्स) को संभालने के लिए उपयोग करें ।

अद्यतन 3: Hattrick द्वारा ValueInk। हम String#splitएक ही विभाजक के ऑटो-निचोड़ने वाले रन की आदत से 11 बाइट बचाते हैं , जो हमें पूरे अंतिम strip/ gsubश्रृंखला को खोदने और इसे एक split/ joinकॉम्बो द्वारा बदलने में सक्षम बनाता है । (-11 बाइट्स)


यह केवल REPL वातावरण में स्ट्रिंग लौटाता है और विफल रहता है अगर एक उचित रूबी कार्यक्रम के रूप में चलाया जाता है, और यह अच्छा नहीं है। केवल पूर्ण कार्यक्रम या कार्य / लंबोदर। वास्तव में, आपके पुराने संस्करण ने -pध्वज के साथ काम किया होगा , लेकिन यह निश्चित रूप से नहीं होगा।
मूल्य इंक

@ValueInk आप निश्चित रूप से सही हैं। मैंने तदनुसार अपना समाधान बदल दिया है। आपके कमेंट के लिए धन्यवाद; यह ठीक उसी तरह का मार्गदर्शन है जिसकी मैं बहुत सराहना करता हूं क्योंकि यह गोल्फ में मेरा पहला प्रयास है।
सिणोली

1
फिक्स करने के लिए धन्यवाद; मैंने अपना पतन हटा दिया है। ध्यान देने वाली बात यह है कि -pझंडे का उपयोग करना आपके कोड में 1 बाइट जोड़ता है (क्योंकि यह आपके कोड के निष्पादन को बदल देता ruby -e 'your code'है ruby -pe 'your code')। मुझे एक किनारे का मामला भी मिला है जहाँ यह -hi-इनपुट के लिए देता है जैसे ..--hi, $/कि आपको सभी प्रमुख / अनुगामी डैश को निकालना चाहिए और इस प्रकार वापस करना चाहिए hi
मूल्य इंक

2
-2 बदलकर बाइट्स gsub(/[^\w ]/){}करने के लिए tr('^a-z ',''), और उसके बाद के साथ समाप्त .split*?-करने के बजाय .strip.gsub...यह स्वचालित रूप से डुप्लिकेट संभालती है के बाद से और सभी एक ही बार में स्ट्रिंग के सिरों,!
वैल्यू इंक

1
चूंकि किसी ने यह नहीं कहा, कोड-गोल्फ में आपका स्वागत है!
21

3

जावास्क्रिप्ट (ईएस 6), 74 69 बाइट्स

f=
s=>s.toLowerCase().replace(/[^-/,. a-z\d]/g,``).match(/\w+/g).join`-`
<input oninput=o.textContent=/[a-z\d]/i.test(this.value)?f(this.value):``><pre id=o>

संपादित करें: 5 बाइट्स को यह महसूस करके सहेजा गया कि मैंने पहले ही सभी वर्णों को हटा दिया है, -/,. 0-9a-zइसलिए मैं \wशेष शब्दों का मिलान करने के लिए उपयोग कर सकता हूं ।


मुझे लगता है कि आपको HTML कोड को बायटेकाउंट में शामिल करना होगा क्योंकि इसका उपयोग चुनौती को हल करने के लिए किया जा रहा है
क्रिति लिथोस

1
@KritiiLithos नहीं, यह केवल प्रदर्शन उद्देश्यों के लिए है। प्रश्न कहता है कि मेरा कोड कम से कम एक अल्फ़ान्यूमेरिक वर्ण मान सकता है, और HTML कोड फ़ंक्शन को कॉल करने से पहले बस इसका परीक्षण करता है।
नील

[a-z\d]हो सकता है [^\W_]?
edc65

@ edc65 अच्छा है, लेकिन मुझे तब एहसास हुआ कि यह और भी सरल हो सकता है!
नील

2

PHP, 87 बाइट्स

नियमित अभिव्यक्तियों का विचार मौजूदा उत्तरों से आता है।

<?=trim(preg_replace(['@[^ a-z,-9]@','@[ ,-/]+@'],['','-'],strtolower($_GET[T])),'-');

इसके लिए जरूरी है कि आपके पास PHP चलाने वाला और HTTP पर पहुंचने का सर्वर हो।

शीर्षक कुंजी पर होना चाहिए T, और परिणाम स्क्रीन पर मुद्रित किया जाएगा।

उदाहरण: http://localhost/title.php?T=<my shiny title>


2

बैश / यूनिक्स उपकरण, 56 बाइट्स

tr A-Z\ .,/ a-z-|tr -cds a-z0-9- -|sed s/^-//|sed s/-$//

ऊपरी-मामले को निचले-मामले के अक्षरों और आवश्यक विशेष वर्णों को डैश के साथ बदलें।

अक्षरों, अंकों और डैश के अलावा अन्य वर्णों के लिए (-d विकल्प को हटाएं), और फिर एक डैश में एक पंक्ति में कई डैश को एक में निचोड़ने के लिए (-s विकल्प को tr) करें।

शुरुआत में डैश हटाएं, और फिर अंत में।


2

पॉवरशेल, 85 बाइट्स

($args[0].ToLower()-replace'[ .,/]','-'-replace'[^a-z,-9]'-replace'-+','-').Trim('-')

यह एक पंक्ति में लोअरकेस, तो 3 regex की जगह बनाने के लिए, और किसी भी अनुगामी ट्रिम -की


$inputआप 2 बाइट्स नहीं बचा सकता है ?
ब्राह्मणवादी

2

जावास्क्रिप्ट, 90 98 94 93 91 90 91 बाइट्स

1 बाइट @ edc65 की बदौलत बचा!

1 बाइट ने एक अग्रणी अर्ध-कॉलन को खोलने के लिए @IsmaelMiguel को धन्यवाद दिया!

1 बाइट के लिए असफल होने के बाद प्राप्त किया ,a-^-a,

f=s=>s.toLowerCase().replace(/[^ a-z,-9]/g,"").replace(/[ ,-/]+/g,"-").replace(/^-|-$/g,"")

मुझे यह विशेष रूप से प्रस्तुत करने के बारे में सबसे ज्यादा पसंद है। पहले में replace, हम कुछ भी है कि अक्षरांकीय और नहीं एक नहीं है हटाने ,, -, ., /और नहीं एक अंतरिक्ष। हम a-zअक्षरों का पता लगाने के लिए उपयोग करते हैं, और हम ,-9उन विशेष वर्णों और संख्याओं का पता लगाने के लिए उपयोग करते हैं क्योंकि इन एएससीआईआई के चरित्र कोड सभी लाइन अप करते हैं!

, = 44
- = 45
. = 46
/ = 47
0 = 48
...
9 = 57


प्रमुख डैश को नहीं हटाता है: "-1" "-1" बन जाता है, जब इसे "1" बनना चाहिए।
L3viathan 14

@ L3viathan को अब काम करना चाहिए
क्रिति लिथोस

f=अब आपकी बाइट की गिनती 96 होने की आवश्यकता नहीं है । और regexp में एक सीमा के अंदर the \ की जरूरत नहीं है, इसलिए यह 95 हो सकता है। लेकिन ... अभी भी काम नहीं कर रहा है: कोशिश...title
edc65

1
हेई! मैं वह बूढ़ा नहीं हूँ ! (६५
नॉट

1
मेरा मानना ​​है कि आपको f=और ;अंत में इसकी आवश्यकता नहीं है । बस निर्दिष्ट करें कि यह एक अनाम फ़ंक्शन है। इसके साथ ही आपका जवाब 90 बाइट लंबा होना चाहिए।
इस्माईल मिगुएल 15

1

लुआ, 91 बाइट्स

a=a:lower():gsub( '[ .,/]', '-' ):gsub( '[^%w-]', '' ):gsub( '%-+', '-' ):match'%-?(.*)%-?'

aURL स्ट्रिंग कहां है

स्पष्टीकरण:

  • अधिकांश यह बहुत सीधे आगे है। a:lower()लोअर-केस फ़ंक्शन लौटाता है
  • :gsub पैटर्न का मिलान पाता है और इसे स्ट्रिंग के साथ बदल देता है।
  • '[ .,/]': ब्रैकेट्स का अर्थ "या" है, इसलिए यह स्थान, अवधि, अल्पविराम और स्लैश से मेल खाता है। लालच करने की आवश्यकता नहीं है क्योंकि :gsubसभी घटनाएँ होती हैं।
  • '[^%w-]': ^मतलब "नहीं" जब कोष्ठक के अंदर, %wकुछ भी अल्फ़ान्यूमेरिक का मतलब है। तो '[^%w-]कुछ भी है कि है से मेल खाता नहीं अक्षरांकीय या एक पानी का छींटा।
  • '%-+': जितना हो सके उतने डैश से मिलान करें और उन्हें केवल एक डैश से बदलें।
  • match'%-?(.*)%-?': लुआ में, यदि एक स्ट्रिंग फ़ंक्शन का एकमात्र तर्क है, तो किसी कोष्ठक की आवश्यकता नहीं है। केवल शुरुआत और अंत में एक डैश की जाँच करने की आवश्यकता है क्योंकि डैश पहले से ही कम हो चुके हैं। लंगर पात्रों की कोई आवश्यकता नहीं है क्योंकि .*सब कुछ मैच है, लालची।

1

सी, 194 बाइट्स

i,j;f(char*s,char*d){if(*s>47&*s<58|*s>96&*s<123)d[i++]=*s;if(*s>64&*s<91)d[i++]=*s+32;if(i-j&&*s>43&*s<48|*s==32&&*(s+1)&&*(s+1)>47|(*(s+1)<44&&*(s+1)^32)){d[i++]=45;j=i;}*++s?f(s,d):(d[i]=0);}

के साथ बुलाना:

int main()
{
    char *in="Loading... Forever";
    char out[128];
    f(in,out);
    puts(out);
}

1

एसएएस, 108

एसएएस की क्रिया सिंटैक्स के कारण यहां कम प्रतिस्पर्धी उत्तरों में से एक - प्रति चरित्र 9 वर्ण दंड वास्तव में दर्द होता है - लेकिन यह एक अच्छा रेगेक्स सीखने का अभ्यास था:

t=prxchange('s/^-|-$//',-1,prxchange('s/-+/-/',-1,compress(translate(lowcase(t),'----',' .,/'),'-','adk')));

1

पायथ, 35 बाइट्स

:r::rQ0"[-.,/]"d"[^\w ]"k6"[ -]+"\-

व्याख्या

    rQ0                              Convert letters to lower case
   :   "[-.,/]"d                     Replace all -.,/ with spaces
  :             "[^\w ]"k            Remove all remaining symbols
 r                       6           Remove leading and trailing spaces
:                         "[ -]+"\-  Turn runs of spaces and dashes to one dash

1

पर्ल 6, 75

{lc .subst(/<[\ .,/]>/,"-"):g.subst(/<[\W]-[\-]>/,""):g.subst(/\-+/,"-"):g}

0

जीएनयू सैड, 65 बाइट्स

s/.*/\L\0/
s@[ .,/]@-@g
s/[^-a-z0-9]//g
s/-\+/-/g
s/^-\|-$//g

रेगेक्स प्रतिस्थापन की एक श्रृंखला। \Lइनपुट को कम करने के लिए GNU sed से गैर-पोर्टेबल का उपयोग करता है । फ़ाइल का उपयोग करके चलाएँ sed -f

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