Соревнование
Вывести алфавит из заданной буквы, прочитанной с консоли. Если буква заглавная, вы должны отобразить алфавит в верхнем регистре. Напечатанный алфавит должен заканчиваться прецедентной буквой вставленного. Если к входу добавлен дополнительный параметр (простая точка .
), алфавит должен быть напечатан по одной букве в каждой строке. В противном случае алфавит должен быть напечатан в той же строке, разделенной простым пробелом. Если в программу будет отправлен неправильный ввод, он ничего не напечатает.
Примеры входов:
Входные данные:
c
Выход программы:
d e f g h i j k l m n o p q r s t u v w x y z a b
вход
H.
Выход программы:
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
A
B
C
D
E
F
G
Ответы:
GolfScript
48 75 73 70 67 66 63 5753Демоверсии онлайн:
Контрольный пример 1 ('c')
Контрольный пример 2 («H.»)
Контрольный пример 3 (неверный ввод)
Обновить:
Теперь последнее правило также реализовано. Спасибо Ventero за указание на проблему.
Обновить:
Я переписал код с нуля и нашел новые способы сократить его еще больше.
История модификаций:
источник
If wrong input is send to the program it will not print anything.
C
135 129128 символовБлин, так много разных магических чисел, но никак не избавиться от них.
Должен быть запущен с вводом в качестве параметра программы. Теперь следует требование «неправильный ввод».
Объяснение:
В этой
**b+6&31
части используется тот факт, что коды ASCII для символов нижнего и верхнего регистров одинаковы, если смотреть только на последние 5 бит, а остальные 5 бит находятся в диапазоне 1..26.Версия без требования «неправильный ввод» (82 символа):
источник
test
, назовите ее какtest c
илиtest X.
main(a,b)char**b;{
. Кроме того, можноb++
было бы заменить*b[1]
->**b
иb[1][1]
->1[*b]
.Рубин,
727161 символовЭта версия ruby использует регулярное выражение для проверки ввода. К счастью, строковый метод Ruby
succ
делает большую часть работы за нас (включая обход).Edit: 61 символов с помощью Хрон и Ventero .
источник
c=gets[0];25.times{$><<c.next![-1]+($1?$/:' ')}if~/^[a-z](\.)?$/i
gets;25.times{$><<$_=$_.next[0]+($1?$/:' ')}if~/^[a-z](\.)?$/i
- в основном то же самое, что и вы, просто злоупотребляет$_
и$/
+=
вместо+
, вы можете опустить круглые скобки$1?$/:' '
.Рубин:
12711392 (?) Символов(Я не могу найти правило о пенальти при использовании
-p
. На данный момент добавлено 1. Если неправильно, пожалуйста, исправьте меня.)Образец прогона:
источник
Руби,
10195Попробуйте онлайн
источник
('a'..'z').to_a
=>[*?a..?z]
GolfScript,
8072 персонажаМного кода проверяет правильность ввода и опцию «ничего не печатать». Фактическая логика только 37 символов.
Тестовые случаи онлайн
источник
q / k4
66 64 63 60 5856 + 2 штрафаштраф за глобальную переменную init, алгоритм 56, как показано ниже:
56:
58:
60:
63:
64:
РЕДАКТИРОВАТЬ:
Добавлено штраф 2 за глобальную инициализацию (x :), то же самое, если обернуть функцию в скобки (как предложил slackware),
не уверен, что изменение пространства имен также должно быть наказано ... тогда это еще 3
Пример:
источник
Perl,
1311271171121061041029896929190937166656458 символовИспользование:
Один символ был добавлен к числу для
n
опции.Самый большой разрез был возможен только из-за того, что он видел поведение
++
персонажей в ответе Джона Перди .источник
s/a.$1/az/
сохранить еще 2chop().($2?$/:$")
-> ещеchop,$2?$/:$"
4Perl,
149, 167Обновить
источник
$s=($d)?"\n":" ";
с$s=$d?$/:$";
и , возможно , просто избавиться от$s
вообщеPython, 83
источник
PHP,
120119113источник
$v[1]=='.'?"\n":" "
результата в переменной $ s, пусть PHP вычисляет его каждый раз вecho
выражении. Таким образом, вы можете сэкономить 6 символов.Mathematica
158 159 204 199 183 167 165162Код
использование
источник
J 43
Примеры:
tuvwxyzabcdefghijklmn opqr
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
Это решение появилось на форуме по программированию J: http://jsoftware.com/pipermail/programming/2012-August/029072.html
Авторы: AlvordBossCerovskiCyrEllerHuiLambertMcCormickMillerQuintanaSchottSherlockTaylorTherriault
объяснение
J фразы выполняются, начиная справа, передавая текущий результат влево, когда он оценивается. Поскольку он интерактивный, мы можем посмотреть на отдельные части решения, чтобы лучше понять их.
Средняя часть генерирует прописные и строчные буквы в Unicode:
Глагол "u:" преобразует свой числовой правый аргумент в символы Юникода. Числовой аргумент генерируется из значений ASCII для символов верхнего и нижнего регистра путем добавления чисел для «A» и «a» каждый к значениям от 0 до 25, сгенерированным «i.26»:
Правая часть,
ищет (i.) позицию правого аргумента (]) слева ([) - который является вектором букв выше - и отбрасывает (}.) еще на один (>:), чем это число. «0» применяет эту фразу к 0-мерным (скалярным) аргументам.
Фраза «25 {.» Берет первые 25 элементов вектора справа.
Предпоследняя фраза «1j1 #» слева повторяет свой правый аргумент в соответствии с номером слева. Простое число делает простую репликацию:
Однако комплексное число, обозначенное буквой «j» между действительной и мнимой частями, вставляет элемент заполнения в соответствии с мнимой частью. Здесь мы указываем один элемент заполнения справа от «j».
Как и в большинстве J-примитивов, реплицирующий глагол (#) работает с числовыми массивами аналогично тому, как он работает с массивами символов. Как показано здесь,
мы видим, что элемент числовой заливки по умолчанию равен нулю, тогда как для символов это символ пробела.
Наконец, крайний левый токен "|:" транспонирует результат предыдущих глаголов справа от него.
Объяснение предоставлено Девоном Маккормиком. Спасибо, Девон.
источник
бред, 303
В настоящее время он не поддерживает
If wrong input is send to the program it will not print anything
часть, и это может быть короче. Я планирую исправить это позже. Прямо сейчас мой мозг слишком утомлен, чтобы продолжать.источник
С 110
Иногда печатает «пробелы» между буквами, иногда нет.
Чуть более читабельно:
Запускается:
источник
JavaScript, 137
К сожалению, немного многословно (
String.fromCharCode
иcharCodeAt
).источник
Perl,
77767068Редактирование:
Сохранение персонажа с использованием регулярных выражений вместо
substr
.Сохранено 6 символов с использованием
map
вместоfor
.Спасены 2 символа, пропустив последний перевод строки.
источник
\n
в вашем финалеprint
требуется, что сэкономит пару символов\n
, спасибо.R 219
Уродливо, долго ... все еще работает.
Использование:
источник
C, 146 символов (ужасно)
Я не очень разбираюсь в C, что, вероятно, показывает ...>. <У меня было ощущение, что символы, являющиеся целыми числами, были бы полезны, но на самом деле это не оказало такого большого влияния, как я надеялся ... Я оставлю здесь свои попытки, не стесняйтесь предлагать улучшения.
Unminified версия:
источник
VBA 225
Отформатирован для запуска из непосредственного окна:
Разбит на отдельные строки (должен быть окружен
Sub
блоком и нужен другойprint
метод для работы в модуле, что делает код длиннее):источник
Java 8, 127 байт
Объяснение:
Попробуйте онлайн.
источник
Свинка,
91,86,82,79, 76Не такой современный язык;) Я уверен, что осталось немного места для оптимизации ..
Объяснение:
читать ввод
проверьте, соответствует ли t требуемому входу
Основной для цикла по алфавиту. Обратите внимание, что свинка строго оценивает слева направо. True = 1, так что вы получите 65 или 97 в результате для p, # является оператором по модулю
Тесты:
(вам понадобится среда выполнения паротита, т. е. Caché, чтобы запустить это)
редактировать: жирный заголовок
редактировать: было неверное решение, исправлено. Спасибо rtfs и Averroees за указание на это
источник
JavaScript: 141
Комментируемая версия:
jsFiddle DEMO
источник
Вот моя первая попытка сделать это с помощью APL.
если я могу использовать одну глобальную переменную,
A←2 26⍴6↓26⌽⎕UCS 65+⍳58
я могу сократить это до следующего:источник
C ++ 11
источник
С (111)
рассечение
Работы] $ ./test 5
Работы] $ ./test W XYZABCDEFGHIJKLMNOPQRSTUV
Работы] $ ./test M NOPQRSTUVWXYZABCDEFGHIJKL
Работы] $ ./test g hijklmnopqrstuvwxyzabcdef
Работы] $ ./test [
Работы] $ ./test a bcdefghijklmnopqrstuvwxyz
Работы] $ ./test Z ABCDEFGHIJKLMNOPQRSTUVWXY
Спасибо за еду для размышлений.
источник
[A-Za-z]\.?
, если я правильно понял вопрос.Perl, 226 символов
источник
die
утверждение может быть сокращено, сохраняя кучу ...C # 170
несжатого
источник
1
: Если буква заглавная, вы должны отобразить алфавит в верхнем регистре.2
: Напечатанный алфавит должен заканчиваться буквой прецедента вставленного.3
: Если к входу добавлен дополнительный параметр (простая точка), алфавит должен быть напечатан по одной букве в каждой строке. В противном случае алфавит должен быть напечатан в той же строке, разделенной простым пробелом.4
: Если в программу введен неправильный ввод, она ничего не напечатает. Это мисс 4 из 4.char
наvar
1 балл и побрить его, потерять.ToCharArray()
(astring
- массив символов, с которым вы уже можете проходить !), Потерять,string[] a
поскольку вы не имеете дело с аргументами командной строки, потерять пространство имен, свою константу 'c' следует читать с консоли, потерять строку алфавита и использовать вместо него ASCII и т. д. Хорошо, что вы играете, но, пожалуйста, постарайтесь приложить немало усилий; большинство ваших представлений, кажется, только троллинг.С 117
Благодарим шнаудера за трюк с д + 6 и 31.
http://ideone.com/ts1Gs9
источник
Bash: 110 байт
С точки зрения объяснения, это довольно просто, никаких волшебных уловок - это просто то, для чего bash изначально подходит. С точки зрения неочевидных битов:
{a..z}
это очень недооцененный трюк в bash - он расширяется доa b c d...
. Вы можете сделать то же самое для генерации числовых последовательностей.[[ $1 =~ [a-z] ]]
с регулярным запускает с регулярным выражением по первому аргументу программы для символов от a до z. Аналогично для AZ. Вам нужны двойные квадратные скобки, но[
вы не можете этого сделать.${1:1:1}
получает подстроку $ 1 (первый аргумент), один символ в, один символ в длину - то есть он возвращает второй символ строки, какой мы и ожидаем.
.sed 's/ /\n/g'
простое регулярное выражение: ищет и заменяет пробелы символами новой строки. Если.
это второй символ строки, мы передаем входные данные для этого, или иначе ...cat
последний трюк здесь - если мы не хотим заменять пробелы символами новой строки, мы вместо этого передаем stdin в cat, который просто выводит его снова.источник