单独的字母和数字


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默认情况下都允许。
阿德南

2
现在看起来很清楚。@ close-voters-您认为您现在可以撤回投票吗?
Digital Trauma

1
修复了第一个测试用例,因为它很可能只是错字。我正在投票重新开这篇文章。
Bassdrop Cumberwubwubwub

Answers:


11

视网膜,14字节

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

在线尝试!

说明

O引入分类阶段。%告诉视网膜将变换分别应用于每条线。$告诉它根据指定替换的结果对匹配项进行排序。

正则表达式本身\d|(.)可以匹配数字,也可以匹配到group中的任何其他东西1。将其替换$#1为group的捕获数量1。也就是说,数字0的排序键是,其他所有的排序键是1。由于在视网膜中的排序是稳定的,因此只需将数字向左移动,其他所有都向右移动。


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,
但是所有的数字都必须移到左侧,
而字母数字必须移到右侧。
文本可能包含像hlep或dfeintino一样杂乱无章的字符,甚至是
毫无意义的单词组合在一起。

示例输出:

433884A单词可以具有任意数量的文本,例如,
89 ,但是所有数字都必须向左移动
6946,但是必须在右侧粘贴字母值。
4292文本中可能包含像hlep或dfeintino或甚至
4381个无意义的单词组合在一起的乱序字符。

在线尝试


8

Python 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

Perl,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

@DrGreenEg​​gsandHamDJ很高兴您喜欢它!我没有添加很多答案,但是我非常喜欢这个答案!另外,我敢肯定,有人会将Perl归类为高尔夫语言,因为Perl被描述为只写
Dom Hastings

5

Hoon92 83字节

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

++lore将多线电线拆分为(list cord)(trip +<)将其变成胶带。++skid将列表分为两部分:一侧是函数返回“是”,另一侧是返回“否”。我们的函数尝试使用++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
天哪,我永远不会拒绝勋恩。♥
林恩

4

MATL13 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),然后交换它们。

由于这是用大体的unicode字符填充的,因此这是一个可逆的十六进制转储:

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

4
我为这个答案感到非常自豪。通过对该语言进行更多的工作,可以很容易地将其缩短4-5个字节,但是很高兴看到我一直在努力的功能确实有用。这在一天前是行不通的。= D
DJMcMayhem

3

Javascript ES6,40个字节

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

尝试了其他几种解决方案,但不能使它更小。
我的第一次尝试是,a=>[...a.match(/\d/g),...a.match(/\D/g)].join``但是长了5个字节

在这里尝试


3

果酱 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字节

1个字节,感谢@FryAmTheEggman

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's

哦,谢谢你的提醒!
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

2

C#,59个字节

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

使用正则表达式的简单C#lambda函数。

样品输出

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哇,我已经使用这种语言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打印换行符。

PS:

作为一个字,为90个字节(如果用1个字母替换factorish-long-name,则为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字节将Java 7转换为8,并删除未使用的字符
-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 Sed,28岁

分数包括+1,可供-r选择。

:
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

输入可以是多行;看到(更新)的挑战
路易斯·门多

1

Clojure,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

Haskell,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//

这将构成该行的副本,从一个副本中删除数字,从另一个副本中删除字母,然后再重新组合。




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缓冲区,直到找到换行符,然后打印并清空缓冲区。许多潜在的有用结构,例如sortfilter和逻辑索引(索引用布尔值的阵列)不工作的字符串。

在线尝试!


0

Vim,30击键

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

记录将数字移到非数字左侧的搜索和替换操作。递归调用宏,直到未找到模式引发异常(所有非数字右边没有数字)。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.