Nous n'avons pas assez de défis (semi) faciles pour les débutants. De plus en plus de faciles sont déjà prises. J'ai donc essayé de trouver quelque chose qui pourrait être réalisable par les débutants, mais ce n'est pas un doublon.
Contribution:
Une seule chaîne séparée par votre nouvelle ligne de système d'exploitation (c.-à-d. \r\n
),
Ou un tableau avec plusieurs chaînes.
Sortie - Les escaliers :
Supprimez tous les symboles non alphabétiques et non numériques. Donc, tout ce qui reste est [A-Za-z0-9]
. Et puis «construire un escalier»; les commander essentiellement sur la longueur avec le plus petit en haut et le plus large en bas.
Règles du défi:
- Lorsque deux chaînes sont de longueur égale, nous les fusionnons en une seule grande chaîne (l'ordre n'a pas d'importance, il peut donc être du premier au dernier ou du dernier au premier, selon celui des deux que vous préférez).
- La règle ci-dessus peut s'empiler lorsque les chaînes fusionnées sont à nouveau de même longueur (voir cas de test 2).
Règles générales:
- L'entrée est STDIN et ne contient que des caractères ASCII. Et la sortie est STDOUT.
- Le cas de la sortie doit être le même que l'entrée.
Chaque soumission doit être un programme complet capable de compiler et d'exécuter, donc pas seulement une méthode / fonction.EDIT: Je suis plutôt nouveau, alors peut-être est-il préférable d'utiliser la valeur par défaut à partir de maintenant, même si je préfère moi-même un programme complet. Désolé pour tous ceux qui ont déjà publié un programme complet. N'hésitez pas à modifier, et je vais essayer de ne pas changer le post mi-défi la prochaine fois.- Il s'agit de code-golf , donc la réponse la plus courte en octets l'emporte. J'accepte probablement la réponse la plus courte dans un an.
Ne laissez pas les réponses de code-golf vous décourager de publier des langages de golf non-codegolf comme C # et similaires! Essayez de trouver la réponse la plus courte pour n'importe quel langage de programmation. - N'hésitez pas à utiliser des langues plus récentes que cette question.
Cas de test:
Entrée 1:
This is a sample text,
that you will have to use to build stairs.
The wood may be of excellent quality,
or pretty crappy almost falling apart and filled with termites.
Bla bla bla - some more text
Ok, that will do
Sortie 1:
Okthatwilldo
Thisisasampletext
Blablablasomemoretext
Thewoodmaybeofexcellentquality
thatyouwillhavetousetobuildstairs
orprettycrappyalmostfallingapartandfilledwithtermites
Entrée 2:
A
small
one
that
contains
equal
length
strings
for
the
special
rule
Sortie 2:
A Or alternatively: A
length length
oneforthe theforone
smallequal equalsmall
stringsspecial specialstrings
thatrulecontains containsrulethat
Étapes expliquées sur 2:
Première commande sur la longueur:
A
one
for
the
that
rule
small
equal
length
strings
special
contains
Première fusion:
A
oneforthe
thatrule
smallequal
length
stringsspecial
contains
Deuxième ordre sur la longueur:
A
length
thatrule
contains
oneforthe
smallequal
stringsspecial
Deuxième fusion:
A
length
thatrulecontains
oneforthe
smallequal
stringsspecial
Troisième ordre de longueur:
A
length
oneforthe
smallequal
stringsspecial
thatrulecontains
Entrée 3:
Test,
test.
This
is
a
test.
Sortie 3:
a Or alternatively: a
is is
TesttestThistest testThistestTest
Entrée 4:
a
bc
d!
123
Sortie 4:
123 Or alternatively: 123
adbc dabc
contains
n'est pas censé être dans la sortie 2. Il est fusionné avecthatrule
Réponses:
Husk , 11 octets
Essayez-le en ligne!
Husk est plus jeune que ce défi (ce qui ne fait aucune différence officiellement, mais quand même).
Explication
la source
mf□
, vous devez être jaloux. Lorsque "grouper par longueur" estġL
, vous devez être étonné.Python 3, 264 octets
Je ne suis pas bon au golf de code, donc je suis convaincu que ce ne sera pas la meilleure réponse Python 3. Cela utilise la récursivité et un dict ordonné avec tous les mots pour chaque longueur.
Prend l'entrée de stdin comme une liste, par exemple, testez-la avec cette liste:
Sortira:
la source
filter(str.isalnum, l)
place de la"".join
partieRétine,
6963 octetsEssayez-le en ligne!
la source
[^\w¶]|_
. Bien que je ne sois toujours pas sûr que ce soit optimal.Oracle SQL 11.2, 346 octets
Les lignes de la chaîne d'entrée sont séparées par '¤'. De cette façon, il n'est pas nécessaire de créer une table à utiliser comme entrée.
Requete :
Non golfé
la source
[\W_]
0-9
par\d
. Peut-être que les règles d'expression régulière sont différentes en sql qu'en python / php / javascript? (js est toujours un cas particulier à cause des regards)Haskell, 129 octets
Accepte et imprime un tableau de chaînes. Si le résultat peut être renvoyé par la fonction (contrairement à l'impression sur stdout), vous pouvez omettre le
print.
et enregistrer 6 octets.Comment ça marche (notez, j'utilise
x
pour le paramètre d'entrée qui bien sûr n'apparaît pas dans la version sans point ci-dessus):la source
Python 3,
184180 octetsUne fonction qui prend en entrée, par argument, une liste de chaînes et imprime le résultat dans STDOUT. L'exécution génère une erreur (en raison de l'utilisation de l'opérateur + avant l'instruction print), mais pas avant l'impression de la sortie.
Comment ça fonctionne
Essayez-le sur Ideone
la source
J , 48 octets
Essayez-le en ligne!
non golfé
explication
(#~e.&AlphaNum_j_)&.>
supprimer non alphanum(#&> ,&.>//. ])
combiner des articles de même longueur^:_
continuer à combiner jusqu'à ce qu'il cesse de changer(/: #&>)
trier par longueurla source
Javascript
198188186179 octetsCeci est mon deuxième plus long programme javascript golfé
Peut probablement être joué au golf plus loin
la source
t
variable?.split()
vous pouvez utiliser[y]()
Perl 5 , 112 octets
Essayez-le en ligne!
la source
Gelée , 17 octets
Essayez-le en ligne!
Je ne sais pas pourquoi
Ẏf¥€ØWṖ¤L€ĠịµÐLY
ça ne marche pas ...Explication:
la source
Pyth, 22 octets
Essayez-le ici.
Explication:
la source
Pyth, 39 octets
Retour au golf!
Il y a le programme:
Testez-le ici!
Explications
la source
R
etL
au lieu dem
Java 8, 268 octets
Un lambda vide acceptant un mutable
List<String>
(c'est-à-dire implémenteadd
etremove
; par exempleArrayList
). La sortie est imprimée en sortie standard, délimitée par une nouvelle ligne, avec une nouvelle ligne de fin. Cast toConsumer<List<String>>
.Essayez-le en ligne
Cela a fini par être beaucoup plus long que prévu. Comme Kevin l'a observé, c'est plus compliqué qu'il n'y paraît à première vue.
Lambda non golfé
Tout d'abord, je réduis l'entrée en place aux lettres et aux chiffres. Je traite ensuite les entrées en groupes par longueur. J'ajoute des éléments au premier de la liste jusqu'à ce que la longueur suivante soit atteinte, en les supprimant au fur et à mesure. Si seul le premier élément a été utilisé, ce sera la seule chaîne de cette longueur, il est donc imprimé. Sinon, la chaîne jointe est ajoutée à la liste pour une autre itération. Je trie la liste par longueur à chaque itération avant utilisation.
J'ai commencé avec une belle solution qui utilisait une file d'attente prioritaire pour garder une trace des chaînes intermédiaires. Malheureusement,
java.util.PriorityQueue<String>
c'est assez long (et utiliser le type brut était plus long), donc il fallait y aller.la source
Japt v2.0a1
-h
, 11 octetsEntrée et sortie sous forme de tableaux de chaînes.
Essayez-le
la source
[a-zA-Z0-9]
au lieu de[a-zA-Z]
).JavaScript, 119 octets
Je pense que cela devrait être beaucoup plus court ...
Comprend 2 nouvelles lignes principales dans la sortie.
Essayez-le en ligne
la source
g
pour 118Perl 6 , 85 octets
Essayez-le en ligne!
Entrées et sorties sous forme de listes de chaînes.
la source
Pyth, 21 octets
L'entrée est une liste de chaînes. Essayez-le en ligne ici ou vérifiez tous les cas de test ici .
la source
05AB1E , 16 octets
Entrée sous forme de liste de chaînes.
Essayez-le en ligne ou vérifiez tous les cas de test .
Cela aurait pu être 14 octets avec
εžKÃ}Δé.γg}J}»
ifΔ
fonctionnerait aussi avec une liste de chaînes.Explication:
la source
Powershell, Windows 10, 63 octets
Alors saisissez ...
et le code ...
Cela couvre l'entrée / sortie 1, en travaillant sur 2 et 3 ...
la source