Les codeurs essaient toujours d’aplanir les tableaux en entités ennuyeuses à une dimension et cela me rend triste.
Votre tâche consiste à aplatir une chaîne arbitraire de caractères pour créer un magnifique paysage urbain.
Considérons la chaîne: aaabbbbbccqrrssstttttttPPw
Ça ressemble beaucoup mieux à ça:
tt
tt
bb tt
bb tt
aabb sstt
aabbcc rrssttPP
aabbccqqrrssttPPww
(Ok, oui, les lettres sont dupliquées pour donner un aspect plus urbain à la ville).
Prenez une chaîne de saisie, dupliquez chaque sous-section de caractères correspondants (pas nécessairement des lettres alphabétiques) et construisez-moi une ville!
Les octets de code les plus courts gagnent.
En fait, je pensais avoir les exigences définies, mais pour répondre à quelques questions:
- il doit être sur le terrain
- vous pouvez avoir du ciel en plus si vous le souhaitez (lignes vierges, espace vide environnant) - mais pas entre les bâtiments
- les lettres peuvent être réutilisées à l'intérieur de la chaîne (même architecture, emplacement différent)
- les lettres sont supposées être ASCII, mais plus de talent sera donné à ceux supportant des encodages supplémentaires (UTF8, etc.)
aaabbbbaa
?Réponses:
05AB1E , 6 octets
Essayez-le en ligne!
Dans une version plus récente que le défi,
ζ
a été ajouté pour remplacer.Bø
05AB1E , 8 octets
Explication:
Essayez-le en ligne!
la source
z⁶
pour.Bø
... mais aussiŒgx'2
pourγ€D
> _>γ.BD)ø˜øR»
C’était ce que j’avais sans regarder,€D
c’est bien mieux; J'ai l'impression que nous manquons tous les deux la solution à un octet de la duplication en ligne.CJam , 23 octets
Essayez-le en ligne!
Explication:
la source
Gelée , 9 octets
Essayez-le en ligne!
Explication:
la source
'
, qui était de répéter les listes elles-mêmes et non les éléments qui s'y trouvaient, mais dans l'ensemble, c'est bien. :)Python 3 ,
155136134132 octets-19 octets grâce à @LeakyNun
-2 octets grâce à @officialaimm
-1 octet grâce à @Wondercricket
Essayez-le en ligne!
la source
Python 2 , 117 octets
Essayez-le en ligne!
la source
Java 8,
412400330324312319 octets-6 octets grâce à VisualMelon
-12 octets grâce à Kevin Cruijssen
mais +19 octets car j'ai oublié d'inclure les importations dans le nombre d'octets.
Essayez-le en ligne!
la source
i=0
, ou mieuxi=l
, et décompterfor(;i-->0;h=d>h?d:h)
(et y insérer leh=
bit). Le même comptage en arrière fonctionnera également pour la boucle interne. L'intérieurif
n'a pas non plus besoin des accolades{}
. Et soyez toujours fatigué de<=
ou>=
, vous pouvez retourner le ternaire avec>
et sauvegarder un octet.import java.util.*;
deMap
etHashMap
, les importations font partie du nombre d'octets; et -1 en supprimant le point-virgule final, qui n'est pas partie du nombre d'octets).import java.util.*;x->{Map m=new HashMap(),n;int l=x.length(),i=l,v,y,h=0,d=1;char c,k;for(;i-->0;m.put(c,d=m.get(c)!=null?d+1:1),h=d>h?d:h)c=x.charAt(i);for(y=h;y>0;y--){n=new HashMap(m);for(i=0;i<l;i++)if(n.get(k=x.charAt(i))!=null){v=(int)m.get(k);System.out.print((y>v?" ":k+""+k)+(i==l-1?"\n":""));n.remove(k);}}}
HashMap<>
→HashMap
;Map n=
→,n
etn=
;m.put(c,d=m.get(c)!=null?d+1:1);
à l'intérieur de la boucle pour se débarrasser des crochets;k=x.charAt(i)
à l'intérieurif(n.get(k)!=null)
de se débarrasser des crochets du point-virgule et de la boucle. Encore une fois, bienvenue et bonne réponse! +1 de moi. De plus, au cas où vous ne l'auriez pas encore vu: des astuces pour jouer au golf en Java et des astuces pour jouer au golf dans toutes les langues> pourraient être intéressantes à lire.Japt ,
1918151312 octetsInclut les espaces de fin sur chaque ligne.
Essaye-le
Explication
la source
Mathematica, 150 octets
la source
R , 135 octets
Essayez-le en ligne!
lit à partir de stdin, écrit sur stdout (avec une nouvelle ligne).
Explication:
rle
trouve la longueur des traînées de caractères, les hauteurs de chaque tour.sub
expression remplace chaque caractère par son double (donc je n'ai pas eu à me gêner pour définir des index adjacents ensemble)sapply
retourne un tableau (dans ce cas une matrice):sum(e$l|1)
est le nombre de caractères distincts; on va de haut en basifelse( ... )
est une vectoriséeif...else
nous permettant de construire une matrice de tours et de doubles espaceswrite
écrit sur la console, avec quelques options de formatage.la source
Pyth , 13 octets
Essayez-le en ligne!
la source
PHP , 138 octets
Essayez-le en ligne!
la source
MATL , 15 octets
Essayez-le en ligne!
Explication
la source
Charbon de bois , 40 octets:
Essayez-le en ligne! Le lien est vers la version verbeuse du code. À l’origine, j’ai essayé une simple boucle sur la chaîne d’entrée pour imprimer une forme oblongue chaque fois que la lettre était modifiée, mais j’ai opté pour cette méthode d’établissement de liste, qui économise 5 octets. Explanation: La variable
l
contient une liste imbriquée des lettres saisies. Les personnages qui correspondent aux derniers éléments de la liste en cours sont ajoutés à la dernière liste, sinon une nouvelle sous-liste est créée pour ce personnage. Il reste ensuite à joindre les lettres de chaque sous-liste pour pouvoir les imprimer deux fois verticalement.la source
C,
259231 octetsCode de golf
Code verbeux
Compilé avec GCC, pas de drapeaux spéciaux
modifier
Sauvegardé 28 octets grâce à adelphus. Son changement m'a permis de créer une définition. Et j'ai créé les boucles while dans les boucles for afin d'économiser 2 octets chacune en réorganisant la boucle. J'ai également corrigé un problème qui entraînait la rupture du code lorsque le dernier caractère saisi n'était pas singleton. Le code échouera s'il n'y a qu'une seule lettre mais doit fonctionner dans tous les autres cas.
la source
while (i < strlen(argv[1]))
peut également être raccourci enwhile (argv[1][i])
- boucle jusqu'au caractère nulPépin , 22 octets
21 octets de code, +1 pour le
-l
drapeau.Essayez-le en ligne!
Explication
la source
QuadS , 15 + 1 = 16 octets
+1 octet pour le
1
drapeau.Essayez-le en ligne!
⊖⍵
post-traitement en retournant à l'envers(.)\1*
des séries de caractères identiques2/⍪⍵M
dupliquer le columnified M atchLe
1
drapeau provoque la fusion des résultats.la source
Haskell, 144 octets
Je suis persuadé que je peux faire mieux que cela, mais c'est le meilleur que je puisse trouver pour le moment.
la source
Data.List
qui ne sont pas dans la portée par défaut. Vous devez soit ajouter le nombreimport Data.List
d'octets, soit spécifier un environnement Haskell qui l'inclut par défaut (par exemple, changez la langueHaskell
enHaskell (lambdabot)
. - Quelques astuces: a) utiliser des gardes-modèles pour lier des variables au lieu delet
et / ou déclarer des fonctions d'assistance directement:l=length;f s|x<-groupBy(==)s,m<-... =concatMap
. b)map l x
estl<$>x
, c)concatMap("++\n"
estunlines
. d)groupBy(==)
est justegroup
. e)concat
estid=<<
. Vous utilisezm
seulement une fois, donc en ligne()
autourl y
,replicate ... ' '
etmap ... x
. Dans l' ensemble:import Data.List;l=length;f s|x<-group s=unlines$reverse$transpose$id=<<[[z,z]|z<-map(\y->y++replicate(maximum(l<$>x)-l y)' ')x]
.groupBy(==)
=group
, même si je ne suis pas sûr si l'un est en prélude et l'autre ne l'est pas.concatMap
peut être écrit>>=
, etmap
peut être infixé comme<$>
, etconcat[[z,z]|z<-…]
pourrait être(replicate 2)=<<…
ou(\z->[z,z])=<<…
(\z->[z,z])
c'est(:)<*>pure
-à-dire...transpose$(:)<*>pure=<<map(\y...)x
Empilés , 42 octets
Essayez-le en ligne!
la source
Ruby , 116 octets
Essayez-le en ligne!
la source
puts a.map{...}
peut être remplacé parp(a.map{})
p
affichera des caractères de citation, il ne convient donc pas iciAPL (Dyalog) , 37 octets
Essayez-le en ligne!
la source
q / kdb +, 53 octets
Solution:
Exemple:
Explication:
la source
Perl 5 , 92 + 1 (-p) = 93 octets
Essayez-le en ligne!
la source