RegExps ছাড়াই অ-অঙ্কগুলিতে একটি স্ট্রিংকে বিভক্ত করতে সবচেয়ে ছোট প্রোগ্রাম


16

সম্পাদনা: আপনি যদি লিস্প ব্যবহার করে থাকেন তবে আমি গণনা বাইটগুলির নীচে কিছু দিকনির্দেশ দিয়েছি।

উদ্দেশ্য: সংক্ষিপ্ততম ফাংশনটি তৈরি করুন যা অ-অঙ্কগুলিতে একটি স্ট্রিং বিভক্ত হয় এবং কোনও নিয়মিত এক্সপ্রেশন ব্যবহার না করে প্রতিটি স্ট্রিংয়ে কেবলমাত্র অঙ্ক সহ একটি অ্যারে প্রদান করে। শীর্ষস্থানীয় শূন্যগুলি প্রতিটি স্ট্রিংয়ের মধ্যে অন্তর্ভুক্ত করতে হবে।

বর্তমান অবস্থান (বিভাগে পৃথক):

  • সি / সি ++ / সি # / জাভা: 68 (সি) ....
  • গল্ফস্ক্রিপ্ট / এপিএল / জে: ১৩ (এপিএল)
  • অন্যান্য সমস্ত: 17 (বাশ, ব্যবহার tr), 24 (রুবি)

নিয়মাবলী:

(আমি দীর্ঘায়নের জন্য ক্ষমা চাই)

  1. ফর্ম্যাটটি অবশ্যই একটি একক স্ট্রিং আর্গুমেন্টের সাথে ফাংশন হিসাবে থাকতে হবে। অ্যারের যথাযথ প্রত্যাবর্তনের জন্য প্রয়োজন হলে দুটি অতিরিক্ত যুক্তি যুক্ত করা যেতে পারে (যেমন sh / csh / ডস ব্যাচের ফেরত দেওয়ার জন্য অতিরিক্ত পরিবর্তনশীল রেফারেন্সের প্রয়োজন ইত্যাদি)।
  2. প্রাথমিক ফাংশন ঘোষণার গণনা করা হয় না এবং অন্যান্য মানক গ্রন্থাগারও আমদানি করে না। `# অন্তর্ভুক্ত`,` আমদানি এবং `ব্যবহারের গণনা হয় না। অন্য সব কিছু করে। এর মধ্যে `# সংজ্ঞায়িত এবং সহায়ক ফাংশন অন্তর্ভুক্ত রয়েছে। বিভ্রান্তির জন্য দুঃখিত. কী গণনা করে না / গণনা করে না সে সম্পর্কে সহায়ক গাইড হিসাবে এটি পড়ুন (সি-স্টাইল সিনট্যাক্সে লিখিত)
    // মোট হিসাবে গণনা করা হয় না, বাদ দেওয়া যেতে পারে যদি না
    // জাভির স্ট্যান্ডার্ড লাইব্রেরির অর্ধেকের মতো অস্পষ্ট।
    # অন্তর্ভুক্ত <stdio.h>
    
    কিছু আমদানি করুন। বিল্টিন.ক্লাস // গণনা করে না, উপরে দেখুন
    
    # নির্ধারিত প্রিন্টফ পি // মোটের পক্ষে গণনা করে
    
    / * অন্য কোনও প্রিপ্রসেসর নির্দেশিকা, ইত্যাদি গণনা। * /
    
    int i = 0; // গণনা
    
    someFunction (); // গণনা
    
    চর [] [] myMainSplitFunction (চর [] [] অ্যারে) {// গণনা করে না
      // এখানে সমস্ত কিছু গণনা করা হয়
      রিটার্ন রিটার্নআরে; // এমনকি এই গণনা।
    } // গণনা করে না
    
    / * এখানে ঘোষণা সহ সমস্ত কিছুই গণনা করা হয় * /
    চর [] [] কিছু হেল্প ফাংশন (চর [] স্ট্রিং) {
      // জিনিসপত্র
    } // এমনকি এটি গণনা করা হয়
    
  3. আউটপুট অবশ্যই একটি স্ট্রিং অ্যারে বা অনুরূপ হতে হবে (জাভা এবং অনুরূপে অ্যারের তালিকা গ্রহণযোগ্য। গৃহীত আউটপুট উদাহরণ: String[], char[][], Array, List, এবং Array(বস্তু)।
  4. অ্যারেতে কেবল চলক দৈর্ঘ্যের স্ট্রিং আদিম বা স্ট্রিং অবজেক্ট থাকতে হবে। কোনও খালি স্ট্রিং নীচে ব্যতিক্রম বাদ দিয়ে রিটার্নে উপস্থিত হওয়া উচিত। দ্রষ্টব্য: স্ট্রিংগুলিতে পরপর ম্যাচের একটি স্ট্রিং থাকে যেমন উদাহরণের নীচে ইনপুট এবং আউটপুট।
  5. যদি কোনও মিল নেই, তবে ফাংশন বডিটি ফিরে আসবে null, একটি খালি অ্যারে / তালিকা, বা একটি অ্যারে / তালিকা খালি স্ট্রিং রয়েছে।
  6. কোনও বাহ্যিক গ্রন্থাগার অনুমোদিত নয়।
  7. ডস লাইন শেষগুলি একটি বাইট হিসাবে গণনা, দুটি নয় (ইতিমধ্যে মেটাতে আবৃত, তবে জোর দেওয়া দরকার)
  8. এবং এখানে বৃহত্তম নিয়ম: কোনও নিয়মিত প্রকাশের অনুমতি নেই।

এটি একটি প্রশ্ন, তাই সবচেয়ে ছোট আকারের জয়। শুভকামনা!

এবং এখানে ইনপুট এবং আউটপুটগুলির কয়েকটি উদাহরণ রয়েছে (সি-স্টাইলের সাথে পালিয়ে যাওয়া):

ইনপুট: "abc123def456"
আউটপুট: ["123", "456"]

ইনপুট: "aitew034snk582: 3c"
আউটপুট: ["034", "582", "3"]

ইনপুট: "as5493tax54 \\ 430-52@g9.fc"
আউটপুট: ["5493", "54", "430", "52", "9"]

ইনপুট: "স্যাস্পার্স] টের \" রে \\ ফরজ "
আউটপুট: নাল, [], [""], বা অনুরূপ

আপনার উত্তরগুলি দ্বারা ব্যবহৃত কতগুলি বাইট রাখুন দয়া করে এবং সর্বদা হিসাবে, সুখী গল্ফিং!


লিস্পের জন্য গাইডলাইনস

লিস্প উপভাষায় কী করে এবং গণনা করা যায় তা এখানে:

;;; বিকল্প 1

(ডিফুন এক্সট্র্যাক্ট-স্ট্রিং (আব)) গণনা করে না
  (জিনিসপত্র) ;;; এখানে সবকিছু গণনা করা হয়
); গণনা করে না

;;; বিকল্প 2

(ডিফল্ট এক্সট্র্যাক্ট-স্ট্রিং (স্ট্রিং এবং অক্স (শুরু 0) (শেষ 0)); গণনা করে না
  (জিনিসপত্র) ;;; এখানে সবকিছু গণনা করা হয়
); গণনা করে না।
অন্যান্য সমস্ত ল্যাম্বডাস সম্পূর্ণরূপে বাইট গণনার দিকে গণনা করে।


এই আগে জিজ্ঞাসা করা হয়নি?
ইসমাইল মিগুয়েল

1
হ্যাঁ, তবে আমি এটি মেটাতে পুনরায় জিজ্ঞাসা করেছি এবং এখানে আবার পোস্ট করার আগে এটিতে যথেষ্ট পরিমাণে সম্পাদনা করেছি। এ কারণে এটি সদৃশ হিসাবে শ্রেণিবদ্ধ করা উচিত নয় (অন্যটি ইতিমধ্যে না থাকলে বন্ধ করা উচিত)।
ইসিয়া মিডোস

2
আপনার "গল্ফ" একটি উত্তর হিসাবে পোস্ট করা উচিত নয়?
মিঃহাইট

4
দুঃখিত, তবে গল্ফস্ক্রিপ্টকে অস্বীকার করার জন্য -1। সমস্ত ভাষার অনুমতি দেওয়া উচিত।
ডুরকনব

1
@ ডুরকনব এটি সত্য, তবে আমি ওপি'র অনুভূতিগুলিও বুঝতে পারি। লোকেরা গল্ফস্ক্রিপ্ট, জে, বা এপিএল না বললেও প্রতিযোগিতা করার সুযোগ পাওয়া উচিত (এবং আমি এই প্রতিযোগিতাগুলিতে উত্তরোত্তরটি অনুধাবন করার জন্য দোষী।) আপনি কীভাবে আমার সাথে যুক্ত থ্রেডে আমার প্রস্তাবটি দেখতে পারেন?
টোবিয়া

উত্তর:


10

এপিএল, ১৩ টি চর

(বা 28/30 বাইট, নীচে পড়ুন)

{⍵⊂⍨⍵∊∊⍕¨⍳10}

আমি দেখতে পাচ্ছি আপনি আপনার প্রশ্ন থেকে গল্ফস্ক্রিপ্ট নিষিদ্ধ করেছেন। আমি আপনার অনুভূতি বুঝতে পেরেছি, তবে আমি আশা করি এই সম্প্রদায়টি শেষ পর্যন্ত এপিএল নিষিদ্ধ করবে না, কারণ এটি একটি দীর্ঘ ইতিহাসের সাথে একটি সত্যিকারের উল্লেখযোগ্য প্রোগ্রামিং ভাষা, কোডে মজাদার অনেক কিছুই উল্লেখ না করে Maybe সম্ভবত এটি অন্যরকম হতে পারে, মানুষ যদি অনুভব করুন যে এটি অন্যায়ভাবে প্রতিযোগিতা করছে। আপনি যে লিঙ্কটি যুক্ত করেছেন আমি এই বিষয়ে আমার চিন্তাভাবনা পোস্ট করব।

একই টোকেনে, আমি সর্বদা আমার এপিএল পোস্টগুলিতে একটি পাদটীকা যুক্ত করেছি, দাবি করে যে এপিএল 1 চর = 1 বাইট হিসাবে স্কোর হতে পারে। আমার দাবির উপর নির্ভর করে যে কয়েকটি (বেশিরভাগ বাণিজ্যিক) এপিএল বাস্তবায়ন এখনও তাদের নিজস্ব উত্তরাধিকার একক-বাইট এনকোডিং সমর্থন করে, এপিএল প্রতীকগুলি উপরের 128 বাইট মানগুলিতে ম্যাপ করা হয়েছে। তবে এটি সম্ভবত প্রসারিতের খুব বেশি, সেক্ষেত্রে আপনি এই প্রবেশটি ইউটিএফ -16 এর 28 বাইট বা ইউটিএফ -8-তে 30 বাইট হিসাবে স্কোর করতে চাইতে পারেন।

ব্যাখ্যা

{        ⍳10}  make an array of naturals from 1 to 10
       ⍕¨      convert each number into a string
      ∊        concatenate the strings into one (it doesn't matter that there are two 1s)
    ⍵∊         test which chars from the argument are contained in the digit string
 ⍵⊂⍨           use it to perform a partitioned enclose, which splits the string as needed

উদাহরণ

      {⍵⊂⍨⍵∊∊⍕¨⍳10} 'ab5c0x'
 5  0 
      {⍵⊂⍨⍵∊∊⍕¨⍳10}  'z526ks4f.;8]\p'
 526  4  8 

স্ট্রিংগুলির অ্যারের জন্য ডিফল্ট আউটপুট ফর্ম্যাট এটি পরিষ্কার করে না যে অ্যারেতে কতগুলি স্ট্রিং রয়েছে, না কতগুলি ফাঁকা রয়েছে। তবে উদ্ধৃতিগুলি যুক্ত করার জন্য দ্রুত হেরফেরটি এটিকে যথেষ্ট স্পষ্ট করে তুলবে:

      {q,⍵,q←'"'}¨ {⍵⊂⍨⍵∊∊⍕¨⍳10} 'ab5c0x'
 "5"  "0" 
      {q,⍵,q←'"'}¨ {⍵⊂⍨⍵∊∊⍕¨⍳10}  'z526ks4f.;8]\p'
 "526"  "4"  "8" 

আপনার মন্তব্য সম্পর্কে, আমি মনে করি যে অন্যান্য ভাষার জন্য "শর্টহ্যান্ড "গুলির সাথে সুষ্ঠুভাবে প্রতিযোগিতা করা উচিত প্রত্যেকের প্রতীককে অন্য ভাষাগুলিতে একটি চর হিসাবে গণনা করা উচিত। উদাহরণস্বরূপ, আমার পোস্ট করা গণিতের সমাধানটি এখানে 7 (কম বা কম) হিসাবে গণনা করা উচিত। সংক্ষিপ্ত টোকেন সহ একটি ভাষা নকশা করা মোটেই যোগ্য নয়, আমার ধারণা।
ডাঃ বেলিসারিয়াস

আপনি কি নিজের গল্ফের একটি হেক্স ডাম্প সরবরাহ করতে পারেন? আমি কিছু চরিত্র পড়তে পারি না।
ইসিয়া মিডোস

@ আইপিনবল কীভাবে হেক্সডাম্প আপনাকে সহায়তা করবে? আপনি যা দেখছেন তা দেখতে পছন্দ করবেন না।
এমনিআইপ

@ আইপিনবোল এপিএল কোডটি হ'ল প্রতিটি ওটা 10} বিন্যাসে ওমেগা এনক্লোজ কমমেট ওমেগা অ্যাপসিলন এপসিলন ফর্ম্যাট} আপনার যদি ইউনিকোড মানগুলির প্রয়োজন হয় তবে আপনি কেবল কোনও অনলাইন সরঞ্জামে এটি অনুলিপি করে আটকে দিতে পারবেন, এমনকি যদি আপনি অক্ষরগুলি দেখতে না পান (যা বিস্ময়কর, কারণ আধুনিক ইউনিকোডের ফন্টগুলির এপিএল চিহ্ন রয়েছে) যে কোনও ক্ষেত্রে আপনি যা পান তা হ'ল {\ u2375 \ u2282 \ u2368 \ u2375 \ u220a \ u220a \ u2355 \ u00a8 \ u237310} (সর্বশেষ "10" যা পালানোর ক্রমের অংশ নয়) মনে রাখবেন
টোবিয়া

1
পরিবর্তে ∊⍕¨⍳10, আপনি কি শুধু ব্যবহার করতে পারবেন না ⎕D? ধ্রুবক হওয়া উচিত '0123456789'। ডায়ালগ এপিএল খুব কমপক্ষে এটি সমর্থন করে এবং তাই NARS2000 করে।
মেরিনাস

5

পাইথন 47

বাস্তবায়ন

f=lambda s:"".join([' ',e][e.isdigit()]for e in s).split()

ডেমো

>>> sample=["abc123def456","aitew034snk582:3c","as5493tax54\\430-52@g9.fc","sasprs]tore\"re\\forz"]
>>> [f(data) for data in sample]
[['123', '456'], ['034', '582', '3'], ['5493', '54', '430', '52', '9'], []]

অ্যালগরিদম

প্রতিটি অ-অঙ্কের অক্ষরকে মহাকাশে রূপান্তর করুন এবং তারপরে ফলাফল স্ট্রিংকে বিভক্ত করুন। একটি সহজ এবং স্পষ্ট পদ্ধতির।

এবং ইটারটোলের সাথে একটি মজাদার সমাধান (characters১ টি অক্ষর)

f1=lambda s:[''.join(v)for k,v in __import__("itertools").groupby(s,key=str.isdigit)][::2]

4

রুবি, 70

f=->(s){s.chars.chunk{|c|c.to_i.to_s==c}.select{|e|e[0]}.transpose[1]}

পরীক্ষার জন্য অনলাইন সংস্করণ

যেহেতু যে কোনও অ-অঙ্কের অক্ষরকে রুবিতে (0_t_i) সাথে একটি ইনট রিটার্নে 0 এ রূপান্তর করা হয়, তাই প্রতিটি চরকে আন্তঃ এবং ফিরে চরে রূপান্তর করা হ'ল একটি অঙ্ক পরীক্ষা করার নন-রেজেক্স উপায় ...


আপনি একজন ('0' .. '9') সদস্যও করতে পারেন? প্রতি চরের জন্য, তবে আপনি যা করেছেন তা ইতিমধ্যে সংক্ষিপ্ত
fgp

আপনি অবশ্যই সত্য বলেছেন - আমার বলা উচিত ছিল: "একটি" উপায়;)
ডেভিড হারম্যান

4

বাশ, 26 (ফাংশন সামগ্রী: 22 + অ্যারে অ্যাসাইনমেন্ট ওভারহেড 4)

এটি অন্য bashউত্তরটিকে পরাজিত করতে যাচ্ছে না , তবে এটি আকর্ষণীয় কারণ এটি আপনাকে ডাবল-টেক করতে পারে:

f()(echo ${1//+([!0-9])/ })

ব্যবহার হ'ল:

$ a=(`f "ab5c0x"`); echo ${a[@]}
5 0
$ a=(`f "z526ks4f.;8]\p"`); echo ${a[@]}
526 4 8
$ 

প্রথম তাত্ক্ষণিক নজরে, //+([!0-9])/অনেকটা একটি রেজিপ্লেক্স বিকল্পের মতো দেখায়, তবে তা হয় না। এটি বাশ প্যারামিটার সম্প্রসারণ , যা নিয়মিত প্রকাশের নিয়মের পরিবর্তে প্যাটার্ন-ম্যাচিং নিয়ম অনুসরণ করে

বাশ ফাংশন থেকে সত্য বাশ অ্যারের প্রকারগুলি প্রত্যাবর্তন একটি ব্যথা, তাই আমি পরিবর্তে একটি স্পেস-ডিলিমেটেড তালিকাটি ফিরে ফাংশন কলের বাইরে অ্যারে অ্যাসাইনমেন্টে একটি অ্যারেতে রূপান্তরিত করতে বেছে নিয়েছি। সুতরাং ন্যায্যতার স্বার্থে, আমি মনে করি (` `)ফাংশন কলটির চারপাশে আমার স্কোর অন্তর্ভুক্ত করা উচিত।


3

গণিত 32

StringCases[#,DigitCharacter..]&

ব্যবহার

inps ={"abc123def456", "aitew034snk582:3c", "as5493tax54\\430-52@g9.fc", 
        "sasprs]tore\"re\\forz"}  
StringCases[#,DigitCharacter..]&/@inps

{{"123", "456"}, 
 {"034", "582", "3"}, 
 {"5493", "54", "430", "52", "9"}, 
 {}
}

রেজেক্সস ব্যবহারের সমতুল্য অনেক দীর্ঘ !:

StringCases[#, RegularExpression["[0-9]+"]] &

ম্যাথামেটিকা ​​রেগেজেস এ চুষে।
ক্যালকুলেটরফলাইন

3

বাশ, 21 বাইট 17/21 বাইট ( ডিজিটালট্রামা দ্বারা উন্নত )

এর সাথে একটি স্থান-বিভাজিত তালিকা তৈরি করা tr

function split() {
tr -c 0-9 \ <<E
$1
E
}

কোনও স্থান দ্বারা কোনও অ-অঙ্কের প্রতিস্থাপন করে

ব্যবহার

$ for N in $(split 'abc123def456'); do echo $N; done
123
456

সম্পাদন করা

নীচের মন্তব্যে নির্দেশিত হিসাবে, কোডটি 17 বাইটে নামিয়ে দেওয়া যেতে পারে:

function split() (tr -c 0-9 \ <<<$1)

এবং ফলাফলটি কঠোরভাবে কোনও বাশ অ্যারে না বলে, ব্যবহার হওয়া উচিত

a=(`split "abc123def456"`); echo ${a[@]}

এবং অতিরিক্ত (``)গণনা করা উচিত


1
গাহ তুমি আমাকে মারতে! তবে কেন এখানে নথির পরিবর্তে এখানে একটি স্ট্রিং ব্যবহার করবেন না? এছাড়াও আপনি ফাংশন বিষয়বস্তুর ব্যবহারের শেষে একটি newline সংরক্ষণ করতে পারবেন (blah)পরিবর্তে {blah;}: split()(tr -c 0-9 \ <<<$1)। এইভাবে আপনার ফাংশন বডিটি কেবল 17 টি অক্ষর।
ডিজিটাল ট্রমা

1
আপনার ফাংশনটি অ্যারের পরিবর্তে "স্পেস-বিভাজিত তালিকা" দেয়। অবশ্যই সত্য অ্যারে ফিরে থেকে ব্যাশ ফাংশন বিশ্রী, কিন্তু আপনি অন্তত আপনার ব্যবহারের মধ্যে একটি অ্যারের আপনার ফাংশনের ফলাফলের দায়িত্ব অর্পণ পারে: a=($(split "12 3a bc123")); echo ${a[@]}। এটি যুক্তিযুক্ত হতে পারে যে "($ ())" আপনার স্কোর গণনা করা যেতে পারে
ডিজিটাল ট্রমা

trপদ্ধতির অন্বেষণের আগে , আমি প্যারামিটার সম্প্রসারণের মাধ্যমে এটি করার চেষ্টা করেছিtrগল্ফিংয়ের উদ্দেশ্যে অবশ্যই আরও ভাল পন্থা।
ডিজিটাল ট্রমা

আপনি কি trএক্সপেনশন অপারেটরের সাথে ঘিরে চেষ্টা করেছেন? এটির মতো কিছু বেরিয়ে আসে ($(tr...)), এবং যেখানে ফাংশন ঘোষণার গণনা হয় না, বাইরের বন্ধনীগুলি আপনার বিরুদ্ধে গণনা করে না। এটি কেবল কমান্ড বিকল্পের অংশ হবে।
ইসিয়া মিডোস

এটি কীভাবে কাজ করা উচিত তা আমি দেখতে পাচ্ছি না তবে আমি যদিও বাশ অ্যারেতে সাবলীল নই। যাইহোক, নির্মাণটি একটির (``)চেয়ে 1-চরিত্রের চেয়ে ভাল ($())এবং পছন্দসই হবে।
Coaumdio

2

স্মলটাক (স্মলটালক / এক্স), ৮১

f := [:s|s asCollectionOfSubCollectionsSeparatedByAnyForWhich:[:ch|ch isDigit not]]

এফ মান: 'abc123def456' -> অর্ডারক্লিকেশন ('123' '456')

f মান: 'aitew034snk582: 3c' -> অর্ডারডক্লোকশন ('034' '582' '3')

f মান: 'as5493tax54 \ 430-52@g9.fc' -> আদেশ সংগ্রহ ('5493' '54' '430' '52' '9')

চ মান: 'স্যাস্পার্স] ট্রেড \ "রে \ ফোরজ" -> অর্ডারকলেকশন ()

দীর্ঘশ্বাস ফেলুন - স্মার্টলাকের ভিউরি লং ফাংশন নাম ব্যবহার করার প্রবণতা রয়েছে ...


2
এটি কি কোনও ফাংশনের নাম? o__O
টোবিয়া

@ টোবিয়ার স্পষ্টত ...
ইসিয়া মিডোস

asCollectionOfSubCollectionsSeparatedByAnyForWhich
Name_ಠ

1

আর, 81

f=function(x){
s=strsplit(x,"",T)[[1]]
i=s%in%0:9
split(s,c(0,cumsum(!!diff(i))))[c(i[1],!i[1])]
}

ফাংশনটি একটি স্ট্রিং গ্রহণ করে এবং স্ট্রিংগুলির একটি তালিকা প্রদান করে।

উদাহরণ:

> f("abc123def456")
$`1`
[1] "1" "2" "3"

$`3`
[1] "4" "5" "6"

-

> f("aitew034snk582:3c")
$`1`
[1] "0" "3" "4"

$`3`
[1] "5" "8" "2"

$`5`
[1] "3"

-

> f("as5493tax54\\430-52@g9.fc")
$`1`
[1] "5" "4" "9" "3"

$`3`
[1] "5" "4"

$`5`
[1] "4" "3" "0"

$`7`
[1] "5" "2"

$`9`
[1] "9"

-

> f("sasprs]tore\"re\\forz")
$<NA>
NULL

দ্রষ্টব্য: $xতালিকার উপাদানটির নাম।


1

পার্ল, 53

সম্পাদনা: কোনও মিল নেই, সাব এখন প্রয়োজনীয় খালি স্ট্রিং (খালি তালিকার পরিবর্তে) দিয়ে তালিকাটি ফিরিয়ে দেয়।

এটি একক স্পেস চরিত্রের বিভাজনও এড়িয়ে যায়, কারণ এটি 'কোনও সাদা-স্পেসের বিভাজন' আচরণের সূত্রপাত করে যা সম্ভবত নিয়ম লঙ্ঘন করে। আমি / /ডিলিমিটার ব্যবহার করতে পারি , যা একক জায়গায় বিভক্ত হবে, তবে বিপরীত দিক থেকে এটি regexp প্যাটার্ন ব্যবহার করার মতো দেখায় । আমি unpackকিছু অতিরিক্ত চরিত্রের ব্যয় করে ব্যবহার করতে পারি এবং তাই splitবিতর্ক থেকে পুরোপুরি মুক্তি পেতে পারি, তবে আমি মনে করি যে, আমি যা দিয়ে শেষ করব, আক্ষরিক চরিত্রের (স্পেস ব্যতীত) আলাদা করে রাখা ঠিক আছে।

sub f{shift if(@_=split a,pop=~y/0-9/a/csr)[0]eq''and$#_;@_}

এবং, না, পার্লের অনুলিপি অপারেটর নিয়মিত প্রকাশ করে না। 0123456789যদি সমস্যা হয় তবে আমি 0-9 রেঞ্জটি আনরোল করতে পারি ।


যতক্ষণ না এটি নিয়মিত এক্সপ্রেশন ব্যবহার করে না ততক্ষণ এটি বৈধ।
ইসিয়া মিডোস

আমার পার্ল তেমন শক্তিশালী নয়। যদি আমি কোডটি বুঝতে পারি তবে আপনি অ-অঙ্কগুলি একটি নির্দিষ্ট অ-অঙ্কের সাথে প্রতিস্থাপন করছেন, তারপরে সেই নির্বাচিত অ-অঙ্কের উপর বিভক্ত হয়ে খালি স্ট্রিংগুলি ফিল্টার করে নিচ্ছেন। এটি কি সঠিক পাঠ?
টিম সেগুইন

1
@ টিমসিগুইন: ঠিক নয়। অ-অঙ্কগুলি প্রতিস্থাপন করা হয় এবং একটি একক অক্ষরে স্কোয়াশ করা হয়, বিভক্ত হয়ে যা খালি স্ট্রিং তৈরি করে যদি সেই ডিলিমিটারটি শুরুতে ঘটে। তালিকায় অন্যান্য এন্ট্রি থাকলে এটি সরানো হয়।
ব্যবহারকারী 2846289

এনপটি তালিকা ঠিক আছে।
ইসিয়া মিডোস

1

সি, 68 বাইট (শুধুমাত্র ফাংশনের মূল অংশ)

void split (char *s, char **a) {
int c=1;for(;*s;s++)if(isdigit(*s))c?*a++=s:0,c=0;else*s=0,c=1;*a=0;
}

প্রথম যুক্তি হ'ল ইনপুট স্ট্রিং, দ্বিতীয়টি হ'ল আউটপুট অ্যারে, যা একটি নুল-টার্মিনেটেড স্ট্রিং অ্যারে। aফাংশনটি কল করার আগে পর্যাপ্ত মেমরির জন্য অবশ্যই সংরক্ষণ করা উচিত (সবচেয়ে খারাপ ক্ষেত্রে sizeof(char*)*((strlen(s)+1)/2):)।

ইনপুট স্ট্রিংটি ফাংশনটির মাধ্যমে সংশোধন করা হয়েছে (প্রতিটি অ-অঙ্কের অক্ষর দ্বারা প্রতিস্থাপন করা হবে '\0')

ব্যবহারের উদাহরণ

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

void split (char *s, char **a) {
int c=1;for(;*s;s++)if(isdigit(*s))c?*a++=s:0,c=0;else*s=0,c=1;*a=0;
}   

void dump(char **t) {
    printf("[ ");for(;*t;t++)printf("%s ", *t);printf("]\n");
}   

int main() {
    char **r = malloc(1024);
    char test1[] = "abc123def456";
    char test2[] = "aitew034snk582:3c";
    char test3[] = "as5493tax54\\430-52@g9.fc";
    char test4[] = "sasprs]tore\"re\\forz";
    split(test1,r); 
    dump(r);
    split(test2,r); 
    dump(r);
    split(test3,r); 
    dump(r);
    split(test4,r); 
    dump(r);
    return 0;
}

আউটপুট

[ 123 456 ]
[ 034 582 3 ]
[ 5493 54 430 52 9 ]
[ ]

আন-গল্ফ করা সংস্করণ:

void split (char *s, char **a) {
    int c=1; // boolean: the latest examined character is not a digit
    for(;*s;s++) {
        if(isdigit(*s)) {
            if(c) *a++ = s; // stores the address of the beginning of a digit sequence
            c=0;
        } else {
            *s=0; // NULL-terminate the digit sequence
            c=1;
        }   
    }   
    *a = 0; // NULL-terminate the result array
} 

1

ভিবিএস স্ক্রিপ্ট, 190 (ফাংশন ঘোষণা ছাড়াই 164)

Function f(i)
For x=1 To Len(i)
c=Mid(i,x,1)
If Not IsNumeric(c) Then
Mid(i,x,1)=" "
End If
Next
Do
l=Len(i)
i=Replace(i,"  "," ")
l=l-Len(i)
Loop Until l=0
f=Split(Trim(i)," ")
End Function

মোটেও প্রতিযোগিতামূলক না হলেও, আমি আশ্চর্য হয়েছি যে ভিবিএস স্ক্রিপ্টটি এই সংক্ষিপ্তভাবে প্রকাশিত হয়েছে যে এটি কীভাবে ভার্বোস হয় (একা সিআরদের জন্য 13 বাইট)। এটি স্ট্রিংয়ের মধ্য দিয়ে ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফাঁকে কোনও অ-সংখ্যাীয় অক্ষরকে প্রতিস্থাপন করে, তারপর সমস্ত সাদা স্থানকে একক স্পেসে হ্রাস করে এবং তারপরে বিভাজনে স্পেস ডিলিমিটার ব্যবহার করে।

পরীক্ষার মামলা

Input: "ab5c0x"
Output: 5,0

Input: "z526ks4f.;8]\p"
Output: 526,4,8

আমি মেটাতে যতদূর পড়েছি ডসের লাইন এন্ডিংগুলি একটি অক্ষর হিসাবে গণ্য।
ইসিয়া মিডোস

আমি আপনার জন্য একটি সম্পাদনা প্রস্তাব।
ইসিয়া মিডোস

গণনাটি ইতিমধ্যে লিনাক্স স্টাইলকে 1 বাইট লাইন শেষ বলে ধরেছে। আমি আমার গণনা অনুসারে 190 টি অক্ষর পেয়েছি (কেবল আবার যাচাই করা হয়েছে)।
Comintern

ঠিক আছে. আমার অবশ্যই ভুল হিসাব করা উচিত
ইসিয়া মিডোস

1

সাধারণ লিপ্প (চিঠি অনুসারে 1; আত্মা অনুসারে according173)

এখানে একটি পাঠযোগ্য সংস্করণ। বাইট গণনা কারণ ভালো জিনিস দীর্ঘ নামের মোটামুটি উচ্চ digit-char-pএবং position-ifএবং vector-push-extend

(defun extract-numeric-substrings (string &aux (start 0) (end 0) (result (make-array 0 :adjustable t :fill-pointer 0)))
  (loop 
     (unless (and end (setq start (position-if #'digit-char-p string :start end)))
       (return result))
     (setq end (position-if (complement #'digit-char-p) string :start (1+ start)))
     (vector-push-extend (subseq string start end) result)))
(extract-numeric-substrings "abc123def456")
#("123" "456")

(extract-numeric-substrings "aitew034snk582:3c")
#("034" "582" "3")

(extract-numeric-substrings "as5493tax54\\430-52@g9.fc")
#("5493" "54" "430" "52" "9")

(extract-numeric-substrings "sasprs]tore\"re\\forz")
#()

"ফাংশন ডিক্লেয়ারেশন" ধারণাটি ধরণের অস্পষ্ট। এখানে এমন একটি সংস্করণ যা কেবলমাত্র একটি বাইট ( xফাংশন বডির চরিত্র ); ফাংশনটির লাম্বা তালিকার সহায়তাকারী ভেরিয়েবলগুলিতে (ফাংশনটির ঘোষণার অংশ) বান্ডিলযুক্ত সমস্ত কিছু:

(defun extract-numeric-substrings (string 
                                   &aux (start 0) (end 0) 
                                   (result (make-array 0 :adjustable t :fill-pointer 0))
                                   (x (loop 
                                         (unless (and end (setq start (position-if #'digit-char-p string :start end)))
                                           (return result))
                                         (setq end (position-if (complement #'digit-char-p) string :start (1+ start)))
                                         (vector-push-extend (subseq string start end) result))))
  x)

প্রকৃত বাইট গণনা নির্ভরযোগ্য হিসাবে বিবেচিত হওয়ার জন্য কতগুলি সহায়ক ঘোষণাকে দেহে স্থানান্তরিত করতে হবে তার উপর নির্ভর করবে। কিছু স্থানীয় ফাংশন নামকরণও খুব সাহায্য করবে (উদাহরণস্বরূপ, position-ifদু'বার প্রদর্শিত হওয়ার কারণে এটি সংক্ষিপ্ত হয়ে যায়, একক বর্ণের ভেরিয়েবলগুলি ব্যবহার করে)

প্রোগ্রামটির এই উপস্থাপনায় 220 টি অক্ষর রয়েছে:

(LOOP(UNLESS(AND END(SETQ START(POSITION-IF #'DIGIT-CHAR-P STRING :START END)))(RETURN RESULT))(SETQ END(POSITION-IF(COMPLEMENT #'DIGIT-CHAR-P)STRING :START(1+ START)))(VECTOR-PUSH-EXTEND(SUBSEQ STRING START END)RESULT))

অন্য কিছু না হলে, এটি প্রচার করা উচিত কমন লিস্পের & অক্স ভেরিয়েবলগুলি

এটি loopঅবশ্যই আরও সংক্ষিপ্তভাবে লেখা যেতে পারে :

(defun extract-numeric-substrings (s &aux (b 0) (e 0) (r (make-array 0 :fill-pointer 0)))
  (loop 
     with d = #'digit-char-p 
     while (and e (setq b (position-if d s :start e)))
     finally (return r)
     do 
       (setq e (position-if-not d s :start (1+ b)))
       (vector-push-extend (subseq s b e) r)))

loopফর্ম, অতিরিক্ত স্থান সঙ্গে সরানো, 173 টি অক্ষর আছে:

(LOOP WITH D = #'DIGIT-CHAR-P WHILE(AND E(SETQ B(POSITION-IF D S :START E)))FINALLY(RETURN R)DO(SETQ E(POSITION-IF-NOT D S :START(1+ B)))(VECTOR-PUSH-EXTEND(SUBSEQ S B E)R))

আমি (resultশরীর থেকে চূড়ান্ত প্রথম বন্ধনী থেকে শুরু করে গণনা করব । যে অংশটি নাম এবং পরামিতিগুলি সংজ্ঞায়িত করে তা হ'ল ঘোষণা।
ইসিয়ায়া ময়ডোস

আমি কোন ফাংশন ঘোষণায় আসলে কী বলছি তা জানতে দয়া করে আমার সংশোধিত নিয়মের 2 বিধিটি দেখুন (মূলত, ফাংশনটির নাম, পরামিতিগুলি ঘোষণা করুন, এবং যদি সিনট্যাক্টিকভাবে প্রয়োজন হয়, যা ব্যাখ্যাযোগ্য ভাষার মধ্যে বিরল, রিটার্ন টাইপ)।
ইসিয়া মিডোস

@impinball হ্যাঁ, "1" গণনা একটি তামাশা সাজানোর, কিন্তু এখানে গুরুত্বপূর্ণ অংশ যে result হয় একটি প্যারামিটার এখানে হিসেবে ঘোষণা; এটির একটি খুব অ-তুচ্ছ প্রাথমিক সূত্র রয়েছে। এটি নীতিগতভাবে একই জিনিস, একটি ডিফল্ট মান সহ একটি alচ্ছিক যুক্তি হিসাবে যা কিছু জটিল অভিব্যক্তি দ্বারা গণনা করা হয়। (সরল ক্ষেত্রে, char* substring( char *str, int begin, int end(0) )সি-জাতীয় বাক্য গঠন সহ কিছু ভাষায় এমন কিছু কল্পনা করা সহজ যে endএটি বৈকল্পিক এবং যদি এটি সরবরাহ না করা হয় তবে তার মানটি 0। আমি কেবল এই শর্তটি তুলে ধরছি যে
জোশুয়া টেলর

@ আইপিনবোল কিছু ট্রোলিশ বাইট গণনা প্রতিরোধের জন্য যথেষ্ট কংক্রিট এবং ভাষা অজ্ঞালিস্টিক নয়। :)
জোশুয়া টেলর

প্রথম অংশটি যা প্যারামিটারগুলি নির্দিষ্ট করে না তা হ'ল আমি গণনা স্থির করবো (যেমন (defun fn (string &aux (start 0) (end 0)গণনা করা হবে না, তবে ল্যাম্বডায় থাকা সমস্ত কিছু হবে)।
ইসিয়া মিডোস

0

জাভাস্ক্রিপ্ট, 240 বাইট

এবং আপনারা যারা কৌতূহলী তাদের জন্য এখানে আমার সম্ভবত বিশাল গল্ফ রয়েছে:

function split(a) { // begin function
function f(c){for(var a=-1,d=9;d--;){var e=c.indexOf(d+"");0
>e||e<a&&(a=e)}return 0<a?a:null}var c=f(a);if(null==c)retur
n null;var d=[];for(i=0;;){a=a.substring(c);d[i]||(d[i]="");
c=f(a);if(null==c)break;d[i]+=a.charAt(c);0<c&&i++}return d;
} // end function

সুন্দর মুদ্রণের উপরে:

function split(a) {
    function f(c) {
        for (var a = -1, d = 9;d--;) {
            var e = c.indexOf(d + "");
            0 > e || e < a && (a = e);
        }
        return 0 < a ? a : null;
    }
    var c = f(a);
    if (null == c) return null;
    var d = [];
    for (i = 0;;) {
        a = a.substring(c);
        d[i] || (d[i] = "");
        c = f(a);
        if (null == c) break;
        d[i] += a.charAt(c);
        0 < c && i++;
    }
    return d;
}

সাধারণ বর্ণনামূলক কোডের উপরে

function split(a) {
    function findLoop(string) {
        var lowest = -1;
        var i = 9;
        while (i--) {
            var index = string.indexOf(i + '');
            if (index < 0) continue;
            if (index < lowest) lowest = index;
        }
        return (lowest > 0) ? lowest : null;
    }
    var index = findLoop(a);
    if (index == null) return null;
    var ret = [];
    i = 0;
    for ( ; ; ) {
        a = a.substring(index);
        if (!ret[i]) ret[i] = '';
        index = findLoop(a);
        if (index == null) break;
        ret[i] += a.charAt(index);
        if (index > 0) i++;
    }
    return ret;
}

0

পিএইচপি 134

function f($a){
$i=0;while($i<strlen($a)){!is_numeric($a[$i])&&$a[$i]='-';$i++;}return array_filter(explode('-',$a),function($v){return!empty($v);});
}

আপনি কলব্যাকটি এড়িয়ে সংক্ষিপ্ত করতে পারেন array_filter। এটি স্বয়ংক্রিয়ভাবে সমস্ত falseবুকগুলি সরিয়ে ফেলবে যা সেগুলি বুলিয়ানগুলিতে কাস্ট করা হয়।
কেলুনিক

@ কেলুনিক যে 0 টিও ফিল্টার করবে
আইনাসিও

0

সি, 158

#define p printf
char s[100],c;int z,i;int main(){while(c=getchar())s[z++]=(c>47&&c<58)*c;p("[");for(;i<z;i++)if(s[i]){p("\"");while(s[i])p("%c",s[i++]);p("\",");}p("]");}

যেহেতু সি-এর আর্ট প্রিন্ট ফাংশনগুলি অন্তর্নির্মিত নেই আমি নিজেই সেই কাজটি করতে হয়েছিল তাই আমি ক্ষমা চেয়ে নিচ্ছি যে প্রতিটি আউটপুটে একটি চূড়ান্ত কমা রয়েছে। মূলত সেই কোডটি যা করে তা হল এটি স্ট্রিংটি পড়ে যদি এটি একটি অঙ্ক না হয় তবে এটি '\ 0' দিয়ে প্রতিস্থাপন করে এবং তারপরে আমি কেবল কোডটির মধ্য দিয়ে লুপ করি এবং অঙ্কগুলির সমস্ত শৃঙ্খলা মুদ্রণ করি E (ইওফ = 0)

ইনপুট: ab5c0x
আউটপুট: ["5", "0",]

ইনপুট: z526ks4f। 8] \ পি
আউটপুট: ["526", "4", "8",]


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

আমি এগুলিতে বিধিগুলি সংশোধন করব: #defineগুলি, পরিবর্তনশীল ঘোষণা ইত্যাদি গণনা করবে, তবে ফাংশন ঘোষণাটি গণনা করবে না।
ইসিয়া মিডোস

এছাড়াও, গতবার আমি যাচাই করেছিলাম, সি তে একটি টাইপ ছিল char[][]যা আইনী। যদি আপনি (বা char**) হিসাবে ফিরে যান তবে আপনি ভাল থাকবেন।
ইসিয়া মিডোস

এটি পাঠ্য আউটপুট হতে হবে না? আমি যদিও প্রোগ্রামটি স্ট্রিং বিন্যাসে অ্যারে আউটপুট দেওয়ার কথা ছিল
ASKASK

0

সি #, 98

static string[] SplitAtNonDigits(string s)
{
    return new string(s.Select(c=>47<c&c<58?c:',').ToArray()).Split(new[]{','},(StringSplitOptions)1);
}

প্রথমত, .Select()এটি সমস্ত অ- অঙ্ককে কমাতে রূপান্তর করতে লিনকিউ এক্সটেনশন পদ্ধতি ব্যবহার করে । string.Replace()এটি পছন্দনীয় হবে, যেহেতু এটি একটি stringপরিবর্তে পরিবর্তিত হয় IEnumerable<char>, তবেstring.Replace() কেবলমাত্র একটি একক চর বা স্ট্রিং নিতে মতো ব্যবহার করতে পারে নাchar.IsDigit() বা47<c&c<58

উল্লিখিত হিসাবে, .Select()একটি স্ট্রিং প্রয়োগ একটি প্রদান করেIEnumerable<char> , তাই আমাদের এটিকে অ্যারেতে পরিণত করে এবং অ্যারেটিকে পাস করে স্ট্রিংয়ে ফিরে করা দরকারstring কনস্ট্রাক্টরের ।

পরিশেষে, আমরা কমাতে স্ট্রিংটি বিভক্ত করে ব্যবহার করি string.Split()(StringSplitOptions)1বলার একটি ছোট উপায় StringSplitOptions.RemoveEmptyEntries, যা স্ট্রিংয়ের শুরু / শেষে স্বয়ংক্রিয়ভাবে একাধিক পরপর কমা এবং কমাগুলির যত্ন নেবে।


1
পরিবর্তে char.IsDigit(c), আপনি ব্যবহার করতে পারেন'/'<c&&c<':'
grovesNL

1
ভাল পয়েন্ট ... বা আরও ভাল 47<c&&c<58,। (সত্যি বলতে গেলে, আমি অবাক হয়েছি এটি সংখ্যাগুলির সাথে কাজ করে, তবে দৃশ্যত এটি ঘটে)।
বেনম

1
এবং আমি একটি ডাবল '&&' এর পরিবর্তে একক '&' ব্যবহার করে একটি অতিরিক্ত মূল্যবান চরিত্র সংরক্ষণ করতে পারি। সি # তে, এটি এখনও যৌক্তিক এবং যখন উভয় অপারেশন বুলিয়ান হয় - এটি কেবল কিছুটা বিপরীতভাবে কাজ করে এবং যখন তারা পূর্ণসংখ্যা হয়।
বেনম

সুন্দর. আমি জানতাম না যে এটি করতে সক্ষম হয়েছিল।
গ্রোভসএনএল

সামান্য সংক্ষিপ্ত রূপটি হ'ল পরিবর্তে সাদা স্পেসে বিভক্ত হওয়া ,এবং তারপরে ম্যানুয়ালি খালি আইটেমগুলি সরিয়ে ফেলতে হবেreturn new string(s.Select(c=>47<c&c<58?c:' ').ToArray()).Split().Where(a=>a!="").ToArray();
ভিজুয়ালমেলন

0

জেএস / নোড: 168 162 147 138 চারস

function n(s){
var r=[];s.split('').reduce(function(p,c){if(!isNaN(parseInt(c))){if(p)r.push([]);r[r.length-1].push(c);return 0;}return 1;},1);return r;
}

সুন্দর সংস্করণ:

function n(s) {
  var r = [];
  s.split('').reduce(function (p, c) {
    if (!isNaN(parseInt(c))) {
      if (p) {
        r.push([]);
      }
      r[r.length - 1].push(c);
      return 0;
    }
    return 1;
  }, 1);
  return r;
}

এই প্রশ্নটি কেবল অ্যারেটি চায়, যাতে আপনি console.log(r)এবং অন্যান্য কিছু মুছতে পারেন
চার্লস

ফাংশন ঘোষণার স্কোর গণনা করা হয় না (কারণ হল খেলার মাঠ সমতল করতে সহায়তা করে)
ইসায়া ময়ডোস

ঠিক আছে. @ ইমপিনবলের মন্তব্য অনুসারে স্কোরকে সামঞ্জস্য করেছেন (বাস্তবে এখানে দুটি ফাংশন ঘোষিত হয়েছে। চর গণনাতে বেনামে ফাংশন অন্তর্ভুক্ত রয়েছে)
পালানিক

এটা করা উচিত। এটি আরও ভালভাবে ব্যাখ্যা করার জন্য আমি নিয়মগুলি আপডেট করেছি updated
ইসিয়া মিডোস

এদিকে, আরও ভাল কিছু নিয়ে এসেছিল ...
পলানিক

0

রুবি, 24

f=->s{s.tr("
-/:-~",' ').split}

মুদ্রণযোগ্য আসকি পরিসরের মধ্যে নেতিবাচক স্থান ব্যবহার করে অঙ্কগুলি সংজ্ঞায়িত করে।


ফাংশন ঘোষণা গণনা করা হয় না।
ইসিয়া মিডোস

0

পিএইচপি , 204

function s($x){$a=str_split($x);$c=-1;$o=array();
for($i= 0;$i<count($a);$i++){if(ord($a[$i])>=48&&ord($a[$i])<=57)
{$c++;$o[$c]=array();}while(ord($a[$i])>=48&&ord($a[$i])<=57)
{array_push($o[$c],$a[$i]);$i++;}}return $o;}

বর্ণনামূলক কোড:

function splitdigits($input){

    $arr = str_split($input);
    $count = -1;
    $output = array();
    for($i = 0; $i < count($arr); $i++){


    if(ord($arr[$i]) >= 48 && ord($arr[$i]) <= 57){
        $count++;
        $output[$count] = array();
    }

    while(ord($arr[$i]) >= 48 && ord($arr[$i]) <= 57){
        array_push($output[$count], $arr[$i]);
        $i++;
    } 

}

return $output;
}

এটি বেশ লম্বা কোড এবং আমি নিশ্চিত এই কোড গল্ফের জন্য খুব ছোট পিএইচপি সংস্করণ থাকবে। এই আমি পিএইচপি সঙ্গে আসতে পারে।


কিছু উন্নতি আছে: আপনি এর array()সাথে [], এর array_push($output[$count], $arr[$i]);সাথে $output[$count][]=$arr[$i];এবং ord()চেকগুলি প্রতিস্থাপন করতে পারেন is_numeric()। এবং এমনকি এর অক্ষরগুলির পুনরাবৃত্তি করতে আপনার স্ট্রিংটি বিভক্ত করতে হবে না। এছাড়াও, কেবলমাত্র ফাংশনের অভ্যন্তরীণ কোড গণনা করা হয়, সুতরাং এটি আপনার
চরিত্রের

ফাংশন ঘোষণা গণনা করা হয় না। কোনটি গণনা করা হয় এবং কী না সে সম্পর্কে গাইড হিসাবে নিয়ম 2 পড়ুন।
ইসিয়া মিডোস


0

পাইথন 104 83

def f(s, o=[], c=""):
    for i in s:
        try:int(i);c+=i
        except:o+=[c];c=""
    return [i for i in o+[c] if i]

@ অভিজিৎ উত্তরটি অনেক চতুর, এটি আমার মনে যা ছিল কেবল তার একটি "মিন্ফাইড" সংস্করণ।

assert f("abc123def456") == ["123", "456"]
assert f("aitew034snk582:3c") == ["034", "582", "3"]
assert f("as5493tax54\\430-52@g9.fc") == ["5493", "54", "430", "52", "9"]
assert f("sasprs]tore\"re\\forz") == []

এটি কোনও আউটপুট দেয় না, সুতরাং কোডটি কাজ করছে, যদি একে একে চালানো হয়, কারণ কিছু ভেরিয়েবল ঘোষণাপত্রে সংজ্ঞায়িত করা হয়।


আপনি যদি ফাংশন ঘোষণা গণনা করতে হবে না, যদি। ঠিক যেমন মাথা উপরে উঠছে
ইসায়া ম্যডোস

0

পিএইচপি 98 89

ডিজিটালট্রামার বাশ উত্তরের মতো, এটি একটি রেজেস ব্যবহার করে না।

function f($x) {
// Only the following line counts:
for($h=$i=0;sscanf(substr("a$x",$h+=$i),"%[^0-9]%[0-9]%n",$j,$s,$i)>1;)$a[]=$s;return@$a;
}

পরীক্ষার কেস:

php > echo json_encode(f("abc123def456")), "\n";
["123","456"]
php > echo json_encode(f("aitew034snk582:3c")), "\n";
["034","582","3"]
php > echo json_encode(f("as5493tax54\\430-52@g9.fc")), "\n";
["5493","54","430","52","9"]
php > echo json_encode(f("sasprs]tore\"re\\forz")), "\n";
null

0

হাসেল 31

{-# LANGUAGE OverloadedStrings #-}
import Data.Char (isDigit)
import Data.Text (split)

f=filter(/="").split(not.isDigit)

এটি সমস্ত অ-সংখ্যাযুক্ত অক্ষরের উপর স্ট্রিং বিভক্ত করে এবং একটানা ডিলিমিটর দ্বারা উত্পাদিত খালি স্ট্রিংগুলি সরিয়ে দেয়।


0

ভিবিএ 210, 181 ফাংশন ঘোষণা ছাড়াই

Function t(s)
Dim o()
For Each c In Split(StrConv(s,64),Chr(0))
d=IsNumeric(c)
If b And d Then
n=n&c
ElseIf d Then:ReDim Preserve o(l):b=1:n=c
ElseIf b Then:b=0:o(l)=n:l=l+1:End If:Next:t=o
End Function

0

রিবোল (rs 66 টি)

remove-each n s: split s complement charset"0123456789"[empty? n]s

নিখরচায়িত এবং ফাংশন ঘোষণায় আবৃত:

f: func [s] [
    remove-each n s: split s complement charset "0123456789" [empty? n]
    s
]

রেবোল কনসোলের উদাহরণ কোড:

>> f "abc123def456"
== ["123" "456"]

>> f "aitew035snk582:3c"
== ["035" "582" "3"]

>> f "as5493tax54\\430-52@g9.fc"
== ["5493" "54" "430" "52" "9"]

>> f {sasprs]torer"re\\forz}
== []

0

জাভাস্ক্রিপ্ট, 104 97 89

Golfed:

সম্পাদনা: যখন লুপগুলি অ্যারের শেষের দিকে চলে যায় তখন cহয়undefined যা falsy, এবং লুপ বন্ধ।

2/27: ব্যবহার ?:এর শব্দবাহুল্য সংরক্ষণ if/else

function nums(s) {
s+=l='length';r=[''];for(k=i=0;c=s[i];i++)r[k]+=+c+1?c:r[k+=!!r[k][l]]='';
r[l]--;return r
}

শরীরে গাড়ীর ফেরত পাঠযোগ্যতার জন্য এবং এটি সমাধানের অংশ নয়।

Ungolfed:

ধারণাটি হ'ল প্রতিটি অক্ষরটি অ্যারের শেষ প্রবেশের সাথে সংখ্যায় যুক্ত করা এবং শেষ অ্যারে প্রবেশটি অন্যথায় স্ট্রিং কিনা তা নিশ্চিত করা।

function nums(s) {
    var i, e, r, c, k;
    k = 0;
    s+='x'; // ensure the input does not end with a digit
    r=[''];
    for (i=0;i<s.length;i++) {
        c=s[i];
        if (+c+1) { // if the current character is a digit, append it to the last entry
            r[k] += c;
        }
        else { // otherwise, add a new entry if the last entry is not blank
            k+=!!r[k].length;
            r[k] = '';
        }
    }
    r.length--; // strip the last entry, known to be blank
    return r;
}

0

জাভাস্ক্রিপ্ট, 72

function f(a){
 a+=".",b="",c=[];for(i in a)b=+a[i]+1?b+a[i]:b?(c.push(b),""):b;return c
}

Ungolfed

a+=".",b="",c=[];        //add '.' to input so we dont have to check if it ends in a digit
for(i in a)
    b=+a[i]+1?           //check if digit, add to string if it is
        b+a[i]:         
    b?                   //if it wasnt a digit and b contains digits push it
        (c.push(b),""):  //into the array c and clear b
    b;                   //else give me b back
return c

নমুনা ইনপুট / আউটপুট

console.log(f("abc123def456"));
console.log(f("aitew034snk582:3c"));
console.log(f("as5493tax54\\430-52@g9.fc"));
console.log(f("sasprs]tore\"re\\forz"));

["123", "456"]
["034", "582", "3"]
["5493", "54", "430", "52", "9"]
[] 

JSFiddle


1
আমি এটা পছন্দ করি! আমার নিজের থেকে অনেক সহজ। আপনি প্রতিস্থাপন দ্বারা অন্য 8 টি অক্ষর ড্রপ করতে পারেন if(+a[i]+1)b+=a[i];else if(b)c.push(b),b=""সঙ্গে b=+a[i]+1?b+a[i]:b?(c.push(b),""):b
ডকম্যাক্স

@ ডকম্যাক্স থেক্স, আপনার পরামর্শটি অন্তর্ভুক্ত করার জন্য আমি সম্পাদনা করেছি :)। যে (c.push(b),"")বুদ্ধিমান মনে হয়েছিল, এটি কখনও দেখেনি।
ড্যানি


এটি বৈধ নয়, '' 0 এর জন্য ভুল হয়েছে এবং এটি পরিচালনা করা জাভাস্ক্রিপ্টের কৌতুক। '12 34 56 '
এডিসি 65

0

আর 52

এই ফাংশনটি অক্ষর শ্রেণীর দ্বারা স্ট্রিংগুলিকে বিভক্ত করে (এটি রেজেক্স নয়! :)) শ্রেণিটি হ'ল এন - সংখ্যার অক্ষর এবং পি {এন} অর্থ এই শ্রেণীর অবহেলা। o = T এর অর্থ ফাঁকা সাবস্ট্রিংগুলি বাদ দেওয়া।

x
## [1] "wNEKbS0q7hAXRVCF6I4S" "DpqW50YfaDMURB8micYd" "gwSuYstMGi8H7gDAoHJu"
require(stringi)
stri_split_charclass(x,"\\P{N}",o=T)
## [[1]]
## [1] "0" "7" "6" "4"

## [[2]]
## [1] "50" "8" 

## [[3]]
## [1] "8" "7"

0

পিএইচপি 99

<?php

$a = function($s) {
foreach(str_split($s)as$c)$b[]=is_numeric($c)?$c:".";return array_filter(explode('.',implode($b)));
};

var_dump($a("abc123def456"));
var_dump($a("aitew034snk582:3c"));
var_dump($a("as5493tax54\\430-52@g9.fc"));
var_dump($a("sasprs]tore\"re\\forz"));


আউটপুট

array(2) {
  [3]=>
  string(3) "123"
  [6]=>
  string(3) "456"
}
array(3) {
  [5]=>
  string(3) "034"
  [8]=>
  string(3) "582"
  [9]=>
  string(1) "3"
}
array(5) {
  [2]=>
  string(4) "5493"
  [5]=>
  string(2) "54"
  [6]=>
  string(3) "430"
  [7]=>
  string(2) "52"
  [9]=>
  string(1) "9"
}
array(0) {
}

0

জাভাস্ক্রিপ্ট 88

88 টি অক্ষর যখন এন (এক্স) counting counting গণনা করা হচ্ছে না

function n(x){
y=[],i=0,z=t=''
while(z=x[i++])t=!isNaN(z)?t+z:t&&y.push(t)?'':t
if(t)y.push(t)
return y
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.