Avec le grand krach de l'économie universelle, la demande de planètes sur mesure a également plongé. Les Magrathiens ont également dû gérer des revenus plus stables provenant d’une catégorie plus large de clients. Par conséquent, ils ont inventé la chaîne de montagne à faire soi-même (ou petits ravages) pour les personnes disposant d'un petit budget et ne pouvant se permettre une planète complète.
Les montagnes sont construites selon le plan du client (aka chaînes de chiffres et de points) et livrés en utilisant ascii-art (composé de ,
/
, \
, ^
et v
).
Tâche
Ecrivez un programme complet qui prend en entrée (chaîne unique) soit à partir de STDIN, soit sous forme d'argument et sort à STDOUT. Ce casse-tête est un code-golf, alors veuillez montrer votre tentative de jouer au golf.
Contribution
Une chaîne de points et de chiffres constituant la base de la chaîne de montagnes. Chaque chaîne est exactement aussi longue que nécessaire pour supporter les montagnes et chaque pic est donné par un chiffre au lieu d'un point, indiquant la hauteur du pic.
Sortie
Une version ascii de la chaîne de montagne.
- Chaque chiffre de l’entrée représente exactement un pic (
^
) à la hauteur indiquée par le chiffre (c’est-à-dire que 9 correspond à la hauteur la plus élevée). - Il ne doit pas y avoir de pics supplémentaires dans la sortie (c'est-à-dire aux endroits où il y a un point dans l'entrée).
- Montagnes sont de forme triangulaire, à savoir les pentes sont créés en utilisant
/
et\
caractères. - Les passes où deux montagnes se chevauchent sont façonnées à l'aide du personnage
v
. - Pas de nouvelles lignes superflues ni de lignes vierges.
- Les lignes de remplissage avec des espaces de fin sont facultatives.
Vous pouvez supposer que l'entrée fournie est valide, c'est-à-dire qu'il existe toujours une solution conforme aux règles (par exemple, une entrée de 13..
ne donnerait pas lieu à une configuration valide et pourrait être ignorée). De plus, il y a exactement autant de points sur chaque côté que les montagnes ne doivent pas être recadrées.
Exemples
La première ligne montre l'entrée, toutes les autres lignes constituent la sortie souhaitée. (En fait, les montagnes ont l'air beaucoup mieux dans ma console qu'ici.)
1
^
11
^^
1.2.
^
^/ \
.2.3..
^
^/ \
/ \
.2..3..
^
^ / \
/ v \
...4...3...3..
^
/ \ ^ ^
/ \/ \ / \
/ v \
1
, est\n\n\n\n\n\n\n\n^
autorisé?Réponses:
Javascript:
272268233232201192189 189188178180 caractèresMerci à @Sam pour l’avoir réduit de 268 à 233 caractères et à @manatwork pour un autre caractère. @VadimR pour avoir signalé un bogue.
Version correctement identifiée et un peu non-lisée avec commentaires:
Comme vous pouvez le constater d'après le code, cela fonctionne comme un automate cellulaire, où chaque cellule vérifie la présence d'un nombre dans l'entrée, regarde elle-même et ses deux voisins pour décider de la prochaine itération. A chaque instant une cellule peut être
^
,/
,\
,v
ou. L'entrée fournie dans les cas de test produit la sortie attendue.
Notez que l’utilisation de la
alert
boîte est nulle, car elle n’a normalement pas de police à espacement fixe. Vous pouvez copier-coller le texte de laalert
boîte vers un autre emplacement pour une meilleure appréciation de la sortie, ou vous pouvez remplacer la dernière lignealert
parconsole.log
, mais puisque c'est du code-golf,alert
c'est plus court.De plus, cela ne valide rien dans l'entrée. Il considère simplement les caractères non reconnus comme des espaces de la même manière que lui
.
(en fait, il.
s'agit également d'un caractère non reconnu).la source
prompt()
paramètre .delete r; delete s; delete q; delete p; delete t; delete i; delete d;
pour s'assurer qu'il n'était pas corrigé.q.trim()?q+'\n':''
pourrait êtreq.trim()&&q+'\n'
, sauver deux. Aussi,i<p.length
pourrait juste êtrep[i]
.Rubis,
208201189Défi très amusant! Voici une solution alternative Ruby.
En bonus, voici une implémentation Ruby du très intelligent algorithme "d'automate cellulaire" de Victor, à 162 caractères:
Exemple de sortie:
la source
$/
pour newline.C # - 588 caractères - pas aussi bon que 321 de Ray!
Exemple de sortie:
Ou un plus long, plus complexe ...
Brillant puzzle ... pas aussi facile qu'il y paraît ... a adoré!
la source
3
s sont là. Si vous parlez du premier, cela fait partie de la pente.APL, 65 octets
⍉⌽↑⌽¨h↑¨'^/v\'[1+(~×a)×2+×2+/2-/0,0,⍨h←¯1+⊃⌈/a-↓|∘.-⍨⍳⍴a←11|⎕d⍳⍞]
⍞
Ce symbole renvoie une entrée brute (non évaluée) sous forme de tableau de caractères.Résolution interactive, dans une session APL:
la source
Ruby, 390 personnages
Ouf, celui-ci était délicat.
J'ai fini par devoir ajouter une nouvelle chaîne pour chaque caractère, en utilisant une variable
s
qui signifiait "ignorer le prochain caractère", ce qui était nécessaire pour le traitement^
et\
.Cette sortie correspond exactement à la sortie d'échantillon donnée pour tous les cas de test.
Tableau de la signification des variables:
Je suis sûr que je pourrais jouer au golf beaucoup plus, mais je dois y aller maintenant. Doit être amélioré plus tard!
la source
.2.2.
et je ne vois pas pourquoi cela ne fonctionne pas.Java,
377407Edit: @Victor a souligné que ce programme devait être complet. J'ai donc ajouté quelques dizaines de caractères pour le rendre compilable et exécutable. Il suffit de passer le "bon de commande" en tant que premier paramètre lors de l'exécution du programme, comme suit:
java M ..3.4..6..4.3..
Je pense que cela ressemble dans l’esprit à d’autres réponses: fondamentalement, il parcourt «l’ordre des montagnes» à plusieurs reprises pour toutes les hauteurs possibles et construit les montagnes du haut vers le bas. De cette façon, je n'ai à gérer que quatre conditions, si ce n'est de construire un sommet - soit une pente ascendante '/', une pente descendante '\, un joint' v 'ou un espace vide' '. Je peux découvrir cela très simplement en regardant les trois espaces centrés "au-dessus" de ma position actuelle dans ma construction descendante.
Notez que, comme d’autres soumissions, je considère que rien n’est équivalent à «.». dans l'entrée, par souci de concision.
Version golfée:
Forme lisible par l'homme (et sans certaines des transmogrifications équivalentes pour atteindre la forme de golf):
Prendre plaisir.
Exemple de sortie:
la source
class X{public static void main(String[]z){
.Perl 6,
264 224 216 206 200 200 194124 octetsMerci à @JoKing pour son affichage en tant que /// solution. Ceci est joué un peu plus loin après avoir corrigé le bug tr /// dans Perl 6.
Ma solution originale avec subst:
Ungolfed:
Sortie:
la source
s///
ettr///
. Je pense que le dernier peut être utilisé à latr
place de,s
mais je ne peux pas comprendre la traduction des barres obliques inverses. Peut-être le premier aussiPerl,
254 218212Edit: en réalité, corriger l'
..3..4...6...5....1
exemple avec ProgrammerDan est une correction de bogue , mais dans le processus, certains octets étaient désactivés. Et test en ligne: https://ideone.com/P4XpMUla source
C # -
321319Ungolfed et commenté:
Exemple:
Je pense qu'il génère un espace supplémentaire avant chaque ligne, cependant.
la source
CJam,
128117112106104 octetsCJam est un peu plus jeune que ce défi, donc cette réponse n’est pas concurrentielle. C'était un très beau défi cependant! D'après le peu que je sais sur J et APL, je pense qu'une soumission dans ces cas serait très courte.
Voici un cas de test qui, à mon avis, contient toutes les combinaisons possibles de pentes, de sommets et de creux:
qui donne
Testez-le ici.
Je vais ajouter une explication pour le code plus tard.
la source
Python,
297234218-63 octets grâce à Jo King
-16 octets au
r=s.replace
lieu de lambdaPrend l'entrée de STDIN. Ungolfed, simplifié:
la source
s.replace
méthode moi-même, mais ça ne marche pas. Vous effectuez simplement des remplacements sur la chaîne d'origine car les chaînes sont immuablesPowershell,
148145 octetsC'est un beau challenge!
Script de test moins joué:
Sortie:
la source
Pip
-l
, 100 octets(La formulation est plus récente que la question, mais ne va probablement pas battre la soumission APL de toute façon. Bien que j'espère qu'elle sera beaucoup plus courte.)
Prend une entrée via un argument de ligne de commande. Essayez-le en ligne!
la source