अल्फ़ान्यूमेरिक संतुलन


15

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

इनपुट: http://stackexchange.com
आउटपुट:20 + 4 = 24

पकड़ है, आपके स्रोत कोड में अल्फ़ान्यूमेरिक वर्णों की समान संख्या है, जो गैर-अल्फ़ान्यूमेरिक वाले हैं। टिप्पणियों की अनुमति नहीं है, व्हॉट्सएप को अनदेखा किया जाता है। ( व्हॉट्सएप नामक भाषा वोटों के लिए प्रतिस्पर्धा कर सकती है, लेकिन विजेता के रूप में नहीं चुनी जाएगी, जाहिर है)

कोड में वर्णों में कम से कम कुछ औचित्य होना चाहिए, वे पूरी तरह से सतही नहीं होना चाहिए । उदाहरण के लिए, लंबे चर नामों की अनुमति है, i = (j*3)+4;इसके बजाय i = j*3+4;भी अनुमति दी गई है। हालाँकि, i = i + 1;;;;;;नहीं है।

इसके अलावा, मानक कोड-गोल्फ नियम लागू होते हैं।


अगर मैं उक की एक नई, preprocessed संस्करण जहां कीवर्ड हैं परिभाषित O., O?, और O!और उसके बाद किसी भी कार्यक्रम मैं लिख चरित्र वर्ग प्रतिबंध को पूरा करती है ... बेशक यह संभावना है लंबाई कारोबार पर कम करने के लिए।
dmckee --- पूर्व-मध्यस्थ ने बिल्ली का बच्चा

2
क्या यह सब अस्सी होगा?
जॉर्डन बायोनडो

@JordonBiondo: मैं पूरे 8 बिट ANSI से यूनिकोड के लिए आप जो कुछ भी चाहता था, उसके बारे में सोच रहा था, लेकिन अगर आपका कोड केवल 7 बिट ASCII का समर्थन करता है, तो मैं इसे भी स्वीकार करूंगा।
१४'१४ बनाम

3
क्या आउटपुट-स्ट्रिंग के अंदर व्हाट्सएप को गैर-अल्फ़ान्यूमेरिक्स में गिना जाता है? या अन्य सभी (गैर-स्ट्रिंग-शाब्दिक) व्हाट्सएप के साथ नजरअंदाज कर दिया?
नॉटिनग

1
@ डैमकी: यदि आप अपनी भाषा को परिभाषित करने जा रहे हैं, तो बस अपनी पसंद की भाषा के एक प्रकार को परिभाषित करें, जहां गैर-खाली प्रोग्राम आधार भाषा की तरह ही काम करते हैं, लेकिन खाली कार्यक्रम को कोड में पहले से रखा जाता है जो वास्तव में वही करता है सवाल पूछता है।
user2357112

जवाबों:


8

पर्ल, 32 + 32 = 64

एसटीडीआईएन में स्ट्रिंग की उम्मीद है। आउटपुट STDOUT को लिखा गया है। सफेद स्थान की अनदेखी की जाती है। कार्य की मेरी व्याख्या यह है कि स्कोर प्राप्त करने के लिए कार्यक्रम को स्वयं चलाने में सक्षम होना चाहिए।

$/ = $,;
$_ = <>;
s x\sxxg;
$\ = length;
print s x[0-9a-z]xxgi,
      ' + ',
      s x.xxg,
      ' = '

टिप्पणियों के साथ अपुष्ट

$/ = $,; # The input separator becomes undefined, because the default for $, is "undef"
$_ = <>; # now $_ takes the whole file (STDIN) instead of the first line
s x\sxxg; # $_ =~ s/\s//g;
          # white space is removed from $_
$\ = length; # The number of the other characters are put into $\,
             # which is automatically printed the end of "print".
print s x[0-9a-z]xxgi, # s/[0-9a-z]//gi
                       # Remove alphanumeric characters and return their count
      ' + ',
      s x.xxg, # s/.//g
               # Remove the remaining special characters and return their count.
               # "." does not catch new lines, but we have already
               # removed white spaces including new lines.
      ' = '

मुझे एक ही बाइट के साथ कई भिन्नताएं मिलीं, जैसे:

$/ = $x;
$_ = <>, s x\sxxg;
$\ = split $x;
print s x[\da-z]xxgi,
      " + ",
      s x.xxg,
      ' = '

उदाहरण

  • प्रश्न से उदाहरण:

    echo 'http://stackexchange.com' | perl a.pl
    20 + 4 = 24
  • अपने आप चल रहा है ( a.pl):

    cat a.pl | perl a.pl
    32 + 32 = 64

    फ़ाइल का आकार 104 बाइट्स है, इस प्रकार 40 बाइट्स को सफेद स्थान के रूप में अनदेखा किया जाता है।

पर्ल, 29 + 29 = 58

$_=<>;s x\sxxg;$\=length;print s x[0-9a-z]xxgi,' + ',s/.//g,' = '

STDIN पर स्ट्रिंग अपेक्षित है और यह पहली पंक्ति तक सीमित है। परिणाम STDOUT में मुद्रित होता है। सफेद स्थान की अनदेखी की जाती है।

Ungolfed

$_ = <>;
s x\sxxg; # same as s/\s//gx; removes white space;
$\ = length($_); # sum is automatically appended at the end of print
print sx[0-9a-z]xxgi, # same as s/[0-9a-z]//gi;
                      # the number of alphanumeric characters
      ' + ',
      s/.//g, # the number of the remaining special characters
      ' = '

उदाहरण

फ़ाइल a.plमें पर्ल स्क्रिप्ट है।

  • प्रश्न से उदाहरण:

    echo 'http://stackexchange.com' | perl a.pl
    20 + 4 = 24
  • स्वयं चल रहा है:

    cat a.pl | perl a.pl
    29 + 29 = 58

    फ़ाइल का आकार a.pl65 बाइट्स है, इस प्रकार 7 बाइट्स को सफेद स्थान के रूप में अनदेखा किया जाता है।


ऐसा लगता है कि आप मान रहे हैं कि इनपुट केवल एक ही लाइन पर है ... मैंने कल्पना में कुछ भी नहीं देखा था? इसके अलावा, पहली जगह में / x ध्वज के लिए औचित्य क्या है?
skibrianski

@skibrianski: (ए) "स्ट्रिंग" के विनिर्देश के बारे में सवाल बहुत स्पष्ट नहीं है। अब मैंने एक ऐसा वेरिएंट जोड़ा है जो पूरी फाइलें पढ़ सकता है। (b) इसके अलावा मेरे लिए यह स्पष्ट नहीं है कि लिपि द्वारा सफेद स्थान का उपचार कैसे किया जाना चाहिए। मेरी व्याख्या यह है कि कार्य और स्कोर दोनों में सफेद स्थान की अनदेखी की जाती है। (c) / x ध्वज पैटर्न में श्वेत स्थान को पठनीयता बढ़ाने की अनुमति देता है। अद्यतन उत्तर इसका उपयोग करता है।
हेइको ओबर्डिएक

फिर से), लेखक स्ट्रिंग में क्या होगा, इसके बारे में कुछ नहीं कहता है, इसलिए मुझे लगता है कि यह अनुमान लगाने के लिए नासमझ है, जो मेरे लिए मतलब है कि newlines को अनुमति दी जानी चाहिए। पुनः ख) सहमत हुए, यह स्पष्ट नहीं है। पुनः ग) सही है, लेकिन आपके उत्तर में व्हाट्सएप मेरी आंख में पठनीयता नहीं जोड़ता है, यह सिर्फ एक अल्फ़ान्यूमेरिक चरित्र जोड़ता है ... शायद मैं इस बिंदु पर बहुत मुश्किल हो रहा हूं, लेकिन यह मेरे लिए खुलासा कर रहा है कि आप केवल / x का उपयोग करते हैं अपने रेगेक्स में, संभवत: उस एक अंतिम अतिरिक्त अल्फ़ान्यूमेरिक को जोड़ने के लिए मायने रखता है संरेखित करने के लिए =) फिर भी मुझे आपका उत्तर पसंद है। मैं बहुत कुछ इसी तरह पकाया।
skibrianski

haha अब हमारे पास अनिवार्य रूप से समान कोड =) अच्छा शो =) है
skibrianski

@skibrianski: :-) धन्यवाद, आप मुझे दूसरे वेरिएंट में से एक को थोड़ा और अधिक अंतर के साथ पोस्ट करने का कारण देते हैं। हालांकि बाइट की गिनती बनी हुई है।
हेइको ओबर्डिएक

6

सी - 96 (48 + 48) वर्ण

यह कुछ हद तक पठनीय है। हालांकि, सुधार की गुंजाइश है।

i,j;main(_){while((_=getchar())>=0)isspace(_)||(isalnum(_)?i++:j++);printf("%i + %i = %i",i,j
,i+j);}

5

बैश + कोरुटिल्स, 72 (36 + 36) गैर-व्हाट्सएप चार्ट

a=`tr -dc [:alnum:]<<<$1|wc -c`
n=`tr -dt [:space:]<<<$1|wc -c`
echo $a + $[n-a] = $n

आउटपुट:

$ ./alnumbalance.sh http://stackexchange.com 
20 + 4 = 24
$ ./nnumbalance.sh "$ (बिल्ली अलनंबलेंस.श)"
36 + 36 = 72
$ 

पिछला उत्तर:

शुद्ध बैश, 92 (46 + 46) गैर-व्हाट्सएप चार्ट

nosp=${1//[[:space:]]}
noaln=${nosp//[[:alnum:]]}
echo $[${#nosp}-${#noaln}] + ${#noaln} = ${#nosp}

आउटपुट:

$ ./alnumbalance.sh http://stackexchange.com 
20 + 4 = 24
$ ./nnumbalance.sh "$ (बिल्ली अलनंबलेंस.श)"
46 + 46 = 92
$ 

Woohoo - यह भी गोल्फ की धड़कन ! ;-)
डिजिटल ट्रामा

नियंत्रण पात्रों के बारे में क्या? [: अलनम:] का विलोम नहीं है [: punct:]। उदाहरण के लिए सिर की कोशिश करो -c256 / dev / urandom | tr -d [: alnum:] [: punct:]
skibrianski

@skibrianski अच्छी बात है। मैंने इसे ध्यान में रखते हुए उत्तर संपादित किया है।
डिजिटल ट्रामा

3

पॉवरशेल (43 + 43 = 86)

golfed

function alf($i){$a=0;$n=0;[char[]]$i|%{if($_-match"[a-zA-Z0-9]"){$a++}else{$n++}}; write-host "$a+$n=$($a+$n)"}

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

function alf($i){
    $a=0;$n=0;  
    [char[]] $i | %{ if ($_ -match "[a-zA-Z0-9]") { $a++ } else { $n++ } };
    write-host "$a+$n=$($a + $n)"
}

परीक्षा

PS > alf "http://stackexchange.com"
20+4=24

मापदंड पास करने के लिए कोड के साथ ही परीक्षण

PS > alf "function alf($i){$a=0;$n=0;[char[]]$i|%{if($_-match`"[a-zA-Z0-9]`"){$a++}else{$n++}}; write-host `"$a+$n=$($a+$n)`"}"
43+43=86

" जो स्ट्रिंग का हिस्सा नहीं है, उसके साथ बच गया है।



2

रूबी 38 + 38 = 76

यह प्रोग्राम इनपुट में अनुगामी न्यूलाइन की गणना करता है।

puts"#{a=gets.scan(/[a-z0-9]/i).length}+#{b=$_.scan(/\W|_/).length}=#{a+b}"

चरित्र गणना कार्यक्रम द्वारा ही की जाती है: $ ruby alphabalance.rb alphabalance.rb:)


2

पॉवर्सशैल, 70 बाइट्स (= 35 + 35)

param($s)"$(($l=$s.Length)-($n=($s|sls '\W' -a).Matches.Count))+$n=$l"

टेस्ट स्क्रिप्ट:

$f = {
param($s)"$(($l=$s.Length)-($n=($s|sls '\W' -a).Matches.Count))+$n=$l"
}

&$f "http://stackexchange.com"
&$f $f.toString().Trim()

आउटपुट:

20+4=24
35+35=70

पॉवर्सशैल, 70 बाइट्स (= 35 + 35), वैकल्पिक

"$(($l="$args"|% Length)-($n=($args|sls '\W'-a).Matches.Count))+$n=$l"

2

अजगर 2 (60 + 60 = 120)

कठिन एक, शायद सुधार की गुंजाइश है। इस तथ्य की तरह ही फ़ंक्शन का उपयोग अपने स्वयं के अल्फ़ान्यूमेरिक संतुलन को विकसित करने के लिए किया जा सकता है।

def f(s):
 i=j=0
 for c in s:
  t=ord(c)
  if (t!=2**5): 
   i+=1  
  if (48<=t<=57 or 65<=t<=90 or 97<=t<=122):
   j+=1 
 print `j`,'+',`i-j`,'=',i      

परीक्षा:

>>> f("http://stackexchange.com")
20 + 4 = 24

पायथन का यह कौन सा संस्करण है?
गिगाफ्लॉप

@Gigaflop मैंने इसे संपादित किया। प्रिंट स्टेटमेंट केवल पायथन 2 है, जैसा कि इसके लिए बैकटिक सिंटैक्स है repr
mbomb007 20

1

सी ++, 146 (73 + 73) 178 (89 + 89) गैर-व्हाट्सएप वर्ण #

<algorithm>बिना किसी अच्छे कारण के मूल को शामिल किया गया। उफ़।

//create a test string
#include<string>
std::string a = "\?\?=include <cstdio>\
int x,y;\
int main()\?\?<\
    for(char c : a)\
            !isspace(c) ? (isalnum(c) ? y++ : x++) : 0;\
    printf(\"%d\?\?/t%c\?\?/t%d\?\?/t%c\?\?/t%d\?\?/n\",y,'+',x,'=',(x+y));\
\?\?>";

//Code itself starts here
??=include <cstdio>
int x,y;
int main()??<
    for(char c : a)
        !isspace(c) ? (isalnum(c) ? y++ : x++) : 0;
    printf("%d??/t%c??/t%d??/t%c??/t%d??/n",y,'+',x,'=',(x+y));
??>

मैं केवल बाद में लाइनों में वर्णों की गिनती कर रहा हूं //Code itself starts here। विशेष रूप से, इसका मतलब गिनती नहीं है #include <string>। मैं तीन वर्णों के रूप में ट्रिग्राफ भी गिन रहा हूं, जो शायद बहस का विषय है। ध्यान दें कि अपने स्वयं के स्रोत कोड पर कार्यक्रम का परीक्षण करने के लिए स्ट्रिंग शाब्दिक के भीतर ट्रिग्राफ प्रतिस्थापन को रोकने के लिए कुछ देखभाल की आवश्यकता होती है।

यहां कुछ अजीबोगरीब डिजाइन निर्णय हैं - अधिकांश उत्पादन कोड में आप एक ही फ़ंक्शन में ट्रिग्राफ और रेंज-आधारित-लूप के लिए मुठभेड़ नहीं करेंगे - लेकिन मुझे लगता है कि सभी 'उचित' की सीमा के भीतर हैं।


1

अजगर 52 +52 = 104

दिलचस्प चालान इसलिए है क्योंकि अजगर गैर-अल्फ़ान्यूमेरिक वर्णों से बचता है।

def f(_):
    _=_.replace(" ","");l=len(_);a=sum([c.isalnum() for c in _][:l]);print("{0} + {1} = {2}".format(a,l-a,l))

स्लाइस का उपयोग करने के लिए मामूली औचित्य: यह इसे गति देता है (शायद?)


पाइथन 2 का उपयोग करने की कोशिश करें, क्योंकि printकोष्ठक की आवश्यकता नहीं है, और '%d + %d = %d' % (a,l-a,l)विधि का उपयोग करना । कि कुछ पात्रों को बचाना चाहिए।
mbomb007

1

जूलिया, 64

f(s)=(b=endof(s);a=sum([isalnum(c) for c in s]);"$(a) + $(b-a) = $(b)";)

सभी केवल अनावश्यक गैर अल्फ़ान्यूमेरिक वर्ण अंतिम ;और ()स्ट्रिंग स्वरूपण में से कुछ हैं । यह लगभग पूरी तरह से संतुलित है, और 2 की शक्ति के रूप में बिना बहुत अधिक लंघन के।

julia> f("http://stackexchange.com")
"20 + 4 = 24"
julia> nowhite(s)=join(split("s"," "))
julia> f(nowhite("f(s)=(b=endof(s);a=sum([isalnum(c) for c in s]);\"\$(a)+\$(b-a)=\$(b)\";)"))
"32 + 32 = 64"

1

पर्ल, 64 गैर-व्हाट्सएप आकर्षण:

$/=$,;
$_=<>;
s 0\s00g;
$\=length;
print s 1[a-z0-9]11ig .
      " + " .
      s 2.22g .
      " = "

Perl के माध्यम से थोड़ा स्पष्ट -MO = गहराई और कुछ टिप्पणियां:

$/ = $,;               # input record separator = a variable defaulting to undef
$_ = <ARGV>;           # slurp stdin
s/\s//g;               # strip whitespace
$\ = length $_;        # output record separator = total length of string sans whitespace
print s/[a-z0-9]//gi . ' + ' . s/.//g . ' = '; # count alphanumerics, then everything else

ORS, $ \ _ को हर कॉल में प्रिंट करने के लिए स्वचालित रूप से जोड़ दिया जाता है, कुल संख्या को अंत में डालते हुए।


मेरे पहले पास पर ६६ अक्षर थे। यह दिखाने के लिए हेइको ओबर्डिक का धन्यवाद कि आप $, =) को सेट करके $ $ कम कर सकते हैं / =
skibrianski

1

अजगर 2, 50 + 50 = 100

import re
def f(i):
    w = re.sub('\s', '', i)
    s = re.subn('[\W_]', '', w)
    a = len(s[0])
    print '%d + %d = %d' % (a, s[1], a+s[1])

इसे यहां चलाएं: http://repl.it/8CH


0

रिबोल (64 + 64 = 128)

f: func [x] [
    c: :charset
    a: c [#"a" - #"z"]
    s: c [#" " #"^/" #"^-"]
    n: complement union a s
    a+: n+: 0
    parse x [
        some [
            a (++ a+) |
            n (++ n+) |
            s
        ]
    ]
    print [a+ "+" n+ "=" a+ + n+]
]

उपयोग का उदाहरण (Rebol कंसोल में):

>> f "http://stackexchange.com"
20 + 4 = 24

एनबी। कार्यक्रम मायने रखता है रिक्त स्थान, टैब और newlines से मायने रखता है।


0

जे - 46 + 46 = 92

व्हॉट्सएप को गिनता है, इसलिए आप बिना किसी संशोधन के आत्म-परीक्षण नहीं कर सकते। स्टड पर इनपुट लेता है। खराब मुंह है, इसे साबुन से धोना चाहिए।

;":&.>(+/;' + ';(#-+/);' = ';#)(e.~1!:1@1:)(,toupper)'golfscriptSUCKSabdehjkmnquvwxyz',,":"0 i.10

उपयोग:

   ;":&.>(+/;' + ';(#-+/);' = ';#)(e.~1!:1@1:)(,toupper)'golfscriptSUCKSabdehjkmnquvwxyz',,":"0 i.10
http://stackexchange.com
20 + 4 = 24

   NB. modification for self-test:    vvvvvv - remove spaces, the only whitespace
   ;":&.>(+/;' + ';(#-+/);' = ';#)(e.~' '-.~1!:1@1:)(,toupper)'golfscriptSUCKSabdehjkmnquvwxyz',,":"0 i.10
;":&.>(+/;' + ';(#-+/);' = ';#)(e.~1!:1@1:)(,toupper)'golfscriptSUCKSabdehjkmnquvwxyz',,":"0 i.10
46 + 46 = 92

0

जावास्क्रिप्ट - 76 (38 + 38)

_ = prompt()
o = _.match(/[a-z0-9]/gi).length
$ = _.length - o
alert(o + " + " + $ + " = " + (o + $))

नमूना इनपुट: http://stackexchange.com
आउटपुट:20 + 4 = 24

स्व पर चल रहा है:

var a  = '_ = prompt()o = _.match(/[a-z0-9]/gi).length$ = _.length - oalert(o + " + " + $ + " = " + (o + $))'

var letters = a.match(/[a-z0-9]/g).length; 
var nons = a.match(/[^a-z0-9 ]/g).length; // excludes whitespace from count

console.log(nons + " = " + letters); // 38 = 38 :)

PS उन लोगों के लिए जो (o + $)अल्फ़ान्यूमेरिक संतुलन बनाए रखने के लिए किए जा रहे हैं, ऐसा नहीं है। क्योंकि देखने के बाद o + " + "जेएस सभी +को जोड़ने वालों के बजाय स्ट्रिंग कॉन्सेटनटेर होने का फैसला करेगा । इस प्रकार कोष्ठक आवश्यक हैं, या 20 + 4इसके 204बजाय बनेंगे 24: डी

हैप्पी कोडिंग!


0

क्लोजर: (31 + 31 = 62) नॉन-व्हाट्सएप चार्ट

(def ff #(let [c count y (c %) x (c (re-seq #"\w" %))] (str x " + " (- y x) " = " y)))

आउटपुट:

alphabalance.core=> (ff "http://stackexchange.com")
"20 + 4 = 24"

0

सीजाम, 27 + 27 = 54

CJam इस चुनौती की तुलना में कुछ महीने नया है, इसलिए यह उत्तर ग्रीन चेकमार्क के लिए योग्य नहीं है। यह वैसे भी एक मजेदार व्यायाम था!

ea0=eu{A,s'[,65>+#)g}%_:+1@f-:+ea0=,]"DODDaD"36f-3/]zo

यह इनपुट स्ट्रिंग को कमांड-लाइन तर्क के रूप में लेता है, इसलिए यह ऑनलाइन दुभाषिया में काम नहीं करेगा, लेकिन आप जावा दुभाषिया के साथ इसका परीक्षण कर सकते हैं

व्याख्या

"Distinguish alphanumeric characters:";
ea0=eu{A,s'[,65>+#)g}%
ea0=                   "Get the first command-line argument.";
    eu                 "Convert it to upper case.";
      {             }% "Map this block onto each character.";
       A,s             "Get the string '0123456789'.";
          '[,          "Get a string with all characters from the null byte to Z.";
             65>       "Remove the first 65 characters, to leave A to Z.";
                +      "Add to digit.";
                 #     "Find character in that string. Returns -1 if not alphanumeric.":
                  )g   "Increment and get signum. Yields 1 for alphanumeric characters,
                        0 otherwise.";

"Now we've got an array of 0s and 1s. Let's do the counting:";
_:+1@f-:+ea0=,]
_               "Duplicate array.";
 :+             "Get the sum. This is the number of alphanumeric characters.";
   1@           "Push a 1 and pull up the other copy of the array.";
     f-         "Subtract each element from 1, this swaps 0s and 1s.";
       :+       "Get the sum. This is the number of symbol characters.";
         ea0=   "Get the first command-line argument again.";
             ,  "Get its length. This is the total number of characters.";
              ] "Collect everything in an array.";

"And now the formatting:";
"DODDaD"36f-3/]zo
"DODDaD"          "Push this string.";
        36f-      "Subtract 36 from each character. This yields ' +  = '.";
            3/    "Split into two halves of 3 characters each.";
              ]   "Wrap this and the previous array in another array.";
               z  "Zip. Transposes the array to interleave strings with numbers.";
                o "Output the resulting array without delimiters.";
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.