Défi
Le défi est simple: imprimer un serpent .
Vous obtiendrez la longueur du serpent en entrée.
Un serpent de longueur 2 ressemble à ceci:
==(:)-
Un serpent de longueur 7 ressemble à ceci:
=======(:)-
En d'autres termes, la longueur d'un serpent est le nombre de signes égaux devant la tête .
Usage
Disons que j'ai fait une implémentation C ++ et que je l'ai compilée ./getsnake
.
Je pourrais le faire comme ça:
$ ./getsnake 10
==========(:)-
Clarifications
- Les failles standard ne sont pas autorisées.
- Vous pouvez obtenir des entrées et des sorties de n'importe quelle manière acceptable.
- Vous pouvez supposer que toutes les entrées fournies sont des entiers positifs.
- Vous pouvez écrire une fonction au lieu d'un programme régulier.
code-golf
string
ascii-art
kolmogorov-complexity
InitializeSahib
la source
la source
Réponses:
Hexagonie , 33 octets
Je ne gagnerai pas, mais toujours cool. Pourrait être en mesure de jouer au golf plus.
Essayez-le en ligne!
Golfé:
Formaté:
Coloré (fabriqué à l'aide du colorant hexagone de Timwi )
Explication:
Boucle, affichez "=" jusqu'à ce que le compteur atteigne 0.
Impression "("
Impression ":"
Impression ")"
Les valeurs ci-dessus ont été générées à l'aide d'un simple script python. Cependant, j'ai en quelque sorte manqué de place pour le "-". J'ai donc dû recourir à des astuces plus avancées.
Lorsque le programme imprime ")", la valeur de la cellule n'est pas 41, elle est 1065. Hexagony modifie simplement la valeur lors de l'impression. Il s'avère que, (1065 * 1000 + 4)% 256 = 44, juste à une de 45, la valeur ascii pour "-". Ensuite, je viens d'incrémenter, d'imprimer et d'insérer un @ quelque part après l'impression.
la source
Gomme de cannelle, 7 octets
Essayez-le en ligne.
Aurait été de 6 octets avec l'ancienne
p
syntaxe: /Explication
Décompresse jusqu'à
p~=~(:)-
, lap
scène lit alors simplement l'entrée et répète les=
n fois.la source
Brian & Chuck , 31 octets
Entrée sous la forme d'une valeur d'octet , par exemple l'entrée
!
donne un serpent de longueur 33.Essayez-le en ligne!
Cela fait longtemps...
Explication
Une introduction rapide à Brian & Chuck:
,
(entrée) et seul Chuck peut utiliser.
(sortie). En plus de<
et>
il y a{
et}
qui déplacent la tête de bande vers la cellule zéro suivante (ou dans le cas de{
l'extrémité gauche de la bande s'il n'y a pas de cellule zéro sur le chemin). Au lieu de[...]
, le seul flux de contrôle est celui?
qui bascule le contrôle sur l'autre instance si la cellule actuelle n'est pas nulle. La première instruction exécutée sur l'autre cellule est celle qui suit la condition. Et enfin,_
c'est juste un alias pour les octets nuls, pour plus de commodité.Maintenant, le code. Brian commence par ceci:
Cela lit l'entrée dans la première cellule de Chuck, puis déplace la tête de bande vers la gauche avec
{
(ne fait rien pour l'instant) et décrémente l'entrée avec-
avant de commuter le contrôle pour Chuck si la valeur est toujours non nulle. Cela commence la boucle principale. Chuck exécute ensuite ce bit:Cela déplace la tête de bande de Brian jusqu'à la fin, déplace deux cellules vers la gauche
=
et l'imprime avant la tête de bande complètement à gauche et remet le contrôle sur Brian. C'est ainsi que les boucles fonctionnent généralement en B&C.Une fois l'entrée réduite à zéro, la
?
bande de Brian ne fera plus rien. Puis Brian exécute cette partie:Ce
):(=
ne sont pas des opérations, donc le code réel est juste>}-?
. Nous quittons la cellule zéro avec>
, remontons à_
avec}
, la décrémentons pour la rendre non nulle et passons à Chuck avec?
. Ensuite, le dernier bit sur Chuck est exécuté:Cela imprime simplement les cinq caractères devant Chuck, c'est-à-dire
=(:)-
. Notez que nous devons en imprimer un autre=
car la boucle principale n'est exécutée queN-1
pour les entréesN
.la source
V , 8 octets
Essayez-le en ligne!
V utilise l'encodage "Latin1".
Explication:
la source
Rétine , 10 octets
Essayez-le en ligne!
Il s'agit d'une simple substitution d'expression régulière.
Il correspond à
.+
ce qui correspond à l'entrée entière, puis la remplace par$*=(;)-
.Le
$*
est une caractéristique unique de Retina: c'est l'opérateur spécial de répétition de caractères.Par exemple,
5$*x
deviendraitxxxxx
.Dans le cas où l'argument précédent est absent, la correspondance entière est utilisée comme argument par défaut.
la source
Python, 21 octets
Ideone it!
la source
"="*input()+"(:)-"
Haskell, 25 octets
'='<$[1..n]
est équivalent àreplicate n '='
.la source
Java 8, 52 octets
Suite de tests. (Compiler> Exécuter)
Crédits .
la manière traditionnelle,
615453 octets7 octets grâce à Kevin Cruijssen.
1 octet grâce à Dom Hastings.
la source
for(int i=0;i<n;i++)
peut être joué au golffor(;n>0;n--)
, puisque vous n'avez de toute façon pas besoin de l'entrée pour autre chose que la boucle for.for(;n-->0;)
pour enregistrer un autre octet!Gelée , 9 octets
Essayez-le en ligne!
la source
C, 38
Essayez-le sur ideone.
la source
f(n){~-printf(n?"=":"=(:)-")||f(~-n);}
.f(n){for(;n;printf(n--?"=":"(:)-"));}
pour 1.05AB1E,
109 octetsExplication
Essayez-le en ligne
1 octet économisé grâce à Adnan.
la source
'=×"ÿ(:)-
pour 9 octets :). Cela utilise l'interpolation de chaînes.ÿ
fait :)Javascript, 23 octets
la source
n(3)
et j'ai reçu uneUncaught ReferenceError: n is not defined
erreur ...x=n=>"=".repeat(n)+"(:)-"; x(7);
x=
et être changée en 25 caractères?C #, 28 octets
la source
Python , 24 octets.
input()
obtient l'entrée de l'utilisateur*
, lorsqu'il est utilisé sur des chaînes et un entier, crée une nouvelle chaîne, qui est constituée de copies jointes de l'original. Par exemple:"hello "*3
sortieshello hello hello
.En multipliant
=
etinput()
, vous obtenez une chaîne de=
la longueur spécifiée par l'utilisateur.L'utilisation
+
joint deux cordes, dans ce cas, notre corps"=…="
avec notre tête,"(:)-"
pour faire le serpent.print
sort le résultat.la source
GolfScript,
1110 octetsMultiplie "=" par entrée et ajoute la tête.
-1 merci à Leaky Nun
la source
Mathematica,
2120 octetsFonction anonyme. Prend un nombre n en entrée et retourne un serpent de longueur n en sortie.
"="~Table~#
génère une liste{"=", "=", ..., "="}
de longueur n ,<>"(:)-"
concatène les éléments de la liste et les ajoute"(:)-"
à la chaîne résultante.la source
"="~Table~#<>"(:)-"&
R,
3227 octetsCette solution est assez simple, la
rep
fonction répète le premier élément ("="
)scan()
fois, ce qui est en fait l'entrée de l'utilisateur.MODIFIER :
Réponse légèrement plus courte, en utilisant
scan()
directement.Alternativement,
pour un serpent non haché ( 34 octets )
la source
sep=""
est nécessaire ici, sinon votre apparence de serpent comme celui qui a traversé le chemin de fer:= = = (:)-
.sep
quand même une note annexe;)Lot, 68 octets
la source
CJam,
1311 octetsTestez-le ici.
-2 octets grâce au quartata
la source
'=*
au lieu de{'=}*
.Perl 6 ,
16 1512 octetsExplication:
Usage:
la source
JAISBaL , 9 octets
Verbeux:
Testé avec JAISBaL-0.0.7 (Le .jar compilé vient d'être poussé, mais la source est sur git depuis un moment)
la source
#
avant le nom de la langue pour le faire ressembler à tout le monde.PowerShell v2 +, 19 octets
Programme complet. Prend des données
$args[0]
, utilise la multiplication des cordes pour construire le corps, puis la concaténation des cordes pour clouer sur la tête.la source
"$("="*[int]$args[0])(:)-"
C,
464543octetséconomisé 2 octets grâce à owacoder! économisé 3 octets grâce à rici!
Essayez-le sur Ideone!
la source
-->
opérateur mystérieux frappe à nouveau.>0
et enregistrer deux octets.f(n){while(4-printf("=\0(:)-"+2*!n--));}
Cheddar, 15 octets (non compétitif)
Une réponse simple.
la source
Sesos , 11 octets
Hexdump:
Essayez-le en ligne!
Assembleur:
la source
K, 17 octets
Exemple;
Explication;
la source
-1(
...);
?{(x#"="),"(:)-"}
Perl, 16 + 1 (
-p
indicateur) = 17 octetsBesoin d'un
-p
drapeau, alors exécutez avec:la source
Minkolang 0,15 , 12 octets
Essayez-le ici!
Explication
la source
Befunge-98, 24 octets
Prend une entrée numérique de l'utilisateur, puis imprime le serpent.
la source
Matlab / Octave, 22 octets
Il s'agit d'une fonction anonyme.
Essayez-le sur Ideone .
Explication
Supposons
n= 5
.1:n
produit le vecteur ligne[1 2 3 4 5]
.~(1:n)
annule chaque entrée, donc ça donne[0 0 0 0 0]
....+61
ajoute61
à chaque entrée, donc ça donne[61 61 61 61 61]
.61
est la valeur ASCII du caractère=
.[... '(:)-']
concatène cela avec la chaîne'(:)-'
. Cela se convertit automatiquement[61 61 61 61 61]
en chaîne'====='
avant la concaténation.la source