Ecrivez un programme ou une fonction qui prend un entier positif (via stdin, une ligne de commande ou une fonction arg) et affiche ou renvoie une chaîne de ce grand nombre de ces petits triangles en mosaïque, en alternant leur direction:
/\
/__\
Ce seul triangle est la sortie si l'entrée est 1
.
Si l'entrée est 2
, la sortie est
____
/\ /
/__\/
Si l'entrée est 3
, la sortie est
____
/\ /\
/__\/__\
Si l'entrée est 4
, la sortie est
________
/\ /\ /
/__\/__\/
Etc. Votre programme doit prendre en charge des entrées allant de 2 16 à 1 = 65535.
Détails
- Le triangle le plus à gauche pointe toujours vers le haut.
- Il peut y avoir des espaces de fuite mais il peut ne pas y avoir d’espaces de tête inutiles.
- Il peut y avoir un retour à la ligne optionnel.
- Notez que pour
1
une sortie de deux lignes, sinon trois. Ceci est requis. - La soumission la plus courte en octets l' emporte.
SQL,
182175173187 octetsNon pas que ce soit jamais le plus court, mais il est toujours amusant d'essayer de minimiser sql;) lol Je l'ai fait dans Oracle 11, cependant, il devrait s'agir de SQL de base. [edit] comme indiqué, je n'ai pas appliqué la règle quand input = 1 - affichez seulement 2 lignes. Je ne peux pas penser à un meilleur moyen de le faire, cependant, j’ai économisé quelques octets en modifiant la logique v;) ajouter 2 à l’avance permet d’économiser quelques octets en évitant de le répéter plus tard [/ edit]
[edit1] a supprimé certains espaces inutiles [/ edit1] [edit2] a été modifié && i en juste & i. Il réduit 2 caractères, mais oblige l'utilisateur à saisir le nombre de triangles deux fois ...: PI a compris que mes "bonnes habitudes de codage" en utilisant && i coûtaient 2 octets !! L'horreur!! [/ edit2]
Explication (note: j'utilise && 1 dans cette explication, donc elle ne demande qu'une seule fois, le & 1 ci-dessus économise de l'espace de code, mais invite plusieurs fois;))
Sortie
la source
from
? Si c'est le cas, cela vous fera économiser un octet.Python 2,
8988878583 nommé / 81 non nommé(Merci à @orlp pour un octet et à @xnor pour trois autres)
C'est une fonction qui prend un int
n
et retourne les triangles sous forme de chaîne en utilisant une approche ligne par ligne.par exemple
print f(10)
donnePour la première ligne, au lieu de
(n>1)*
nous utilisons1%n*
, puisque1%n
vaut 0 sin == 1
et 1 sin > 1
.la source
" /\\ "
en" /\ "
."\n".join()
3 éléments, même si la liste est utilisée pour supprimer conditionnellement le premier élément. Peut-être que quelque chose commeb*(x+"\n")+y+"\n"+z
est plus court?JavaScript (ES6), 101
109Bien trop long
Explication
Utilisation de la grosse flèche pour la définition de la fonction. De plus aucun
{}
bloc: le corps de la fonction est une expression unique qui est la valeur de retour.f=(a,b,c)=>expr
est équivalent àDans une seule expression, vous ne pouvez pas utiliser d'instructions telles que
if
ouvar
, mais?:
fonctionnent bien au lieu deif else
w
est le deuxième paramètre (non utilisé) de la fonctionz
Nous pouvons réécrire la
f
fonction en tant queTest dans la console Firefox / FireBug
Sortie
la source
w
n=>(n>1?' '+'____'.repeat(n/2)+'\n':'')+' /\\ '.repeat(n).slice(0,n*2+2-n%2)+'\n'+'/__\\'.repeat(n).slice(0,n*2+1+n%2)
à 119 (délibérément, en n'utilisant pas de chaînes de modèle, etc. pour correspondre à votre réponse).CJam,
555351 octetsJ'ai essayé de porter ma réponse en Python et elle s'est avérée être plus courte que les autres CJams.
Lien permanent .
la source
Haskell
155153139131 octetsJ'ai trouvé une approche légèrement différente qui s'est avérée être plus courte que ma méthode d'origine. Ma tentative initiale est conservée ci-dessous. Comme avant, les astuces de golf sont appréciées.
Merci à Nimi pour les conseils de golf.
Tentative précédente
197179 octetsla source
(mod n 2)==0
esteven n
ou mieux utiliserodd n
et échanger lathen
etelse
partie.concat.take(div n 2).repeat
Entake(4*div n 2).cycle
effet, tous les éléments de la liste ont une longueur de 4. Attribuez des noms abrégés à des fonctions portant des noms longs, par exemplez=zipWith
, puis utilisezz
. Vous pouvez supprimer quelques espaces...repeat""else[...
.foldr z["","",""]
c'estfoldr1 z
parce que la liste à plier n'est jamais vide. Au lieu deall(==' ')
vous pouvez utiliser==" "
(<- deux espaces entre-deux), car il est utilisé pour supprimer la ligne vide dans le cas de n = 1 et ici la première ligne est" "
. La première définitiont
peut être écrit en une seule ligne:t n|odd...
.CJam,
7368636260 octetsCela a certainement besoin de jouer au golf ...
Testez-le ici.
Explication
la source
Julia, 115 octets
Cela crée une fonction non nommée qui accepte un entier et imprime les triangles. Pour l'appeler, donnez-lui un nom, par exemple
f=n->(...)
.Ungolfed + explication:
Exemple de sortie:
Je suis assez déçu que ce soit si long. Je suis sûr qu'il y a de nombreuses opportunités de jouer au golf mais elles ne me sont pas claires pour le moment. Faites-moi savoir si vous avez des suggestions ou si vous souhaitez des explications supplémentaires!
la source
CJam,
68 6260 octetsAutant que je sache, cette approche est complètement différente de celle de l'autre solution de CJam. Cela peut être beaucoup joué au golf.
Essayez-le en ligne ici
la source
C # 190
Ungolfed
la source
while
boucle, utilisez plutôt unefor
boucle. Dans ce cas, vous pouvez économiser 2 octets en incluant la définition dem
dans l'initialisation de la boucle for etb=!b
dans la dernière chose, peu importe le nom. Vous pouvez également faire des économies en remplaçantstring
etbool
avecvar
. Vous n'avez pas non plus besoin desn>1
clauses "()" autour des clauses ets+=
vous pouvez utiliser la clause sans court-circuit&
plutôt que l'&&
absence d'effets secondaires ou de déréférences pouvant aller mal. Enfin,1>0
est plus court quetrue
;)C #,
257183 octetsEdit: Merci aux conseils de @VisualMelon, enregistré 74 octets.
Je sais que le golf n’est pas la meilleure langue pour jouer au golf, mais je suis surtout intéressé à en apprendre davantage sur les diverses nuances de C #, plutôt que de remporter la compétition. Ceci est fondamentalement un port de cette réponse Pyth.
Je pense que les boucles for pourraient être jouées plus loin, mais je ne sais pas trop comment, étant donné les déclarations tertiaires qui y sont incorporées.
Exemple (1, 2, 3, 10):
Ungolfed:
la source
s+=
votre ami est-il? En effet, vos boucles peuvent être un peu plus compactes. La joie / horreur des opérateurs++
et--
signifie que vous pouvez effectuer la plupart du travail dans le contrôle conditionnelfor(i=0;i++<=t;)
(ceci vérifie sii
est inférieur ou égal àt
puis l' incrémente). Vous feriez bien de définir l’int i
extérieur de la boucle for et de la réutiliser, et puisque vous pouvez garantir quei
cela ne sera jamais négatif, vousi%2==0
pouvez l’échangeri%2<1
. Avec ces changements, un score inférieur à 200 octets est facilement atteint.Enumerable
requiert généralement uneusing System.Linq
directive, et je pense qu'il est généralement prévu que de telles clauses soient incluses. Cependant , dans ce cas, le seul LINQ pouvant être remplacé par unvar s=" "+string.Join("____",new string[1+t/2])+n;
non-LINQ, et est plus court que le code actuel;) Il joint beaucoup de chaînes nulles à ce qui nous importe vraiment, "____" (le 1 + t / 2 étant donné que nous avons besoin d’une autre chaîne nulle pour un autre "____" avant) La variablen
est déclarée comme "\ r \ n".Console.Write
place deConsole.WriteLine
Java, 185
Explication
la source
C # -
151146141138Inspiré par la réponse de @ bacchusbeale
Ungolfed
la source
new String
est une nouvelle pour moi! Vous semblez avoir manqué votret=""
version golfée, bien que la meilleure chose à faire serait d’initialisert
comme "\ n". Vous pouvez enregistrer deux octets en ajoutant à l't
endroit où vous feuilletezb
, sauver la « {} » sur la boucle for:t+=(b=!b)?"/":"__\\"
.t
avants
et ajoutezt
à la chaîne plutôt que"\n"
;)Aller,
156144Ungolfed:
Le seul véritable truc ici (et ce n’est même pas bon) consiste à utiliser 3 accumulateurs pour que je puisse condenser la solution en une boucle.
Le code peut être exécuté ici: http://play.golang.org/p/urEO1kIjKv
la source
c += `__\`
au lieu de laif i<n{c+="_"}
> <> (Poisson) ,
215183156 octetsEdit: Notepad ++ me donnait 5 octets supplémentaires à cause de la CR, donc le compte modifié en conséquence
Un peu plus de golf, mais c'est mon premier programme de pêche jusqu'à présent> _ <L'obligation de ne pas avoir une première ligne vierge pour 1 triangle double la taille du programme.
Peut tester à http://fishlanguage.com/ (Int sur la pile initiale pour la longueur)
Explication:
la source
perl
109108106Je pense que ça va pour mon premier golf. J'ai utilisé la section de Vynce pour la première ligne, avec le reste de mon code pour résoudre le problème de la nouvelle ligne avec 1 triangle.
Maintenant pour voir si je peux le raccourcir :)
Edit : espaces blancs
Edit 2 : remplacé
"\n"
par$/
la source
C89, 150
Une version non-golfée:
Le résultat:
La pile déborde si j'entre
65535
(mais pas si vous compilez avec-O3
!), Mais théoriquement ça devrait marcher ;-)edit: le programme satisfait maintenant à l'exigence voulant que seules deux lignes soient générées si elles
1
sont transmises au programme edit 2: useint*
au lieu dechar*
la source
main
quemain(c,v)**v;
si cela fonctionne.c
ou enn
tant que variable globale, afin de ne pas avoir à passer ce paramètre àr()
. Je ne pense pas que votre réponse soit conformeNote that for 1 the output is two lines long but otherwise it's three. This is required.
error: expected declaration specifiers before ‘*’ token main(c,v)**v;{
n
ouc
plus courte non plus.int**
?Stdlib C ++, 194 octets
Programme de test:
la source
Bash,
166127125119105 octetsDans une fonction:
Avec quelques présentations:
Peut rendre (si vous avez installé figlet ):
Sauvegarde 2 caractères si entrée de variable au lieu de
$1
: 103Dans la boucle:
Rendra (environ) la même chose:
la source
Fusain , 27 octets (sans compétition)
Non compétitif car le langage postdate le défi.
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Explication:
Générez une liste de bits alternés de longueur
n
et passez-les en boucle.Dessiner
____
sans déplacer le curseur.Sur le premier triangle et sur tous les autres, tracez le
/
côté gauche .Dessinez le
\
côté sans déplacer le curseur.Sur le deuxième triangle et sur tous les autres, tracez
\
à nouveau le côté gauche pour déplacer le curseur.Sur le deuxième triangle et sur tous les autres, tracez le
/
côté droit sans déplacer le curseur.la source
PowerShell ,
11695 octetsUn grand merci à Mazzy et ASCII-Only pour avoir économisé 21 octets
Essayez-le en ligne!
Ne pas permettre une ligne vide pour n = 1 mangé comme
1410 octets. Cette solution estassez cérébrale,beaucoup plus intelligente maintenant avec un minimum de code répété. L'arrondi bancaire est toujours le diable.la source
C, 368 octets
C’est plus si vous comptez les
#include
déclarations, mais elles sont compilées sur gcc, bien qu’avec des avertissements, sans elles. Je sais que ce n'est pas le plus court de loin, mais j'aime toujours le fait que je l'ai fait en C.la source
#define p(c)printf(c)
est plus courte que votre fonction. Vous pouvez omettre les types de retour sur les fonctions (leur valeur par défaut estint
). Vous pouvez également définir une fonction dans unC89
style comme celui-cimain(c,v)char**v;{}
. C'est court pourint main(int c, char** v){}
Perl (simple)
131125120premier passage assez simple:
oh qui a besoin d'int explicite?
la source
Prolog, 126 octets
Invoquer comme
$3
.Plus lisible:
Exemple:
la source
C #: 1 ligne LINQ, 198 octets
la source
Rétine , 88 octets (sans compétition)
Non compétitif car le langage postdate le défi.
Essayez-le en ligne! Explication:
Remplacez l'entrée par une paire de triangles.
Multipliez les triangles par l'entrée d'origine.
Divisez les triangles par 2.
Supprimez le demi-triangle restant.
Supprimez la première ligne si elle est maintenant vide.
la source
Perl 6 , 83 octets
Essayez-le en ligne!
Bloc de code anonyme qui prend un nombre et retourne une chaîne.
la source
C (gcc) ,
117115 octets-2 grâce à ceilingcat.
Toutes ces parenthèses suggèrent que quelque chose de moins maladroit est sûrement possible.
Essayez-le en ligne!
la source
05AB1E , 37 octets
Essayez-le en ligne ou vérifiez les 10 premières sorties .
Explication:
la source
Java 11, 122 octets
Essayez-le en ligne.
Explication:
la source