Stwórz sopel słowa

45

Ze względu na ograniczenia techniczne stosu wymiany, tytuł jest renderowany niepoprawnie. Poprawny tytuł na to wyzwanie jest

Zrobić

Word Icicle!
Word Icicle 
Word  cicle 
 ord  cicle 
 ord   icle 
 ord   i le 
 or    i le 
 or    i l  
 or      l  
 or         
  r         

Dzisiejsze wyzwanie polega na tworzeniu sopli ze słowa wejściowego. Biorąc pod uwagę ciąg w całości drukowalnego ASCII i co najmniej 2 znaki spacji, wykonaj następujące czynności:

  1. Wydrukuj bieżący stan ciągu.

  2. Zastąp najmniejszy leksykalnie znak (inny niż spacje) spacją. Jeśli jest remis, zamień lewą postać.

  3. Powtarzaj w kolejnych wierszach, aż łańcuch będzie zawierał tylko 1 znak spacji.

To powoduje, że ciąg wejściowy wygląda tak, jakby się topił ...

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      

Zasady

  • Po kilku iteracjach, twój wynik prawie na pewno będzie zawierał końcowe spacje w każdej linii. Jeśli zdecydujesz się je obciąć, jest to dozwolone.

  • Możesz mieć jedną końcową pustą linię, ale nie więcej.

  • Pamiętaj, że dane wejściowe mogą zawierać kilka spacji, ale wszystkie są skutecznie pomijane. Na przykład dane wejściowe a apowinny dać

    a      a
           a
    
  • Możesz wziąć dane wejściowe jako listę ciągów, jeśli chcesz. W celu uzyskania wyników możesz zwrócić lub wydrukować listę ciągów, pojedynczy ciąg z znakami nowej linii lub macierz znaków / tablicę 2D. Zasadniczo preferuję dopuszczalne formaty We / Wy, więc inne formaty są najprawdopodobniej dozwolone, o ile są spójne i wyraźnie odpowiadają prawidłowemu wynikowi. W razie wątpliwości możesz zapytać. Jak zwykle dozwolone są pełne programy lub funkcje.

  • Pamiętaj, że jest to konkurs na najkrótszą odpowiedź w dowolnym języku! Jeśli zdecydujesz się na odpowiedź w Javie, spróbuj uzyskać najkrótszą możliwą odpowiedź Java (w bajtach).

Przypadki testowe

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        


({({})({}[()])}{}) -->

({({})({}[()])}{})
 {({})({}[()])}{})
 { {})({}[()])}{})
 { {}) {}[()])}{})
 { {}) {}[ )])}{})
 { {}  {}[ )])}{})
 { {}  {}[  ])}{})
 { {}  {}[  ] }{})
 { {}  {}[  ] }{} 
 { {}  {}   ] }{} 
 { {}  {}     }{} 
   {}  {}     }{} 
    }  {}     }{} 
    }   }     }{} 
    }   }     } } 
        }     } } 
              } } 
                } 
DJMcMayhem
źródło
1
„najmniejszy leksykalnie” oznacza punkt kodowy?
Giuseppe,
1
@Giuseppe Tak, znak z najmniejszym punktem kodowym ASCII (oczywiście innym niż spacja)
DJMcMayhem
2
Przypomina mi inne wyzwanie, w którym, jak sądzę, musieliśmy powtórzyć znak w pionie według jego indeksu w alfabecie.
Kudłaty
6
@Shaggy Prawdopodobnie myślisz o Make a Alphabet Rain .
Rainbolt
2
To odniesienie do MediaWiki ...
Erik the Outgolfer

Odpowiedzi:

8

Siatkówka , 28 bajtów

/\S/+¶<~(O`.
0L$`\S
0`$\$&¶ 

Wypróbuj online! Wyjaśnienie:

/\S/+

Powtarzaj, gdy wartość wejściowa nie jest pusta.

¶<

Wydrukuj bieżącą wartość.

~(

Wykonaj resztę skryptu dla wartości. Następnie wykonaj wynik tego skryptu jako skrypt wartości.

O`.

Sortuj znaki w kolejności.

0L$`\S
0`$\$&¶ 

Wybierz pierwszy niepusty znak i wypisz program Retina, który zastępuje pierwsze $\wystąpienie literału ( ) tego znaku ( $&) spacją (spacja w kodzie oryginalnym).

Neil
źródło
6

APL (Dyalog Unicode) , 18 11 bajtów

∪∘↓∘⍉⍋∘⍋⍴⌸⊢

Wypróbuj online!

zastosowania ⎕io←1; zwraca tablicę ciągów (wektor wektorów znaków)

ngn
źródło
Czy to konieczne?
Kritixi Lithos
@ Cowsquack tak, w przeciwnym razie pierwsze kilka wierszy danych wyjściowych może być identycznych
ngn
@Cowsquack dzięki, nie zauważyłem tego
ngn
na szczęście naprawienie tego doprowadziło do krótszego rozwiązania :)
ngn
Fajne, naprawdę sprytne użycie ⍋∘⍋:)
Kritixi Lithos
6

05AB1E , 9 bajtów

ðм{v=yð.;

Wypróbuj online!

Wyjaśnienie

ð      # Push space
м      # Implicit input. Remove spaces
{      # Sort. Gives string of sorted, non-space chars
v      # For each char in that string
  =    #   Print latest string, without popping. The first time it prints the input
  y    #   Push current char
  ð    #   Push space
  .;   #   Replace first occurrence of current char by space
       # Implicitly end for-each loop
Luis Mendo
źródło
1
{ðKv=yð.;był mój, miły.
Magic Octopus Urn
@MagicOctopusUrn Heh, całkiem podobne
Luis Mendo
1
@MagicOctopusUrn W rzeczywistości w najnowszej wersji 05AB1E nadal byłyby takie same 9 bajtów. :Zastępuje wszystkie znaki zamiast tego, .;który zastępuje pierwszy (tzn. Zobacz, co robi twój 7-bajter !w przypadku w przypadku testowym). Ponadto wyzwanie wyraźnie stwierdza wykluczenie spacji, więc twój 7-bajtowy nie działałby dla danych wejściowych z wieloma spacjami. PS: Dobra odpowiedź, Luis! +1 ode mnie :)
Kevin Cruijssen
1
@KevinCruijssen zostaw mnie, aby zapomnieć, dlaczego musiałem użyć .;w pierwszej kolejności. Dosłownie pamiętam, jak się z tym zmagałem 1 maja wcześniej w tym roku, skoro o tym wspomniałeś.
Magic Octopus Urn
1
@LuisMendo Cóż, żadne z poleceń użytych w tej odpowiedzi nie zmieniło się w przepisywaniu Elixir 05AB1E. :)
Kevin Cruijssen
5

Pyth, 17 14 13 bajtów

V-SQdQ=XQxQNd

Wypróbuj tutaj

V-SQdQ=XQxQNd
V-SQd              For each non-space character in the sorted input (Q)...
     Q             ... print the current value of Q...
      = Q          ... and set Q to itself...
         xQN       ... with the first instance of the character...
       X    d      ... replaced by a space.
Mnemoniczny
źródło
5

sed -rn , 142 143 bajty

:a
p
s/$/	ABCDEFGHIJKLMNOPQRSTUVWXYZ/
s	\w+$	!"#$%\&'()*+,-./0123456789:;<=>?@&[\\]^_`\L&{|}~	
:b
/(.).*	\1/!s/	./	/
tb
s/(.)(.*)	\1.*/ \2/
ta

Wypróbuj online!

(uwaga: w programie są zakładki)

Ponieważ sed nie ma pojęcia o porządku leksykograficznym, musiałem zakodować na stałe zestaw drukowalnych znaków ASCII i zajmuje to ponad połowę bajtu.

Użycie sed 4.2.2 zmniejszy liczbę bajtów o 2, ponieważ pozwala to na nienazwane etykiety. Wypróbuj online!


-r włącza rozszerzone wyrażenia regularne (golfier)

-n wyłącza niejawne drukowanie przestrzeni wzorów na końcu programu

Przestrzeń wzorów zaczyna się od danych wejściowych

:aetykieta a, to jest główna pętla programu

p wydrukuj przestrzeń wzoru (fantazyjna nazwa bufora)

teraz dołączamy zestaw drukowalnych znaków ASCII (bez spacji)

s/$/ ABCDEFGHIJKLMNOPQRSTUVWXYZ/ dodaj tabulator, działający jak 1-bajtowy separator, a następnie wielkie litery

s<tab>zamiennik (sed może przyjmować dowolny znak jako separator, w tym przypadku karta służy do zapisania bajtu przed ucieczką /)

  • \w+$ właśnie dodany duży alfabet

  • <tab> z

  • !"#$%\&'()*+,-./0123456789:;<=>?@&[\\]^_\`\L&{|}~<tab>reszta znaków, zwróć uwagę, że \L&jest to mała wersja alfabetu

:betykieta b, usuń znaki z zestawu początkowego, których nie ma na wejściu

/(.).* \1/! jeśli pierwszy znak z zestawu ASCII nie znajduje się na wejściu

  • s/ ./ / usunąć to

tbpowtarzaj, bdopóki podstawienie nie powiedzie się

s/(.)(.*) \1.*/ \2/ zamień pierwszy znak w zestawie ASCII obecnym na wejściu spacją i usuń zestaw ASCII

ta powrócić

Kritixi Lithos
źródło
Nie chciwe dopasowanie byłoby tutaj bardzo pomocne, ale udało mi się wymyślić coś, co oszukało sedwystarczająco dużo, aby zaoszczędzić co najmniej 4 bajty: Wypróbuj online!
Neil
(Kwak krakowy zauważył, że tylko częściowo mogłem oszukać sed, ponieważ usuwam identyczne postacie w niewłaściwej kolejności.)
Neil
4

Rubinowy , 60 58 55 47 bajtów

->a{[-a]+a.scan(/\S/).sort.map{|x|a[x]=' ';-a}}

Wypróbuj online!

Kirill L.
źródło
Możesz zamienić a-b=[' ']i a-bna szybkie -2 bajty
benj2240
Tak, dziękuję za to, ale teraz nieco zmieniłem podejście, więc nie jest już używane.
Kirill L.
Podoba mi się nowe podejście!
benj2240
4

R , 140 100 bajtów

-40 bajtów Dzięki Giuseppe!

function(x)for(i in any((z=utf8ToInt(x))<33):max(y<-rank(z,,"f"))){z[y==i]=32
cat(intToUtf8(z),"
")}

Wypróbuj online!

Rozwiązanie wykorzystujące outeri magię Giuseppe do prawidłowego działania jest dłuższe i ma 104 bajty. Zainspirowany tą odpowiedzią .

function(x,z=utf8ToInt(x)-32)apply(t(outer(rank(z,,"f"),(2-(min(z)>0)):nchar(x),">=")*z+32),1,intToUtf8)

Wypróbuj online!

JayCe
źródło
109 bajtów przyjmujących dane wejściowe jako wektor znaków
Giuseppe
1
100 bajtów przyjmujących dane wejściowe jako ciąg znaków!
Giuseppe,
Mimo to bardzo ładna odpowiedź; mój wzniósł balon do ponad 200 bajtów, ponieważ nie pamiętałem o nim rank!
Giuseppe,
@Giuseppe Powiedz mi o tym - najpierw spróbowałem „zamówić”, aby uzyskać wynik, który topił się, ale nie we właściwej kolejności!
JayCe
@Giuseppe i moja próba użycia zewnętrznego zainspirowanego Twoim postem zdołały tylko usunąć wszystkie spacje. TIO Chciałbym zobaczyć działające podejście zewnętrzne opublikowane jako osobną odpowiedź. Nadal nad tym pracuję, ale może nie być tak elegancki.
JayCe
3

Python 3 , 71 bajtów

f=lambda a:[*a.strip()]and[a]+f(a.replace(min(a.replace(*" ~"))," ",1))

Wypróbuj online!

-4 bajty dzięki ovs

HyperNeutrino
źródło
Zaoszczędź 2 bajty, używając *bool({*a}-{" "})zamiastif{*a}-{" "}else[a]
RootTwo
@RootTwo nie dałoby w wyniku RecursionError?
ovs
@RootTwo if/elseskróty, ale *boolnie ma, więc tak, rekursorerror jak ovs powiedział
HyperNeutrino 14.04.18
Oczywiście masz rację. Z powodu błędu moja funkcja pojawiła się ponownie, wywołując twoją funkcję, więc wyglądało na to, że działa.
RootTwo
3

Python 2 , 70 69 66 64 bajtów

def f(s):print s;S=set(s)-{' '};S and f(s.replace(min(S),' ',1))

Wypróbuj online!

Dzięki za 2 bajty z ovs za pomocą S and f()zamiast zamiastif S:f()

Chas Brown
źródło
Brakuje ...If there is a tie, replace the leftmost character...Ci reguły, możesz to naprawić za pomocąreplace(min(...),' ',1)
Rod
@Rod: Ah! Rozumiem ...
Chas Brown,
3

Galaretka , 8 bajtów

ẋ"ỤỤ$z⁶Q

Wypróbuj online!

Pomysł

Podstawową ideą jest bezpośrednie budowanie kolumn żądanego wyniku, zamiast manipulowania ciągiem i zwracania wszystkich wyników pośrednich.

Zaczynamy od numerowania znaków ciągu wejściowego w kolejności, w której zostaną usunięte. Na razie będziemy udawać, że spacje również zostaną usunięte.

tee ay oh
845139276

Teraz budujemy kolumny, powtarzając każdy znak według jego indeksu w tym wyliczeniu.

tee ay oh
tee ay oh
tee ay oh
tee  y oh
t e  y oh
t    y oh
t    y o 
t    y   
     y   

Pozostało tylko usunąć duplikaty, aby uwzględnić spacje.

Kod

ẋ"ỤỤ$z⁶Q  Main link. Argument: s (string)

    $     Combine the two links to the left into a chain.
  Ụ       Grade up; sort the indices of s by their corresponding values.
          Let's call the result J.
          Grade up again, sorting the indices of J by the corr. values in J.
          This enumerates the positions of s as described before.
ẋ"        Repeat each character of s that many times.
     z⁶   Zip the resulting 2D array, filling missing characters with spaces.
       Q  Unique; deduplicate the array of rows.
Dennis
źródło
3

Perl 5 -n , 37 34 bajtów

Usunięto trzy bajty z pomocą @TonHospel

say&&s/\Q$a/ / while($a)=sort/\S/g

Wypróbuj online!

Xcali
źródło
Ach, bardzo miłe, znacznie ładniejsze podejście! Myślę, że potrzebujesz \Qtego w ostatnim przypadku testowym .... Tęskniłem też za pierwszym razem!
Dom Hastings
Masz rację. Dodano to.
Xcali
Krótszy: say&&s/\Q$a/ / while($a)=sort/\S/g. Również poprawnie obsługuje0
Ton Hospel
3

JavaScript, 67 66 65 bajtów

Ponieważ od dawna nie grałem w golfa!

s=>[...t=s].sort().map(x=>x>` `?t+=`
${s=s.replace(x,` `)}`:0)&&t

Wypróbuj online

Dzięki DanielIndie za wskazanie 4 zbędnych bajtów, w tym piwo!

Kudłaty
źródło
dlaczego podajesz y na mapie? : P można zrobić 67
DanielIndie
@DanielIndie, ponieważ piwo! : D Dziękujemy za zwrócenie na to uwagi.
Kudłaty
tak, myślałem, że tak będzie: P
DanielIndie
3

K (ngn / k) , 26 24 bajtów

{?(,x),x{x[y]:" ";x}\<x}

Wypróbuj online!

ngn
źródło
Piękny! Moja próba K nadeszła o godzinie 41: `{. [X; (- 1 + # x) & x? _Ci & / _ ic x _dv" ";:;" "]}` `Marnuję bajty konwertując na ints i wstecz i robiąc na pewno nie wykracza poza granice.
uryga
@uryga Dzięki. Gdybym prawidłowo zaimplementował prognozy, {@[x;y;:;" "]}mogłoby być @[;;:;" "]. Z jakiej wersji k korzystasz? Nie jestem zaznajomiony z nich: _ci _ic _dv.
ngn
Myślę, że to 2.8? Korzystam z interpretera Kona, który udostępnia operatory jako wbudowane: char-of-int, int-of-char, delete-value.
uryga
2

C # (interaktywny kompilator Visual C #) , 129 bajtów

var s=ReadLine();while(s.Any(c=>c!=32)){WriteLine(s);var i=s.IndexOf(s.Min(c=>c==32?(char)999:c));s=s.Remove(i,1).Insert(i," ");}

Wypróbuj online!

Pavel
źródło
c!=32może być c>32; c==32może być c<33; i (char)999może być '¡'(lub dowolnym innym znakiem powyżej drukowanego zakresu Unicode ASCII).
Kevin Cruijssen
Aha, i można zaoszczędzić jeszcze dwa bajty zmieniając whilesię fori umieszczenie var s=ReadLine()i s=s.Remove(i,1).Insert(i," ")wewnątrz niego (tak dwa średniki nie są już potrzebne).
Kevin Cruijssen
2

Haskell , 67 bajtów

12 bajtów zaoszczędzonych dzięki Laikoni

f s|(a,_:b)<-span(/=minimum(id=<<words s))s=putStrLn s>>f(a++' ':b)

Wypróbuj online!

Ten kończy się błędem

Haskell , 83 79 bajtów

g(a,_:b)=a++' ':b
mapM_ putStrLn.(iterate$g.(span=<<(/=).minimum.concat.words))

Wypróbuj online!

Ten kończy się błędem

Haskell , 86 bajtów

u=concat.words
g(a,_:b)=a++' ':b
(take.length.u)<*>(iterate$g.(span=<<(/=).minimum.u))

Wypróbuj online!

Haskell , 100 91 88 bajtów

u=concat.words
f x|(a,_:b)<-span(/=minimum(u x))x=a++' ':b
(take.length.u)<*>(iterate f)

Wypróbuj online!

Kreator pszenicy
źródło
67 bajtów: f s|(a,_:b)<-span(/=minimum(id=<<words s))s=putStrLn s>>f(a++' ':b) Wypróbuj online!
Laikoni
@Laikoni Thanks! Byłem na granicy czegoś takiego i zasnąłem. Jednak nie sądzę, żebym wymyślił id=<<to całkiem sprytne
Wheat Wizard
2

JavaScript (Node.js) , 80 65 bajtów

x=>[...x].sort().map(c=>x=x.replace(c,' ',c>' '&&console.log(x)))

Wypróbuj online!

Nie wiedziałem, replaceże ciąg należy traktować jako ciąg, a nie wyrażenie regularne

l4m2
źródło
2

K4 , 28 20 18 bajtów

Rozwiązanie:

?x{x[y]:" ";x}\<x:

Przykład:

q)k)?x{x[y]:" ";x}\<x:"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        "
"               "

Wyjaśnienie:

To to samo, co robi ngn . Znajdź indeksy, które spowodowałyby rosnącą listę, nadpisuj je jeden po drugim " ", a następnie usuń wszelkie duplikaty wierszy:

?x{x[y]:" ";x}\<x: / the solution
                x: / save input as x
               <   / return indices that would result in ascending sort
 x{        ; }\    / two-line lambda with scan
        " "        / whitespace
       :           / assignment
   x[y]            / x at index y
            x      / return x
?                  / distinct
streetster
źródło
2

gcc 32-bit, 66 65 bajtów

char*p,i;f(a){for(i=32;i++;)for(p=a;*p;)*p==i?puts(a),*p=32:++p;}
main(){char s[]="3.1415926";f(s);}

Dzięki za Jonathan Frech za -1 bajt

l4m2
źródło
*p==i?...:0;prawdopodobnie może być *p-i?0:...;.
Jonathan Frech,
@JonathanFrech Nie, jest o 1 bajt dłuższy (choć *p-1||(...)ma taką samą długość)
l4m2
Przepraszamy, nie dostrzegłem znaczenia zachowania razem przecinka. Jednak może to być 65 bajtów . Nie wiem też, jak się f(a)kompiluje, jak apowinno być typu char*, ale zakładam, że ma to coś wspólnego z 32-bitowym użyciem gcc.
Jonathan Frech
@JonathanFrech Myślę, że char*p,i;f(long long a){for(i=31;++i;)for(p=a;*p;)*p==i?puts(a),*p=32:++p;}tio (64f(a)
bitowy
Przykro mi, ale zapytałem OP o specyfikację wyzwania, a oni powiedzieli, że ciąg wejściowy może zaczynać się spacją. Dlatego moje proponowane rozwiązanie jest nieprawidłowe (ponieważ takie dane wejściowe powodują nieskończoną pętlę) i najprawdopodobniej powinieneś powrócić do pierwotnego rozwiązania.
Jonathan Frech
2

MATLAB, 74 bajty

Wykorzystuje 2-wyjściową postać funkcji max () do pobrania najmniejszego znaku i jego indeksu, po przekształceniu ciągu na wartości zerowe w spacjach i 256-znakową wartość dla znaków do wydrukowania.

s=input('s');x=1;while(x);disp(s);[x,y]=max((256-s).*(s~=' '));s(y)=' ';end
Richard
źródło
1
Witamy w PPCG! Dobra robota!
AJFaraday
2

Common Lisp , 240 228 224 bajtów

(setf s(read))(defun f(x)(setf y(char-code(elt s x)))(if(= y 32)1e9 y))(loop for _ across s do(print s)do(setf s(replace s" ":start1(position(code-char(reduce #'min (loop for i from 0 below(length s)collect i):key #'f))s))))

Wypróbuj online!

To mój pierwszy post.
Jestem w trakcie nauki seplenienia, więc jestem pewien, że ktoś może wymyślić coś krótszego niż to.

JoshM
źródło
1
Witamy na stronie! Dobrze widzieć wspólne seplenienie!
Kreator pszenicy
1

APL (Dyalog Unicode) , 39 bajtów SBCS

{⎕←⍵⋄×≢⍵∩g' '~⍨⎕UCS256:∇' '@(⊃g⍋⍵)⊢⍵}

Wypróbuj online!

Dfn.

W jaki sposób?

{⎕←⍵⋄×≢⍵∩g' '~⍨⎕UCS256:∇' '@(⊃g⍋⍵)⊢⍵}  Main function, argument 
 ⎕←⍵⋄                                     Print 
         g' '~⍨⎕UCS256                  Assign to g every Unicode character except space
     ×≢⍵∩                :                If ⍵∩g is not empty
                                         Recursively call the function with argument:
                           ' '@          Space at
                               (⊃g⍋⍵)     The first (⊃) element in  graded up (⍋) with g
                                          The dyadic grade up function will index  according
                                          to its left argument, in this case g.
J. Sallé
źródło
1

V , 27 bajtów

>>ò2Ùúú^lDhrfDj|@"r kdòdj<H

Wypróbuj online!

Hexdump:

00000000: 3e3e f232 d9fa fa5e 6c44 6872 6644 6a7c  >>.2...^lDhrfDj|
00000010: 4022 7220 6b64 f264 6a3c 48              @"r kd.dj<H
DJMcMayhem
źródło
1

PowerShell , 103 99 bajtów

param($a)2..$a.length|%{($x=$a);[regex]$p=""+([char[]]$a-ne' '|sort)[0];$a=($p.replace($x," ", 1))}

Wypróbuj online!

Pobiera dane wejściowe jako ciąg znaków do $a. Następnie zapętlamy od 2do $a.length(tj. Odpowiednią liczbę pionowych czasów potrzebnych do usunięcia wszystkich znaków oprócz jednego). W każdej iteracji generujemy bieżący ciąg i wygodnie zapisujemy go $xw tym samym czasie. Następnie konstruowania nowego [regex]obiektu $pattern składający się z pozostałych znaków $a, które są -nOT equal do przestrzeni, sorted, wówczas 0XX jego drugim.

Następnie ustawiamy $arówność nowego łańcucha obiektu wyrażenia regularnego za pomocą .Replacemetody zamiany ciągu $x, $patrybutu, spacją " ", ale tylko 1pasowaniem st. Tak, ta składnia jest dziwna.

Ciągi są pozostawione w potoku i domyślnie Write-Outputdaje nam nową linię między nimi za darmo, plus jedną końcową nową linię.

AdmBorkBork
źródło
1

Java (JDK 10) , 140 bajtów

s->{for(int m=1,i;m>0;s=s.substring(0,i=s.indexOf(m=s.chars().filter(c->c>32).min().orElse(0)))+" "+s.substring(i+1))System.out.println(s);}

Wypróbuj online!

Technicznie jest pusta linia, ale nie jest pusta .

Olivier Grégoire
źródło
1

MATL , 17 16 bajtów

tSXz"tOy@=f1)(]x

Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .

Wyjaśnienie

t       % Implicit input. Duplicate
S       % Sort
Xz      % Remove spaces
"       % For each char in that string
  t     %   Duplicate last result. This is the most recent string obtained
        %   from replacing chars by spaces in the input
  O     %   Push 0
  y     %   Duplicate from below
  @     %   Push current char
  =     %   Equals? (element-wise) Gives 1 for occurrences of current char
        %   in the most recent string, 0 otherwise
  f     %   Indices of nonzeros
  1)    %   Get the first entry
  (     %   Write 0 at that position. Char 0 will be displayed as space
]       % End
x       % Delete last result, which consists only of space / char zero
Luis Mendo
źródło
1

Excel VBA, 167 bajtów

Anonimowa funkcja bezpośredniego okna VBE, która przenosi dane wejściowe z zakresu [A1]i wyjścia do bezpośredniego okna VBE.

s="Code(Mid(A$1,Row(),1))":[B1].Resize([Len(A1)])="=If("&s &"=32,1E3,"&s &")":For i=1To[Len(A1)-CountIf(B:B,1E3)]:?[A1]:[A1]=[Substitute(A1,Char(Min(B:B))," ",1)]:Next

Niegolfowany i komentowany

''  run as `call icicle("Test")` or `icicle"I am the WALRUS`
Sub icicle(Optional str As String)
    If Not IsMissing(str) Then [A1] = str   ''  pipe input
    [B:B].Clear                             ''  reset between runs
    [B1].Resize([Len(A1)]) = "=If(Code(Mid(A$1,Row(),1))=32,1E3,Code(Mid(A$1,Row(),1)))"  ''  get char number for every char in input
    For i = 1 To [Len(A1)-CountIf(B:B,1E3)] ''  iterate across from 1 to length of input - number of spaces
        Debug.Print [A1]                    ''  output a single line
        [A1]=[Substitute(A1,Char(Min(B:B))," ",1)]  ''  replace minimum char with space
    Next
End Sub
Taylor Scott
źródło