Для сегодняшнего вызова вы должны написать программу или функцию, которая чередует регистр строки. Тем не менее, вы должны игнорировать не алфавитные символы. Это означает, что каждый буквенный символ должен иметь другой регистр, чем предыдущий и следующий буквенный символ. Это немного сложнее, чем заглавные буквы, например. Если вы берете строку, такую как
hello world
и преобразовать все остальные символы в верхний регистр, вы получите:
hElLo wOrLd
Как видите, за строчными буквами o
следует строчная w
. Это неверно Вместо этого вы должны игнорировать пространство, давая нам такой результат:
hElLo WoRlD
Все не алфавитные символы должны быть одинаковыми. Выходные данные могут начинаться с прописных или строчных букв, если они постоянно чередуются. Это означает, что следующее также будет приемлемым результатом:
HeLlO wOrLd
Ваша программа должна работать независимо от случая ввода.
Входная строка будет содержать только печатный ASCII , так что вам не нужно беспокоиться о непечатаемых символах, новых строках или юникоде. Ваша заявка может быть либо полной программой, либо функцией, и вы можете выполнять ввод и вывод в любом приемлемом формате. Например, аргументы функции / возвращаемое значение, STDIN / STDOUT, чтение / запись файла и т. Д.
Примеры:
ASCII -> AsCiI
42 -> 42
#include <iostream> -> #InClUdE <iOsTrEaM>
LEAVE_my_symbols#!#&^%_ALONE!!! -> lEaVe_My_SyMbOlS#!#&^%_aLoNe!!!
PPCG Rocks!!! For realz. -> PpCg RoCkS!!! fOr ReAlZ.
This example will start with lowercase -> tHiS eXaMpLe WiLl StArT wItH lOwErCaSe
This example will start with uppercase -> ThIs ExAmPlE wIlL sTaRt WiTh UpPeRcAsE
A1B2 -> A1b2
Поскольку это код-гольф , применяются стандартные лазейки и выигрывает самый короткий ответ в байтах!
cowsay
Ответы:
JavaScript (ES6),
6663 байтаНачинается с заглавной буквы.
Контрольные примеры
Показать фрагмент кода
источник
s=!s
трюк?s
это входная строка,!s
сначала оценивается какfalse
(если только входная строка не пуста, в этом случае она будет оцениватьсяtrue
- но пустая строка не будет генерировать никакого совпадения в любом случае). После этого он просто становится стандартной логической операцией, чередуя междуfalse
иtrue
. Кроме того, мы не против потерять контентs
на этом этапе, потому что он уже использовался для подачи.replace()
."A[I"
, потерпит неудачу.05AB1E ,
118 байтКод:
Использует кодировку 05AB1E . Попробуйте онлайн!
Объяснение:
источник
lvy¾Fš}Da½J
, что именно то, что у вас уже было.Oh-Five-Ay-Bee-One-Eee
, я не творческий человек.GNU Sed, 33
Оценка включает +1 для
-r
флага к седу.Попробуйте онлайн .
источник
Желе , 13 байт
Попробуйте онлайн!
Как это работает
источник
Japt ,
1614 байтовПопробуйте онлайн!
объяснение
источник
,
. Если это не число (то есть[12]
), Джапт знает, что это разные предметы. Я считаю, что вы можете удалить&1
также._m"uv"gT°
Ницца. Я как раз собирался это предложить.Python 3 ,
8676686663 байта-2 байта благодаря DJMcMayhem
-3 байта благодаря Cyoce
Попробуйте онлайн! или попробуйте все тестовые случаи
источник
print(end=(2*i).title()[x])
?Алиса , 18 байт
Попробуйте онлайн!
объяснение
Эта программа следует за менее известным шаблоном для программ нечетной длины, которые полностью работают в обычном режиме. Линеаризованная версия этого кода:
Объяснение кода:
Без использования
l
дубликата, стек послеN
будет["helloworld", "helloworld"]
. Я сильно подозреваю, что это ошибка.источник
C (tcc) ,
605756 байтСпасибо DigitalTrauma за то, что заметил 5-й бит - единственное отличие для ASCII верхнего / нижнего регистра.
Отдельное спасибо zch за то, что он добавил в игру еще три байта.
Сохраните еще один байт от идеи RJHunter
Попробуйте онлайн!
источник
strdup()
указатели для чтения-записи памяти в коде тест-драйвера.*s&~32|++l%2<<5
выражение на 3 байта.&~33
с ,&95
чтобы сохранить дополнительные байты.Java 8, 99 байт
Объяснение:
Попробуй это здесь.
источник
(c+"").matches("[A-Za-z]")
илиCharacter.isLetter(c)
сохранить байты.c>64&c<91|c>96&c<123
все же. И так как я вint
любом случае использую дляCharacter.toUpperCase(...)
иCharacter.toLowerCase(...)
гольф частей (эти:(char)(c&~32)
и(char)(c|32)
), я сомневаюсь, что я мог бы сделать его короче с любым из них.a->{String r="";int i=0,f=32;for(int c:a)r+=(char)(c>64&c<91|c>96&c<123?(f=~f):c);return r;}
??Рубин,
57554741 байтКоличество байтов включает в себя два байта для параметров командной строки.
Запустите это, например, так:
$ ruby -p0 alternate_case.rb <<< "some input"
С помощью этой
p0
опции весь ввод потребляется за один раз, и магический глобал$.
увеличивается до 1. Позже он переключается между 0 и 1 и используется для сохранения состояния.Работает с многострочным вводом; Попробуйте онлайн!
Спасибо Ventero за потрясающий вклад - проверьте комментарии для деталей.
источник
$.
автоинкремент увеличивается при каждомgets
вызове, полная программа с-p
флагом была бы короче ...1&$.+=1
позволяет отбросить скобки. И для полноты, есть еще одна глобальная целое - это , к сожалению , только для чтения только:$$
.-p0
заставляет интерпретатор читать все доступные входные данные за один раз - поэтому ваш код вызывается только один раз, что позволяет вам свободно использовать$.
. Объединение этого с фактом, чтоgsub
неявно действует как$_.gsub!
при определении,-p
делает полную программу значительно короче: 48 символов дляgsub(/[a-z]/i){[$&.upcase,$&.downcase][1&$.+=1]}
и 2 дляp0
флага.-p0
, вы можете фактически сохранить еще несколько символов в том, как вы переворачиваете$.
назад и вперед: так как теперь гарантированно будет,1
когда ваш код вызывается, вы можете просто использовать$.^=1
./\p{L}/
( Буква Unicode категории ) на один символ короче/[a-z|/i
.Брахилог , 25 байт
Попробуйте онлайн!
Это и долго, и медленно.
объяснение
источник
MATL ,
1615 байтПопробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
Примите во внимание «привет мир»
'
источник
Perl 6 ,
3230 байтПопытайся
Попытайся
Expanded:
источник
q / kdb +,
514238 байтРешение:
Пример:
Заметки:
источник
V ,
17, 13 байтовПопробуйте онлайн!
Или проверьте все контрольные примеры!
HexDump:
Объяснение:
При этом используется сжатое регулярное выражение ™, поэтому, прежде чем объяснить его, давайте расширим регулярное выражение:
VU
Новообращенные все в верхний регистр. Тогда мы запустим это:Старый / более интересный ответ:
источник
PHP, 71 байт
Попробуйте онлайн!
источник
CJam ,
2624 байтаПопробуйте онлайн!
объяснение
источник
Pyth, 11 байт
Попробуй здесь
объяснение
источник
PowerShell, 86 байт
Ввод является
[char[]]
массивом.Комментарии в коде для объяснения
источник
Haskell,
10583 +24 + 1 байт разделителя =1088688 байтФункция есть
(1#)
, начинается в нижнем регистре. Попробуйте онлайн!Грустно то, что это дольше, чем ответы на Java и C #Спасибо Эрджану Йохансену за сохранение 22 байта путем объединения трех строк в одну!источник
f#(x:y)|isLetter x=([toUpper,toLower]!!f)x:(1-f)#y|1>0=x:f#y
1#
, не считается анонимной функцией. В моем понимании можно связать анонимную функцию с идентификатором, но, напримерf=1#
, не будет работать. Вместо этого вам нужен раздел(1#)
для +2 байта. Это также косвенно указано в наших руководящих принципах сообщества по игре в гольф на Хаскеле , хотя, возможно, они должны быть адаптированы для явного упоминания этого случая.Google Sheets, 264 байта
Это большой беспорядок, но немного легче, если вы расширите его:
Псевдология была бы такой:
источник
Perl 5 , 24 байта
23 байта + 1 байт для
-p
.Спасибо @Dada за -2 байта.
Попробуйте онлайн!
источник
\pl
вместо[a-z]
2 байтов tho :)[a-z]
вместо этого!). Если вам интересно, это происходит от perlrecharclass ;)Сетчатка , 46 байт
Попробуйте онлайн! Включает тестовые случаи.
источник
C 64 байта
Использует преимущества кодировки ascii, где буквы верхнего и нижнего регистра смещены на 0x20.
источник
char
и*s
Сетчатка , 32 байта
Попробуйте онлайн!
Сначала преобразует ввод в верхний регистр, а затем группирует ввод в совпадения, содержащие до двух заглавных букв. Единственный раз, когда он будет содержать только одну букву, это если последняя буква не имеет пары. Затем в нижнем регистре указывается первая буква каждого из этих совпадений.
На
01
втором этапе примерно означает: не изменяйте поведение этого этапа в зависимости от номера совпадения, а применяйте только изменения к первому символу каждого совпадения.источник
PHP 5, 54 байта
источник
C #, 100 байт
источник
Groovy, 79 байт
источник
Python 3 , 192 байта
Попробуйте онлайн!
источник
Выпуклый , 16 байт
Попробуйте онлайн!
Выпуклый порт ответа @Business Cat .
источник