Dites que j'ai un texte comme celui-ci (chaque mot sur une ligne, sans espace)
Programming
Puzzles
&
Code
Golf
Ça n'a aucun sens! Il défie totalement les lois de la physique.
Votre défi est de remédier à cette situation impossible et de réduire le texte de la manière suivante:
P
Prog
&uzz
Coderam
Golflesming
Il n'y a donc aucun espace vide sous aucun caractère, mais les personnages conservent leur ordre vertical.
L'objectif est de satisfaire les exigences mais d'utiliser le moins d'octets de code source possible.
Réponses:
Pyth, 10 octets
Essayez-le en ligne dans le compilateur / exécuteur Pyth .
Idée
Nous pouvons obtenir le résultat souhaité en appliquant quatre transformations simples:
Inverser l'ordre des lignes:
Transposer des lignes et des colonnes:
Ce sommet justifie la réduction des colonnes d'origine.
Transposer des lignes et des colonnes:
Inverser l'ordre des lignes:
Code
la source
Haskell, 62 octets
Je suis très mature.
la source
Python 2, 104 octets
Un algorithme itératif à une passe. Nous parcourons chaque ligne dans l'ordre, en mettant à jour la liste
l
des lignes à afficher. Le nouveau mot pousse efficacement à partir du bas, en déplaçant toutes les lettres au-dessus d'un espace. Par exemple, dans le cas de testaprès avoir fait jusqu'à
Code
, nous avonspuis en ajoutant les
Golf
résultats dansque nous pouvons voir comme la combinaison de deux pièces
où le premier morceau a été déplacé vers le haut
golf
. Nous effectuons ce décalage avec unzip
élément de la liste de sortie avec l'élément à la fin (côté gauche) et la priorité de la liste de sortie par une ligne vide (côté droit), en coupant chaque partie à la longueur du nouvel élément.Il peut sembler plus naturel d’itérer à la place les nouvelles lettres, mais ma tentative a été plus longue.
Pour la comparaison, voici une approche
zip
/filter
, avecmap(None,*x)
utilisé pouriziplongest
(109 octets):la source
CJam, 11 octets
Essayez-le en ligne dans l' interprète CJam .
Comment ça fonctionne
L'idée dans le même que dans ma réponse Pyth .
la source
JavaScript (ES6), 146
(Les 2 nouvelles lignes à l'intérieur des chaînes de modèle sont significatives et comptées)
L'idée de @Dennis implémentée en JavaScript. La fonction S longue effectue la transposition ligne par ligne et caractère par caractère, en laissant le résultat dans le
t
tableau.Moins joué dans l'extrait de code (essayez dans Firefox)
la source
S(t.reverse()),t.reverse().join
parS(R=t.reverse()),R.join
.R, 223 octets
C'est une manière absurde et naïve de le faire.
Ungolfed:
Vous pouvez l' essayer en ligne .
la source
Matlab / Octave, 99 octets
Exemple :
Définir une chaîne d'entrée dans une variable, par exemple
s
.10
est le caractère de saut de ligne:Fonction d'appel
f
avec entrées
:Ou essayez-le en ligne (merci à @beaker de l'aide pour l'interprète en ligne Octave)
la source
JavaScript ES6, 119 octets
Ici, il est non-golfé et dans ES5 avec des commentaires expliquant son fonctionnement:
la source
APL (Dyalog Extended) , SBCS de
1311 octets-2 avec mes extensions à Dyalog APL.
Fonction tacite anonyme, prenant et renvoyant une matrice de caractères.
Essayez-le en ligne!
~
supprime∘
les' '
espaces⍤
des1
lignes (sous-tableaux 1D allumés)⍢
lors de la⍉
transposition⍢
lors du⊖
retournementla source
R,
190178175 OctetsProbablement encore de la place pour jouer au golf. Probablement quelques opérations inutiles là-bas
Ungolfed et expliqué
Essai. Il est intéressant de noter qu'en raison de la manière dont l'analyse fonctionne, la phrase entière peut être entrée avec des espaces tout en donnant la sortie spécifiée.
la source
STATA, 323 octets
Prend la saisie dans un fichier appelé ab Seulement fonctionne maintenant pour 24 caractères maximum. Mettra à jour plus tard pour le faire fonctionner avec plus. En outre, ne fonctionne pas dans le compilateur en ligne. Nécessite le compilateur non libre.
Éditer: déplacé silencieusement (pour supprimer la sortie) vers la boucle elle-même à partir de chaque instruction de la boucle, en économisant 8 octets.
la source
R, 171 octets
Avec nouvelles lignes et indentation:
Usage:
la source
Gelée , 6 octets (non concurrente)
Essayez-le en ligne!
Comment ça fonctionne
L'idée dans le même que dans ma réponse Pyth .
la source
Turtlèd , 72 bytes, non compétitif
Plutôt sûr de pouvoir changer d’approche pour économiser des octets, mais plus tard.
: p non-golf esolang bat langs régulière: p
Ce qui est étrange à propos de Turtlèd, c’est qu’il a été créé à l’origine après une discussion sur les arts ascii, mais elle semble en fait être la meilleure pour ce genre de défis.
Turtlèd ne peut prendre une entrée nouvelle ligne mais pour plusieurs entrées, et cela ne prend qu'une entrée: termine chaque mot avec un espace, y compris le dernier.
Essayez-le en ligne!
Explication:
la source
Perl, 133 octets
C’était l’un de ces défis qui, dans ma tête, changeaient: trop difficile, plus facile, plus codé que je ne le pensais ... Je ne suis pas particulièrement heureux de cette approche, je suis sûr qu’il existe un moyen bien meilleur de réduire le
print pop@F...
bit en utilisant peut-être-n
ou simplement du regex pur, mais je ne peux pas y aller pour le moment ... À l’origine, j’utilisaissay
, mais je pense que je devrais obtenir un score plus élevé (use 5.01
) à cause de$'
.Usage
Enregistrer sous
vertically-collapse-text.pl
.la source
SmileBASIC, 90 octets
Applique la gravité à tout le texte de la console. Je ne sais pas si cela est valide ou si je dois utiliser un tableau de chaînes.
la source
Ruby,
9982 octetsComment y arriver ...
Une tentative d'explication:
Exécutez-le comme ceci:
la source
K, 30
.
Explication
x@\:!|/#:'x
étend chaque chaîne pour créer une matrice de caractères carrés.+
le transpose{(-#x)$x@&~^x}
supprimera tous les espaces d'une chaîne, puis complétera la chaîne par sa longueur d'origineAppliquez cette fonction à chacune des chaînes transposées, puis retournez la sortie pour obtenir le résultat.
la source
{+{(-#x)$x@&~^x}'+(|/#:'x)$x}
pour 29.pb - 310 octets
Quel désastre. Je me souviens à peine de quoi que ce soit sur la façon dont cela fonctionne.
En raison du fonctionnement de l'entrée de pb (une seule ligne à la fois), vous devez utiliser des espaces au lieu de nouvelles lignes dans l'entrée. Si l'interprète n'était pas un déchet et que vous pouviez inclure des nouvelles lignes dans l'entrée, le seul changement serait
[B=32]
le début[B=10]
.Je travaille sur une mise à jour de pbi (l'interprète) qui nettoiera les éléments visuels si vous souhaitez visionner le programme. Il faut encore beaucoup de travail, mais en attendant, vous pouvez regarder ce programme sur YouTube .
la source
J, 17 octets
Solution assez agréable.
Explication:
Cas de test expliqué
Cas de test
la source
;@;:&.(|:@|.)
pour 13Réellement , 13 octets
Ceci utilise l'algorithme décrit dans la réponse de Dennis 'Jelly . L'entrée et la sortie sont toutes les deux des listes de chaînes. Malheureusement, la fonction de transposition intégrée ne fonctionne pas très bien si les listes internes ou les chaînes ne sont pas toutes de la même longueur, ce qui ferait en sorte de déjouer le point de s'effondrer verticalement. Les suggestions de golf sont les bienvenues. Essayez-le en ligne!
Ungolfing
la source
Raquette 312 octets
Ungolfed:
Essai:
Sortie:
la source
JavaScript (ES6), 103 octets
Divisé en CR, la carte externe garantit que nous bouclons suffisamment de temps pour permettre à "la gravité" de supprimer les lettres aussi loin que nécessaire.
Inner map vérifie d'abord s'il existe une ligne suivante. Si c'est le cas, et si elle est plus courte, supprimez le débordement à la ligne suivante. c'est-à-dire que si la 1ère ligne a "ABCD" et que la 2ème ligne a "FG", abandonnez le "CD" de la 1ère ligne à la 2ème pour que la 1ère ligne devienne "AB" et la 2ème devienne "FGCD".
Comme nous le faisons autant de fois qu'il y a de lignes, les lettres tombent aussi loin qu'elles le devraient, nous laissant ainsi le résultat souhaité.
la source
Japt , 8 octets
Essayez-le en ligne!
Comment ça fonctionne
Il y a aussi
z
qui fait pivoter la chaîne 2D d'un multiple de 90 degrés, mais la tronque quand mêmeheight > length
.la source
05AB1E ,
10 à9 octetsEssayez-le en ligne.
ou avec départ alternatif:
Essayez-le en ligne.
Approche similaire à celle de @ Dennis ♦ 'Pyth .
-1 octet grâce à @Emigna en remplacement
ðõ:
deðм
.Explication:
Explication alternative:
la source
R,
s8152 octetsJ'ai pris une certaine liberté dans l'interprétation de la question et j'ai supposé que le texte était représenté dans une matrice avec un caractère par cellule, ainsi:
Donc x devient:
Maintenant, j'utilise
order
et je[
trie les colonnes pour que les NA viennent en premier, puis toutes les autres valeurs:Il devient plus long s'il est nécessaire que le résultat soit des mots:
la source
function(x)
doivent donc être incluses dans le nombre d'octets.R,
196189170 octetsUne version lisible par l'homme:
Comment ça fonctionne:
(Ou en d'autres termes, des parties "superflues" tombent jusqu'à ce que tout ce qui peut tomber soit tombé.)
Entrée: un vecteur de caractère.
la source
Julia 0.6 , 141 octets
Essayez-le en ligne!
La diffusion avec
g.([w], [d d])
me permet de me débarrasser de tout relevé de carte et me fait économiser environ 7 octets.la source