Выведите алфавит, АЗБУКУ или просто символ

49

Задача проста:

Напишите функцию или программу, которая принимает входные данные 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

Стьюи Гриффин
источник
Разрешено ли нам импортировать пакеты, например, в Python, например: import Randomи затем использовать Random.randint(очевидно, не для этой задачи, но все же)?
Даниэль
Да, вы можете импортировать пакеты. но байты для записи, например import string, подсчитываются, поэтому часто лучше делать обходные пути. Обратите внимание, что пакет должен существовать до публикации запроса. Многие проблемы имеют что-то вроде: «Использование пакетов, которые делают это, недопустимым», но это не относится к этой проблеме.
Стьюи Гриффин
Я предполагаю, что под "кавычки допустимы входные данные и должны поддерживаться", вы имеете в виду, что если ваш метод ввода требует кавычек, то кавычки при вводе будут экранированы
Cyoce
Можем ли мы принять среду REPL?
кот

Ответы:

22

TeaScript , 5 байт

xN(0)

TeaScript имеет (почти) встроенный для этого: D

Попробуйте онлайн (примечание: онлайн-переводчик обновлен до версии TeaScript v3, в которой он находится N0)

Попробуйте все тестовые случаи


TeaScript 3 , 2 байта [не конкурирует]

Используя TeaScript 3, это может стать 2 байта. Это не конкурирует, потому что TeaScript 3 был сделан после этого испытания

N0

1 байтовая альтернатива

Если бы мы могли выводить 0123456789цифры, это могло бы быть:

°
Downgoat
источник
TeaScript 3 является действительным. Таким образом, вы можете использовать его!
user75200
27

Pyth, 10 байт

h/#z[GrG1z

Тестирование

Мы начнем с создания списка из 3 элементов: строчного алфавита, прописного алфавита и ввода. ( [GrG1z) Затем мы фильтруем этот список по количеству появлений ввода в ненулевых элементах. ( /#z) Наконец, мы берем первый элемент отфильтрованного списка.

isaacg
источник
6
Серьезно, есть ли что-то, что вы не можете решить с помощью нескольких байтов Pyth? Мне действительно нужно выучить этот язык ..
Hexaholic
25
Выучить какой язык? ... Вы упомянули двух по имени. : P
quintopia
2
@ Quintopia Ну, а почему не оба? :)
Гексаголик
15

LabVIEW, 23 примитива LabVIEW

Селектор (? На структуре cse) связан с vi, который называется Lexical Class. Он выводит числа от 1 до 6 в зависимости от входа, 5 - нижний регистр 4 - верхний регистр.

Цикл for выполняет 26 раз, чтобы создать алфавит, или один раз, чтобы пропустить символ.

Eumel
источник
4
Как человек, который имел (привилегия? Несчастье? Вы решаете) работать в LabVIEW много лет назад, ваши ответы вызывают улыбку в мой день. =)
corsiKa
12

Haskell, 48 байтов

f c=filter(elem c)[['a'..'z'],['A'..'Z'],[c]]!!0

Пример использования:

*Main> f 'g'
"abcdefghijklmnopqrstuvwxyz"
*Main> f 'H'
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
*Main> f '\''
"'"

Возьмите все списки ['a' .. 'z'], ['A' .. 'Z'] и одноэлементный список с входным символом cгде cявляется элементом. Для писем у нас всегда есть два совпадения, поэтому мы выбираем первое.

Ними
источник
11

JavaScript (ES6), 79 байт

x=>(a="abcdefghijklmnopqrstuvwxyz",x>"`"&x<"{"?a:x>"@"&x<"["?a.toUpperCase():x)

объяснение

JavaScript сравнивает код каждого символа в алфавитном порядке при сравнении строк, поэтому коды символов, используемых в сравнениях, на 1 ниже и выше требуемого диапазона символов.

x=>(
  a="abcdefghijklmnopqrstuvwxyz", // a = lower-case alphabet
  x>"`"&x<"{"?a:                  // if x is a lower-case letter, output alphabet
  x>"@"&x<"["?a.toUpperCase():    // if x is an upper-case letter, output upper-case
  x                               // else just output x
)

Контрольная работа

user81655
источник
Это на самом деле самый короткий способ создать строку со всем алфавитом в Javascript? Если бы вам нужен был весь печатаемый диапазон ASCII, вам пришлось бы печатать каждый отдельный символ?
Стьюи Гриффин
1
@StewieGriffin К сожалению, это так. Единственный способ будет что - то вроде: for(a="",i=64;++i<91;)a+=String.fromCharCode(i). String.fromCharCodeочень непригоден для игры в гольф, но иногда это единственный выход!
user81655 22.12.15
4
В этом случае баланс между String.fromCharCodeи .toUpperCase(тупой и тупее), но toUpperCaseявляется победителем
edc65
Приятно! Я попробовал несколько разных способов игры в гольф, но не нашел того, который работает. x=>x.replace(/[A-Z]/i,c=>c>"`"?a:a.toUpperCase(),a="abcdefghijklmnopqrstuvwxyz")делает, но на один байт длиннее. Изменение [A-Z]к \wработам за все , за исключением _. Ваше решение кажется максимально коротким.
ETHproductions
Вот один из самых коротких способов генерации ABC...abc...?без реального forцикла: (некоторые отступы)[for(_ of[...Array(i=64)])if(i++%32<26)String.fromCharCode(i)].join``+x
ETHproductions
8

R 90 90 байт

a=scan(,'');l=letters;L=LETTERS;cat("if"(a%in%l,l,"if"(a%in%L,L,a)),sep="")

Благодаря Джузеппе .

Старая версия (90 байт):

a=scan(,'');l=letters;L=LETTERS;if(a%in%l)cat(l,sep="")else if(a%in%L)cat(L,sep="")else a

Выглядит некрасиво, но эти функции catне могут быть переданы функциям, ИМХО.

Андрей Костырка
источник
75 байтов
Джузеппе
73 байта : вторым параметром scanможет быть любой объект типа символа, так что вы можете lettersвместо ''.
Робин Райдер
7

Python 3, 92 84 82 74 байта

Текущая версия: 74, спасибо isaacg и wnnmaw!

lambda c:(c,''.join(chr(x+(67,97)[c>'Z'])for x in range(25)))[c.isalpha()]

Ungolfed: (для некоторого определения ungolfed

lambda c:
    (
        c,
        ''.join([chr(x + (67,97)[c > 'Z']) for x in range(25)])
    )
    [c.isalpha()]

Первая версия: 92

def f(c):print(''.join([chr(x+(97if c>'Z'else 65)) for x in range(25)])if c.isalpha()else c)

Вторая версия: 82, спасибо isaacg! :)

lambda c:''.join(chr(x+(97if c>'Z'else 65))for x in range(25))if c.isalpha()else c
Koneke
источник
Привет и добро пожаловать в PPCG! Хороший ответ. Вот предложение по игре в гольф: вы можете использовать лямбда-выражение ( lambda c:) вместо явного определения ( def f(c):print() и сохранить несколько байтов. Кроме того, вам не нужно место перед for.
Исаак
Ах, я предполагал , «выход» в средней печати, а не просто вернуться :) Аккуратные, если это так , это до 84, lambda c:''.join([chr(x+(97if c>'Z'else 65))for x in range(25)])if c.isalpha()else c. Спасибо!
Конеке
Да, стандартное определение вывода на сайт позволяет возвращаться из функций, поэтому вы можете отредактировать новую версию в своем ответе. Другая проблема заключается в том, что скобки не нужны - без них функция работает точно так же, как генератор, а не список.
Исаак
Ах, на самом деле не использовал генераторные понимания раньше, изучая новые вещи!
Еще
Обратите внимание, что при вводе "в функцию, вам нужно \"вместо этого.
Даниэль
6

Python 3, 118 105 98 97 83 байта

Простое решение РЕДАКТИРОВАТЬ: Гольф благодаря благодаря предложению Эрик Гольфист.

lambda s,a='ABCDEFGHIJKLMNOPQRSTUVWXYZ':(s,(a,a.lower())[s.islower()])[s.isalpha()]

Ungolfed:

def f(s):
 a='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
 if s.isalpha():
  if s.islower():return a.lower()
  else:return a
 return s
Sherlock9
источник
1
Не могли бы вы использовать троичный оператор для сохранения нескольких байтов? Нечто подобное return a.lower() if s.islower() else a.
Дэвид Робертсон
@DavidRobertson Я не уверен, правильно ли вы читаете мое решение, которое является верхней строкой кода, но это именно то, что я делаю.
Sherlock9
Ах! Я читал неопрятную версию. Прости за это!
Дэвид Робертсон
@DavidRobertson Не проблема
Sherlock9
Гольф:lambda s,a='abcdefghijklmnopqrstuvwxyz':(s,(a,a.upper())[s.isupper()])[s.isalpha()]
Эрик Outgolfer
5

PHP, 62 76 82 байта

PHP сейчас в порядке:

<?=ctype_alpha($x=$argv[1])?join(range(Z<$x?a:A,Z<$x?z:Z)):$x;

Принимает данные из командной строки, например:

$ php alphabet.php A
$ php alphabet.php "a"
$ php alphabet.php " "
$ php alphabet.php _

Правки

  • Сохранено 6 байтов путем замены 91>ord($x)на Z<$x. Мысль способ сложный. Благодаря манатворке .
  • Сохранение 14 байтов путем strtoupperнепосредственного удаления и наращивания требуемого диапазона.
insertusernamehere
источник
Это ord()выглядит плохо там. Попробуй Z<$x?$a:strtoupper($a).
manatwork
@manatwork Хаха, я подумал, что сложно во второй части. Спасибо, чтобы указать на это.
insertusername здесь
Попробуйте ' '&$x^Aсделать прописные и строчные буквы a и z. То есть твой код становится<?=ctype_alpha($x=$argv[1])?join(range(' '&$x^A,' '&$x^Z)):$x;
Исмаэль Мигель
@IsmaelMiguel Это будет иметь точно такое же количество байтов.
имя пользователя здесь
1
Не волнуйтесь - и это все еще хороший способ запутать. ;)
insertusername здесь
5

Perl, 46 34 33 байта

включает в себя +2 за -nE

say/[a-z]/?a..z:/[A-Z]/?A..Z:$_

Беги как

perl -nE 'say/[a-z]/?a..z:/[A-Z]/?A..Z:$_'

  • обновите 34, сохраните 12 байтов, пропустив forи используя голые слова, благодаря @Dom Hastings .
  • обновить 33 сохранить 1 байт, используя -Eи sayвместо print.
Кинни
источник
@DomHastings Спасибо! Должен был знать, что там разрешены голые слова - и я должен был увидеть это for: - /. Перепробовал кучу подходов, ( -pс $"='';$_="@_", даже, $a='/[a-z]/?a..z:';print eval$a.uc$a.'$_'но все дольше ...
Кенни
Подумал над этим, если вы установите $_=вместо printing и используете -pфлаг вместо себя, -nвы можете сохранить еще два ... Я до сих пор не могу придумать других способов сохранить больше ...
Dom Hastings
@DomHastings Я попробовал это, но я не могу установить $_список (который я знаю). Это должно быть interpolated ( $_="@_"), но он использует пробел в качестве разделителя, поэтому я должен был бы сделать то $"=''же самое (или использовать a join'',), что делает его длиннее. Не много места для маневра на этом!
Кенни
Ха, конечно! Вы даже сказали, что (когда я перечитываю комментарий после того, как я не был в пабе ...), я продолжу думать об этом, но вы можете быть самым коротким, которого вы получите, не используя sayвместо print!
Дом Гастингс
5

Рубин, 41 + 1 = 42

С переключателем -p, запустить

([*?A..?z]*'').scan(/\w+/){$&[$_]&&$_=$&}

Это генерирует строку

ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz

и проверяет каждый смежный блок «символов слова», которые являются просто строчными и прописными буквами и символом подчеркивания. Если бы между Z и a было несколько последовательных символов слова, этот трюк не сработал бы.

Отредактировано, чтобы добавить объяснение, по запросу:

-pФлаг делает по существу

while( $_ = STDIN.gets )
  #execute code
  print $_
end

[*?A..?z]массив символов между прописными буквами A и строчными Z в порядке ASCII. Это прописные буквы, некоторые не-буквенные символы и строчные буквы. *''объединяет массив в строку, чтобы мы могли вызывать .scanего. scanнайдет каждое совпадение регулярного выражения /\w+/, заполнит его магической переменной $&и вызовет блок. Каждый раз, когда блок повторяется, он проверяет, содержит ли совпавшая строка, $_и устанавливает выход в эту строку, если это так. Поэтому, если $ _ содержится в заглавном или строчном алфавите, он изменяется соответствующим образом, в противном случае он не изменяется.

Безголовая версия будет выглядеть примерно так

while ($_ = STDIN.gets )
 %w[ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz].each do |alphabet|
  $_ = alphabet if alphabet.include?($_)
 end
 print $_
end
histocrat
источник
Можете ли вы опубликовать версию без гольфа? Я все еще не до конца понимаю, как это работает.
Шелваку
Конечно, опубликовал один.
гистократ
4

CJam, 18 байт

'[,65>_elr:R]{R&}=

'[,65>выдвигает прописной алфавит, _elстрочный алфавит и r:Rстроку из одного символа, которая читается из STDIN и присваивается переменной R. Они обернуты в array ( ]), и первый, который имеет какие-либо общие символы, Rвыбирается с помощью {R&}=.

Линн
источник
Я пытаюсь понять, как CJam, но я потерял между официальным документом и тем, что я читаю здесь. Может кто-нибудь дать мне, например, страницу, где я могу понять, почему _elстрочный алфавит?
Эрдал Г.
Ах, elзначит «преобразовать в нижний регистр». Я только что нажал заглавную букву, поэтому теперь я дублирую его _, а затем вызываю elполученную копию.
Линн
1
Я сделал хороший PDF-файл, содержащий (почти) все команды CJam.
Линн
4

Сетчатка, 62 байта

[a-z]
abcdefghijklmnopqrstuvwxyz
[A-Z]
ABCDEFGHIJKLMNOPQRSTUVWXYZ

Две короткие строки являются регулярным выражением для соответствия. Если ввод в нижнем регистре (в диапазоне [a-z]), он заменяет этот символ (в данном случае это весь ввод) строчным алфавитом. Процесс похож на прописные буквы. Если это не буква, никакие замены не производятся, и она выводится без изменений.

Попробуйте онлайн.

NinjaBearMonkey
источник
4

Python 2.7.10, 95 93 79 байтов

Я впервые пытаюсь сыграть в гольф, поэтому, пожалуйста, любая помощь или совет очень важны!

from string import* 
lambda i:(i,(uppercase,lowercase)[i.islower()])[i.isalpha()]

Спасибо Моргану Треппу за помощь!

Даниил
источник
1
@MorganThrapp, это не похоже на работу. Вы уверены, что это работает в Python 2.7.10?
Даниэль
Работает в 2.7.8. Что не работает?
Морган Трепп
@MorganThrapp, не могли бы вы объяснить, как именно это работает? Может быть, просто я не понимаю, поэтому я делаю что-то не так.
Даниэль
Конечно, он использует тот факт, что False == 0и True == 1индексировать в кортежи. Итак, он сначала проверяет, является ли это буквой isalpha, если да, возвращает, 1а затем проверяет, является ли он строчными и делает ли то же самое.
Морган Трепп
1
Нет проблем! Я люблю играть в гольф, поэтому всегда рад помочь кому-то новому!
Морган Трепп
4

Рубин, 46 43 персонажа

(42 символа кода + 1 символ опции командной строки)

[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}

Благодаря:

Образец прогона:

bash-4.3$ echo -n 'm' | ruby -pe '[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}'
abcdefghijklmnopqrstuvwxyz

bash-4.3$ echo -n 'W' | ruby -pe '[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}'
ABCDEFGHIJKLMNOPQRSTUVWXYZ

bash-4.3$ echo -n '@' | ruby -pe '[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}'
@
manatwork
источник
4

MATL , 22 байта

jtt1Y2XIm~Iw?km?Ik]]1$

Используется текущая версия языка (3.1.0) .

РЕДАКТИРОВАТЬ (15 сентября 2017 г.): попробуйте в MATL Online! (с более новой версией языка).

Примеры

>> matl jtt1Y2XIm~Iw?km?Ik]]1$
> e
abcdefghijklmnopqrstuvwxyz

>> matl jtt1Y2XIm~Iw?km?Ik]]1$
> T
ABCDEFGHIJKLMNOPQRSTUVWXYZ

>> matl jtt1Y2XIm~Iw?km?Ik]]1$
> "
"

объяснение

j              % input string (assumed to be a single character)        
tt             % duplicate twice
1Y2            % predefined literal: uppercase letters
XI             % copy to clipboard I         
m~             % check if not member    
I              % paste from clipboard I      
w              % swap elements in stack      
?              % if
    k          % convert string to lowercase 
    m          % check if member         
    ?          % if                          
        I      % paste from clipboard I      
        k      % convert string to lowercase 
    ]          % end                         
]              % end                         
1$             % input specification for implicit printing
Луис Мендо
источник
3

Java, 165 знаков

class A {public static void main(String[]p){int c=p[0].charAt(0),d=c|32,b=(d-96)*(d-123),e=b<0?65|(c&32):c,f=e+(b<0?26:1);for(;e<f;e++){System.out.print((char)e);}}}

Генерирует требуемый вывод в 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, выводящий каждый символ в стандартный вывод.

минимальная
источник
2
Вы знаете, что для большинства задач решение может быть предоставлено в виде полной программы или функции? Учитывая огромное количество стандартного кода в Java, функция может быть короче.
manatwork
1
Применяя несколько маленьких хитростей, не меняя логики, я получил это: 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++);}.
manatwork
3

Perl, 23 байта

Включает +2 для -nE(вместо нормального +1), чтобы быть справедливым по отношению к другому решению Perl

Запустите с вводом по STDIN без завершающей строки:

echo -n g | perl -lnE 'say/\pL/?a&$_|A..Z:$_'

Просто код:

say/\pL/?a&$_|A..Z:$_
Тон Хоспел
источник
Приятно использовать тот факт, что ввод ограничен 7-битными символами.
msh210
3

Луа, 98 97 байт

К сожалению, я не нашел решение короче, чем 26 байтов, чтобы установить aс алфавитом. На самом деле я не нашел ниже 32.

Редактировать: сохранить 1 байт благодаря @ATaco, много раз делал эту ошибку при запуске с Lua: p

c=io.read()a="abcdefghijklmnopqrstuvwyz"print(not c:find"%a"and c or c:find"%u"and a:upper()or a)

Вы можете проверить это онлайн на официальном сайте или на ideone . Если вы используете первый, ввод не будет работать (отключен), поэтому используйте следующий источник, где он заключен в функцию.

function f(c)
  a="abcdefghijklmnopqrstuvwyz"
  print(not c:find"%a"and c or c:find"%u"and a:upper()or a)
end

print(f("\""))
print(f("a"))
print(f("Q"))
Katenkyo
источник
Вы не единственный, кто не нашел более короткий способ создания алфавита в Lua. :(
manatwork
@manatwork хаха, точно так же, за исключением того, что мне не нужно было печатать это, но чтобы объединить это ^^. По крайней мере, это означает, что нет скрытого трюка, который я не знал, чтобы сделать это ^^ '.
Катенкё
Вы можете сохранить байт c=io.read()a="abcdefghijklmnopqrstuvwyz"вместо a, c = ...
ATaco
2

Mathematica, 75 байтов

#/.Thread[Join[a=Alphabet[],b=ToUpperCase@a]->Array[""<>If[#>26,b,a]&,52]]&

Довольно хороший результат для языка, не относящегося к игре в гольф ... Любые решения, использующие обработку кода персонажа, занимали бы больше байтов из-за затрат ToCharacterCodeи FromCharacterCode.

LegionMammal978
источник
2

C (функция), 71 байт

f(s,n,c){n=1;if(isalpha(s))s-=s%32-1,n=26;for(c=s;c<s+n;)putchar(c++);}
Цифровая травма
источник
f(s,n,c){for(c=s-=(n=isalpha(s)?26:1)>1?s%32-1:0;c<s+n;)putchar(c++);}сохраняет байт.
Кенни
1
f(s,n){for(n=isalpha(s)?s-=s%32-1,s+26:s+1;s<n;)putchar(s++);}на 62 байта
гастропнер
2

Python, 81 байт

f=lambda z,a="abcdefghijklmnopqrstuvwxyz":[k for k in[a,a.upper(),z]if z in k][0]

Это в основном перевод ответа Pyth. Он определяет функцию, fкоторая принимает в качестве аргумента символ и возвращает результат.

PurkkaKoodari
источник
1
Вы имеете в виду if z in k, верно? Также f=необязательно по умолчанию.
xnor
@xnor Да. Видимо я пропустил Ctrl-C.
PurkkaKoodari
2
Удалить f=, сделать функцию анонимной. -2
Эрик Outgolfer
2

Джольф , 17 байт

Попробуй это здесь.

? hpLipl? hpUipui
?                  if
  hpL               the lowercase alphabet (array) contains
     i               the input
      pl            return the lowercase alphabet (string)
        ?          else if
          hpU       the uppercase alphabet (array) contains
             i       the input
              pu    return the uppercase alphabet (string)
                i  otherwise, return the input
                   implicit: print the result
Конор О'Брайен
источник
2

MATLAB: 71 68 байт

i=input('');b=i<65|i>122|(i>90&i<97);[i*b,~b*((65:90)+32*(i>96)),'']

(спасибо OP за сохранение 3 байта)

Контрольная работа:

i='a'
ans=
abcdefghijklmnopqrstuvwxyz

i='A'
ans=
ABCDEFGHIJKLMNOPQRSTUVWXYZ

i='~'
ans=
~

Объяснение: Прописные буквы алфавита занимают 65:90символы ASCII. Строчный алфавит в 97:122ASCII. Итак, b=i<65|i>122|(i>90&i<97)проверяет, не является ли введенный символ iНЕ алфавитным. Если это так, вход возвращается. Алфавит в верхнем регистре возвращается, если b==1и i<97(заглавный символ). Если b==1и i>96, к 65:90этому добавляется 32, что соответствует 97:122алфавиту в нижнем регистре.

brainkz
источник
Хорошая подача. Два комментария: обычно используется, i=input('')если отправка является скриптом, или в качестве аргумента функции, если это функция @(i)i^2. i='a'вообще не принято. Кроме того, вы можете сохранить 3 байта, выполнив [1,2,3,'']вместо char([1,2,3]).
Стьюи Гриффин
Хорошо, отредактировано. Спасибо за предложение!
brainkz
2

SpecBAS, 111 байт

Я прошел через несколько версий этого, 111, кажется, лучшее, что я могу управлять.

1 INPUT l$: a$="abcdefghijklmnopqrstuvwxyz"
2  ?IIF$(l$ IN ["a" TO "z","A" TO "Z"],IIF$(l$=UP$ l$,UP$ a$,a$),l$)

Строка 2 использует ?ярлык для PRINTвстроенных IFоператоров и вложенных

Объяснение псевдокода

IF character IN "a".."z","A".."Z"
THEN
 IF character = UPPERCASE character
 THEN
  print UPPERCASE alphabet
 ELSE
  print alphabet
 ENDIF
ELSE
 print the character
ENDIF
Брайан
источник
Трудно сделать ["a" TO "z","A" TO "Z"]псевдокод похожим на то, что он уже делает. "a".."z","A".."Z"больше похоже на «реальный код», по крайней мере, на мой взгляд ... Хотя и то, и другое очень легко понять =)
Стьюи Гриффин
2
Спец какой ????
Bassdrop Cumberwubwubwub
2

Swift 2, 142 байта

func d(s:String)->String{let a="abcdefghijklmnopqrstuvwxyz";for v in s.utf8{return v>64&&v<91 ?a.uppercaseString:(v>96&&v<123 ?a:s)};return s}

Ungolfed

func d(s: String) -> String{
    let a="abcdefghijklmnopqrstuvwxyz"
    for v in s.utf8{
        return (
            v > 64 && v < 91 ?
            a.uppercaseString :
            (
                v > 96 && v < 123 ?
                a :
                s
            )
        )
     }
    return s
}
Jojodmo
источник
2

05AB1E , 19 16 байт

-3 байта благодаря else

DAsåiAëDAusåiAuë

Как это устроено

                   # implicit input
D                  # duplicate
 A                 # push lowercase alphabet
  s                # swap last two elements
   å               # push a in b
    i              # if
     A             # lowercase alphabet
      ë            # else
         D         # duplicate
          Au       # uppercase alphabet
            s      # swap last two elements
             å     # push a in b
              I    # if
               Au  # uppercase alphabet
                 ë # else leave input
                   # implicit print

Попробуйте онлайн!

Нил А.
источник
Не уверен, что ¹(первый ввод) уже существовал, когда вы опубликовали свой ответ, но вы можете сыграть в него 2 байта: A¹åiAëAu¹åiAuë( Попробуйте онлайн или тестовый комплект ).
Кевин Круйссен
2

Java SE 8, 71 69 байт

Golfed:

(a,s)->{char b=97;if(a<91)b-=32;a=b;b+=26;while(a<b)s+=a++;return s;}

Ungolfed:

(a,s)->{          // String as a parameter. If declaration is necessary it adds 8 bytes
char b = 97;      // Uppercase A char, this is important
if (a < 91)       // If it is not past 'z', where a is a char param
    b -= 32;      // Then go back to the lowercase alphabet
a = b;            // Done to prevent a cast
b += 26;          // End of alphabet
while (a < b)     // Go to end of alphabet
    s += a++;     // Append character
return s;}        // Then return

Первоначально я реализовал следующее

String s="";char b=96;if(a-91<0)b-=32;for(char c=b;++c<b+27;)s+=c;return s;

Это более элегантно, но, к сожалению, на один байт больше. Это предполагает, что поведение не-буквенных символов не определено и строка s инициализируется как "" перед выполнением. Будьте нежны, это мой первый пост.

редактировать: 2 байта, сохраненные Стью Гриффином путем изменения

a - 91 < 0 to a < 91
JFH
источник
2
Добро пожаловать на сайт! :)
DJMcMayhem
1
Спасибо! Уже несколько лет
скрываюсь
1
a<91должно работать или ...?
Стьюи Гриффин
2

Скала, 91 персонаж

(c:Char)=>{var a='a'.to('z').mkString;if(c.isUpper)a=a.toUpperCase;if(!c.isLetter)a=""+c;a}

Un-golfed

def f(c: Char): String = {
    var a='a'.to('z').mkString //set up lower case default response
    if (c.isUpper) {
        a = a.toUpperCase     //mutate the result if upper case
    }        
    if (!c.isLetter) { 
      a = ""+c                 //mutate the result if not a letter
    }
    a                         //return result
}

Иметь исходный изменяемый результат, а не возвращать неизменное значение из 3 различных блоков if, спасло меня 2 символа, даже если я его ненавижу.

Скалотонический метод

Лучшим методом для scala будет что-то вроде этого:

def convertToAlphabet(c: Char): String = {
    c match {
      case x if !x.isLetter => x.toString
      case x if x.isUpper => ('A' to 'Z').mkString
      case _ => ('a' to 'z').mkString
    }
}
sprague44
источник