Вдохновленный мемом, который я видел ранее сегодня.
Описание задачи
Рассмотрим бесконечную алфавитную сетку:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
...
Возьмите слово ( CODEGOLF
в этом примере) и сделайте его подпоследовательностью сетки, заменив неиспользуемые буквы пробелом и удалив буквы в конце бесконечной сетки:
C O
DE G O
L
F
Примеры
STACKEXCHANGE
ST
A C K
E X
C H
A N
G
E
ZYXWVUTSRQPONMLKJIHGFEDCBA
Z
Y
X
W
V
U
T
S
R
Q
P
O
N
M
L
K
J
I
H
G
F
E
D
C
B
A
F
F
ANTIDISESTABLISHMENTARIANISM
A N T
I
D I S
E ST
AB L
I S
H M
E N T
A R
I
A N
I S
M
Примечания
- Конечные пробелы разрешены.
- Вам не нужно дополнять
последнююстроку пробелами. Например, если вводABC
, вы можете вывести толькоABC
без 23 пробелов. - Вы можете предположить, что ввод будет соответствовать
[A-Z]+
регулярному выражению. - В качестве альтернативы вы можете использовать строчные буквы, в этом случае выходные данные будут совпадать
[a-z]+
. - Вы должны использовать символ новой строки (
\n
,\r\n
или эквивалент) для отдельных линий, то есть список строк не правильный формат вывода. - Это задача для игры в гольф , поэтому сделайте ваш код как можно короче!
BALLOON
(два одинаковых соседних символа).Ответы:
Шелуха , 15 байт
Попробуйте онлайн!
объяснение
источник
Java 10,
161159152 байта-2 байта благодаря @Nevay .
-7-байтовая печать напрямую вместо возврата строки и преобразования в Java 10.
Объяснение: "
Попробуй это здесь.
Первая часть метода разбивает входное слово на части с разделителем.
Например:
CODEGOLF
→CO;DEGO;L;F
илиBALLOON
→B;AL;LO;O;N
.Вторая часть проходит по этим частям и использует регулярное выражение
[^...]
для замены всего, что не соответствует пробелу.Например,
.replaceAll("[^CO]"," ")
оставляетC
, иO
, и заменяет все остальное пробелом.источник
B;AL;LO;O;N
?for(char c:s)x+=p<(p=c)?c:";"+c;
.C (gcc) , 69 байтов
Попробуйте онлайн!
источник
Perl 5 , 44 байта
40 байт код + 4 для
-lF
.Попробуйте онлайн!
источник
Python 2 , 92 байта
Попробуйте онлайн!
источник
JavaScript (ES6), 79
Редактировать Как принято ведущий символ новой строки, я могу сохранить 2 байта
Еще на 1 байт я могу принять строчные или прописные данные:
Меньше гольфа
Контрольная работа
источник
\n
буквальным переводом строки внутри обратных кавычек на -1 байт.MATL ,
2423 байтаИспользуются строчные буквы.
Попробуйте это в MATL Online!
объяснение
источник
Japt ,
1816 байтов-2 байта благодаря @Shaggy
Только ввод заглавных букв.
Попробуйте онлайн!
объяснение
Переключитесь на альтернативные переменные, где
B
прописные буквы.Разделите входную строку между символами, где первый больше или равен (
¨
) второго.Сопоставьте каждый раздел с помощью функции, где
X
находится текущий раздел.Отобразите каждый символ в верхнем регистре алфавита следующим образом,
Z
указав текущую букву.Удалить все буквы в текущем разделе из текущей буквы. Если текущая буква содержится в текущем разделе, это приводит к пустой строке.
Если это правда (не пустая строка), верните пробел (
S
), в противном случае верните текущую букву.Соедините результат предыдущей строки с новыми строками и напечатайте результат.
источник
r"[^{Z}]"S
кажется немного смешным, но я не могу найти лучшего способа ...kX
!kX ?S:Z
наoX ªS
сохранение двух байтовPyth, 18 байт
Попробуй это здесь.
Лидирующая новая строка в выводе, строчный алфавит.
источник
Желе , 19 байт
Попробуйте онлайн!
источник
OI<1®;
->>2\0;
чтобы сохранить один байт (на самом деле я тоже сделал>2\0;œṗµØAf€ȯ€⁶µ€Y
для 18, что мне лично легче разобрать)BALLOON
.<2\1;¬
; Ну что ж.C (gcc),
9163 байта-28 благодаря ASCII-только
Попробуйте онлайн!
Предыдущая:
Да, есть более короткое решение, но я заметил после того, как написал это ... Попробуйте онлайн!
источник
Mathematica, 101 байт
Split
ввод в строго увеличивающиеся последовательности букв, сравнивая соседние буквы сOrder
. ЕслиOrder[x,y] == 1
, тоx
предшествуетy
в алфавите и, следовательно, может появляться в той же строке.Для каждой последовательности букв создайте шаблон для сопоставления строк
Except
для этих букв;#|##
это сокращение дляAlternatives
. Замените буквыAlphabet
, соответствующие шаблону, пробелами.Иллюстрация промежуточных шагов:
источник
Golfscript,
2221 байтПопробуйте онлайн!
-1 байт благодаря тщательному окончательному переопределению
n
встроенного.Пояснение (с немного другой версией):
источник
Сетчатка , 80 байт
Попробуйте онлайн!
Всегда есть ровно одна ведущая новая строка. Код несколько неуклюже добавляет слово к алфавиту вместе с маркером (точка с запятой). Затем он перемещает маркер до первой буквы слова, изменяя все остальные буквы, которые он пропускает в пробелы. Также удаляет первую букву слова. Это повторяется до тех пор, пока первая буква слова больше не будет после маркера. Затем он очищает этот маркер и остальную часть алфавита и снова заменяет его новой строкой, а алфавит - маркером. Он повторяет это до тех пор, пока входное слово не станет пустым, затем очищает последний алфавит и маркер, оставляя желаемый результат.
источник
05AB1E , 18 байт
Попробуйте онлайн!
Возникла проблема с 05AB1E
ć
(extract 1), оставив пустую строку / список в стеке после извлечения последнего элемента. Это решение было бы на 1-2 байта короче, если бы не это.источник
ð,
означает «напечатать пробел и перевод строки».Сетчатка ,
130126 байтовПопробуйте онлайн! Изменить: 4 байта сохранены с помощью генератора алфавита @ MartinEnder. Объяснение:
Добавить алфавит
Совместите как можно больше букв с их положением в алфавите.
Начните новую строку перед первой буквой, которую невозможно выровнять.
Удалите алфавит, но затем повторяйте все до тех пор, пока не будут смещены буквы.
источник
q / kdb + ,
4845 байтРешение:
Попробуйте онлайн!
Примечание. Ссылка на порт K (oK) этого решения, поскольку для q / kdb + нет TIO.
Примеры:
Объяснение:
Q интерпретируется справа налево. Решение делится на две части. Сначала разбейте строку, где следующий символ меньше или равен текущему:
"STACKEXCHANGE"
->"ST","ACK","EX","CH","AN","G","E"
Затем возьмите строку из 26 пробелов и примените к ней входные данные по индексам, где этот ввод присутствует в алфавите, и напечатайте в stdout.
"__________________________"
->__________________ST______
Сломать:
Примечания:
источник
Powershell,
7063 байта-7 байт спасибо @Veskah
Попробуйте онлайн!
Объяснение:
Для каждого символа в аргументе splatted:
$x
и очистите$x
значение (rv
это псевдоним для Remove-Variable ), если код текущего символа меньше или эквивалентен (-le
) коду предыдущего символа.$x
, сохранить его в$x
. Также он обновляет предыдущее значение символа.Выход последний
$x
.источник
|% *ht
чтобы сохранить несколько байтов, но похоже, что он безубыточен.Желе ,
2421 байт3 байта благодаря Эрику Аутгольферу.
Попробуйте онлайн!
источник
SOGL V0.12 , 22 байта
Попробуй здесь!
источник
JavaScript (ES6), 87 байт
Принимает ввод прописных или строчных букв. Выходные данные соответствуют регистру ввода.
тесты
Показать фрагмент кода
источник
Haskell,
81 7473 байтаСохранено 1 байт благодаря Laikoni !
Попробуйте онлайн.
Haskell Hugs оптимизации
Интерпретатор Hugs позволяет мне сохранить еще один байт, выполнив
(!cycle$['A'..'Z']++"\n")
вместо:,(!cycle(['A'..'Z']++"\n"))
но GHC не нравится первый . (Это уже устарело; Лайкони уже переписал эту строку таким образом, что сэкономил 1 байт.)По-видимому, Hugs также не требует скобок вокруг сопоставителя шаблонов списка, поэтому я мог бы сохранить еще два байта, идущих от:
q@(w:y)!(x:z)
доq@(w:y)!x:z
.источник
a=['A'..'Z']++'\n':a;(!a)
. Интересно, что у Хагса, кажется, есть более слабые правила.a=...:a
трюк. Спасибо!Python 3 ,
8785 байтПопробуйте онлайн!
источник
J , 39 байт
Попробуйте онлайн!
источник
Древесный уголь , 15 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
источник
APL (Dyalog Classic) , 20 байтов
Попробуйте онлайн!
источник
K (нгн / к) ,
2928 байтПопробуйте онлайн!
{
}
функция с аргументомx
>':x
для каждого символа он больше предыдущего?~
NEGATE&
где (по каким показателям) мы имеем(
)_x
вырезатьx
по этим индексам, вернуть список строк{
}'
для каждой из этих строканглийский алфавит
x?
найти индекс первого вхождения каждой буквы вx
, используйте0N
(специальное «нулевое» значение), если не найденоx@
индексx
с этим; индексируя с0N
возвратами" "
, поэтому мы получаем строку длиной 26, в которой буквы отx
находятся в своих алфавитных позициях, а все остальное - пробелыисточник
R ,
129117 байтПопробуйте онлайн!
Объяснение (без присмотра):
источник
R , 95 байт
Просто бегите по алфавиту в верхнем регистре, перемещая счетчик на 1, если вы встречаете букву в позиции счетчика слова и печатаете букву, в противном случае - пробел.
Попробуйте онлайн!
источник
GolfScript , 37 байт
Попробуйте онлайн!
Я сделал Golfscript под другим именем, но у него был неверный вывод.
источник