최고 또는 최저 발생?


13

도전:

입력 :

  • 인쇄 가능한 ASCII가 포함 된 문자열 (공백, 탭 및 줄 바꾸기 제외)
  • 부울

산출:

문자열의 부분은 4 개의 그룹으로 나뉩니다.

  • 소문자
  • 대문자
  • 숫자
  • 다른

부울을 기반으로, 우리는이 네 그룹 중 하나 (또는 ​​여러 개)가 가장 많이 발생하거나 가장 낮은 것을 출력하여 다른 모든 것을 공백으로 대체합니다.

예를 들면 다음과 같습니다.

입력 "Just_A_Test!"
내용 :
-3 개의 대문자 : JAT
-6 개의 소문자 : ustest
-0 자리
-3 개의 기타 :__!

이 출력은 다음 truefalse같습니다.

true:   " ust    est "

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

(참고 : 트레일 링 스페이스를 무시하도록 허용되므로, 출력도 할 수 " ust est""". 각각)

도전 규칙 :

  • 입력은 비어하거나 공백을 포함, 만 범위에서 인쇄 가능한 ASCII 구성됩니다 않습니다 33-126또는 '!'통해 '~'.
  • 원하는 경우 입력 및 / 또는 출력을 문자 배열 또는 목록으로 가져올 수 있습니다.
  • 부울에 대해 일관되고 고유 한 두 가지 값이 허용됩니다. 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 무슨 말인지 모르겠어요. 모두 H9은 "적은"의 일부입니다.
Outgolfer Erik

부울 입력 값이 될 수 "max"/ "min"다음으로 사용되는 Math[b]참조하는 Math.max또는 Math.min?
저스틴 마리너

@JustinMariner 아시다시피 .. 그 점에 대해 마음이 바뀌 었습니다. JS에 대한 것 같아요? 많은 프로그래밍 언어가 이와 같은 것을 활용할 수 있다고 생각하므로 너무 많은 기존 답변을 변경해야합니다. 그래서 미안 해요, 당신은 유지해야합니다 b?"max":"min"당신의 대답에 .. 그것은 어쩌면 난 그냥 truthy / falsey 값 다음에 .. 사용해야 같아요 좋은 라인입니다
케빈 Cruijssen

답변:


3

껍질 , 27 26 24 22 바이트

Zgarb 덕분에 -2 바이트

Leo 덕분에 -2 바이트

소요 ' 'False'a'True(Truthy 있습니다에서 껍질, 공백 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

는 술어 p와 목록 을 가져와 만족 L하는 첫 번째 요소를 리턴 하는 함수입니다 . 만족 하는 요소가 없으면 기본 인수가 반환됩니다. 이 경우 . 하나의 문자열에 적용함으로써 본질적으로을 말합니다 .Lpp' 'if p c then c else ' '

함수 소요 함수 f와 두 개의 목록 L1, L2. 그것은의 테이블 반환 f모든 쌍을 통해 적용 L1L2. 이 경우에는 f, L1(4 개) 기능 우리 목록이며, L2하나의 문자열의리스트이다.

Ṫḟ각 문자열은 규칙 중 하나를 만족하지 않는 문자를로 대체 한 결과 인 문자열 목록을 얻은 후 ' '입니다.

NB : 최신 버전의 Husk에서는 3 바이트를 절약 ġ#¬Ö#≡⁰할 수 있습니다 k#≡⁰.


호기심에서 : 왜 ' '그리고 'a'? 허 스크를 읽을 수 없기 때문에 설명을 추가하면 더 잘 이해할 수 있습니다. ;)
Kevin Cruijssen

좋은! 여기 24 바이트 사용은 .
Zgarb

@Zgarb 감사합니다! 난 정말 이해하지 않았다 Mmm: 자신을하고 있었다
H.PWiz

불행히도 이것은 골프에 실제로 도움이되지 않지만 다음과 S`?' 같이 간단 할 수 있습니다.?IK'
Leo

나는 사용하지 않는 경향이 I있으며 때로는 통역사가 영원히 걸리게합니다. 또한 낭비되는 것 같습니다.
H.PWiz

7

젤리 , 31 바이트

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

온라인으로 사용해보십시오!

부울 값은 다음 21(또는 다른 긍정적 / 홀수 쌍)이 대표하는 True그리고 False각각. 추가 골프 후 설명을 추가하려고합니다.

2 바이트를 절약 한 caird coinheringaahing 과 4 바이트를 절약 한 Lynn 에게 감사 합니다! Erik의 트릭 중 하나 덕분에 4 바이트를 절약 할 수있었습니다!

작동 원리

35 바이트 버전에 대한 설명입니다. 새로운 것은 거의 동일하지만 (Lynn이 약간 조정 했으므로) 변경하지는 않습니다.

Ø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.


트윗 담아 가기 :) 나는 부분은 지금까지 내가 대답을 게시하기 때문에 것을 골프 싶었지만, 그것이 작동하지 않았다 왜 이해할 수 없었다 ... 나는 외부했다 µ: D
씨 Xcoder

31 바이트 : 클래스를로 생성 ØṖḟØBṭØBUs26¤한 다음 대신 fÇ대신 멤버십을 테스트하십시오 e¢$.
Lynn


5

R , 193 186 179 158 바이트

NofP와 그의 제안 덕분에 -7 바이트 cbind

사용 바이트 -2 outer, -1 바이트 전환 [^a-zA-Z0-9]하여[[:punct:]]

문자 목록을 지적한 MickyT 덕분에 -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/Ttruthy로 ( max)와 0/Ffalsey 등 ( min), 및 소요 S단일 문자의 목록으로.

온라인으로 사용해보십시오!

내 원래 버전 (NofP의 제안과 함께)에서 행렬 ygrepl(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", S), g ( "[^ a-zA-Z0-9]", S))
NofP

@NofP 아, 아주 좋아요. 또한 백틱 (`)으로 코드를 둘러 싸서 표시되도록 할 수 있습니다 like this. :)
Giuseppe

규칙은 문자 배열 또는 목록을 입력으로 사용할 수 있다고 S=el(strsplit(G,""))
명시

@MickyT 아, 나는 그것을 간과했습니다, 감사합니다.
주세페

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)

온라인으로 사용해보십시오!

Jonathan Frech는 바이트를 저장했습니다. 감사!

최고는 m=-1가장 낮은이며, m=0.


1
나는 당신이 대체하여 바이트를 저장할 수 있다고 생각 +x.isalpha()*-~(x>'Z')과 함께 -~(x>'Z')*x.isalpha().
Jonathan Frech


3

자바 (오픈 JDK 8) , 448 (439) 432 362 361 354 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 바이트 +\\|+$대한 입력을 제거 할 수 있습니다 .
Kevin Cruijssen

마지막 부분을로 변경하여 3 바이트를 더 절약 할 수 있습니다 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(".$","")," ");}.
Kevin Cruijssen

아, 추가로 -4 n=s.length()가 될 수 있습니다 n=-1>>>1.
Kevin Cruijssen

아, 골프에 한 가지 더 작은 것 : [0-9]->\\d
Kevin Cruijssen

3

루비 , 118116 바이트

두 번째 인수로 (가장 0낮음) 또는 -1(가장 높음)을 취 합니다.

Lynn 덕분에 -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:" "}}

온라인으로 사용해보십시오!

언 골프

->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].
Lynn

3

파이썬 2 190 183 174 173 바이트

짧게 해준 Jonathan Frech에게 감사합니다

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)'true와 false있다. (이것이 규칙을 위반한다고 생각하지 않습니다 ...?) 이것은 다른 두 개의 파이썬 답변보다 길지만 다르므로 게시 할 것이라고 생각했습니다. 나는 훌륭한 골퍼가 아니기 때문에 이것이 더 향상 될 수 있다고 생각하지만 내가 시도한 모든 것이 효과가 없었습니다.

온라인으로 사용해보십시오!


안녕하세요, 사이트에 오신 것을 환영합니다! 이것을 실행하려고하면 오류가 발생하며 이유가 확실하지 않습니다. 하나의 이유는 될 수 sum(1for m...있어야한다 sum(1 for m...,하지만 난 다른 문제도 있다고 생각합니다. 온라인 통역사 (예 : tio )에 대한 링크를 제공하여 전화를 거는 방법을 설명하고 오류가 아님을 보여줄 수 있습니까?
James

@DJMcMayhem 방금 링크를 추가했습니다. 링크를 제공해 주셔서 감사합니다. 거기에서 실행할 때 오류가 발생하지 않습니다.
dylnan

아, 나는 당신이 입력 max(l)하고 min(l)문자열로 말할 수 없었기 때문에 오류가 발생했습니다. 정리해 주셔서 감사합니다! 지금은 이것이 규칙 # 3 위반의 가장자리에 있지만`이 뚜렷한 값은 (어느 정도) 부울로 사용해야하지만, 분명히 회색 영역입니다.
James

BTW, 여기 TIO 프로 팁이 있습니다. 바닥 글 필드 에 함수 호출을 넣으면 바이트 수에 포함되지 않으므로 답의 길이를 쉽게 확인할 수 있습니다. 온라인으로 시도하십시오!
James

@DJMcMayhem 아 감사합니다. 나는 그것이 회색 영역이라고 동의합니다. 나는 'max'와 'min'을 true false로 취할 수 있으며 eval (c + '(l)')을 수행하면 6 바이트가 추가되고 더 수용 가능한 것처럼 보이지만 OP가 내 대답을 허용하지 않을 때까지 괜찮습니다.
dylnan

2

자바 스크립트 (ES6) 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

자바 (OpenJDK 8) , 307 + 34306 + 27 295 바이트

나의 "흥미로운"도전을 받아들입니다.

가져 오기 바이트를 줄여 가져 오기를 완전히 제거한 Kevin 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부호없는 오른쪽 비트 시프트를 사용하여 변수를 최대 int 크기로 설정합니다 .

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->.
Kevin Cruijssen

@KevinCruijssen 감사합니다! 나는 람다
Luke Stevens

카레라고합니다. :) 당신은 이렇게 할 수 있습니다 java.util.function.Function<String, java.util.function.Function<Boolean, String>> g = s->b->{...};.
Kevin Cruijssen

1
아, 그리고 골프 IntStream z=IntStream.of(a);m=(b?z.max():z.min()).getAsInt();할 또 다른 것 : l=s.length(),x=0,y=lfor(int x:a){z=x>z?x:z;y=x<y?x:y;}and (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")

온라인으로 사용해보십시오


Bash에서 대괄호와 사각형 블록 주위의 공백이 어떻게 작동하는지 잘 모르겠지만 여전히 공백없이 작동하는 것 같습니다f(){(( .
Kevin Cruijssen

1
네, 공간은 일반적으로 제외 필수입니다 (또한 2 바이트를 사용하여 저장 될 수 (대신 {서브 쉘을 생성하기 때문에, 성능을 저하
나우 Fouilleul을

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하거나 사용해보십시오 .

  • 제 1 루프는 각 위치에 대해, 문자의 그룹을 기억
    하고, 현재의 글자가 있음 기의 발행 수를 계산 하지 있다.
    (부정 3 바이트를 저장 한)
  • 두 번째 매개 변수에 따라 진실성에 대해서는 최소 비 카운트, 허위에 대해서는 최대 비 카운트를 선택하십시오.
  • 두 번째 루프 : (현재 문자 그룹) 비 카운트
    가 최소 / 최대 비 카운트와 다른 경우 인쇄 공간, 그렇지 않으면 문자를 인쇄하십시오.

1
@KevinCruijssen 최신 PHP 버전 (7.1.0)을 선택했는지 확인하십시오.
Titus

1

자바 스크립트 (ES6), 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)

입력 및 출력은 문자 배열입니다. 입력에 실제 부울 값을 사용합니다.

@Neil의 답변 과 다른 접근법 ; 정규 표현식을 거의 피하십시오. 대신 일련의 검사를 사용하여 각 문자의 범주를 결정했습니다.

  • 숫자가 아닌 숫자는 수학 비교에 실패 true하기 c>-1때문에 숫자가 반환 됩니다.
  • 대문자는 정규식 /[a-z]/i과 일치하며 코드 포인트가"a"
  • 소문자는 정규식과 일치하지만 코드 포인트는 다음과 같습니다. "a"
  • 기호는 해당 테스트를 통과하지 못합니다

테스트 사례

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.