पता करें कि एक ही संख्या से कितने अल्फ़ान्यूमेरिक वर्ण बनाए जा सकते हैं


23

अक्षरांकीय वर्णों में ASCII-मान होते हैं:

0-9  ->  48-57
A-Z  ->  65-90
a-z  ->  97-122

आपकी चुनौती इनपुट के रूप में पूर्णांक लेना है, और उस संख्या के लगातार अंकों का उपयोग करके कितने वर्ण बनाए जा सकते हैं। वर्ण कोड अतिव्यापी हो सकते हैं। 666में परिणाम होना चाहिए 2, क्योंकि आपके पास 66दो बार है।

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

Input: 5698
Possible characters: '8' (56), 'E' (69), 'b' (98)
Output: 3

Input: 564693
Possible characters: '8' (56), 'E' (69)
Output: 2

Input: 530923864209124521
Possible characters: '5' (53), 'V' (86), '4' (52)  
Output: 3

Input: 1111111
Possible characters: 'ooooo' (5*111)
Output: 5

Input: 5115643141276343
Possible characters: '3' (51), '8' (56), 'L' (76), 's' (115)
Output: 4

Input: 56789
Possible characters: '8' (56), 'C' (67), 'N' (78), 'Y' (89)
Output: 4

Input: 94
Possible characters: ''
Output: 0

Input: 1
Output: 0

इनपुट और आउटपुट प्रारूप वैकल्पिक हैं (हां, आप पूर्णांक को एक स्ट्रिंग के रूप में ले सकते हैं)।

जवाबों:


11

05AB1E , 8 7 बाइट्स

žKÇIŒÃg

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

व्याख्या

žK       # push [a-zA-Z0-9]
  Ç      # convert to list of ascii codes
   IŒ    # push all substrings of input
     Ã   # keep only the subtrings which exist in the list of acsii codes
      g  # push length of resulting list

ŒžKÇÃgकाम नहीं करता है?
मैजिक ऑक्टोपस Urn

@carusocomputing: दुर्भाग्य से, यह 1111111परीक्षण-मामले में विफल रहता है ।
Emigna

Ã, कि एक बहुत अधिक समझ में आता है कि मैं पढ़ता हूं कि यह क्या कर रहा है, बकवास है।
मैजिक ऑक्टोपस Urn

7

ब्रेकीलॉग , 22 बाइट्स

∧Ạụ:Ạ:Ịcạ:?{tT&h∋~sT}ᶜ

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

व्याख्या

       c                 Concatenate together:
∧Ạụ:                       "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    Ạ:                     "abcdefghijklmnopqrstuvwxyz"
      Ị                    "0123456789"
        ạ                Get the list of ASCII codes of that string
         :?{        }ᶜ   Count the number of results, for input [list of codes, Input], of:
            tT             Call the Input T
              &h∋          Take one ASCII code
                 ~sT       It is a substring of T

दुर्भाग्य से मेरे लिए, आपके लिए सौभाग्य से, मेरे पास इस समय कंप्यूटर नहीं है;)
लीक नून

@ LeakyNun मैंने इसे करने के छोटे तरीकों के बारे में सोचा है, दोनों बग के कारण विफल हो रहे हैं।
11

क्या आप दोनों को Tएक साथ जोड़ सकते हैं?
लीक नून

1
इस कीड़े का कारण क्या है?
लीक नून

1
@LeakyNun उदाहरण के लिए पूर्णांक 13 में, अनंत रूप से कई सूचियाँ हैं, और असीम रूप से कई पूर्णांकों में 13 शामिल हैं, और यह स्पष्ट नहीं है कि आपको उन्हें किस क्रम में सूचीबद्ध करना चाहिए।
घातक

7

MATL , 17 13 बाइट्स

8Y2"G@oVXf]vn

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें

व्याख्या

8Y2     % Predefined literal: string with all letters, uppercase and lowercase,
        % and digits
"       % For each character in that string
  G     %   Push input, for example the string '5115643141276343'
  @     %   Push current character, such as 'A'
  o     %   Convert to its ASCII code, such as 65
  V     %   String representation, such as '65'
  Xf    %   Find string '65' within string '5115643141276343'. This gives a vector
        %   (possibly empty) with indices of occurrences
]       % End
v       % Concatenate all stack contents vertically
n       % Number of entries. Implicitly display

6

जावा 7, 204 197 195 बाइट्स

int c(String n){int r=0,i=0,e=n.length()-1,t;for(;i<e;r+=((t=new Byte(n.substring(i,i+2)))>47&t<57)|(t>64&t<91)|(t>96&t<100)|((t=new Short(n.substring(i,i++>e-2?i:i+2)))>99&t<123)?1:0);return r;}

स्पष्टीकरण:

int c(String n){       // Method with String parameter and integer return-type
  int r=0,             //  Result
      i=0,             //  Index
      e=n.length()-1,  //  Length of String -1
      t;               //  Temp integer
  for(;i<e;            //  Loop over the String using the index
    r+=                //   Append the result-sum with:
      ((t=new Byte(n.substring(i,i+2)))>47&t<57)|(t>64&t<91)|(t>96&t<100)
                       //    If two adjacent digits are a digit or letter
      |                //    or
      ((t=new Short(n.substring(i,i++>e-2?i:i+2)))>99&t<123)?
                       //    if three adjacent digits are a letter
       1               //     Raise the sum by 1
      :                //    Else:
       0               //     Keep the sum the same (by adding 0)
  );                   //  End of loop (implicit / no body)
  return r;            //  Return result
}                      // End of method

टेस्ट कोड:

इसे यहाँ आज़माएँ।

class M{
  static int c(String n){int r=0,i=0,e=n.length()-1,t;for(;i<e;r+=((t=new Byte(n.substring(i,i+2)))>47&t<57)|(t>64&t<91)|(t>96&t<100)|((t=new Short(n.substring(i,i++>e-2?i:i+2)))>99&t<123)?1:0);return r;}

  public static void main(String[] a){
    System.out.println(c("5698"));
    System.out.println(c("564693"));
    System.out.println(c("530923864209124521"));
    System.out.println(c("1111111"));
    System.out.println(c("5115643141276343"));
    System.out.println(c("56789"));
    System.out.println(c("94"));
    System.out.println(c("1"));
  }
}

मैं अभी कंप्यूटर तक नहीं पहुँच सकता, इसलिए मैं पुष्टि नहीं कर सकता, लेकिन यहाँ दो सुझाव दिए गए हैं: 1. लूप के लिए दीक्षाएँ दें। 2. स्ट्रिंग हेरफेर के बजाय, अंकगणित का उपयोग करें (अंकों के माध्यम से पूर्णांक विभाजन का उपयोग करें और अंतिम 2 या 3 अंक निकालने के लिए मोडुलो का उपयोग करें)।
लीकी नून

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

5

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

f=([a,...b])=>a?(a&(a+=b[0])+b[1]<123|a>47&a<58|a>64&a<91|a>96)+f(b):0

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


4

पर्ल 5 , 47 बाइट्स

कोड + -pध्वज के 46 बाइट्स ।

$"="|";$_=()=/(?=@{[48..57,65..90,97..122]})/g

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

मुझे यह लिखने का कोई छोटा रास्ता नहीं मिल रहा है 48..57,65..90,97..122: map{ord}0..9,a..z,A..Z(पात्रों की एससीआई मूल्य प्राप्त करना) अब एक बाइट है। और कर रहे हैं for$c(0..122){$\+=chr($c)=~/\pl|\d/ for/(?=$c)/g}}{(सभी संख्याओं की तलाश कर रहे हैं , लेकिन केवल उन लोगों को रखते हैं जिनकी संख्या अक्षरों ( \pl) या अंकों ( \d) के ascii मान से मेल खाती है ) 5 बाइट्स लंबे समय तक रहेंगी (ध्यान दें कि जिसे बाद में \pl|\dबदला नहीं जा सकता है, \wजिसमें अंडरस्कोर भी शामिल हैं) ।


पिछला दृष्टिकोण (49 बाइट्स):

for$@(48..57,65..90,97..122){$\+=()=/(?=$@)/g}}{


1

जावास्क्रिप्ट (ईएस), 165 161 156 154 153 बाइट्स

हाँ, RegEx निश्चित रूप से यहाँ काम के लिए सही उपकरण नहीं था!

n=>[/\d{2}/g,/\d{3}/g].map(e=>eval("while(x=e.exec(n)){a.push(m=x[0]);e.lastIndex-=m.length-1}"),a=[])|a.filter(x=>x>47&x<58|x>64&x<91|x>96&x<123).length

कोशिश करो

f=

n=>[/\d{2}/g,/\d{3}/g].map(e=>eval("while(x=e.exec(n)){a.push(m=x[0]);e.lastIndex-=m.length-1}"),a=[])|a.filter(x=>x>47&x<58|x>64&x<91|x>96&x<123).length

console.log(f(5698))//3
console.log(f(564693))//2
console.log(f(530923864209124521))//3
console.log(f(1111111))//5
console.log(f(5115643141276343))//4
console.log(f(56789))//4
console.log(f(94))//0
console.log(f(1))//0


Regexp वह बुरा नहीं है; मेरे रेटिना जवाब का एक पोर्ट 78 बाइट्स में आया।
नील



1

हास्केल, 161 157 138 129 126 बाइट्स

import Data.List
f x=sum[1|y<-nub$concat$words.concat<$>mapM(\c->[[c],c:" "])x,any(elem$read y)[[48..57],[65..90],[97..122]]]

मुझे आश्चर्य है कि अगर नब के लिए Data.List आयात करने की तुलना में सूची के द्वारों को हटाने का एक बेहतर तरीका है?


1
यदि आप Data.Listsइसके बजाय आयात करते हैं Data.List, तो आप उपयोग कर सकते हैं y<-tail$powerslice x:।
४३

अगर मैं गैर मानक मॉड्यूल को डाउनलोड और स्थापित करना है, तो क्या यह गोल्फिंग नियमों के खिलाफ है? मुझे नहीं लगता कि Data.Lists GHC में मानक है।
मेपल_शाफ्ट

जहां तक ​​मुझे पता है कि अभी भी हमारे पास मानक मॉड्यूल के रूप में गिना जाने पर आम सहमति नहीं है। यहाँ आसपास हास्केल के एक जोड़े के उत्तर हैं जो उपयोग करते हैं Data.Listsहास्केल के लिए गोल्फ टिप्स में भी इसका उल्लेख किया गया है - किसी ने अब तक कोई शिकायत नहीं की है।
nimi

@ अच्छी तरह से ईमानदारी से मुझे लगता है कि अगर मैं कैबेल से किसी भी पैकेज को डाउनलोड कर सकता हूं, तो मैं सिर्फ एक फ़ंक्शन लिख सकता हूं जो समस्या को हल करता है, इसे अपलोड करता है, फिर मेरे समाधान में मॉड्यूल आयात करता है। तकनीकी रूप से मैं धोखा दे सकता था। लेकिन फिर कुछ चुनौतियों को बुनियादी GHC के साथ या तो क्रिप्टो सामान की तरह किया जाना चाहिए ताकि मुझे पता न चले।
मेपल_शाफ्ट

1
युक्तियाँ गोल्फ पर वापस or $ f <$> listहै any f list: any(elem$read y)[...]
निकमी

0

पायथ, 19 17 14 बाइट्स

l@jGUTmr0Csd.:

एक स्ट्रिंग लेता है।

-3 बाइट्स थैंक्स टू @LeakyNun

कोशिश करो!

व्याख्या

l@jGUTmr0Csd.:
    UT                # the list of digits [0,1,2,...,9]
  jG                  # join that on the lowercase alphabet (repetition doesn't matter)
              Q       # implicit input
            .:        # all substrings of the input
      m               # for each of those substrings
          sd          # Convert the string to a base 10 integer
         C            # convert that integer to the character with that number
       r0             # make that character lowercase
l@                    # length of the intersection of those two list of chars we generated

उपयोग करने के बजाय idT, आप उपयोग कर सकते हैं sd
लीकी नून

इसके अलावा, l@jGUTmr0Csd.:कम हो सकता है (यदि यह काम करता है तो निश्चित नहीं)।
लीक नून

@LeakyNun धन्यवाद, यह काम करता है!
कार्लकास्टर

0

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

ØBODf@ẆL

इनपुट एक अंक सरणी है।

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

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

ØBODf@ẆL  Main link. Argument: A (digit array)

ØB        Base 62; yield all alphanumeric ASCII characters.
  O       Ordinal; get their code points.
   D      Decimal; convert the code points into digit arrays.
      Ẇ   Window; yield all contiguous subarrays of A.
    f@    Filter swapped; keep all elements of the result to the right that appear
          in the result to the left.
       L  Length; count the matches.

0

रूबी, 50 बाइट्स

p (0..~/$/).any?{|n|$_[n,2].to_i.chr=~/\p{Alnum}/}

मानक इनपुट से पढ़ता है; रूबी दुभाषिया की आवश्यकता होती है-n विकल्प (अंतर्निहित while getsलूप) के साथ।

इसे 43 बाइट्स तक कम किया जा सकता है अगर इसे अंडरस्कोर मैच करने दिया जाए।

p (0..~/$/).any?{|n|$_[n,2].to_i.chr=~/\w/}

यह वर्णों को दिखाने की संख्या को वापस नहीं करता है। इसके अलावा, यह विफल रहता है 111, जिसे वापस आना चाहिए 1लेकिन आप वापस दे रहे हैं 0
मूल्य स्याही

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.