Votre tâche consiste à créer un programme ou une fonction qui génère une fermeture éclair d'une longueur de 10 lignes. Chaque ligne de la fermeture éclair est représentée par deux tirets --
:
--
--
--
--
--
--
--
--
--
--
Le programme / fonction prendra un pourcentage (divisible par 10) en entrée, et la sortie sera la fermeture éclair "décompressée" (tirets séparés) du haut par le pourcentage, révélant le niveau le plus bas indexé 1 répété 2 fois, avec tous les niveaux précédents répétés 4, 6, 8, ... etc. fois, tout en gardant le bas de la fermeture éclair centré.
Exemples
>>10%
-11-
--
--
--
--
--
--
--
--
--
>>50%
-1111111111-
-22222222-
-333333-
-4444-
-55-
--
--
--
--
--
>>100%
-11111111111111111111-
-222222222222222222-
-3333333333333333-
-44444444444444-
-555555555555-
-6666666666-
-77777777-
-888888-
-9999-
-10-
L'entrée (pourcentage) peut être formatée comme vous le souhaitez (50%, 0,5, 50, 5 [zéro implicite], etc.), et elle sera toujours dans la plage de 0 à 100 et divisible par 10. L'espacement dans le les exemples doivent être conservés dans votre sortie.
0%
? Sommes-nous autorisés à prendre l'entrée divisée par 10? par exemple au lieu de50%
, obtenir5
?5
?Réponses:
Python 2 -
184151146 octetsLe dernier numéro m'a un peu dérangé. Je pourrais peut-être supprimer la deuxième instruction if si je la regarde plus tard.
EDIT: Thx à mbomb007 pour supprimer 3 octets. Merci à charredgrass pour les conseils de mise en forme pour aider à supprimer des tas d'octets! :-D Merci à TheBikingViking d'avoir aidé avec encore deux octets!
la source
i>9
au lieu dei==10
et supprimez l'espacerange(1, 11)
.p=" "*(i-1);print"%s-%s-"%(p,str(i)*2*n);n-=1
.(i-1)
dans la dernière ligne par~-i
. Cela profite de la priorité de l'opérateur et du fait qu'un retournement de bit suivi d'une négation équivaut à la soustraction1
.range(1,11)
ensuite(i-1)
?Python 2, 74 octets
Enregistré deux octets en
exec
-ification d'une boucle, grâce à Dennis.EDIT: J'ai adopté une approche légèrement différente et enregistré deux octets supplémentaires.
la source
'-'+`x+1`*(n-x<<1-x/9)+'-'
dans laexec
boucle par'-%s-'%`x+1`*(n-x<<1-x/9)
.`x+1`*(n-x<<1-x/9)
.PowerShell v2 +,
130120116110 octetsEdit 1 - Golfed 10 octets en éliminant les
$x
variables et en refaisant légèrement la façon dont la chaîne est formulée.Edit 2 - Golfed encore 4 octets en refaisant comment l'entrée se produit et en refaisant comment
$i
est calculé chaque boucle.Edit 3 - 6 octets enregistrés par OP permettant l'entrée comme
0..10
, donc pas besoin de diviser par 10.Étonnamment difficile!
Prend entrée comme
1
,5
, etc., stockés dans$n
. Définit la$i
variable d' assistance (l'une des rares fois où une variable doit être initialisée0
dans PowerShell), puis démarre une boucle de10
à1
.À chaque itération, nous définissons start notre chaîne avec un nombre d'espaces égal à
$i
, suivi d'un pseudo-ternaire(... , ...)[]
. À l'intérieur du pseudo-ternaire, nous sélectionnons une chaîne de soit-
avec un nombre de chiffres (le plus élevé de$n-10+$_
ou0
, multiplié par 2), soit la chaîne-10
- la sélection est basée sur le fait que nous sommes à la 10e itération et notre entrée était100
. Nous concaténons cela avec une finale-
. Cette chaîne résultante est placée sur le pipeline.Enfin, nous incrémentons
$i
, et c'était vraiment délicat. Nous avons fini par utiliser une astuce de conversion binaire en entier pour incrémenter uniquement$i
jusqu'à ce qu'il atteigne$n
, puis le maintenir à la même valeur par la suite. Cela garantit que nous avons atteint la «fin» de l'empreinte de la fermeture éclair au niveau approprié.Une fois la boucle terminée, les chaînes résultantes sont toutes accumulées sur le pipeline et la sortie est implicite.
Exemples
la source
Pyth,
3734 octetsSuite de tests.
la source
Python,
9584 octetsJe ne savais pas que les lambdas étaient légaux, merci @Dr Green Eggs et Iron Man
la source
join
prendre directement un générateur.lambda p:'\n'.join(' '*min(p,l)+'-'+(2-(l==9))*(p-l)*str(l+1)+'-'for l in range(10))
(84 octets)MATL ,
484135 octetsEssayez-le en ligne!
la source
Rubis, 74 octets
Utilise le format implicite zéro spécifié dans la question, donc
40%
estf[4]
si la fonction anonyme est attribué àf
. Si un pourcentage complet est nécessaire, +6 octets pourn/=10;
Essayez-le en ligne!
la source
Python 3,
98, 90, 87, 85 octets.Prend le nombre déjà divisé par 10. Je peux probablement supprimer certaines des parens, mais c'est assez fermé pour jouer au golf.
la source
Haskell, 83 octets
la source
++"-"
?Javascript es7, 105 octets
appeler avec
la source
The program/function ...
- not snippet\n
par une nouvelle ligne réelle, vous pouvez enregistrer un octet.Python 2.7,
11310877 octetsn = entrée ()pour x dans la plage (0,10):
v = str (x + 1) * (nx) 2
si x n> 89: v = '10 '
print' '* min (x, n) + «-» + v + «-»
Jouer au golf pour la première fois. Je vais continuer, essayez d'obtenir <100.
Suppose que l'entrée est 1-10.
Edit: J'ai utilisé quelques astuces de la réponse de @LeakyNun (merci), puis je l'ai croisé un peu plus et j'ai obtenu ... essentiellement la même réponse: / Je ne connaissais pas la conversion de chaîne `int`, et 2 - booléen, laissez-moi se débarrasser de l'instruction if, ce qui m'a permis de me débarrasser de toute la variable v. Très sympa.
Ma version:
la source
n=input(); for x in range(0,10):print' '*min(x,n)+'-'+('10'if x*n>89 else str(x+1)*(n-x)*2)+'-'
Python 2, 81 octets
Ideone it!
la source
Python 2.7,
110999591 octets:Un programme complet qui prend l'entrée par un entier dans la plage inclusive
[1,10]
, où10
signifie100%
et1
signifie10%
. Peut probablement être joué un peu plus.Essayez-le en ligne! (Ideone)
la source
PHP 5.3,
9291 octetsregister_globals=1
etshort_open_tags=1
(eterror_reporting=0
)appelez en cli avec
php-cgi -f <filename> n=<number>
<scriptpath>?n=<number>
: pré-ajouter<pre>
?:
par?1:
(+1)$n
par($n=$_GET[n])
(+11)non golfé en tant que fonction (tout PHP> = 4.0.1)
suite de tests
Maintenant, c'est nouveau pour moi: PHP bat JavaScript.
Cette approche est golfée au minimum, je pense.
la source
STR_PAD_BOTH
Qu'est-ce que c'est, K&R C? Avons-nous aussi des#define
choses en PHP? :-)Julia, 73 octets
Première réponse de Julia! Les pourboires sont appréciés.
Essayez-le en ligne!
la source
Perl, 122 octets
la source
Lisp commun (Lispworks), 314 octets
non doré:
Usage:
la source
APL, 46 octets
L'argument doit être donné sous la forme d'un pourcentage divisé par 10 (c'est-à-dire: un entier simple, dans la plage [0,10]).
la source