তাৎপর্যপূর্ণ হোয়াইটস্পেস


55

আমরা তিনটি অক্ষরের ট্যাব (0x09), নিউলাইন (0x0A) বা স্পেস (0x20) এর মধ্যে হোয়াইটস্পেসকে সংজ্ঞা দিয়েছি ।

এই চ্যালেঞ্জের জন্য, আপনি একই প্রোগ্রামিং ভাষায় দুটি প্রোগ্রাম বা ফাংশন লিখবেন, যা নিম্নলিখিত কাজগুলি সম্পাদন করে:

  1. প্রদত্ত স্ট্রিংয়ে শ্বেতস্পেসের অক্ষরগুলি গণনা করুন। উদাহরণস্বরূপ, ইনপুট

      123 -_-   abc
    def
    

    7 ফেরত আসবে (প্রদত্ত কোনও নতুন লাইন নেই তবে)

  2. একটি প্রদত্ত স্ট্রিংকে একাদে তিনবার হোয়াইটস্পেসে বিভক্ত করুন। যদি স্ট্রিংটি সাদা রঙের স্পেস দিয়ে শুরু হয় বা শেষ হয়, শেষে খালি স্ট্রিংগুলি ফেরত দেওয়া উচিত নয়। উদাহরণস্বরূপ, একই ইনপুট

      123 -_-   abc
    def
    

    ফিরে আসবে ["123", "-_-", "abc", "def"]

উভয় ক্ষেত্রেই আপনি STDIN এর মাধ্যমে ইনপুট নিতে পারেন, কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন আর্গুমেন্ট কোনও ফলাফল প্রত্যাবর্তন করতে পারে বা এটি মুদ্রণ করতে পারে। দ্বিতীয় প্রোগ্রামের জন্য, আপনি STDOUT এ মুদ্রণ চয়ন করতে চাইলে, দয়া করে চারপাশে উদ্ধৃতি না দিয়ে প্রতিটি স্ট্রিং তার নিজস্ব লাইনে মুদ্রণ করুন।

উভয় প্রোগ্রামের জন্য আপনি ধরে নিতে পারেন যে ইনপুটটিতে কেবল প্রিন্টযোগ্য ASCII (0x20 থেকে 0x7E) এবং সাদা স্থান রয়েছে।

এখন ধরা পড়ল:

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

এটি কোড গল্ফ। আপনার স্কোর হ'ল উভয় সমাধানের আকার (বাইটে) এর যোগফল। সর্বনিম্ন স্কোর জয়।

লিডারবোর্ড

নিম্নলিখিত স্ট্যাক স্নিপেট একটি নিয়মিত লিডারবোর্ড এবং ভাষার দ্বারা বিজয়ীদের একটি সংক্ষিপ্ত বিবরণ উভয়ই উত্পন্ন করে। সুতরাং আপনার পছন্দের ভাষা আপনাকে পুরো চ্যালেঞ্জ জিততে না দিলে, কেন দ্বিতীয় তালিকার কোনও স্থান ছিনিয়ে নেওয়ার চেষ্টা করবেন না? লোকেরা কীভাবে বিভিন্ন ভাষায় এই চ্যালেঞ্জ মোকাবেলা করে তা দেখতে আমি খুব আগ্রহী হব!

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

# Language Name, N bytes

আপনার জমা Nদেওয়ার মোট আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

# Ruby, <s>104</s> <s>101</s> 96 bytes

আপনি মোট গণনার আগে পৃথক গণনাও অন্তর্ভুক্ত করতে পারেন, যেমন

# Python 2, 35 + 41 = 76 bytes

শেষ নম্বরটি যেটি মারেনি তা স্নিপেট ব্যবহার করবে।

<script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script><script>site = 'meta.codegolf',postID = 5314,isAnswer = true,QUESTION_ID = 42253;jQuery(function(){var u='https://api.stackexchange.com/2.2/';if(isAnswer)u+='answers/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJeRCD';else u+='questions/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJO6t)';jQuery.get(u,function(b){function d(s){return jQuery('<textarea>').html(s).text()};function r(l){return new RegExp('<pre class="snippet-code-'+l+'\\b[^>]*><code>([\\s\\S]*?)<\\/code><\/pre>')};b=b.items[0].body;var j=r('js').exec(b),c=r('css').exec(b),h=r('html').exec(b);if(c!==null)jQuery('head').append(jQuery('<style>').text(d(c[1])));if (h!==null)jQuery('body').append(d(h[1]));if(j!==null)jQuery('body').append(jQuery('<script>').text(d(j[1])))})})</script>


26
এই লিডারবোর্ডটি দুর্দান্ত!
ডিজিটাল ট্রমা

5
কোনও হোয়াইটস্পেস উত্তর মত
শোনার জন্য

1
@ nyuszika7h সত্যিই এটি হবে, তবে তা যাইহোক বিশেষভাবে ছোট হবে না।
মার্টিন এন্ডার

7
তাৎপর্যপূর্ণ হোয়াইটস্পেস, তাই সুবিধাগুলি বা কোনও কিছুর সাদা অংশ নয় ...
কর্সিকা

উত্তর:


15

পাইথ, 16 + 15 = 31 বাইট

এখানে চেষ্টা করুন

কাউন্টার:

L@,cb)sm!cd)b1 0

যে ব্যক্তি বিচ্ছেদ ঘটায়:

L@,cb)sm!cd)b10

এগুলি প্রতিটি একটি ফাংশন সংজ্ঞায়িত করে y, যা পছন্দসই কাজটি সমাধান করতে স্ট্রিং ইনপুট নেয়।

একটি চরিত্র শেভ করার জন্য পাইথের মডুলার ইনডেক্সিংয়ের বৈশিষ্ট্যটি ব্যবহার করার ধারণার জন্য @ ফ্রাইআমএইটিজিমনকে ধন্যবাদ জানাই।

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

L@,cb)sm!cd)b1 0y++"abc def"b"gh ij k"
L@,cb)sm!cd)b10y++"abc def"b"gh ij k"

ব্যাখ্যা:

L                  define a function, y, which takes one input, b.
 @                 Index into
  ,                2-tuple of
   cb)             b.split()                          (solution to splitter)
   s               sum over                           (solution to counter)
    m              map, with input d, to
     !cd)          logical negation of d.split()      (empty list is falsy)
     b             over b.
                   Index is either:
   10
   1
                   Indexing is modulo the length of the list in Pyth.
 0                 In one case, a 0 with a leading space is outside the function.
                   Leading space suppresses print, so the 0 is invisible.

52

পাইথন, 54 + 56 = 110 বাইট

কাউন্টার:

m=lambda x:sum(y.isspace()for y in x)
+1
0<9or x.split()

যে ব্যক্তি বিচ্ছেদ ঘটায়:

m=lambda x:sum(y.isspace()for y in x)+10<9or x.split()

কাউন্টারটির জন্য, আমরা সত্যটি ব্যবহার করি যে পাইথন একটি লাইনে কেবল একটি অভিব্যক্তি থাকার সাথে ঠিক আছে। এটা তোলে আপ বিভক্ত প্রয়োজন +1এবং 0<9or x.split()একটি থামাতে NameErrorনিক্ষিপ্ত হওয়া থেকে, যেমন 0<9হচ্ছে Trueপ্রতিরোধ x.split()সংক্ষিপ্ত circuiting কারণে মূল্যায়ন হওয়া থেকে।

বিভাজনের জন্য, যেহেতু শ্বেত স্পেসের সংখ্যা সর্বদা ননজেটিভ, sum(y.isspace()for y in x)+10<9সর্বদা Falseএবং বিভাজন ফাংশনটি কার্যকর হয়।


বিকল্প 1, 59 + 60 = 119 বাইট

কাউন্টার:

m=lambda x:[x.split(),sum(y.isspace()for y in x)][min([1])]

যে ব্যক্তি বিচ্ছেদ ঘটায়:

m=lambda x:[x.split(),sum(y.isspace()for y in x)][m in([1])]

উভয়ই গণনা এবং বিভাজনের ফলাফলগুলি একটি দ্বি-উপাদান তালিকায় সঞ্চিত হয়। তালিকাটি উভয় দ্বারা সূচিযুক্ত করা হয় min([1]), সর্বনিম্ন এক-এলিমেন্ট তালিকার ন্যূনতম ফিরিয়ে দেওয়া 1, বা m in([1])যা অন্তর্ভুক্ত না হিসাবে ফিরে আসে False(সমতুল্য 0) ।m[1]


বিকল্প 2, 67 + 69 = 136 বাইট

কাউন্টার:

ted=1;s=lambda x:[x.split(),sum(y.isspace()for y in x)][not s or ted]

যে ব্যক্তি বিচ্ছেদ ঘটায়:

ted=1;s=lambda x:[x.split(),sum(y.isspace()for y in x)][not sorted]

উপরের মতো, গণনা এবং বিভাজন উভয়ের ফলাফল দুটি-উপাদান তালিকায় সঞ্চিত হয়। sortedএকটি বিল্ট-ইন ফাংশন যা truthy মান, তাই হয় not sortedআয় False(সমতূল্য 0)। কারণ not s or tedযেহেতু sএকটি ফাংশন এবং সত্যবাদীও not sহয় Falseএবং ted = 1ফিরে আসে।


বিকল্প 3, 59 + 60 = 119 বাইট

কাউন্টার:

def f(s):a=s.split();a1=len(s)-len((s*0).join(a));return a1

যে ব্যক্তি বিচ্ছেদ ঘটায়:

def f(s):a=s.split();a1=len(s)-len((s*0).join(a));return a
1

এটি এমন একটি ফাংশন যেখানে স্প্লিটারের ফলাফল ভেরিয়েবলে সংরক্ষণ করা হয় aএবং কাউন্টারটির ফলাফল ভেরিয়েবলে সংরক্ষণ করা হয় a1। আগের মতো পাইথনও এক্ষেত্রে একটি লাইনে কেবল প্রকাশের সাথে ভাল 1। বিভক্ত করা a1ফাংশন থেকে কী ফিরে আসবে তা নির্ধারণ করে।


22
আমি আবার +1 করতাম not sorted
মার্টিন ইন্ডার

নিউলাইনটি কি এর মধ্যে +1এবং 0<9or x.split()প্রয়োজনীয়?
isaacg

1
@ আইস্যাক আপনি যদি ব্যতিক্রম সম্পর্কে চিন্তা করেন তবে হ্যাঁ
স্পেস 3000

আপনি 3 টি বাইট দিয়ে শেভ করতে পারেন m=lambda x:sum(y.isspace()for y in x)+00and x.split()এবং m=lambda x:sum(y.isspace()for y in x)+0;0and x.split()(সেমিকোলনটি অবশ্যই একটি নতুন লাইন তৈরি করে)
সিজেফুরে

@ সিজেফুরে আমি মনে করি না যে প্রথম কোনও সাদা অংশ নেই যদি একটি স্প্লিটার হিসাবে কাজ করে
Sp3000

16

জাভা 8, 239 + 240 = 479

শ্বেত স্পেস গণনা করুন (পূর্ণসংখ্যা ফেরত)

Object f(String s){String r=new String(new char[]{92,'s'}),e=new String();int intx=0;intx=1;return intx>0?s.chars().filter(c->c==9|c==10|c==32).count():java.util.Arrays.stream(s.split(r)).map(t->t.replaceAll(r,e)).filter(t->t.length()>0);}

সাদা স্পেসে বিভক্ত করুন (স্ট্রিম <স্ট্রিং> রিটার্ন দেয়)

Object f(String s){String r=new String(new char[]{92,'s'}),e=new String();int intx=0;int x=1;return intx>0?s.chars().filter(c->c==9|c==10|c==32).count():java.util.Arrays.stream(s.split(r)).map(t->t.replaceAll(r,e)).filter(t->t.length()>0);}

ব্যাখ্যা:

Object f(String s){
    String r=new String(new char[]{92,'s'}),e=new String();  // init regex'es

    int intx=0;     // critical variable

    intx=1;         // change intx to 1
              OR
    int x=1;        // new, unused variable

    return intx>0 ? // test variable to decide what to do
      s.chars().filter(c->c==9|c==10|c==32).count() :
      java.util.Arrays.stream(s.split(r)).map(t->t.replaceAll(r,e)).filter(t->t.length()>0);
}

আমার কাছে এটি উজ্জ্বল দেখাচ্ছে। +1
রডল্ফো ডায়াস

খুব ভাল, জাভা কোড গল্ফিংয়ের জন্য সবচেয়ে খারাপ ভাষা হতে হবে তা বিবেচনা করে ।
tbodt

13

হোয়াইটস্পেস, 75 + 153 = 228

স্পেস, ট্যাব এবং নিউলাইনগুলি যথাক্রমে এসটিএল দ্বারা প্রতিস্থাপিত হয়েছে এবং সুসংগঠনের জন্য ভাঁজ হয়েছে। এর সাথে একটি উপযুক্ত হোয়াইটস্পেস ফাইলে রূপান্তর করুন tr -d \\n | sed 'y/STL/ \t\n/'

বিপরীত

SSSLLSSLSSSTSSSSSLSLSSLSTLTSTTTSLSLTSSLTSSTLTTLSSSTLTSSSLSLLLSSSLS
LLSLLTLST

যে ব্যক্তি বিচ্ছেদ ঘটায়

SSSTLSSSLTTSLSSTLSSSLSLSTLTSTTTSLSSLSLTSLSSSTSSSSTLTSSTLTTTTLSSSTL
SLSTTSLSLSLLSSTTLSSSTSTSLSSSTLTTTLTSTSLTLSSSSSTLSSSLTTSLSSTSLLSLTL
LSSSLTLSSLSLTLLSSLLLL

2
আমি ভাবছিলাম যে এটি কতটা সময় নেবে ...;)
মার্টিন এন্ডার

4
সাদা স্থানের সাথে এটি দুটি পৃথক কোড গল্ফিং চ্যালেঞ্জ হয়ে ওঠে becomes
tbodt

13

মার্বেলস, 103 + 92 = 195

কাউন্টার:

@0      @200@1@3
]]&1]]3W
  \\!!?001
        &0  >W@1
>W    @2/\  /\@3+A
00&0      &1
          Dp
@0//

যে ব্যক্তি বিচ্ছেদ ঘটায়:

@0  @200@1    @3
]]&1]]  3W    \\
  !!    ?001&0
>W@1>W@2
/\  /\@3+A00&0
          &1Dp@0
//

এই প্রোগ্রামগুলি এখানে পরীক্ষা করুন। নলাকার বোর্ড, গ্রন্থাগারগুলি অন্তর্ভুক্ত করুন এবং ফাঁকা ঘরগুলির জন্য সমস্ত স্থান অবশ্যই পরীক্ষা করা উচিত।

ইনপুট এবং আউটপুট STDIN / STDOUT এর মাধ্যমে।

ব্যাখ্যা

কাউন্টার:

কাউন্টার উত্স

নীল পথটি ইনপুট গ্রহণ করে। চরিত্রটি যদি একটি সাদা জায়গা হয় (0x21 এর চেয়ে কম মূল্য), তবে কালো পথটি নেওয়া হয়, যা বেগুনি পথের সাথে সিঙ্ক্রোনাইজ হয়।

বেগুনি পথটি &1প্রতিটি সময় ব্ল্যাক পাথ নেওয়ার সময় সিংক্রোনাইজারে সজ্জিত একটি মার্বেলকে কেবল বাড়িয়ে তোলে ।

একবার আর কোনও ইনপুট না পরে, লাল পথটি নেওয়া হবে, সাদা বর্ণের সংখ্যা মুদ্রণ করে প্রস্থান করা হবে।

যে ব্যক্তি বিচ্ছেদ ঘটায়:

বিভক্ত উত্স

প্রোগ্রামটি নীল পথ দিয়ে শুরু হয়, যা কোনও শ্বেতস্থান অক্ষর না পাওয়া পর্যন্ত লুপ করে।

একবার কোনও শ্বেতস্থান অক্ষর পুনরুদ্ধার করা হলে, কালো পথটি নেওয়া হবে, যা এই চরিত্রটি প্রিন্ট করে এবং কার্যকরভাবে সবুজ পথে নিয়ে যায়, যা একটি সাদা জায়গা-চরিত্র না পাওয়া পর্যন্ত লুপ করে এবং মুদ্রণ করে। মৃত্যুদন্ড কার্যকর করা পরে রক্তবর্ণের পথে অবিরত থাকে যা এতে থাকে 3Wবা একটি ত্রি-পথ বিভাজক।

বাম শাখাটি কার্যকরভাবে নীল পথে চালিত করে (এবং কোনও শ্বেতস্থান অক্ষর না পাওয়া পর্যন্ত সাদা স্থান বাতিল করা হয়))

মধ্যম শাখা সঙ্গে 0 ইনপুট কপি সেট করে ?0(মধ্যে একটি র্যান্ডম সংখ্যা উৎপন্ন 0এবং 0), এবং যোগ করে 10 ( 0x0A= সম্পর্কে newline), যা তারপর outputted করা হয়।

সঠিক পথটি বাতিল করা হয়েছে।


দেখে মনে হচ্ছে স্প্লিটারটি শেষ হয় না যদি সাদা স্থানের পেছন পেছনে থাকে।
মার্টিন এন্ডার

12

সিজেম, 26 + 27 = 53 59 61 73 77 বাইট

বিপরীত

'!q_,\SN9c++SerS%:Qs,-QN*?

যে ব্যক্তি বিচ্ছেদ ঘটায়

' !q_,\SN9c++SerS%:Qs,-QN*?

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

ধারণাটি সহজ, উভয় সংখ্যক শ্বেতস্পেস গণনা করুন এবং সাদা পর্বের একটানা রানগুলিতে স্ট্রিংটি বিভক্ত করুন। তারপর তাদের মধ্যে একজন নিম্নলিখিত সত্য যে এর উপর ভিত্তি করে পছন্দ করে ' !মানে not of space character, যা falsy থাকাকালীন '!হয় !চরিত্র, যা truthy হয়।

প্রসারিত কোড:

'! / ' !                              "Get truthy or falsy value";
        q_                            "Read the input, make a copy";
          ,\                          "Take the length of the copy and swap";
            SN9c++                    "Get a string comprised of all Whitespaces";
                  Ser                 "Replace any occurrence of any character of"
                                      "the above string with space";
                     S%               "Split on one or more runs of space";
                       :Qs,           "Store this in Q, flatten to a string and take length";
                           -          "Subtract from total length to get count";
                            QN*       "Put the splitted array on stack and join newline";
                               ?      "Base on the truthy or falsy value, pick one to print";

ইনপুটটি STDIN থেকে এবং আউটপুটটি STDOUT এ

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


10

গণিত, 44 + 43 = 87 97 বাইট

আমি ভেবেছিলাম মিশ্রণটিতে আমি আরও একটি ভাষা যুক্ত করব।

কাউন্টার:

StringCount[#,Whitespace]+0 1StringSpli t@#&

যে ব্যক্তি বিচ্ছেদ ঘটায়:

String Count[#,Whitespace]+01StringSplit@#&

এটি ম্যাথমেটিকার বৈশিষ্ট্যটি ব্যবহার করে যে স্পেস বিভাজনটি গুণণের মতো। এবং যে 0 দিয়ে কোন কিছুর গুণ করা সর্বদা 0 হয় এবং কোনও কিছুর সাথে 0 যুক্ত করা সর্বদা আদর্শবান।

কাউন্টার, আমরা প্রথম হোয়াইটস্পেস গণনা, এবং আমরা যোগ 0*1*StringSpli*t@#StringSpliএবং tসংজ্ঞায়িত করা হয় নি, তবে ম্যাথমেটিকা ​​প্রতীকী গণনা ব্যবহার করে, সুতরাং এটি কেবল তাদের অজানা পরিবর্তনশীল এবং ফাংশন হিসাবে বিবেচনা করে। আদর্শ আদর্শ 1*(ঠিক যেমন 0+), 0*এটিকে শূন্যে পরিণত করে। এটি StringSplitদুটি ভেরিয়েবলের মধ্যে পৃথক করা প্রয়োজন , কারণ 0একটি তালিকা বার বার স্কেলার-ভেক্টর গুণ হিসাবে বিবেচনা করা হয় যার ফলশ্রুতি শূন্যগুলির একটি ভেক্টর (তালিকা) হয়।

বিভাজনের জন্য, আমি এটি ব্যবহার করি Countযা বিদ্যমান রয়েছে তবে স্ট্রিংগুলিতে সন্ধান করে না। এটি প্যাটার্নের সাথে মিলে সমস্ত উপ এক্সপ্রেশন গণনা করার চেষ্টা করে তবে Whitespaceএটি এমন একটি প্যাটার্ন যা কেবল স্ট্রিং সামগ্রীতে প্রযোজ্য। সুতরাং Countসর্বদা ফিরে আসবে 0, যা Stringবিলুপ্ত হয়ে যায়। এর দ্বারা বিভক্ত অ্যারের গুণটি 01 = 1আবার আদর্শবান।


10

রুবি, 107 91 বাইট

বিভাজন (46 বাইট)

p
p=gets(p).split
puts p||$_.size-pp.join.size

কাউন্টার (45 বাইট)

pp=gets(p).split
puts p||$_.size-pp.join.size

pএকটি পূর্বনির্ধারিত পদ্ধতি যা কোনও যুক্তি ছাড়াই কেবল ফিরে আসে nil। আমরা এটি বিভিন্ন উপায়ে ব্যবহার করি। বিভাজনে, প্রাথমিকটি pকিছুই করে না। gets(p)স্ট্যান্ডার্ড ইনপুট থেকে সমস্ত কিছু পড়ে, যেহেতু ডিলিমিটারটি শূন্য। আমরা pএটিতে অন্তর্নির্মিত বিভক্ত পদ্ধতিটি কল করি এবং ফলাফলটি বরাদ্দ করি , এখন যখন এটি যুক্তি না দেওয়া হয় তখন এটি একটি পরিবর্তনশীল হিসাবে বিভক্ত হবে। puts p||...শর্ট সার্কিট এবং pভেরিয়েবলের প্রতিটি উপাদানকে তার নিজস্ব লাইনে মুদ্রণ করে ।

কাউন্টারে, আমরা প্রথম নিউলাইনটি মুছি যাতে ppপরিবর্তে স্প্লিট অ্যারে নির্ধারিত হয় । যেহেতু আমরা কোনও দায়িত্ব অর্পণ করি নি p, এটি এখনও শূন্য-প্রত্যাবর্তন পদ্ধতি তাই দ্বিতীয় ভাগটি ||মূল্যায়ন করে পাস করা হয় puts$_এর ফলাফল যুক্ত একটি যাদু ভেরিয়েবল gets, সুতরাং মোট সাদা পরিমাণের পরিমাণটি হ'ল বিয়োগের আকার হ'ল শ্বেতস্পেসের অক্ষরগুলিতে, যা ppএতে থাকে। আমার মনে হচ্ছে গণনা করার একটি ছোট্ট উপায় হওয়া উচিত, তবে আমি একটি খুঁজে পাচ্ছি না এবং যে কোনও হারে কাউন্টারে বিভক্ত অ্যারে ব্যবহার করা মজাদার।


7

পাইথন, 169

পাইথনে এটি করা প্রায় খুব সহজ!

কাউন্টার:

def x(s):
 def y(s):
  return sum(map(str.isspace,s))
  return s.split()
 return y(s)

যে ব্যক্তি বিচ্ছেদ ঘটায়:

def x(s):
 def y(s):
  return sum(map(str.isspace,s))
 return s.split()
 return y(s)

এগুলি কেবল একটি জায়গাতেই পৃথক, এবং আমি কোনও নম্বর বা একটি পরিবর্তনশীল নামটি অর্ধে বিভক্ত করার মতো কোনও কৌশল করি না :)


6

সি, 138 + 136 = 274

প্রতিটি ক্ষেত্রে, কোডটি এমন একটি প্রোগ্রাম যা হুবহু একটি কমান্ড-লাইন আর্গুমেন্ট গ্রহণ করে এবং ফলাফলটি স্টাডাউটে ছাপায়। \tএকটি ট্যাব অক্ষর দিয়ে প্রতিস্থাপন করা উচিত। আপনি যদি ট্যাবস এবং নিউলাইনগুলি যুক্ত একটি যুক্তিটি পাস করতে চান তবে কীভাবে তা নির্ধারণ করা আপনার কাজ;)।

গণনাকারী

#define strtok strpbrk
h=' \t\n';main(c,v,n)char**v;{for(n=- -c-1;v[n]=strtok(1[v],&h);n[v]++)v[!n]=0,puts(*v),c++;n*='d%';printf(&n,c-2);}

বিদারক

#define strtokstrpbrk
h=' \t\n';main(c,v,n)char**v;{for(n=--c-1;v[n]=strtok(1[v],&h);n[v]++)v[!n]=0,puts(*v),c++;n*='d%';printf(&n,c-2);}

6

জাভাস্ক্রিপ্ট, 95 + 96 = 191 বাইট

কাউন্টার:

c=(a,v)=>{v
v=a=a.split(RegExp(String.fromCharCode(92,115)));return v?a.length-1:a.filter(j=>j)}

যে ব্যক্তি বিচ্ছেদ ঘটায়:

s=(a,v)=>{vv=a=a.split(RegExp(String.fromCharCode(92,115)));return v?a.length-1:a.filter(j=>!!j)}

Ungolfed:

s=(a,v)=>{

    v  // this `v` is ignored, or combined with the next line to make `vv`

    // split array and store it in `a` and `v` (or alternatively `vv`)
    v = a = a.split(RegExp(String.fromCharCode(92,115)));

    return v?
            a.length-1        // return number of whitespace chars
            :
            a.filter(j=>j)    // return array without empty strings
    }

RegExp(String.fromCharCode(92,115)লাইন হোয়াইটস্পেস-ম্যাচিং Regex সৃষ্টি/\s/ Regex বা স্ট্রিং লিটারেল ছাড়া।

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


বিকল্প: জাভাস্ক্রিপ্ট, 250 বাইট

আমার আরও একটি সমাধান রয়েছে যা ব্রেভিটির জন্য কোনও পুরষ্কার জিততে পারে না, তবে আমি ভেবেছিলাম জাভাস্ক্রিপ্টের স্বয়ংক্রিয় অর্ধকোলন সন্নিবেশ আচরণটি অপব্যবহার করা একটি আকর্ষণীয় চ্যালেঞ্জ was

কাউন্টার:

c=a=>{a=a.split(RegExp(String.fromCharCode(92,115)));x:for(i=2;i--;)for(o=i?a.length-1:a.filter(j=>j);1;){break x}return o}

যে ব্যক্তি বিচ্ছেদ ঘটায়:

s=a=>{a=a.split(RegExp(String.fromCharCode(92,115)));x:for(i=2;i--;)for(o=i?a.length-1:a.filter(j=>j);1;){break
x}return o}

অবরুদ্ধ কাউন্টার:

s=a=>{
    a = a.split(
            RegExp(String.fromCharCode(92,115))   // split input on whitespace regex /\s/
        );  
    x:                             // x is a label for the outer loop
    for(i=2;i--;)                  // run this outer loop twice
        for(o=i?                   // if this is the first outer loop pass, 
               a.length-1          //    set `o` to number of whitespaces
               :                   // else, on second outer loop pass,
               a.filter(j=>j);     //    set `o` to split input (w/o empty strings)
            1;                     // 1 is truthy; run inner loop forever
            ) {
                break x;           // break out of outer loop
            }
    return o;                      // return `o`
}

বিভাজনটি রেখাটি বাদে ঠিক একই রকম:

break x;

এখন

break
x;

জাভাস্ক্রিপ্টের স্বয়ংক্রিয় সেমিকোলন সন্নিবেশ সাধারণত লাইন বিরতি ছাড়াই বোঝা যায় তবে তা মাল্টি-লাইন স্টেটমেন্টগুলি প্রথম দিকে শেষ করে না তবে এটি লাইন বিরতি সহ্য করে না return, continueবা পরে break। সুতরাং, লাইনটি কেবল যেমন পাঠ করা হয় break, যা কেবল বাইরের লুপটি ভেঙে ফেলার পরিবর্তে কেবল অভ্যন্তরীণ লুপটি ভেঙে দেয়। "দ্বিতীয়-পাস" আচরণটি o = a.filter(j=>j)তখন সম্পাদন করা হয় (বনাম কাউন্টারে এড়ানো যায় না), কারণ বাইরের লুপটিকে দ্বিতীয় পাস দেওয়া হয়।


কি !!xস্বয়ংক্রিয় বিভিন্ন Boolরূপান্তর?
l4m2

@ l4m2 এটি না! আমি এটিকে সরিয়ে দিয়েছি, যেহেতু filterঅটো-বুলস তার কলব্যাককে একই নিয়মে ফিরে আসে !!। ধন্যবাদ!
এপসিলাররা

5

পাইথন, 228 198 182 166 146 145 বাইট

কাউন্টার ( 72 বাইট ):

ior1=0
w=lambda i:i.split()if ior1 else sum(ord(c)in(9,10,32)for c in i)

বিভাজন ( 73 বাইট ):

ior1=0
w=lambda i:i.split()if i or 1else sum(ord(c)in(9,10,32)for c in i)

ior1এটি একটি মিথ্যা পরিবর্তনশীল, তবে i or 1সত্য y এটাই মূল কৌশল।


iবিভক্তকরণের জন্য খালি স্ট্রিং হলে এই ব্রেক হয় না? এটিকে পরিবর্তন iorbকরে স্থির করা যায় ior1যা আপনাকে 1এবং এর মধ্যে অক্ষরটি সংরক্ষণ করতে দেয় else
isaacg

@ আইসএইচজি আমি পুরোপুরি ভুলে গেছি যে আপনার পরিবর্তনশীল নামে সংখ্যা থাকতে পারে! আপনাকে ধন্যবাদ <3
আন্ডারগ্রাউন্ডোমোরিয়েল

5

বেফঞ্জ 98, 61 + 59 = 120

কাউন্টার:

~:'!-0`#v_ >$1+#@ #. #
 @#,#$ #<_v#`0-!':~ # .#
  ,#$ #+55<v

যে ব্যক্তি বিচ্ছেদ ঘটায়:

~:'!-0`#v_ >$1+#@ #.#
 @#, #$#<_v#`0-!':~ #.#
  , #$#+55<v

4

বাশ, 75 + 79 = 154 বাইট

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

যে ব্যক্তি বিচ্ছেদ ঘটায়:

echo $((`echo $1|wc -w`+${#1}-$(\)\)\)
for a in $1;do echo $a;done|wc -c)))

কাউন্টার:

echo $((`echo $1|wc -w`+${#1}-$(\ )\ )\ )
for a in $1;do echo $a;done
|wc -c)))

ইনপুট হ'ল কমান্ডলাইন আর্গুমেন্টের মাধ্যমে, আউটপুটটি স্টডআউটের মাধ্যমে হয়।

এটি বাশ ত্রুটির আচরণের উপর নির্ভর করে বলে ব্যবহারকারী স্টাডারকে উপেক্ষা করবেন বলে আশা করা হচ্ছে।

উদাহরণ রান (একটি নতুন লাইন এবং একাধিক স্বতন্ত্র জায়গা সহ ইনপুট দেখাচ্ছে):

# bash counter.sh "abc def
gh   ij k" 2>/dev/null
6
# bash splitter.sh "abc def
gh   ij k" 2>/dev/null
abc
def
gh
ij
k

4

রুবি, 114 + 116 107 + 109 = 216 বাইট

এটি হিস্টোক্র্যাট দ্বারা রুবি সমাধানের সাথে প্রতিযোগিতা করতে পারে না, তবে আমি ভেবেছিলাম এটি যেভাবেই করা উচিত।

আমি $zজন্য nilএবং nil.to_sজন্য ব্যবহার করেছিString.new

আমি ইনপুটটির শেষে যে অতিরিক্ত শ্বেতস্থান চরিত্রটি যুক্ত করব তা হ'ল অ্যারের সাথে শেষ শব্দটি যুক্ত করতে বাধ্য করা ( r) - একটি শব্দ কেবল অ্যারের শেষে যুক্ত করা হয় যখন একটি শ্বেত স্পেস অক্ষর একটি অ-হোয়াইটস্পেস অক্ষর অনুসরণ করে। বিকল্পটি ব্লকের r<<w if wপরে আরেকটি যোগ করছিল each_byte

গণনাকারী

->s{r=[]
n=-1
w=$z
(s+9.chr).each_byte{|b|if b<33
r<<w if w
w=$z
n+=1
else
w=w.to_s+b.chr
end}
$zorr ?r:n}

বিদারক

->s{r=[]
n=-1
w=$z
(s+9.chr).each_byte{|b|if b<33
r<<w if w
w=$z
n+=1
else
w=w.to_s+b.chr
end}
$z or r ?r:n}

আহ, আমি সে সম্পর্কে রায় সম্পর্কে নিশ্চিত ছিলাম না। আমি এটি পরিবর্তন করতে পেরে টেরিনারি অপারেটরের পরিবর্তে - অন্য কোনও স্ট্রিং লিটারাল ব্যবহার করতে পারি না।
আলেকজানবার্ড

3

হাস্কেল , 53 + 55 = 108 36 + 38 = 74 বাইট

বিপরীত

f=do
 pure(length.filter(<'!'))words

যে ব্যক্তি বিচ্ছেদ ঘটায়

f=do
 pure(length.filter(<'!'))
 words

এই সমাধানটি হ্যাস্কেল ফাংশনগুলিতে মোনাড টাইপ শ্রেণীর একটি উদাহরণ এবং এইভাবে ড-নোটেশনে monadic ক্রিয়া হিসাবে ব্যবহার করা যেতে পারে তা ব্যবহার করে।

প্রথম ক্ষেত্রে ড-ব্লকের ফলাফলের কার্যকারিতাটি প্রথম যুক্তি pure(যা মূলত হয়const ফাংশনের ধরণের জন্য হয়), এটি কাউন্টারকে চূড়ান্ত ফলাফল দেয় এবং স্প্লিটারটি বাতিল করা হয়।

দ্বিতীয় ক্ষেত্রে pureকেবল একটি একক যুক্তিতে প্রয়োগ করা হয়, এটি একটি ফাংশন করে যা অন্য ফাংশন (কাউন্টার) ফেরত দেয়। তবে ফলাফলটি কখনও ব্যবহৃত হয় না এবং এভাবে বাতিল করা হয়। চূড়ান্ত ফলাফলটি ডো-ব্লকের দ্বিতীয় লাইন, বিভাজন l


চমৎকার পন্থা! [' ','\t','\n']সংক্ষিপ্ত করা যেতে পারে " \t\n"
লাইকোনি

@ লাইকোনি বর্ণনায় কেবল অক্ষরকে অক্ষরে অক্ষরে অক্ষরে অক্ষরে রেইগেক্স অক্ষর দেওয়া হয়
সেরাকুসা

2
যেহেতু চ্যালেঞ্জটির জন্য আপনাকে বেশিরভাগ নিয়ন্ত্রণের অক্ষরগুলি পরিচালনা করতে হয় না, আপনি (<'!')হোয়াইটস্পেসের জন্য পরীক্ষা করে এটি সংক্ষিপ্ত করতে পারেন ।
আর্জন জোহানসেন

2

জাভা 8, 187 + 188 = 375

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

সাদা স্থান গণনা করুন , 187 (রিটার্ন int):

Object f(String s){String r=new String(new char[]{92,115});int a=0;return a--+a>0?s.chars().filter(c->c>8&c<11|c==32).count():java.util.Arrays.stream(s.split(r)).filter(t->t.length()>0);}

হোয়াইটস্পেসে বিভক্ত করুন , 188 (রিটার্ন Stream<String>):

Object f(String s){String r=new String(new char[]{92,115});int a=0;return a- -+a>0?s.chars().filter(c->c>8&c<11|c==32).count():java.util.Arrays.stream(s.split(r)).filter(t->t.length()>0);}

2

জে, 48 + 49 = 97 চর

একটি যুক্তি গ্রহণ এবং ফিরে দুটি ফাংশন। একই-তবে-হোয়াইটস্পেস নিয়মকে হারাতে আমি যে কৃপণতম উপায়টি ভাবতে পারি তা ব্যবহার করেছি, সুতরাং আশেপাশে আরও চৌকস পথ খুঁজে বের করে সম্ভবত অক্ষরগুলি সংরক্ষণ করা যায়।

(aa[aa=.+/@a=.a:-.~(e.u:)&9 10 32 :(<;._1~1,}.))      NB. count
(a a[aa=.+/@a=.a:-.~(e.u:)&9 10 32 :(<;._1~1,}.))     NB. split

আমরা ক্রিয়াটি aদুটি যুক্ত পদক্ষেপের সাথে সংজ্ঞায়িত করি , এটি একটি যুক্তির সাথে বা দুটি দিয়ে ব্যবহৃত হয় তার উপর নির্ভর করে। একটি যুক্তি সহ, এটি হ'ল (e.u:)&9 10 32, যা প্রতিটি চরিত্রের শ্বেতক্ষেত্র কিনা তা যাচাই করে। দুটি আর্গুমেন্টের সাহায্যে এটি হ'ল a:-.~(<;._1~1,}.)এটি ডানদিকে একটি বুলিয়ান ভেক্টর নেয় এবং সেই অবস্থানগুলিতে বাম আর্গুমেন্টটি কেটে দেয় এবং কোনও ফাঁকা কাটা ফেলে দেয় a:-.~

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

a aকাজ করার কারণটি হ'ল জে যখন দেখেন তখন (f g)yএটি (f g)একটি হুক বিবেচনা করে এবং এটির মতো মূল্যায়ন করে y f (g y)। এই ক্ষেত্রে, উপরে যে fডায়াডিক aকাটিয়া কাজ করে এবং gএটি a[aa, যা থেকে যোগফলটি গণনা করে aa, এটিকে নিক্ষেপ করে, এবং aআবার (মোনাডিক) গণনা করে ।

REPL এ:

   (aa[aa=.+/@a=.a:-.~e.&(u:9 10 32) :(<;._1~1,}.))   '  123',TAB,'-_-   abc',LF,'def'
7
   (a a[aa=.+/@a=.a:-.~e.&(u:9 10 32) :(<;._1~1,}.))  '  123',TAB,'-_-   abc',LF,'def'
+---+---+---+---+
|123|-_-|abc|def|
+---+---+---+---+

2

বাশ, 54 + 50 = 104 বাইট

বিপরীত

a=$IFS
IFS=
cat()(tr -cd $a|wc -c)
printf %s \\n$1|cat

যে ব্যক্তি বিচ্ছেদ ঘটায়

a=$IFSIFS=ca
t()(tr-cd$a|wc-c)
printf %s\\n $1|cat

1

পার্ল, 37 + 38 = 75

কাউন্টার :

sub f{($_)=@_;(y/   - //,[split])[0.1]}

বিভাজন :

sub f{($_)=@_;(y/   - //,[split])[0 .1]}

1

পার্ল 6, 31 + 32 = 63 বাইট

বিপরীত

{?^1??.words!!+grep 33>*,.ords}

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

?^1পার্স করা হয়েছে ?^ 1যা বুলিয়ান নেগেশন অপারেটরটিকে 1 এ প্রয়োগ করে যার ফলস্বরূপ False

যে ব্যক্তি বিচ্ছেদ ঘটায়

{? ^1??.words!!+grep 33>*,.ords}

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

? ^10..0 ব্যাপ্তিটিকে বুলে রূপান্তর করে, ফলস্বরূপ True


0

পাইথন 2, 98

বিভাজন (49)

তালিকায় টোকেনগুলি ফেরত দেয়।

f=lambda s:[sum(map(str.isspace,s))]and s.split()

গণনা (49)

স্থান অক্ষরের সংখ্যা সমেত দৈর্ঘ্যের একটি তালিকা ফেরত দেয়। এটি সম্ভবত রানটাইম ত্রুটির কারণ fহতে পারে তবে কোডটি কার্যকর করার পরে ফাংশনটি ব্যবহার করা যেতে পারে।

f=lambda s:[sum(map(str.isspace,s))]
ands.split()

0

সি (জিসিসি) , 88 + 89 = 177 বাইট

যে ব্যক্তি বিচ্ছেদ ঘটায়

i,n,x,c;f(char*s){x=n=i=0;for(x+++n;c=*s++;c*x&&putchar(c))i=c<33?n++,c=i*10,0:1;x=n-1;}

যে ব্যক্তি বিচ্ছেদ ঘটায়

বিপরীত

i,n,x,c;f(char*s){x=n=i=0;for(x+ ++n;c=*s++;c*x&&putchar(c))i=c<33?n++,c=i*10,0:1;x=n-1;}

বিপরীত

ভগ্নস্বাস্থ্য শিঠ্ট

ফাংশন আর্গুমেন্ট হিসাবে ইনপুট নেয়। গণনা ফাংশন শ্বেত স্পেসের সংখ্যা প্রদান করে। বিভাজক ফাংশনটি তার আউটপুটটির জন্য STDOUT ব্যবহার করে (তবে ঘটনাক্রমে হোয়াইটস্পেস বিয়োগের সংখ্যাও প্রদান করে)।

i,                      Flag signalling whether we are inside a word.
n,                      Number of whitespace encountered.
x,                      Flag signalling whether or not we should output the words.
c;                      Current character.
f(char*s){              Take input string as an argument.
x=n=i=0;for(            Initialise everything and start loop.
x+++n;                  SPLITTER ONLY: Interpreted as x++ +n, meaning x is set to 1 and n stays 0.
x+ ++n;                 COUNTER ONLY: Inverse of the above. Sets n to 1, and x stays 0.
c=*s++;                 Sets c to current char and increment string pointer, end loop if end of string.
c*x&&putchar(c))        Only output c if x is 1 and c is non-zero, which only happens if we left a word.
i=c<33?                 Since input contains only printable ASCII or whitespace, anything below 33 is whitespace.
       n++,             ...if that is the case, increment the whitespace counter (n)
           c=i*10,      ...and set c to newline (10), but only if we just left a word (if i is 1)
                  0:    ...and set i to 0.
                    1;  If not a whitespace, set i to 1, signalling we are inside a word.
x=n-1;}                 Implicitly returns n-1, which is the number of whitespaces if we are in the counter function.

0

Zsh , 35 + 35 = 70 বাইট

  • প্রোগ্রাম / ফাংশনে কোনও স্ট্রিং বা রেজেক্স লিটারাল থাকতে পারে

[^$IFS]যোগ্যতা অর্জন করবে কিনা তা সম্পর্কে আমি নিশ্চিত নই , কারণ এটি প্যাটার্ন ম্যাচিংয়ে ব্যবহৃত হয়। এটি নিষিদ্ধ হওয়ার ক্ষেত্রে এখানে একটি 45 + 45 সমাধান রয়েছে।


স্প্লিট:

:<<<${#1//[^$IFS]} 
:
<<<${(F)${=1}}

গণনা:

:
<<<${#1//[^$IFS]}
:<<<${(F)${=1}}

:Builtin করার equivilent হয়true , আমরা একটি মন্তব্য ও / dev / নাল (যেহেতু মন্তব্য অননুমোদিত হয়) এটি অবাঞ্ছিত সম্প্রসারণ বংশীধ্বনিতুল্য দ্বারা মধ্যে কিছু হিসাবে এটি ব্যবহার।

সাদা অংশে বিভাজনের জন্য জেডশির একটি অন্তর্নির্মিত বিষয় রয়েছে ${=var}। এটি উভয়কেই কার্যকর করা এবং আমরা যা চাই না তা ত্যাগ করার ব্যতীত অন্য কোনও ধরণের যৌক্তিক সমন্বয় করা শক্ত করে তোলে।

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.