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:
Affiche l'état actuel de la chaîne.
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.
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 a
devrait donnera 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
({({})({}[()])}{}) -->
({({})({}[()])}{})
{({})({}[()])}{})
{ {})({}[()])}{})
{ {}) {}[()])}{})
{ {}) {}[ )])}{})
{ {} {}[ )])}{})
{ {} {}[ ])}{})
{ {} {}[ ] }{})
{ {} {}[ ] }{}
{ {} {} ] }{}
{ {} {} }{}
{} {} }{}
} {} }{}
} } }{}
} } } }
} } }
} }
}
Réponses:
Python 2 ,
7170 octets-1 octet grâce aux ovs
Essayez-le en ligne!
la source
Retina , 28 octets
Essayez-le en ligne! Explication:
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.
Triez les caractères dans l'ordre.
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).la source
APL (Dyalog Unicode) ,
18 à11 octetsEssayez-le en ligne!
utilise
⎕io←1
; retourne un tableau de chaînes (vecteur de vecteurs de caractères)la source
∪
nécessaire?⍋∘⍋
:)05AB1E , 9 octets
Essayez-le en ligne!
Explication
la source
{ðKv=yð.;
C'était à moi, gentil.:
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. :).;
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.Pyth,
171413 octetsEssayez ici
la source
sed
-rn
, 142143octetsEssayez-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 programmeL'espace motif commence par l'entrée
:a
labela
, ceci est la boucle principale du programmep
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 majuscules<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:b
labelb
, 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ées/ ./ /
l'enlevertb
répéterb
jusqu'à ce que la substitution échoues/(.)(.*) \1.*/ \2/
remplace le premier caractère du jeu ASCII présent dans l'entrée par un espace et supprime le jeu ASCIIta
récidivela source
sed
assez dupe pour économiser au moins 4 octets: Essayez-le en ligne!Ruby ,
60585547 octetsEssayez-le en ligne!
la source
a-b=[' ']
eta-b
pour un rapide -2 octetsR ,
140 à100 octets-40 octets Merci à Giuseppe!
Essayez-le en ligne!
Une solution utilisant
outer
la magie de Giuseppe pour fonctionner correctement est plus longue à 104 octets. Inspiré par cette réponse .Essayez-le en ligne!
la source
rank
!Python 3 , 71 octets
Essayez-le en ligne!
-4 octets grâce aux ovs
la source
*bool({*a}-{" "})
au lieu deif{*a}-{" "}else[a]
RecursionError
?if/else
raccourcis mais*bool
ne fonctionne pas, alors oui, l'erreur de récursion comme ditPython 2 ,
70696664 octetsEssayez-le en ligne!
Thx pour 2 octets à partir de ovs via using
S and f()
au lieu deif S:f()
la source
...If there is a tie, replace the leftmost character...
manquez la règle, vous pouvez résoudre ce problème avecreplace(min(...),' ',1)
Gelée , 8 octets
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.
Maintenant, nous construisons les colonnes en répétant chaque caractère par son index dans cette énumération.
Tout ce qui reste à faire est de supprimer les doublons, pour tenir compte des espaces.
Code
la source
Perl 5
-n
,3734 octetsOubli de trois octets avec l'aide de @TonHospel
Essayez-le en ligne!
la source
\Q
bien pour le dernier cas de test .... J'ai raté ça aussi la première fois!say&&s/\Q$a/ / while($a)=sort/\S/g
.0
JavaScript,
676665 octetsParce que je n'ai pas joué au golf saoul depuis un moment!
Essayez-le en ligne
Merci à DanielIndie pour avoir signalé 4 octets redondants que la bière est incluse!
la source
K (ngn / k) ,
26 à24 octetsEssayez-le en ligne!
la source
{@[x;y;:;" "]}
aurait pu être le cas@[;;:;" "]
. Quelle version de k utilisez-vous? Je ne suis pas au courant de ces:_ci _ic _dv
.C # (compilateur interactif Visual C #) , 129 octets
Essayez-le en ligne!
la source
c!=32
peut êtrec>32
;c==32
peut êtrec<33
; et(char)999
peut être'¡'
(ou tout autre caractère au-dessus de la plage imprimable Unicode ASCII).while
pourfor
et en plaçant levar 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).Perl 5 avec
-nlF/\s|/
, 39 octetsCela pourrait pousser les limites des drapeaux de Perl à ne pas être comptés, si c'est le cas, je reviens à la réponse précédente.
Essayez-le en ligne!
la source
-n
Haskell , 67 octets
12 octets sauvés grâce à Laikoni
Essayez-le en ligne!
Celui-ci se termine par une erreur
Haskell ,
8379 octetsEssayez-le en ligne!
Celui-ci se termine par une erreur
Haskell , 86 octets
Essayez-le en ligne!
Haskell ,
1009188 octetsEssayez-le en ligne!
la source
f s|(a,_:b)<-span(/=minimum(id=<<words s))s=putStrLn s>>f(a++' ':b)
essayez-le en ligne!id=<<
cela assez malinJavaScript (Node.js) ,
80 à65 octetsEssayez-le en ligne!
Je ne savais pas que la
replace
chaîne était une chaîne, pas une expression rationnellela source
K4 ,
282018 octetsSolution:
Exemple:
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:la source
gcc 32 bits,
6665 octetsMerci à Jonathan Frech pour -1 octet
la source
*p==i?...:0;
pourrait probablement être*p-i?0:...;
.*p-1||(...)
même longueur)f(a)
compiler, ce quia
devrait être de typechar*
, mais je suppose que cela a quelque chose à voir avec votre utilisation de gcc 32 bits.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 commentf(a)
fonctionne le travailMATLAB, 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.
la source
Common Lisp ,
240228224 octetsEssayez-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.
la source
APL (Dyalog Unicode) , SBCS de 39 octets
Essayez-le en ligne!
Dfn.
Comment?
la source
V , 27 octets
Essayez-le en ligne!
Hexdump:
la source
PowerShell ,
103 à99 octetsEssayez-le en ligne!
Prend l'entrée sous forme de chaîne dans
$a
. Nous passons ensuite de2
à$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$x
cours dans laquelle nous enregistrons de manière pratique en même temps. Ensuite , nous avons construit un nouvel[regex]
objet,$p
attern constitué par les caractères restants en$a
ce que sont-n
ote
Qual à l' espace,sort
ed, alors la0
ième de celle - ci.Nous définissons ensuite
$a
égal à une nouvelle chaîne de l'objet regex avec la.Replace
méthode à remplacer dans la chaîne$x
,$p
attern, par un espace" "
, mais uniquement la première1
correspondance. Oui, cette syntaxe est bizarre.Les chaînes sont laissées sur le pipeline et implicitement
Write-Output
nous donne une nouvelle ligne entre elles gratuitement, plus une nouvelle ligne.la source
Java (JDK 10) , 140 octets
Essayez-le en ligne!
Techniquement, il y a une ligne blanche, mais ce n'est pas vide .
la source
Stax , 9 octets
Exécuter et déboguer
C'est le même algorithme que la solution de Luis 05AB1E
la source
MATL ,
1716 octetsEssayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
la source
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.Ungolfed and Commented
la source
Japt ,
3218 octets14 octets sauvés grâce à Shaggy!
Essayez-le en ligne!
la source