Вызов
В этом задании вы должны взять число в качестве ввода и вывести соответствующую букву алфавита, и наоборот. (1 <=> A, 2 <=> B) и т. Д.
1 -> A
2 -> B
...
26 -> Z
A -> 1
B -> 2
...
Z -> 26
правила
- Это код-гольф , поэтому выигрывает самый короткий код в байтах.
- Вход будет состоять только из любых заглавной буквы от
A
доZ
или целого числа от1
до26
включительно. - Конечные пробелы (пробел и перевод строки) разрешены.
26
в виде целого числа или"26"
в виде строки, или оба разрешены?Ответы:
На самом деле 7 байтов
Попробуйте онлайн!
Объяснение:
Если допустимы строчные буквы, это 6 байтов:
Попробуйте онлайн!
источник
Actually
. ОтсюдаActually, 7 bytes
. : PЧистый Баш, 51
В большинстве остальных ответов используются условные выражения. Этот полностью исключает условные выражения и вместо этого обрабатывает входные данные как число base-36, которое индексируется в правильно сконструированный массив bash-brace-extension:
Ideone.
источник
#
делать?Эрланг, 26 байт
Один из немногих случаев, когда поведение строки Эрланга полезно.
источник
Python 2, 38 байт
Проверьте это на Ideone .
источник
Python 3, 43 байта
Интересно то, что это решение включает в себя все значения ИЛИ, побитового ИЛИ
|
, логического ИЛИor
, побитового XOR^
и логического XOR!=
...источник
2sable ,
98 байтКод:
Объяснение:
Использует кодировку CP-1252 . Попробуйте онлайн! ,
источник
Ruby,
47 39 +n
флаг = 40 байт333431 байтАнонимная функция. Использует прием обработки исключений, как в Python-решении @ KarlNapf .
-3 байта от @manatwork
Попробуйте онлайн
Оригинальная полная версия программы с
n
флагом на 40 байтов и читает из STDIN:источник
->i{(64+i).chr rescue i.ord-64}
.Чеддер,
3432 байтаСохранено 2 байта благодаря @LeakyNun
Я хотел бы, чтобы был более короткий способ проверить, если строка или номер.
Попробуйте онлайн! или тестовый набор
объяснение
"%s"%n==n
проверяет, является ли это строка простым способом."%s"
формат строки, я могу отформатировать,%
например"a %s c" % "b"
, равно"a b c"
.%s
указывает, что это строка, если передана цифра, она останется как%s
.источник
"%s"%n==n
сохраняет 2 байта"%d"%n==n
но это не сработало: /Mathematica
5441 байтС абсолютно умным предложением от LegionMammal978, которое экономит 13 байтов.
If[#>0,FromLetterNumber,,LetterNumber]
служит единственной цели принятия решения - применятьFromLetterNumber
илиLetterNumber
вводить.#>0
будет удовлетворен, если на входе,#
будет число, в этом случаеFromLetterNumber
будет выбран.Однако
#>0
не будет ни истинным, ни ложным, если#
это буква, иLetterNumber
будет выбран вместо.4
d
В Mathematica,
FromLetterNumber
аLetterNumber
также будет работать с другими алфавитами. Для этого требуется всего несколько байтов.δ
г
б
4
4
4
источник
If[#>0,FromLetterNumber,,LetterNumber]@#&
If[#>0,FromLetterNumber[#],LetterNumber@#]&
. ХотяIf[#>0,FromLetterNumber[#],LetterNumber@#]&[4]
работает,If[#>0,FromLetterNumber[#],LetterNumber@#]&["c"]
нет. Это, видимо, не может решить"c">0
. Я неправильно понял?,,
намерен, как и внешность@#
; он оценивается какIf[# > 0, FromLetterNumber, Null, LetterNumber][#]&
, который использует форму с 4 аргументамиIf
(посмотрите на это).If
работает форма с 4 аргументами .Haskell, 54 байта
Пример использования:
map f ["1","26","A","Z"]
->["A","Z","1","26"]
.Строгая система типов Хаскелла - настоящая боль здесь. Кроме того, все короткие функции char <-> int любят
chr
иord
нуждаются в импорте, поэтому я должен сделать это вручную. Для буквы -> Int, например, мне нужно преобразоватьString
->Char
(через!!0
) ->Integer
(черезfromEnum
) ->String
(черезshow
).источник
C, 55 байтов
источник
Perl 6 , 25 байт
Объяснение:
Пример:
источник
perl -pe '$_=/\d/?chr$_+64:-64+ord'
:!C #, 32 байта
Приводит к
Func<int, object>
.Ввод:
char
косвенно преобразуется вint
так, что может быть вызвано сint
(1-26) илиchar
('A'-Z').Вывод: либо a,
char
либоint
.источник
PHP,
494140 байтЯ не думаю, что есть хорошая альтернатива
is_numeric
правильно?Это выполняется из командной строки (
$argv[1]
указана первая переменная)Благодаря:
@insertusernamehere: Гольф 8 байтов. Замена
is_numeric($i=$argv[1])
на.0<($i=$argv[1])
Это работает, потому что(int)"randomLetter" == 0
.@manatwork: уменьшается на 1 байт. Заменить
0<
на+
. В этом случае происходит то, что сигнал + приводит «Z» (или любую другую букву) к 0. Это приводит к значению false. Поэтому любая буква всегда ложна, а число всегда верно.источник
0<($i=$argv[1])
вместоis_numeric($i=$argv[1])
экономит 8 байт .0<
→+
.Python 2, 61 байт
Да, я мог бы перейти на Python 3 для
input
источник
input()
все же и изменитеint(i)
наi
."A"
A
или ничего.def f(i):
строка 2: <пробел>try:o=chr(i+64)
, строка 3 <пробел>, в противном случае без изменений, строка 4: <пробел>return o
В этой форме это будет работать в любом Python 2. или Python 3PowerShell v2 +, 42 байта
Принимает входные данные
$n
(в виде целого числа или явного символа) и использует псевдотернарный код для выбора между двумя элементами массива. Условным является$n-ge65
(т. Е. Является входом ASCIIA
или выше). Если это так, мы просто приводим входные данные как целые и вычитаем64
. В противном случае мы добавляем64
к входному целому числу и приводим его как[char]
. В любом случае результат остается на конвейере, и печать неявна.Примеры
источник
Befunge-98 *, 19 байт
Поскольку в вопросе говорилось, что вы получите
1-26
или,A-Z
я предположил, что это означает число 26 или символ AZ. Большинство интерпретаций борются с вводом alt-кодов, поэтому проще использовать&
и вводить такие значения, как 26 для 26 или 90 для «Z», в отличие от~
.Псевдо-код
Проверьте это (на Windows) здесь!
* Технически это Unefunge-98, потому что он использует только 1 измерение, но это имя может быть незнакомым.
источник
Befunge 93 ,
144 90 66 54 3619 байтНе уверен на 100%, разрешено ли это, но если вам разрешено набирать A как 65, B как 66 и т. Д., То (для [моего] удобства):
Иначе, в 36 байтах:
(Спасибо Tngreene за предложения!)
(Спасибо Sp3000 за сохранение 12 байтов путем перестановки!)
Ungolfed:
Это моя первая рабочая программа Befunge за всю историю, и я чувствую необходимость в гольфе. Любая помощь будет принята с благодарностью.
Вы можете проверить код Befunge здесь .
источник
52**\28*++,@>~:0`!#^_\68*-
567+*
с"A"
. Кроме того, не забывайтеg
иp
инструкции по повторному использованию значения вместо того, чтобы создавать его повторно. Кроме того, я не смог найти никаких входных данных, которые бы перенесли IP в ветку>$ 28* + , @
. Для чего это? Вы уверены, что это нужно?$28*+,@
тогда как те> = 10 идут в другую. Это было сделано в конечном итоге, потому что вы не можете прочитать входные данные более одного раза, насколько я знаю.Brainfuck, 445 персонажей
Больше доказательство концепции, чем гольф-код. Требуется Без подписи, Brainfuck без упаковки.
С комментариями
источник
Java,
1049897835453515030 байтx->(x^=64)>64?(char)x+"":x+"";
Тестовая программа :
источник
return(s.matches("\\d+")?(char)(Integer.parseInt(s)+64)+"":(s.charAt(0)-64)+"");
Фурье, 30 байт
Попробуйте онлайн!
источник
R, 73 байта
источник
f=
, и вы пытаетесь использовать этуifelse
функцию, чтобы, возможно, сыграть несколько байтов!MATL, 10 байт
Объяснение:
Попробуйте онлайн! с числовыми входами.
Попробуйте онлайн! с буквенным вводом.
источник
Python 3,
49 48 5350 байтКаким-то образом я неправильно подсчитал число байтов; _; спасибо, дахугленный
isalpha
короче чемisnumeric
принимает входные данные в виде строки, которая может быть буквой или цифрой
источник
x.isnumeric()
иelse
сохранить один байт.Java, 61 байт
Ungolf'd:
Вызов
f('A')
вызывает первую функцию, возвращаяint
1; Вызовf(1)
вызывает вторую функцию, возвращаяchar
«А».источник
Javascript
86776660 байтисточник
return
утвержденииi=>typeof i=='number'?String.fromCharCode(i+64):i.charCodeAt(0)-64
.typeof
вход может быть только «число» или «строка». Так что не нужно проверять=='number'
,<'s'
тоже сделаю это.ASM: 10 байт
Объяснение: Это собранное представление программы, которая делает именно то, что запрашивается. Он не полностью функционален, потому что ему нужны некоторые директивы, но если он добавлен в сегмент кода программы сборки, он должен работать. Он получает входные данные в регистр AL и, если это буква, вычитает 40h из значения кода ASCII, оставляя только число (т. Е. B = 42h, 42h-40h = 2h). Если ввод является числом, он делает противоположную процедуру, добавляя 40h. Оставляет результат в регистре AL. Ниже приведен исходный код сборки
Кроме того, если вы преобразуете все остальные ответы в машинный код, я уверен, что мой будет наименьшим.
источник
77 02 2C
должно быть77 **04** 2C
;sub
иadd
являются в обратном направлении.#define F(x) ((int(*)(int))"\x89\xf8\x3c\x40\x76\4\x2c\x40\xeb\2\4\x40\xc3")(x)
Excel, 33 байта
источник
Брахилог , 10 байт
Попробуйте онлайн!
Ядро этого составляет всего 4 байта , но ввод / вывод для этой версии немного меньше, чем в здравом уме.
источник
Japt , 11 байт
Попытайся
источник