Виведіть алфавіт, алфавіт або просто символ


49

Завдання проста:

Напишіть функцію або програму, яка приймає вхід x, і виводить алфавіт нижнього регістру, якщо він xє частиною алфавіту нижнього регістру, виводить алфавіт верхнього регістру, якщо він xє частиною верхнього алфавіту великого регістру, і виводить так само, xякщо він не є частиною жодного з них.

Правила:

  • Вхід може бути аргументом функції або від STDIN
  • Введенням буде будь-який із символів для друку ASCII від 32 до 126 (пробіл до нахилу).
  • Введення може бути в лапках, 'x'або "x", але пам'ятайте , що 'і "є дійсним введенням і повинні бути підтриманий.
  • Введенням може бути будь-яка з літер алфавіту, тобто ви не можете припустити, що це буде aабо A.
  • Вихід повинен бути лише одним з алфавітів або єдиним символом, але останні рядки в порядку.
  • Букви в алфавіті не повинні бути розділені пробілами, комами або чим-небудь іншим.

Деякі приклади:

F
ABCDEFGHIJKLMNOPQRSTUVWXYZ

z
abcdefghijklmnopqrstuvwxyz

"
"

    <- Input:  Space
    <- Output: Space

Найкоротший код виграти в байтах.


Необов’язково, але цінуємо: Якщо у вашій мові є перекладач в Інтернеті, будь ласка, опублікуйте посилання, щоб його можна було легко перевірити іншими.


Таблиця лідерів

Фрагмент стека внизу цієї публікації генерує каталог з відповідей а) як список найкоротших варіантів для кожної мови та б) як загальний таблиця лідерів.

Щоб переконатися, що ваша відповідь відображається, будь ласка, почніть свою відповідь із заголовка, використовуючи наступний шаблон Markdown:

## 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, це може стати двобайтовим. Це не є змагальним, оскільки TeaScript 3 був зроблений після цього виклику

N0

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

Якби ми могли вивести 0123456789для цифр, то це може бути:

°

TeaScript 3 є дійсним. Отже, ви можете ним скористатися!
користувач75200

27

Pyth, 10 байт

h/#z[GrG1z

Тестовий набір

Почнемо зі створення списку з 3-х елементів: алфавіту малого регістру, верхнього алфавіту та введення. ( [GrG1z) Потім ми фільтруємо цей список за кількістю появи вхідних елементів у ненульових елементах. ( /#z) Нарешті, ми беремо перший елемент відфільтрованого списку.


6
Серйозно, чи є щось, чого ти не зміг би вирішити за допомогою декількох байт Pyth? Мені справді потрібно вивчити цю мову ..
Гексаголік

25
Дізнайся, на якій мові? ... ти згадав двох імен. : P
Кінтопія

2
@quintopia Ну чому б не обидва? :)
Гексаголік

15

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

Селектор (? На структуру cse) з'єднаний з vi, який називається лексичним класом. Він вимикає числа від 1-6 залежно від введення, 5 - нижній регістр, 4 - верхній регістр.

Цикл for працює 26 разів, щоб створити алфавіт або один раз пропустити символ.


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
)

Тест


Це насправді найкоротший спосіб створення рядка з усім алфавітом у Javascript? Якби ви хотіли весь ASCII-діапазон для друку, вам доведеться вводити кожен окремий символ?
Стюі Гріффін

1
@StewieGriffin На жаль це так. Єдиний спосіб буде що - щось на кшталт: for(a="",i=64;++i<91;)a+=String.fromCharCode(i). String.fromCharCodeдуже непридатний для гольфу, але іноді це єдиний спосіб!
користувач81655

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 75 байт

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

Виглядає некрасиво, але catIMS не може бути передано функцій, IMHO.



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: (для деякого визначення neololfed

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

Привіт, і ласкаво просимо до PPCG! Гарна відповідь. Ось пропозиція щодо гольфу: Ви можете використовувати лямбда-вираз ( lambda c:) замість явного визначення ( def f(c):print() та зберегти кілька байт. Крім того, вам не потрібно місця перед for.
isaacg

Ах, я припускав , «вихід» означає друк, а не просто повернутися :) Акуратні, якщо це так , це до 84, lambda c:''.join([chr(x+(97if c>'Z'else 65))for x in range(25)])if c.isalpha()else c. Дякую!
Конеке

Так, стандартне визначення результатів на сайті дозволяє повернутися з функцій, тому ви можете редагувати нову версію у своїй відповіді. Ще один гольф полягає в тому, що дужки не потрібні - функція працює абсолютно так само без них, як розуміння генератора замість розуміння списку.
isaacg

Ах, ще не використовували розуміння генератора раніше, вивчаючи нові речі! Ще раз дякую :)
Koneke

Зауважте, що при введенні "у функцію вам потрібно \".
Даніель

6

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

Просте рішення. РЕДАКТУВАТИ : Гольфував завдяки пропозиції Еріка Гольфіста.

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

Безголівки:

def f(s):
 a='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
 if s.isalpha():
  if s.islower():return a.lower()
  else:return a
 return s

1
Чи можете ви скористатися потрійним оператором, щоб зберегти кілька байт? Щось подібне return a.lower() if s.islower() else a.
Девід Робертсон

@DavidRobertson Я не впевнений, чи правильно ви читаєте моє рішення, яке є верхнім рядком коду, але це саме те, що я роблю.
Шерлок9

Ах! Я читав версію, що не має волі. Вибач за те!
Девід Робертсон

@DavidRobertson Не проблема
Sherlock9

Гольф:lambda s,a='abcdefghijklmnopqrstuvwxyz':(s,(a,a.upper())[s.isupper()])[s.isalpha()]
Ерік Аутгольфер

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та створивши потрібний діапазон безпосередньо.

Це ord()виглядає погано там. Спробуйте Z<$x?$a:strtoupper($a).
манастирство

@manatwork Ха-ха, я думав, що складний у цій другій частині. Завдяки вказуванню на це.
вставтекористувач

Спробуйте ' '&$x^Aскласти великі та малі літери a і z. Тобто ваш код стає<?=ctype_alpha($x=$argv[1])?join(range(' '&$x^A,' '&$x^Z)):$x;
Ісмаель Мігель

@IsmaelMiguel Це буде точно такий же кількість байтів.
Вставтекористувач

1
Не хвилюйтесь - і це все-таки приємний спосіб заблукати. ;)
вставтекористувач

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вас, ви можете зберегти ще два ... Я все ще не можу придумати жодних інших способів зберегти більше досі ...
Дом Гастінгс

@DomHastings Я спробував це, але не можу встановити $_список (про який я знаю). Це повинно бути інтерпольоване ( $_="@_"), але для цього використовується простір як роздільник, тому я також повинен був би зробити $"=''це (або використовувати 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

Чи можете ви розмістити версію без гольфу? Я все ще не повністю розумію, як це працює.
Шельваку

Впевнений, розміщений один.
гістократ

4

CJam, 18 байт

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

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


Я намагаюся зрозуміти, як зробити CJam, але я втрачаюсь між офіційним документом і тим, що тут читаю. Хтось може надати мені, наприклад, сторінку, на якій я можу зрозуміти, чому _elалфавіт з малих літер?
Ердаль Г.

Ах, elозначає "перетворити на малі регістри". Я щойно натиснув верхній алфавіт, тож тепер я його копіюю _, а потім закликаю elдо отриманої копії.
Лінн

1
Я зробив хороший pdf, що містить (майже) всі команди CJam.
Лінн

4

Сітківка, 62 байти

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

Дві короткі лінії - це регулярний вирівнювання. Якщо вхід є малим (у діапазоні [a-z]), він замінює цей символ (у даному випадку - це весь вхід) алфавітом малих літер. Процес схожий на великі регістри. Якщо це не лист, заміни не проводяться, і він виводиться недоторканим.

Спробуйте в Інтернеті.


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]*""}'
@

4

MATL , 22 байти

jtt1Y2XIm~Iw?km?Ik]]1$

Для цього використовується поточна версія (3.1.0) мови.

EDIT (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 є літерою (див. Б), то воно встановлюється на "A" (або "a", додаючи c AND 32 до "A" значення ASCII), інакше воно встановлюється на початкове значення c.
f = кількість символів для виведення. Якщо це не літера (див. Б), то це встановлено на 1 інше, вона встановлена ​​на 26
2) Цикл від e до e + f, виводячи кожен символ на stdout.


2
Ви знаєте, що для більшості викликів рішення може бути надано як повноцінна програма чи функція? Враховуючи величезну кількість кодового коду на Java, функція може бути коротшою.
манастирство

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++);}.
манатура

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 байт

На жаль, я не знайшов рішення, встановленого aалфавітом, меншим за 26 байт . Насправді я не знайшов коротше 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"))

Ви не єдиний, хто не знайшов коротший спосіб генерування алфавіту в Луа. :(
манатура

@manatwork ха-ха, точно те саме, за винятком того, що я не мусив її друкувати, але з’єднати ^^. Принаймні, це означає, що не існує прихованого трюку, якого я не знав, щоб це зробити ^^ '.
Катенкіо

Ви можете зберегти байт за допомогою c=io.read()a="abcdefghijklmnopqrstuvwyz"а, c = ...
ATaco

2

Математика, 75 байт

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

Досить хороший бал для мови, що не використовується для гольфу ... Будь-які рішення, що використовують обробку символьних кодів, займуть більше байтів, через витрати на ToCharacterCodeта FromCharacterCode.



2

Пітон, 81 байт

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

Це в основному переклад відповіді Піта. Він визначає функцію, fяка бере аргумент символу і повертає результат.


1
Ви маєте на увазі if z in k, правда? Також f=за замовчуванням необов’язково.
xnor

@xnor Так. Мабуть, я пропустив Ctrl-C.
PurkkaKoodari

2
Видаліть f=, зробіть функцію анонімною. -2
Ерік Аутгольфер


2

MATLAB: 71 68 байт

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

(спасибі ОП за збереження 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, 32 додається, 65:90що відповідає 97:122- алфавіту малих літер.


Приємне подання. Два коментарі: Це звичайно використовувати, 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$)

У другому рядку використовується ?ярлик для 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
Spec що ????
Bassdrop Cumberwubwubwub

2

Швидкий 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}

Безумовно

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
}

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ë( Спробуйте в Інтернеті або тестовий набір ).
Kevin Cruijssen

2

Java SE 8, 71 69 байт

Гольф:

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

Безголівки:

(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

2
Ласкаво просимо на сайт! :)
DJMcMayhem

1
Дякую! Я ховався вже кілька років і мені дуже цікаво дізнатися, чи можу я скласти конкурентоспроможні відповіді на Java / C ++ :)
jfh

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}

Без гольфу

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 різних, якщо блоки блоку врятували мене 2 символи, навіть якщо я ненавиджу його.

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

Кращим методом для масштабування буде щось подібне:

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
    }
}

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.