같은 숫자의 글자


19

단어의 글자는 공정성을 원합니다.

그들은 문장에서 같은 횟수로 똑같이 나타나기로 결정했습니다.

예:

Priorities

될 것입니다:

Ppprrioooritttieeesss

가장 일반적인 글자는 3 번 나타나며 각 글자는 3 번 나타납니다 i.

비슷한 글자 옆에있는 한 반복되는 글자를 어디에 두는지는 중요하지 않습니다.

즉 :

Pppriooorritttieeesss OK ( 'r'문자)

Ppprioororitttieeesss OK가 아닙니다 ( 'r'문자)

또 다른 예:

invoice

될 것입니다:

innvvooiccee

또 다른 예:

Remittance Advice

될 것입니다:

Rrremmmiitttaannncce Adddvvvice

공백, 쉼표, 물음표, 인용 등은이 과제의 문자로 간주되지 않습니다. [a-zA-Z] 만 고려하면됩니다. 공간이 충분하면 글자의 순서는 동일하게 유지되어야합니다.

대문자는 중요하지 않으며 대문자와 소문자는 같은 문자로 계산됩니다. 즉, Pip2 'P'와 1 'I'를 갖습니다 Piip.

대소 문자를 구분하지 않는 문자는 모든 형태가 될 수 있습니다. Piip=piip=piiP=PiiP

이것은


2
질문을 메인에 게시하기 전에 모든 세부 사항을 정리하는 데 도움이되는 향후 과제에 샌드 박스 를 사용하는 것이 좋습니다.
Jo King

주어진 예에서 "rrreeemmmiiitttaaannncccdddvvv"가 허용 가능한 출력 입니까 (az로 정의 된 고유 문자 의 순서 가 계속 유지되므로)? (제 젤리의 대답은 현재이 해석은 괜찮다는 것입니다.)
Jonathan Allan

1
@JonathanAllan Hmm, OP에 대한 선택을 떠나지 만 의심합니다. 문자가 아닌 문자 (공백)는 사라 졌을뿐만 아니라 모든 문자를 같은 장소에 두지 않고 서로 옆에 두었습니다. 당신의 결과물은 도전을 다양하고 쉽게 만듭니다 (imho).
Kevin Cruijssen

1
@KevinCruijssen 공간은 왼쪽에 있습니다 – 문자가 아니므로 " 문자 순서가 동일해야합니다"
Jonathan Allan

1
@JonathanAllan Ah, 내 공간을 알지 못했습니다. 나는 당신이 당신의 Jelly 답변에 제공 한 추론을 완전히 이해하고 그것이 실제로 유효한 결과라는 것을 기반으로하지만, 어구 자체가 완전히 바뀌기 때문에 문구가 변경 된 다음 출력을 허용하는 것이 좋습니다.
Kevin Cruijssen

답변:


5

05AB1E , 16 바이트

lDáÙSйls¢Zα>×.;

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

설명

l                  # convert input to lowercase
 D                 # duplicate
  á                # keep only letters
   Ù               # remove duplicates
    S              # split to list of chars
     Ð             # triplicate
      ¹ls¢         # count the occurrences of each letter in lowercase input
          Zα       # absolute valuue with max occurrence
            >      # increment
             ×     # repeat each unique char that many times
              .;   # replace the first occurrence of the char in lowercase input with this

7

R , 106 바이트

function(s){for(A in L<-LETTERS)s=sub(A,strrep(A,max(x<-+s-+Map(gsub,L,'',s,T))-x[A]--1),s,T);s}
"+"=nchar

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

기본 R 접근 :

  • @ J.Doe R + stringr 접근법 에서 아이디어를 훔쳐서 26 바이트를 절약했습니다!
  • R +연산자 를 남용하기 위해 @ J.Doe 제안을 사용하여 저장된 5 바이트

나는 당신이 base-R과 함께 111에 도착했다는 것에 감동합니다!
J.Doe

J.Doe @ : 내 원래 137이 솔루션을 바이트 게시 한 후, 나는 약간 나의 접근 방식은 당신에 의해 영감을 변경, 나는 기본적으로 그냥 stringr 제거와 함께, 솔루션에 통합 : D
digEmAll

1
운영자 남용으로 106 바이트 . Base-R이 승리합니다!
J.Doe

@ J.Doe : 굉장해!
digEmAll

5

펄 6 , 82 바이트

nwellnhof 덕분에 -3 바이트

->\a{a.=lc.=subst($_,$_ x a.comb(/<:L>/).Bag.values.max+1-a.comb($_))for 'a'..'z'}

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

변경 가능한 문자열을 가져 와서 수정합니다.

설명:

->\a{        # Anonymous code block that takes a mutable string            }
 a.=lc;  # Lowercase
                                                               for 'a'..'z'  # For each letter
 .=subst(                                                    )  # Substitute
          $_,   #The first occurrence of the letter with
             $_ x  #The letter repeated
                  a.comb(/<:L>/).Bag.values.max    # The count of the most common letter
                                                 +1  # Plus 1
                                                   -a.comb($_)  # Minus the count of that letter already in the string

.=연산자를처럼 연결할 수 있습니다 a.=lc.=subst(...). 그래도 기존 편지의 대소 문자 변경이 허용되는지 확실하지 않습니다. 또한 <:L>대신에 <:Ll>.
nwellnhof

@nwellnhof 그래, asker는 출력이 대소 문자를 구분하지 않는다고 말한다
Jo King

5

자바 스크립트 (ES6), 112 바이트

s=>(m=g=F=>s.replace(/[a-z]/gi,c=>F(c.toLowerCase())))(c=>g[c]=c+c.repeat(m-g[c]),g(c=>m=(n=g[c]=-~g[c])<m?m:n))

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

댓글

s => (                       // s = input string
  m =                        // m = max. number of occurrences of the same letter
  g = F =>                   // g = helper function taking a callback function F
    s.replace(               //     (also used to store the # of occurrences of each letter)
      /[a-z]/gi,             //   for each letter c in s:
      c => F(                //     invoke F():
        c.toLowerCase()      //       with c.toLowerCase()
      )                      //     end of call to F()
    )                        //   end of replace()
)(c =>                       // invoke g() (second pass):
  g[c] =                     //   update g[c] to a non-numeric value
    c +                      //   append c once, unconditionally
    c.repeat(m - g[c]),      //   and append c as many times as required to reach m
                             //   (any subsequent iteration with the same letter will
                             //   lead to c.repeat(m - g[c]) --> c.repeat(NaN) --> '')
  g(c =>                     //   invoke g() (first pass):
    m = (n = g[c] = -~g[c])  //     increment g[c], save the result in n
      < m ? m : n            //     and update m to max(m, n)
  )                          //   end of first pass
)                            // end of second pass

내 JS 기술이 빨라서이 부분에 대해 약간 혼란 스럽습니다 o[l] = // updates o[l] to a non-numeric value. 올바르게 이해 o하면 Fg함수 에 정수 배열이 있지만 c앞에서 언급 한 부분에서 문자 를 한 번 이상 보유하는 문자열 배열로 변경 됩니까? 의 또한, 나는 값을 추측 o이다 undefined기본적으로 사용하고 있기 때문에, o[l]=-~o[l]대신 ++o[l]?
Kevin Cruijssen

1
@KevinCruijssen 각 문자가 최대 한 번만 채워지 길 원합니다. o[l]문자 로 업데이트 하면 동일한 문자를 사용하는 후속 반복은 m - o[l] --> NaN(정수 빼기 문자) 및로 이어 l.repeat(NaN) == ''집니다. (마지막 요점 : 예, 맞습니다.)
Arnauld

아 알겠습니다. 설명해 주셔서 감사합니다! :)
Kevin Cruijssen

(그리고 나는 문자 보다는 문자열을 말해야한다 )
Arnauld

5

J , 33 56 46 바이트

t=:~:tolower
(#~1+t*~:(*>./-])t*1#.e.)@toupper

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

~:tolower두 번 사용하지 않는 방법을 찾을 수 없습니다 .

작동 원리

t=:~:tolower    Auxiliary function: isupper
     tolower    Is lowercase version of itself...
   ~:           different from itself?

(#~1+t*~:(*>./-])t*1#.e.)@toupper    Main function
                          toupper    Convert to uppercase
                      e.     Build 2D array by comparing to itself
                   1#.       Row-wise sum; Count occurrences
                 t*     A) Filter by isupper (needed for finding max count)
           >./-]        Compute max of A) minus each element of A)
       ~:          Nub sieve; 1 if first occurrence, 0 otherwise
          *        Filter first occurrences only
     t*       Filter by isupper again, to ban non-alphabets from duplicating
   1+         Add one to preserve given chars
 #~           Duplicate

5

R + 스트링거, 108 바이트

나는 잘하지 않습니다 stringr. 문제가 중요하지 않기 때문에 소문자와 대문자를 혼합하여 반환합니다.

function(x){for(l in L<-letters)x=sub(l,strrep(l,max(s<-stringr::str_count(tolower(x),L))-s[L==l]+1),x,T);x}

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

설명

function(x){
for(l in letters){ # Iterate through builtin vector "a", "b", "c"...
   # Generate a 26-long integer vector for how many a's, b's, c's in lower case string
  s = stringr::str_count(tolower(x),letters)
    # Take the max of this
  m = max(s)
    # Repeat the letter in the iteration enough times to make the word 'fair'
  new.l = strrep(l,m-s[letters==l]+1)
    # Substitute the first instance only of the letter in the string for the repeated letter
    # This is case insensitive (the T at the end)
    # Notice we calculate the max letter frequency each loop
    # This is inefficient but doesn't change the answer and avoids bytes
  x=sub(l,new.l,x,T);
  }
x # Return the substituted string
}

3

K4 , 35 바이트

해결책:

{x@o@<o:(&^x),/(|/#:'g)#'g:" "_=_x}

예 :

q)k){x@o@<o:(&^x),/(|/#:'g)#'g:" "_=_x}"Priorities"
"PPPrrioooritttieeesss"
q)k){x@o@<o:(&^x),/(|/#:'g)#'g:" "_=_x}"invoice"
"innvvooiccee"
q)k){x@o@<o:(&^x),/(|/#:'g)#'g:" "_=_x}"Remittance Notice"
"RRRemmmiittaaanncce Noootice"

설명:

다른 접근 방식으로 골프를 칠 수 있으며 계속 생각할 것입니다.

{x@o@<o:(&^x),/(|/#:'g)#'g:" "_=_x} / the solution
{                                 } / lambda taking implicit argument x
                                _x  / lowercase input
                               =    / group
                           " "_     / drop space from keys
                         g:         / save as g
                       #'           / take each
               (      )             / do this together
                  #:'g              / count occurances in each group
                |/                  / take the maximum
             ,/                     / flatten with
        (&^x)                       / indices where input is null (ie " ")
      o:                            / save as o
     <                              / indices to sort o ascending
   o@                               / apply these to o
 x@                                 / apply these indices to original input

3

, 33 32 바이트

⭆↧θ⁺§θκ×ι∧№βι∧⁼κ⌕↧θι⁻⌈Eβ№↧θλ№↧θι

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

  θ                                 Input string
 ↧                                  Lower case
⭆                                   Map over characters and join
      κ                             Current index
     θ                              Input string
    §                               Original character
   ⁺                                Concatenate with
        ι                           Lowercased character
       ×                            Repeated
            ι                       Lowercased character
           β                        Lowercase alphabet
          №                         Count
         ∧                          Logical And
                   ι                Lowercased character
                  θ                 Input string
                 ↧                  Lower case
                ⌕                   Find
               κ                    Current index
              ⁼                     Equals
             ∧                      Logical And
                       β            Lowercase alphabet
                      E             Map over characters
                           λ        Current character
                          θ         Input string
                         ↧          Lower case
                        №           Count
                     ⌈              Maximum
                    ⁻               Minus
                               ι    Lowercased character
                              θ     Input string
                             ↧      Lower case
                            №       Count
                                    Implicitly print

3

자바 11 190 176 162 바이트

s->{s=s.toUpperCase();char m=2,i=64,a[]=new char[127];for(int c:s.getBytes())m-=m+~++a[c]>>-1;for(;++i<91;)s=s.replaceFirst(i+"",repeat((i+""),m-a[i]));return s;}

@Nevay 덕분에 -14 바이트 .

출력은 전체 대문자입니다.

온라인으로 사용해보십시오. (참고 : Java 11은 아직 TIO가 아니기 때문에 동일한 바이트 수에 대해 String.repeat(int)에뮬레이트됩니다 repeat(String,int).)

설명:

s->{                      // Method with String as both parameter and return-type
  s=s.toUpperCase();      //  Convert the input-String to full uppercase
  char m=2,               //  Max occurrence (+1), starting at 2
       i=64,              //  Index integer, starting at 64 ('A'-1)
       a[]=new char[127]; //  Create a count-array of size 127 (printable ASCII chars)
  for(int c:s.getBytes()) //  Loop over the characters of the String as integers
    m-=m+~++a[c]>>-1;     //   Increase the occurrence-counter of the char by 1 first
                          //   And if it's larger than the max-2, increase the max by 1
  for(;++i<91;)           //  Loop `i` in the range ['A', 'Z']
    s=s.replaceFirst(i+"",//   Replace the first char `i` in the string with:
       (i+"").repeat(     //   That same character repeated
        m-a[i]));         //   The max(+1) minus its array-occurrence amount of times
  return s;}              //  Then return the now modified String as result

바이트에 var를 사용할 수 있습니까?
Quintec

@Quintec char당신 대신에 ? 불행하게도. var단일 필드에만 사용할 수 있습니다. 그래서 대신 char m=1,i=127,a[]=new char[i];이 될 것이다 var m=1;var i=127;var a=new char[i];. 여기 Java 10으로 할 수있는 것과 할 수없는 것에 대한 유용한 팁이 있습니다 var. (나는 대체 할 수 int와 루프에 var있지만, 바이트 수는 동일하게 유지됩니다.)
케빈 Cruijssen에게

감사합니다 아직도 Java 9/10/11이 어떻게 작동하는지 전혀 모른다. haha, 나는 8; p
Quintec

@Quintec Java 9 나는 또한 그 REPL에 중점을두기 때문에 실제로 얻지 못했습니다. Java 10은를 제외하고 Java 8과 대부분 동일합니다 var. 그리고 Java 11은 String.repeat이미 많은 시간을 사용한 방법을 제외하고는 모든 코드 골프 관련 변경 사항이 거의 없습니다 . 또한 새가 String.stripLeadingString.stripTrailing처럼 행동하는, trim하지만 선도 / 후행 공백을, 그리고 String.isBlank()같은 인 String.trim().isEmpty()(비어 있거나 공백 만 해당).
Kevin Cruijssen

1
-14 바이트 :s->{s=s.toUpperCase();char m=2,i=91,a[]=new char[127];for(int c:s.getBytes())m-=m+~++a[c]>>-1;for(;i-->65;)s=s.replaceFirst(i+"",repeat((i+""),m-a[i]));return s;}
Nevay

3

apt -h , 27 바이트

@ETHproductions에서 -3 바이트

;v
ñ oC ó¥ ú £=iXÎpXèS)UbXg

설명하려고

;v                          Convert implicit input to lowercase
ñ oC ó¥ ú £=iXÎpXèS)UbXg      Main function. Implicit lowercase input => "priorities"
ñ                           Sort => "eiiioprrst"
 oC                         Remove non alphabetical chars
   ó¥                       Split on different letters => ["e","iii","o","p","rr","s","t"]
     ú                      Right-pad each to the length of the longest with space => ["e  ","iii","o  ","p  ","rr ","s  ","t  "]
       £                    For each X in this array:
             XèS              Count the number of spaces in X
          XÎ                  Get the first character in X
            p   )             Repeat it (number of spaces) times
                              example the mapped value "e  " will become "ee"
         i                    Insert this into U at
                 UbXg           the first index of (first character in X) in U
        =                     Set U to the result

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


1
: 당신이 생각하지 않았 으면, 나는 (P 대해 10 개 문자를 설명했다 한 줄 한 번에했던 것을) 설명의 일부를 확대 ú트릭 :-) BTW, 천재
ETHproductions

@ETHproductions 감사합니다. 영어에 임 너무 좋지 않다 덕분에 너무
루이스 펠리페 드 예수님 무 노즈

1
불행히도, 문자가 아닌 문자가 포함되어 있으면 변경되지 않는 것 같습니다. 간단한 수정은 삽입하는 것 ñ oC ó¥그것이 다시 추가 필요하지만, ;...
ETHproductions

언제부터 ñ문자열 작업을 했습니까 ?! @ETHproductions, 그것이 최근에 추가 된 것임을 알려주세요. 그리고 이번에는 그것을 간과하지 않았습니다!
Shaggy

@Shaggy 분명히 2.5 개월 전 이었지만 걱정할 필요조차 없습니다. 심지어이 답변이있을 때까지 존재하지 않았습니다. ;-)
ETHproductions

2

루비 , 89 바이트

->s{1while(a=s.scan /\w/).map(&g=->x{s.scan(/#{x}/i).size}).uniq[1]&&s[a.min_by &g]*=2;s}

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

다른 접근법을 시도했지만 실제로 많은 바이트를 절약하는 것은 한 번에 한 문자를 추가하는 것입니다.

어떻게:

->s{
    1while                             # 1 is a nop to the while
    (a=s.scan /\w/)                    # For all the letters in the string
    .map(&g=->x{s.scan(/#{x}/i).size}) # Count occurrences ignoring case.
    .uniq[1]                           # Break out of loop if all equals
    &&s[a.min_by &g]*=2                # Otherwise duplicate the letter
                                       #  with the lowest count
    ;s}                                # Return the string

2

Powershell 6, 123 바이트

char 범위를 사용합니다 'a'..'z'. 아래의 이전 Powershell 스크립트를 참조하십시오.

param($s)for(;'a'..'z'|%{
if($d=($s-replace"[^$_]").Length-$n){if($d-gt0){1}else{$s=$s-replace"^(.*$_)","`$1$_"}}}){$n++}$s

설명 된 테스트 스크립트 :

$f = {

param($s)                               # a parameter string
for(;                                   # loop while exists at least one letter...
'a'..'z'|%{                             # for each letter
    $d=($s-replace"[^$_]").Length-$n    # let $d is a difference between a number of current letter and current $n 
    if($d-gt0){                         # if the difference > 0
        1                               # then return a object to increase $n on next iteration
    }
    if($d-lt0){                         # if the differenct < 0
        $s=$s-replace"^(.*$_)","`$1$_"  # append the current letter after a last instance of the letter. Use "^(.*?$_)" regexp to append it after a first instance of the letter.
    }
}){
    $n++                                # increment $n if exists at least one letter number of witch greather then $n
}                                       # and make next iteration of the 'for'.

$s                                      # return modified string if all letters in the string occur the same number of times

}

@(
    ,('Priorities', 'Ppprrioooritttieeesss', 'PPPriooorritttieeesss')
    ,('invoice', 'innvvooiccee')
    ,('Remittance Advice', 'Rrremmmiitttaannncce Adddvvvice', 'RRRemmmitttannnce Aadddvvviicce')
) | % {
    $s,$e = $_
    $r = &$f $s
    "$($r-in$e): $r"
}

산출:

True: Pppriooorritttieeesss
True: innvvooiccee
True: Rrremmmitttannnce Aadddvvviicce

Powershell 5.1-133 바이트

param($s)for(;97..122|%{$_=[char]$_
if($d=($s-replace"[^$_]").Length-$n){if($d-gt0){1}else{$s=$s-replace"^(.*$_)","`$1$_"}}}){$n++}$s

2

빨강 , 252 바이트

func[s][a: charset[#"a"-#"z"#"A"-#"Z"]t: parse s[collect[any[keep a | skip]]]m: copy
#()foreach c t[c: form c either n: m/:c[m/:c: n + 1][m/:c: 1]]d: last sort extract next
to-block m 2 foreach c s[prin c: form c if n: m/:c[loop d - n[prin c]m/:c: d]]]

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

엄청나게 긴 해결책 ...

설명:

f: func [ s ] [
    a: charset [ #"a" - #"z" #"A" - #"Z" ]   ; letters
    t: parse s [                             ; parse the string 
        collect [ any [ keep a | skip ] ]    ; and keep only the letters
    ]
    m: copy #()                              ; initialize a map
    foreach c t [                            ; for each character in t
        c: form c                            ; the character as a string
        either n: select m c [ m/:c: n + 1 ] ; increase the count if already in map
                             [ m/:c: 1 ]     ; otherwise create a map entry with count 1 
    ]
    d: last sort extract next to-block m 2   ; convert the map to a block; extract only the 
                                             ; numbers and take the last of the sorted block
    foreach c s [                            ; for each character in the input
        c: form c                            ; the character as a string
        prin c                               ; print it (with no space nor newline)
        if n: select m c [                   ; if c is a key in the map
            loop d - n [ prin c ]            ; print the character again up to d times 
            m/:c: d                          ; set the count to max (flag it as used)
        ]
    ]
]

2

자바 스크립트 (Node.js를) , 140 (137) 바이트

x=>[...x=x.toLowerCase()].map(F=c=>(F[c]=-~F[c],F[c]>w?w=F[c]:w,c),w=0).map(c=>x=x.replace(c,c.repeat(c>'`'&c<'{'?w-F[c]+1:1),F[c]=w))&&x

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

끝없는 추가 제약 조건에 대한 첫 번째 솔루션에서 +33 바이트. JS는 대소 문자를 구분하지 않는 문자열 조작을 빨아들입니다.

-3 bytes back @Arnauld 감사합니다.

설명

x =>                                     // The function.
  [...x = x.toLowerCase()].map(f = c => (// - Iterate among each character...
                                         // - Additional constraint 2
    f[c] = -~f[c],                       //   - Add one to the character counter
    f[c] > w ? w = f[c] : w,             //   - Update the maximum count if necessary
    c                                    //   - Return back the character for the use in
                                         //     the next map function
  ), w = 0)                              // - The counters
  .map(c =>                              // - Iterate again...
    x = x.replace(                       //   - Repeat the first appearance of
      c,                                 //   - Each character
      c.repeat(                          //   - Needed number times
        c > '`' & c < '{'                //   - Additional constraint 1
        ? w - f[c] + 1                   //   - If this is letter, repeat
        : 1                              //   - If not, stay as is
      ),                                 //   - That should've been clearly stated
      f[c] = w                           //   - And set the counter so that no further 
                                         //     replacements are done on this character 
    )                                    //   - (w - f[c] + 1 = 1 in further iterations)
  ) && x                                 // - Return the result

솔루션은 대소 문자 혼합 입력을 처리 할 수 ​​있어야합니다.
Shaggy

@Shaggy 난 당신의 의견 후에 도전이 편집되었다고 생각합니다. 출력의 경우는 중요하지 않은 것 같습니다.
Arnauld

반면에 함수는 재사용 할 수 있어야하지만 여기서는 그렇지 않습니다.
Arnauld

@Arnauld 오 가끔 fs를 임시 저장소로 사용 하는 것을
보았으므로

map()콜백 함수는 로컬 범위에 정의되어 있으므로 스토리지에 안전하게 사용할 수 있습니다. 전역 적으로 정의 된 주요 기능을 사용하는 것이 더 위험합니다. 여기서 첫 번째 콜백을 사용하면 137 바이트로map() 돌아갑니다 .
Arnauld

2

껍질 , 15 바이트

ḟ§Ë#f√MṘO´πL¹m_

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

무차별 대입이 너무 느려

설명

ḟ§Ë#f√MṘO´πL¹m_  Implicit input, say s = "To do"
             m_  Convert to lowercase: t = "to do"
           L¹    Length of s: 5
         ´π      All length-5 combinations of [1..5]:
                   [[1,1,1,1,1], [1,1,1,1,2], [2,1,1,1,1], ..., [5,5,5,5,5]]
        O        Sort them lexicographically:
                   [[1,1,1,1,1], [1,1,1,1,2], [1,1,1,1,3], ..., [5,5,5,5,5]]
      MṘ         For each, replicate letters of t that many times:
                   ["to do", "to doo", "to dooo", ..., "tttttooooo     dddddooooo"]
ḟ                Find the first string that satisfies this:
                   Example argument: x = "tto ddo"
    f√             Letters of x: "ttoddo"
  Ë                They have equal
 § #               number of occurrences in x: true (all have 2).

전혀 결과를 얻지 못했습니다
asmgx

@asmgx 프로그램이 정말 느립니다. 길이가 8 이상인 입력의 경우 TIO에서 시간 초과되는 것 같습니다. 1 분 후에 계산이 종료되기 때문입니다. 오프라인 인터프리터는 충분히 오래 기다리면 결과를 제공해야합니다 (길이 -10 입력의 경우 몇 시간 정도).
Zgarb

2

펄 6 , 77 70 바이트

{s:i|$($!.min(*{*}).key)|$/$/|until [==] ($!=.lc.comb(/<:L>/).Bag){*}}

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

모든 문자가 같은 횟수로 나타날 때까지 문자를 삽입하는 GB의 접근. 내부에서 수정 된 문자열을받습니다.

밑줄을 문자처럼 처리 할 수 ​​있으면 정규식이 /\w/2 바이트 가되어로 바뀔 수 있습니다 .

설명

{
                    .lc.comb(/<:L>/).Bag          # Create Bag of letter/count pairs
                ($!=                    )         # Store temporarily in $!
 ... until [==]                          .values  # Until all counts are equal
 s:i|                      |    |                 # Replace (ignoring case)
     $($!.min(*.value).key)                       # letter with minimum count
                            $/$/                  # with itself doubled
}

@ JoKing {*}트릭을 발견하기 전에 개선 사항이 이전 버전을 기반으로 한 것 같습니다 .
nwellnhof

그래서 바로 가기 등의 "가 있다고 .value(s)? 그것이 깔끔한, 나는 나의 오래된 솔루션의 일부를 업데이트해야 할 수 있습니다
조 국왕


1

C (연타) , 246 (223) 220 210 208 193 188 바이트

컴파일러 플래그 -DF=;for(i=0;b[i];i++ -DB=b[i](29 바이트)

대소 문자 지원이 추가되었습니다.

f(char*c){char m,i,s,*b,a[255]={0};s=asprintf(&b,c)F)B=tolower(B),a[B]++F,a[B]>a[m]?m=B:0)F)a[B]^a[m]?b=realloc(b,s+i),bcopy(&B,b+i+1,s),a[B]++:(m=B);puts(b);}

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


1

Pyth, 31 30 바이트

JeSm/Qd=r0QVQ=tQ=+k*N-J/+kQN)k

여기 사용해보십시오

설명

JeSm/Qd=r0QVQ=tQ=+k*N-J/+kQN)k
       =r0Q                        Convert input to lowercase.
JeSm/Qd                            Find the count of the most common character.
           VQ               )      For each character in the input...
             =tQ                   ... remove that character from the input...
                =+k*N-J/+kQN       ... append copies to k until we have enough.
                             k     Output.

1

C (GCC) -175 바이트

f(char*s){int c[999]={0},i=0,m=0,k,L;while((L=s[i++])&&(k=++c[L<97?L+32:L]))m=k>m?k:m;i=0;while(L=s[i++])for(L=L<97&&L>64?L+32:L,putchar(L);isalpha(L)&&++c[L]<=m;)putchar(L);}

언 골프

f(char *s) {
  int c[999]={0},i=0,m=0,k,L;                      // Array used like a dictionary, temp vars
  while((L=s[i++])&&(k=++c[L<97?L+32:L]))          // store letter counts
    m=k>m?k:m;                                     // calculate max occurance
  i=0;                                             // reset string index
  while(L=s[i++])                                  // iterate string
    for(L=L<97&&L>64?L+32:L,putchar(L);isalpha(L)&&++c[L]<=m;) // set character L to lowercase if in alphabet, print always once, repeat if in alphabet
      putchar(L);                                  // print character
}

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


0

코 틀린 안드로이드, 413 바이트

var l: List<Char> = w.toList().distinct();val h = HashMap<Char, Int>();var x='m';var n=0;for(z in l.indices){var c=0;for (i in 0.rangeTo(w.length-1)){if(l[z]==(w[i]))c++};h.put(l[z],c);if(n<c){n=c}};for(entry in h){h.replace(entry.key,n-entry.value)};var v=ArrayList<Char>();for(i  in 0.rangeTo(w.length-1)){if(h.containsKey(w[i])){for(p in 0.rangeTo(h.get(w[i])!!)){v.add(w[i])};h.remove(w[i])}else{v.add(w[i])}}

온라인으로 시도

1 단계-> 고유 문자 목록을 선택하십시오. 2 단계-> 문자열의 모든 문자 수를 가져오고 최대 문자 빈도를 선택하십시오. 3 단계-> 최대 문자 주파수에 대한 문자의 주파수 차이를 얻습니다. 4 단계-> 문자열의 위치에 대해 문자를 배치합니다. 행복한 해결!



0

PHP ,185 173 170 바이트

function($s){$m=max($a=count_chars($s=strtolower($s),1));foreach(str_split($s)as$c)$o.=str_repeat($c,($b=$a[$d=ord($c)])!=($a[$d]=$m)&&$d>96&&$d<123?$m-$b+1:1);return$o;}

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

Ungolfed (및 삼진 및 최적화되지 않은).

function f($s) {
    $s = strtolower( $s );
    $a = count_chars( $s, 1 );
    $m = max( $a );
    foreach( str_split( $s ) as $c ) {
        if ( $c < 'a' or $c > 'z') {           // is non a-z
            $n = 1;
        } elseif ( $a[ord($c)] == $m ) {    // already has max number
            $n = 1;
        } else {
            $n = $m - $a[ord($c)] + 1;       // add this many chars
        }
        $o .= str_repeat( $c, $n );
        $a[ord($c)] = $m;                   // has reached the max
    }
    return $o; 
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.