Trennen Sie Buchstaben und Zahlen

15

In einem Textabschnitt werden Zahlen und Buchstaben gemischt. Ihre Aufgabe ist es, die Zahlen auf der linken Seite und die Buchstaben auf der rechten Seite in der gleichen Reihenfolge in jeder Zeile zu trennen.

Regeln:

  1. Zahlen sind einfache ganze Zahlen; Also kein Dezimalpunkt und keine negativen / positiven Vorzeichen.
  2. Zahlen können zusammenhängend sein oder nicht, aber in jedem Fall müssen sie in der gleichen Reihenfolge nach links verschoben werden.
  3. Zahlen können zwischen Wörtern vorkommen.
  4. Der Text enthält nur alphabetische ASCII-Buchstaben und -Zahlen sowie Leerzeichen, Unterstriche, Kommas und Punkte.
  5. Derjenige, der dies mit minimalen Tastenanschlägen (wie vim-Makros) oder der geringsten Anzahl von Bytes im Falle von Skripten tut, ist der Gewinner.

Beispieltext:

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.

Erwartete Ausgabe:

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.
SibiCoder
quelle
4
@SibiCoder Willkommen an Bord! Vielleicht möchten Sie beim nächsten Mal die Sandbox verwenden . Es wird zum Posten von Herausforderungen verwendet, bevor Sie es hier tun. Auf diese Weise können Sie Feedback von anderen Benutzern erhalten und die Herausforderung verbessern
Luis Mendo
1
Ich glaube, die Verwendung des Alphabets für Buchstaben ist eine Besonderheit des indischen Englisch.
TRiG
2
@AstroDan Beide sind standardmäßig zulässig.
Adnan
2
Scheint jetzt ziemlich klar zu sein. @ enger Wähler - denkst du, du kannst deine Stimmen jetzt zurückziehen?
Digitales Trauma
1
Der erste Testfall wurde behoben, da es sich höchstwahrscheinlich nur um einen Tippfehler handelte. Ich stimme dafür, diesen Beitrag wieder zu öffnen.
Bassdrop Cumberwubwubwub

Antworten:

11

Retina , 14 Bytes

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

Probieren Sie es online!

Erläuterung

Oführt eine Sortierstufe ein. %weist Retina an, die Transformation auf jede Zeile separat anzuwenden.$Weist es an, die Übereinstimmungen nach dem Ergebnis der angegebenen Ersetzung zu sortieren.

Der reguläre Ausdruck selbst entspricht \d|(.)entweder einer Ziffer oder allem anderen, was in einer Gruppe erfasst wird 1. Dies wird durch $#1die Anzahl der Gruppenerfassungen ersetzt 1. Das heißt, der Sortierschlüssel für Ziffern ist 0und der Sortierschlüssel für alles andere ist 1. Da die Sortierung in Retina stabil ist, werden die Ziffern einfach nach links und alle anderen nach rechts verschoben.

Martin Ender
quelle
9

05AB1E, 14 10 Bytes

Code:

|vyþyyþ-¶J

Erläuterung:

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

Beispiel Eingabe:

Ein Wort kann eine beliebige Anzahl von Texten enthalten, wie z. B. 433884.
Alle Zahlen müssen jedoch nach links verschoben werden
, alphanumerische Werte müssen jedoch auf der rechten Seite eingegeben werden.
Der Text könnte Zeichen enthalten, die wie Hlep oder Dfeintino gemischt sind, oder sogar
bedeutungslose Wörter, die zusammengehören.

Beispielausgabe:

433884Ein Wort kann eine beliebige Anzahl von Texten enthalten,
89aber alle Zahlen müssen nach links
verschoben werden 6946aber alphabetische Werte müssen nach rechts eingefügt werden.
4292Der Text enthält möglicherweise Zeichen, die wie hlep oder dfeintino gemischt werden, oder sogar
sinnlose Wörter, die zusammengefügt werden.

Probieren Sie es online aus

Emigna
quelle
8

Python 3, 64 Bytes

Drei gleichwertige Lösungen! Ich kann nicht auswählen.

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='')
Lynn
quelle
Eine andere Variante der gleichen Länge:while 1:print(*sorted(input(),key=lambda x:-('/'<x<':')),sep='')
Byte Commander
5

Perl, 17 Bytes

16 Byte Code + 1 Schalter

s/\d/!print$&/ge

Benötigt -p.

Verwendung

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

Alternative:

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

Benötigt -n.

Verwendung

perl -ne 'print/\d/g,/\D/g' <<< 'a1b2c3d4e5f6'
123456abcdef
Dom Hastings
quelle
1
Es ist cool zu sehen, dass eine Nicht-Golf-Sprache wettbewerbsfähig ist, selbst gegen Golf-Sprachen.
DJMcMayhem
@ DrGreenEggsandHamDJ Ich bin froh, dass es Ihnen gefallen hat! Ich füge nicht viele Antworten hinzu, aber die Lösung dieser Frage hat mir sehr gut gefallen! Ich bin auch sicher , dass einige Leute Perl als Golf Sprache klassifizieren würden, da sein wie nur schreiben !
Dom Hastings
5

Hoon , 92 83 Bytes

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

++loreTeilt ein mehradriges Kabel in ein (list cord), (trip +<)verwandelt es in ein Band. ++skidtrennt eine Liste in zwei Teile: eine Seite, auf der die Funktion yes zurückgibt, eine Seite, auf der no zurückgegeben wird. Unsere Funktion versucht, das Zeichen mit ++nud(numerisch) zu analysieren und zu prüfen, ob es vollständig analysiert wird. Anschließend verschweißen wir die beiden Listen wieder zu einem Band.

> %.
  '''
  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."
>>
Rendereinstellungen
quelle
1
Gott, ich werde Hoon niemals nicht befürworten. ♥
Lynn
4

MATL , 13 - 12 Bytes

`jt4Y2m&)hDT

Beendet sich mit einem Fehler (standardmäßig zulässig) und erzeugt die richtige Ausgabe.

Probieren Sie es online!

Erläuterung

`          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
Luis Mendo
quelle
4

V, 12 Bytes

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

V, ist eine unvollendete, auf 2D-Saiten basierende Golfsprache. Obwohl es noch nicht fertig ist, funktioniert dieses Programm ab Commit 45 , das letzte Nacht veröffentlicht wurde, was dies zu einer konkurrierenden Antwort macht. (Die meisten meiner vorherigen V-Antworten waren nicht konkurrierend.)

Beachten Sie, dass der abschließende Zeilenumbruch erforderlich ist, obwohl dies auf einen Fehler zurückzuführen ist.

Probieren Sie es online!

Erläuterung:

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

¨Ä©¨ä©/²± erweitert sich in den regulären Ausdruck vim:

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

Dies ist eine Nicht-Ziffer, (\D)gefolgt von einer Ziffer (\d), und tauschen Sie sie aus.

Da dies mit Brutto-Unicode-Zeichen gefüllt ist, ist hier ein umkehrbarer Hexdump:

00000000: f2ed a8c4 a9a8 e4a9 2fb2 b10a            ......../...
DJMcMayhem
quelle
4
Ich bin sehr stolz auf diese Antwort. Mit etwas mehr Arbeit an der Sprache könnte dies leicht 4-5 Bytes kürzer sein, aber es ist cool zu sehen, dass die Funktionen, an denen ich gearbeitet habe, tatsächlich nützlich sind. Das hätte vor einem Tag nicht funktioniert. = D
DJMcMayhem
3

Javascript ES6, 40 Bytes

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

Versuchte mehrere andere Lösungen, konnte es aber nicht kleiner machen.
Mein erster Versuch war, a=>[...a.match(/\d/g),...a.match(/\D/g)].join``aber das ist 5 Bytes länger

Probieren Sie es hier aus

Bassdrop Cumberwubwubwub
quelle
3

CJam, 9 13 16 Bytes

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

Es gibt nicht f$...

Diese 13-Byte-Version funktioniert fast:

{l{A,s-,}$N}h
jimmy23013
quelle
3

PowerShell v2 +, 55 Byte

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

Aufgrund der Notwendigkeit, mehrzeilige Eingaben zu unterstützen, müssen wir unsere -replaceAnweisungen mit einer Schleife und -splitin Zeilenumbrüchen kapseln. Ansonsten grundsätzlich gleichbedeutend mit der JavaScript-Lösung .

AdmBorkBork
quelle
3

Pyth - 11 Bytes

Mag meinen Gruppentest nicht. Nimmt Eingaben als Liste von Zeilen und sagt mir, ob das nicht in Ordnung ist.

jms_.g}k`MT

Probieren Sie es hier online aus .

Maltysen
quelle
3

Pyth, 16 15 Bytes

1 Byte danke an @FryAmTheEggman .

jms+@J`MTd-dJ.z

Probieren Sie es online!

Beispieleingabe:

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.

Beispielausgabe:

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.

Wie es funktioniert

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
Undichte Nonne
quelle
Sie brauchen das nicht, Uda Maps automatisch ganze Zahlen in Bereiche umwandeln.
FryAmTheEggman
Oh, danke für die Erinnerung!
Undichte Nonne
2

Netzhaut, 16 Bytes

Stabile Blasensorte.

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

Beispieleingabe:

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.

Beispielausgabe:

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.

Probieren Sie es online!

Undichte Nonne
quelle
1
Bitte aktualisieren Sie Ihren Code. Zahlen können zwischen Wörtern stehen. Wenn deins aktualisiert wird, ist es in Ordnung.
SibiCoder
2

C #, 59 Bytes

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

Eine einfache C # -Lambda-Funktion mit Regex.

Beispielausgabe

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.
AstroDan
quelle
2

C # (LINQ), 110 Bytes

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

Bei weitem nicht die kürzeste Lösung, aber ich dachte, dies wäre eine gute Verwendung von LINQ.

Nick Mertin
quelle
Ähnlich, aber etwas kürzer: string.Join ("", s.Where (c => char.IsDigit (c)). Concat (s.Where (c =>! Char.IsDigit (c))));
Marc
@Marc Wow, ich benutze diese Sprache seit 5 Jahren und ich wusste nicht, dass char.IsDigites sie gibt ...
Nick Mertin
2

Faktor 61

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

Es ist ein naiver Ansatz.

"\n"splitTeilt die Zeichenfolge oben auf dem Stapel in Zeilen auf. Dann für eachZeile:

  1. [ digit? ] partition Teilt jede Zeile in Ziffern und Nicht-Ziffern
  2. [ write ] bi@ gibt beide aus, und nl druckt eine neue Zeile.

PS:

Als Wort 90 Bytes (71, wenn Sie den faktorischen Langnamen durch 1 Buchstaben ersetzen):

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

Pyth, 14 Bytes

FG.zo_:N"\d"0G

Probieren Sie es online!

Erläuterung:

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

Die Logik der Lösung ist dieselbe wie in Lynns Antwort .

John Red
quelle
2

Java 8, 130 126 86 Bytes

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

-4 Bytes, die Java 7 in 8 konvertieren und ein nicht verwendetes Zeichen entfernen
-40 Bytes, die das Programm in Funktion konvertieren und ändern[^\\d] in\\D

Erläuterung:

Probieren Sie es hier aus.

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
Kevin Cruijssen
quelle
2

GNU Sed, 28

Die Punktzahl enthält +1 für die -rOption zu sed.

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

Wechselt wiederholt ein Nicht-Zahlenzeichen, gefolgt von einem Zahlenzeichen, bis keine Substitutionen mehr vorgenommen werden.

Leider haben sed reguläre Ausdrücke kein \doder \D, daher müssen diese lang geschrieben werden.

Ideone.

Digitales Trauma
quelle
1

Oktave, 37 32 Bytes

@(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
Stewie Griffin
quelle
Die Eingabe kann mehrzeilig sein. siehe (aktualisierte) Herausforderung
Luis Mendo
1

Clojure, 113 Bytes

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

Sortiert die Ziffern an den Zeilenanfang.

Kennzeichen
quelle
1

Oracle SQL 11.2, 131 Byte

Die Zeilen in der Eingabezeichenfolge werden durch '¤' getrennt. Auf diese Weise muss keine Tabelle erstellt werden, die als Eingabe verwendet werden soll.

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.

Abfrage:

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

Nicht golfen

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 ¤
Jeto
quelle
1

APL, 28 Zeichen

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

Haskell, 60 Bytes

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

Verwendung

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

Sed, 35 Bytes

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

Dies erstellt eine Kopie der Zeile, entfernt Ziffern von einer Kopie und Buchstaben von der anderen, bevor sie neu kombiniert werden.

Toby Speight
quelle
1

Bash, 42 Bytes

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

Seien Sie gewarnt, dass diese rekursive Implementierung für jede Eingabezeile einen neuen Prozess auslöst!

Toby Speight
quelle
0

Julia 0,6 , 77 Bytes

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

Anonyme Funktion, die eine Zeichenfolge aufnimmt und die Ausgabe druckt. Durchläuft die Zeichen in einer Schleife und fügt sie dem linken loder rechten rPuffer hinzu, bis eine neue Zeile gefunden wird. Anschließend werden die Puffer gedruckt und geleert. Viel Potenzial nützliche Konstrukte wie sort, filterund logische Indizierung (Indizierung mit einer Reihe von boolean - Werten) funktionieren nicht auf Strings.

Probieren Sie es online!

gggg
quelle
0

Vim, 30 Tastenanschläge

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

Zeichnen Sie eine Such- und Ersetzungsaktion auf, bei der Ziffern nach links von Nicht-Ziffern verschoben werden. Rufen Sie das Makro rekursiv auf, bis eine Ausnahme ausgelöst wird, weil das Muster nicht gefunden wurde (wenn rechts von den Nicht-Ziffern keine Ziffern mehr vorhanden sind).

mypetlion
quelle