Подпишите это слово 2!
Не так давно я отправил вызов под названием « Подпиши это слово»! , В задании вы должны найти подпись слова, то есть буквы, расположенные по порядку (например, подпись this
is hist
). Теперь, этот вызов прошел хорошо, но была одна ключевая проблема: это было слишком легко (см. Ответ GolfScript ). Итак, я опубликовал аналогичный вызов, но с большим количеством правил, большинство из которых были предложены пользователями PPCG в комментариях к предыдущей головоломке. Итак, поехали!
правила
- Ваша программа должна принять входные данные, а затем вывести подпись в STDOUT или эквивалент на любом языке, который вы используете.
- Вы не можете использовать встроенные функции сортировки, поэтому такие вещи, как
$
в GolfScript, не допускаются. - Должна поддерживаться многозначность - ваша программа должна группировать буквы как в верхнем, так и в нижнем регистре. Таким образом, подпись
Hello
- этоeHllo
не то,Hello
что вам дает ответ GolfScript по первой версии. - Для вашей программы должен быть бесплатный интерпретатор / компилятор, на который вы должны ссылаться.
счет
Ваш счет - ваш счетчик байтов. Побеждает младший счетчик байтов.
Leaderboard
Вот фрагмент стека, который генерирует как регулярную таблицу лидеров, так и обзор победителей по языкам.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
# Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
# Ruby, <s>104</s> <s>101</s> 96 bytes
ThHihs
, мы можем вывестиhHhist
или мы должны вывестиhhHist
илиHhhist
?Ответы:
Pyth, 10 байт
Попробуйте онлайн: демонстрация
Объяснение:
источник
Хаскелл, 51
zip
Создает список пар символов[('a','A'), ...('z','Z')]
. Из-за усечения вторая конечная точка указывать не нужно. Для каждой пары в списке мы берем буквы во входной строке,s
которые являются одним из двух символов в паре.источник
Python 3,
7270 байтПредполагается, что вход состоит только из
[a-zA-Z]
.(-2 байта благодаря @xnor)
источник
"".join(c*b ...)
для"".join(c ... if b)
того же образомsum(n ... if b)
может бытьsum(n*b ...)
.c=1 for d in(input()+'~')*26:print(d[ord(d)&32^c:],end='');c+=d>'z'
(67)GOTO ++, 531 байт
GOTO ++ Страница проекта
Вот немного более читаемая и прокомментированная версия кода (обратите внимание, что
GOTO
комментарий начинается с GOTO ++):источник
function(arg)
иfunction() arg
оба действительны. Кроме того, приоритетные скобки есть,} {
а не скучные( )
Pyth,
1514 байтовСпасибо за isaacg для удаления 1 байта.
Я пока мало знаю о Пите, так что, возможно, это не очень удачно.
Попробуй это здесь.
источник
s
такой же, какjk
в списке строк.JavaScript (ES6), 71
74Ограничено A-Za-z (см. Комментарий @Matthieu M)
Edit Слишком часто используется для составления одного выражения с запятыми, чтобы избежать возврата. Здесь требуется вывод, поэтому я могу использовать простую
for
и забыть о запятых.При использовании массива количество байтов равно 73, но это больше не является допустимым EcmaScript 6Обычное примечание: тестирование запуска сниппета в любом браузере, совместимом с EcmaScript 6 (особенно не Chrome и не MSIE. Я тестировал на Firefox, Safari 9 мог пойти)
источник
Javascript,
112194 байтаЭто далеко от "игры в гольф", но я сейчас немного занят, просто отредактировал, чтобы удалить сортировку.
источник
console.log(input.split('').sort((a,b)=>a.toLowerCase().localeCompare(b.toLowerCase())).join(''))
Python 3, 64
Небольшое улучшение в ответе Sp3000 , в котором используется идея итерации итерации индексов символов, а для каждого - итерации по вводу для получения символов, которые соответствуют регистру.
При этом используется один цикл, проходящий через вход 26 раз. Разделитель
~
используется, чтобы знать, когда перейти к следующему символьному индексуc
. В зависимости от того,d
соответствует ли символ значению сc
точностью до регистра, последние пять битов битового значения записываются с помощьюd
xc
, где 0 обозначает совпадение.Затем символ
d
печатается точно, когда результат0
, с пустой строкой в противном случае.источник
Python 2.7,
114106 байтРегистрирует присутствие символа в массиве длиной 123 (для включения диапазонов AZ и az), а затем перебирает его, чтобы получить ненулевые записи.
Неэффективно, но более эффективно, чем грубое принуждение (но дольше :().
Тестирование
источник
HelloWorldhi
, я получаю['d', 'e', 'H', 'h', 'i', 'lll', 'oo', 'r', 'W']
if l[j]
ни того, ни другого.join
). -8 байт. Благодарность :)PHP,
275270 байтОбъяснение:
Код генерирует массив с каждой буквой в алфавите, который имеет значение ASCII в качестве ключа массива. После этого код генерирует новый массив, который содержит значения ASCII входных данных. Затем самое низкое значение распечатывается и удаляется.
Использование:
Вызов сценария с аргументом:
php -d error_reporting=0 script.php Hello
Ungolfed Версия:
Любые советы с благодарностью.
источник
Haskell,
8353 байтаИспользование:
f "HelloWorldhi"
->"deHhillloorW"
.Как это работает: пусть
y
будет входной строкойРедактировать: 30 байтов сохранено, представьте это! Спасибо @Mauris.
источник
import Data.Char;f y=[c|x<-[' '..],c<-y,toLower c==x]
(53 байта)? (Это займет некоторое время, чтобы прекратить, потому чтоlength [' '..] == 1114080
- но это конечно.)Python 3, 61 байт
Новый ответ для другой техники!
Отмечая то
ord('a')&31==ord('A')&31
и этоord('z')&31==ord('Z')&31
, мы можем просто создать массив пустых строк и для каждого символа добавить его в индекс массива своего значения ASCII&31
. Когда вы распечатаете его, он будет отсортирован.Ограничено для ввода
a-zA-Z
.источник
Python 3,
9792 байтаЛучший способ сортировки - это сгенерировать все перестановки, а затем выбрать минимум, который просто сортируется :)
Строки в нижнем регистре перед сравнением должны соответствовать правилам учета регистра.
Предупреждение: может быть очень медленным с большими строками.
Переводчик находится здесь .
источник
Python 3, 118 байт
Может быть в гольф намного короче, я знаю
источник
if q not in i:
наif~-(q in i):
..remove()
функцию на нем.Powershell, 164 байта
Я уверен, что есть более чистый способ сделать это, но я не мог придумать ничего другого. Просто принимает входные данные как массив символов, выполняет сортировку вставками и выплевывает выходные данные. Ужасно проигрывает даже другим неигровым языкам.
Код:
Использование:
Расширено и объяснено:
источник
Юлия, 61 байт
Джулия отобразит его как строковый вывод, если вы вызовете его в REPL. Если он должен распечатать в STDOUT, то ему нужно 78 байтов:
Переводчик для Юлии можно найти здесь . Еще один, в который я уже поместил некоторый код, находится здесь . Обратите внимание, что со вторым вам нужно будет сделать терминал (внизу) видимым, перетаскивая границу вверх. Нажатие «выполнить» заставит его работать в терминале в обычной командной строке (и, следовательно, не будет отображать вывод, если он вызывается без println). В качестве альтернативы, вы можете просто набрать
julia
в самом терминале, а затем обрабатывать все внутри REPL, который появится.И для некоторого дополнительного удовольствия, вот некоторые другие реализации
Сортировка гномов (83 байта):
Мой собственный алгоритм сортировки (84 байта):
источник
Scala, 82 байта
из командной строки:
Вероятно, можно немного продвинуться дальше ... просто внедряя сортировку вставкой с использованием Fold.
источник
машинный код x86,
5142 байтаПузырьковая сортировка, с некоторыми трюками повторного использования в регистре, чтобы сбрить байты здесь и там; в .COM файл работает в DOSBox, получает входные данные из командной строки и выводит в стандартный вывод.
Комментируемая сборка:
источник
Java (JDK 10) , 125 байт
Попробуйте онлайн!
Используя наивный род.
источник
Perl, 88 байт
Просто простая Bubble Sort. Вызовите с опцией -n, чтобы передать текст.
например:
Выход:
источник
PHP, 106 байт
Код:
В коде нет ничего особенного;
count_chars()
создает массив, индексированный кодами ASCII, который содержит количество вхождений для каждого символа ASCII. Остальное - скучная итерация по этому массиву.Пример исполнения:
Дополнительный байт можно сохранить с помощью PHP 7: заменить
$c[$i]
на($c=count_chars($argv[1]))[$i]
и удалить присвоение$c
из начала программы.источник
Haskell, 74 байта
Полностью отличается от моего другого ответа . На этот раз это простая вставка.
источник
Пип,
1814 байтGitHub хранилище для Pip
Кажется, что нет конкуренции с Пифом, но это довольно респектабельно.
Работает только на строки, содержащие
a-zA-Z
. Для каждой буквы алфавита используется операция фильтра для извлечения букв из входной строки, которые равны этой букве без учета регистра:Две заметки:
AZO
будет сканироваться какA ZO
вместоAZ O
;x
в конце кода (таким образом, печатая пустую строку после завершения цикла).Пробный прогон (с использованием
x
варианта):источник
Perl 5
-a
, 31 байтПопробуйте онлайн!
источник