उच्चतम या निम्नतम घटनाएँ?


13

चुनौती:

इनपुट:

  • मुद्रण योग्य ASCII (रिक्त स्थान, टैब और नई-लाइनों को छोड़कर) युक्त स्ट्रिंग
  • एक बूलियन

आउटपुट:

स्ट्रिंग के भागों को चार समूहों में विभाजित किया गया है:

  • छोटे अक्षर
  • बड़ी वर्तनी के अक्षर
  • अंक
  • अन्य

बूलियन के आधार पर, हम या तो इन चार समूहों में से एक (या एकाधिक) की उच्चतम घटना का उत्पादन करते हैं, या सबसे कम, रिक्त स्थान के साथ बाकी सब को प्रतिस्थापित करते हैं।

उदाहरण के लिए:

इनपुट: "Just_A_Test!"
इसमें शामिल हैं:
- 3 बड़े अक्षर: JAT
- 6 लोअरकेस अक्षर: ustest
- ० अंक
- ३ अन्य:__!

इन के लिए आउटपुट होगा trueया false:

true:   " ust    est "

// digits have the lowest occurrence (none), so everything is replaced with a space
false:  "            "

(ध्यान दें: आपको अनुगामी स्थानों को अनदेखा करने की अनुमति है, इसलिए आउटपुट क्रमशः " ust est"और भी हो सकते ""हैं।)

चुनौती नियम:

  • इनपुट कभी खाली नहीं होगा या इसमें रिक्त स्थान नहीं होंगे, और केवल रेंज में 33-126या इसके '!'माध्यम से मुद्रण योग्य ASCII शामिल होगा '~'
  • यदि आप चाहते हैं तो आपको इनपुट और / या आउटपुट को चरित्र-सरणी या सूची के रूप में लेने की अनुमति है।
  • बूलियन के लिए किसी भी दो सुसंगत और विशिष्ट मूल्यों की अनुमति है: true/ false; 1/ 0; 'H'/ 'L'; "highest"/ "lowest"; आदि ध्यान दें कि इन अलग-अलग मूल्यों का उपयोग (कुछ) बूलियन के रूप में किया जाना चाहिए! तो यह दो पूर्ण कार्यक्रमों को इनपुट करने की अनुमति नहीं है, एक जो कि trueऔर दूसरे के लिए सही परिणाम देता है false, और फिर आपका वास्तविक कोड केवल होना चाहिए <run input with parameter>नई नई डिफ़ॉल्ट खामियों को मैंने जोड़ा है, हालांकि यह अभी भी परिभाषाओं के बारे में बहुत सारे फ़ाइनटिंग का उपयोग कर सकता है ..
  • यदि दो या अधिक समूहों की घटना समान होती है, तो हम उन सभी घटनाओं को आउटपुट करते हैं।
  • आवश्यक अनुगामी स्थान वैकल्पिक हैं, और एकल अनुगामी नई-लाइन वैकल्पिक भी है। आवश्यक अग्रणी स्थान अनिवार्य हैं। और किसी भी अन्य प्रमुख स्थान या नई लाइनों की अनुमति नहीं है।

सामान्य नियम:

  • यह , इसलिए बाइट्स जीत में सबसे छोटा जवाब है।
    कोड-गोल्फ भाषाओं को गैर-कोडगॉल्फिंग भाषाओं के साथ उत्तर पोस्ट करने से हतोत्साहित न करें। 'किसी भी' प्रोग्रामिंग भाषा के लिए यथासंभव संक्षिप्त उत्तर के साथ आने का प्रयास करें।
  • मानक नियम आपके उत्तर के लिए लागू होते हैं , इसलिए आपको उचित पैरामीटर, पूर्ण कार्यक्रमों के साथ STDIN / STDOUT, फ़ंक्शन / विधि का उपयोग करने की अनुमति है। तुम्हारा फोन।
  • डिफ़ॉल्ट लूपोल्स वर्जित हैं।
  • यदि संभव हो, तो कृपया अपने कोड के लिए एक परीक्षण के साथ एक लिंक जोड़ें।
  • इसके अलावा, यदि आवश्यक हो तो एक स्पष्टीकरण जोड़ें।

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

Inputs:                              Output:

"Just_A_Test!", true                 " ust    est "     (or " ust    est")
"Just_A_Test!", false                "            "     (or "")
"Aa1!Bb2@Cc3#Dd4$", either           "Aa1!Bb2@Cc3#Dd4$"
"H@$h!n9_!$_fun?", true              " @$ !  _!$_   ?"
"H@$h!n9_!$_fun?", false             "H     9        "  (or "H     9")
"A", true                            "A"
"A", false                           " "                (or "")
"H.ngm.n", true                      "  ngm n"
"H.ngm.n", false                     "       "          (or "")
"H.ngm4n", false                     "H.   4 "          (or "H.   4")

क्या यह अलग प्रविष्टियों के रूप में सबसे अधिक / सबसे कम उत्पादन करने के लिए स्वीकार्य है? उदाहरण के लिए, के लिए परीक्षण का मामला "हैशिंग मजेदार है", कर सकते हैं "H "और " 9 "(उचित रिक्ति के) के बजाय उत्पादन हो "H 9"?
AdmBorkBork

@AdmBorkBork मुझे वह नहीं मिला जो आपका मतलब है; दोनों Hऔर 9"सबसे कम" का हिस्सा हैं।
आउटगॉल्फ

क्या बूलियन इनपुट मूल्य "max"/ हो सकता है "min", जिसे तब या के रूप में उपयोग किया जाता Math[b]है ? Math.maxMath.min
जस्टिन मेरिनर

@JustinMariner तुम्हें पता है .. मैं उसके बारे में खेद मन बदल गया। मुझे लगता है कि यह जेएस के लिए है? मुझे लगता है कि बहुत सारी प्रोग्रामिंग भाषाएं इस तरह से कुछ का उपयोग कर सकती हैं, इसलिए बहुत से मौजूदा उत्तरों को बदलना चाहिए। तो क्षमा करें, आपको b?"max":"min"अपने उत्तर में रखना होगा .. यह एक अच्छी लाइन है जो मुझे लगता है, शायद मुझे अगली बार एक सत्य / गलत मूल्य का उपयोग करना चाहिए ..
केविन क्रूज़सेन

जवाबों:


3

हस्क , 27 26 24 22 बाइट्स

-2 बाइट्स जर्ब के लिए धन्यवाद

-2 बाइट्स लियो के लिए धन्यवाद

के ' 'रूप में Falseऔर के 'a'रूप में लेता है True(भूसी में, Fasly में व्हाट्सएप और अन्य सभी अक्षर सत्य हैं)

Fż▲→ġ#¬Ö#≡⁰Ṫḟë½D±o¬□m;

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

यह कैसे काम करता है?

Fż▲→ġ#¬Ö#≡⁰Ṫḟë½D±o¬□m;   Function, takes a character c and a string S as arguments
                    m;   Wrap each character in S into it's own string
             ë           List of four functions returning booleans:
              ½D±o¬      Lower case?,Upper case?,Digit?,Not alphanumeric?
           Ṫḟ            Outer product with find†
       Ö#≡⁰              Sort on how many characters have the same Truthyness as c
    ġ#¬                  Group strings with equal numbers of spaces
   →                     Take the last group
Fż▲                      Squash it all into one list

That एक ऐसा कार्य है जो एक विधेय pऔर एक सूची लेता है और उस संतुष्टि Lका पहला तत्व देता Lहै p। यदि कोई तत्व संतुष्ट नहीं करता है तो pएक डिफ़ॉल्ट तर्क वापस आ जाता है। इस मामले में ' 'एक वर्ण स्ट्रिंग पर लागू करके , हम अनिवार्य रूप से कह रहे हैं if p c then c else ' '

समारोह है कि एक समारोह लेता है fऔर दो सूचियों L1, L2। यह और के fसभी जोड़े पर लागू की एक तालिका देता है । इस मामले में , हमारे 4 कार्यों की सूची है , और एक चरित्र तार की सूची है।L1L2fL1L2

बाद Ṫḟहम स्ट्रिंग की एक सूची जहां प्रत्येक स्ट्रिंग जो एक साथ नियमों में से एक को संतुष्ट नहीं करते की जगह का नतीजा है है ' '

NB: भूसी के नए संस्करणों में, 3 बाइट की बचत के ġ#¬Ö#≡⁰द्वारा प्रतिस्थापित किया जा सकता है k#≡⁰!


जिज्ञासा से बाहर: क्यों ' 'और 'a'? हो सकता है कि जब स्पष्टीकरण जोड़ा जाता है तो मैं इसे बेहतर ढंग से समझता हूं, क्योंकि मैं भूसी नहीं पढ़ सकता। ;)
केविन क्रूज़सेन

अच्छा! यहाँ 24 बाइट्स का उपयोग किया गया है
ज़र्गब

@Zgarb धन्यवाद! मैं वास्तव में समझ नहीं पाया कि Mmmखुद क्या कर रहा था :)
H.PWiz

दुर्भाग्य से यह वास्तव में गोल्फ के साथ मदद नहीं करता है, लेकिन S`?' के रूप में सरल हो सकता है?IK'
सिंह

मैं उपयोग करने से बचता हूं I, कभी-कभी यह दुभाषिया को हमेशा के लिए ले जाता है। यह भी बेकार लगता है।
H.PWiz

7

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

ØṖḟØBṭØBUs26¤f€³Lİ⁴¡$ÐṀFf
¹⁶Ç?€

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

बूलियन मान रहे हैं 2और 1(या किसी अन्य सकारात्मक भी / अजीब जोड़ी) है, जो प्रतिनिधित्व करते हैं Trueऔर Falseक्रमशः। मैं आगे गोल्फ के बाद एक स्पष्टीकरण जोड़ने की कोशिश करूंगा।

2 बाइट्स बचाने के लिए और 4 बाइट्स बचाने के लिए लिन को caird coinheringaahing के लिए धन्यवाद ! एरिक की चाल में से एक के लिए धन्यवाद , जिसने मुझे 4 बाइट्स बचाने के लिए प्रेरित किया!

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

ध्यान दें कि यह 35-बाइट संस्करण के लिए स्पष्टीकरण है। नया लगभग एक ही करता है (लेकिन लिन द्वारा थोड़ा सा बदल दिया गया है), इसलिए मैं इसे नहीं बदलूंगा।

ØBUs26f€³µ³ḟØBW,µẎLİ⁴¡$ÐṀF - Niladic helper link.
ØB                         - String of base digits: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
                             abcdefghijklmnopqrstuvwxyz'. 
  U                        - Reverse.
   s26                     - Chop into sublists of length 26, preserving shorter
                             trailing substrings.
      f€³                  - For each, keep the common characters with the input.
            ØB             - Base digits.
          ³ḟ               - Get the signs in the input. Filter the characters of the
                             input that aren't alphanumeric.
              W,µẎ         - Concatenate (wrap, two element list, tighten).
                       ÐṀ  - Keep the elements with maximal link value.
                  L        - Length.
                    ⁴¡     - Do N times, where N is the second input.
                   İ       - Inverse. Computes 1 ÷ Length. 2 maps to the length itself,
                             because 1 ÷ (1 ÷ Length) = length; 1 yields
                             (1 ÷ Length), swapping the maximal numbers with minimal ones.
                         F - Flatten.

¹⁶e¢$?€ - Main link.
      € - For each character.
   e¢?  - If it is contained by the last link (called niladically), then:
¹       - Identity, the character itself, else:
 ⁶      - A space.


@cairdcoinheringaahing धन्यवाद! :) मैं चाहता था कि जब से मैंने उत्तर पोस्ट किया है, मैं उस हिस्से को गोल्फ कर दूं, लेकिन मैं यह पता नहीं लगा सका कि यह काम क्यों नहीं किया ... मेरे पास µ
एक्सट्रॉडर

31 बाइट्स : कक्षाओं के रूप में उत्पन्न करते हैं ØṖḟØBṭØBUs26¤, और फिर के साथ fऔर Çइसके बजाय सदस्यता का परीक्षण करते हैं e¢$
लिन


5

आर , 193 186 179 158 बाइट्स

-7 बाइट्स NofP और उसके सुझाव के लिए धन्यवाद cbind

-6 बाइट्स का उपयोग outer, -1 बाइट के [^a-zA-Z0-9]साथ स्विच करना[[:punct:]]

-21 अक्षर बाइट के लिए मिकी को धन्यवाद देते हैं कि पात्रों की सूची की अनुमति है

function(S,B){y=outer(c("[a-z]","[A-Z]","\\d","[[:punct:]]"),S,Vectorize(grepl))
S[!colSums(y[(s=rowSums(y))=="if"(B,max,min)(s),,drop=F])]=" "
cat(S,sep='')}

सभी परीक्षण मामलों की जाँच करें

ले जाता है 1/T(truthy के रूप में max) और 0/Ffalsey के रूप में ( min), और ले जाता है Sएक वर्णों की एक सूची के रूप में।

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

मेरे मूल संस्करण में (NofP के सुझावों के साथ), मैट्रिक्स yका निर्माण grepl(regex, S)प्रत्येक के लिए मूल्यांकन करके किया जाता है regex, फिर उन्हें एक मैट्रिक्स के कॉलम के रूप में एक साथ मिलाया जाता है। इसके परिणामस्वरूप कई कॉल होते हैं grepl, लेकिन जैसा Sकि तय है, ऐसा लगता है कि कुछ और किया जाना चाहिए। जैसा कि मैंने उल्लेख किया है:

संभावित रूप से छोटे दृष्टिकोण हैं; mapply, उदाहरण के लिए:

y=mapply(grepl,c("[a-z]","[A-Z]","\\d","[^a-zA-Z0-9]"),list(S))

दुर्भाग्य से, यह 1-चरित्र उदाहरण में एक मैट्रिक्स के रूप में सरल नहीं होगा "A"

मैंने इसके outerबजाय उपयोग किया mapply, जो हमेशा एक सरणी (इस मामले में एक मैट्रिक्स) देता है, और मजबूर किया गया था Vectorize grepl, जो वास्तव में इसके mapplyचारों ओर सिर्फ एक आवरण है।

मैंने पूर्वनिर्धारित चरित्र समूह की भी खोज की [:punct:]जो विराम चिह्न (गैर-स्थान, गैर-अल्फ़ान्यूमेरिक) वर्णों से मेल खाता है।


1
यदि आप मैट्रिक्स को cbind से बदलते हैं, तो आप 186 बाइट्स तक कम कर सकते हैं: y = cbind (g ("[az]", S), g ("[AZ]", S), g ("\\ d") एस), जी ("[ए-ए-
जेडए

@NofP ओह, बहुत अच्छा। इसके अलावा, आप इसे प्रदर्शित करने के लिए बैकटिक्स (`) के साथ कोड को घेर सकते हैं like this। :)
Giuseppe

नियम बताते हैं कि आप एक वर्ण सारणी या सूची को इनपुट के रूप में उपयोग कर सकते हैं, इसलिए आप शायद हटा सकते हैंS=el(strsplit(G,""))
मिकी

@ मिक्की आह, मैंने उसकी अनदेखी की, धन्यवाद।
Giuseppe

4

भूसी , 31 29 28 बाइट्स

SMS?' `ṁ§foSM≠?▲▼⁰M#Kë½D±o¬□

अधिकतम के लिए 0 का उपयोग करता है और अधिकतम के लिए 1 वर्णों की गणना करता है। इसे ऑनलाइन आज़माएं!

व्याख्या

कार्यों की सूची शांत हैं।

SMS?' `ṁ§foSM≠?▲▼⁰M#Kë½D±o¬□  Inputs are bit B and string S.
                     ë        Make a list L of the four functions
                      ½       is-lowercase-letter,
                       D      is-uppercase-letter,
                        ±     is-digit, and
                         o¬□  not is-alphanumeric.
                  M#          For each of them, take number of matches in S,
              ?▲▼⁰            take maximum or minimum depending on B,
          oSM≠                and mark those entries that are not equal to it.
        §f          K         Remove from L the functions that correspond to marked entries, call the result L2.
                              These functions test whether a character should be replaced by a space.
SM                            Do this for each character C in S:
      `ṁ                      Apply each function in L2 to C and sum the results.
  S?'                         If the result is positive, return space, otherwise return C.

4

पायथन 2 , 140 बाइट्स

g=lambda x:x.isalnum()-~(x>'Z')*x.isalpha()
def f(s,m):k=map(g,s).count;print''.join([' ',c][k(g(c))==sorted(map(k,range(4)))[m]]for c in s)

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

जोनाथन फ्रेच ने एक बाइट को बचाया। धन्यवाद!

सबसे ऊँचा है m=-1, निम्नतम है m=0


1
मुझे लगता है कि आप को बदल कर एक बाइट बचा सकता है +x.isalpha()*-~(x>'Z')के साथ -~(x>'Z')*x.isalpha()
जोनाथन फ्रीच


3

जावा (ओपनजेडके 8) , 448 439 432 362 361 354 352 352 348 343 320 बाइट्स

s->b->{int w[]=new int[4],m=0,n=-1>>>1,l;s.chars().forEach(c->{if(c>96&c<123)w[0]++;else if(c>64&c<91)w[1]++;else if(c>47&c<58)w[2]++;else++w[3];});for(int W:w){m=W>m?W:m;n=W<n?W:n;}l=m-n;m=b?m:n;return l<1?s:s.replaceAll("["+(w[0]!=m?"a-z":"")+(w[1]!=m?"A-Z":"")+(w[2]!=m?"\\d]":"]")+(w[3]!=m?"|[^a-zA-Z0-9]":"")," ");}

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



आप निकाल सकते हैं +में \\|+$एक अतिरिक्त -1 बाइट के लिए।
केविन क्रूज़सेन

आप अंतिम भाग को बदलकर तीन और बाइट्स बचा सकते हैं String r=(w[0]!=m?"[a-z]|":"")+(w[1]!=m?"[A-Z]|":"")+(w[2]!=m?"[0-9]|":"")+(w[3]!=m?"[^a-zA-Z0-9]|":"");return r.isEmpty()?s:s.replaceAll(r.replaceAll(".$","")," ");}
केविन क्रूज़सेन

ओह, और एक अतिरिक्त -4 के लिए n=s.length()हो सकता है n=-1>>>1
केविन क्रूज़सेन

ओह, गोल्फ के लिए एक और छोटी चीज़: [0-9]->\\d
केविन क्रूज़सेन

3

रूबी , 118 116 बाइट्स

अपने दूसरे तर्क के लिए (सबसे 0कम) या -1(उच्चतम) लेता है।

-2 बाइट्स लिन का धन्यवाद।

->s,t{s.gsub(/./){|c|[/\d/,/[a-z]/,/[A-Z]/,/[^\da-z]/i].group_by{|x|s.scan(x).size}.sort[t][1].any?{|x|x=~c}?c:" "}}

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

Ungolfed

->s,t{
  s.gsub(/./) {|c|
    [ /\d/,
      /[a-z]/,
      /[A-Z]/,
      /[^\da-z]/i
    ]
    .group_by {|x| s.scan(x).size }
    .sort[t][1]
    .any? {|x| x =~ c } ? c : " "
  }
}

बहुत अच्छा जवाब! आप -1"उच्चतम" मान के रूप में उपयोग कर सकते हैं और इसके minmax[t]द्वारा प्रतिस्थापित कर सकते हैं sort[t]
लिन

3

पायथन 2, 190 183 174 173 बाइट्स

इसे छोटा करने के लिए जोनाथन फ्रेच को धन्यवाद

from re import*
def f(i,c):
 q='[a-z]','[A-Z]','\d','[\W_]';l=[len(set(finditer(p,i)))for p in q]
 for j,k in enumerate(l):
	if k-eval(c):i=compile(q[j]).sub(' ',i)
 print i

यह स्ट्रिंग्स 'max(l)'और 'min(l)'सच और झूठ के रूप में लेता है । (मुझे नहीं लगता कि यह नियमों को तोड़ता है ...?) यह अन्य दो अजगर जवाबों की तुलना में लंबा है, लेकिन अलग है तो मैंने सोचा कि मैं इसे पोस्ट करूंगा। मैं एक महान गोल्फर नहीं हूँ इसलिए मुझे लगता है कि इसे और बेहतर बनाया जा सकता है लेकिन मैंने जो भी कोशिश की वह सब काम नहीं आया।

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


नमस्कार, और साइट पर आपका स्वागत है! जब मैं इसे चलाने की कोशिश करता हूं, मुझे त्रुटियां मिलती हैं, और मुझे पूरी तरह से यकीन नहीं है कि क्यों। एक कारण यह हो सकता है कि sum(1for m...होना चाहिए sum(1 for m..., लेकिन मुझे लगता है कि अन्य समस्याएं भी हैं। क्या आप यह दिखाने के लिए कि आप इसे कॉल कैसे कर रहे हैं, और यह दिखाने के लिए ऑनलाइन इंटरप्रेटर (जैसे कि tio ) को एक लिंक प्रदान कर सकते हैं , यह गलत नहीं है?
जेम्स

@DJMcMayhem मैंने अभी एक लिंक जोड़ा है, लिंक प्रदान करने के लिए धन्यवाद मुझे यकीन नहीं था कि यह कैसे करना है। जब मैं इसे वहां चलाता हूं तो मुझे कोई त्रुटि नहीं मिल रही है।
डायलन

आह, मैं नहीं बता सकता कि आप इनपुट कर रहे थे max(l)और min(l)तार के रूप में, यही कारण है कि मुझे त्रुटियां हो रही थीं। इसे साफ करने के लिए धन्यवाद! हालाँकि अब, यह नियम # 3 के उल्लंघन के किनारे पर है, `ध्यान दें कि इन अलग-अलग मूल्यों का उपयोग (कुछ) बूलियन के रूप में किया जाना चाहिए, लेकिन यह निश्चित रूप से थोड़ा ग्रे क्षेत्र है।
जेम्स

BTW, यहाँ एक TIO प्रो-टिप है: यदि आप अपने फ़ंक्शन कॉल को फ़ुटर फ़ील्ड में रखते हैं, तो उन्हें आपकी बाइट काउंट की ओर नहीं गिना जाएगा, ताकि आप आसानी से देख सकें कि आपका उत्तर कितना लंबा है: इसे ऑनलाइन आज़माएं!
जेम्स

@DJMcMayhem आह धन्यवाद मैं मानता हूं कि यह एक ग्रे एरिया है। मैं 'अधिकतम' और 'मिनट' को सत्य असत्य के रूप में ले सकता हूं, फिर eval (c + '(l)') करता हूं, जो 6 बाइट्स जोड़ता है और अधिक स्वीकार्य लगता है, लेकिन जब तक ओपी मेरे उत्तर को अस्वीकार नहीं करता, तब तक मैं इसे ठीक मान रहा हूं।
डायलन

2

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

g=
(s,f,a=[/\d/,/[A-Z]/,/[a-z]/,/[_\W]/],b=a.map(r=>s.split(r).length))=>s.replace(/./g,c=>b[a.findIndex(r=>r.test(c))]-Math[f?"max":"min"](...b)?' ':c)
<input id=s oninput=o.textContent=g(s.value,f.checked)><input id=f type=checkbox onclick=o.textContent=g(s.value,f.checked)><pre id=o>

अफसोस की बात है कि नियम शायद मुझे Math.maxया Math.minध्वज के रूप में पारित करने की अनुमति नहीं देते हैं । संपादित करें: @JustinMariner के लिए 2 बाइट्स धन्यवाद सहेजे गए।


1

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

ØWṖs26µẎØṖḟW⁸;
¢f@³L$ÐṂFe@Ѐ³¬¹⁴?a³o⁶

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

-6 बाइट्स एरिक के पद से "उधार": डी


रिक्त स्थान को संरक्षित करने का अनिवार्य रूप से आधा कार्यक्रम है: डी
श्री एक्सकोडर

क्या आप एक स्पष्टीकरण जोड़ सकते हैं, या आप अभी भी इसे पहले गोल्फ पर काम कर रहे हैं?
केविन क्रूज़सेन

@ केविनक्रूजसेन गोल्फिंग पहले: डी
हाइपरएनुट्रिनो

1

जावा (ओपनजेडके 8) , 307 + 34 306 + 27 295 बाइट्स

मेरे "दिलचस्प" चुनौती को लेते हैं।

के लिए धन्यवाद केविन Cruijssen के लिए बाइट्स आयात नीचे काटने आयात पूरी तरह से हटाने के!

s->b->{String t=s.replaceAll("\\d","2").replaceAll("[a-z]","0").replaceAll("[A-Z]","1").replaceAll("\\D","3"),v="";int a[]={0,0,0,0},i=0,z=0,y=-1>>>1;t.chars().forEach(j->{a[j%4]++;});for(int x:a){z=x>z?x:z;y=x<y?x:y;}for(;i<s.length();i++)v+=a[t.charAt(i)%4]!=(b?z:y)?" ":s.charAt(i);return v;}

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

स्पष्टीकरण:

String t=s.replaceAll("\\d","2")
          .replaceAll("[a-z]","0")
          .replaceAll("[A-Z]","1")
          .replaceAll("\\D","3")

पहले प्रत्येक समूह को 0 और 3 के बीच पूर्णांक के साथ कुछ सरल रीगेक्स का उपयोग करके बदल देता है और इसे एक नए स्ट्रिंग में संग्रहीत करता है।

int a[]={0,0,0,0},m,i=0,z=0,y=-1>>>1;

आरंभ में पूर्णांकों की एक सरणी के साथ-साथ अन्य पूर्णांकों के एक जोड़े का उपयोग करता है। yअहस्ताक्षरित सही बिट शिफ्ट का उपयोग करके चर को अधिकतम अंतर आकार पर सेट करता है ।

t.chars().forEach(j->{a[j%4]++;});

संशोधित स्ट्रिंग में प्रत्येक वर्ण के लिए, यह वृद्धि करने के लिए पूर्वोक्त सरणी के सूचकांक की गणना करने के लिए अपने ASCII मूल्य modulo 4 का उपयोग करता है।

for(int x:a){
    z=x>z?x:z;
    y=x<y?x:y;
}

यह तब सरणी में संग्रहीत प्रत्येक समूह की गिनती के माध्यम से लूप करता है और न्यूनतम ( y) और अधिकतम ( z) की गणना करता है ।

for(;i<s.length();i++)
    v+=a[t.charAt(i)%4]!=(b?z:y)?" ":s.charAt(i);

स्ट्रिंग में प्रत्येक वर्ण के माध्यम से लूप्स फिर से जाँचता है कि क्या उस वर्ण समूह का समूह न्यूनतम / अधिकतम के बराबर है (पहले उल्लेखित मोडुलो चाल का उपयोग करके)। यदि यह समान नहीं है, तो वर्ण स्थान में नए स्ट्रिंग में एक स्थान जोड़ा जाता है, अन्यथा मूल चरित्र जोड़ा जाता है।

return v;

अंत में नया स्ट्रिंग लौटाएं!


1
मुझसे अच्छा जवाब, +1! गोल्फ के लिए दो छोटी चीजें: import java.util.stream.IntStream;हो सकता है import java.util.stream.*;और ,iइसके ,i=0बाद आप i=0फॉर-लूप से निकाल सकते हैं । ओह, और (s,b)->हो सकता है s->b->
केविन क्रूज़सेन

@KevinCruijssen धन्यवाद! मुझे नहीं पता था कि आप चेन लांबदास को देख सकते हैं
ल्यूक स्टीवंस

इसे करी कहा जाता है। :) आप इसे इस तरह से कर सकते हैं java.util.function.Function<String, java.util.function.Function<Boolean, String>> g = s->b->{...};
केविन क्रूज़सेन

1
ओह, और गोल्फ के लिए एक और बात: IntStream z=IntStream.of(a);m=(b?z.max():z.min()).getAsInt();हो सकता है l=s.length(),x=0,y=lऔर for(int x:a){z=x>z?x:z;y=x<y?x:y;}और (b?z:y), इसलिए तुम अब आयात की जरूरत है। यह सब एक साथ रखना बनता है: s->b->{String t=s.replaceAll("\\d","2").replaceAll("[a-z]","0").replaceAll("[A-Z]","1").replaceAll("\\D","3"),v="";int a[]={0,0,0,0},i=0,l=s.length(),z=0,y=l;t.chars().forEach(j->{a[j%4]++;});for(int x:a){z=x>z?x:z;y=x<y?x:y;}for(;i<l;i++)v+=a[t.charAt(i)%4]!=(b?z:y)?" ":s.charAt(i);return v;}( 294 बाइट्स )
केविन क्रूजेसेन

1
@KevinCruijssen Oooooh अच्छी सोच! मैं इसे बदलने से पहले थोड़ा इंतजार कर सकता हूं जब आप किसी और चीज के साथ आएंगे;)
ल्यूक स्टीवंस

1

बैश, 229 227 212 बाइट्स

LANG=C;g="A-Z a-z 0-9 !A-Za-z0-9";declare -A H
f()(((i=$2?99:-1));r=$1;for h in $g;{ t=${r//[$h]};t=${#t};(($2?t<i:t>i))&&i=$t&&H=([$h]=1);((t-i))||H[$h]=1;};for h in $g;{((${H[$h]}))||r=${r//[$h]/ };};echo "$r")

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


मुझे यकीन नहीं है कि बाश और स्क्वायर-ब्लॉक के आसपास के स्थान बाश में कैसे काम करते हैं, लेकिन यह अभी भी अंतरिक्ष के बिना काम करने लगता हैf(){((
केविन क्रूज़सेन

1
हां, आम तौर पर इसके अलावा स्थान अनिवार्य है (, इसके अलावा , 2 बाइट्स का उपयोग (करने के बजाय {, अपमानजनक प्रदर्शन से बचाया जा सकता है क्योंकि एक
उपधारा

1

PHP, 161 158 बाइट्स

for([,$s,$z]=$argv;~$c=$s[$i++];)foreach([punct,upper,lower,digit]as$f)(ctype_.$f)($c)?$$i=$f:$g[$f]++;while(~$c=$s[$k++])echo$g[$$k]-($z?min:max)($g)?" ":$c;

इसे ऑनलाइन चलाएं -nrया इसके लिए प्रयास करें

  • पहला लूप: प्रत्येक स्थिति के लिए, वर्ण के समूह को याद रखें
    और उन समूहों की घटनाओं को गिनें जो कि वर्तमान वर्ण में नहीं है
    (जो कि निगेटिव ने 3 बाइट्स को बचाया)
  • दूसरे पैरामीटर के आधार पर, सत्य के लिए न्यूनतम गैर-गणना, मिथ्या के लिए अधिकतम गैर-गणना चुनें।
  • दूसरा लूप: यदि (करंट कैरेक्टर का समूह) नॉन-काउंट
    मिन / मैक्स नॉन-काउंट से अलग है तो स्पेस प्रिंट करें, अन्यथा प्रिंट कैरेक्टर।

1
@KevinCruijssen सुनिश्चित करें कि आपके पास नवीनतम PHP संस्करण (7.1.0) चयनित है।
टाइटस

1

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

s=>b=>s.map(c=>++a[g(c)]&&c,a=[0,0,0,0],g=c=>c>-1?0:/[a-z]/i.test(c)?c<"a"?2:1:3).map(c=>a.map(v=>v-Math[b?"max":"min"](...a))[g(c)]?" ":c)

इनपुट और आउटपुट वर्णों की एक सरणी है। इनपुट के लिए वास्तविक बूलियन मान लेता है।

@ नील के उत्तर से एक अलग दृष्टिकोण ; लगभग नियमित अभिव्यक्ति से बचना। इसके बजाय, मैंने प्रत्येक वर्ण की श्रेणी निर्धारित करने के लिए कई चैकों का उपयोग किया:

  • अंक वापस आ जाते trueहैं c>-1क्योंकि गैर-अंक गणितीय तुलनाओं को विफल कर देते हैं
  • अपरकेस अक्षर रेगेक्स से मेल खाते हैं /[a-z]/iऔर कोडपॉइंट से कम हैं"a"
  • लोअरकेस अक्षर मेल खाते हैं जो रेगेक्स लेकिन कोडपॉइंट से कम नहीं हैं "a"
  • उन परीक्षणों में से कोई भी प्रतीक पास नहीं है

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

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