Oddzielne alfabety i cyfry


15

W akapicie tekstu są mieszane cyfry i litery. Twoim zadaniem jest oddzielenie cyfr po lewej stronie i liter alfabetu po prawej stronie w tej samej kolejności każdego wiersza.

Zasady:

  1. Liczby są zwykłymi liczbami całkowitymi; więc nie ma kropki dziesiętnej ani żadnych znaków ujemnych / dodatnich.
  2. Liczby mogą, ale nie muszą być ciągłe, ale bez względu na przypadek, należy je przesunąć na lewą stronę w tej samej kolejności.
  3. Cyfry mogą występować pomiędzy słowami.
  4. Tekst zawiera tylko litery i cyfry ASCII, a także spacje, podkreślenia, przecinki i kropki.
  5. Zwycięża ten, kto robi to przy minimalnej liczbie naciśnięć klawiszy (jak makra vim) lub najmniejszej ilości bajtów w przypadku skryptów.

Przykładowy tekst:

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.

Oczekiwany wynik:

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 Witamy zatem na pokładzie! Następnym razem możesz użyć piaskownicy . Służy do publikowania wyzwań przed zrobieniem tego tutaj. W ten sposób możesz uzyskać informacje zwrotne od innych użytkowników i poprawić wyzwanie
Luis Mendo

1
Używanie alfabetu w znaczeniu litery jest, moim zdaniem, wyróżnikiem indyjskiego angielskiego.
TRiG

2
@AstroDan Oba są domyślnie dozwolone.
Adnan

2
Teraz wydaje się całkiem jasne. @ close-voters - czy uważasz, że możesz teraz wycofać swoje głosy?
Cyfrowa trauma

1
Naprawiono pierwszy przypadek testowy, ponieważ najprawdopodobniej była to tylko literówka. Głosuję za ponownym otwarciem tego postu.
Bassdrop Cumberwubwubwub

Odpowiedzi:


11

Siatkówka , 14 bajtów

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

Wypróbuj online!

Wyjaśnienie

Owprowadza etap sortowania. %mówi Retinie, aby zastosowała transformację do każdej linii osobno. $nakazuje sortowanie dopasowań według wyniku podanego podstawienia.

Sam regex jest taki, \d|(.)który albo pasuje do cyfry, albo do wszystkiego innego, co jest przechwytywane w grupie 1. Jest to podstawione $#1liczbą przechwyceń grupy 1. Oznacza to, że kluczem do sortowania cyfr jest 0i kluczem do sortowania wszystkiego innego 1. Ponieważ sortowanie w siatkówce jest stabilne, to po prostu przesuwa cyfry w lewo, a wszystko inne w prawo.


9

05AB1E, 14 10 bajtów

Kod:

|vyþyyþ-¶J

Wyjaśnienie:

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

Przykładowe dane wejściowe:

Słowo może mieć dowolną liczbę tekstów, np. 433884,
ale wszystkie cyfry 89 muszą być przesunięte w lewą stronę,
ale alfabetyczne litery v99 muszą zostać przekazane po prawej stronie.
Tekst może zawierać chara29cters s2huffled jak hlep lub dfeintino, a nawet
pozbawione znaczenia słowa kojarzone razem.

Przykładowe dane wyjściowe:

433884 Słowo może mieć dowolną liczbę tekstów, np.
89 , ale wszystkie cyfry muszą zostać przeniesione na lewą stronę
6946, ale wartości alfabetyczne należy wkleić na prawej stronie.
4292 Tekst może zawierać znaki tasowane jak hlep lub dfeintino, a nawet
4381 bez znaczenia słowa połączone razem.

Wypróbuj online


8

Python 3, 64 bajty

Trzy równoważne rozwiązania! Nie mogę wybrać.

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

Kolejny wariant o tej samej długości:while 1:print(*sorted(input(),key=lambda x:-('/'<x<':')),sep='')
Byte Commander

5

Perl, 17 bajtów

Kod 16 bajtów + 1 przełącznik

s/\d/!print$&/ge

Wymaga -p.

Stosowanie

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

Alternatywnie:

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

Wymaga -n.

Stosowanie

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

1
Fajnie jest widzieć, że język nie golfowy jest konkurencyjny, nawet w stosunku do języków golfowych.
James

@DrGreenEggsandHamDJ Cieszę się, że ci się podobało! Nie dodaję wielu odpowiedzi, ale całkiem podobało mi się rozwiązanie tego! Jestem też pewien, że niektórzy ludzie sklasyfikowaliby Perla jako język golfowy, ponieważ jest on opisany jako tylko do pisania !
Dom Hastings,

5

Hoon , 92 83 bajty

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

++loredzieli wieloliniowy przewód na a (list cord), (trip +<)zamienia go w taśmę. ++skiddzieli listę na dwie części: jedna strona, w której funkcja zwraca tak, jedna strona, w której zwraca nie. Nasza funkcja próbuje parsować znak za ++nudpomocą (numerycznego) i sprawdza, czy parsuje się w pełni, a następnie łączymy obie listy z powrotem w taśmę.

> %.
  '''
  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
Boże, nigdy nie będę głosować za Hoonem. ♥
Lynn

4

MATL , 13 12 bajtów

`jt4Y2m&)hDT

Wychodzi z błędem (domyślnie dozwolone), generując prawidłowe dane wyjściowe.

Wypróbuj online!

Wyjaśnienie

`          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 bajtów

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

V jest niedokończonym językiem golfowym opartym na łańcuchach 2D. Mimo, że jest niedokończony, program ten działa od zatwierdzenia 45 , który został opublikowany ostatniej nocy, co czyni go konkurencyjną odpowiedzią. (Większość moich poprzednich odpowiedzi V było niekonkurencyjnych).

Uwaga, końcowy znak nowej linii jest konieczny, chociaż wynika to z błędu.

Wypróbuj online!

Wyjaśnienie:

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

¨Ä©¨ä©/²± rozwija się do wyrażenia regularnego vim:

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

która nie jest cyfrą, (\D)po której następuje cyfra (\d)i zamienia je.

Ponieważ jest on wypełniony dużymi znakami Unicode, oto odwracalny zrzut heksowy:

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

4
Jestem naprawdę dumny z tej odpowiedzi. Po dłuższej pracy nad językiem może to być o 4-5 bajtów krótsze, ale fajnie jest widzieć funkcje, nad którymi pracuję, są rzeczywiście przydatne. To nie zadziałałoby dzień temu. = D
James

3

JavaScript ES6, 40 bajtów

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

Wypróbowałem kilka innych rozwiązań, ale nie mogłem go pomniejszyć.
Moja pierwsza próba była, a=>[...a.match(/\d/g),...a.match(/\D/g)].join``ale to 5 bajtów dłużej

Wypróbuj tutaj


3

CJam, 9 13 16 bajtów

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

Nie ma f$...

Ta 13-bajtowa wersja prawie działa:

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

3

PowerShell v2 +, 55 bajtów

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

Ze względu na potrzebę obsługi wprowadzania wieloliniowego, musimy enkapsulować nasze -replaceinstrukcje za pomocą pętli i -splitznaków nowej linii. W przeciwnym razie w zasadzie odpowiada rozwiązaniu JavaScript .


3

Pyth - 11 bajtów

Nie podoba mi się mój test grupowania. Pobiera dane wejściowe jako listę linii, powiedz mi, czy to nie jest w porządku.

jms_.g}k`MT

Wypróbuj online tutaj .


3

Pyth, 16 15 bajtów

1 bajt dzięki @FryAmTheEggman .

jms+@J`MTd-dJ.z

Wypróbuj online!

Przykładowe dane wejściowe:

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.

Przykładowe dane wyjściowe:

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.

Jak to działa

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

Nie potrzebujesz, Uponieważ mapy automatycznie rzucają liczby całkowite na zakresy.
FryAmTheEggman

Dzięki za przypomnienie!
Leaky Nun

2

Siatkówka, 16 bajtów

Stabilny sortowanie bąbelkowe.

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

Przykładowe dane wejściowe:

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.

Przykładowe dane wyjściowe:

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.

Wypróbuj online!


1
Zaktualizuj swój kod. Liczby mogą pojawiać się między słowami. Jeśli twój jest zaktualizowany, to jest w porządku.
SibiCoder,

2

C #, 59 bajtów

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

Prosta funkcja C # lambda przy użyciu wyrażenia regularnego.

Próbka wyjściowa

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 bajtów

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

Zdecydowanie nie jest to najkrótsze rozwiązanie, ale pomyślałem, że byłoby to dobre zastosowanie LINQ.


Podobne, ale nieco krótsze: string.Join ("", s.Where (c => char.IsDigit (c)). Concat (s.Where (c =>! Char.IsDigit (c))));
Marc

@Marc wow, używam tego języka od 5 lat i nie wiedziałem, że char.IsDigitistnieje ...
Nick Mertin

2

Współczynnik 61

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

To naiwne podejście.

"\n"splitdzieli ciąg na górze stosu na linie. Następnie dla eachwiersza:

  1. [ digit? ] partition dzieli każdą linię tylko na cyfry i tylko na cyfry
  2. [ write ] bi@wypisuje oba i nlwypisuje nowy wiersz.

PS:

Jako słowo 90 bajtów (71, jeśli zastąpisz-factish-long-name 1 literą):

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

2

Pyth, 14 bajtów

FG.zo_:N"\d"0G

Wypróbuj online!

Wyjaśnienie:

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

Logika rozwiązania jest taka sama jak w odpowiedzi Lynn .


2

Java 8, 130 126 86 bajtów

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

-4 bajty konwertują Java 7 na 8 i usuwając nieużywany znak
-40 bajtów konwertuje program do działania i zmienia [^\\d]na\\D

Wyjaśnienie:

Wypróbuj tutaj.

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

Wynik obejmuje +1 za -ropcję sed.

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

Kilkakrotnie przełącza jeden znak nie będący liczbą, a następnie jeden znak liczby, aż nie będzie więcej podstawień.

Niestety, wyrażenia regularne sed nie mają \dlub \D, więc muszą być napisane odręcznie.

Ideone.


1

Oktawa, 37 32 bajty

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

Dane wejściowe mogą być wielowierszowe; zobacz (zaktualizowane) wyzwanie
Luis Mendo

1

Clojure, 113 bajtów

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

Sortuje cyfry na początku linii.


1

Oracle SQL 11.2, 131 bajtów

Linie w ciągu wejściowym są oddzielone „¤”. W ten sposób nie jest konieczne tworzenie tabeli, która będzie używana jako dane wejściowe.

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.

Zapytanie:

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

Nie grał w golfa

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 bajtów

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

Stosowanie

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

1

Sed, 35 bajtów

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

To tworzy kopię linii, usuwa cyfry z jednej kopii i litery z drugiej, przed ich ponownym połączeniem.


1

Bash, 42 bajty

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

Ostrzegamy, że ta rekurencyjna implementacja wprowadza nowy proces dla każdego wiersza danych wejściowych!



0

Julia 0.6 , 77 bajtów

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

Anonymous function taking a string and printing output. Loops over characters, adding them to the left l or right r buffers until it finds a newline, then it prints and empties buffers. Lots of potential useful constructs like sort, filter and logical indexing (indexing with an array of boolean values) don't work on Strings.

Try it online!


0

Vim, 30 keystrokes

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

Record a search and replace action that moves digits to the left of non-digits. Call the macro recursively until an exception is thrown by the pattern not being found (when there are no more digits to the right of any non-digits).


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.