別のアルファベットと数字


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ようこそ!次回はサンドボックスを使用することをお勧めします。ここで行う前にチャレンジを投稿するために使用されます。あなたが他のユーザーからのフィードバックを取得し、挑戦を向上させることができますこの方法
ルイスMendo

1
使用してアルファベットを意味する手紙は、私は信じている、インドの英語の独特です。
-TRiG

2
@AstroDan両方ともデフォルトで許可されています。
アドナン

2
今はかなりはっきりしているようです。@ close-voters-今すぐ投票を撤回できると思いますか?
デジタル外傷

1
最初のテストケースを修正しました。ほとんどの場合、入力ミスでした。この投稿を再開することに同意します。
バスドロップCumberwubwubwub 16年

回答:


11

網膜、14バイト

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

オンラインでお試しください!

説明

Oソート段階を導入します。%Retinaに変換を各行に個別に適用するように指示します。$指定された置換の結果で一致をソートするように指示します。

正規表現自体は\d|(.)、数字に一致するか、またはgroupにキャプチャされる他のものに一致し1ます。これは$#1、groupのキャプチャ数で置換され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のような任意の数のテキストを含めることができます
が、すべてのnumb89ersは左側に移動する必要があります
が、alph6abetical va9luesは右側に移動する必要があります。
テキストには、hlepやdfeintinoのようにs2huffledのchara29cters、またはtogeth81erを組み合わせた
無意味な単語が含まれる場合があります。

出力例:

433884Aの単語には、
89 などの任意の数のテキストを含めることができますが、すべての数字を左側に移動する必要があり
ますが、アルファベットの値は右側に貼り付ける必要があります。
4292テキストには、hlepやdfeintinoのようにシャッフルされた文字が含まれている場合があります

オンラインで試す


8

Python 3、64バイト

3つの同等のソリューション!選べない

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='')
バイトコマンダー

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をゴルフ専用言語として分類すると確信しています。
ドムヘイスティングス

5

Hoon92 83バイト

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

++lore複数行のコードを分割し(list cord)(trip +<)テープに変換します。++skidリストを2つに分けます。1つは関数がyesを返し、もう1つはnoを返します。この関数は++nud(数値)で文字を解析しようとし、完全に解析されるかどうかを確認し、2つのリストをテープにまとめます。

> %.
  '''
  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

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)それらを交換します。

これはグロスなユニコード文字で満たされているため、ここにリバーシブルなhexdumpがあります:

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

4
私はこの答えを本当に誇りに思っています。言語でさらに作業を行うと、これは簡単に4〜5バイト短くなる可能性がありますが、私が取り組んでいる機能が実際に役立つことを見るのはクールです。これは1日前には機能しませんでした。= 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

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

ああ、思い出させてくれてありがとう!
リーキー修道女

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#ラムダ関数。

サンプル出力

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...存在していた
ニックMertin

2

ファクター 61

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

それは素朴なアプローチです。

"\n"splitスタックの先頭の文字列を行に分割します。次に、each行の場合:

  1. [ digit? ] partition 各行を数字のみと非数字のみに分割します
  2. [ write ] bi@両方をnl出力し、改行を出力します。

PS:

単語として90バイト(-factorish-long-nameを1文字に置き換えた場合は71):

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


2

ジャワ8、130の 126 86バイト

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

-4 8へのJava 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 Sed、28

スコアには-rsedのオプションの+1が含まれます。

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

置換がこれ以上行われないまで、1つの数字以外の文字に続いて1つの数字を繰り返し切り替えます。

悲しいことにsedの正規表現には\dor がない\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//

これにより、行のコピーが作成され、一方のコピーから数字が削除され、他方の文字が再結合される前に文字が削除されます。


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バッファーに追加してから、バッファーを出力して空にします。や、論理インデックス(ブール値の配列を使用したインデックス付け)などの潜在的な便利な構造はsortfilter文字列では機能しません。

オンラインでお試しください!


0

Vim、30キーストローク

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

検索を記録し、数字を非数字の左側に移動するアクションを置き換えます。見つからないパターンによって例外がスローされるまで(非数字の右側に数字がなくなったとき)、マクロを再帰的に呼び出します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.