Отдельные алфавиты и цифры


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
Кажется довольно ясно сейчас. @ close-избирателей - как вы думаете, вы можете отозвать свои голоса сейчас?
Цифровая травма

1
Исправлен первый тестовый пример, поскольку он, скорее всего, был не более чем опечаткой. Я голосую, чтобы открыть этот пост.
Bassdrop Cumberwubwubwub

Ответы:


11

Сетчатка , 14 байт

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

Попробуйте онлайн!

объяснение

Oвводит этап сортировки. %говорит Retina применить преобразование к каждой строке отдельно. $говорит ему отсортировать совпадения по результату указанной замены.

Само регулярное выражение - \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 должны быть перемещены влево,
а алфавитные символы должны быть вставлены справа.
Текст может содержать символы, перемешанные как hlep или dfeintino, или даже
бессмысленные слова, объединенные вместе.

Пример вывода:

433884В слове может быть любое количество текста, например,
89 но все цифры должны быть перемещены влево
6946, но алфавитные значения должны быть вставлены справа.
4292Текст может содержать символы, перемешанные как хлеп или дфейтино, или даже
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='')
Byte Commander

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

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

5

Хун , 92 83 байта

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

++loreразбивает многолинейный шнур на (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, это незаконченный 2D-язык для игры в гольф. Хотя эта программа еще не завершена, она работает с коммитом 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 байт короче, но здорово видеть, что функции, над которыми я работаю, действительно полезны. Это не сработало бы день назад. = 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

Пиф, 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))));
Марк

@ Марк, вау, я использую этот язык уже 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, если заменить имя-факториста длинным на 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опции для sed.

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

Повторно переключается один нечисловой символ, за которым следует один числовой символ, до тех пор, пока больше не будут сделаны замены.

К сожалению, регулярные выражения sed не имеют \dили \D, поэтому они должны быть записаны от руки.

Ideone.


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,'¤','","')||'"'));

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

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 и логической индексации (индексация с массивом логических значений) не работают на нитях.

Попробуйте онлайн!


0

Vim, 30 нажатий клавиш

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

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.