Ayrı alfabe ve sayılar


15

Bir metin paragrafında rakamlar ve alfabetik harfler karışıktır. Göreviniz sayıları sol tarafa ve alfabetik harfleri sağ tarafa her satırın aynı sırada ayırmaktır.

Kurallar:

  1. Sayılar düz tamsayılardır; bu nedenle ondalık nokta ve negatif / pozitif işaret yok.
  2. Sayılar bitişik olabilir veya olmayabilir, ancak durum ne olursa olsun, aynı sıraya göre sol tarafa itilmelidir.
  3. Kelimeler arasında sayılar olabilir.
  4. Metin, boşluklar, alt çizgiler, virgüller ve noktalarla birlikte yalnızca ASCII alfabetik harfleri ve sayıları içerir.
  5. Bunu en az tuş vuruşu (vim makroları gibi) veya komut dosyası oluşturma durumunda en az bayt ile yapan kişi kazanır.

Örnek Metin:

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.

Beklenen çıktı:

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 Hoş geldiniz! Korumalı alanı bir dahaki sefere kullanmak isteyebilirsiniz . Burada yapmadan önce zorlukları göndermek için kullanılır. Bu şekilde diğer kullanıcılardan geribildirim alabilir ve mücadeleyi geliştirebilirsiniz
Luis Mendo

1
Kullanılması alfabe ortalama üzere mektupta , ben, Hint İngilizcesi kendine özgü bir iman edilir.
TRiG

2
@AstroDan Her ikisine de varsayılan olarak izin verilir.
Adnan

2
Şimdi oldukça açık görünüyor. @ yakın seçmenler - oylarınızı şimdi geri çekebileceğinizi düşünüyor musunuz?
Dijital Travma

1
İlk test durumu düzeltildi, çünkü büyük olasılıkla yazım hatalarından başka bir şey değildi. Bu gönderiyi yeniden açmak için oy kullanıyorum.
Bassdrop Cumberwubwubwub

Yanıtlar:


11

Retina , 14 bayt

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

Çevrimiçi deneyin!

açıklama

Obir sıralama aşaması sunar. %Retina'ya dönüşümü her satıra ayrı ayrı uygulamasını söyler. $eşleşmeleri belirtilen oyuncu değişikliğinin sonucuna göre sıralamasını söyler.

Normal ifadenin kendisi \d|(.)ya bir rakamla ya da gruba kaydedilen herhangi bir şeyle eşleşir 1. Bu, $#1grubun yakalama sayısı olan ikame edilir 1. Yani, rakamlar 0için sıralama anahtarı ve diğer her şey için sıralama anahtarı 1. Retina'da sıralama istikrarlı olduğundan, bu sadece rakamları sola ve diğer her şeyi sağa taşır.


9

05AB1E, 14 10 bayt

Kod:

|vyþyyþ-¶J

Açıklama:

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

Örnek Giriş:

Bir kelime 433884 gibi çok sayıda metne sahip olabilir,
ancak tüm uyuşturucular sol tarafa
taşınmalıdır, ancak alph6abetical va9lues sağ tarafa yapıştırılmalıdır.
Metin, hlep veya dfeintino gibi karıştırılmış karakterleri ve hatta
anlamsız sözcükleri bir araya getirebilir.

Örnek Çıktı:

433884Bir sözcük gibi herhangi bir sayıdaki metne sahip olabilir,
ancak 89 , ancak tüm sayılar sol tarafa
taşınmalıdır 6946 ancak alfabetik değerler sağ tarafa yapıştırılmalıdır.
4292 Metin, hlep veya dfeintino gibi karıştırılmış karakterler veya hatta bir
araya getirilmiş 4381 somutsuz kelime içerebilir .

Çevrimiçi deneyin


8

Python 3, 64 bayt

Üç eşdeğer çözüm! Seçemiyorum.

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

Aynı uzunluktaki başka bir varyant:while 1:print(*sorted(input(),key=lambda x:-('/'<x<':')),sep='')
Bayt Komutanı

5

Perl, 17 bayt

16 bayt kodu + 1 anahtar

s/\d/!print$&/ge

Gerektirir -p.

kullanım

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

Alternatif:

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

Gerektirir -n.

kullanım

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

1
Golf dışı bir dilin, golf dillerine karşı bile rekabetçi olduğunu görmek harika.
James

@DrGreenEggsandHamDJ Sevdiğinize sevindim! Çok fazla cevap eklemiyorum ama bunun çözümünü çok beğendim! Ayrıca eminim bazı insanlar Perl'i bir golf dili olarak sınıflandıracaktır, çünkü sadece yazma olarak tanımlanmıştır !
Dom Hastings

5

Hoon , 92 83 bayt

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

++loreçok hatlı bir kabloyu a (list cord), (trip +<)bir bant haline getirir. ++skidbir listeyi ikiye ayırır: bir tarafı fonksiyonun evet, bir tarafı da hayır döner. İşlevimiz karakteri ++nud(sayısal) ile ayrıştırmaya çalışır ve tam ayrışıp ayrışmadığını kontrol eder ve sonra iki listeyi tekrar bir teybe kaynak yaparı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.
  '''
  |*
  *
  (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
Tanrım, asla değil Hoon upvote. ♥
Lynn

4

MATL , 13 12 bayt

`jt4Y2m&)hDT

Hatalı çıkışlar (varsayılan olarak izin verilir), doğru çıktıyı üretir.

Çevrimiçi deneyin!

açıklama

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

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

V, bitmemiş, 2D dizgi tabanlı bir golf dilidir. Tamamlanmamış olmasına rağmen, bu program dün gece yayınlanan taahhüt 45'ten itibaren çalışıyor ve bu da bunu rakip bir cevap haline getiriyor. (Önceki V cevaplarımın çoğu rakip değildi.)

Bu bir hatadan kaynaklansa da, sondaki satırsonu gereklidir.

Çevrimiçi deneyin!

Açıklama:

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

¨Ä©¨ä©/²± vim normaline genişler:

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

bu rakamın (\D)ardından rakam olmayan bir rakam gelir (\d)ve bunları değiştirin.

Bu, kaba unicode karakterlerle doldurulduğundan, burada tersinir bir hexdump bulunur:

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

4
Bu cevaptan gerçekten gurur duyuyorum. Dil üzerinde biraz daha çalışmayla, bu kolayca 4-5 bayt daha kısa olabilir, ancak üzerinde çalıştığım özelliklerin gerçekten yararlı olduğunu görmek güzel. Bu bir gün önce işe yaramazdı. = D
James

3

Javascript ES6, 40 bayt

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

Diğer birkaç çözümü denedim, ancak bundan daha küçük olamazdı.
İlk denememdi a=>[...a.match(/\d/g),...a.match(/\D/g)].join``ama bu 5 bayt daha uzun

Burada deneyin


3

CJam, 9 13 16 bayt

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

Yok f$...

Bu 13 baytlık sürüm neredeyse çalışıyor:

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

3

PowerShell v2 +, 55 bayt

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

Çok satırlı girişi destekleme ihtiyacı nedeniyle, -replaceifadelerimizi bir döngü ve -splityeni satırlarda kapsüllemeliyiz . Aksi takdirde, temel olarak JavaScript çözümüne .



3

Pyth, 16 15 bayt

@FryAmTheEggman sayesinde 1 bayt .

jms+@J`MTd-dJ.z

Çevrimiçi deneyin!

Örnek giriş:

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.

Örnek çıktı:

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.

Nasıl çalışır

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

İhtiyacınız yoktur Uçünkü haritalar otomatik olarak tamsayı aralıklara yayınlar.
FryAmTheEggman

Hatırlattığın için teşekkürler!
Leaky Nun

2

Retina, 16 bayt

Kararlı kabarcık sıralama.

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

Örnek giriş:

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.

Örnek çıktı:

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.

Çevrimiçi deneyin!


1
Lütfen kodunuzu güncelleyin. Sayılar kelimeler arasında gelebilir. Sizinki güncellenirse, o zaman para cezası.
SibiCoder

2

C #, 59 bayt

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

Normal ifade kullanarak basit bir C # lambda işlevi.

Örnek çıktı

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 bayt

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

Şimdiye kadar en kısa çözüm değil, ama bunun LINQ'nun iyi bir kullanımı olacağını düşündüm.


Benzer ama biraz daha kısa: string.Join ("", s.Where (c => char.IsDigit (c)). Concat (s.Where (c =>! Char.IsDigit (c))));
Marc

@Marc vay, 5 yıldır bu dili kullanıyorum ve char.IsDigitvar olduğunu bilmiyordum ...
Nick Mertin

2

Faktör 61

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

Bu saf bir yaklaşım.

"\n"splityığının üstündeki dizgiyi satırlara böler. Bundan dolayıeach satır için:

  1. [ digit? ] partition her satırı yalnızca rakamlara ve yalnızca rakam olmayan rakamlara böler
  2. [ write ] bi@ hem çıktılar, hem nl yeni satır yazdırır.

Not:

Sözcük olarak 90 bayt (-stishish-long-name yerine 1 harf kullanırsanız 71):

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

2

Pyth, 14 bayt

FG.zo_:N"\d"0G

Çevrimiçi deneyin!

Açıklama:

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

Çözümün mantığı Lynn'in cevabı ile aynıdır .


2

Java 8, 130 126 86 bayt

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

-4 ila 8 Java 7 dönüştürme ve kullanılmayan bir karakter kaldırma bayt
-40 işlevine dönüştürme programı ve değişen bayt [^\\d]için\\D

Açıklama:

Burada deneyin.

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

Puan -rsed seçeneği için +1 içerir .

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

Daha fazla değişiklik yapılıncaya kadar sayı olmayan bir karakteri ve ardından bir sayı karakterini tekrar tekrar değiştirir.

Ne yazık ki sed regexes yok \dya da \D, bu yüzden bunlar uzun el yazılmalıdır.

Ideone.


1

Oktav, 37 32 bayt

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

Giriş çok satırlı olabilir; bkz. (güncellendi) meydan okuma
Luis Mendo

1

Clojure, 113 bayt

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

Basamakları satırın başına sıralar.


1

Oracle SQL 11.2, 131 bayt

Giriş dizesindeki çizgiler '¤' ile ayrılır. Bu şekilde girdi olarak kullanılacak bir tablo oluşturmak gerekmez.

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.

Sorgu :

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

Un-golfed

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 karakter

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

1

Haskell, 60 bayt

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

kullanım

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

1

Sed, 35 bayt

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

Bu, satırın bir kopyasını oluşturur, yeniden birleştirmeden önce bir kopyadaki rakamları ve diğer kopyadaki harfleri kaldırır.


1

Bash, 42 bayt

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

Bu özyinelemeli uygulamanın her girdi satırı için yeni bir süreç çatalladığı konusunda uyarılmalıdır!



0

Julia 0.6 , 77 bayt

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

Dizge alma ve çıktı alma anonim işlevi. Karakterlerin üzerinden geçer, yeni satır bulana kadar sol lveya sağ rarabelleklere ekler , sonra yazdırır ve arabellekleri boşaltır. Gibi potansiyel olarak yararlı bir yapıların Çok sayıda sort, filterve (mantıksal değerler dizisi ile indeksleme), mantıksal indeksleme teller üzerinde çalışma yoktur.

Çevrimiçi deneyin!


0

Vim, 30 tuş vuruşu

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

Bir arama kaydedin ve rakamları rakam olmayan rakamların soluna taşıyan eylemi değiştirin. Bulunamayan desen tarafından bir istisna atılıncaya kadar (basamak olmayanların sağında başka basamak kalmadığında) makroyu özyinelemeli olarak çağırın.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.