별도의 알파벳과 숫자


15

텍스트 단락에는 숫자와 알파벳 문자가 혼합되어 있습니다. 당신의 임무는 각 줄의 같은 순서로 왼쪽에 숫자와 오른쪽에 알파벳 문자를 분리하는 것입니다.

규칙 :

  1. 숫자는 일반 정수입니다. 소수점이없고 음수 / 양수 부호가 없습니다.
  2. 숫자는 연속적이거나 인접하지 않을 수 있지만, 어떤 경우이든 관계없이 동일한 순서로 왼쪽으로 밀어야합니다.
  3. 단어 사이에 숫자가 나타날 수 있습니다.
  4. 텍스트는 공백, 밑줄, 쉼표 및 점과 함께 ASCII 알파벳 문자와 숫자 만 포함합니다.
  5. 스크립팅의 경우 최소 키 스트로크 (vim 매크로와 같은) 또는 최소 바이트 량으로이 작업을 수행하는 사람이 승자입니다.

예제 텍스트 :

A word can have any number of text like 433884,
but all the numb89ers has to be moved left side 
but alph6abetical va9lues has to be pas46ted on right side.
The text might con4tain chara29cters s2huffled like hlep or dfeintino or even
meaningless1 words co43mbined togeth81er.

예상 출력 :

433884A word can have any number of text like ,
89but all the numbers has to be moved left side 
6946but alphabetical values has to be pasted on right side.
4292The text might contain characters shuffled like hlep or dfeintino or even
14381meaningless words combined together.

4
@SibiCoder 그럼 탑승을 환영합니다! 다음 에 샌드 박스 를 사용할 수 있습니다 . 여기서 수행하기 전에 챌린지를 게시하는 데 사용됩니다. 그렇게하면 다른 사용자로부터 피드백을 받고 도전을 개선 할 수 있습니다.
Luis Mendo

1
사용 알파벳을 의미하는 편지 것은 , 나는 인도 영어의 특징을 생각한다.
TRiG

2
@AstroDan 기본적으로 둘 다 허용됩니다.
Adnan

2
지금은 분명해 보입니다. @ close-voters-투표를 취소 할 수 있다고 생각하십니까?
Digital Trauma

1
첫 번째 테스트 사례는 오타에 지나지 않았으므로 수정되었습니다. 이 게시물을 다시 열기 위해 투표하고 있습니다.
Bassdrop Cumberwubwubwub

답변:


11

레티 나 , 14 바이트

O%$`\d|(.)
$#1

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

설명

O정렬 단계를 소개합니다. %Retina에게 각 라인에 개별적으로 변환을 적용하도록 지시합니다. $지정된 대체 결과에 따라 일치 항목을 정렬하도록 지시합니다.

정규 표현식 자체는 \d|(.)숫자와 일치하거나 그룹으로 캡처 된 다른 것입니다 1. 이것은 $#1그룹의 캡처 수로 대체됩니다 1. 즉, 숫자의 정렬 키는 0이고 다른 모든 항목의 정렬 키는 1입니다. Retina에서의 정렬은 안정적이므로 숫자는 왼쪽으로 이동하고 다른 모든 것은 오른쪽으로 이동합니다.


9

05AB1E, 14 10 바이트

암호:

|vyþyyþ-¶J

설명:

|                 # push all lines in input as array of strings
 v                # for each line in array
  yþ              # push only digits from line
    yyþ-          # push line without digits
        ¶         # push newline char
         J        # join as string
                  # end loop and print explicitly

입력 예 :

단어에는 433884와 같은 텍스트를 사용할 수
있지만 모든 마비 된 문자는 왼쪽으로 이동해야
하지만 alph6abetical va9lues는 오른쪽에서 pas46ted해야합니다.
텍스트는 hlep 또는 dfeintino와 같은 s2huffled 또는 심지어
의미없는 단어가 결합 된 togeth81er를 포함 할 수 있습니다.

출력 예 :

433884 단어에는,
89 와 같은 텍스트를 사용할 수 있지만 모든 숫자는 왼쪽으로 이동해야
하지만 6946은 알파벳 값을 오른쪽에 붙여 넣어야합니다.
4292 텍스트에는 hlep 또는 dfeintino와 같이 섞인 문자 또는 4381
개의 의미없는 단어가 결합되어있을 수 있습니다.

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


8

파이썬 3, 64 바이트

세 가지 동등한 솔루션! 선택할 수 없습니다.

while 1:print(*sorted(input(),key=lambda x:-x.isdigit()),sep='')
while 1:print(*sorted(input(),key=lambda x:x<'0'or'9'<x),sep='')
while 1:print(*sorted(input(),key=str.isdigit,reverse=1),sep='')

같은 길이의 다른 변형 :while 1:print(*sorted(input(),key=lambda x:-('/'<x<':')),sep='')
Byte Commander

5

펄, 17 바이트

16 바이트 코드 + 1 스위치

s/\d/!print$&/ge

필요합니다 -p.

용법

perl -pe 's/\d/!print$&/ge' <<< 'a1b2c3d4e5f6'
123456abcdef

또는

print/\d/g,/\D/g

필요합니다 -n.

용법

perl -ne 'print/\d/g,/\D/g' <<< 'a1b2c3d4e5f6'
123456abcdef

1
골프가 아닌 언어가 골프 언어에 비해 경쟁력을 갖는 것이 멋지다.
DJMcMayhem

@DrGreenEggsandHamDJ 나는 당신이 그것을 좋아해서 기쁘다! 나는 많은 답변을 추가하지는 않지만이 답변을 매우 좋아했습니다! 또한 일부 사람들은 Perl을 골프 언어로 분류 할 것이라고 확신 합니다 .
Dom Hastings

5

, 92 83 바이트

|*
*
(turn (lore +<) |=(@ `tape`(welp (skid (trip +<) |=(@ !=(~ (rush +< nud)))))))

++lore에 여러 줄의 코드를 분할 (list cord), (trip +<)테이프로 바뀝니다. ++skid함수가 yes를 리턴하는 한 쪽, no를 리턴하는 한 쪽. 이 함수는 문자를 ++nud(숫자)로 구문 분석하고 완전히 구문 분석되는지 확인한 다음 두 목록을 다시 테이프로 용접합니다.

> %.
  '''
  A word can have any number of text like 433884,
  but all the numb89ers has to be moved left side 
  but alph6abetical va9lues has to be pas46ted on right side.
  The text might con4tain chara29cters s2huffled like hlep or dfeintino or even
  meaningless1 words co43mbined togeth81er.
  '''
  |*
  *
  (turn (lore +<) |=(@ `tape`(welp (skid (trip +<) |=(@ !=(~ (rush +< nud)))))))
<<
  "433884A word can have any number of text like ,"
  "89but all the numbers has to be moved left side "
  "6946but alphabetical values has to be pasted on right side."
  "4292The text might contain characters shuffled like hlep or dfeintino or even"
  "14381meaningless words combined together."
>>

1
하나님, 나는 결코 Hoon을지지 하지 않을 것 입니다. ♥
Lynn

4

MATL , 13 12 바이트

`jt4Y2m&)hDT

올바른 출력을 생성하는 오류 (기본적으로 허용됨)와 함께 종료됩니다.

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

설명

`          T    % infinite loop
 j              % input one line as a string
  t             % duplicate
   4Y2          % predefined literal: '0123456789'
      m         % true for elements of string that are digits, false for the rest
       &)       % two-output indexing: push digits, then non-digits
         h      % concatenate the two strings
          D     % display

4

V, 12 바이트

òí¨Ä©¨ä©/²±
​

V는 완성되지 않은 2D 문자열 기반 골프 언어입니다. 아직 완료되지 않았지만이 프로그램은 현재 작동합니다 지난 밤에 발표 된 commit 45 하여 경쟁적인 답변이됩니다. (내 이전 V 답변의 대부분은 경쟁이 아니 었습니다.)

버그로 인한 것이지만 후행 줄 바꿈이 필요합니다.

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

설명:

ò            #Recursively, do:
 í           #Substitute on every line
  ¨Ä©¨ä©/²±  #The following regex. 

¨Ä©¨ä©/²± vim 정규식으로 확장 :

:%s/\(\D\)\(\d\)/\2\1

이것은 숫자가 아닌 (\D) 다음에 오는 숫자 (\d)입니다.

이것은 총 유니 코드 문자로 채워져 있기 때문에 뒤집을 수있는 16 진수 덤프가 있습니다.

00000000: f2ed a8c4 a9a8 e4a9 2fb2 b10a            ......../...

4
이 답변을 정말 자랑스럽게 생각합니다. 언어에 대한 작업이 많을수록 쉽게 4-5 바이트 더 짧을 수 있지만 실제로 작업 한 기능이 실제로 유용하다는 것을 알면 좋습니다. 이것은 하루 전에 작동하지 않았을 것입니다. = D
DJMcMayhem

3

자바 스크립트 ES6, 40 바이트

a=>a.replace(/\D/g,'')+a.replace(/\d/g,'')

다른 여러 가지 솔루션을 시도했지만 이것보다 작을 수는 없습니다.
첫 번째 시도는 a=>[...a.match(/\d/g),...a.match(/\D/g)].join``5 바이트 더 깁니다.

여기 사용해보십시오


3

CJam, 9 13 16 바이트

qN/{{A,s-,}$}%N*

없습니다 f$...

이 13 바이트 버전은 거의 작동합니다.

{l{A,s-,}$N}h

3

PowerShell v2 +, 55 바이트

$args[0]-split"`n"|%{($_-replace'\D')+($_-replace'\d')}

다중 라인 입력을 지원해야하므로 -replace명령문을 루프와 줄 -split바꿈 으로 캡슐화해야합니다 . 그렇지 않으면 기본적으로 JavaScript 솔루션 과 같습니다 .



3

Pyth, 16 15 바이트

@FryAmTheEggman 덕분에 1 바이트 .

jms+@J`MTd-dJ.z

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

샘플 입력 :

A word can have any number of text like 433884,
but all the numb89ers has to be moved left side 
but alph6abetical va9lues has to be pas46ted on right side.
The text might con4tain chara29cters s2huffled like hlep or dfeintino or even
meaningless1 words co43mbined togeth81er.

샘플 출력 :

433884A word can have any number of text like ,
89but all the numbers has to be moved left side 
6946but alphabetical values has to be pasted on right side.
4292The text might contain characters shuffled like hlep or dfeintino or even
14381meaningless words combined together.

작동 원리

jms+@J`MTd-dJ.z

 m           .z    for each line (d):
         d           yield d (the line)
     J                 assign J to
        T              [0,1,2,3,...,9]
      `M               with each number converted to string
    @                intersect with J
   +                 append:
          -dJ          filter d for characters not in J
  s                  convert to one string
j                  join by newline

U지도는 정수를 범위로 자동 캐스트하기 때문에 필요하지 않습니다 .
FryAmTheEggman

아, 상기시켜 줘서 고마워!
Leaky Nun

2

레티 나, 16 바이트

안정적인 버블 정렬.

%+`(\D)(\d)
$2$1

샘플 입력 :

A word can have any number of text like 433884,
but all the numb89ers has to be moved left side 
but alph6abetical va9lues has to be pas46ted on right side.
The text might con4tain chara29cters s2huffled like hlep or dfeintino or even
meaningless1 words co43mbined togeth81er.

샘플 출력 :

433884A word can have any number of text like ,
89but all the numbers has to be moved left side 
6946but alphabetical values has to be pasted on right side.
4292The text might contain characters shuffled like hlep or dfeintino or even
14381meaningless words combined together.

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


1
코드를 업데이트하십시오. 단어 사이에 숫자가 올 수 있습니다. 당신이 업데이트되면 괜찮습니다.
SibiCoder 11

2

C #, 59 바이트

I=>Regex.Replace(I,"[^0-9]","")+Regex.Replace(I,@"\d+","");

정규식을 사용하는 간단한 C # 람다 함수.

샘플 출력

433884A word can have any number of text like ,
89but all the numbers has to be moved left side
6946but alphabetical values has to be pasted on right side.
4292The text might contain characters shuffled like hlep or dfeintino or even
14381meaningless words combined together.

2

C # (LINQ), 110 바이트

s=>string.join("",s.Where(c=>"0123456789".Contains(c).Concat(s.SelectMany(c=>new[]{c}.Except("0123456789"))));

가장 짧은 해결책은 아니지만 이것이 LINQ를 잘 사용한다고 생각했습니다.


비슷하지만 약간 짧습니다 : string.Join ( "", s.Where (c => char.IsDigit (c)). Concat (s.Where (c =>! char.IsDigit (c))));
Marc

@Marc 와우, 나는 5 년 동안이 언어를 사용해 왔으며 char.IsDigit존재를 몰랐다 ...
Nick Mertin

2

요인 61

[ "\n"split [ [ digit? ] partition [ write ] bi@ nl ] each ]

순진한 접근 방식입니다.

"\n"split스택 맨 위에있는 문자열을 줄로 나눕니다. 그런 다음 each줄 :

  1. [ digit? ] partition 각 줄을 숫자 만 및 비 숫자로만 분할
  2. [ write ] bi@둘 다 nl출력하고 개행을 인쇄합니다.

추신:

90 바이트 단어 (팩토리-긴 이름을 1 자로 바꾸면 71) :

: numbers-to-the-front ( s -- ) "\n"split [ [ digit? ] partition [ write ] bi@ nl ] each ;

2

Pyth, 14 바이트

FG.zo_:N"\d"0G

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

설명:

FG             : For every G in ...
  .z           : the-list-where-lines-of-input-are-stored ...
               : (implicitly print)
    o        G : sorted G ...
     _N        : where, a negative key is given ...
       :"\d"0  : to the individual character if it is a digit

솔루션의 논리는 Lynn의 답변 과 동일 합니다.


2

자바 (8), 130 (126) 86 바이트

a->{for(String s:a)System.out.println(s.replaceAll("\\D","")+s.replaceAll("\\d",""));}

-4 8 자바 7을 변환하지 않는 문자를 제거 바이트
-40 함수 변환 프로그램 및 변경 바이트 [^\\d]\\D

설명:

여기에서 시도하십시오.

a->{                             // Method with String-array parameter and no return-type
  for(String s:a)                //  Loop over the array
    System.out.println(          //   Print with a trailing new-line:
      s.replaceAll("\\D","")     //    All digits,
      +s.replaceAll("\\d",""));  //    plus all non-digits

2

GNU 세드, 28

-rsed 옵션에 대한 점수는 +1입니다 .

:
s/([^0-9])([0-9])/\2\1/
t

더 이상 대체가 이루어지지 않을 때까지 하나의 숫자가 아닌 문자 다음에 하나의 숫자 문자가 반복적으로 전환됩니다.

슬프게도 sed 정규 표현식에는 \d또는 \D이 없으므로 장기적으로 작성해야합니다.

이데온


1

옥타브, 37 32 바이트

@(s)disp([s(x=s>47&s<58),s(~x)])

ans('The text might con4tain chara29cters s2huffled like hlep or dfeintino or even')
4292The text might contain characters shuffled like hlep or dfeintino or even

입력은 여러 줄이 될 수 있습니다. 도전 과제 참조
Luis Mendo 2016 년

1

클로저, 113 바이트

(fn[s](map(fn[x](println(apply str(sort-by #(when-not(Character/isDigit %)1)x))))(clojure.string/split-lines s)))

줄의 시작 부분에 숫자를 정렬합니다.


1

Oracle SQL 11.2, 131 바이트

입력 문자열의 줄은 '¤'으로 구분됩니다. 이렇게하면 입력으로 사용할 테이블을 만들 필요가 없습니다.

A word can have any number of text like 433884but all the numb89ers has to be moved left side ¤but alph6abetical va9lues has to be pas46ted on right sideThe text might con4tain chara29cters s2huffled like hlep or dfeintino or even¤meaningless1 words co43mbined togeth81er.

검색어 :

SELECT REGEXP_REPLACE(COLUMN_VALUE,'[^0-9]')||REGEXP_REPLACE(COLUMN_VALUE,'[0-9]')FROM XMLTABLE(('"'||REPLACE(:1,'¤','","')||'"'));

언 골프

SELECT REGEXP_REPLACE(COLUMN_VALUE,'[^0-9]')||  -- Every number
       REGEXP_REPLACE(COLUMN_VALUE,'[0-9]')     -- Every character not a number   
FROM   XMLTABLE(('"'||REPLACE(:1,'¤','","')||'"'))  -- Split on ¤

1

APL, 28 자

{⍵[⍋(~⍵∊⎕D)++\¯1⌽⍵=⎕UCS 13]}

1

하스켈, 60 바이트

import Data.List;g(n,l)=n++l;f=g.partition(`elem`['0'..'9'])

용법

f "A word can have any number of text like 433884,"

1

sed, 35 바이트

h
s/[0-9]//g
x
s/[^0-9]//g
G
s/\n//

이렇게하면 줄의 복사본이 만들어지고 한 복사본에서 숫자가 제거되고 다른 복사본에서 문자가 제거되어 다시 결합됩니다.


1

배쉬, 42 바이트

read a&&echo "${a//[^0-9]}${a//[0-9]}"&&$0

이 재귀 적 구현은 각 입력 라인에 대해 새로운 프로세스를 수행한다는 점에주의하십시오!



0

줄리아 0.6 , 77 바이트

x->(l=r="";for c=x
c=='\n'?(println(l*r);l=r=""):'/'<c<':'?(l*=c):(r*=c)
end)

문자열을 가져 와서 출력하는 익명 함수. 문자를 반복 하여 줄 바꿈을 찾을 때까지 왼쪽 l또는 오른쪽 r버퍼에 추가 한 다음 버퍼를 인쇄하고 비 웁니다. 와 같은 잠재적 인 유용한 구성 요소가 많이 있습니다 sort.filter 그리고 (부울 값의 배열 색인) 논리적 인덱스는 문자열 작업을하지 않습니다.

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


0

Vim, 30 번의 키 입력

qr:%s/\v(\D+)(\d+)/\2\1/<Enter>@rq@r

검색을 기록하고 숫자를 숫자가 아닌 왼쪽으로 이동시키는 대치 작업을 수행하십시오. 패턴을 찾을 수 없어서 예외가 발생할 때까지 (숫자가 아닌 숫자 오른쪽에 더 이상 숫자가없는 경우) 매크로를 재귀 적으로 호출하십시오.


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