Voici un exemple d'entrée de monolithes . Il y en a 4 dans cet exemple.
_
| | _
| | _ | |
| | | | | | _
_| |_| |___| |____| |_
Le premier monolithe mesure 4 unités de haut, le second 2, le troisième 3 et le dernier 1.
La tâche
Votre programme doit afficher les hauteurs des monolithes dans l'ordre de gauche à droite. Le format de sortie peut être dans n'importe quel type de liste ou de tableau.
Remarques
- L'entrée peut être considérée comme n'importe quelle chaîne dimensionnelle, liste de chaînes ou liste de caractères.
- C'est le code-golf , donc les octets les plus bas gagnent .
- Vous devez supposer que les monolithes ont toujours la même largeur et sont toujours à au moins 1
_
de l'autre. - Ils peuvent venir en toute hauteur et en toute quantité.
E / S
_
| | _
| | _ | |
| | | | | | _
_| |_| |___| |____| |_ >> [4,2,3,1]
_
| |
_ | |
| | _ | | _
_| |_| |__| |_| |_ >> [2,1,4,1]
_ _ _
| |_| |_| |_____ >> [1,1,1]
____________________ >> undefined behavior
_
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | >> [11]
_ _ _ _ _
_ | | _ | | _ | | _ | | _ | |
| |_| |_| |_| |_| |_| |_| |_| |_| |_| | >> [1,2,1,2,1,2,1,2,1,2]
[10]
monolithe n'est[11]
-il pas ?Réponses:
Gelée , (8?) 9 octets
Un lien monadique acceptant une liste de caractères comme spécifié et renvoyant une liste d'entiers.
Remarque: 8 octets si une liste de chaînes, une par ligne, était vraiment destinée à être un format d'entrée autorisé - supprimez simplement le
Ỵ
.Essayez-le en ligne!
Comment?
la source
Gelée , 11 octets
Essayez-le en ligne!
la source
JavaScript (ES6),
7978 octets-1 octet grâce à @Shaggy
Prend l'entrée comme un tableau de chaînes.
Extrait de test
la source
a=>a.map((x,y)=>x.replace(/_/g,(_,z)=>c[z]=a.length-y-1),c=[])&&c.filter(n=>n)
replace
. Merci!C ++,
171169 octetsEssayez-le en ligne!
C ++ (GCC), 150 octets
Merci à @aschepler!
Essayez-le en ligne!
la source
f(auto s)
et spécifier qu'il faut n'importe quel conteneur à accès aléatoire de conteneurs à accès aléatoire dechar
.05AB1E , 11 octets
Essayez-le en ligne!
ζ
a été remplacé par.Bø
sur TIO car il n'y a pas encore été retiré.la source
Dyalog APL, 29 octets
Courez avec
⎕IO←0
.Essayez-le en ligne!
Comment?
⌽⍵='_'
- où⍵
est'_'
, les premières lignes en premier×
- multiplier par ...(⍳≢⍵)
- la plage de⍵
(indexé zéro)↑¨
- pour chaque ligne, pad avec zéros par ...(⌈/⍴¨⍵)
- la longueur maximale↑+/
- additionner les lignes zippées et aplatir0~⍨
- supprime les zérosla source
Python 2 , 75 octets
Essayez-le en ligne!
la source
PowerShell, 133 octets
On dirait que ce n'est pas très compétitif; il fait un regex remplacer pour transformer les tours en colonnes de 1, fait un tableau de 0 la longueur de la chaîne d'entrée, puis parcourt les lignes en additionnant les 1.
Tests prêts à fonctionner:
la source
Japt , 11 octets
Testez-le en ligne!
Explication
la source
Rétine ,
4838 octetsEssayez-le en ligne! Le lien inclut le premier exemple. Explication: Une ligne est préfixée qui collectera les résultats. Comme chaque colonne est supprimée à plusieurs reprises à son tour, celles qui contiennent un
_
niveau supérieur au sol ont le nombre de lignes restantes dans la colonne compté. Enfin, les lignes désormais vides sont supprimées. Edit: enregistré 10 octets grâce à l'inspriation de @FryAmTheEggman.la source
_
s, ce qui est beaucoup plus logique que d'essayer d'utiliser le|
s, merci!$.%`
, et l'étape finale peut l'être!`\d+
. Et si vous changez la première étape en une anticipation, vous n'avez pas besoin de boucler.Java 8,
133117116114 octetsPrend l'entrée comme un (← enregistre 16 octets). -2 octets en échange d'une sortie moins lisible grâce à @ OlivierGrégoire en passant à .
String[]
char[][]
print(l-j+",")
println(l-j)
Explication:
Essayez-le ici.
la source
_
si le magasin trouvé était son emplacement, puis de le commander, en ignorant la rangée du bas bien sûr. Pourrait aider à économiser des octets ...new[,]
au lieu du tableau dentelé que vous utilisez en tant quenew[][]
. Si vous avez cela en Java, cela pourrait vous faire économiser quelques octets.System.out.println(l-j);
semble assez listy pour moi d'épargner 2 octets. De plus, dans l'explication, vous avez oublié de changerlength()
enlength
(aucune incidence sur le nombre d'octets car il est correct dans la soumission).Haskell,
7574 octetsL'entrée est attendue sous la forme d'une liste de chaînes (dans le sens des lignes).
la source
Rubis , 82 octets
Prend une liste de lignes.
Essayez-le en ligne!
la source
APL (Dyalog) , 14 octets
avec
⎕IO←0
Essayez-le en ligne!
Ce train de fonctions équivalent à
{((⍳≢⍵)+.×('_'=⊖⍵))~0}
la source
MATL , 12 octets
L'entrée est une matrice de caractères, avec
;
comme séparateur de ligne.Essayez-le en ligne! Ou vérifiez tous les cas de test .
la source
C #,
150144137 octetsVersion complète / formatée:
la source
Java
8-229 octets213 octetsEssayez-le en ligne!
Non golfé:
Woo, premier post. Toute aide pour l'améliorer serait formidable.
Je sais que je peux m'en débarrasserJe le savais! J'ai joué avec l'idée de changer les types de la carte d'Integer en Long mais je pense que c'est une impasse.indexOf
deux fois.Je sais qu'il existe déjà une bien meilleure solution Java 8 , mais cela prend
char[][]
comme entrée qui, je pense, est plus facile à travailler dans ce cas que String.la source
Map
mais unint[]
(peut-être initialisé ànew int[99]
?). Plus besoin d'espace aprèsString[] l
:String[]l
fonctionne de la même façon et est plus court. Utilisezprintln(l.length-i-1)
au lieu deprintln(l.length-i-1+",")
. Ne pas initializej
: il suffit d' écrire:,j;
. Si vous utilisez unint[]
comme suggéré précédemment, déclarez comme ceci:int m[]=new int[99],i=0,j;
et supprimez la déclaration dufor-loop
.import java.util.*;s->{Map m=new TreeMap();String[]a=s.split("\n");int l=a.length-1,j=-1,i=j;for(;++i<l;)for(s=a[i];(j=s.indexOf("_",j+1))>=0;m.put(j,i));for(Object o:m.values())System.out.println(l-(int)o);}
. Pas besoin<Integer,Integer>
de la carte quand vous pouvez lancerint
;a.length-1
est utilisé deux fois, vous pouvez donc utiliser une variable pour cela; en mettant tout à l'intérieur des boucles for, vous pouvez vous débarrasser de tous les supports. Oh, et bienvenue chez PPCG! :)MATL , 10 octets
L'entrée est une matrice de caractères rembourrée.
Essayez-le en ligne!
la source
Mathematica,
484739 octetsEssayez-le en ligne!
Function
qui attend un tableau rectangulaire de caractères. PrendMost
le tableau (tous sauf la dernière ligne),Reverse
s il, puis prend leTranspose
*, puis trouve tous lesPosition
s auxquels le_
caractère apparaît. Les hauteurs pertinentes sont lesLast
éléments de chacunePosition
.*
est le3
caractère à usage privé d'octetU+F3C7
qui représente\[Transpose]
dans Mathematica. Notez que cela ne fonctionne pas en mathématiques , donc le lien TIO utilise simplementTranspose
.la source
SOGL V0.12 , 9 octets
Essayez-le ici!
Prend l'entrée comme un tableau de tableaux de chaînes (caractères).
Explication:
la source
JavaScript (ES6),
10810488 octets16 octets enregistrés grâce à @JustinMariner
Entrée prise comme un tableau de chaînes
la source
Array.map
, c'est un truc cool.exec
et économiser quelques octets.exec
correspondrait donc à la première. Il bloque en fait l'éditeur d'extraits de code d'échange de pile si vous insérez l'expression régulière. A moins que je manque quelque chose?CJam,
1514 octets1 octet enregistré grâce à @BusinessCat
Il s'agit d'un bloc qui prend un tableau de chaînes sur la pile et génère un tableau.
Explication:
la source
Pip ,
1817 octets15 octets de code, +2 pour les
-rp
drapeaux.Prend l'entrée de stdin. Essayez-le en ligne!
Explication
la source
Pyth ,
191514 octetsTestez-le en ligne! L'entrée est une liste de lignes.
Explications
la source
Octave, 31 octets
Prend un tableau 2D de caractères en entrée.
Vérifiez tous les cas de test!
la source
Perl 6 , 65 octets
Essayez-le en ligne!
m:exhaustive/^^(\N+)_([\N*\n]+:)/
recherche dans la chaîne d'entrée tous les traits de soulignement et renvoie un objet de correspondance pour chacun, où les premières parenthèses de capture contiennent la partie précédente de la ligne sur laquelle le trait de soulignement est trouvé et les secondes parenthèses de capture contiennent le reste de la chaîne. Le reste de la chaîne doit contenir au moins une nouvelle ligne, donc nous ne comptons pas les traits de soulignement au niveau du sol. Le:exhaustive
drapeau permet à ces matchs de se chevaucher..sort(*[0].chars)
trie ces objets de correspondance par le nombre de caractères dans la partie de la ligne précédant chaque trait de soulignement. Cela les ordonne de gauche à droite..map(+*[1].comb("\n"))
mappe chaque objet de correspondance au nombre de caractères de nouvelle ligne dans la partie de la chaîne d'entrée derrière chaque trait de soulignement - c'est-à-dire la hauteur. Le\n
est un caractère de nouvelle ligne réel, économisant un octet.la source
PHP, 119 bytes
Décomposons cela! Notre entrée ici est un tableau 2D de caractères.
la source
Prend une chaîne multiligne. Le crédit pour la configuration (en-tête et pied de page) va à @GarethPW
Python 2 , 29 octets
Essayez-le en ligne!
Cela divisera simplement le tableau par une nouvelle ligne et renverra la longueur 1.
la source