ssTTsSTtRrriinInnnnNNNIiinngg


18

चुनौती

पिछले एक को छोड़कर स्ट्रिंग के प्रत्येक चरित्र के लिए, निम्नलिखित करें:

  • वर्तमान चरित्र आउटपुट।

  • निम्न सूची से यादृच्छिक रूप से आउटपुट द्वारा अनुसरण किया गया है जो 1 - 5 (समावेशी) के बीच यादृच्छिक संख्या है:

    • वर्तमान चरित्र
    • स्ट्रिंग का अगला चरित्र
    • उस वर्ण का स्विचकेस संस्करण जो आप वर्तमान में हैं
    • स्ट्रिंग के अगले वर्ण का स्विचकेस संस्करण।

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

String -> SSSTSStrTrIiinIIngn

, . , . , . Hello world! -> ,,, .. , ,, .... , , .. .. . HHH HHEeelLlLllooO wwOworOOrrrRllDd!!D

Programming Puzzles and Code Golf -> PrPPrRrOooooogggRgGraAraaaMMMmmmimMIiininGGgG PPPPuZzZZzZzzZzllLLEEeEsEsssS a aANnNddD C COCoooOOdeDe E GGGoOllFFf

टिप्पणियाँ

  • आपको केवल वर्ण के स्विचकेस संस्करण को लागू करने की आवश्यकता है यदि चरित्र वर्णमाला (AZ और az) का हिस्सा है।
  • आपके यादृच्छिक फ़ंक्शन को एकरूप होने की आवश्यकता नहीं है लेकिन फिर भी दी गई सूची में किसी भी तत्व को वापस करने का मौका होना चाहिए।
  • आपको किसी भी मानक I / O प्रारूप का उपयोग करने की अनुमति है।
  • आप मान सकते हैं कि इनपुट की लंबाई दो से अधिक या उसके बराबर है।
  • आप मान सकते हैं कि इनपुट में केवल ASCII वर्ण हैं।
  • शीर्षक एक परीक्षण मामला नहीं है (यदि यह वैध परीक्षण मामला है तो यह अनजाने में है)।
  • स्विचकेस का मतलब है कि अगर यह अपरकेस है तो लोअरकेस को मोड़ें और अगर यह लोअरकेस है तो इसे अपरकेस में बदल दें।

'... एक समान होने की आवश्यकता नहीं है' के अलावा, मुझे लगता है कि आप शायद यह निर्दिष्ट करना चाहते हैं कि कुछ इनपुट दिए गए हैं, सभी परिमित कानूनी आउटपुट सैद्धांतिक रूप से उत्पन्न होना चाहिए (अन्यथा, मेरा गैर-समान यादृच्छिक पूर्णांक [1] , 2,3,4,5] हमेशा 2 रहने वाला है, और मैं मूल स्ट्रिंग का उत्पादन करूँगा)।
चास ब्राउन

@ChasBrown हाँ, मैं प्रश्न को संपादित करेंगे
MilkyWay90

2
मुझे लगता है कि विनिर्देश भ्रमित हैं। क्या आप अधिक स्पष्ट हो सकते हैं? उदाहरण के लिए, काम से बाहर कैसे Stringपैदा करता हैSSSTSStrTrIiinIIngn
लुइस Mendo

7
@LuisMendo मैं ओपी नहीं हूँ, लेकिन मुझे लगता है: [S]SSTSS [t]rT, [r]I, [i]inII, [n]gnजहाँ ब्लॉक के बीच के अक्षर पहले बुलेट पॉइंट (" वर्तमान वर्ण आउटपुट ") हैं, और अन्य वर्ण 1-5 बार बेतरतीब ढंग से उसके लिए चार विकल्पों में से एक हैं चरित्र। लेकिन मैं मानता हूं, कुछ और स्पष्ट स्पष्टीकरण उचित होंगे। परीक्षण के मामले के अलावा यह विशेष रूप से स्पष्ट नहीं था कि हमें 1-5 बार एक यादृच्छिक विकल्प चुनना होगा। रैंडम पसंद चुनने के बजाय 1-5 बार दोहराया गया (जैसा कि गिया जवाब वर्तमान में करता है)।
केविन क्रूज़सेन

3
@KevinCruijssen धन्यवाद, आपकी व्याख्या उदाहरण फिट बैठता है, और स्पष्ट है। ओपी को पुष्टि करनी चाहिए और उसे संपादित करना चाहिए
लुइस मेंडो

जवाबों:


6

गैया , 25 बाइट्स

ṇ\+†ṅ\⟨)₌¤:~+4ṛ⟨ṛ₌¤⟩ₓ\⟩¦$

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

2 बग को इंगित करने के लिए केविन क्रूज़सेन का धन्यवाद !

ṇ\				| delete the last character from the input
  +†				| push the input again and concatenate together, so for instance
				| 'abc' 'bc' becomes ['ab' 'bc' 'c']
    ṅ\				| delete the last element
       ⟨       		⟩¦	| for each of the elements, do:
	)₌			| take the first character and push again
	  ¤			| swap
	   :			| dup
	    ~			| swap case
	     +			| concatenate strings
	      4ṛ		| select a random integer from [1..5]
	        ⟨    ⟩ₓ		| and repeat that many times
		 ṛ₌¤		| select a random character from the string
		      \ 	| clean up stack
			   $	| convert to string

ध्यान दें कि 4ṛक्योंकि पूर्णांक zके लिए अजगर के रूप में कार्यान्वित किया जाता है random.randint(1,z+1), जो पूर्णांक को Nइस तरह लौटाता है 1<=N<=z+1


क्या आप सुनिश्चित हैं कि रन-लेंथ एनकोड सही है? यदि मैं चुनौती को सही ढंग से समझता हूं: चार विकल्पों को यादृच्छिक रूप से 1-5 बार चुना जाना चाहिए, बजाय चार बेतरतीब ढंग से, 1-1 बार दोहराया गया। पहला उदाहरण आउटपुट SSSTSStrTrIiinIIngn( [SSSTSS, trT, rI, iinII, ngn]) यह दर्शाता है, और वर्तमान में आपके कार्यक्रम में संभव आउटपुट नहीं है (मुझे लगता है)।
केविन क्रूज़सेन

@KevinCruijssen मैंने "लंबाई से यादृच्छिक संख्या सूची में आउटपुट" की व्याख्या की, जिसका मतलब रन-लेंथ डिकोड है, लेकिन आप सही हैं, परीक्षण के मामले दूसरी व्याख्या का संकेत देते हैं; मुझे लगता है कि इसे ठीक करना बहुत आसान होना चाहिए
Giuseppe

1
5ṛमें परिणाम कर सकते 6किसी कारण से यह ऑनलाइन का प्रयास करें ? पुनश्च: क्या गैया सूची में पूर्णांक, या गैया में लूप के लिए पूर्णांक नहीं है?
केविन क्रूज़सेन

1
@KevinCruijssen खतरे, बिजनेस कैट को वास्तव में ऑफ-बाय-वन त्रुटियों को ठीक करने की आवश्यकता है ... मुझे वास्तव में लगा कि एक forप्रकार का निर्माण था, लेकिन मुझे पूरा यकीन है कि यह विकी पृष्ठ पर भी प्रलेखित नहीं है।
Giuseppe

4

एपीएल (डीज़िमा / एपीएल) , २३ बाइट्स

बेनामी tacit उपसर्ग समारोह।

2(⊣,{?4⍴⍨?5}⊇,,-⍤,)/

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

2()/ प्रत्येक वर्ण जोड़ी के बीच निम्नलिखित infix tacit फ़ंक्शन लागू करें:

- जोड़ी  के संघटन
 का स्विच
,

,, उस जोड़े की सहमति को पूर्व निर्धारित करें

{}⊇ उस से निम्नलिखित तत्वों को चुनें:

  ?5 श्रेणी 1… 5 में यादृच्छिक संख्या

  4⍴⍨ वह कई चौ

  ? उन लोगों के लिए यादृच्छिक संकेत

ϵ nlist (समतल)


3

पर्ल 6 , 60 बाइट्स

{S:g{.)>(.)}=$/~[~] roll ^5 .roll+1,$/.lc,$/.uc,$0.lc,$0.uc}

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

लोअरकेस / अपरकेस भाग थोड़े कष्टप्रद है।


मैं पर्ल को नहीं जानता, इसलिए मैं शायद यहाँ कुछ बेवकूफ कह रहा हूँ। लेकिन क्या यह संभव है कि किसी तरह से $/और $0एक साथ और .lcउस स्ट्रिंग पर उपयोग किया जा सके, और फिर उस स्ट्रिंग और उपयोग की एक प्रति बनाएं .uc, और उन दोनों को एक साथ मिलाएं? सुनिश्चित नहीं हैं कि अगर वह भी संभव, या अपने वर्तमान की तुलना में कम है $/.lc,$/.uc,$0.lc,$0.uc, लेकिन यह मतलब होगा आप उपयोग करेंगे $/, $0, .lc, और .ucप्रत्येक एक बार।
केविन क्रूज़सेन

1
काश, (.lc~.uc for $0~$/).combलंबा है। पर्ल 6 वास्तव में तार और सूचियों को अलग करना चाहता है, इसलिए "abc"[0] eq "abc"(यह एकल-आइटम सूची होने का दिखावा करता है)।
Ven

आप इसे स्लिप करके कर सकते हैं और एक सूची पर लागू एक अनाम फ़ंक्शन: {.lc,|.uc}($/,|$0)-5 बाइट्स के लिए, और {.lc,|.uc}(@$/)-8 बाइट्स के लिए मैचों की सूची का उपयोग करें । tio.run/…
फिल एच।

@PhilH नहीं जो काम नहीं करता है। वे समाधान केवल प्रत्येक अक्षर में से एक को
जो किंग


3

दे घुमा के , 121 बाइट्स

-20 बाइट्स नहुएल के लिए धन्यवाद

-9 बाइट्स रोबोटिक के लिए धन्यवाद

for((i=0;i<${#1};i++)){
s=${1:i:1}
m=${1:i:2}
m=${m,,}${m^^}
for((t=0;t++<RANDOM%6;)){
s+=${m:RANDOM%4:1}
}
printf "$s"
}

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

मूल उत्तर

बैश , 150 बाइट्स

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

for((i=0;i<${#1}-1;i++));do
c=${1:$i:1}
n=${1:$((i+1)):1}
a=($n ${c,} ${c^} ${n,} ${n^})
shuf -e ${a[@]} -n "$(shuf -i 1-5 -n 1)"|xargs printf %s
done

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

वर्तमान cऔर अगले nचरित्र को सेट करने वाले वर्णों के माध्यम से कोड सीधा लूप है , फिर 4 संभावनाओं की एक सरणी बना रहा है, उनमें से एक को दोहराता है, इसलिए ठीक 5 है। इसके बाद हम उस सरणी में फेरबदल करते हैं, और फिर उसमें से n तत्वों को चुनते हैं, जहां n खुद के बीच यादृच्छिक है। 1 और 5।


ऐसा लगता है कि यह गायब हैprintf %s "$c"
नहुएल फोइउलुल

1
doऔर done{}
अघोषित


1
@roblogic वह चतुर है। tyvm।
योना

1
121-बाइट समाधान थोड़ा नाजुक / छोटी गाड़ी है, यहाँ एक और अधिक मजबूत (133-बाइट) संस्करण है जिसे सभी मुद्रण योग्य ASCII, tio.run
रोबोग्लिक


2

05AB1E , 18 17 बाइट्स

ü)vyн5LΩFyD.š«Ω]J

@Giuseppe Gaia जवाब से प्रेरित है ।
-1 बाइट @ शुगी को धन्यवाद ।

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

स्पष्टीकरण:

ü)             # Create all pairs of the (implicit) input
               #  i.e. "Hello" → [["H","e"],["e","l"],["l","l"],["l","o"]]
  v            # Loop over each these pairs `y`:
   yн          #  Push the first character of pair `y`
   5LΩ         #  Get a random integer in the range [1,5]
      F        #  Inner loop that many times:
       y       #   Push pair `y`
        D.š«   #   Duplicate it, swap the cases of the letters, and merge it with `y`
            Ω  #   Then pop and push a random character from this list of four
  ]J           # After both loops: join the entire stack together to a single string
               # (which is output implicitly as result)

मुझे नहीं पता 05AB1E लेकिन, के बजाय INè, आप के पहले चरित्र को धक्का देकर कुछ भी बचा सकते हैं y?
झबरा

@ शैगी हाँ, मैं वास्तव में कर सकता हूँ .. धन्यवाद! शायद मुझे आज के लिए गोल्फ बंद करना चाहिए, मैं एक गड़बड़ हूँ, योग्य ..
केविन क्रूज़सेन

तुम एक गड़बड़ कर रहे हैं ? ¨vNUy5LΩFy¹X>è«D.š«Ω?
मैजिक ऑक्टोपस Urn

1
@MagicOctopusUrn हालांकि एक बहुत ही मूल दृष्टिकोण, मुझे डर है कि यह चुनौती का पहला बुलेट बिंदु नहीं करता है (" वर्तमान चरित्र आउटपुट। "), क्योंकि परिणाम के साथ शुरू हो सकता है।t , T, या sनिवेश के लिए "String"अपने कार्यक्रम में, जबकि यह हमेशा के साथ शुरू करने वाला है S
केविन क्रूज़सेन

1

चारकोल , 27 बाइट्स

FLθ«F∧ι⊕‽⁵‽⭆✂θ⊖ι⊕ι¹⁺↥λ↧λ§θι

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। स्पष्टीकरण:

FLθ«

इनपुट स्ट्रिंग के सभी सूचकांकों पर लूप करें।

F∧ι⊕‽⁵

पहले सूचकांक को छोड़कर, 1 से 5 समावेशी से यादृच्छिक संख्या पर लूप ...

‽⭆✂θ⊖ι⊕ι¹⁺↥λ↧λ

... स्ट्रिंग से पिछले और अगले वर्णों को निकालें, ऊपरी और निचले केस संस्करणों को लें, और चार का एक यादृच्छिक चरित्र चुनें।

§θι

वर्तमान सूचकांक पर चरित्र को प्रिंट करें।


1

पर्ल 5 (-p ), 77 बाइट्स

s/(.)(?=(.))/$x=$1;'$x.=substr"\U$1$2\L$1$2",4*rand,1;'x(1+5*rand)/gee;s/.$//

TIO


आप का उपयोग करके 4 बाइट बचा सकता है $&के बजाय $1, और chop+ -lके बजायs/.$//
दादा

1

जाप -P , 14 बाइट्स

äÈ+Zu pv ö5ö Ä

कोशिश करो

äÈ+Zu pv ö5ö Ä     :Implicit input of string
ä                  :Take each consectutive pair of characters
 È                 :Pass them through the following function as Z
  +                :  Append to the first character of the pair
   Zu              :    Uppercase Z
      p            :    Append
       v           :      Lowercase
         ö         :    Get X random characters, where X is
          5ö       :      Random number in the range [0,5)
             Ä     :      Plus 1
                   :Implicitly join and output



1

सी (जीसीसी) 175 162 बाइट्स

-12 लाम्बेता से बाइट्स

f(s,S,i,r,a)char*s,*S,*i;{srand(time(0));for(i=S;*(s+1);++s){*i++=*s;for(r=rand()%5+1;r--;*i++=rand()&1?a>96&a<123|a>64&a<91?a^32:a:a)a=rand()&1?*s:*(s+1);}*i=0;}

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


मुझे नहीं लगता कि आपको 0पहली पंक्ति में आवश्यकता है ।
लैम्ब्डाटा

बफर Sको एक पैरामीटर के रूप में लेने और अपने चर को तर्क सूची में जोड़कर बहुत सारे पात्रों को बचा सकते हैं : इसे ऑनलाइन आज़माएं!
लैम्ब्डाटा

@LambdaBeta आप पता चला है सही के बारे में हैं 0, जो इसके लायक यह है करने के लिए नहीं की #defineअब और
rtpax


1

पावरशेल , 154 105 103 95 87 बाइट्स

-67 बाइट्स की बदौलत mazzy को रोका नहीं जा सकता

-join(($x=$args)|%{$_;$x[$i,++$i]*5|%{"$_"|% *wer;"$_"|% *per}|random -c(1..5|random)})

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

शानदार तरीका नहीं है लेकिन यह काम करता है। अब यह बहुत अच्छा है। विभाजन के माध्यम से इनपुट लेता है


ओह, वाह, बहुत सारे बाइट्स।
MilkyWay90

1
@ माज़ी डांग कुत्ता। मुझे हर समय छप-छप करने की आदत पड़नी चाहिए, लेकिन पता नहीं था कि आप वाइल्डकार्ड के सदस्यों को इस तरह से हॉटस्पैप कर सकते हैं।
विस्कह

1
मुझे क्षमा करें 87 बाइट्स
mazzy

0

स्काला 2.12.8, 214 बाइट्स

गोल्फ संस्करण:

val r=scala.util.Random;println(readLine.toList.sliding(2).flatMap{case a :: b :: Nil=>(a +: (0 to r.nextInt(5)).map{_=>((c: Char)=>if(r.nextBoolean)c.toUpper else c.toLower)(if(r.nextBoolean)a else b)})}.mkString)

नई कहानियों और संकेत के साथ गोल्फ:

val r=scala.util.Random
println(readLine.toList.sliding(2).flatMap{
  case a :: b :: Nil=>
    (a +: (0 to r.nextInt(5)).map{_=>
      ((c: Char)=>if(r.nextBoolean)c.toUpper else c.toLower)(if(r.nextBoolean)a else b)
    })
}.mkString)

Ungolfed:

import scala.io.StdIn
import scala.util.Random

def gobble(input: String): String = {
  input.toList.sliding(2).flatMap {
    case thisChar :: nextChar :: Nil =>
      val numberOfAdditions = Random.nextInt(5)
      (thisChar +: (0 to numberOfAdditions).map { _ =>
        val char = if(Random.nextBoolean) thisChar else nextChar
        val cc = if(Random.nextBoolean) char.toUpper else char.ToLower
        cc
      })
  }.mkString
}

println(gobble(StdIn.readLine()))

1
a :: b :: Nilमें बदलने का कोई तरीका नहीं a::b::Nil? उसी के लिए a :+, a:+()या a.:+()काम कर सकता है
Ven

@ a::b::Nilकोई संकलन त्रुटि का कारण बनता है। +:सूची में एक विधि को परिभाषित किया गया है, इसलिए यह बाहरी परदों से छुटकारा पाकर अंतरिक्ष को बचा सकता है?
सोरेन

आपके पास यहां केवल एक ही हाथी है, इसलिए वैसे भी यह ऑटोटुप्लिंग नहीं है
वेन


0

सी # (विजुअल सी # इंटरएक्टिव कंपाइलर) , 236 213 209 बाइट्स

a=>{int i=0,j;var m=new Random();var s="";var c = a.Select(x=>Char.IsLetter(x)?(char)(x^32):x).ToArray();for(;i<a.Length-1;i++)for(j=m.Next(1,5);j-->0;)s+=new[]{a[i],c[i],a[i+1],c[i+1]}[m.Next(0,3)];return s;}

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


गैर-अल्फ़ान्यूमेरिक वर्णों के साथ काम नहीं करता है। char b=a[0]-> var b=a[0], dलूप के लिए घोषणा में अतिरिक्त स्थान
अज्ञानता

0

टी-SQL क्वेरी, 286 बाइट्स

DECLARE @ char(999)='String'

SELECT @=stuff(@,n+2,0,s)FROM(SELECT
top 999*,substring(lower(c)+upper(c),abs(v%4)+1,1)s
FROM(SELECT*,number n,substring(@,number+1,2)c,cast(newid()as varbinary)v
FROM(values(1),(2),(3),(4),(5))F(h),spt_values)D
WHERE'P'=type and n<len(@)-1and h>v%3+2ORDER
BY-n)E
PRINT LEFT(@,len(@)-1)

इसे ऑनलाइन आज़माएं दुर्भाग्य से ऑनलाइन संस्करण हमेशा एक ही varchar के लिए एक ही परिणाम दिखाता है, एमएस SQL ​​सर्वर प्रबंधन स्टूडियो के विपरीत



0

जाप -P , 43 16 बाइट्स

äÈ+(Zv +Zu)ö5ö Ä

अब बहुत हो गया!

कोशिश करो


यह हर बार एक ही परिणाम वापस करने के लिए लगता है।
झबरा

@ शागिर्द ठीक करेंगे। इसके अलावा, äवर्णन कहता है कि यह तीन तर्क देता है, आखिरी होने के साथ x+y। लेकिन जैसा कि आप यहां देख सकते हैं , यह सिर्फ 1 लौटाता है। क्या यह एक बग है?
इग्नोरेंस

0

सी (जीसीसी) , 110 109 बाइट्स

i,p;g(char*_){for(i=rand(putchar(*_))%1024;p=_[i%2],putchar(i&2&&p>64&~-p%32<26?p^32:p),i/=4;);_[2]&&g(_+1);}

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

-1 सीटिंग के लिए धन्यवाद

i,p;g(char*_){
    for(i=rand(putchar(*_)) //print current char
         %1024;             // and get 10 random bits
        p=_[i%2],           //1st bit => current/next char
        putchar(i&2&&       //2nd bit => toggle case
            p>64&~-p%32<26  // if char-to-print is alphabetic
            ?p^32:p),
        i/=4;);             //discard two bits
    _[2]&&g(_+1);           //if next isn't last char, repeat with next char
}

मुद्रित वर्णों की संख्या (प्रति इनपुट चरित्र) समान रूप से यादृच्छिक नहीं है:

1  if      i<   4 (  4/1024 = 1/256)
2  if   4<=i<  16 ( 12/1024 = 3/256)
3  if  16<=i<  64 ( 48/1024 = 3/ 64)
4  if  64<=i< 256 (192/1024 = 3/ 16)
5  if 256<=i<1024 (768/1024 = 3/  4)

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