Вдохновленный Codewars Kata .
Ваша цель - взять строку ввода, такую как эта:
"'Twas a dark and stormy night..."
и вернуть строку, содержащую позицию каждого символа в алфавите, разделенную пробелами и игнорирующую неалфавитные символы, например:
"20 23 1 19 1 4 1 18 11 1 14 4 19 20 15 18 13 25 14 9 7 8 20"
Для дополнительной задачи вы можете заменить любые числовые символы в исходной строке на себя + 27. Например, "25"
станет "29, 32"
. Это совершенно необязательно.
Вы должны использовать 1-индексирование ( 'a'==1
, 'b'==2
и т.д.)
Дополнительные правила:
Вы должны вернуть строку, а не массив.
Конечный пробел в порядке.
Победитель имеет наименьшее количество байтов.
Удачи!
Ответы:
05AB1E , (5?) 7 байтов
Самые правые два байта являются форматированием вывода
Порт моего Jelly ответа , но O5AB1E более лаконичен для фильтрации алфавита.
Попробуйте онлайн!
Как?
источник
ðý
можно добавить трейлинг . Но так как половина списков вывода ответов, я думаю, просто оставьте это пока.Java 8,
8278726962 байта-13 байт благодаря @ OlivierGrégoire .
Попробуйте онлайн.
Объяснение:
источник
s->s.chars().forEach(c->{if(c>64&~-c%32<26)System.out.print(c%32+" ");})
(72bytes).s->{for(int c:s)System.out.print(c>64&~-c%32<26?c%32+" ":"");}
(62 байта), используя вchar[]
качестве входных данных вместоString
.Python 3 ,
626049 байтов-5 байт благодаря Джо Кинг .
-8 байт благодаря pLOPeGG .
После этих улучшений, этот ответ теперь похож на Jonathan Allan «s ответ .
Попробуйте онлайн!
источник
%32
что тоже работаетR ,
5550 байтПопробуйте онлайн!
Считывает ввод из стандартного ввода,
преобразует в верхний регистр,удаляет непрописныебуквенные буквы, преобразует в кодовые точки,вычитает до 64мод на 32 и печатает в стандартный вывод, разделенный пробелами.Спасибо Кевину Круйссену за гольф!
источник
[^A-z]
APL (Dyalog Unicode) ,
24, 20, 1413 байт-4 байта благодаря Захари (и мистеру Xcoder)!
-6 байт благодаря Адаму!
-1 байт благодаря ngn!
Попробуйте онлайн!
Объяснение:
Мое первоначальное решение:
APL (Dyalog Unicode) ,
2420 байтПопробуйте онлайн!
Объяснение:
Не смейся надо мной, я новичок в APL :)
источник
{1(819⌶)⍵}
может быть1(819⌶)⊢
. Иначе потрясающая работа! Надеюсь, вам понравится APL в будущем!1
к819⌶
и сохранить пять пути удаления 27s непосредственно:27~⍨⎕A⍳819⌶⍨∘1
; или пересечение с алфавитом:⎕A⍳⎕A∩⍨819⌶⍨∘1
Python 2 , (45?) 55 байтов
11 байтов добавлено для форматирования вывода, что также делает это несовместимым с Python 3)
Еще один порт моего желе ответа.
Попробуйте онлайн!
Неформатированная версия (возвращает список целых чисел):
источник
JavaScript (Node.js) ,
695554 байтаПопробуйте онлайн!
Пояснение:
11 байтов сохранено благодаря @Kevin
Еще 1 байт благодаря @Neil
Вы можете добавить поддержку чисел для некоторых дополнительных байтов (спасибо @neil)
JavaScript (Node.js) , 62 байта
Попробуйте онлайн!
источник
a-z
наA-Za-z
иi.toLowerCase().charCodeAt()-96
кi.charCodeAt()%32
parseInt(i,36)-9
сохраняет еще один байт..match(/[^_\W]/g).map(i=>(parseInt(i,36)+26)%36+1)
позволяет поддерживать номера, но не уверен, что это лучший способ.Желе , (7?) 8 байт
Самый правый байт - выходное форматирование
Полная программа, принимающая строку в формате Python, которая печатает результат в STDOUT
Попробуйте онлайн!
Как?
источник
Japt v2.0a0
-S
,1210 байтПопробуй это
объяснение
источник
код операции x86, 35 байт
Предполагая, что результат содержит хотя бы одну букву, а не
{|}~
40 байтов, позволяя все символы ASCII
источник
Stax ,
9109 байтЗапустите и отладьте его
-1 байт благодаря @recursive
Объяснение:
Stax , 7 байт
Запустите и отладьте его
Этот выводит новую строку-разделенную. Распакованный:
vmVaI^|c
. Аналогично, но с картой, которая неявно выводится с завершающим переводом строки.источник
Пробел ,
152117 байт-35 байт благодаря @Lynn .
Буквы
S
(пробел),T
(табуляция) иN
(новая строка) добавляются только как подсветка.[..._some_action]
добавлено только в качестве объяснения.Попробуйте онлайн (только с пробелами, вкладками и новыми строками).
Объяснение в псевдокоде:
источник
05AB1E , 8 байтов
Попробуйте онлайн!
или, если мы можем вернуть массив:
05AB1E , 6 байтов
Объяснение:
Попробуйте онлайн!
или если вы хотите, чтобы он считал числа:
05AB1E , 13 байтов
Попробуйте онлайн!
источник
05AB1E , 14 байтов
Также обрабатывает числа
Попробуйте онлайн!
источник
Древесный уголь , 21 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Добавьте цифры к предопределенной переменной строчных букв.
Цикл на входе в нижнем регистре.
Если текущий символ является буквой или цифрой,
напечатать его 1-индексированный индекс,
и оставьте место для следующего значения.
источник
Красный , 93 байта
Попробуйте онлайн!
источник
#"a"-#"z"
можно изменить как на строчные, так и на прописные буквы; а затемlowercase
может быть удален; а-96 + to-char c
можно по модулю-32? Не уверен, что это даже спасет байты в красном, хотя.parse
Функция @KevinCruijssen собирает строки, даже если совпадение является одним символом, поэтому мне всегда нужноto-char
. Для заглавных букв мне нужно добавить в кодировку # "A" - # "Z", что портит усиление (если оно есть) от устраненияlowercase
.#"A"-#"Z"
немного боялся, возможно, не сильно выиграетlowercase
, потому что это всего на 1 байт короче. И я знал, что вам понадобитсяto-char
, просто не был уверен, что-96 +
и по модулю 32 будут одинакового размера.Perl 5 , 47 байт
С дополнительным вызовом разбора цифр:
Попробуйте онлайн!
Уменьшено до 38 байт за счет игнорирования цифр
источник
PHP , 70 байт
Попробуйте онлайн!
-5 байт благодаря Кевину
источник
&&
играть в гольф: можно&
иord(strtolower($c))-96
можноord($c)%32
. Кроме того, я думаю, что вы можете удалить~
ранее$c
, но я не уверен. Я не слишком много программировал на PHP и не знаю, для чего~
он используется здесь.Perl 5
-p
, 35 байтПопробуйте онлайн!
Включает дополнительную часть о цифрах.
источник
/\w/
включает в себя_
-F/[^0-9\pL]|/
: Попробуйте онлайн!Japt 2.0
-S
, 9 байтЗапустите его онлайн
Объяснение:
источник
Perl 6 , 32 байта (альфа), 41 байт (альфа + цифра)
Попробуй (32 байта альфа)
Попробуйте это (41 байт букв + цифра)
Expanded:
32 байта альфа
41 байт альфа + цифра
источник
Э
, но я попросил у OP пояснить, является ли ввод только ASCII или нет.Tcl , 93 байта
Попробуйте онлайн!
источник
PHP
108105 байтПопробуйте онлайн (108 байт)
Tri это онлайн (105 байт)
-3 байта, благодаря @manassehkatz (измените уровень strtolower и удалите AZ из регулярных выражений)
Код, пытался избежать любого цикла
объяснение
источник
strtolower($argv)
и удаляя заглавные буквыA-Z
из регулярного выражения.$argv[1]
или$argn
вместо$argv
?join
на 3 байта корочеimplode
.Python 3 , 84 байта
Попробуйте онлайн!
источник
Python 2,
110 байтов104 байта , с пользовательским вводомПопробуйте онлайн!
Python 2,
105 байтов, 104 байта,96 байтов , гдеt
предопределено:Попробуйте онлайн!
Давайте разберем его с более читаемой версией:
Сначала мы определяем
alphabet
как алфавит.Далее мы используем понимание списка, чтобы:
t
Наконец, мы объединяем все вместе и печатаем.
Изменить: изменено
print
(и потеря переносимости), чтобы сохранить байты и заставить его работать вне функцииРедактировать 2: Добавлена версия с
input()
вместо предопределенных переменныхИзменить 3: удалено 8 байтов в решениях 1 и 2 благодаря Джо Кинг
источник
+
), где остальные?if
,for
и" "
[]
вjoin
PowerShell , 63 байта
Попробуйте онлайн!
(Кажется долго ...)
Принимает входные данные
$args
, преобразует их в.ToUpper
регистр , преобразует их какchar
-array, передает их вfor each
цикл. Внутри цикла мы вычитаем либо сам или 64 из значения (ASCII INT), в зависимости от того или нет текущее значение-in
диапазона65
для90
(то есть, что это заглавная буква ASCII). Эти значения остаются в конвейере, и мы используем-n
ote
qual для удаления не буквенных значений (потому что все они равны нулю). Эти числа инкапсулированы в строку, так как стандартная строковая спецификация массива состоит в том, чтобы разделить его пробелами, поэтому мы получаем это довольно дешево. Эта строка остается в конвейере и вывод неявный.источник
MS-SQL, 133 байта
Согласно нашим правилам ввода- вывода , ввод осуществляется через уже существующую таблицу t с полем varchar s .
Требуется SQL 2017 или более поздняя версия. Должен также выполняться в
master
базе данных, потому что я использую системную таблицу с именемspt_values
, которая (при фильтрацииtype='P'
) содержит счетные числа от 0 до 2047.В основном я соединяю таблицу чисел с использованием входной строки
SUBSTRING()
, которая возвращает отдельную строку для каждого отдельного символа. Это фильтруется только с использованием буквLIKE'[a-z]'
, затем мы получаем их значение ASCII и вычитаем 64. Эти числа объединяются в строку с помощью функции (новичок в SQL 2017)STRING_AGG
.источник
Pyth , 10 байт
Я почти уверен, что это может быть чуть-чуть ... -2 байта, если я могу вывести в виде списка, некоторые ответы, кажется, но это не в спецификации
Попробуйте онлайн!
источник
d
(jdfTmhGr0
10 байт).C (gcc) , 67 байт
Попробуйте онлайн!
Преобразует каждый символ в нижний регистр, смещает его код на -96 и, если он попадает в диапазон алфавита с 1 индексом, печатает код смещения
источник
JQ , 45 байт
Попробуйте онлайн
источник