Défi
Votre tâche dans cette question consiste à écrire un programme ou une fonction nommée qui prend un entier positif n
(supérieur à 0) en entrée via STDIN, ARGV ou des arguments de fonction et génère un tableau via STDOUT ou une valeur renvoyée par la fonction.
Cela semble assez simple? Voici maintenant les règles
- Le tableau ne contiendra que des entiers de
1
àn
- Chaque entier de
1
àn
doit être répétéx
fois oùx
est la valeur de chaque entier.
Par exemple:
Contribution:
5
Production:
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]
Le tableau peut être trié ou non.
Il s'agit de code-golf, donc le gagnant est le code le plus court en octets.
Prime
Multipliez votre score par 0.5
s'il n'y a pas deux entiers adjacents dans votre tableau de sortie identiques.
Par exemple pour n = 5
, une telle configuration serait
[5, 4, 5, 4, 3, 4, 5, 2, 5, 3, 1, 2, 3, 4, 5]
la source
/⍨⍳n
Ruby (récursif), 41 octets * 0,5 = 20,5
Ou en utilisant un lambda (comme recommandé par histocrat et Ventero): 34 octets * 0,5 = 17
(appel en utilisant
r[argument]
)la source
n=->x,i=1{...n[x,i+1]...
) et quelques autres avec[*i..n]
.r=->n,i=n{i>0?[*i..n]+r[n,i-1]:[]}
Pyth , 9 octets * 0,5 = 4,5
Avec l'aide de @FryAmTheEggman
Essayez-le en ligne.
Explication
où
Q
est l'entrée.la source
Haskell, 31 caractères = 15,5 points
27 personnages sans bonus
Battu par Proud Haskeller
la source
g n = [y|x<-[n,n-1..1],y<-[x..n]]
C, 22 = 44 octets * 0,5
La fonction
h
prend deux paramètres. Le premier est un nint
spécifiant . Le second est un qui est le tampon de sortie.int*
Programme de test
la source
Pyth -
1510 * .5 = 5Essayez-le en ligne.
Attend une entrée sur stdin. Algorithme découvert indépendamment. Merci @ Sp3000 de m'avoir aidé à coller le dernier Q: P Aussi, ironie? XD
Explication:
la source
CJam,
1215 octets * 0,5 = 7,5Il s'agit d'un programme complet de STDIN à STDOUT. Il concatène des suffixes croissants du
1 ... n
plage, ce qui garantit qu'il n'y a pas deux nombres adjacents identiques.Testez-le ici.
la source
Python 2, 53 octets * 0,5 = 26,5
Emprunté sans vergogne à l'idée de VisualMelon
la source
Haskell, 34 octets * 0,5 = 17
C'est la première fois que j'utilise Haskell pour jouer au golf. Appelez avec
g <number>
.la source
Bash + coreutils, 28/2 = 14
Voler sans vergogne l'idée de pgy et jouer au golf:
Pure bash (sans coreutils), 30/2 = 15
Eval, évasion et enfer d'expansion:
la source
GolfScript (14 octets * 0,5 = score 7)
Démo en ligne
Je pense que cela est probablement similaire à certaines réponses existantes en ce qu'il construit le tableau
concat( [n], [n-1, n], [n-2, n-1, n], ..., [1, 2, ..., n] )
Malheureusement, je n'ai pas pu jouer au golf sans doute plus élégant:
qui place l'entrée
x
dans un tableau puis l'applique deux fois{,{x\-}/}%
, qui mappe chaque élément d'un tableau avec un décompte de ce nombre d'élémentsx
.la source
C # - 81 (161 octets * 0,5)
Travail simple en C #, avec un peu de chance, le bonus sans chiffres Lit un int dans stdin, écrit un tableau comme l'exemple dans stdout.
Plus lisible:
Exemples de sortie:
la source
System.Console
est statique, vous ne pouvez pas l'affecter à une variable, mais en C # 6 ou quoi que ce soit à côté, vous pourrez le faireusing System.Console;
(using System;
ne paie pas dans ce cas), je ne sais pas ce que je pense de cette fonctionnalité, affectent beaucoup de vieilles questions de golf pour cette raison précisément;)using C=System.Console
économise 3 octets, et c'est probablement ce que @MarkKnol voulait dire (désolé!), Une négligence honteuse de ma part.JavaScript, ES6, 41 octets
Cela crée une fonction
f
qui peut être appelée commef(6)
et renvoie le tableau requis.Cela utilise une approche récursive, où chaque itération crée un tableau d'
i
éléments tous valorisési
et concatène un tableau renvoyé parf(i-1)
avec la condition d'arrêt dei==0
.Fonctionne sur le dernier Firefox.
la source
Haskell, 14 = 28 octets / 2
exemple de sortie:
24 octets sans bonus:
la source
=<<
aider à éviter les espaces blancs? J'ai l'impression que c'est possible, mais je serais surpris si vous n'aviez pas déjà envisagé cela.=<<
j'aurais besoin de parenthèses pour le lambda>>=
?(
,[
,=
,,
, après les opérateurs, etc.let \x->y = (2+) in (x,y)
semble un peu impossible.Haxe , 53 octets
Fonctionne avec l (6); en raison de la compréhension du tableau.
Test en ligne http://try.haxe.org/#741f9
la source
vba, 76 * 0,5 = 38
la source
For Z=1 To
surFor Z=1To
Next:Next
àNext x,Z
R, 44 * .5 = 22
Un test rapide
la source
JavaScript, ES6, 66 octets * 0,5 = 33
En s'appuyant sur l'approche récursive d'Optimizer , nous pouvons créer des séries descendantes de longueur décroissante, comme
[4,3,2,1, 4,3,2, 4,3, 4]
.Au lieu de créer des sous- tableaux de même valeur avec
Array(i).fill(i)
, nousundefined
créons des sous-tableaux remplis de la longueur appropriée avecArray(n).fill()
, puis modifions les valeurs en une exécution décroissante à l'aide de.map((v,x)=>i-x)
. En outre, nous définissons et récurrons sur une fonction intérieureg
; la fonction externef
n'existe que pour stocker la valeur dei
whileg
récursive.la source
T-SQL, 176 * 0,5 = 88
Puisque vous avez semblé manquer le T-SQL @Optimizer, le voici dans toute sa splendeur verbeuse :).
Deux options de fonction, une fonction scalaire et une valeur de table en ligne. La fonction Scalar utilise des boucles while pour récurrer et renvoie une chaîne de nombres, où la fonction Valeurs de table en ligne utilise un CTE récursif pour une séquence et renvoie une table. Bien sûr, ceux-ci ne seront jamais compétitifs, donc je n'ai pas passé beaucoup de temps à jouer au golf.
Fonction de valeur de table en ligne, 176 * .5
Appelé comme suit
Exemple SQLFiddle
Fonction scalaire, 220 * .5
Appelé comme suit
Exemple SQLFiddle
la source
Mathematica, 34 * 0,5 = 17
la source
perl, 26 octets
la source
$n
.Unable to parse postcircumfix:sym<{ }>, couldn't find final '}' at line 3
. Je l'ai essayé sur ideone.com.JavaScript (lisible), 131 octets
Je suis nouveau sur Code Golf donc ce n'est pas le meilleur
JavaScript (moins lisible), 87 octets
Minifié à l'aide de jscompress.com
la source
TECO, 25 octets * 0,5 = 12,5
Ce qui précède bat à peine la version sans bonus à 13 octets:
la source
C #,
11499 * 0,5 = 49,5 octets(Avec un peu d'aide de la réponse de VisualMelon) Edit: et le commentaire de James Webster
Non golfé:
Il y a une version dangereuse que j'ai prise sans vergogne de la réponse C de feersum, mais je ne suis pas sûr à 100% qu'elle correspond aux règles puisque vous devez allouer la mémoire avant d'appeler la méthode.C # (dangereux), 82 * 0,5 = 41 octets
Appelé comme suit:
Selon la suggestion de VisualMelon (merci!), Le code dangereux peut être recréé avec un code sûr qui réduit encore plus la taille! Se pose toujours la question de savoir si la création du tableau de résultats final peut être effectuée en dehors de la méthode.
C #, 72 * 0,5 = 36 octets
la source
int[]
directementvoid A(int n,int[]p){int z=0,m=n,i;while(m-->0)for(i=m;i++<n;)p[z++]=i;}
- je conviens que c'est probablement un peu douteux, en ce qui concerne les règles;)System.Runtime.InteropServices.Marshal.Copy(new IntPtr(stuff), stuffArray, 0, length);
-elle être ?var a=new int[(int)((n/2f)*(n+1))];
je pense, le ramène à 109(n*(n+1)/2)
Bash avec seq, expr et xargs = 59/2 = 29,5
Enregistrez-le et exécutez avec le nombre comme premier argument.
la source
C #,
116115 + 33 = 148 octetsPas le code le plus court, mais ... ça marche quand même: P
Nécessite cela en haut du fichier (33 octets):
Version sans golf:
la source
J, 23 * 0,5 = 11,5
J, 11
la source
23 * 0.5
est11.5
, non10.5
.-1
Octet:,f=.-[:;<@|.@i."0@>:@i.
rendant les scores égaux!JavaScript (ES6) 29 (58 * 0,5)
Modifier supprimer; thx @Optimizer
Test dans la console FireFox / FireBug
Production
Non golfé
la source
ECMAScript6, 67 * 0,5 = 33,5 octets
Assez content avec celui-ci ... Il fait environ un quart de la taille de mon original.
f(4)
Retour:Ancienne réponse:
C'est mon premier tir au golf de code ... Je veux toujours obtenir ce bonus de 0,5x. Toutes les suggestions sont les bienvenues!
Appelé avec f (n).
la source
d
, (2)a=b=c=[]
dans la partie déclaration, (3)c[a].map(e=>a)
(4)b.push(...c)
C #, 108 octets * 0,5 = 54
Merci à VisualMelon pour avoir travaillé dur! Je pensais que j'essaierais de le presser autant que possible.
(114 octets * 0,5 = 57, si vous insistez pour utiliser .ToArray () pour retourner int [])
la source