একটি স্ট্রিংয়ে সমস্ত সংখ্যাকে গুণ করুন


19

বিজয়ী: চিলিমাজিক , একটি বিশাল 21 বাইট!

আপনি আপনার উত্তর জমা দিতে চালিয়ে যেতে পারেন, তবে আপনি আর জিততে পারবেন না। মূল পোস্টটি রাখা হয়েছে:


আপনার লক্ষ্য হ'ল স্ট্রিংয়ের মধ্যে সমস্ত সংখ্যা খুঁজে পাওয়া এবং ব্যবহারকারীর দ্বারা একটি মান ইনপুট দ্বারা প্রতিটি এককভাবে গুণিত করা

  • দশমিকের বিষয়ে আপনাকে চিন্তা করার দরকার পড়বে না
  • ব্যবহারকারী একটি নম্বর এবং একটি স্ট্রিং ইনপুট করবে
  • ব্যবহারকারীর অবশ্যই এক পর্যায়ে নম্বর এবং স্ট্রিং টাইপ করতে হবে, তবে প্রোগ্রামটি যে পদ্ধতিটি পড়ছে তাতে কিছু আসে যায় না। এটি স্টিডিনের সাথে থাকতে পারে, একটি পাঠ্য ফাইল পড়া ইত্যাদি, তবে ব্যবহারকারীকে অবশ্যই তার কীবোর্ডে 9 টি বোতাম টিপতে হবে (উদাহরণস্বরূপ) কিছুটা সময়
  • সংকলন এবং চালাতে পারে এমন যে কোনও কিছুই গ্রহণযোগ্য

উদাহরণ:

বাক্য ইনপুট: এই 1 is22a 3352senferences 50

সংখ্যা ইনপুট: 3

আউটপুট: এই 3 is66a 10056sen 150


  • এই প্রতিযোগিতাটি 6 ই সেপ্টেম্বর, 2014 (পোস্টিংয়ের 7 দিন) শেষ হবে।
  • এটি একটি , তাই সংক্ষিপ্ততম কোডটি জয়ী

যে কোনও সংখ্যাকে গুণ করতে হয়। আমি আমার উদাহরণ আপডেট।
জন

আপনার চ্যালেঞ্জের "9 টি বোতাম টিপুন" এর তাত্পর্য বা ব্যবহার আমি বুঝতে পারি না। প্রদত্ত উদাহরণে এটি কীভাবে বা কোথায় প্রয়োগ হয়?
ড্যারেন স্টোন

3
@ ড্যারেন তিনি মূলত বলেছেন যে আপনি নম্বরটি হার্ডকোড করতে পারবেন না।
বিটা ক্ষয়

2
আমরা জড়িত সংখ্যার আকার, বিশেষত ওভারফ্লো হওয়ার সম্ভাবনা সম্পর্কে ধারণা তৈরি করতে পারি? উপরের ফলাফলের উপর নির্ভর করে আমরা কি "-1234" কে "-" হিসাবে 1234 অনুসরণ করে বা -1234 হিসাবে গণ্য করব?
আলকিমিস্ট

1
ইলমারি কারোনেনের প্রশ্নের সাথে যুক্ত করতে: "বন্ড এজেন্ট 007" -> "বন্ড এজেন্ট 21" বা "বন্ড এজেন্ট 021" বা "বন্ড এজেন্ট 021" বা ... হিসাবে শীর্ষস্থানীয় জিরোগুলির সাথে কী করবেন ?
হেগেন ভন ইটজেন

উত্তর:


24

আপডেট - পার্ল - 17

s/\d+/$&*$^I/ge

15 টি অক্ষর -iএবং -pপতাকা রয়েছে fla

আমরা -iএকটি ফাইল এক্সটেনশান ইনপুট করতে পতাকাটি ব্যবহার করতে পারি , তবে যেহেতু আমরা কোনও ফাইল পড়ছি না, তাই আমরা এটির নম্বর পেতে এটি ব্যবহার করতে পারি এবং এটি ভেরিয়েবল এতে $^Iনির্ধারিত হবে।

সাথে চালান:

perl -e'print"This 1 is22a 3352sentence 50"' | perl -i3 -pe's/\d+/$&*$^I/ge'

পার্ল - 21

@ ডেনিসের মন্তব্য অনুসারে আপডেট হয়েছে।

$n=<>;s/\d+/$&*$n/ge

-pপতাকা নিয়ে দৌড়াও।

উদাহরণ রান:

perl -e'print"This 1 is22a 3352sentence 50\n3"' | perl -pe'$n=<>;s/\d+/$&*$n/ge'

ব্যাখ্যা:

$n=<>; নম্বর পড়ুন

-p আউটপুট মুদ্রণ

s/\d+/$&*$n/ge<> দিয়ে ইনপুটটি পড়ুন এবং এক বা একাধিক সংখ্যা সন্ধান করুন এবং সংখ্যার সংখ্যাগুলির সাথে তাদের প্রতিস্থাপন করুন। gবিশ্বব্যাপী হয়, eহয় evalগুলি /// এর মিশ্রণ প্রতিস্থাপন করুন। $&যা মেলে এবং এটি সংখ্যার দ্বারা গুণিত করে $n

আপনি সম্বন্ধে আরও পড়তে পারেন s///মধ্যে perlop এবং আরো পার্ল মধ্যে regexes সম্পর্কে perlre

আরেকটি সমাধান:

@ এফ.হৌরি উল্লেখ করেছিলেন যে আপনি পরিবর্তনটি ৪ এ নির্ধারণ করতে s স্যুইচটিও ব্যবহার করতে পারেন তবে $nআমি নিশ্চিত নই যে এই কয়টি অক্ষর গণনা করা তবে আমি এটি এখানে রেখে দেব:

perl -spe 's/\d+/$&*$n/ge' -- -n=4 <<<'This 1 is22a 3352sentence 50'

আমি মনে করি <>=~পরিবর্তে ব্যবহার করে আপনি আরও কয়েকটি অক্ষর সংরক্ষণ করতে পারেন _$=<>;। এছাড়াও আপনি দয়া করে sআমাদের শিখরীদের জন্য রেজেক্সের অংশটির অর্থ কী তা ব্যাখ্যা করতে পারেন ?
তাল

@Tal স্ট্রিং।
Kaz Wolfe

3
@ আমার সম্পর্কে আমি নিশ্চিত যে এটি "প্রতিস্থাপনের জন্য"
মার্টিন এন্ডার

1
1. আপনি ব্যবহার করেন তাহলে $&পরিবর্তে $1, আপনি খাটো করতে পারেন (\d)থেকে \d। ২. আপনি যদি -pস্যুইচটি ব্যবহার করেন এবং ইনপুট অর্ডার পরিবর্তন করেন তবে আপনি ড্রপ say<>=~এবং করতে পারেন r
ডেনিস

1
আপনি -sমুছে $n=<>ফেলার জন্য, স্যুইচ ব্যবহার করতে পারেন : perl -spe 's/\d+/$&*$n/ge' -- -n=4 <<<'This 1 is22a 3352sentence 50'(রেন্ডার করুন This 4 is88a 13408sentence 200:)
এফ হৌরি

9

জাভাস্ক্রিপ্ট (ES6) - 48 44 অক্ষর

একটি চরিত্র সংরক্ষণ করার জন্য @bebe ধন্যবাদ । আপডেট: 8 / মার্চ / 16, আরও চারটি অক্ষর সরানো হয়েছে

b=(p=prompt)();p(p().replace(/\d+/g,y=>y*b))

অসমাপ্ত :

var sentence = prompt(),
    num = parseInt(prompt(), 10); // base 10

sentence = sentence.replace(/\d+/g, digit => digit * num);

alert(sentence);

43 অক্ষর:

(p=prompt)(p(b=p()).replace(/\d+/g,y=>y*b))

b=(p=prompt)();p(p().replace(/\d+/g,y=>y*b))

প্রথমে সংখ্যা ইনপুট এবং তারপরে বাক্য প্রয়োজন। এখানে আরও একটি চর কাটুন আবার ধন্যবাদ @bebe!


আপনাকে সংখ্যার ইনপুট পার্স করতে হবে না
বেবি করা উচিত

@bebe অবশ্যই! আমি খেয়াল করিনি! অনেক ধন্যবাদ!
গৌরাঙ্গ ট্যান্ডন

(p=prompt)(p(b=p()).replace(/\d+/g,y=>y*b))অন্য একটি (তবে এটি প্রথমে
গুণকটির

@bebe এর জন্যও ধন্যবাদ!
গৌরাঙ্গ ট্যান্ডন

6

পাইথন 2 (79)

import re
n=input()
s=input()
print re.sub('\d+',lambda x:`int(x.group())*n`,s)

নমুনা রান

ইনপুট:
$ python mult.py
3
"This 1 is22a 3352sentence 50"
আউটপুট:
This 3 is66a 10056sentence 150

অনলাইন ডেমো: http://ideone.com/V6jpyQ


উজ্জ্বল। আমার ধারণা re.subবিটা ক্ষয় পদ্ধতি এবং আমি (অন্য দুটি পাইথন সাবমিশন) পুনরায় সংশোধন করার চেষ্টা করছিলাম। এটা এত সহজ হত ... অন্য কিছু যে আমি শিখেছি! ;)
ফালকো

@ ফ্যালকোকে re.subবাদ দিয়ে, আপনি স্ট্রিং প্রতিস্থাপনের যুক্তি গল্ফ করে একটি দুর্দান্ত কাজ করেছেন
ক্রিশ্চিয়ান লুপাস্কু

@ ফালকো আমি একমত, re.subআমি যা চাইছিলাম ঠিক তেমনটাই !
বিটা ক্ষয়

4

পাইথন 2 - 126

import re
n=input()
s=input()
for i in list(re.finditer('\d+',s))[::-1]:s=s[:i.start()]+`int(i.group())*n`+s[i.end():]
print s

প্রথম ইনপুট: পূর্ণসংখ্যা n

দ্বিতীয় ইনপুট: স্ট্রিং s(উদ্ধৃতি চিহ্ন সহ, যেমন "abc42")।


4

সিজেম, 47 33 30 বাইট

q_A,sNerN%\[_A,s-Ner~](f*]zs1>

STDIN থেকে সংখ্যা এবং স্ট্রিং (সেই ক্রমে এবং একক স্থান দ্বারা পৃথক) পড়ে।

এটি অনলাইনে চেষ্টা করুন।

উদাহরণ রান

$ cjam multiply.cjam <<< '7 N0 R3GUL4R 3XPR35510N5 1N CJ4M M4K3 M3 4 54D P4ND4'
N0 R21GUL28R 21XPR248570N35 7N CJ28M M28K21 M21 28 378D P28ND28

কিভাবে এটা কাজ করে

q                                 " Read from STDIN (“Q”) and push a second copy.         ";
  A,s                             " Push “0123456789” (thanks, @aditsu).                  ";
 _   NerN%                        " Replace digits with linefeeds and split at linefeeds. ";
          \ _A,s-Ner              " Replace non-digits with linefeeds.                    ";
                    ~             " Evaluate the resulting string.                        ";
           [         ]            " Collect the results in an array.                      ";
                      (f*         " Multiply all other integers by the first.             ";
                         ]z       " Interleave the elements of both arrays.               ";
                           s1>    " Flatten the result and discard the leading space.     ";

এটি কোডের সবচেয়ে অদ্ভুত অংশ !!!
আজেফরাতি

1
@ ব্লাড্রিম: এটি আমার লেখা সবচেয়ে অদ্ভুত কোড নয় । : পি
ডেনিস

হুম, 3 * 7 = 27?
aditsu

হ্যাঁ, হ্যাঁ, উভয়ের পক্ষে ভোট দিয়েছেন। যদিও এগুলি বিশ্বকে আরও ভাল জায়গা করে তুলবে না। পৃথিবী প্রোগ্রামিং ভাষাগুলি কীভাবে পাঠযোগ্য বলে মনে হচ্ছে এটি এই রূপান্তরিত হবে ??
আজেফেরতি

@ অ্যাডিটসু: স্প্লিটিং বনাম পুনরাবৃত্তি, যুদ্ধ অব্যাহত রয়েছে। : পি
ডেনিস

4

বাশ + কোর্টিলস, 38 বাইট

eval echo `sed "s/[0-9]\+/$\[$1*&]/g"`

কমান্ড-লাইন প্যারামিটার হিসাবে STDIN এবং গুণক থেকে ইনপুট স্ট্রিং পড়ে।

আউটপুট:

$ ./multstr.sh 3 <<< "This 1 is22a 3352sentence 50"
This 3 is66a 10056sentence 150
$ 

6
আকর্ষণীয় ধারণা, তবে এটি কেবল তখনই কাজ করবে যদি স্ট্রিংটিতে বাশের জন্য বিশেষত কোনও অক্ষর না থাকে ... এটি একটি স্ট্রিংয়ের উদাহরণ যা আমি চেষ্টা করব না :1 D4R3 Y0U: ; rm -rf /
ডেনিস

@ ডেনিস হ্যাঁ এটি একটি বরং দুর্ভাগ্যজনক সতর্কতা
ডিজিটাল ট্রমা

3

লিংকপ্যাডে সি #, 124

সহজবোধ্য। ব্যবহার করুন Ctrl + 2 LINQPad মধ্যে (ভাষা: C # এর বিবৃতি)।

var s=Console.ReadLine();var k=int.Parse(Console.ReadLine());new Regex("\\d+").Replace(s,t=>""+int.Parse(t.Value)*k).Dump();

গুণকটিকে যদি প্রথম ইনপুট প্যারামিটার হিসাবে দেওয়া হয় তবে এটি 116 টি অক্ষরে করা যেতে পারে:

var k=int.Parse(Console.ReadLine());new Regex("\\d+").Replace(Console.ReadLine(),t=>""+int.Parse(t.Value)*k).Dump();

সম্পাদনা করুন:

আব্বাসের নীচের মন্তব্যের জন্য ধন্যবাদ, এটি তাত্ক্ষণিক না করে রেজেক্স স্ট্যাটিক পদ্ধতি ব্যবহার করে আরও গল্ফ করা যেতে পারে :

var k=int.Parse(Console.ReadLine());Regex.Replace(Console.ReadLine(),"\\d+",t=>""+int‌​.Parse(t.Value)*k).Dump();

দুর্দান্ত এক, সি # তে কোড-গল্ফ সহজ নয়! আমি আপনার প্রচেষ্টার প্রতিশোধ নিতে চাই না তাই আমি আমার নিজের উত্তর পোস্ট করার পরিবর্তে আপনাকে একটি টিপস সরবরাহ করব: নতুন রেজেক্স ("...") এর পরিবর্তে স্ট্যাটিক রেজেক্স ব্যবহার করুন ep প্রতিস্থাপন (স্ট্রিং, স্ট্রিং, স্ট্রিং ) .Replace (...); এখানে সংক্ষিপ্ত গুণক প্রথম সংস্করণ: var k=int.Parse(Console.ReadLine());Regex.Replace(Console.ReadLine(),"\\d+",t=>""+int.Parse(t.Value)*k).Dump();। উভয় সংস্করণে এটি আরও 5 টি অক্ষর বাঁচায়, আপনাকে দীর্ঘ সংস্করণের জন্য ১১৯ এবং গুণক-প্রথম সংস্করণের জন্য 111
আব্বাস

1
টিপটির জন্য ধন্যবাদ, তবে আমি নিজের আসল উত্তরটি পরিবর্তন না করার সিদ্ধান্ত নিয়েছি, যেমন সি # রেজেক্স গল্ফিংয়ের বিষয়ে অন্যরা আমার কাছ থেকে কী করা উচিত নয় এবং আপনার কাছ থেকে কী করবে তা শিখতে সক্ষম হবে।
জ্যাকব

আমি আপনাকে বুঝতে পারি তবে আপনি সম্পাদনা হিসাবে আপনার উত্তরে আমার টিপ যোগ করতে পারেন । টিপস সহ মন্তব্যগুলির তালিকার চেয়ে ব্যবহারকারীরা এগুলি আরও পড়তে ঝোঁক।
আব্বাস

অবশ্যই। উত্তরটি সম্পাদিত হয়েছিল।
জ্যাকব

2

কোবরা - 171

use System.Text.RegularExpressions
class P
    def main
        a=int.parse(Console.readLine?'')
        print Regex.replace(Console.readLine,'\d+',do(m as Match)="[int.parse('[m]')*a]")

2

পাইথন 3 - 141

আমি মনে করি না আমি আর এটিকে গল্ফ করতে পারি ...

import re
n=input()
f=input()
o=''
p=0
for i in re.finditer('\d+',f):o+=f[p:i.start()]+str(int(i.group())*int(n));p=i.end()
o+=f[p:]
print(o)

উদাহরণ:

3     # This is input
h3110 # This is input
h9330 # This is output

10
hello100 hello100
hello1000 hello1000

2
দুর্ভাগ্যক্রমে এই পদ্ধতির কাজ করে না। জন্য n=2এবং s="1 2"এটি ফলন 4 4, যেহেতু replaceপ্রথম সংখ্যা দুবার সংশোধন করে। পাইথন 2 ...;)
ফ্যালকো

@ ফ্যালকো আমি সমস্যাটি সমাধান করতে পেরেছি, যদিও আমার কোডটি প্রক্রিয়াটিতে আরও দীর্ঘ করে দিচ্ছে
বিটা ডেকে

ওহ, ভাল কাজ! কিছু ছোটখাটো মন্তব্য: m=input()আপনাকে কিছুই বাঁচায় না। এবং দু'বার x=intকল করার চেয়ে 2 বাইট দীর্ঘতর int(...)
ফালকো

2

গণিত 71 61

10 টি অক্ষর মার্টিন বাটনারকে ধন্যবাদ রক্ষা করেছে।

কোডের ফাঁকা স্থানগুলি পাঠযোগ্যতার জন্য।

fএকটি ফাংশন যা sইনপুট স্ট্রিং এবং nআবিষ্কারকৃত স্ট্রিং সংখ্যা দ্বারা গুণিত করার সংখ্যা।

 StringReplace[#, a : DigitCharacter .. :> ToString[#2 FromDigits@a]] &

উদাহরণ

 s="This 1 is22a 3352sentence 50"

পূর্ণসংখ্যা

StringReplace[#, a : DigitCharacter .. :> ToString[#2 FromDigits@a]] &@@{s, 3}

"এই 3 is66a 10056sen 150"


যুক্তিযুক্ত নম্বর

StringReplace[#, a : DigitCharacter .. :> ToString[#2 FromDigits@a]] &@@{s, -7.13}

"এটি -7.13 হ'ল -156.86 এ -23899.8 নির্ধারণ -356.5"


জটিল সংখ্যা

StringReplace[#, a : DigitCharacter .. :> ToString[#2 FromDigits@a]] &@@{s, -5 + 3 I}

"এই -5 + 3 আমি -110 + 66 আইএ -16760 + 10056 উপকরণ -250 + 150 আই"


1
আমি গণিতকে চিনি না। তবে আপনার উদাহরণগুলিতে সমস্ত সংখ্যা এবং শব্দ ফাঁক দিয়ে পৃথক করা হয়েছে। এটি কী "abc42" এর মতো অক্ষরের সাথে সরাসরি সংযুক্ত সংখ্যার জন্য কাজ করে?
ফালকো

কারণ StringReplaceএটি ফাঁকা আছে কিনা তা কোনও পার্থক্য করে না। আমি চিপারিম্যানের দেওয়া উদাহরণগুলি ব্যবহার করেছি used
ডেভিডসি

আমি আপডেট করা উদাহরণে স্যুইচ করেছি। (আমি আগে চিপাইম্যানের দেওয়া উদাহরণটি ব্যবহার করেছি।) কারণ StringReplaceস্পেস রয়েছে কিনা তা নিয়ে কোনও তফাত আসে না।
ডেভিডসি


2

লুয়া: 73 69 টি অক্ষর

r=io.read
s=r()n=r()s=s:gsub("%d+",function(m)return m*n end)print(s)

নমুনা রান:

bash-4.3$ lua -e 'r=io.read;s=r()n=r()s=s:gsub("%d+",function(m)return m*n end)print(s)' <<< $'This 1 is22a 3352sentence 50\n3'
This 3 is66a 10056sentence 150

1
আপনি সবকিছুকে এক লাইনে রেখে এবং ")" এর পাশে নির্দেশাবলীকে স্মুশ করে আরও কিছুটা গল্ফ করতে পারেন। "এস = আর () এন = ()" এর মতো পুরোপুরি ঠিক আছে।
AndoDaan

1
দোহ এবং আমি কয়েক সপ্তাহ আগে লুয়ায় গল্ফ করার টিপস পড়েছিলাম । :( আপনাকে ধন্যবাদ, @AndoDaan।
manatwork

2

জাভাস্ক্রিপ্ট, ES6, 43 টি অক্ষর

গল্ফ করার এটাই আমার প্রথম চেষ্টা!

(p=prompt)(p(n=p()).replace(/\d+/g,y=>y*n))

এটি সর্বশেষতম ফায়ারফক্সের কনসোলটিতে চালান। প্রথম ইনপুটটি হল নম্বর এবং দ্বিতীয় ইনপুটটি স্ট্রিংটি থেকে সংখ্যাগুলিকে প্রথম ইনপুট সংখ্যার সাথে গুণিত করতে হয়।

চূড়ান্ত প্রম্পট আউটপুট তালিকাভুক্ত।


প্রথম টাইমার জন্য খুব সুন্দর জেএস গল্ফ!
অপ্টিমাইজার

সংখ্যাটি প্রথমে পড়লে আরও অনেক উত্তর সংক্ষিপ্ত হতে পারে। যে ছিল অনেক সহজ।
manatwork

@ মান্যাটওয়ার্ক - হ্যাঁ, তবে প্রশ্নটি অর্ডারের উপর কোনও অগ্রাধিকার দেয় না, তাই আমার মনে হয় এটি ঠিক করা উচিত।

সঠিক। এটি নিজেই প্রশ্নের অভাব। ব্যক্তিগতভাবে আমি আমার উত্তরগুলিতে স্ট্রিং + সংখ্যা ক্রমে ইনপুট হ্যান্ডেল করতে পছন্দ করি যাতে তাদের অন্যদের সাথে তুলনীয় রাখে।
manatwork

1

পার্ল - 48 অক্ষর

$n=<>;print/\d/?$_*$n:$_ for(<>=~/(\d+)|(\D+)/g)

প্রথম লাইনে একটি সংখ্যা পড়ুন, তারপরে একটি বাক্যটি পড়ুন এবং এটিকে কোনও সংখ্যা বা অ-অঙ্কের অংশে বিভক্ত করুন। অ অঙ্কগুলি যেমন হয় তেমন মুদ্রণ করুন এবং সংখ্যাগুলি বহুগুণ হবে।


1

জে - 63 চর

প্রোগ্রামটি সংখ্যাটিতে পড়ে এবং তার পরে বাক্যটি।

;(*&.".&(1!:1]1)^:(0{i)(<@);.1~1,2~:/\i=.e.&'0123456789')1!:1]1

বিস্ফোরণ দ্বারা ব্যাখ্যা:

;(*&.".&(1!:1]1)^:(0{i)(<@);.1~1,2~:/\i=.e.&'0123456789')1!:1]1
                                                         1!:1]1  NB. read sentence
                                         e.&'0123456789'         NB. is digit? bool vector
                                      i=.                        NB. save to i
                                 2  /\                           NB. between adjacent chars:
                                  ~:                             NB.  true if not equal
                               1,                                NB. pad to sentence length
 (                         ;.1~                         )        NB. cut the sentence
                ^:(0{i)                                          NB. if cut is digits:
  *&.".                                                          NB.  multiply as number
       &(1!:1]1)                                                 NB.  with user input
;                                                                NB. rejoin sentence

যদি আমরা জে এর পিসিআরই লাইব্রেরিটি ব্যবহার করি এবং বাক্যটিকে প্রথমে উপস্থিত করি, আমরা এটিকে 54 টি অক্ষরে ছুঁড়ে দিতে পারি :

;_2(,*&.".&(1!:1]1)&.>)/\'\d+'(rxmatches rxcut])1!:1]1

বিস্ফোরণ দ্বারা ব্যাখ্যা:

                                                1!:1]1  NB. read in sentence
                         '\d+'(rxmatches       )        NB. all /\d+/ matches
                              (          rxcut])        NB. cut by those matches
 _2                     \                               NB. on each nonmatch-match pair:
   (               &.>)/                                NB.  take the match
     *&.".                                              NB.  multiply as number
          &(1!:1]1)                                     NB.  by user input
   (,                 )                                 NB.  prepend nonmatch
;                                                       NB. rejoin sentence

জে এই খারাপ, আমি কি বলতে পারি। এটি অসুবিধাগুলি কারণ জে এর এত অপ্রয়োজনীয়।

কিছু উদাহরণ:

   ;(*&.".&(1!:1]1)^:(0{i)(<@);.1~1,2~:/\i=.e.&'0123456789')1!:1]1
3
This 1 is22a 3352sentence 50
This 3 is66a 10056sentence 150
   ;(*&.".&(1!:1]1)^:(0{i)(<@);.1~1,2~:/\i=.e.&'0123456789')1!:1]1
100
N0 R3GUL4R 3XPR35510N5 1N J M4K35 M3 54D ALS0
N0 R300GUL400R 300XPR3551000N500 100N J M400K3500 M300 5400D ALS0
   0!:0 <'system\main\regex.ijs'  NB. this is usually preloaded by J on startup anyway
   ;_2(,*&.".&(1!:1]1)&.>)/\'\d+'(rxmatches rxcut])1!:1]1
TH4T'5 M4RG1N411Y B3TT3R
0
TH0T'0 M0RG0N0Y B0TT0R

1

সিজোম - 35

li:X;lN+{_sA,s-,{])\_!!{iX*}*oo}*}/

এটি http://cjam.aditsu.net/ এ চেষ্টা করুন

নমুনা ইনপুট:

7
CJ4M W1LL H4V3 R3GUL4R 3XPR35510N5 L4T3R

নমুনা আউটপুট:

CJ28M W7LL H28V21 R21GUL28R 21XPR248570N35 L28T21R

ব্যাখ্যা:

প্রোগ্রামটি প্রতিটি চরিত্রের মধ্য দিয়ে যায়, স্ট্যাকের উপর অঙ্কগুলি সংগ্রহ করে এবং প্রতিটি অ-অঙ্কের জন্য এটি প্রথমে সংখ্যার ইনপুট দ্বারা গুণিত সংগৃহীত সংখ্যা (যদি থাকে) মুদ্রণ করে, তবে অক্ষরটি মুদ্রণ করে।

li:X;সংখ্যার ইনপুটটি পড়ে এবং এটি এক্সে সংরক্ষণ
lN+করে স্ট্রিংটি পড়ে এবং স্ট্রিংয়ের
{…}/প্রতিটি অক্ষরের জন্য একটি নতুন লাইন সংযোজন করে (এটি ট্রেলিং সংখ্যার সাহায্য করে)
- _sঅক্ষর অনুলিপি করে স্ট্রিংয়ে রূপান্তর করে
- A,s-,সমস্ত অঙ্ক সরিয়ে দেয় এবং বাকী অক্ষর গণনা করে; চরিত্রটি একটি সংখ্যা হলে ফলাফল 1 বা না হলে 1 হবে
- {…}*গণনা 1 (অর্থাত্ অ-অঙ্ক) হলে ব্লকটি কার্যকর করে; ডিজিটের জন্য এটা কিছুই না তাই তারা স্ট্যাক থাকা
- ](অর্থাত একটি স্ট্রিং) একটি অ্যারের মধ্যে স্ট্যাক থেকে অক্ষর সংগ্রহ; অক্ষরগুলি পূর্ববর্তী পুনরাবৃত্তির থেকে কোনও অঙ্ক, এবং বর্তমান অক্ষর
- )\শেষ আইটেমটি (বর্তমান অক্ষর) পৃথক করে এবং এটিকে (অবশিষ্ট) স্ট্রিংয়ের আগে স্থানান্তরিত করে
- _!!স্ট্রিংটি অনুলিপি করে এটিকে বুলিয়ান মান হিসাবে রূপান্তর করে - 0 খালি হলে 1, না হলে
- {…}*স্ট্রিংটি খালি না থাকলে ব্লকটি কার্যকর করে, যেমন বর্তমান অ-অঙ্কের অক্ষরটির আগে আমাদের কিছু অঙ্ক ছিল
--- iX*স্ট্রিংকে রূপান্তরিত করে এক্স দ্বারা পূর্ণসংখ্যা এবং গুণক
- oস্ট্যাকের শীর্ষটি মুদ্রণ করে - হয় যদি আমাদের সংখ্যা না থাকে তবে গুণিত সংখ্যা বা খালি স্ট্রিং
- o(দ্বিতীয়টি) স্ট্যাকের নতুন শীর্ষটি প্রিন্ট করে - বর্তমান অ- অঙ্কের অক্ষর


এটি অনেক স্যানার পদ্ধতির।
ডেনিস

1

হাস্কেল (১1১)

Golfed

main=do{n<-getLine;l<-getContents;let{g c(t,s)|c>'/'&&c<':'=(c:t,s)|t/=""=([],c:(show.(*(read n)).read$t)++s)|True=(t,c:s)};putStr.tail.snd.foldr g("","")$' ':l}

Ungolfed

modify :: (Show a, Read a) => (a -> a) -> String -> String
modify f = show . f . read

main=do
  number <- fmap read $ getLine    -- get number  
  l <- getContents                 -- get input

  -- if the current character is a digit, add it to the digits
  -- if the current character isn't a digit, and we have collected
  --    some digits, modify them and add them to the string
  -- otherwise add the current characters to the string

  let go current (digits , string) 
        | current `elem` ['0'..'9'] = (current : digits, string)
        | not (null digits)         = ([], current:(modify (*number) digits) ++ string)
        | otherwise                 = (digits, current:string)

  -- since the result of `go` is a pair, take the second value,
  -- remove the head (it's a space, in order to convert digits at the start)
  -- and print it
  putStr . tail . snd . foldr go ("","")$' ':l

দুর্ভাগ্যবশত, Haskell, তার একটি Regex গ্রন্থাগার নেই প্রস্তাবনা


সুন্দর গল্ফিং; আপনি {}1 চরের লাভের জন্য বহিরাগতকে মুছে ফেলতে পারতেন । এছাড়াও, আমি মাত্র 70 বাইট সহ এই হাস্কেল সমাধানটি পোস্ট করেছি: কোডগলফ.স্ট্যাকেক্সেঞ্জার
গর্বিত হাসেলেলার

1

ফ্লেক্স (-lexer) ( 94 89 টি অক্ষর)

 int m;main(c,v)char**v;{m=atoi(*++v);yylex();}
%%
[0-9]+ {printf("%d",m*atoi(yytext));}

কমান্ড-লাইন আর্গুমেন্টটি (বেশি দিন নয়) ভুলে গেলে অগল্ফড সংস্করণ যা সেগফল্ট করে না:

%{
#define YY_DECL int y(int m)
%}
%option noyywrap noinput nounput
%%
[0-9]+ {printf("%d",m*atoi(yytext));}
%%
int main(int argc, char** argv) {
  return (argc > 1) ? y(atoi(argv[1])) : 1;
}

এর সাথে সংকলন:

flex -o m.c m.l
cc -o m m.c -lfl

বা:

flex --noyywrap -o m.c m.l
cc -o m m.c

উদাহরণ:

$ ./m 163
This 1 is22a 3352sentence 50
This 163 is3586a 546376sentence 8150

1

Groovy - 124

Scanner s=new Scanner(System.in)
def x=s.nextLine()
def n=s.nextInt()
x=x.replaceAll(/\d+/,{it->it.toInteger()*n})
println x

চলমান উদাহরণটি দেখতে শিরোনামে ক্লিক করুন

পরীক্ষিত উদাহরণ:

এই 1 is22a 3352senferences 50
3
এই 3 is66a 10056sen 150


এই 1 টি 22a 3352senferences 50
42
এই 42 is924a 140784senistance 2100


0

জিএনইউ আওক: ৮ characters টি অক্ষর

s{n=split(s RS,a,/[^0-9]+/,d);while(++i<n)printf"%s%s",a[i]==""?"":a[i]*$1,d[i]}{s=$0}

নমুনা রান:

bash-4.3$ awk 's{n=split(s RS,a,/[^0-9]+/,d);while(++i<n)printf"%s%s",a[i]==""?"":a[i]*$1,d[i]}{s=$0}' <<< $'This 1 is22a 3352sentence 50\n3'
This 3 is66a 10056sentence 150

0

পিএইচপি - 75/115 68/109

দুটি সংস্করণ, নতুন পিএইচপি সংস্করণগুলি এটি করতে পারে:

echo preg_replace_callback("/\d+/",function($m){return$m[0]*$f;},$s);

পুরানো পিএইচপি সংস্করণ: আমি নতুন লাইনটি গণনা করি নি, পাঠযোগ্যতার জন্য এগুলি যুক্ত করেছি।

function a($s){echo preg_replace_callback("/\d+/",b,$s);}
function b($i){global$f;return$i[0]*$f;}
a($s,$f);

উদাহরণ ইনপুট + আউটপুট

$s = "ab11cd22"; // string
$f =  3; // -> output: ab36cd69
$f = -2; // -> output: ab-24cd-46

কিন্ডা কঠিন, 'ফাংশন' এবং 'প্রেগ_রেপস_ক্যালব্যাক' শব্দটি প্রচুর চরিত্র গ্রহণ করে। $ Var (-2 অক্ষর) এর
পরে globalএবং পরে স্থানগুলি returnপ্রয়োজন হয় না


\dচরিত্র শ্রেণিতে (-2 অক্ষর) লাগানোর দরকার নেই ; ডাবল উদ্ধৃতি (-2 অক্ষর) এ ফাংশনটি আবদ্ধ করার দরকার নেই; আপনাকে সেমিকোলন (+1 চর) দিয়ে ফাংশনের অভ্যন্তরে সঠিকভাবে স্টেটমেন্টটি শেষ করতে হবে। যাইহোক, \dডাবল উদ্ধৃতিযুক্ত স্ট্রিং হিসাবে লিখতে হবে \\d, তাই আরও ভাল একক উদ্ধৃতি পরিবর্তন করুন।
manatwork

ধন্যবাদ। [0-9] দিয়ে শুরু, changed 0-9d এ পরিবর্তিত হয়েছে। ফাংশনটির চারপাশের উদ্ধৃতিগুলি সম্পর্কে নিশ্চিত নন, আমি এটি পরীক্ষা করতে পারছি না, আমার স্থানীয় পিএইচপি এর সংস্করণ এটির অনুমতি দেয় না।
মার্টিজেন

ডাবল কোটগুলি দারুণভাবে কাজ করে (কমপক্ষে আমার জন্য) :)
মার্টিজন

0

সি ( 142 134 টি অক্ষর)

main(a,b)char**b;{char*c=b++[2],*d="0123456789";for(;*c;c+=strspn(c
,d))write(1,c,a=strcspn(c,d)),dprintf(1,"%d",atoi(*b)*atoi(c+=a));}

বর্ধিত সামর্থ্যের জন্য নিউলাইন sertedোকানো হয়েছে। প্রথমটি হিসাবে ফ্যাক্টরটি পাস করুন, দ্বিতীয় কমান্ড লাইন বিকল্প হিসাবে স্ট্রিং করুন। এই বাস্তবায়নের জন্য dprintfফাংশনটি প্রয়োজন যা POSIX.1 ২০০৮ এর অংশ এবং এটি উইন্ডোজে উপলভ্য নয়। এখানে অনির্ধারিত উত্স:

/*
 * Multiply all numbers in a string by a number.
 * http://codegolf.stackexchange.com/q/37110/134
 * Solution by user FUZxxl
 */

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

extern int
main(int count, char **argv)
{
    char *str = argv++[2], *digits = "0123456789";

    while (*str) {          /* as long as we have not reached the end */
        count = strcspn(str, digits);
        write(1, str, count);

        dprintf(1, "%d", atoi(*argv) * atoi(str += count));
        str += strspn(str, digits);
    }
}

উন্নতি

  • 142 → 134: ব্যবহার strspnএবং strcspnপরিবর্তে স্ট্রিং উপর লুপিং করুন।

0

পাইথন 89

import re,sys
j,n,s=sys.argv
print re.sub('(\d+)',lambda m:str(int(m.group())*int(n)),s)

উদাহরণ:

# python numberstring.py 3 '1shoop da2 w007p!'
3shoop da6 w21p!

0

রিবোল - 117

n: do input d: charset"0123456789"parse s: input[any[b: some d e:(e: insert b n * do take/part b e):e | skip]]print s


Ungolfed:

n: do input 
d: charset "0123456789"

parse s: input [
    any [
        b: some d e: (e: insert b n * do take/part b e) :e
        | skip
    ]
]

print s

0

ক্লোজার - 141 140 128 অক্ষর

আমি একজন ক্লোজার নবাগত, তবে এফডাব্লুআইডাব্লু:

(let[[a b]*command-line-args*](println ((fn[s n](clojure.string/replace s #"\d+"#(str(*(read-string %)(read-string n)))))a b)))

নমুনা রান:

bash$ java -jar clojure-1.6.0.jar multstr.clj "This 1 is22a 3352sentence 50" 3  
This 3 is66a 10056sentence 150

অবহেলিত (কুরুচিপূর্ণ তবে আশা করি কিছুটা সহজ পড়া সহজ):

(let [[a b] *command-line-args*]
    (println ( (fn [s n] 
                    (clojure.string/replace 
                        s 
                        #"\d+" 
                        #(str (* (read-string %) (read-string n)))))
                    a b)))

0

পাইথন - 142

import re
s=raw_input()
i=int(raw_input())
print ''.join([x[0]+str(int(x[1])*i) for x in filter(None,re.findall('(\D*)(\d*)',s)) if x[0]!=''])

0

জাভা 218

কারও কাছে জাভা করতে হয়েছিল। ইনপুট স্ট্রিংটি কমান্ড লাইনে 2 টোকেন।

জাভা এম 'এই 1 আই 22 এ 3352 সেন্সেন্ট 50' 3

public class M{
    public static void main(String[]a) {
        int m=new Integer(a[1]),n=0,b=0;
        String s="";
        for(char c:a[0].toCharArray()){
            if(c<48|c>57)s=b>(b=0)?s+m*n+c:s+c;
            else n=b*n+c-38-(b=10);
        }
        System.out.println(b>0?s+m*n:s);
    }
}

1
আমার পরীক্ষা অনুযায়ী ifশর্তটি বিটওয়াইসের |সাথেও কাজ করে, যা 1 টি চরিত্রের চেয়ে ছোট sh
manatwork

ধন্যবাদ। কোড আপডেট হয়েছে। (এটি আসলে এখনও বুলিয়ান বা কেবল মূল্যায়ন শর্টকাট ছাড়াই)।
ফ্লোরিয়ান এফ

0

দুটি উত্তর: +

খাঁটি বাশ (~ 262)

প্রথমত, এখানে একটি সংক্ষিপ্ত খাঁটি বাশ সংস্করণ নেই (কোনও কাঁটাচামচ, কোনও বাহ্যিক বাইনারি নেই)!

mn () { 
    if [[ $1 =~ ^(.*[^0-9]|)([0-9]+)([^0-9].*|)$ ]]; then
        local num=${BASH_REMATCH[2]} rhs="${BASH_REMATCH[3]}";
        mn "${BASH_REMATCH[1]}" ${2:-3} l;
        echo -n "$[num*${2:-3}]$rhs";
    else
        echo -n "$1";
    fi;
    [ "$3" ] || echo
}

আসুন দেখান:

mn "This 1 is22a 3352sentence 50" 42
This 42 is924a 140784sentence 2100

(যা সম্পূর্ণ অসম্ভব বাক্য)

পার্ল সামান্য অবহেলা (কেবল মজাদার জন্য)

এই সংস্করণ ( @ চিলিমাজিকের উত্তরের ভিত্তিতে ) ছোট নয়, তবে টোটেম স্ক্রিপ্ট হিসাবে নকশা করা হয়েছে :

cat <<eof >mn.pl

#!/usr/bin/perl          -sp
                      eval eval'"'
                      .('['^'(')
           .'/\\'.'\\'.('`'|'$').'+'.'/\\$\&'
                        .'*\\$'
                      .('`'|'.').'/'
                      .('`'|"'")
                      .('`'|'%').'"'

eof chmod +x mn.pl

নমুনা রান:

./mn.pl -n=2 <<<$'This 1 is22a 3352sentence 50\n21.'
This 2 is44a 6704sentence 100
42.

0

হাস্কেল, 70

খুব খারাপ আমি খুব দেরি করেছি IMHO এই নির্দিষ্ট প্রশ্ন এবং ভাষার জন্য এটি বেশ ভাল। অন্যান্য হাস্কেল সমাধান এখানে 161 টি অক্ষর ..

[]%n=""
s%n=f s(reads s)n
f _((a,b):_)n=show(a*n)++b%n
f(x:s)_ n=x:s%n

এটি readsফাংশনটি ব্যবহার করে যা একটি স্ট্রিংকে আংশিকভাবে পার্স করে। উদাহরণস্বরূপ reads "34abc" = [(34, "abc")],। এটি অবশ্যই এই চ্যালেঞ্জের জন্য নিখুঁত করে তোলে।

ব্যবহার:

*Main> " This 1 is22a 3352sentence 50"%3
" This3 is66a10056sentence150"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.