Из-за технических ограничений Stack Exchange заголовок отображается неверно. Правильное название для этой задачи является
Делать
Word Icicle!
Word Icicle
Word cicle
ord cicle
ord icle
ord i le
or i le
or i l
or l
or
r
Сегодняшняя задача состоит в том, чтобы сделать сосульки из входного слова. При наличии строки полностью печатаемого ASCII и не менее 2 непробельных символов выполните следующие действия:
Вывести текущее состояние строки.
Замените наименьший лексический символ (кроме пробелов) пробелом. Если есть связь, замените крайний левый символ.
Повторяйте в последовательных строках, пока строка не будет содержать только 1 непробельный символ.
Это создает эффект того, что входная строка выглядит как тающая ...
I'm Melting!!!
I'm Melting !!
I'm Melting !
I'm Melting
I m Melting
m Melting
m elting
m lting
m ltin
m lt n
m t n
t n
t
правила
После нескольких итераций ваш вывод почти наверняка будет содержать пробелы в каждой строке. Если вы решите их усечь, это разрешено.
У вас может быть одна конечная пустая строка, но не более.
Помните, что ввод может содержать несколько пробелов, но все они эффективно пропускаются. Например, вход
a a
должен датьa a a
Вы можете принять ввод как список строк, если хотите. Для вывода вы можете вернуть или распечатать список строк, одну строку с символами новой строки или символьную матрицу / 2D-массив. Обычно я предпочитаю разрешающие форматы ввода-вывода, поэтому другие форматы, скорее всего, допустимы, если они согласованы и четко соответствуют правильному выводу. Если есть сомнения, не стесняйтесь спрашивать. Как обычно, полные программы или функции разрешены.
Помните, это конкурс на самый короткий ответ на любом языке! Если вы решите ответить в Java, попробуйте сделать самый короткий ответ Java (в байтах), какой только сможете.
Контрольные примеры
Hello World! -->
Hello World!
Hello World
ello World
ello orld
ello orl
llo orl
lo orl
o orl
o or
or
r
AbCdEfGhIjKlMnOpQrStUvWxYz -->
AbCdEfGhIjKlMnOpQrStUvWxYz
bCdEfGhIjKlMnOpQrStUvWxYz
b dEfGhIjKlMnOpQrStUvWxYz
b d fGhIjKlMnOpQrStUvWxYz
b d f hIjKlMnOpQrStUvWxYz
b d f h jKlMnOpQrStUvWxYz
b d f h j lMnOpQrStUvWxYz
b d f h j l nOpQrStUvWxYz
b d f h j l n pQrStUvWxYz
b d f h j l n p rStUvWxYz
b d f h j l n p r tUvWxYz
b d f h j l n p r t vWxYz
b d f h j l n p r t v xYz
b d f h j l n p r t v x z
d f h j l n p r t v x z
f h j l n p r t v x z
h j l n p r t v x z
j l n p r t v x z
l n p r t v x z
n p r t v x z
p r t v x z
r t v x z
t v x z
v x z
x z
z
PPCG is da BEST -->
PPCG is da BEST
PPCG is da EST
PP G is da EST
PP G is da ST
PP is da ST
P is da ST
is da ST
is da T
is da
is d
is
s
({({})({}[()])}{}) -->
({({})({}[()])}{})
{({})({}[()])}{})
{ {})({}[()])}{})
{ {}) {}[()])}{})
{ {}) {}[ )])}{})
{ {} {}[ )])}{})
{ {} {}[ ])}{})
{ {} {}[ ] }{})
{ {} {}[ ] }{}
{ {} {} ] }{}
{ {} {} }{}
{} {} }{}
} {} }{}
} } }{}
} } } }
} } }
} }
}
Ответы:
Python 2 ,
7170 байт-1 байт благодаря овсу
Попробуйте онлайн!
источник
Сетчатка , 28 байт
Попробуйте онлайн! Объяснение:
Повторите, пока входное значение не пустое.
Распечатать текущее значение.
Выполните оставшуюся часть сценария для значения. Затем выполните результат этого сценария как сценарий для значения.
Сортировка символов в порядке.
Выберите первый непустой символ и выведите программу Retina, которая заменяет первое
$\
вхождение литерала ( ) этого символа ($&
) пробелом (конечный пробел в исходном коде).источник
APL (Dyalog Unicode) ,
1811 байтовПопробуйте онлайн!
использует
⎕io←1
; возвращает массив строк (вектор символьных векторов)источник
∪
необходимо?⍋∘⍋
05AB1E , 9 байтов
Попробуйте онлайн!
объяснение
источник
{ðKv=yð.;
был мой, хороший.:
заменяет все символы вместо того,.;
который заменяет первый (т.е. посмотрите, что делает ваш 7-байтовый символ!
в тестовом примере). Кроме того, в задаче явно указано исключение пробелов, поэтому ваш 7-байтовый код не будет работать для ввода с несколькими пробелами. PS: Хороший ответ, Луис! +1 от меня. :).;
в первую очередь. Я буквально помню, как боролся с этим 1 мая в начале этого года, когда вы упомянули об этом.Pyth,
171413 байтовПопробуй здесь
источник
sed
-rn
, 142143байтаПопробуйте онлайн!
(примечание: в программе есть вкладки)
Поскольку у sed нет понятия лексикографического порядка, мне пришлось жестко задавать набор печатных символов ASCII, и это занимает более половины байта.
Использование sed 4.2.2 сократит количество пользователей на 2, так как это позволяет использовать неназванные ярлыки. Попробуйте онлайн!
-r
позволяет расширенные регулярные выражения (игрок в гольф)-n
отключает неявную печать пространства шаблона в конце программыПространство образца начинается с ввода
:a
меткаa
, это основной цикл программыp
напечатать пространство шаблона (причудливое имя для буфера)Теперь мы добавляем набор печатных символов ASCII (исключая пробел)
s/$/ ABCDEFGHIJKLMNOPQRSTUVWXYZ/
добавить вкладку, выступающую в качестве 1-байтового разделителя, за которой следует алфавит в верхнем регистреs<tab>
заменитель (sed может принимать любой символ в качестве разделителя, в этом случае вкладка используется для сохранения байта от выхода из него/
)\w+$
прописной алфавит, который мы только что добавили<tab>
с участием!"#$%\&'()*+,-./0123456789:;<=>?@&[\\]^_\`\L&{|}~<tab>
остальные символы, обратите внимание, что\L&
это строчная версия прописного алфавита:b
меткаb
, удалить символы из начального набора, которые отсутствуют во вводе/(.).* \1/!
если первый символ из набора ASCII отсутствует на входеs/ ./ /
убери этоtb
повторятьb
до тех пор, пока замена не завершится неудачноs/(.)(.*) \1.*/ \2/
замените первый символ в наборе ASCII, присутствующем на входе, пробелом, и удалите набор ASCIIta
рекурсиюисточник
sed
достаточно, чтобы сэкономить как минимум 4 байта: попробуйте онлайн!Рубин ,
60585547 байтовПопробуйте онлайн!
источник
a-b=[' ']
иa-b
быстро -2 байтаR ,
140100 байт-40 байт благодаря Джузеппе!
Попробуйте онлайн!
Решение, использующее
outer
магию Джузеппе для правильной работы, длиннее - 104 байта. Вдохновлен этим ответом .Попробуйте онлайн!
источник
rank
!Python 3 , 71 байт
Попробуйте онлайн!
-4 байта благодаря овсу
источник
*bool({*a}-{" "})
вместоif{*a}-{" "}else[a]
RecursionError
?if/else
ярлыки, но*bool
не, так что да,Python 2 ,
70696664 байтаПопробуйте онлайн!
Спасибо за 2 байта из ов, используя
S and f()
вместоif S:f()
источник
...If there is a tie, replace the leftmost character...
правило, вы можете это исправить с помощьюreplace(min(...),' ',1)
Желе , 8 байт
Попробуйте онлайн!
идея
Основная идея состоит в том, чтобы создавать столбцы желаемого результата напрямую, а не манипулировать строкой и возвращать все промежуточные результаты.
Начнем с нумерации символов входной строки в порядке их удаления. На данный момент мы будем делать вид, что пробелы также будут удалены.
Теперь мы строим столбцы, повторяя каждый символ по индексу в этом перечислении.
Осталось только удалить дубликаты, чтобы учесть пробелы.
Код
источник
Perl 5
-n
,3734 байтаСбросил три байта с помощью @TonHospel
Попробуйте онлайн!
источник
\Q
хотя бы для последнего теста ... Я пропустил это и в первый раз!say&&s/\Q$a/ / while($a)=sort/\S/g
. Также правильно обрабатывает0
JavaScript,
676665 байтПотому что я давно не играл в гольф!
Попробуйте онлайн
Спасибо DanielIndie за указание 4 избыточных байтов, которые включены в пиво!
источник
K (нгн / к) ,
2624 байтаПопробуйте онлайн!
источник
{@[x;y;:;" "]}
мог бы быть@[;;:;" "]
. Какую версию k вы используете? Я не знаком с этим_ci _ic _dv
.C # (интерактивный компилятор Visual C #) , 129 байт
Попробуйте онлайн!
источник
c!=32
может бытьc>32
;c==32
может бытьc<33
; и(char)999
может быть'¡'
(или любым другим символом выше диапазона Unicode для печати ASCII).while
кfor
и размещенииvar s=ReadLine()
иs=s.Remove(i,1).Insert(i," ")
внутри него (так что две точки с запятой больше не требуется).Perl 5 с
-nlF/\s|/
, 39 байтВозможно, это раздвигает границы не учитываемых флагов Perl, если это так, я вернусь к предыдущему ответу.
Попробуйте онлайн!
источник
-n
флагом: codegolf.stackexchange.com/questions/162161/make-a-word-icicle/…Haskell , 67 байт
12 байтов сэкономлено благодаря Laikoni
Попробуйте онлайн!
Этот заканчивается в ошибке
Haskell ,
8379 байтПопробуйте онлайн!
Этот заканчивается в ошибке
Haskell , 86 байт
Попробуйте онлайн!
Haskell ,
1009188 байтПопробуйте онлайн!
источник
f s|(a,_:b)<-span(/=minimum(id=<<words s))s=putStrLn s>>f(a++' ':b)
попробуйте онлайн!id=<<
это довольно умноJavaScript (Node.js) ,
8065 байтПопробуйте онлайн!
Не знаю,
replace
взять строку как строку, а не регулярное выражениеисточник
K4 ,
282018 байтРешение:
Пример:
Объяснение:
Это то же самое, что делает ngn . Найдите индексы, которые приведут к появлению списка по возрастанию, перезапишите их один за другим
" "
, а затем возьмите отличительные, чтобы удалить дубликаты строк:источник
gcc 32-bit,
6665 bytesСпасибо за Джонатана Фреха за -1 байт
источник
*p==i?...:0;
возможно, может быть*p-i?0:...;
.*p-1||(...)
такой же длины)f(a)
компилируется, какa
должно быть типаchar*
, но я предполагаю, что это как-то связано с вашим 32-разрядным использованием GCC.char*p,i;f(long long a){for(i=31;++i;)for(p=a;*p;)*p==i?puts(a),*p=32:++p;}
на tio (64 бита ) можно объяснить, какf(a)
работаетMATLAB, 74 байта
При этом используется 2-выходная форма функции max () для получения наименьшего символа и его индекса, преобразовав строку в нулевые значения в пробелах и 256-символьное значение для печатных символов.
источник
Common Lisp ,
240228224 байтаПопробуйте онлайн!
Это моя первая публикация.
Я нахожусь в процессе изучения шрифта, поэтому я уверен, что кто-то может придумать что-то более короткое, чем это.
источник
APL (Dyalog Unicode) , 39 байтов SBCS
Попробуйте онлайн!
Dfn.
Как?
источник
V , 27 байтов
Попробуйте онлайн!
HexDump:
источник
PowerShell ,
10399 байтПопробуйте онлайн!
Принимает ввод как строку в
$a
. Затем мы выполняем цикл от2
до$a.length
(т.е. соответствующее количество вертикальных времен, необходимых для удаления всех символов, кроме одного). Каждую итерацию мы выводим текущую строку и удобно сохраняем в$x
одно и то же время. Затем мы строим новый[regex]
объект,$p
attern состоящий из оставшихся символов$a
, которые-n
ВЗe
каче пространству,sort
изд, то0
й один из них.Затем мы устанавливаем
$a
равным новую строку объекта regex с.Replace
методом для замены в строке$x
,$p
attern, пробелом" "
, но только с соответствием1
st. Да, этот синтаксис странный.Строки остаются в конвейере, и неявный
Write-Output
дает нам новую строку между ними бесплатно, плюс один завершающий перевод строки.источник
Java (JDK 10) , 140 байт
Попробуйте онлайн!
Технически есть пустая строка, но она не пустая .
источник
Stax , 9 байт
Запустите и отладьте его
Это тот же алгоритм, что и в решении Luis 05AB1E
источник
MATL ,
1716 байтПопробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
источник
Excel VBA, 167 байт
Функция анонимного непосредственного окна VBE, которая берет входные данные из диапазона
[A1]
и выводит в непосредственное окно VBE.Ungolfed и комментируется
источник
Japt ,
3218 байтСохранено 14 байтов благодаря Shaggy!
Попробуйте онлайн!
источник