задача
Если в качестве входных данных используется строка String, ваша задача состоит в том, чтобы вывести ее 42
только в том случае, если входная строка String оказывается точно следующей:
abbcccddddeeeeeffffffggggggghhhhhhhhiiiiiiiiijjjjjjjjjjkkkkkkkkkkkllllllllllllmmmmmmmmmmmmmnnnnnnnnnnnnnnoooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrsssssssssssssssssssttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzz
Он может выводить любое другое значение, выдавать ошибку или не выводить вообще, если ввод не равен вышеупомянутой строке.
Критерий победы
Это код-гольф , поэтому выигрывает самый короткий код в байтах!
abbcccddddeeeee...zzabc
что не удовлетворяет, что я полагаю, и я вижу некоторые программы, которые дают да на этом входе.Ответы:
Гольфскрипт, 20
с новой линией, 21 символ (Nabb)
На самом деле Nabb побил мой, вот оригинальное решение с новой линией, 22 символа
Это просто генерирование исходной строки и сравнение ее со строкой из стандартного ввода.
источник
26,{).[96+]*}%n+=42`*
за 21 (включая новую строку).n+
потому что массив не плоский. Вам придется либо оставить свои исходные 20 символов, либо добавить a,~
чтобы сгладить внутренние члены массива.Рубин 1.9,
46 4239 персонажейПредполагается, что ввод не заканчивается новой строкой.
источник
Программа C -
7889Редактировать: не печатать 42, когда есть дополнительные символы.
Предполагается, что ввод не имеет завершающей строки.
Если префикс не совпадает, программа завершается. Если префикс совпадает, но имеется 1-3 или около того лишних символов, выдается 2. В противном случае происходит неопределенное поведение.
Это можно сделать на один символ короче, изменив
exit(1)
наfork()
. Да, и на несвязанной заметке не забудьте сохранить все открытые документы на случай, если по какой-либо причине ваша система заблокируется.источник
PHP (60)
Предполагая ввод данных в командной строке:
Объяснение : вы можете просмотреть строку в виде структуры треугольника.
Строка
j
начинается с индексаi = j*(j+1)/2
(это формула треугольного числа). Решение квадратного уравнения приводит к тому, что индексi
находится на линииj = int((sqrt(8*i+1)-1)/2)
и, следовательно, содержит символ97 + int((sqrt(8*i+1)-1)/2)
.0-350
Диапазон индексов не позволяет упростить что96.5 + sqrt(2*(i+1))
, но это больше не справедливо для больших значений.Изменить : переключен на ввод командной строки, как предлагается в комментариях.
Редактировать : использует условный оператор для сохранения символа
источник
$s.=chr(96.5+sqrt($i+=2));
работает?Perl, 35
43Требуется Perl 5.10 или более поздняя версия (работает с
-E
), нет новой строки при вводе.Мне больше понравилось мое регулярное выражение побочных эффектов, но более короткий код произнес. Вот это как сувенир. Также предназначен для Perl 5.10 или новее, но только для расширенных / экспериментальных функций регулярных выражений, поэтому требуется только
p
опция командной строки.источник
$a++."{$b}"
а не просто$a++.$b
?05AB1E , 7 байтов (не конкурирует)
Попробуйте онлайн!
объяснение
Просто пройти через некоторые испытания, чтобы выучить 05AB1E (и играть в гольф в целом). Этот вызов был отмечен как активный вчера, и я нашел короткое решение, так почему бы не поделиться? :)
источник
Программа на Haskell -
71676457Предполагается, что завершающий символ новой строки не выводится.
Использование:
источник
zipWith
остановками , когда она достигает конца короткого списка, вы можете заменить['a'..'z']
с['a'..]
и сохранить 3 -х символов.[c|c<-['a'..'z'],_<-['a'..c]]
J, 29
пример:
источник
D: 94 персонажа
Более разборчиво:
источник
Дельфы,
164132Этот строит строку и просто сравнивает ее с первым аргументом командной строки. Это короче и менее сложно, чем моя другая заявка:
(Обратите внимание, что эта версия предполагает , что
c
иi
переменные начинают инициализируется в 0, как в случае в моей версии Delphi (2010).)Как и в моем другом представлении, для этого требуется меньше символов, если построение строк не происходит в функции, как я делал раньше:
Дельфы, 181
Обратите внимание, что вывод не нуждается в новой строке, поэтому WriteLn () стал Write ().источник
PHP - 45 символов
Я удивлен, что никто не отправил ответ, который использовал хеширование. Это очень эффективный способ проверки точной строки.
Данные довольно сложно скопировать / вставить, поскольку в середине кода находится нулевой байт. Вот шестнадцатеричный дамп кода для тестирования.
источник
Скала 79
источник
Pyth, 14
Просто строит необходимую строку, затем сравнивает с вводом и умножает на 42.
источник
m
доставляет мне неприятности…m
, которая применяет функцию к каждому элементу своего ввода. ВводG
, алфавит.xGd
находит положениеd
, символ в алфавите, вG
алфавите.h
увеличивает это на единицу и*d
повторяет персонажа столько раз. Внеm
функцииs
объединяет результирующий список строк в одну строку, а затемqz
проверяет, равен ли результат вводу. Логические значения представляются как0
будто False и1
если true, так*42
что в результате получается значение42
if True и0
if False.Brachylog (2), 15 байт, языковые проблемы
Попробуйте онлайн!
А теперь ответ, который работает по совершенно другому принципу, который можно увидеть здесь. Это отправка функции (вопрос не указывает, какой тип представления желателен, но функции разрешены по умолчанию).
объяснение
Этот ответ работает путем определения своего рода строки: те, которые а) содержат все строчные буквы алфавита, б) расположены в отсортированном порядке, и в) для которых взятие количества вхождений каждого символа в строке дает последовательность последовательных целые числа, начинающиеся с 1. (Должно быть ясно, что таких строк много, но та, которую мы хотим выделить в специальном случае, является самой короткой.) Затем, если строка удовлетворяет этим критериям, мы добавляем 16 к числу различных символов в строка; это даст 42, если строка - та, которую вопрос задает нам в особом случае, и по крайней мере 43 во всех других случаях. (Если строка не соответствует ни одному из критериев, относящихся к категории, функция завершится с ошибкой, что похоже на создание исключения.)
Вот как интерпретировать исходный код:
источник
Р,
6058Спасибо за предложение @giusppe
источник
paste
здесь все в порядке, и вы можете использоватьscan(,"")
вместоreadline()
.Python (84)
Предполагается завершающий перевод строки в конце ввода.
источник
raw_input
вместо этогоsys.stdin.read
?raw_input
читает только одну строку; Я не был уверен, будет ли «вход» всегда одной строкой или возможен ли дисквалифицирующий ввод в последующих строках.Python - 62 символа
источник
print("".join(x*chr(x+96)for x in range(27))==input())*42
.Perl,
4946 символовдля использования в программе, а не в командной строке
$..=chr($+96)x$ for 1..26;$.eq(pop)&&print '42'С уважением
БВ
Редактировать: идея сорвана с Ventero
источник
PHP
928887 символовРЕДАКТИРОВАТЬ
Заменены
$j<0
с$j
иreturn $b==$a?42:0;
сecho $b==$a?42:0;
Заменено
echo $b==$a?42:0;
наecho($b==$a)*42;
источник
Эклипс Пролог - 173
источник
JavaScript (91
939498102116)Использование:,
a('string')
возвращает,42
если действует в соответствии со спецификацией, или0
.http://jsfiddle.net/g25M3/6/
Редактировать : удалены
var
и исключены два пробела вfor (
.Изменить 2 : изменено
j>0
наj
иreturn (z==r)?42:0;
вreturn z==r?42:0
Редактировать 3 : Инициализировать
i
сi=''
, изменить(z==r)?42:0
в(z==r)*42
Изменить 4 : Изменить
for(;i<27;i++)
вwhile(i++<26)
Изменить 5 : Изменить
i=r='';while(i++<26)
вfor(i=r='';i++<26;)
а такжеfor(j=i;j;j--)
вfor(j=i;j--;)
источник
var
для объявления переменных;)for (
.return(z==r)?42:0;
наreturn z==r?42:0
j>0
может быть простоj
я думаю.JavaScript 1,8, 99 символов
Смею вас в этом разобраться :)
источник
PHP - 59
Предполагается, что по крайней мере 1 вход предоставляется по кли
Это более или менее работает, за исключением того, что md5 технически может иметь дубликаты с алгоритмом хеширования.
источник
PowerShell v2 +, 47 байт
Создает диапазон
1..26
, передает это через цикл с|%{...}
. На каждой итерации мы используем оператор запятой для построения массива литерала текущего,[char]
умноженного на текущий номер цикла. Затем мы-join
все вместе строим строку,abbcccdddd...
а затем используем-ceq
сравнение с учетом регистра для нашего ввода$args
, что приведет либо к,$TRUE
либо к$FALSE
. В PowerShell логические значения можно неявно приводить как1
или0
, соответственно, что здесь происходит с42*
. Распечатает,42
если вводabbccc...zzzzzzzzzzzzzzzzzzzzzzzzzz
и будет выводить0
иначе.источник
К, 26 байт
Спасибо
источник
{$[x~.Q.a@&1+!26;42;]}
для 22 байтов.42*(&!27)~-96+"j"$
на 18 байт (портируя мой ок ответ).VBA 91
Там не было никаких ответов VBA, но это работает:
источник
o="":For i=1To 26:o=o &String(i,Chr(i+96)):Next:?-42*([A1]=o)
A1
качестве входных данных.APL (Dyalog) ,
1817 байтовПопробуйте онлайн!
Четыре очевидных байта могут быть сохранены, если нам разрешено использовать верхний регистр.
42
42/⍨
если (лит. воспроизведено)⍞
ввод символов≡
идентично819⌶
в нижнем регистре⎕A
lphabet/⍨
тиражируется⍳
один через26
26источник
Clojure - 61 символ
Эксплуатирует следующие факты:
источник
Javascript 144
Вероятно, может быть значительно улучшено, рекурсия всегда была для меня головой далеко.
Сжатый
Менее сжатый
источник
Дельфы, 127
Этот читает строку из ввода, сравнивает ее по ходу, записывает 42, когда ввод совпадает до последнего
z
.Дельфы, 157
Дельфы, 188
Эта версия не использует функцию, которая сохраняет довольно много символов по сравнению с предыдущей версией этой техники:
Дельфы, 213
Увы, он немного длинный, в основном из-за длинных ключевых слов Delphi и необходимости инициализировать консольные приложения, прежде чем они смогут записать вывод.Также обратите внимание, что я увеличил CmdLine на 77 символов, так как это было смещение, которое мне нужно было пропустить через мой локальный путь к исполняемому файлу (Delphi не имеет прямого указателя аргумента). Настройте в соответствии с вашими настройками (может привести к уменьшению на 1 символ при смещении <10).
источник
program a;
строку. И скобки вокругb^<>Char(c)
,i>0
иi=27
их можно снять.if i>0then
будет компилировать!)