Задача проста:
Напишите функцию или программу, которая принимает входные данные x
и выводит алфавит в нижнем регистре, если он x
является частью алфавита в нижнем регистре, выводит алфавит в верхнем регистре, если он x
является частью алфавита в верхнем регистре, и выводит только, x
если он не является частью того или другого.
Правила:
- Ввод может быть аргументом функции или из STDIN
- В качестве ввода будут использоваться любые печатные символы ASCII от 32 до 126 (от пробела до тильды).
- Ввод может быть в кавычках,
'x'
или"x"
, но помните , что'
и"
является действительным вводом и должны быть поддержан. - Ввод может быть любой из букв в алфавите, т.е. вы не можете предполагать, что это будет
a
илиA
. - Вывод должен быть только один из алфавитов или одного символа, но завершающие символы новой строки в порядке.
- Буквы в алфавите не должны быть разделены пробелами, запятыми или чем-либо еще.
Некоторые примеры:
F
ABCDEFGHIJKLMNOPQRSTUVWXYZ
z
abcdefghijklmnopqrstuvwxyz
"
"
<- Input: Space
<- Output: Space
Самый короткий код в байтах побеждает.
Необязательно, но приветствуется: если у вашего языка есть переводчик в Интернете, также опубликуйте ссылку, чтобы его могли легко проверить другие.
Leaderboard
Фрагмент стека в нижней части этого поста создает каталог из ответов а) в виде списка кратчайшего решения для каждого языка и б) в качестве общей таблицы лидеров.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
## Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в заголовок несколько чисел (например, потому что ваш результат равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
## Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать имя языка ссылкой, которая будет отображаться во фрагменте кода:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
import Random
и затем использоватьRandom.randint
(очевидно, не для этой задачи, но все же)?import string
, подсчитываются, поэтому часто лучше делать обходные пути. Обратите внимание, что пакет должен существовать до публикации запроса. Многие проблемы имеют что-то вроде: «Использование пакетов, которые делают это, недопустимым», но это не относится к этой проблеме.Ответы:
TeaScript , 5 байт
TeaScript имеет (почти) встроенный для этого: D
Попробуйте онлайн (примечание: онлайн-переводчик обновлен до версии TeaScript v3, в которой он находится
N0
)Попробуйте все тестовые случаи
TeaScript 3 , 2 байта [не конкурирует]
Используя TeaScript 3, это может стать 2 байта. Это не конкурирует, потому что TeaScript 3 был сделан после этого испытания
1 байтовая альтернатива
Если бы мы могли выводить
0123456789
цифры, это могло бы быть:источник
Pyth, 10 байт
Тестирование
Мы начнем с создания списка из 3 элементов: строчного алфавита, прописного алфавита и ввода. (
[GrG1z
) Затем мы фильтруем этот список по количеству появлений ввода в ненулевых элементах. (/#z
) Наконец, мы берем первый элемент отфильтрованного списка.источник
LabVIEW, 23 примитива LabVIEW
Селектор (? На структуре cse) связан с vi, который называется Lexical Class. Он выводит числа от 1 до 6 в зависимости от входа, 5 - нижний регистр 4 - верхний регистр.
Цикл for выполняет 26 раз, чтобы создать алфавит, или один раз, чтобы пропустить символ.
источник
Haskell, 48 байтов
Пример использования:
Возьмите все списки ['a' .. 'z'], ['A' .. 'Z'] и одноэлементный список с входным символом
c
гдеc
является элементом. Для писем у нас всегда есть два совпадения, поэтому мы выбираем первое.источник
JavaScript (ES6), 79 байт
объяснение
JavaScript сравнивает код каждого символа в алфавитном порядке при сравнении строк, поэтому коды символов, используемых в сравнениях, на 1 ниже и выше требуемого диапазона символов.
Контрольная работа
Показать фрагмент кода
источник
for(a="",i=64;++i<91;)a+=String.fromCharCode(i)
.String.fromCharCode
очень непригоден для игры в гольф, но иногда это единственный выход!String.fromCharCode
и.toUpperCase
(тупой и тупее), ноtoUpperCase
является победителемx=>x.replace(/[A-Z]/i,c=>c>"`"?a:a.toUpperCase(),a="abcdefghijklmnopqrstuvwxyz")
делает, но на один байт длиннее. Изменение[A-Z]
к\w
работам за все , за исключением_
. Ваше решение кажется максимально коротким.ABC...abc...?
без реальногоfor
цикла: (некоторые отступы)[for(_ of[...Array(i=64)])if(i++%32<26)String.fromCharCode(i)].join``+x
R
90 90байтБлагодаря Джузеппе .
Старая версия (90 байт):
Выглядит некрасиво, но эти функции
cat
не могут быть переданы функциям, ИМХО.источник
scan
может быть любой объект типа символа, так что вы можетеletters
вместо''
.Python 3,
92848274 байтаТекущая версия: 74, спасибо isaacg и wnnmaw!
Ungolfed: (для некоторого определения ungolfed
Первая версия: 92
Вторая версия: 82, спасибо isaacg! :)
источник
lambda c:
) вместо явного определения (def f(c):print(
) и сохранить несколько байтов. Кроме того, вам не нужно место передfor
.lambda c:''.join([chr(x+(97if c>'Z'else 65))for x in range(25)])if c.isalpha()else c
. Спасибо!"
в функцию, вам нужно\"
вместо этого.Python 3,
118105989783 байтаПростое решение РЕДАКТИРОВАТЬ: Гольф благодаря благодаря предложению Эрик Гольфист.
Ungolfed:
источник
return a.lower() if s.islower() else a
.lambda s,a='abcdefghijklmnopqrstuvwxyz':(s,(a,a.upper())[s.isupper()])[s.isalpha()]
PHP, 62
7682байтаPHP сейчас в порядке:
Принимает данные из командной строки, например:
Правки
91>ord($x)
наZ<$x
. Мысль способ сложный. Благодаря манатворке .strtoupper
непосредственного удаления и наращивания требуемого диапазона.источник
ord()
выглядит плохо там. ПопробуйZ<$x?$a:strtoupper($a)
.' '&$x^A
сделать прописные и строчные буквы a и z. То есть твой код становится<?=ctype_alpha($x=$argv[1])?join(range(' '&$x^A,' '&$x^Z)):$x;
Perl,
463433 байтавключает в себя +2 за
-nE
Беги как
for
и используя голые слова, благодаря @Dom Hastings .-E
иsay
вместоprint
.источник
for
: - /. Перепробовал кучу подходов, (-p
с$"='';$_="@_"
, даже,$a='/[a-z]/?a..z:';print eval$a.uc$a.'$_'
но все дольше ...$_=
вместоprint
ing и используете-p
флаг вместо себя,-n
вы можете сохранить еще два ... Я до сих пор не могу придумать других способов сохранить больше ...$_
список (который я знаю). Это должно быть interpolated ($_="@_"
), но он использует пробел в качестве разделителя, поэтому я должен был бы сделать то$"=''
же самое (или использовать ajoin'',
), что делает его длиннее. Не много места для маневра на этом!say
вместоprint
!Рубин, 41 + 1 = 42
С переключателем
-p
, запуститьЭто генерирует строку
и проверяет каждый смежный блок «символов слова», которые являются просто строчными и прописными буквами и символом подчеркивания. Если бы между Z и a было несколько последовательных символов слова, этот трюк не сработал бы.
Отредактировано, чтобы добавить объяснение, по запросу:
-p
Флаг делает по существу[*?A..?z]
массив символов между прописными буквами A и строчными Z в порядке ASCII. Это прописные буквы, некоторые не-буквенные символы и строчные буквы.*''
объединяет массив в строку, чтобы мы могли вызывать.scan
его.scan
найдет каждое совпадение регулярного выражения/\w+/
, заполнит его магической переменной$&
и вызовет блок. Каждый раз, когда блок повторяется, он проверяет, содержит ли совпавшая строка,$_
и устанавливает выход в эту строку, если это так. Поэтому, если $ _ содержится в заглавном или строчном алфавите, он изменяется соответствующим образом, в противном случае он не изменяется.Безголовая версия будет выглядеть примерно так
источник
CJam, 18 байт
'[,65>
выдвигает прописной алфавит,_el
строчный алфавит иr:R
строку из одного символа, которая читается из STDIN и присваивается переменнойR
. Они обернуты в array (]
), и первый, который имеет какие-либо общие символы,R
выбирается с помощью{R&}=
.источник
_el
строчный алфавит?el
значит «преобразовать в нижний регистр». Я только что нажал заглавную букву, поэтому теперь я дублирую его_
, а затем вызываюel
полученную копию.Сетчатка, 62 байта
Две короткие строки являются регулярным выражением для соответствия. Если ввод в нижнем регистре (в диапазоне
[a-z]
), он заменяет этот символ (в данном случае это весь ввод) строчным алфавитом. Процесс похож на прописные буквы. Если это не буква, никакие замены не производятся, и она выводится без изменений.Попробуйте онлайн.
источник
Python 2.7.10,
959379 байтовЯ впервые пытаюсь сыграть в гольф, поэтому, пожалуйста, любая помощь или совет очень важны!
Спасибо Моргану Треппу за помощь!
источник
False == 0
иTrue == 1
индексировать в кортежи. Итак, он сначала проверяет, является ли это буквойisalpha
, если да, возвращает,1
а затем проверяет, является ли он строчными и делает ли то же самое.Рубин,
4643 персонажа(42 символа кода + 1 символ опции командной строки)
Благодаря:
===
магию (-3 персонажа)Образец прогона:
источник
MATL , 22 байта
Используется текущая версия языка (3.1.0) .
РЕДАКТИРОВАТЬ (15 сентября 2017 г.): попробуйте в MATL Online! (с более новой версией языка).
Примеры
объяснение
источник
Java, 165 знаков
Генерирует требуемый вывод в stdout (а не возвращает его). Ввод осуществляется через аргументы времени выполнения.
Как это устроено.
1) Установите некоторые целочисленные переменные
c = значение ASCII первого символа первого параметра аргументов времени выполнения.
d = c преобразуется в строчное значение ASCII (с помощью ИЛИ с 32)
b = вычисление, чтобы увидеть, является ли буква d. Будет <0, если письмо.
e = начальный символ для вывода. Если значение ASCII в d представляет собой букву (см. B), тогда оно устанавливается на «A» (или «a» путем добавления c AND 32 к значению «A» A), иначе оно устанавливается на исходное значение c.
f = количество символов для вывода. Если это не буква (см. B), то это значение равно 1, иначе оно равно 26
2) Цикл от e до e + f, выводящий каждый символ в стандартный вывод.
источник
void f(char c){for(int d=c|32,b=(d-96)*(d-123),e=b<0?65|(c&32):c,f=e+(b<0?26:1);e<f;)System.out.print((char)e++);}
.Perl, 23 байта
Включает +2 для
-nE
(вместо нормального +1), чтобы быть справедливым по отношению к другому решению PerlЗапустите с вводом по STDIN без завершающей строки:
Просто код:
источник
Луа,
9897 байтК сожалению, я не нашел решение короче, чем 26 байтов, чтобы установить
a
с алфавитом. На самом деле я не нашел ниже 32.Редактировать: сохранить 1 байт благодаря @ATaco, много раз делал эту ошибку при запуске с Lua: p
Вы можете проверить это онлайн на официальном сайте или на ideone . Если вы используете первый, ввод не будет работать (отключен), поэтому используйте следующий источник, где он заключен в функцию.
источник
c=io.read()a="abcdefghijklmnopqrstuvwyz"
вместо a, c = ...Mathematica, 75 байтов
Довольно хороший результат для языка, не относящегося к игре в гольф ... Любые решения, использующие обработку кода персонажа, занимали бы больше байтов из-за затрат
ToCharacterCode
иFromCharacterCode
.источник
C (функция), 71 байт
источник
f(s,n,c){for(c=s-=(n=isalpha(s)?26:1)>1?s%32-1:0;c<s+n;)putchar(c++);}
сохраняет байт.f(s,n){for(n=isalpha(s)?s-=s%32-1,s+26:s+1;s<n;)putchar(s++);}
на 62 байтаPython, 81 байт
Это в основном перевод ответа Pyth. Он определяет функцию,
f
которая принимает в качестве аргумента символ и возвращает результат.источник
if z in k
, верно? Такжеf=
необязательно по умолчанию.f=
, сделать функцию анонимной. -2Джольф , 17 байт
Попробуй это здесь.
источник
MATLAB:
7168 байт(спасибо OP за сохранение 3 байта)
Контрольная работа:
Объяснение: Прописные буквы алфавита занимают
65:90
символы ASCII. Строчный алфавит в97:122
ASCII. Итак,b=i<65|i>122|(i>90&i<97)
проверяет, не является ли введенный символi
НЕ алфавитным. Если это так, вход возвращается. Алфавит в верхнем регистре возвращается, еслиb==1
иi<97
(заглавный символ). Еслиb==1
иi>96
, к65:90
этому добавляется 32, что соответствует97:122
алфавиту в нижнем регистре.источник
i=input('')
если отправка является скриптом, или в качестве аргумента функции, если это функция@(i)i^2
.i='a'
вообще не принято. Кроме того, вы можете сохранить 3 байта, выполнив[1,2,3,'']
вместоchar([1,2,3])
.SpecBAS, 111 байт
Я прошел через несколько версий этого, 111, кажется, лучшее, что я могу управлять.
Строка 2 использует
?
ярлык дляPRINT
встроенныхIF
операторов и вложенныхОбъяснение псевдокода
источник
["a" TO "z","A" TO "Z"]
псевдокод похожим на то, что он уже делает."a".."z","A".."Z"
больше похоже на «реальный код», по крайней мере, на мой взгляд ... Хотя и то, и другое очень легко понять =)Swift 2, 142 байта
Ungolfed
источник
05AB1E ,
1916 байт-3 байта благодаря
else
Как это устроено
Попробуйте онлайн!
источник
¹
(первый ввод) уже существовал, когда вы опубликовали свой ответ, но вы можете сыграть в него 2 байта:A¹åiAëAu¹åiAuë
( Попробуйте онлайн или тестовый комплект ).Java SE 8,
7169 байтGolfed:
Ungolfed:
Первоначально я реализовал следующее
Это более элегантно, но, к сожалению, на один байт больше. Это предполагает, что поведение не-буквенных символов не определено и строка s инициализируется как "" перед выполнением. Будьте нежны, это мой первый пост.
редактировать: 2 байта, сохраненные Стью Гриффином путем изменения
источник
a<91
должно работать или ...?Скала, 91 персонаж
Un-golfed
Иметь исходный изменяемый результат, а не возвращать неизменное значение из 3 различных блоков if, спасло меня 2 символа, даже если я его ненавижу.
Скалотонический метод
Лучшим методом для scala будет что-то вроде этого:
источник
Japt, 9 байт
Запустите его онлайн
источник