Faire un glaçon de mot


45

En raison des limitations techniques de Stack Exchange, le titre est mal interprété. Le titre correct pour ce défi est

Faire un

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

Le défi actuel est de faire des glaçons du mot d’entrée. Avec une chaîne d' ASCII entièrement imprimable et au moins deux caractères autres que des espaces, procédez comme suit:

  1. Affiche l'état actuel de la chaîne.

  2. Remplacez le caractère lexicalement le plus petit (autre que les espaces) par un espace. En cas d'égalité, remplacez le caractère le plus à gauche.

  3. Répétez l'opération sur des lignes consécutives jusqu'à ce que la chaîne ne contienne plus qu'un seul caractère.

Cela crée l'effet que la chaîne d'entrée a l'air de fondre ...

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      

Règles

  • Après quelques itérations, votre sortie aura presque certainement des espaces de fin sur chaque ligne. Si vous choisissez de les tronquer, cela est autorisé.

  • Vous pouvez avoir une dernière ligne vide, mais pas plus.

  • N'oubliez pas que l'entrée peut contenir plusieurs espaces, mais ceux-ci sont tous ignorés. Par exemple, l’entrée a adevrait donner

    a      a
           a
    
  • Vous pouvez prendre les entrées sous forme de liste de chaînes si vous le souhaitez. Pour la sortie, vous pouvez renvoyer ou imprimer une liste de chaînes, une seule chaîne avec des nouvelles lignes ou un tableau matriciel / 2D. En règle générale, je préfère les formats d'E / S permissifs. Par conséquent, d'autres formats sont probablement autorisés dans la mesure où ils sont cohérents et correspondent clairement à la sortie correcte. En cas de doute, n'hésitez pas à demander. Comme d'habitude, les programmes ou fonctions complets sont autorisés.

  • Rappelez-vous qu’il s’agit d’un concours pour la réponse la plus courte dans n’importe quelle langue! Si vous choisissez de répondre en Java, essayez de fournir la réponse Java la plus courte possible (en octets).

Cas de test

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        


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

({({})({}[()])}{})
 {({})({}[()])}{})
 { {})({}[()])}{})
 { {}) {}[()])}{})
 { {}) {}[ )])}{})
 { {}  {}[ )])}{})
 { {}  {}[  ])}{})
 { {}  {}[  ] }{})
 { {}  {}[  ] }{} 
 { {}  {}   ] }{} 
 { {}  {}     }{} 
   {}  {}     }{} 
    }  {}     }{} 
    }   }     }{} 
    }   }     } } 
        }     } } 
              } } 
                } 

1
"lexicalement le plus petit" signifie par point de code?
Giuseppe

1
@ Giuseppe Oui, le personnage avec le plus petit point de code ASCII (autre que l'espace, évidemment)
DJMcMayhem

2
Cela me rappelle un autre défi où nous devions, je pense, répéter verticalement un caractère par son index dans l’alphabet.
Shaggy

6
@Shaggy Vous songez probablement à faire de l'Alphabet Rain .
Rainbolt

2
Cette référence à MediaWiki cependant ...
Erik the Outgolfer

Réponses:



8

Retina , 28 octets

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

Essayez-le en ligne! Explication:

/\S/+

Répétez l'opération tant que la valeur d'entrée n'est pas vide.

¶<

Imprimer la valeur actuelle.

~(

Exécutez le reste du script sur la valeur. Ensuite, exécutez le résultat de ce script en tant que script sur la valeur.

O`.

Triez les caractères dans l'ordre.

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

Sélectionnez le premier caractère non vide et générez un programme Retina qui remplace la première $\occurrence literal ( ) de ce caractère ( $&) par un espace (espace de fin dans le code d'origine).


6

APL (Dyalog Unicode) , 18 à 11 octets

∪∘↓∘⍉⍋∘⍋⍴⌸⊢

Essayez-le en ligne!

utilise ⎕io←1; retourne un tableau de chaînes (vecteur de vecteurs de caractères)


Est-ce nécessaire?
Kritixi Lithos

@Cowsquack oui, sinon les premières lignes de la sortie pourraient être identiques
ngn

@Cowsquack merci, je n'ai pas remarqué cela
ngn

heureusement, la résolution de ce problème a conduit à une solution plus courte :)
ngn

Un bon, une utilisation vraiment intelligente de ⍋∘⍋:)
Kritixi Lithos

6

05AB1E , 9 octets

ðм{v=yð.;

Essayez-le en ligne!

Explication

ð      # 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

1
{ðKv=yð.;C'était à moi, gentil.
Urne Magique Octopus

@MagicOctopusUrn Heh, assez similaire
Luis Mendo

1
@MagicOctopusUrn En fait, il s'agirait toujours des mêmes 9 octets dans la dernière version de 05AB1E .. :remplace tous les caractères au lieu de ceux .;qui remplacent les premiers (c'est-à-dire, voyez ce que votre 7 octets fait avec !dans le scénario de test). En outre, le défi énonce explicitement l’exclusion des espaces, afin que votre 7 octets ne fonctionne pas pour une entrée comportant plusieurs espaces. PS: Bonne réponse, Luis! +1 de moi. :)
Kevin Cruijssen

1
@KevinCruijssen me laisse pour oublier pourquoi je devais utiliser .;en premier lieu. Je me souviens littéralement d'avoir lutté avec cela le 1er mai plus tôt cette année, maintenant que vous en parlez.
Urne Magique Octopus

1
@LuisMendo Eh bien, aucune des commandes que vous avez utilisées dans cette réponse n'a changé dans la réécriture Elixir de 05AB1E. :)
Kevin Cruijssen

5

Pyth, 17 14 13 octets

V-SQdQ=XQxQNd

Essayez ici

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.

5

sed -rn , 142 143 octets

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

Essayez-le en ligne!

(note: il y a des onglets dans le programme)

Sed n'ayant pas de concept d'ordre lexicographique, j'ai dû coder en dur l'ensemble des caractères imprimables ASCII et cela prend plus de la moitié du décompte.

L'utilisation de sed 4.2.2 réduira le nombre de compteurs de 2, car cela permet d'utiliser des étiquettes sans nom. Essayez-le en ligne!


-r active les expressions régulières étendues (golfier)

-n désactive l'impression implicite de l'espace de modèle à la fin du programme

L'espace motif commence par l'entrée

:alabel a, ceci est la boucle principale du programme

p affiche l'espace du motif (nom de fantaisie pour le tampon)

maintenant nous ajoutons le jeu de caractères imprimables ASCII (en excluant l'espace)

s/$/ ABCDEFGHIJKLMNOPQRSTUVWXYZ/ ajoute un onglet, faisant office de délimiteur d'1 octet, suivi de l'alphabet majuscule

s<tab>substitute (sed peut prendre n’importe quel caractère comme délimiteur, dans ce cas, la tabulation sert à empêcher un octet d’échapper de la /)

  • \w+$ l'alphabet majuscule que nous venons d'ajouter

  • <tab> avec

  • !"#$%\&'()*+,-./0123456789:;<=>?@&[\\]^_\`\L&{|}~<tab>le reste des caractères, notez qu'il \L&s'agit de la version minuscule de l'alphabet majuscule

:blabel b, supprime les caractères du début qui ne sont pas présents en entrée

/(.).* \1/! si le premier caractère du jeu ASCII n'est pas dans l'entrée

  • s/ ./ / l'enlever

tbrépéter bjusqu'à ce que la substitution échoue

s/(.)(.*) \1.*/ \2/ remplace le premier caractère du jeu ASCII présent dans l'entrée par un espace et supprime le jeu ASCII

ta récidive


Une correspondance non gourmande aurait été vraiment utile ici, mais j'ai été capable de trouver quelque chose qui soit sedassez dupe pour économiser au moins 4 octets: Essayez-le en ligne!
Neil

(Le charlatan des vaches a fait remarquer que je ne pouvais que partiellement tromper Sed, car je supprime les caractères identiques dans le mauvais ordre.)
Neil


4

R , 140 à 100 octets

-40 octets Merci à Giuseppe!

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

Essayez-le en ligne!

Une solution utilisant outerla magie de Giuseppe pour fonctionner correctement est plus longue à 104 octets. Inspiré par cette réponse .

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

Essayez-le en ligne!


109 octets prenant comme vecteur de caractères
Giuseppe

1
100 octets prenant l'entrée comme une chaîne!
Giuseppe

Encore une très belle réponse; le mien avait grimpé à plus de 200 octets puisque je ne m'en souvenais plus rank!
Giuseppe

@ Giuseppe Parlez-moi - j'ai d'abord essayé "ordre" pour un résultat qui fondait mais pas dans le bon ordre!
JayCe

@ Giuseppe et ma tentative d'utilisation d'extérieur inspiré par votre message ont seulement réussi à supprimer tous les espaces. TIO J'aimerais beaucoup voir une approche externe qui fonctionne bien faire l’objet d’une réponse distincte. J'y travaille encore mais ce n'est peut-être pas si élégant
JayCe

3

Python 3 , 71 octets

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

Essayez-le en ligne!

-4 octets grâce aux ovs


Économisez 2 octets en utilisant *bool({*a}-{" "})au lieu deif{*a}-{" "}else[a]
RootTwo

@RootTwo cela ne donnerait-il pas un RecursionError?
Ovs

@RootTwo if/elseraccourcis mais *boolne fonctionne pas, alors oui, l'erreur de récursion comme dit
ovs

Bien sûr, tu as raison. À cause d'un bogue, ma fonction a été récursive en appelant votre fonction afin qu'elle semble fonctionner.
RootTwo

3

Python 2 , 70 69 66 64 octets

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

Essayez-le en ligne!

Thx pour 2 octets à partir de ovs via using S and f()au lieu deif S:f()


Vous ...If there is a tie, replace the leftmost character...manquez la règle, vous pouvez résoudre ce problème avecreplace(min(...),' ',1)
Rod

@Rod: Ah! J'ai compris ...
Chas Brown

3

Gelée , 8 octets

ẋ"ỤỤ$z⁶Q

Essayez-le en ligne!

Idée

L'idée de base est de créer directement les colonnes de la sortie souhaitée, au lieu de manipuler la chaîne et de renvoyer tous les résultats intermédiaires.

Nous commençons par numéroter les caractères de la chaîne d'entrée dans l'ordre dans lequel ils seront supprimés. Pour le moment, nous allons prétendre que les espaces seront également supprimés.

tee ay oh
845139276

Maintenant, nous construisons les colonnes en répétant chaque caractère par son index dans cette énumération.

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   

Tout ce qui reste à faire est de supprimer les doublons, pour tenir compte des espaces.

Code

ẋ"ỤỤ$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.

3

Perl 5 -n , 37 34 octets

Oubli de trois octets avec l'aide de @TonHospel

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

Essayez-le en ligne!


Ah, très gentil, beaucoup plus belle approche! Je pense que vous avez besoin du \Qbien pour le dernier cas de test .... J'ai raté ça aussi la première fois!
Dom Hastings

Tu as raison. L'a ajouté.
Xcali

Shorter: say&&s/\Q$a/ / while($a)=sort/\S/g. 0
Traverse

3

JavaScript, 67 66 65 octets

Parce que je n'ai pas joué au golf saoul depuis un moment!

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

Essayez-le en ligne

Merci à DanielIndie pour avoir signalé 4 octets redondants que la bière est incluse!


pourquoi spécifiez-vous y sur la carte? : P peut être fait 67
DanielIndie

@ DanielIndie, parce que de la bière! : D Merci de l'avoir signalé.
Shaggy

oui, je pensais que ce serait le cas: P
DanielIndie

3

K (ngn / k) , 26 à 24 octets

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

Essayez-le en ligne!


Beau! Ma tentative K est arrivée à 41: `{. [X; (- 1 + # x) & x? _Ci & / _ ic x _dv" ";:;" "]}` Je gaspille des octets lors de la conversion en ints et retour et en faisant bien sûr, il ne sort pas des limites.
Uryga

@uryga Merci. Si j'avais correctement mis en œuvre les projections, cela {@[x;y;:;" "]}aurait pu être le cas @[;;:;" "]. Quelle version de k utilisez-vous? Je ne suis pas au courant de ces: _ci _ic _dv.
NDG

Je pense que c'est 2.8-ish? J'utilise l'interpréteur Kona qui fournit aux opérateurs des fonctions intégrées: char-of-int, int-of-char, delete-value.
Uryga

2

C # (compilateur interactif Visual C #) , 129 octets

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," ");}

Essayez-le en ligne!


c!=32peut être c>32; c==32peut être c<33; et (char)999peut être '¡'(ou tout autre caractère au-dessus de la plage imprimable Unicode ASCII).
Kevin Cruijssen le

Oh, et vous pouvez enregistrer deux autres octets changer le whilepour foret en plaçant le var s=ReadLine()et à l' s=s.Remove(i,1).Insert(i," ")intérieur ( de sorte que les deux points-virgules ne sont plus nécessaires).
Kevin Cruijssen le


2

Haskell , 67 octets

12 octets sauvés grâce à Laikoni

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

Essayez-le en ligne!

Celui-ci se termine par une erreur

Haskell , 83 79 octets

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

Essayez-le en ligne!

Celui-ci se termine par une erreur

Haskell , 86 octets

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

Essayez-le en ligne!

Haskell , 100 91 88 octets

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

Essayez-le en ligne!


67 octets: f s|(a,_:b)<-span(/=minimum(id=<<words s))s=putStrLn s>>f(a++' ':b) essayez-le en ligne!
Laikoni

@Laikoni Merci! J'étais juste au bord de quelque chose comme ça et je me suis endormi. Cependant, je ne pense pas que j'aurais trouvé id=<<cela assez malin
Wheat Wizard


2

K4 , 28 20 18 octets

Solution:

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

Exemple:

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        "
"               "

Explication:

C'est la même chose que Ngn . Recherchez les index qui donneraient une liste ascendante, écrasez-les un par un " ", puis supprimez-les pour supprimer les lignes en double:

?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

2

gcc 32 bits, 66 65 octets

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);}

Merci à Jonathan Frech pour -1 octet


*p==i?...:0;pourrait probablement être *p-i?0:...;.
Jonathan Frech

@ JonathanFrech Non, c'est 1 octet de plus ( *p-1||(...)même longueur)
l4m2

Désolé, je n'ai pas reconnu l'importance de conserver l'expression de la virgule. Cependant, cela pourrait être 65 octets . Je ne sais pas non plus comment f(a)compiler, ce qui adevrait être de type char*, mais je suppose que cela a quelque chose à voir avec votre utilisation de gcc 32 bits.
Jonathan Frech

@ JonathanFrech Je pense que char*p,i;f(long long a){for(i=31;++i;)for(p=a;*p;)*p==i?puts(a),*p=32:++p;}sur tio (64bit) peut expliquer comment f(a)fonctionne le travail
l4m2

Je suis désolé, mais j’ai interrogé le responsable opérationnel sur les spécifications du défi et ils ont dit que la chaîne de saisie pouvait commencer par un espace. Par conséquent, ma solution proposée n'est pas valide (car une telle entrée entraîne une boucle infinie) et vous devriez probablement revenir à votre solution d'origine.
Jonathan Frech

2

MATLAB, 74 octets

Ceci utilise la forme à 2 sorties de la fonction max () pour récupérer le plus petit caractère et son index, après avoir transformé la chaîne en valeurs zéro dans les espaces et en 256 la valeur des caractères imprimables.

s=input('s');x=1;while(x);disp(s);[x,y]=max((256-s).*(s~=' '));s(y)=' ';end

1
Bienvenue chez PPCG! Bon travail!
AJFaraday

2

Common Lisp , 240 228 224 octets

(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))))

Essayez-le en ligne!

C'est ma première publication.
Je suis en train d’apprendre à respirer, alors je suis sûr que quelqu'un peut penser à quelque chose de plus court.


1
Bienvenue sur le site! C'est bien de voir un lisp commun!
Wheat Wizard

1

APL (Dyalog Unicode) , SBCS de 39 octets

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

Essayez-le en ligne!

Dfn.

Comment?

{⎕←⍵⋄×≢⍵∩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.

1

V , 27 octets

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

Essayez-le en ligne!

Hexdump:

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

1

PowerShell , 103 à 99 octets

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

Essayez-le en ligne!

Prend l'entrée sous forme de chaîne dans $a. Nous passons ensuite de 2à $a.length(c.- à -d. Le nombre approprié de temps verticaux nécessaires pour supprimer tous les caractères sauf un). À chaque itération, nous sortons la chaîne en $xcours dans laquelle nous enregistrons de manière pratique en même temps. Ensuite , nous avons construit un nouvel [regex]objet, $pattern constitué par les caractères restants en $ace que sont -not eQual à l' espace, sorted, alors la 0ième de celle - ci.

Nous définissons ensuite $aégal à une nouvelle chaîne de l'objet regex avec la .Replaceméthode à remplacer dans la chaîne $x, $pattern, par un espace " ", mais uniquement la première 1correspondance. Oui, cette syntaxe est bizarre.

Les chaînes sont laissées sur le pipeline et implicitement Write-Outputnous donne une nouvelle ligne entre elles gratuitement, plus une nouvelle ligne.




1

MATL , 17 16 octets

tSXz"tOy@=f1)(]x

Essayez-le en ligne! Ou vérifiez tous les cas de test .

Explication

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

1

Excel VBA, 167 octets

Une fonction de fenêtre immédiate VBE anonyme qui prend les entrées de la plage [A1]et les envoie à la fenêtre immédiate 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

Ungolfed and Commented

''  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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.