Le récapitulatif
Créez un programme qui génère un tableau de longueur aléatoire avec des nombres aléatoires, puis appliquez une série de règles qui modifient le tableau. Une fois les règles appliquées, imprimez la somme du tableau, sauf indication contraire
Configuration de la baie
Le tableau doit avoir une longueur aléatoire comprise entre 5 et 10 inclus, avec des entiers aléatoires compris entre 1 et 20 inclus. Chaque longueur de tableau doit avoir une probabilité égale de se produire et chaque entier doit avoir une probabilité égale d'être sélectionné par élément.
Les 7 règles
Les règles doivent agir comme si elles étaient appliquées dans l'ordre (par exemple: la règle 1 agit avant la règle 2) et ne sont appliquées qu'une seule fois. Pour prouver l'application des règles, le tableau doit être imprimé sur la console après chaque application de règles et une fois avant l'application des règles.
- Si le tableau contient un 7, soustrayez 1 de chaque élément
- Si la règle 1 est appliquée et que le tableau contient maintenant un 0, ajoutez 1 à chaque élément
- Si le tableau contient un 13, excluez le 13 et tous les éléments qui suivent du tableau
- Si le tableau contient un 2, excluez tous les nombres impairs
- Si le tableau contient un 20 et que le troisième élément est pair, retournez 20 comme somme, puis terminez. Si un 20 est présent et que le troisième élément est impair, renvoyez 20 fois la longueur du tableau comme somme puis terminez.
- Si la somme est supérieure à 50, supprimez le dernier élément à plusieurs reprises jusqu'à ce qu'il soit inférieur ou égal à 50
- Si le tableau contient un 16, imprimez la somme en décimal et en hexadécimal.
Exemple
Voici un tableau initial,
[20, 2, 5, 7, 14, 8]
La règle 1 peut être appliquée:
[19, 1, 4, 6, 13, 7]
La règle 3 s'applique ensuite:
[19, 1, 4, 6]
Aucune autre règle n'est nécessaire, le programme renvoie donc 30 comme somme.
Remarques
- Je ne suis pas un golfeur de code expérimenté, bien que je puisse dire que mon dossier personnel est en Python 3 avec 369 octets .
- Les règles ne doivent pas réellement être appliquées dans l'ordre, mais doivent agir comme si elles le faisaient.
la source
[3 3 3 3 4 3]
et[4 4 3 4 4]
, chacun avec une probabilité de 50%, est conforme à ce qui est écrit sous "configuration du tableau". Je peux donc simplement sortir à19
chaque fois? (Bien sûr, ce que je pense vraiment, c'est que la définition de "aléatoire" doit être clarifiée.)If the array contains a 20, and the third element is even/odd
, que se passe-t-il si le tableau contient moins de 3 éléments à cette étape?Réponses:
Python 3,
294301287356 octetsJe ne sais pas comment vous allez empêcher les gens de contourner les règles, mais celui-ci utilise la procédure spécifiée.
+7 octets; merci à @YamB pour avoir économisé quelques octets; ajouté beaucoup plus pour corriger une erreur précédente.
-14 octets grâce à @RootTwo et moi-même et également corrigé l'erreur.
+83 octets; cela devient horriblement long car OP continue de changer les règles. -un certain nombre d'octets grâce à @ZacharyT
la source
k=[r(1,20)for _ in'-'*r(5,11)]
. Vous pouvez enregistrer un autre octet à l'aidek=[i+~-(1in k)*(7in k)for i in k]
des règles 1 et 2.1
, et vous pouvez remplacerprint
les deuxième et troisième par les dernières lignes parp
. Et vous ... n'avez pas mis à jour votre bytecount.05AB1E , 91 octets
Essayez-le en ligne! ou avec entrée
la source
Javascript (ES6),
344342340342335331333313311305298297290289283279 octetsHuzzah! Enfin à
égalité avecbattre Arnauld !À la suite de cet échange * dans les commentaires du défi et après de nombreuses délibérations, j'ai décidé d'utiliser
new Date
comme graine pour le générateur de nombres aléatoires au lieu deMath.random()
. Cela signifie que tous les entiers du tableau auront la même valeur.Essayez-le
Array(x).fill()
par[...Array(x)]
.+1
par a~
.0
retour d'un tableau vide.while
boucle.,
entre les 2 dernières instructions par un|
et en supprimant le boîtier()
.console.log
paralert
.a.includes()
.includes()
et en utilisantindexOf()
tout au long.s
variable dans un endroit où elle n'a pas besoin d'une virgule.Math.random()
parnew Date
.Version lisible et testable
console.log
au lieu dealert
pour votre santé mentale! (Meilleur affichage dans la console de votre navigateur)Afficher l'extrait de code
* Capture d'écran, au cas où elle serait supprimée:
la source
C (gcc) ,
621619593585570562557552529517500482461444442441438 octetsIl y a beaucoup de golf nécessaire ici ... Correction d'un bug où il imprimait l'hexidécimal une fois pour chaque 16 dans la liste ...
Un merci spécial à ZacharyT avec l'aide du golf
Essayez-le en ligne!
la source
JavaScript (ES6),
296295290289 octetsUn programme complet qui enregistre le tableau initial, les résultats intermédiaires et la somme finale sur la console.
Comment ça fonctionne
Cela a été compressé à l'aide de ce packer JS .
Panne:
226225 octets6964 octetsVous trouverez ci-dessous le code source d'origine avec des espaces supplémentaires et des sauts de ligne pour plus de lisibilité. Plutôt que d'appliquer des tours de golf standard, il a été écrit de manière à produire autant de cordes répétitives que possible afin de plaire à l'emballeur. Par exemple, la syntaxe
if(k=~a.indexOf(N))
est dupliquée partout maisk
n'est utilisée que dans la 3e règle.Méthodes de déballage
Le code de déballage d'origine est:
Toutes les variantes ES6 suivantes ont exactement la même taille:
La seule façon que j'ai trouvée jusqu'à présent pour raser quelques octets est d'utiliser
for ... of
:la source
n&1^1
(il n'est pas du tout compressé, mais est juste un octet plus court que!(n&1)
). J'y ai pensé à un moment donné et j'ai oublié de l'inclure.Essayez d'abord le code golf!
Déjà battu par d'autres javascript! Dangit! J'améliorerai!!! =)
Javascript ->
550402 octetsPourrait certainement être amélioré. Comprimé maintenant:
Original:
la source
Java 7,
622619618 octets-1 octet grâce à @Poke
Explication:
Exemples de sorties: Les
commentaires derrière les exemples de sorties ne sont pas imprimés, mais je les ai ajoutés à titre de clarification.
Essayez-le ici.
la source
List a = new ArrayList()
? Pourrait économiser quelques octets. Cependant, vous devrez peut-être ajouter un transtypage lors de l'exécution de l'arithmétique réelle. Sinon,Long
est plus court queInteger
List
je dois utiliser un(int)
casting cinq fois, ainsi que le changement de la boucle for-each deint
laObject
et ajouter un sixième casting. Quant àLong
: merci, cela économise 1 octet :) (il faut encore changer le for-each deint
tolong
etr.nextInt(20)+1
tor.nextInt(20)+1L
).Ruby 2.4, 260 octets
Ruby 2.4 est requis pour
Enumerable#sum
.Essayez-le en ligne! (Ni repl.it ni tio.run ne prennent en charge Ruby 2.4 pour le moment, donc cette version en ligne remplace
sum
parinject(:+)
, qui a le même comportement.)la source
R (3.3.1), 325 octets
Implémentation assez naïve; Je pense que je peux probablement le raccourcir un peu.
la source
PowerShell ,
525413 octetsEssayez-le en ligne!
Je voulais essayer celui-ci même si je pensais que je ne battrais pas déjà les réponses ici: PI a essayé de jouer au golf encore, je suis sûr que c'est possible avec moins d'octets. Trouvé une meilleure méthode pour l'hexagone, mais pourrait probablement encore s'améliorer.
J'ai dû transtyper
$a
une chaîne tellement de fois qu'il valait mieux créer un filtre pour elle ...Il y a eu pas mal de golfs faciles, comme les parenthèses et les espaces. Pourrait-il encore y en avoir?
Code un peu plus facile à lire:
la source
MATLAB, 275 octets
À l'origine, j'avais prévu une réponse Octave à une ligne, mais exiger la sortie de toutes les règles appliquées a contrecarré mes plans. Au lieu de cela, une réponse MATLAB assez simple avec quelques optimisations intéressantes, par exemple l'utilisation de
cumsum
au lieu de l'évidencewhile
pour la règle 6. Pourtant, une grande partie du nombre d'octets est gaspillée enif
s pour empêcher la sortie si une règle n'est pas appliquée.Essayez-le en ligne!
la source
Scala 587 octets un liner
Scala, 763 octets en l'état
la source
a: Array[T]
requis? Vous n'avez pas d'espaceargs:Array[String]
, c'est ce qui a abouti à mon enquête.MATLAB,
228241 octetsCela appliquera toutes les règles dans l'ordre, en imprimant la valeur du tableau après chaque étape.
Le programme plantera sur la règle 5 si le nombre d'éléments résultant est inférieur à trois. Il n'y a actuellement rien pour dire ce qui devrait arriver s'il n'y a pas de troisième élément, donc je suppose qu'un crash est acceptable.Le programme imprimera maintenant 20 s'il y a moins de 3 éléments et un ou plusieurs est un 20.Il est intéressant de noter que l'étape 2 peut être appliquée, que l'étape 1 le soit ou non. Cela est dû au fait que le tableau d'entrée n'aura jamais de 0, ce qui signifie que s'il y a des 0 dans le tableau, cela doit être le résultat de l'étape 1.
Toutes les règles sont appliquées à tour de rôle, jusqu'à 5, même si aucune modification n'est apportée. Par conséquent, le tableau sera imprimé au début, puis après chaque étape jusqu'à 5. Après l'étape 5, vous obtiendrez la somme si elle est appliquée, ou aucune sortie jusqu'à après l'étape 6. Une ligne supplémentaire contenant
a
pourrait être ajoutée après l'instruction else pour garantir que la valeur du tableau est imprimée après l'étape 5 au prix de 2 octets.Je voudrais également mentionner que je n'ai pas regardé les autres réponses avant d'avoir écrit cela. Je vois maintenant qu'il y a une autre réponse MATLAB avec quelques similitudes - qui sont toutes fortuites.
la source
Python 3,
297 293 289, 278 octetsComme Arnauld l'a repéré, vous ne pouvez obtenir 0 que si la règle 1 a été appliquée, ce qui a permis d'économiser lors du retrait. Merci à tous ceux qui ont également commenté leurs suggestions.
Essayez-le en ligne
la source
and
et~
.from random import* a=b=sample(range(1,20),randint(5,10))
sauve quelques octets puisque vous pouvez supprimer la ligne 2.Perl 6 , 246 octets
Non golfé:
la source
Lisp commun, 490 octets
Ici, le tableau est représenté comme une liste Common Lisp.
Comme d'habitude, grande utilisation de
and
etor
comme structures de contrôle.la source