Взятые прямо с зимнего соревнования по программированию ACM 2013. Вы человек, который любит понимать вещи буквально. Следовательно, для вас конец Мира предопределен; последние буквы "The" и "World" сцеплены.
Создайте программу, которая принимает предложение, и выводите последнюю букву каждого слова в этом предложении как можно меньше места (наименьшее количество байтов). Слова отделяются чем угодно, кроме букв алфавита (65 - 90, 97 - 122 в таблице ASCII.) Это означает, что подчеркивания, тильды, могилы, фигурные скобки и т. Д. Являются разделителями. Между каждым словом может быть несколько разделителей.
asdf jkl;__zxcv~< vbnm,.qwer| |uiop
-> flvmrp
pigs, eat dogs; eat Bob: eat pigs
-> ststbts
looc si siht ,gnitirw esreveR
-> citwR
99_bottles_of_beer_on_the_wall
->sfrnel
Ответы:
Perl 5, 18 байт
Требуется
-p
переключатель командной строки. Именованное свойствоL
соответствует только буквенным символамA-Za-z
. Существует несколько сотен таких именованных свойств, но при работе с текстом ASCII очень немногие из них интересны. Кроме того\pL
, единственная другая реальная нота\pP
, которая соответствует пунктуации.Попробуйте онлайн!
Perl 5, 17 байт
Однобайтовое улучшение от Dom Hastings
Требуется
-n
(и-l
для поддержки нескольких входов).Попробуйте онлайн!
Пример использования
источник
\w
также совпадает с цифрами и подчеркиванием.|.
не было очевидным (по крайней мере для меня).-1
по прибытииprint/\pL*(\pL)/g
, кажется, выход то же самое для ваших тестов!изд, 35 знаков
Итак, мир заканчивается в ред. Поскольку мне нравится быть слишком буквальным, я решил написать, чтобы написать решение с ed - и, очевидно, это на самом деле язык программирования . Он на удивление короток, даже если учесть, что в этой ветке уже есть множество более коротких решений. Было бы лучше, если бы я мог использовать что-то другое
[a-zA-Z]
, но, учитывая, что ed не является языком программирования, на самом деле он достаточно хорош.Во-первых, я хотел бы сказать, что это анализирует только последнюю строку в файле. Можно было бы проанализировать больше, просто введите
,
в начале две первые строки (это указало диапазон «все», а не стандартный диапазон последней строки), но это увеличило бы размер кода до 37 символов.Теперь для объяснений. Первая строка делает именно то, что делает решение Perl (кроме как без поддержки символов Unicode). Я не скопировал решение Perl, я просто изобрел нечто подобное по стечению обстоятельств.
Вторая строка печатает последнюю строку, чтобы вы могли видеть результат. Третья строка заставляет выйти - я должен это сделать, в противном
ed
случае напечатал бы,?
чтобы напомнить вам, что вы не сохранили файл.Теперь о том, как его выполнить. Ну, это очень просто. Просто запустите
ed
файл, содержащий тестовый пример, пока я пишу мою программу, вот так.-s
молчит. Это предотвращаетed
вывод некрасивого размера файла в начале. В конце концов, я использую его как скрипт, а не как редактор, поэтому мне не нужны метаданные. Если бы я не сделал этого, ed показал бы размер файла, который я не мог бы предотвратить иначе.источник
Javascript, 49
Он использует регулярное выражение для удаления всех символов, которые идут перед буквой, а также всех не буквенных символов. Тогда мы остаемся с последней буквой каждого слова.
Спасибо tomsmeding за хорошее улучшение.
источник
alert(prompt().replace(/.(?=[a-z])|[^a-z]/gi,''))
С, 78
Golfed:
С пробелами:
Выход:
источник
c
:main(c,s)char**s;{for
GNU Sed,
403837тестирование
Запустите sed:
Выход:
объяснение
Первая замена заменяет все границы слов, которым предшествует желаемая группа соответствия, новой строкой. Это позволяет легко удалить все посторонние символы во второй замене.
редактировать
источник
sed
«Ss
команда имеетi
флаг для случаев нечувствительным соответствия:s/[a-z]\b/&\n/gi
.\b
считает_
с , чтобы быть буквы, так что если какие - либо слова в тесте END с_
, последняя буква этого слова на не включены в выходныеGrep and Paste,
363428Если требуется последняя новая строка, замените
tr -d \\n
наpaste -sd ''
.редактировать
tr
вместоpaste
(-4), спасибо manatwork .источник
paste -sd ''
, ноtr -d \\n
короче. Что касаетсяgrep
, он имеет-i
переключатель значение «игнорировать регистр», который может сделать его короче:grep -io '[a-z]\b'
.tr
также удалите последний перевод строки. Режим без учета регистра, конечно, короче, спасибо.sed, 37 символов
Равная длина ответа Тора , но, думаю, проще.
Логика вполне тривиальна - замените последовательности букв их последней буквой, а затем удалите все не-буквы.
источник
Математика, 39
Тест:
источник
LetterQ
должен называтьсяLettersQ
:) Я не думал об этом для тестирования целых строк.К, 49
,
источник
Скала, 59 (или 43)
Предполагая, что строка уже в
s
:Если вам нужно читать из приглашения и печатать, а не использовать вывод REPL, преобразуйте
s
вreadLine
и оберните вprintln()
течение 59.источник
x86: 54 байта
Предположим, подпрограмма cdecl с подписью
void world_end(char *input, char *output)
:источник
Си, 32
Язык Xi все еще находится на стадии бета-тестирования, но, похоже, он хорошо работает с Code Golf, поэтому я решил, что с таким же успехом могу показать еще одно короткое и функциональное решение (и немного прорекламировать язык :-)).
источник
Mathematica
625752тестирование
источник
Python3, 59 символов
Правильно разбирается с заглавными буквами и подчеркиванием. 2 должен пройти
re.sub
наre.IGNORECASE
флаг без необходимости использованияre.I
.источник
Питон, 76 символов
import re;print "".join(re.findall("([a-zA-Z])(?=$|[^a-zA-Z])",raw_input()))
источник
print
.import re;print(*re.findall("([a-zA-Z])(?=$|[^a-zA-Z])",input()),sep='')
Python 3.x, 64 байта
источник
for
.Луа, 42
Пример использования:
lua script.lua "asdf jkl;__zxcv~< vbnm,.qwer| |uiop"
источник
Mathematica
71474561Вернемся к чертежной доске, после того как @belisarius обнаружил ошибку в коде.
тестирование
источник
\\w
соответствует_
, так что это не работает для (например)"asdf jkl__zxcv~<vbnm,.qwer| |uiop"
Row@StringTake[ StringCases[#, LetterCharacter ..], -1] &@"asdf jkl__zxcv~<vbnm,.qwer| |uiop"
дает мнеflvmrp
, но#~StringCases~RegularExpression@"\\w\\b" <> "" &@"asdf jkl__zxcv~<vbnm,.qwer| |uiop"
возвращаетсяfvmrp
сюда. Получаем ли мы одинаковые результаты?Python 2,
88 80 75 6968Входные данные:
435_ASDC__uio;|d re;fG o55677jkl..f
Выход:
CodeGolf
Это решение может быть сокращено до 67 символов, если вы разрешите выводу включать символы возврата (код ASCII 8) в начале. Вывод будет визуально идентичным.
Тот же вход, (визуально) тот же выход.
<BS>
должен быть символом возврата.источник
C #
Метод, 105 байт: (предполагается использование для System, System.Text.RegularExpressions и System.Linq)
Программа, 211 байт:
источник
VBA, 147
161источник
Ruby 2.0, 25 (+1) символов
Должен быть запущен с
-p
выключателем:источник
ruby
версию. 1.9.2 выводит «# <Enumerator: 0x9f65e10> # <Enumerator: 0x9f65d98> # <Enumerator: 0x9f65d34> # <Enumerator: 0x9f65cd0>».ruby 2.0.0p0 (2013-02-24 revision 39474
). При запуске программы с версией 1.8.7 она выводит значение ASCII! Не знал, что между версиями так много различий.gsub(/(\w+)\W*/){$1[-1]}
.Сетчатка , 16 байт
Попробуйте онлайн!
объяснение
источник
Сетчатка , 20 байт
Попробуйте онлайн
Эта программа совместима с версией 0.8.2
источник
Java 8, 43 байта
Порт @ mbomb007 в ответ Retina .
Объяснение:
Попробуйте онлайн.
Дополнительное объяснение для регулярного выражения:
источник
(?i)
для флага.Smalltalk , вкус Squeak / Pharo
122 символа с традиционным форматированием для этого метода добавлен в строку:
62 символа в Pharo 1.4, с регулярным выражением и странным форматированием
источник
J: 60 символов (или 38 символов для менее правильной версии)
Если мы хотим, чтобы программа прерывалась всякий раз, когда слова заканчиваются двоеточием или подчеркиванием, мы можем упростить это до 38 символов.
Образец прогона:
источник
(#~[:2&|64 90 96 122&I.@(u:inv)){:&>;:
или 43 байта для не-явной версии:(#~[:2&|64 90 96 122&I.@(u:inv))@:({:@>)@;:
. При этом используется глагол индекса интервала,I.
который интерпретируется64 90 96 122
как набор интервалов(__, 64] (64, 90], (90, 96], (96, 122], (122, _)
и возвращает индекс итервала, которому принадлежит его аргумент, код ascii символа char. Если этот индекс нечетный, он не в алфавитном порядке.;:
интерпретируетсяabc_
как одно слово, так как имена переменных могут содержать подчеркивания. +10 байт, чтобы добавить(#~~:&'_')
, вероятно, неэффективное исправление'_'-.~
или что-то подобное.Это на PHP . 197 байт :( Я новичок
Отредактировано Теперь это 171 байт
источник
foreach((' ',preg_replace('/(\W|_)+/',' ',$_GET['line'])) as $d){$a=substr($d,-1,1);$o=ORD();if(($o>=97 && $o<=122) || ($o>=65 && $o<=90)){echo $a;}}
149, если это работает.\W|_
исключает цифры; так что вы должны добавить\d
к своему регулярному выражению или использовать/[^a-z]+/i
К 30
источник
Japt v2, 16 байт
Попытайся
источник
f"%l(?!%l)" q
(не работает в v2, потому что парсер не любит(?
)