Программа должна печатать каждую буквенную комбинацию (строчную или прописную, это не имеет значения) в алфавитном порядке. Оно должно начинаться с a
последней напечатанной комбинации password
.
Выход должен быть:
a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ... passwora passworb passworc password
Ответы:
Perl, 19 символов
Использует переводы строк в качестве разделителей, как указано выше. Запустите
perl -M5.010
(или простоperl -E 'say for a..password'
), чтобы включить функцию Perl 5.10+say
. По мета , это не считается дополнительными символами.(Если вы настаиваете на пробелах в качестве разделителей, то
$,=$";say a..password
это всего на два символа длиннее. Однако, это также очень медленный и расточительный объем памяти, вплоть до непригодности на практике, поскольку он пытается построить весь список в памяти перед его печатью.)источник
Ruby, 33 символа (оптимальный, но более длинный вариант)
Мне нравится
'a'.upto('password')
; это говорит вам точно, что он делает. Ruby великолепен и так выразителен.:D
Конечно,
print c,' '
также было бы намного понятнее, но использование$>
на два символа короче.Рубин,
2925 символов (медленная версия)Этот файл короче, но он печатает все токены одновременно, поэтому для его запуска требуется очень много времени!
источник
(?a..'password').to_a
может быть сокращено до[*?a..'password']
Perl,
333224 символаРешение в 32 символа:
Не так много, чтобы сказать об этом. Я мог бы уменьшить это до 27 символов, если бы мог использовать новые строки вместо пробелов для разделения записей.
Илмари Каронен отмечает, что
..
внутренние вызовы++
, поэтому лучшим решением (25 символов) будет:Используя преимущества командной строки Perl, мы получаем эквивалентное 24-символьное решение:
Правила подсчета флагов Perl здесь, для тех, кто не знаком с ними.
Конечно, 21-символьное решение Ilmari еще короче, но оно требует машины, которая может выделить массив из 129 052 722 140 строк.
источник
.$"
вместо того, чтобы," "
спасти персонажа?Perl 6, 20 символов
Вам не нужны другие вещи
источник
Python 2, 91
источник
PHP
383736 символовВы должны установить кодировку ISO 8859-1 и отключить предупреждения.
источник
$w
изначально устанавливается в «a», а затем увеличивается до тех пор, пока не достигнет первого значения после «пароля» (последняя строка не печатается).for
цикл. В этом коде нет ничего странного, кроме последних 2 символов, которые представляют собой битовый пробел. Во всяком случае, да, я проверил это до более короткого слова.passwoqs
доpassword
. Поскольку кодировка кодовой панели не соответствует ISO 8859-1, мне пришлось заменить~ß
ее пробелом.$w<passwore
вместо$w!=passwore
.Рубин (40 знаков)
Интерпретировать строку из букв az как число в базе 26 с a = 1, b = 2, ..., z = 26.
Таким образом, «пароль» можно рассматривать как число N =
Если мы позволим
s = "a"
(то есть: 1) и сделаем (N-1) вызовыs.succ!
, s будет"password"
(N). Другими словами, N = 1 + (N-1).Для примера, который будет выполняться быстрее, чтобы доказать правильность вычисления N, рассмотрим
"pass"
в качестве цели, где Nи
Так как мы хотим печатать
"a"
, нам нужноИтак, вернемся к полному «паролю».
N = 129052722140
, оставив:Я охотился за более компактной формой
129052722140 == 0x1e0c2443db
но не смог ее найти.(Обновлено, чтобы исправить отсутствие печати
"a"
, спасибо Кэри.)источник
N
вместоN-1
своих итераций! Спасибо, я буду редактировать, чтобы исправить. (Хотя 129052722140 - интересный номер для Google :).)s=?a
,s.succ!
начинается «b'`.s=?a
иN-1
вы получите «b c ... пароль»; сs =
<backtick>, иN
вы получите «b ... пароль». SO запросил вывод для начала'a'
. Это все.Javascript, 73
Вот 73-символьная версия кода @Briguys, которая печатает только буквенные комбинации
for(i=s=0;1982613533018>i++;s=i.toString(36))/\d/.test(s)||console.log(s)
источник
APL (Дьялог),
4634Теоретически, он будет печататься до ПАРОЛЯ, но после ZZZZ я столкнулся с полной ошибкой рабочего пространства: 5-мерный массив просто слишком крут.
РЕДАКТИРОВАТЬ: Должно быть, было слишком долго, так как я в последний раз возился с APL. Как я посмел пропустить сравнение личности (
≡
)!объяснение
{...}
: Объявляет функцию, которая ...⎕A∘.,⍵
: берет внешнее произведение поверх конкатенации (каждая комбинация элемента левого операнда, конкатенированного с элементом правого операнда, точно так же, как декартово произведение) между 26 прописными буквами альфа (⎕A
) и аргументом (⍵
){...}¨
: И для каждого элемента результирующего набора, вставьте его в функцию, которая ...⍞←⍵
: распечатывает его'PASSWORD '≡
и сравнивает с'PASSWORD '
→
: Если сравнение возвращает true (1
), затем прервите программу.⍵
: Иначе просто верните напечатанную строку.∇
Наконец, внешняя функция рекурсирует себя.(Затем вы берете внешний продукт через конкат между 26-альфа и 26 альфа, который дает все двухбуквенные комбинации, а затем внешний продукт через конкат между двухбуквенными комбинациями и 26 альфа, и т.д ... До тех пор, пока вы достичь ПАРОЛЯ, который вызывает прерывание)
' '
: Искра!! Это начало рекурсивной функции с символом пробела.источник
Python 2 -
153 152 151149 байтСохранение одного байта с использованием UPPERCASE и одного с использованием символов новой строки вместо пробелов.
источник
Golfscript 41
Из-за отсутствия
'z'+1 == 'aa'
логики, Golfscript не может победить.168036262484,
создать массив от 0 до 168036262483(;
брось 0{
..}%
перебрать массив27base
преобразовать элемент в базовый массив 27{96+}%
добавьте 96 к каждой цифре' '+
преобразовать в строку и добавить пробел в конец.96?0<*
обрезать строку до нуля, если она содержит символ 96источник
В Руби,
3940...or
129052722140
. (Редактировать: раньше у меня было129052722
. Я потерял некоторые цифры вырезать и вставить. Предыдущий гекс (0x7B13032
) был для неправильного номера.). Заимствованоa=?`
из @Doorknob для сохранения персонажа.источник
a=?`
, это выглядит странно и в конце есть дополнительное пространство, но, по крайней мере, это работает: PORD_BASE_ASCII = 'a'.ord-1; def nbr(word); len = word.size; word.split('').inject(0) {|t,c| offset = c.ord - ORD_BASE_ASCII; t + offset*(26**(len -= 1))}; end
Легко подтвердить, что это правильно, просто распечатав некоторые последовательности.Javascript:
5756 символов (спасибо C5H8NNaO4)Вот решение, которое включает в себя числа в качестве возможных символов («0», «1», «2», .., «passwor9», «passwora», «passworb», «passworc», «password»)
Вот скрипка для тестирования (только с последними 100 итерациями, поэтому она не блокирует ваш браузер).
источник
print every **letter** combination
любом случае, сохраните персонажа:{} -> ;
Хаскелл, 101
источник
Befunge (72)
Печатает строки 'a' в 'password', разделенные пробелами, затем завершает работу.
Ниже приведена версия, которая печатает только первые 9 * 9 = 81 слово (от 'a' до 'dd') для сравнения.
99*
Это число итераций для выполнения.источник
JavaScript
8076скрипка - останавливается на «па».
Однако это повторяет вещи.
источник
i=s=0
чтобы сохранить еще три символа.var
?i
раньше был глобальным; сейчасs
глобальный. Вы можете просто держать оба глобала в коде гольф, как правило.