Bảng chữ cái và số riêng biệt


15

Một đoạn văn bản có số và chữ cái được trộn lẫn. Nhiệm vụ của bạn là phân tách các số ở bên trái và các chữ cái ở bên phải theo cùng thứ tự của mỗi dòng.

Quy tắc:

  1. Số là số nguyên đơn giản; vì vậy không có dấu thập phân, và không có dấu âm / dương.
  2. Các số có thể hoặc không liền kề nhau, nhưng bất kể trường hợp nào, chúng phải được đẩy sang bên trái theo cùng một thứ tự.
  3. Số có thể xảy ra ở giữa các từ.
  4. Văn bản chỉ chứa các chữ cái và số chữ cái ASCII, cùng với khoảng trắng, dấu gạch dưới, dấu phẩy và dấu chấm.
  5. Người thực hiện việc này với tổ hợp phím tối thiểu (như vim macro) hoặc số lượng byte ít nhất trong trường hợp kịch bản là người chiến thắng.

Văn bản mẫu:

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.

Sản lượng dự kiến:

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 Chào mừng bạn! Bạn có thể muốn sử dụng hộp cát vào lần tới. Nó được sử dụng để đăng các thách thức trước khi thực hiện nó ở đây. Bằng cách đó, bạn có thể nhận phản hồi từ những người dùng khác và cải thiện thử thách
Luis Mendo

1
Sử dụng bảng chữ cái để viết thư có nghĩa là, tôi tin rằng, một đặc trưng của tiếng Anh Ấn Độ.
TRiG

2
@AstroDan Cả hai đều được cho phép theo mặc định.
Ad Nam

2
Có vẻ khá rõ ràng bây giờ. @ cử tri thân thiết - bạn có nghĩ rằng bạn có thể rút lại phiếu bầu của mình bây giờ không?
Chấn thương kỹ thuật số

1
Đã sửa lỗi trường hợp thử nghiệm đầu tiên, vì rất có thể nó không có gì hơn một lỗi đánh máy. Tôi đang bỏ phiếu để mở lại bài đăng này.
Bassdrop Cumberwubwubwub

Câu trả lời:


11

Võng mạc , 14 byte

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

Hãy thử trực tuyến!

Giải trình

Ogiới thiệu một giai đoạn phân loại. %nói với Retina để áp dụng chuyển đổi cho từng dòng riêng biệt. $nói với nó để sắp xếp các trận đấu theo kết quả của sự thay thế được chỉ định.

Bản thân regex \d|(.)phù hợp với một chữ số hoặc bất kỳ thứ gì khác được ghi lại thành nhóm 1. Điều này được thay thế bằng $#1số lần bắt giữ của nhóm 1. Nghĩa là, khóa sắp xếp cho các chữ số là 0và khóa sắp xếp cho mọi thứ khác 1. Vì sắp xếp trong Retina là ổn định, điều này chỉ đơn giản là di chuyển các chữ số sang trái và mọi thứ khác ở bên phải.


9

05AB1E, 14 10 byte

Mã số:

|vyþyyþ-¶J

Giải trình:

|                 # 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

Ví dụ đầu vào:

Một từ có thể có bất kỳ số lượng văn bản nào như 433884,
nhưng tất cả các chữ tê phải được di chuyển sang bên trái
nhưng alph6.usical va9lues phải được đặt ở bên phải.
Văn bản có thể kết hợp chara29cters s2huffled như hlep hoặc dfeintino hoặc thậm chí các
từ vô nghĩa co43mbined togetherh81er.

Kết quả ví dụ:

433884A từ có thể có bất kỳ số lượng văn bản nào,
89but tất cả các số phải được di chuyển bên trái
6946 nhưng các giá trị bảng chữ cái phải được dán ở bên phải.
4292 Văn bản có thể chứa các ký tự được xáo trộn như hlep hoặc dfeintino hoặc thậm chí
4381 từ không kết hợp với nhau.

Dùng thử trực tuyến


8

Python 3, 64 byte

Ba giải pháp tương đương! Tôi không thể chọn.

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='')

Một biến thể khác có cùng độ dài:while 1:print(*sorted(input(),key=lambda x:-('/'<x<':')),sep='')
Chỉ huy Byte

5

Perl, 17 byte

Mã 16 byte + 1 công tắc

s/\d/!print$&/ge

Yêu cầu -p.

Sử dụng

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

Cách khác:

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

Yêu cầu -n.

Sử dụng

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

1
Thật tuyệt khi thấy một ngôn ngữ không chơi gôn có thể cạnh tranh, thậm chí chống lại các ngôn ngữ chơi gôn.
DJMcMayhem

@DrGreenEggsandoutDJ Tôi rất vui vì bạn thích nó! Tôi không thêm nhiều câu trả lời nhưng tôi khá thích giải pháp của câu hỏi này! Ngoài ra tôi chắc chắn rằng một số người sẽ phân loại Perl là ngôn ngữ chơi gôn, vì nó được mô tả là chỉ viết !
Dom Hastings

5

Hoon , 92 83 byte

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

++loretách một sợi dây nhiều dòng thành một (list cord), (trip +<)biến nó thành một cuộn băng. ++skidtách biệt một danh sách thành hai: một bên trong đó hàm trả về có, một bên trả về không. Hàm của chúng tôi cố phân tích ký tự bằng ++nud(số) và kiểm tra xem nó có phân tích cú pháp đầy đủ không, và sau đó chúng tôi hàn hai danh sách lại với nhau thành một cuộn băng.

> %.
  '''
  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
Chúa ơi, tôi sẽ không bao giờ không upvote Hoon. ♥
Lynn

4

MATL , 13 12 byte

`jt4Y2m&)hDT

Thoát với một lỗi (được mặc định cho phép), tạo ra đầu ra chính xác.

Hãy thử trực tuyến!

Giải trình

`          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 byte

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

V, là một ngôn ngữ chơi golf dựa trên chuỗi 2D chưa hoàn thành. Mặc dù chưa hoàn thành, chương trình này hoạt động như cam kết 45 , được xuất bản vào tối qua, khiến đây là một câu trả lời cạnh tranh. (Hầu hết các câu trả lời V trước đây của tôi đều không có tính cạnh tranh.)

Lưu ý, dòng mới theo dõi là cần thiết, mặc dù điều này là do một lỗi.

Hãy thử trực tuyến!

Giải trình:

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

¨Ä©¨ä©/²± mở rộng vào regex vim:

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

đó là một chữ số không có chữ số (\D)theo sau là một chữ số(\d) và hoán đổi chúng.

Vì phần này chứa đầy các ký tự unicode, nên đây là một hexdump có thể đảo ngược:

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

4
Tôi thực sự tự hào về câu trả lời này. Với một số công việc khác về ngôn ngữ, điều này có thể dễ dàng rút ngắn 4-5 byte, nhưng thật tuyệt khi thấy các tính năng tôi đang làm việc thực sự hữu ích. Điều này sẽ không làm việc một ngày trước. = D
DJMcMayhem

3

Javascript ES6, 40 byte

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

Đã thử một số giải pháp khác, nhưng không thể có được nó nhỏ hơn thế này.
Lần thử đầu tiên của tôi là a=>[...a.match(/\d/g),...a.match(/\D/g)].join``nhưng dài hơn 5 byte

Hãy thử nó ở đây


3

Camam 9 13 16 byte

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

Không có f$...

Phiên bản 13 byte này gần như hoạt động:

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

3

PowerShell v2 +, 55 byte

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

Do nhu cầu hỗ trợ đầu vào nhiều dòng, chúng tôi phải gói gọn các -replacecâu lệnh của mình bằng một vòng lặp và -splittrên các dòng mới. Mặt khác về cơ bản tương đương với giải pháp JavaScript .



3

Bình thường, 16 15 byte

1 byte nhờ @FryAmTheEggman .

jms+@J`MTd-dJ.z

Hãy thử trực tuyến!

Đầu vào mẫu:

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.

Đầu ra mẫu:

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.

Làm thế nào nó hoạt động

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

Bạn không cần Uvì bản đồ tự động chuyển số nguyên thành phạm vi.
FryAmTheEggman

Ồ, cảm ơn đã nhắc nhở!
Leaky Nun

2

Võng mạc, 16 byte

Sắp xếp bong bóng ổn định.

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

Đầu vào mẫu:

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.

Đầu ra mẫu:

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.

Hãy thử trực tuyến!


1
Vui lòng cập nhật mã của bạn. Số có thể đến giữa các từ. Nếu bạn được cập nhật, thì tốt thôi.
SibiCoder

2

C #, 59 byte

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

Một hàm lambda C # đơn giản sử dụng regex.

Sản lượng mẫu

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 byte

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

Không phải là giải pháp ngắn nhất, cho đến nay, nhưng tôi nghĩ rằng đây sẽ là một cách sử dụng tốt LINQ.


Tương tự nhưng ngắn hơn một chút: string.Join ("", s.Where (c => char.IsDigit (c)). Concat (s.Where (c =>! Char.IsDigit (c))));
Marc

@Marc wow, tôi đã sử dụng ngôn ngữ này được 5 năm và tôi không biết char.IsDigitđã tồn tại ...
Nick Mertin

2

Yếu tố 61

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

Đó là một cách tiếp cận ngây thơ.

"\n"splitchia chuỗi trên đầu ngăn xếp thành các dòng. Sau đó, cho eachdòng:

  1. [ digit? ] partition chia mỗi dòng thành chỉ chữ số và không chỉ chữ số
  2. [ write ] bi@xuất cả hai và nlin một dòng mới.

Tái bút

Là một từ 90 byte (71 nếu bạn thay thế tên dài-yếu tố bằng 1 chữ cái):

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

2

Bình thường, 14 byte

FG.zo_:N"\d"0G

Hãy thử trực tuyến!

Giải trình:

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

Logic của giải pháp giống như trong câu trả lời của Lynn .


2

Java 8, 130 126 86 byte

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

-4 byte chuyển đổi Java 7 thành 8 và loại bỏ một ký tự không sử dụng
-40 byte chương trình chuyển đổi thành chức năng và thay đổi [^\\d]thành\\D

Giải trình:

Hãy thử nó ở đây.

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 Sed, 28

Điểm bao gồm +1 cho -rtùy chọn để sed.

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

Liên tục chuyển một ký tự không phải số theo sau là một ký tự số cho đến khi không còn sự thay thế nào nữa.

Đáng buồn là regexes sed không có \dhoặc \D, vì vậy những điều này phải được viết ra từ lâu.

Ideone.


1

Octave, 37 32 byte

@(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

Đầu vào có thể là đa dòng; xem thử thách (cập nhật)
Luis Mendo

1

Clojure, 113 byte

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

Sắp xếp các chữ số đến đầu dòng.


1

Oracle SQL 11.2, 131 byte

Các dòng trong chuỗi đầu vào được phân tách bằng '¤'. Bằng cách đó, không cần thiết phải tạo một bảng để sử dụng làm đầu vào.

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.

Truy vấn :

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

Không chơi gôn

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 ký tự

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

1

Haskell, 60 byte

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

Sử dụng

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

1

Sed, 35 byte

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

Điều này tạo ra một bản sao của dòng, loại bỏ các chữ số từ một bản sao và các chữ cái khác, trước khi kết hợp lại chúng.


1

Bash, 42 byte

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

Được cảnh báo rằng việc triển khai đệ quy này tạo ra một quy trình mới cho mỗi dòng đầu vào!



0

Julia 0,6 , 77 byte

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

Hàm ẩn danh lấy một chuỗi và đầu ra in. Vòng lặp trên các ký tự, thêm chúng vào bộ đệm bên trái lhoặc bên phải rcho đến khi tìm thấy một dòng mới, sau đó nó in và làm trống bộ đệm. Rất nhiều cấu trúc tiềm năng hữu ích như sort, filtervà lập chỉ mục hợp lý (lập chỉ mục với một mảng các giá trị boolean) không làm việc trên Strings.

Hãy thử trực tuyến!


0

Vim, 30 tổ hợp phím

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

Ghi lại một tìm kiếm và thay thế hành động di chuyển các chữ số sang bên trái của các chữ số không. Gọi macro theo cách đệ quy cho đến khi một ngoại lệ được ném bởi mẫu không được tìm thấy (khi không có thêm chữ số nào ở bên phải của bất kỳ chữ số nào).


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.