स्ट्रिंग्स का दशमलव गुणन


14

2 इनपुट, एक स्ट्रिंग और एक दशमलव संख्या को देखते हुए, स्ट्रिंग को उस संख्या से गुणा किया जाता है।

पकड़ यह है कि संख्या एक फ्लोट या पूर्णांक हो सकती है।

आपको स्ट्रिंग floor(n)समय और फिर पहले floor((n-floor(n))*len(string))अक्षर फिर से आउटपुट करना चाहिए ।

अन्य नोट:

  • इनपुट हमेशा एक फ्लोट नहीं होगा, यह एक इंट हो सकता है। इसलिए 1.5, 1, और 1.0 सभी संभव हैं। यह हमेशा बेस 10 में रहेगा, और यदि आप अपवाद चाहते हैं तो कृपया टिप्पणी करें।
  • स्ट्रिंग इनपुट में व्हॉट्सएप, उद्धरण और अन्य वर्ण शामिल हो सकते हैं। हालांकि कोई नया अंक या नियंत्रण चार्ट नहीं।
  • डायरेक्ट स्ट्रिंग दोहराने के लिए कोई बिल्ट-इन नहीं, यहां तक ​​कि अजगर की तरह स्ट्रिंग गुणन की 'a'*5अनुमति है। हालांकि स्ट्रिंग जोड़ की अनुमति है।

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

अल्पविराम और अंतरिक्ष आदानों को अलग करते हैं।

test case, 1 -> test case

case, 2.5 -> casecaseca

(will add more later), 0.3333 -> (will(space)

cats >= dogs, 0.5 -> cats >

अंतिम नोट:

मैं बहुत सारे उत्तर देख रहा हूं जो बिलिन स्ट्रिंग गुणन या दोहराव कार्यों का उपयोग करते हैं। इसकी अनुमति नहीं है । @ VTC का जवाब है वैध हालांकि, क्योंकि यह गुणा स्ट्रिंग, केवल नाव इनपुट नहीं करता है। तो निश्चित नियम है: यदि यह सीधे स्ट्रिंग को गुणा करता है, तो आप ऐसा नहीं कर सकते।


शब्द को बार-बार संशोधित किया गया (मैंने पहला संशोधन नहीं देखा)। मैं directस्ट्रिंग को हटाने का सुझाव देता हूं (इसका क्या मतलब है?)। लेकिन आप सभी सही हैं
edc65


@ Sp3000 हाँ, मुझे पता है। मुझे लगता है कि अंतर काफी महत्वपूर्ण है।
Rɪᴋᴇʀ

"डायरेक्ट स्ट्रिंग रिपिटिंग के लिए कोई बिल्ट-इन नहीं, यहां तक ​​कि अजगर की तरह स्ट्रिंग गुणन 'a * 5 की अनुमति है।" आप इनमें से अंतर नहीं बताते हैं। वे मेरे लिए एक ही ध्वनि।
msh210

@ edc65 पर्ल में आप सूची पुनरावृत्ति कर सकते हैं, फिर उस सूची के तत्वों को संक्षिप्त कर सकते हैं, जो सीधे स्ट्रिंग पुनरावृत्ति नहीं है। पर्ल 5 में: join "", ("case") x 2बनाम "case" x 2, पर्ल 6 [~] "case" xx 2बनाम एक ही में"case" x 2
ब्रैड गिल्बर्ट 20

जवाबों:


4

जेली, 5 बाइट्स

×L}Rị

अंतर्निहित पुनरावृत्ति का उपयोग नहीं करता है। इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

×L}Rị  Main link. Left input: n (multiplier). Right input: S (string)

 L}    Yield the length of S.
×      Multiply it with n.
   R   Range; turn n×len(S) into [1, ... floor(n×len(S))].
    ị  Retrieve the elements of S at those indices.
       Indices are 1-based and modular in Jelly, so this begins with the first and
       jump back after reaching the last.

7

जावा 7, 89

void g(char[]a,float b){for(int i=0,l=a.length;i<(int)(l*b);)System.out.print(a[i++%l]);}

चार [] लेता है और फ्लोट और STDOUT को आउटपुट देता है। बुनियादी लूपिंग।


3
अच्छा गोल्फ, यहां तक ​​कि जावा के लिए। : पी
R

यह मेरे अन्य उत्तर पर भी सुझाया गया था, लेकिन मुझे नहीं लगता कि मैं ऐसा करूंगा। यह मुझे सही नहीं लगता।
मार्की मार्कोव

एह, काफी अच्छा है। यह यहां मान्यता प्राप्त है, लेकिन ठीक है। : डी
एडिसन क्रम्प

मैं आपकी भाषा को जावा 7 घोषित करने की सलाह देता हूं। फिर कोई भी आपको लैम्ब्डा का उपयोग करने के लिए नहीं कह सकता है।
feersum

6

Pyth, 9 8

s@Lz*lzQ

Pietu1998 के लिए 1 बाइट धन्यवाद

यह floor(n * len(string))चक्रीय अनुक्रमण का उपयोग करते हुए, स्ट्रिंग से पत्र लेता है । मेरा मानना ​​है कि यह हमेशा दिए गए सूत्र के बराबर है।

परीक्षण सूट


1
नहीं plz यह मुझसे यह जल्द ही नहीं लेते हैं। xD
Addison Crump

@VoteToClose मैं वास्तव में आपके जवाब को बिल्कुल नहीं पढ़ता, स्काउट्स सम्मान: पीआई को यह भी एहसास नहीं था कि स्ट्रिंग पुनरावृत्ति को
रोक

1
तुम भी दूसरे की जरूरत नहीं है srangeमजाकिया जैसा है।
पुरकाकूदरी

1
नहीं! एक कोने में रोता है आह, ओह अच्छी तरह से।
Addison Crump

6

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

फ़ंक्शन की परिभाषा को शामिल करने के लिए 2 बाइट्स को अधिक संपादित करेंf । @Manatwork की नोक का उपयोग करके 1 बाइट कम। नोट: ~हमारे पास आवश्यक से अधिक पुनरावृत्तियों का उपयोग करना है, लेकिन यह कोड गोल्फ और यहां तक ​​कि 1 बाइट मायने रखता है

f=(s,n,l=s.length*n)=>~n?f(s+s,n-1,l):s.slice(0,l)

परीक्षा

f=(s,n,l=s.length*n)=>~n?f(s+s,n-1,l):s.slice(0,l)

//TEST
console.log=x=>O.textContent+=x+'\n'
;[
 ['test case', 1, 'test case'],
 ['case', 3.5, 'casecasecaseca'],
 ['(will add more later)', 0.3333, '(will '],
 ['cats >= dogs', 0.5, 'cats >']]
.forEach(t=>{
  var s=t[0],n=t[1],x=t[2],r=f(s,n);
  console.log("«"+s+"» "+n+' => «'+r+'» '+(x==r?'OK':'FAIL expected '+x));
 })
<pre id=O></pre>


ठीक है शुक्रिया। अब तक अधिकांश उत्तरों में कोई समस्या नहीं थी, और इसे ठीक करना वास्तव में आसान है। इसे सही करने के लिए धन्यवाद।
R

छोटे टाइपो: n>0कोड बनाम n>1परीक्षण मामले में।
मैनटवर्क

@manatwork धन्यवाद यह किसी भी तरह से काम करना चाहिए
edc65

ओह। वास्तव में। लेकिन फिर सिर्फ क्यों नहीं ~n? (वास्तव में सिर्फ एक सवाल। केवल दिए गए परीक्षण मामलों की कोशिश की।)
१work

3
@ edc65 fआपके समाधान में कहाँ परिभाषित किया गया है? आप याद नहीं कर रहे हैं f=?
andlrc

4

विटसी, 9 बाइट्स

शब्द को एक तर्क और एसटीडीआईएन के माध्यम से गुणा करने की संख्या की अपेक्षा करता है।

zlW*\[DO{]
z          Grab all string argument input.
 l         Get the length of the stack.
  W        Parse STDIN.
   *       Multiply the top two items (length of string and the number of repetitions)
    \[   ] Do the stuff in the loop.
      DO{  Output one char at a time, making sure to duplicate first.

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


अपने वचन पर खरे हैं, आपने तेजी से उत्तर दिया ।
R

@ RikerW मार्टिन FGITW'd मुझे बाहर।
Addison Crump

तुम Grab all string argument input.और फिर क्यों Parse STDIN.?
R

@RikerW तर्क जो युगल हैं, स्वचालित रूप से पार्स किए जाते हैं, उन्हें तुरंत स्टैक पर धकेल दिया जाता है। हैंडलिंग जो इसके लायक होने से अधिक बाइट्स लेती है।
Addison Crump

ओह ठीक है। यह अब अधिक समझ में आता है।
R

3

सीजेएम, 10 बाइट्स

l_,l~*,\f=

स्ट्रिंग को एसटीडीआईएन की पहली पंक्ति पर, दूसरे पर फ्लोट की आपूर्ति की जाती है।

इसका परीक्षण यहां करें।

व्याख्या

l    e# Read string.
_,   e# Duplicate and get its length.
l~   e# Read second line and evaluate.
*    e# Multiply them. If the result, N, was floored it would give us the number of
     e# characters in the required output.
,    e# Get range [0 1 ... ⌊N⌋-1].
\f=  e# For each character in that range, fetch the corresponding character from the
     e# string using cyclic indexing.

3

पायथन 2, 71 बाइट्स

lambda s,x:"".join(s for i in range(int(x)))+s[:int(len(s)*(x-int(x)))]

यहाँ यह कोशिश करो!

एक अनाम लैम्ब्डा बनाता है जो स्ट्रिंग को पहले तर्क के रूप में लेता है और दूसरे के रूप में फ्लोट। बार-बार स्ट्रिंग लौटाता है।

यदि स्ट्रिंग पुनरावृत्ति निर्मित की अनुमति दी गई थी तो यह 46 हो सकता है :(


1
बहुत दुखी है। ऐसे स्ट्रिंग गुणन नियम। +1 ए + पुतला के लिए।
एडिसन क्रम्प

3

रूबी, ४ ९ ४ 49 अक्षर

->s,n{(0...(n*l=s.size).to_i).map{|i|s[i%l]}*''}

नमूना रन:

2.1.5 :001 > ->s,n{(0...(n*l=s.size).to_i).map{|i|s[i%l]}*''}['case', 2.5]
 => "casecaseca" 

3

पर्ल 6 ,  46 41   39 बाइट्स

{([~] $^a xx$^b)~$a.substr(0,$a.chars*($b%1))}    # 46 bytes
{substr ([~] $^a xx$^b+1),0,$a.chars*$^b}         # 41 bytes
{substr ([~] $^a xx$^b+1),0,$a.comb*$b}           # 39 bytes

पर्ल 6 में एक स्ट्रिंग दोहराव ऑपरेटर xऔर एक सूची पुनरावृत्ति ऑपरेटर दोनों हैं xx

चूंकि नियम स्ट्रिंग पुनरावृत्ति को अस्वीकार करते हैं, इसलिए हम इसे दोहराते हैं जैसे कि यह एक एकल तत्व सूची थी। फिर सूची को एक साथ मिलाया जाता है, और इसका एक विकल्प दिया जाता है।

उपयोग:

# give it a lexical name
my &code = {substr ([~] $^a xx$^b+1),0,$a.chars*$^b}
#          {substr ($^a x$^b+1),0,$a.chars*$^b}

say code('test case', 1).perl;                  # "test case"
say code('case', 2.5).perl;                     # "casecaseca"
say code('(will add more later)', 0.3333).perl; # "(will "
say code('cats >= dogs', 0.5).perl;             # "cats >"

substr ([~] $^a xx$^b+1),0,$a.comb*$b}बचाता है दो चार
raiph

2

ऑसस्क्रिप्ट, 173 बाइट्स

ओह मेरे दिन, यह जितना मैंने सोचा था उससे भी बदतर है।

on run a
set x to a's item 1's characters
set y to a's item 2
set o to""
set i to 1
set z to x's items's number
repeat y*z
set o to o&x's item i
set i to i mod z+1
end
o
end

स्ट्रिंग के मूल्य को लौटाता है, चक्रीय अनुक्रमण का उपयोग करते हुए एक और उत्तर। के रूप में इनपुट की उम्मीद है "string" "repetitions"


Oh my days, this is worse than I thought.इतना सच, इतना सच।
R

क्या एक बार में एक से अधिक var सेट हो जाते हैं? यानी set x,y to a's items?
R

@RikerW मुझे ऐसा नहीं लगता। अगर वहाँ है, मैं गंभीरता से याद कर रहा हूँ।
एडिसन क्रम्प

2

हास्केल, 44 बाइट्स

c x=x++c x
s#n=take(floor$n*sum[1|a<-s])$c s

प्रयोग उदाहरण: "(will add more later)" # 0.3333-> "(will "

यह कैसे काम करता है: cस्ट्रिंग की अनंत प्रतियों को समेटता है x। यह बिल्ट-इन की तरह व्यवहार करता है cyclesum[1|a<-s]एक कस्टम लंबाई फ़ंक्शन है जो हास्केल के सख्त प्रकार के सिस्टम के साथ काम करता है क्योंकि यह एक रिटर्न Double(एक अंतर्निहित lengthरिटर्न Intजिसे साथ गुणा नहीं किया जा सकता n)। चक्रवात स्ट्रिंग से वर्ण #लेता है ।floor (n * length(s))s


2

PHP 5, 96 87

9 बाइट्स ने @manatwork को धन्यवाद दिया

<?for($i=$z=0;$i++<floor(strlen($a=$argv[1])*$argv[2]);$z++)echo$a[$z]?:$a[$z=0‌​];

सुंदर सीधे आगे पाशन जवाब।

Ungolfed

<?
$a=$argv[1];
$z=0;
for($i=0; $i < floor(strlen($a)*$argv[2]); $i++) {
    // if the string offset is not set
    // then reset $z back to 0 so we can
    // echo the beginning of ths string again
    @$a[$z] ?: $z=0;
    echo $a[$z];
    $z++;
}

यह सुनिश्चित नहीं करना चाहिए कि उस त्रुटि को दबाने में कब मदद करनी चाहिए, क्योंकि मेरे बिना @भी काम करना लगता है:<?for($i=$z=0;$i++<floor(strlen($a=$argv[1])*$argv[2]);$z++)echo$a[$z]?:$a[$z=0];
मैनटवर्क

मुझे केस # 2 पर एक नोटिस मिल रहा था जिसके कारण आउटपुट गलत तरीके से प्रस्तुत किया गया था, जो कि जब मैंने दमन में जोड़ा था। (CLI मोड में चल रहा है)
Samsquanch

"PHP 5.3 या बाद में, डिफ़ॉल्ट मान E_ALL और ~ E_NOTICE & ~ E_STRICT & ~ E_DEPRECATED है।" - error_reportingइसलिए हम डिफ़ॉल्ट कॉन्फ़िगरेशन पर अपने समाधानों को आधार बनाना पसंद करते हैं और नोटिस और अन्य अच्छी आदतों की परवाह नहीं करते हैं। उदाहरण के लिए $zऔर के आरंभीकरण की अनदेखी $i
manatwork

ओह बढ़िया। जानकारी के लिए धन्यवाद!
संस्कार

2

आर, 59 बाइट्स

function(s,l)cat(rawToChar(array(charToRaw(s),nchar(s)*l)))

एक अनाम फ़ंक्शन के रूप में। यह तार को कच्चे के वेक्टर में विभाजित करने के लिए charToRaw का उपयोग करता है। यह लंबाई * l की एक सरणी में भर जाता है, वापस चार और आउटपुट में परिवर्तित हो जाता है।
मैं strsplit का उपयोग करने जा रहा था, लेकिन यह लंबे समय तक समाप्त हो रहा था।

परीक्षा

> f=
+ function(s,l)cat(rawToChar(array(charToRaw(s),nchar(s)*l)))
> f('test case', 1) # -> test case
test case
> f('case', 2.5) # -> casecaseca
casecaseca
> f('(will add more later)', 0.3333) # -> (will(space)
(will 
> f('cats >= dogs', 0.5) # -> cats >
cats >
> 

2

पर्ल, 51 + 3 = 54 बाइट्स

$l=<>*y///c;for$i(1..$l){push@a,/./g}say@a[0..$l-1]

आवश्यक है: -n, -lऔर -M5.010| -E:

 $ perl -nlE'$l=<>*y///c;for$i(1..$l){push@a,/./g}say@a[0..$l-1]' <<< $'test case\n1'
 test case
 $ perl -nlE'$l=<>*y///c;for$i(1..$l){push@a,/./g}say@a[0..$l-1]' <<< $'case\n2.5'
 casecaseca
 $ perl -nlE'$l=<>*y///c;for$i(1..$l){push@a,/./g}say@a[0..$l-1]' <<< $'(will add more later)\n0.3333'
 (will 
 $ perl -nlE'$l=<>*y///c;for$i(1..$l){push@a,/./g}say@a[0..$l-1]' <<< $'cats >= dogs\n0.5'
 cats >

स्पष्टीकरण:

$l=<>*y///c;              # Calculate output length (eg. 2.5 * input length)
for$i(1..$l){push@a,/./g} # Push a lot of chars from input into @a
say@a[0..$l-1]            # Slice @a according to output length

1

सी (प्रीप्रोसेसर मैक्रो), 71

j,l;
#define f(s,m) l=strlen(s);for(j=0;j<(int)(l*m);)putchar(s[j++%l])

यहाँ बहुत मुश्किल नहीं है। बस यह सुनिश्चित करने की आवश्यकता है कि तुलना करने से पहले l*mकास्ट किया intजाए j

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


1

Oracle SQL 11.2, 154 152 बाइट्स

WITH v(s,i)AS(SELECT SUBSTR(:1,1,FLOOR(FLOOR((:2-FLOOR(:2))*LENGTH(:1)))),1 FROM DUAL UNION ALL SELECT :1||s,i+1 FROM v WHERE i<=:2)SELECT MAX(s)FROM v;

संयुक्त राष्ट्र के golfed

WITH v(s,i) AS
(
  SELECT SUBSTR(:1,1,FLOOR(FLOOR((:2-FLOOR(:2))*LENGTH(:1)))),1 FROM DUAL 
  UNION ALL 
  SELECT :1||s,i+1 FROM v WHERE i<=:2
)
SELECT MAX(s) FROM v;

मैं पुनरावर्ती रास्ते पर गया, दशमलव भाग की देखभाल करने वाले प्रारंभिक चयन के साथ।

2 बाइट्स @MickyT की बदौलत सहेजे गए


आप क्लॉज़ और अंतिम चयन में) के बाद रिक्त स्थान हटाकर एक जोड़े को बचा सकते हैं।
मिकट

एक और बचत को बदलने के लिए किया जाएगा FLOOR(FLOOR((:2-FLOOR(:2))*LENGTH(:1)))के साथMOD(:2,1)*LENGTH(:1)
MickyT

और एक आखिरी एक :), आप इसके LPADबजाय का उपयोग कर सकते हैंSUBSTR
मिकी

1

गंभीरता से, 24 बाइट्स

,╗,mi@≈╜n╜l(*≈r`╜E`MΣ)kΣ

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

स्पष्टीकरण:

,╗,mi@≈╜n╜l(*≈r`╜E`MΣ)kΣ
,╗                        get first input (string) and push it to register 0
  ,mi@≈                   get input 2 (x), push frac(x) (f), int(x) (n)
       ╜n                 push n copies of the string
         ╜l(*≈            push length of string, multiply by f, floor (substring length) (z)
              r`╜E`MΣ     push s[:z]
                     )kΣ  move fractional part of string to bottom, concat entire stack

1

अजगर, 9 बाइट्स

V*Elzp@zN

मूल रूप से सिर्फ कर रहे हैं

             z = input()
V*Elz        for N in range(evaluatedInput()*len(z)):    # flooring is automatic
     p@zN        print(z[N], end="")                     # modular indexing
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.