вход
Неотрицательное целое число n
и непустая строка, s
содержащая только буквенно-цифровые символы и подчеркивания _
. Первый персонаж s
не является _
. Подчеркивания s
интерпретируются как пробелы, которые могут быть заполнены другими символами.
Определим бесконечную последовательность «бесконечных строк» следующим образом. Строка просто повторяется бесконечно много раз. Для всех строка получается путем заполнения ее пробелов символами , так что первое из заменяется на , второе - и так далее. Поскольку первая буква - нет , каждое пустое пространство в конце концов заполняется, и мы обозначаем бесконечную строку, где каждая была заменена ее конечным значением.s1 = s s s...
s
k > 1
sk+1
sk
s1
_
sk
s1[0]
s1[1]
s
_
s∞
_
Выход
Первые n
символы в виде строки.s∞
пример
Рассмотрим входы n = 30
и s = ab_c_
. У нас есть
s1 = ab_c_ab_c_ab_c_ab_c_ab_c_ab_c_ab_c_...
Подставляя пробелы , мы имеемs1
s1
s2 = abacbab_ccab_caabbc_abcc_abacbab_cc...
Мы снова заменяем пробелы, что приводит кs1
s3 = abacbabaccabbcaabbc_abcccabacbab_cc...
Еще одна замена:
s4 = abacbabaccabbcaabbcaabcccabacbabbcc...
Из этого мы уже можем вывести первые 30 символов , которыеs∞
abacbabaccabbcaabbcaabcccabacb
Это правильный вывод.
правила
Вы можете написать полную программу или функцию. Побеждает меньшее количество байтов, и стандартные лазейки запрещены. Сбой при неправильном вводе допустим.
Тестовые случаи
0 "ab__" -> ""
1 "ab__" -> "a"
3 "ab__" -> "aba"
20 "ab" -> "abababababababababab"
20 "ab__" -> "abababababababababab"
20 "ab_" -> "abaabbabaabaabbabbab"
30 "ab_c_" -> "abacbabaccabbcaabbcaabcccabacb"
50 "ab_a_cc" -> "abaabccabaaaccabbacccabcaaccabbaaccabaaaccabcaccca"
50 "abc____" -> "abcabcaabcbcaaabcbcbcabcaaababccbcbabccabcabcaaaba"
Ответы:
Пиф, 17
Ввод должен быть представлен строкой в первой строке и длиной во второй в STDIN. Например:
Попробуй это здесь.
Объяснение:
источник
APL
2928он используется так:
Объяснение:
Tryapl.org
источник
⍣≡
это отличная идея. Может быть, я должен попытаться перенести это на J ...CJam,
262420 байт4 байта сэкономлено благодаря Петру.
Проверьте это здесь. Сначала берет строку и
n
вторым на STDIN.Вы можете запустить все тестовые случаи, вставив их во входные данные такими, какие они есть (включая,
-> output
если хотите), и используя следующий тестовый набор (который меняет порядок кода):объяснение
Результат распечатывается автоматически в конце программы.
Примечание
[\]
: в принципе,[
запоминает текущий размер стека и]
собирает все до последнего запомненного размера в массиве. Однако, если размер массива падает ниже запоминаемого размера между ними, то начало массива корректируется соответствующим образом. Теперь вы можете подумать, что замена двух верхних элементов массива вообще не влияет на размер массива, но\
фактически выдает два значения, а затем выталкивает их в обратном порядке. Это то, что толкает начало массива на два. Следовательно,[\]
это самый короткий способ обернуть два верхних элемента стека в массиве. Иногда побочный эффект их сбора в обратном порядке довольно раздражает, но в данном случае это именно то, что мне нужно.источник
_'_#)
g
наI*
. У меня работает в GolfScript.Python 3, 110 байт
Требуется немного больше игры в гольф, но здесь есть некоторое безумие. Читает
n
потомs
из STDIN.Самое интересное, что в задании цикла мы копируем
b
, а затем начинаем извлекать из негоb
во время понимания списка . Если бы задание было наоборот, оно бы не сработало!источник
к, 30
источник
Ява - 162
174Не каждый день я использую цикл do / while при игре в гольф на Java: D
Это просто повторяет и заполняет пробелы, как они приходят. Это просто продолжается до тех пор, пока
_
в результате не останется ничего .С переносами строк:
источник
Ява 8, 238
Меньше гольфа:
источник
Руби, 60
Сцепляет
s
с собойn
время, затем генерируетn
копии кода, который заменяет подчеркивания наs
, оценивает эти копии и возвращает первыеn
символы результата. Поскольку в каждом цикле удаляется хотя бы одно подчеркивание, это гарантированно дает намn
символы без подчеркивания.источник
f
и бежатьputs f[10,"ab_"]
, я получаю следующее сообщение об ошибке:in 'eval': undefined method 'next' for #<Array:...
. Это, кажется, работает, когда в строке нет подчеркивания.String#chars
Ruby 1.9.3 и Ruby 2.0 изменилось; в Ruby 1 он возвращает перечислитель, когда нет блока, в Ruby 2 - массив. Его можно сделать нечувствительным к версии, изменивchars
егоeach_char
на 4 дополнительных чистых байта кода.Python 2, 75
Это ожидает ввода как
(30,"ab_c_")
.В Python строки не позволяют присваивать. Таким образом, заменить пробелы на нужный символ сложно. Можно обойти это путем преобразования в список и обратно, но я обнаружил, что короче просто сгенерировать выходную строку с нуля, добавляя нужные символы по одному за раз.
Создаемый вывод is
S
, который начинается пустым. Мы повторяем символы ввода,s
скопированные много раз, чтобы смоделировать круг. Мы проверяем, является ли это пробел через логическое значениеb
. Мы проверяем равенствоx=='_'
а не сравнение, потому что подчеркивание лежит между заглавными и строчными буквами.Если персонаж не пустой, мы просто добавляем его
S
. Если оно пустое, мы добавляем следующую неиспользованную букву выходных данныхS
. Отслеживаем используемые буквы указателем индексаc
который начинается с 0 и увеличивается каждый раз, когда мы сталкиваемся с пробелом.В конце мы печатаем первые
n
символы полученной строкиS
.Мы должны использовать
S[c:c+b]
вместо более короткого,b*S[c]
потому что последний выдает ошибку «за пределами», когдаS
начинается пустой иc
равен 0. Это никогда не имеет значения, потому что мы гарантируем, что первый символ непустойs
, так что этоS[c]
никогда не нужно, но код не знает этого. Переключение наor
короткое замыкание также может решить эту проблему, но стоит больше символов.Python 2, 83
Порт Pyth -to-Python решения isaacg , который использует
split
иzip
для выполнения замены:Это оказалось длиннее, потому что, удивительно, именованные методы длинные в Python. Но, возможно, это может быть улучшено путем рифления
s
иs.split('_')
вместе более коротким способом.источник
Хаскелл
(93)67Я давно не писал ни одного Haskell,
так что это, вероятно, можно значительно сократить.но это было так хорошо, мы должны были сократить это и сделать это лучше!Использование:
источник
Партия - 425
Я проиграл?
Партия имеет ограничения - я принимаю это. Например; Мне пришлось использовать цикл for, чтобы получить одну переменную в удобном для использования формате из-за ограничений синтаксиса синтаксического анализа переменных.
for %%b in (!c!)do...
просто существует, так что я могу использовать%%b
вместо того,!c!
чтобы я мог фактически выполнять манипуляции со строками!s:~%%b,1!
и иметь переменные, расширяемые в нужное время.Есть несколько довольно простых вещей, которые я мог бы сделать для игры в гольф дальше, но, вероятно, не ниже 400 байт. Скоро у меня будет еще один треск.
источник
ECMAScript 6, 78
Начинается с пустой строки и при каждом появлении подчеркивания заменяет его символом следующего индекса текущей строки.
источник
Python 2 -
9997 байтПотому что 4-х представлений на Python недостаточно ...
Пример:
источник
ECMAScript 6,
9391Сбрил 2 персонажа из первой версии.
источник
C # - 162
Я украл решение Geobits и изменил его на C #
1 символ лучше, так что вы можете улучшить Geobits;)
источник