Votre travail consiste à recréer cette œuvre d'art:
_____
|
|
|
|
_____|
|
|
|
|
_____|
|
|
|
|
_____|
|
|
|
|
_____|
La réponse doit recréer cela et l'imprimer en conséquence. Toutes les langues sont autorisées, aucune impression directe d'art, ofc, un certain niveau de manipulation est requis. La réponse avec le moins d'octets l'emporte.
Ferme le jeudi 6 h 30 UTC environ.
La chose originale m'a été montrée par mon ami qui a fait ça avec Java, il a refusé de me montrer le code source et maintenant je vais l'éblouir avec l'éclat d'autres langages éventuellement. :RÉ
Vous ne pouvez pas utiliser de caractère alternatif (le rend plus facile?).
Tableau actuel des leaders
- Pyth - 28 octets - isaacg
- CJam - 30 octets - Runer112
- CJam - 32 octets - Martin Büttner
Votes les plus élevés: C - 73 octets - Paul R
isaacg prend la couronne pour avoir réussi le Staircase Challenge avec Pyth. Méfiez-vous de plus de défis comme ceux-ci sur PPCG!
Réponses:
Pyth,
2928Essayez-le ici.
Une solution assez simple, avec l'astuce "ajouter cinq espaces ou cinq traits de soulignement" de la solution @ xnor, mais avec la boucle de 0 à 20, pas de 20 à 0.
la source
C,
8680767573 octetsla source
for(i=25;i--;)
i=26
. En plus de cela, le' '
pourrait être changé32
pour un personnage supplémentaire. Ma solution est 2 caractères de plus après ces optimisations :(main(i){for(i=21;i--;)printf("%*s%c\n",i/5*6+5,i%5?"":"_____",i<20?'|':0);}
1. Simplifiez la formule pour la longueur 2. Comme @Allbeert le dit, vous pouvez utiliser le code ascii pour' '
mais pourquoi vous arrêter à ASCII 32 quand ASCII 0 fera l'affaire. De plus, cela fonctionne bien pour moi avec""
au lieu de" "
'|'
impression?c;main(i){for(i=21;i--;c='|')printf("%*s%c\n",i/5*6+5,i%5?"":"_____",c);}
Java,
198158156146 octetsCela peut probablement être beaucoup raccourci. Comme d'habitude, les suggestions sont les bienvenues.
En retrait (un peu):
Merci Martin Büttner, Rainbolt et Geobits.
la source
Brainfuck (1065 octets)
Ce n'est pas joli, ce n'est pas court ... mais j'optimiserai plus tard!
la source
CJam,
3630 octetsEssayez-le en ligne.
Ma solution initiale de 36 octets a généré le résultat dans l'orientation de sortie. Malgré mes tentatives pour extraire plus d'octets de l'algorithme, je n'ai pas pu. Puis j'ai vu la brillante stratégie de Martin de générer des colonnes au lieu de lignes et de transposer le résultat. J'ai réalisé que c'était probablement une meilleure approche, alors j'ai décidé de créer une solution basée sur la transposition.
Cependant, mon approche de la mise en œuvre de cette stratégie varie beaucoup. Au lieu de générer des colonnes complètes, j'utilise une solution itérative qui indente toutes les «étapes» déjà générées et ajoute ajoute une nouvelle étape à chaque itération. La première itération de la boucle principale génère donc ceci:
La deuxième itération de la boucle principale indente l'étape existante et en ajoute une nouvelle après celle-ci:
Et les cinq itérations complètes de la boucle principale génèrent ceci:
Après cela, tout ce qui doit être fait est d'éliminer la première ligne, qui autrement deviendrait la contremarche indésirable pour l'étape inférieure, et de transposer.
la source
Python 2,
807774 octetsDébarrassé du double
exec
et tout ranger dans l'unprint
!la source
Clip, 46
Explication
la source
CJam,
3632 octetsTestez-le ici.
J'ai également essayé d'utiliser une formule explicite, mais c'est plus long dans CJam ... peut-être que cela aide quelqu'un d'autre:
Explication
J'ai trouvé que l'escalier peut être construit beaucoup plus facilement si vous a) transposez la grille et b) inversez les lignes:
Donc, je construis d'abord cela, puis je inverse, puis je transpose.
la source
Python 2, 59
Les 21 lignes sont indexées par
n
in[20,19,...,1,0]
. Imprime d'abord 6 espaces pour chaque "étape" vers le haut (moins 1), calculé commen/5*6
. Imprime ensuite cinq espaces, sauf que ceux-ci sont plutôt des traits de soulignement pour des multiples de cinq. Enfin, imprime une ligne verticale, à l'exception de la ligne supérieuren=20
.la source
JavaScript,
1151079694898783 octetsC'est trop long pour gagner, mais c'est la première fois que je trouve une réponse sur PCG.SE, et je suis un peu fier d'avoir fait quelque chose de postable.
Avec quelques conseils syntaxiques utiles, j'ai raccourci le code de manière significative - même en dessous du seuil de la barre de défilement!
la source
alert
. Si vous l'exécutez dans la console, cela fonctionne très bien sans lui. De plus, le point-virgule à l'intérieur de la dernière accolade n'est pas nécessaire. Vous pouvez enregistrer 1 octet en utilisant(y/5-.2)
au lieu de((y-1)/5)
s+='\n'
arrièrey--
et vous débarrasser des accolades pour qu'il ressemblefor(s='',y=21;y>0;y--,s+='\n')
. J'ai également initialisé les s à l'intérieur de la boucle for pour que votre code soit une seule instructionfor(s='',y=22;--y;s+='\n')for(x=0;++x<29;)s+=6*~~(y/5-.2)+5-x?5*~~(x/6)+1-y?' ':'_':'|'
si vous retournez votre expression ternaire, vous pouvez testernumber - x
ce qui est 0 si les deux termes sont égaux, vous économisant 2 octets supplémentaires.for(s='',y=22;--y;s+='\n')for(x=0;++x<29;)s+=6*~(~-y/5)-~x?4+5*~(x/6)+y?' ':'_':'|'
83 ansECMAScript 6,
14213812991 octetsUn merci spécial à @ edc65 pour avoir vraiment retravaillé cela.
Afficher l'extrait de code
La logique de la version originale vérifie @ edc65 commente son évolution.
la source
new
constructeur en toute sécurité avantArray
d'enregistrer quelques octets.new
c'était nécessaire.repeat
[1,2,3,4].map((a,b)
et en utilisant juste b =>[0,1,2,3].map(b
(-4)MATLAB, 68 octets
J'ai le fort sentiment que MATLAB devrait pouvoir faire mieux, mais je ne vois pas de moyen.
Crée l'escalier à l'envers et le retourne. Mon thaumomètre s'est cassé à cause de toutes les constantes magiques autour.
'|'
est intentionnellement laissé tel quel (au lieu du point de code ascii) pour initialiserp
etw
comme un tableau de caractères.la source
'|' = 124
de toute façon, donc cela ne coûte pas de caractères supplémentaires.Rubis, 48
Ancienne approche, 68
la source
'_'
peuvent s'écrire?_
. 3. Les retours à la ligne peuvent être intégrés directement dans les chaînes (vous pouvez donc le faire"<linebreakhere>|"
). 4. Les parenthèses autour qui ne sont pas nécessaires. La finaleputs
peut être remplacée par$><<
(ce qui vous permet de vous débarrasser de l'espace, même après utilisation?_
). Continuez! :)(1..4).map
par4.times
puis utiliser à la4-i
place de5-i
.Julia, 83 octets
Dans Julia, la concaténation de chaînes est effectuée à l'aide de l'
*
opérateur et la répétition de chaînes est effectuée à l'aide de^
.la source
> <> ,
108104100 octetsUne solution simple> <>, utilisant la même stratégie que ma réponse Python . La principale différence est que> <> n'a pas de multiplication de chaînes (ni même de chaînes), donc tout cela se fait avec des boucles.
Explication
la source
Groovy,
9871 octetsJe suis sûr que cela peut être réduit d'une manière ou d'une autre :) raccourci par @Score_Under
la source
' '*(i-(i-1)%5)
, supports remove du monde('_____'+(i==25?'':'|'))
, remplacez le'_____'
par'_'*5
, et si vous retournez la dernière condition , vous pouvez utiliser% comme opérateur d'inégalité peu orthodoxe:(i%25?'|':'')
. Cela devrait vous ramener à 71.Perl, 50
Essayez- moi .
la source
T-SQL, 276 octets
la source
Visual FoxPro 9.0, 261 octets
n = nombre d'étapes
total de 175 caractères, mais a dû sortir dans un fichier pour s'afficher correctement - donc moins 43 caractères pour les opérations sur les fichiers = 132 caractères.
Note au répondeur: le nombre d'octets est pour le code source de travail absolu, et le compteur d'octets indique que c'est 261 octets, donc c'est le cas.
la source
Bash (+ tac de coreutils): 110 octets
Cela peut être collé directement dans le terminal.
la source
|tac
, cela ne fonctionne pas tout à fait. Et j'ai couru ça sur Git Bash, donc je devrais me suicider.code machine x86, 48 octets
Équivalent du code d'assemblage:
Production:
Désolé que la sortie soit différente; J'espère que c'est acceptable.
Cela a été exécuté dans DOSBOX
la source