Это относительно быстро, но я уверен, что вам понравится.
Codegolf - программа, которая примет ввод в виде предложения, а затем предоставит вывод с первой буквой, заглавной в каждом слове.
Правила:
Представления могут быть не в форме функции. Так что нет:
function x(y){z=some_kind_of_magic(y);return z;}
как ваш окончательный ответ ... Ваш код должен показать, что он принимает ввод и обеспечивает вывод.Код должен сохранять любые другие заглавные буквы, которые есть у ввода. Так
eCommerce and eBusiness are cool, don't you agree, Richard III?
будет отображаться как
ECommerce And EBusiness Are Cool, Don't You Agree, Richard III?
Некоторые из вас могут подумать: "Легко, я просто использую регулярные выражения!" и поэтому использование нативного регулярного выражения на выбранном вами языке игры в гольф повлечет за собой штраф в 30 символов, который будет применен к вашему окончательному количеству кодов. Зло смеется
«Слово» в этом случае - это все, что разделено пробелом. Поэтому
palate cleanser
есть два слова, тогдаpigeon-toed
как считается одно слово.if_you_love_her_then_you_should_put_a_ring_on_it
считается одним словом. Если слово начинается с неалфавитного символа, слово сохраняется, поэтому_this
после рендеринга остается как_this
. (Престижность Мартину Буттнеру за указание на этот контрольный пример).- 4b. Нет гарантии, что слова во входной фразе будут разделены одним пробелом.
Test Case, (пожалуйста, используйте для проверки вашего кода):
Входные данные:
eCommerce rocks. crazyCamelCase stuff. _those pigeon-toed shennanigans. Fiery trailblazing 345 thirty-two Roger. The quick brown fox jumped over the lazy dogs. Clancy Brown would have been cool as Lex Luthor. good_bye
Выход:
ECommerce Rocks. CrazyCamelCase Stuff. _those Pigeon-toed Shennanigans. Fiery Trailblazing 345 Thirty-two Roger. The Quick Brown Fox Jumped Over The Lazy Dogs. Clancy Brown Would Have Been Cool As Lex Luthor. Good_bye
Это код гольф, самый короткий код выигрывает ...
Удачи...
источник
Ответы:
CJam,
1513 байтПопробуйте онлайн в интерпретаторе CJam .
ПСЕВДОКОД
Все модифицированные символы C остаются в стеке и, следовательно, печатаются при выходе.
источник
CSS 2.1, 49
Пояснение :
attr
Функция принимает входные данные изt
(текста) атрибута HTML.text-transform
вcapitalize
.content
свойства псевдоэлемента.::after
.Запускаемый фрагмент :
Примечание : CSS 2.1 определил желаемое поведение:
capitalize
прописные буквы первого символа каждого слова. Тем не менее, CSS3 заглавными буквами первого типографского буквенного блока каждого слова. Таким образом, приведенный выше фрагмент не будет работать должным образом ни на старом IE, который не следовал CSS 2.1; ни на новых совместимых браузерах, которые следуют CSS3.источник
_those
проблеме в браузерах CSS3, но я все еще поддерживаю голосование из-за уникального способа решения проблемы.)Javascript ( ES6 ), 77 байт
комментарии
источник
x&&
. Пустая строка является ложной, поэтому происходит&&
короткое замыкание и возвращает левый операнд, пустую строку. Пространства сохранились.Perl, 13 байт
9 байтов плюс 4 байта для
040p
(при условии, что я правильно интерпретировал правила для специальных вызовов ).-040
устанавливает разделитель входной записи$/
в один пробел, чтобы пробелы были сохранены;\u
последовательность символов преобразует следующий символ заголовка дела.источник
CJam,
1715 байтПроверьте это здесь.
Довольно простая реализация спецификации. Используйте новое,
{}&
чтобы избежать ошибок для последовательных пробелов.Два байта сохранены Денисом.
источник
+
, то это ломается, если входные данные содержат завершающие пробелы.C,
6463 байтаИсправлено: некоторым компиляторам (таким как Clang) не нравятся параметры int вместо argv, поэтому я переместил его в глобальную переменную. Количество байтов остается прежним. Спасибо брезгливому ossifrage за то, что заметил. Спасибо, Денис, до 63 байт.
Ungolfed:
Довольно просто: если значение равно false, символ преобразуется в верхний регистр. Он устанавливается после прочтения пробела: c - '' ложно, только если c == ''. toupper () игнорирует все, что не является строчной буквой, поэтому символы и несколько пробелов в порядке. -1 имеет все установленные биты, поэтому, когда getchar () возвращает -1, оператор NOT устанавливает его в ноль, и цикл останавливается. a объявлен как глобальная переменная, поэтому он инициализируется в ноль (false). Это гарантирует, что первое слово пишется с большой буквы.
источник
while(~(c=getchar())
- Мне нравится это. Clang на самом деле не скомпилирует это, но вы можете получить то же количество символов с помощьюc;main(a){...}
a
иc
порядок троичного оператора, вы можете заменить==
на,-
чтобы сохранить один байт.while(!(c = getchar()))
, верно?~
и логическое!
не совпадают. В C все, что не равно нулю, считается верным, поэтому ваше состояние будет таким,while((c = getchar()) == 0)
которое, конечно, не будет работать. Побитовый оператор NOT~
отрицает значение побитово. Чтобы разорвать цикл,~c
должен быть ноль: это означает, что все биты должны быть равны единице, так что при отрицании они становятся всеми нулями. Это значение (для 32-разрядного типа int)0xFFFFFFFF
равно-1
(EOF) , если оно подписано .Python 3,
5956 байтСпасибо @Reticality за 3 байта.
источник
print(end=f*c.upper()or c)
? Это сэкономило бы 4 байтаВерсия Perl <5.18,
3027262524
символы+1
для-n
.\u
делает следующий символ в верхнем регистре строки . @ThisSuitIsBlackNot указал на это, чтобы сохранить 1 байт. Прежде чем мы использовали функциюucfirst
.Из perldocs ,
поскольку
$"
вычисляет пробел, это сохранит пробелы. Так как мы хотим установить$,
пробел и ввести пробел для разделения, @nutki указал, что мы можем использовать оба в качестве входных данных для разделения. Это экономит 3 байта от того, что у нас было раньше, который сначала устанавливался,$,
а затем вводил$"
в разделение.Использование
,
для карты вместо{}
сохранения дополнительного байта, как указал @ alexander-brett.Бежать с:
источник
...map"\u$_",split...
> <> (Рыба) , 39 байт
Метод:
a-z
затем распечатайте его. (слева направо код для этой частиi::'backquote')$'{'(*' '*+
)источник
JAVA, 273 байта
РЕДАКТИРОВАТЬ
источник
public
в передней частиclass
.. А если вы имеете в виду , что он может удалитьpublic
в передней частиstatic void main(...
, то вы ошибаетесь, если он не изменитсяclass
доinterface
и использует Java 8+.JavaScript (решение регулярных выражений) - 104 байта
Кто-то должен укусить пулю и опубликовать решение RegEx! 74 символа плюс штраф +30 символов:
Или, если вы хотите прочитать и понять код в некомпактном виде:
источник
Python 2, 73 байта
Эта программа использует заглавную букву, если ей предшествует пробел (с ключом для первого символа в строке). Это полагается на
.upper()
строковый метод, чтобы использовать заглавные буквы правильно.источник
raw_input
=>input
, +2print
=>print()
)PHP 64
7677838489байтСчитается ли
$_GET
входом в PHP?Если это так, вот моя первая попытка компьютерной графики
Спасибо, Манатворк :)
Можно просто использовать
ucwords
функцию, что приведет к 21 байту:спасибо Гарри Mustoe-Playfair :)
источник
fgets(STDIN)
читать входные данные. Но у нас нет единого мнения,$_GET
насколько я знаю.$k=>
. Положить его обратно:foreach(split(' ',$_GET[@s])as$k=>$v)echo$k?' ':'',ucfirst($v);
Хаскелл, 69
Объяснение:
scanl
принимает функцию(a -> b -> a)
и начальное значениеa
, затем перебирает список[b]
s, чтобы составить список[a]
s:Он многократно принимает предыдущий результат в качестве левого аргумента переданной ему функции, а значение из списка ввода в качестве правого аргумента. для создания следующего.
Я написал функцию,
(!) :: Char -> Char -> Char
которая возвращает правый символ, который вы передаете, но делает его заглавным, если левый символ равен' '
(пробел). Ибоscanl
это означает: вернуть значение из списка ввода , но использовать его заглавными буквами, если предыдущий результат был пробелом. Такscanl (!) ' ' "ab cd"
становится:Нам нужно, чтобы начальное значение
' '
было написано с заглавной буквы первой буквой, но затем мы отбрасываем его,tail
чтобы получить окончательный результат.источник
scanl
примеров: один , два .Pyth, 20 байтов
Эти множественные пространства действительно отстой. В противном случае было бы действительно легкое 12-байтовое решение.
Попробуйте онлайн: Pyth Compiler / Executor
объяснение
редактировать: 16 символов возможно с алгоритмом @Dennis.
источник
CJam, 14 байтов
Это не самое короткое, но ...
Другой ответ, используя похожие идеи:
.x
изменяет только первый элемент, если один из параметров имеет только один элемент.источник
f
и.
довольно гениальная. Еще один 14-байтовый вариант:qS/Sf.{\eu}S.-
Луа,
646261 байтLua - ужасный язык для игры в гольф, поэтому я очень горжусь этим.
[Попробуй здесь]1 устарел, завтра обновлюисточник
abc_def
что дадитеAbc_Def
. Однако только буквы после пробелов должны быть в верхнем регистре. Хорошей новостью является то, что исправление сохраняет байт. ;)ЯВА, 204
211226байтовМоя первая запись на CG, надеюсь, все в порядке:
Сохранено 7 байт благодаря @TNT
источник
public class U{public static void main(String[]s){int i=-1,j;char[]r=s[0].toCharArray();for(char c:r)if(++i==0||c==' '&&i>0)r[j=i+(i==0?0:1)]=Character.toUpperCase(r[j]);System.out.print(r);}}
public
Модификатор не нужен , так что вы можете сэкономить 7 или больше.PHP:
7674 символаОбразец прогона:
источник
ucfirst($c)
, чтобы использовать$c^' '
. (Подсказка: если у васbitwise-xor
буква с пробелом, она будет преобразована из прописных в строчные, и опос также применяется)$l=str_split(fgets(STDIN))
, это уменьшить код на 2 байта!C 74 байта
Не делает никаких предположений о наборе символов во время выполнения (ASCII, EBCDIC, Baudot, ... что угодно). Предполагается, что EOF отрицателен (я думаю, что C гарантирует это).
а - вводимый символ; b верно, если последний символ был пробел. Единственный неочевидный бит - это то, что мы используем тот факт, что
putchar
возвращает напечатанный символ, если нет ошибки.источник
C # Linq - 187
Это далеко не победа, но я просто слишком сильно люблю Линка.
источник
Vim,
11, 10 байтОбъяснение:
Получу ли я золотой значок за то, что Деннис переиграл?
источник
Баш, 61
Обратите внимание, что двоеточия просто для того, чтобы программа показала здесь ОК. В действительности это может быть какой-нибудь непечатный символ, например, BEL.
Выход
Баш, 12
К сожалению, этот не сохраняет начальные / промежуточные / конечные пробелы, но в противном случае он работает:
Выход
источник
Пип , 15 + 1 для
-s
= 16Объяснение:
Одна интересная особенность Pip, на которую опирается эта программа, - это
:
мета-оператор присваивания. Большинство C-подобных языков имеют некоторый набор операторов вычисления и назначения: например,x*=5
делает то же самое, что иx=x*5
. В Пип, однако, вы можете прикрепить:
на любой оператор и превратить его в оператор вычислительно и-ASSIGN. Это касается даже унарных операторов. Таким образом,-:x
вычисляет-x
и присваивает его обратно такx
же, как и раньшеx:-x
. В этом случае,UC:
используется (вместе с изменяемыми строками Пипа) для прописных букв первого символа слова.Программа принимает данные из командной строки, требуя вызова, подобного этому:
источник
С 125
Не самое короткое из решений, но я очень люблю гольф в C.
ungolfed:
Я не знаю, использует ли синтаксис, подобный регулярному выражению,
scanf
правила, но это работает довольно хорошо. (Ну технически это не полный регулярное выражение)Еще одна вещь, которую следует учитывать, это то, что этот код работает только для слов короче 99 байтов. Но я думаю, что это решение будет работать для большинства случаев.
источник
Хаскель: 127 символов
источник
PHP, 82
Использование :
источник
C #,
133131источник
&&c!=32
? Я не слишком хорошо владею C #, но думаю, что преобразование пробела в верхний регистр приводит к пробелу.Mathematica, 66 байт
Я бы использовал
ToCamelCase
, но это не сохраняет интервал.источник
R
139105 байтUngolfed + объяснение:
R с регулярным выражением,
4941 + 30 = 71 байтЯ действительно расстроен; это на самом деле лучше, используя регулярные выражения со штрафом.
Это соответствует любому отдельному символу в начале строки или после любого количества пробелов и заменяет его заглавной версией захвата. Обратите внимание, что применение
\\U
законно и не влияет на не-буквы.pe=T
интерпретируется как,perl = TRUE
поскольку он использует частичное соответствие R параметров функции и синоним дляTRUE
. По какой-то причине R по умолчанию не использует регулярные выражения в стиле Perl.Спасибо MickyT за помощь в экономии 8 байт на подходе регулярных выражений!
источник
(^.| +.)
. В верхнем регистре все в порядке.