Окремі алфавіти та цифри


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 Ласкаво просимо на борт тоді! Ви можете скористатися пісочницею наступного разу. Він використовується для розміщення викликів, перш ніж робити це тут. Таким чином ви зможете отримати відгуки від інших користувачів та покращити виклик
Луїс Мендо

1
Використання алфавіту для позначення букви - це, я вважаю, відмінна для індійської англійської мови.
TRiG

2
@AstroDan Обидва дозволені за замовчуванням.
Аднан

2
Зараз здається досить зрозумілим. @ Близькі виборці - ви думаєте, чи можете ви відкликати свої голоси зараз?
Цифрова травма

1
Виправлено перший тестовий випадок, оскільки це, швидше за все, не більше ніж друкарська помилка. Я голосую за повторне відкриття цієї посади.
Bassdrop Cumberwubwubwub

Відповіді:


11

Сітківка , 14 байт

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

Спробуйте в Інтернеті!

Пояснення

Oвводить етап сортування. %говорить Ретіні застосувати перетворення до кожного рядка окремо. $повідомляє його для сортування відповідностей за результатом зазначеної підстановки.

Сам регулярний вираз - \d|(.)це або збігається цифра, або все інше, що потрапляє в групу 1. Це заміщене $#1числом захоплень групи 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 повинні бути переміщені лівою стороною,
але alf6abetical va9lues повинні бути вставлені з правого боку.
Текст може містити chara29cters s2 перемішані, як hlep або dfeintino, або навіть
безглузді слова, котрі поєднуються togith81er.

Приклад Вихід:

433884А слово може мати будь-яку кількість тексту, наприклад,
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='')
Байт-командир

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
Приємно бачити, що мова, що не займається гольфом, є конкурентоспроможною, навіть проти мов для гольфу.
Джеймс

@DrGreenEggsandHamDJ Я радий, що тобі сподобалось! Я не додаю багато відповідей, але мені дуже сподобалося рішення цього! Також я впевнений, що деякі люди класифікують Perl як мову для гри в гольф, оскільки його описано як письмо !
Дом Гастінгс

5

Хун , 92 83 байти

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

++loreрозбиває багаторядковий шнур на a (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

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 - це незавершена, двовимірна мова для гольфу на основі струни. Незважаючи на те, що ця програма не закінчена, ця програма працює з 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
Джеймс

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 байт

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

О, дякую за нагадування!
Лина монашка

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існує ...
Нік Мертин

2

Фактор 61

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

Це наївний підхід.

"\n"splitрозбиває рядок у верхній частині стека на рядки. Потім для eachрядка:

  1. [ digit? ] partition розбиває кожен рядок на лише цифри та нецифрові
  2. [ write ] bi@виводить і те, і nlдрукує новий рядок.

PS:

Як слово 90 байтів (71, якщо ви заміните ім'я-factorish-long-name на 1 букву):

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


2

Java 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

Неодноразово перемикає один символ без числа, а потім один символ цифри, поки більше не буде зроблено підстановок.

На жаль, у сед-регексів немає \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//

Це робить копію рядка, видаляє цифри з однієї копії та літери з іншої, перш ніж їх рекомбінувати.


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буферів, поки не знайде новий рядок, після чого він надрукує та випорожнить буфери. Безліч потенційних корисних конструкцій на зразок sort, filterа логічне індексування (індексація масивом булевих значень) не працює на Strings.

Спробуйте в Інтернеті!


0

Vim, 30 натискань клавіш

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

Запишіть дію пошуку та заміни, яка переміщує цифри зліва від нецифрових знаків. Викликуйте макрос рекурсивно, поки виняток не буде викинуто тим, що шаблон не знайдений (коли більше немає цифр праворуч від будь-яких нецифрових цифр).


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.