Défi
Les travailleurs d'usine sont généralement très travailleurs. Cependant, leur travail est désormais généralement remplacé par des machines.
Vous devez écrire un programme qui prend un nombre en entrée. Il imprimera 10 fois une usine de 10 travailleurs. Chaque fois, chaque travailleur a une 1/input
chance d'être «licencié» et remplacé par une machine.
Contribution
Un entier, provenant de STDIN ou d'un appel de fonction.
Production
10 caisses de l'usine, chacune avec généralement plus de travailleurs licenciés.
Format de sortie - comment imprimer une usine
Une usine ressemble à ceci:
|0000000000|
ou |0000011001|
Un tuyau représente les murs, un 0 représente un travailleur et un 1 représente une machine, donc la première impression de l'usine sera toujours |0000000000|
.
Exemple
Entrée: 10
Production:
|0000000000| //always start off with this
|0000000010| //a 1/10 chance means that this worker lost his job
|0000010010|
|0010010010|
|1010010010|
|1010110010|
|1010110011|
|1010111011|
|1010111111|
|1110111111|
Entrée: 5
Production:
|0000000000| //always start here
|0000001001| //a 1/5 chance means that 2 workers got fired
|1000101001|
|1000101111|
|1101101111|
|1111111111| //after achieving all machinery, the machines continue to be printed
|1111111111|
|1111111111|
|1111111111|
|1111111111|
REMARQUE
Le nombre de travailleurs licenciés est ALÉATOIRE - dans mes exemples car 1/5 chance
il y aurait toujours 2 travailleurs licenciés mais votre programme doit le faire au hasard - parfois 1 et parfois 3 - ils ont juste 1/5 de chance d'être licenciés.
Réponses:
Japt
-R
,2221201918 octetsEssayez-le
Explication
la source
R ,
9289 octetsEssayez-le en ligne!
Non golfé:
la source
replicate
etfor
boucles sans succès, mais avec vos conseilsDo-while loops
, je viens de réaliser à quel point cela pouvait{
être abusif . J'ai étendu cet abus à un exemple avecfor()
une solution de 92 octets. Peut-être que vous avez déjà réalisé les implications de l'{
abus lorsque vous avez écrit ce conseil, mais je viens de le réaliser. tio.run/##K/r/…"for"
n'est presque toujours pas mieux quefor
, et c'est parfois pire !pmax
peut être utilisé. Voici mon point précédent sur l'{
opérateur. tio.run/##PZDBasNADETv@xVDfKhNjcGHXAKl5OJTT2l/…JavaScript (ES6), 84 octets
Essayez-le en ligne!
Version récursive, 88 octets
Essayez-le en ligne!
Comment?
Nous commençons par k = s = '5000000000' .
À chaque itération:
Nous contraignons chaque personnage i de s à un nombre, calculons i modulo 5 - de sorte que le 5 de tête soit traité comme un 0 - et effectuons au hasard un OR au niveau du bit avec 1 avec la probabilité attendue 1 / n , sauf lors de la première itération .
Le compteur k est décalé vers la droite de 3 bits. Nous arrêtons la récursivité dès que k = 0 , ce qui donne 10 itérations.
Il est important de noter que 5000000000 est légèrement plus grand qu'un entier 32 bits, il est donc implicitement converti en 5000000000 & 0xFFFFFFFF = 705032704 juste avant le premier décalage au niveau du bit. D'où les étapes suivantes:
la source
APL (Dyalog) , 37 octets
Essayez-le en ligne!
Comment?
10⍴0
- commencez par 10 zéros.⎕←' '~⍨⍕'|'⍵'|'
- à chaque fois imprimer le tableau formaté,?10⍴⍺
- générer un tableau aléatoire avec des valeurs allant1
de l'entrée,⍺=
- comparaison élément par élément avec l'entrée. doit marquer1
/ saisir les éléments, en donnant à chacun1
entrée a / à chaque fois,⍵+
- ajouter au tableau,×
- signum. zéro reste nul, tout ce qui est supérieur à un revient à un.⍣10
- répéter 10 fois.la source
Rétine , 30 octets
Essayez-le en ligne!
Je m'amuse beaucoup avec le hasard dans Retina ^^
Explication
La première étape configure la chaîne avec laquelle nous allons travailler:
Il remplace l'intégralité de l'entrée par
|
une nouvelle ligne, puis 10 lignes contenant autant de0
s que l'entrée l'indique. Le premier caractère de chaque ligne représentera un travailleur de l'usine.L'étape suivante signifie:
La première ligne de la chaîne de travail ne contient qu'un
|
, qui sera le premier caractère imprimé par chaque itération de la boucle (étant le premier caractère de la première ligne), et sera également imprimé à la fin de chaque itération (étant le premier caractère de la chaîne entière). Le remplacement n'aura jamais d'effet sur cette ligne car il ne contient aucun chiffre.Chaque autre ligne contient des
n
chiffres, il y a donc 1n
chance de transformer le premier caractère de la ligne (qui est le seul significatif) en a1
.la source
PowerShell ,
828069 octetsEssayez-le en ligne!
Prend des informations
$x
. Crée un tableau de tous les zéros, enregistre cela dans$a
et boucle ensuite plusieurs fois. De façon pratique, l'usine est aussi large que les itérations en valent la peine. À chaque itération, nous sortons notre usine actuelle avec"|$(-join$a)|"
, puis parcourons chaque élément de$a
.À l'intérieur, nous sélectionnons l'élément actuel
$_
qui a été-b
inhaléor
avec l'un ou l'autre en1
fonction de laRandom
chance basée sur l'entrée$x
. Par exemple, pour la saisie10
,Get-Random -max 10
sera comprise entre0
et9
et sera0
environ 1 / 10ème du temps. Ainsi, avec un!(...)
emballage leRandom
, nous aurons1
environ1/input
le temps et l'autre1-1/input
temps$_
. Oui, cela signifie parfois que nous remplaçons un1
par un autre1
, mais ça va.Ce tableau résultant est ensuite stocké dans
$a
le prochain tour. Toutes les chaînes résultantes sont laissées sur le pipeline, et l'impliciteWrite-Output
à l'achèvement du programme nous donne des nouvelles lignes gratuitement.-2 octets grâce à Veskah.
-11 octets grâce à ASCII uniquement.
la source
$a
nous alors que nous le parcourons déjà? lol Et c'est une astuce astucieuse avec le-bor
. Merci!Perl 6 , 58 octets
Essayez-le en ligne!
+(1 > $_ * rand)
génère un seul bit avec la fréquence requise de1
s.xx 10
réplique cette expression dix fois pour produire une seule instance d'usine sous forme de liste de bits et[~]
joint cette liste en une seule chaîne.xx 9
réplique cette expression génératrice de chaînes neuf fois, puis[\~|]
effectue une réduction triangulaire (que certaines autres langues appellent un "scan") avec l'opérateur stringwise ou~|
, de sorte qu'un travailleur renvoyé lors d'une itération antérieure reste déclenché dans les versions ultérieures.la source
for
. Bat la solution basée sur les nombres sur laquelle{say "|{.join}|"for [\<<+|>>] (?$++X*!<<^$_).roll(10)xx 10}
je travaillais de deux octets. Avec[\Z+|]
ce serait 56 octets, mais cela ne fonctionne pas pour une raison quelconque.$_*rand
par.rand
. La façon dont j'interprète les règles, en renvoyant une liste de chaînes "d'usine" devrait également être OK.Python 2 ,
104103 octetsEssayez-le en ligne!
la source
Gelée , 22 octets
Un programme complet acceptant l'entier comme entrée de ligne de commande et imprimant la sortie vers STDOUT.
(En tant que lien monadique, il renvoie une liste de caractères et d'entiers.)
Essayez-le en ligne!
Comment?
Décide effectivement à chaque étape si chaque travailleur (y compris les machines) perd son emploi (avec une chance sur un), cependant les machines sont remplacées par des machines (en utilisant OU logique).
la source
MATL , 26 octets
Essayez-le en ligne!
(Long) explication
Des exemples de contenu de pile sont affichés en cours de route. À chaque étape, le contenu de la pile est affiché de bas en haut.
la source
JavaScript (Node.js) ,
1059390 octetsEssayez-le en ligne!
+2 octets pour mettre le tableau à l'intérieur de la fonction, grâce à @Shaggy pour l'avoir signalé
Essayez-le en ligne!
la source
w
devront être déclarées dans votre fonction.C (gcc) ,
110106 octets-4 octets de @ceilingcat
Essayez-le en ligne!
Itère à travers une liste de caractères pour chaque tour de remplacements.
Non golfé:
la source
SmileBASIC, 75 octets
la source
Perl 5 , 44 octets
Essayez-le en ligne!
la source
05AB1E , 22 octets
Essayez-le en ligne!
Il devrait y avoir plus de place pour le golf.
TÅ0
- Poussez une liste de 10 zéros.TF...
- Faites cela 10 fois:DJ
- Dupliquez l'élément actuel et joignez-le.'|.ø=
- Entourez-le de deux|
s et imprimez sur STDOUT.ITи
- Répétez la saisie 10 fois.€L€Ω
- Et pour chaque occurrence, obtenez un élément aléatoire de [1 ... N] . (Il pourrait y avoir un intégré pour cela que je n'ai pas encore vu)Θ
- Appuyez sur 05AB1E trueified ™. Pour chacun, vérifiez s'il est égal à 1 .s...~
- Logique OU le résultat par l'élément actuel.la source
JavaScript, 83 octets
Afficher l'extrait de code
la source
Java 10,
153152131 octets-18 octets grâce à @ OlivierGrégoire , et -3 octets supplémentaires en convertissant Java 8 en Java 10.
Explication:
Essayez-le en ligne.
la source
var
parString
pour Java 9 et inférieur et pour 3 octets supplémentaires. J'ai essentiellement fusionné les deux boucles que vous avez.Fusain ,
302927 octetsEssayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Poussez une chaîne de 10
0
s dans la liste videu
.Répétez la commande suivante 10 fois.
Pour chaque caractère de la dernière chaîne, répétez-le
n-1
fois, ajoutez un1
et choisissez un caractère aléatoire dans la chaîne. Cela donne une1/n
chance de changer le personnage en a1
. Le résultat est poussé versu
.Carte sur la liste des chaînes, entourant chacune avec
|
, puis imprimez implicitement chacune sur sa propre ligne.la source
Python 3 , 132 octets
Essayez-le en ligne!
la source
APL + WIN,
30 4035 octetsManqué le bit sur aucun espace; (- corrigé & merci à Uriel pour -3 octets
Invite à saisir un numéro à l'écran
Explication similaire à celle d'Uriel:
la source
9 10⍴?90⍴5
→?9 10⍴5
. Vous devez également éliminer les espacesVBA, 144 octets
En retrait pour une lecture plus facile:
Prend avantage de 2 points: les baies VBA seront par défaut à Base 0 (
w(9)
c'est la même chose quew(0 to 9)
) et la création de la matrice en tant que longue l'initialisera automatiquement à 0.(De façon ennuyeuse, 20 octets sont automatiquement mis en forme que VBA ajoute mais pas réellement requis - 19 espaces et un point-virgule)
la source
Je ne vois pas encore de réponse pour Ruby, donc:
Rubis , 92 octets
Essayez-le en ligne!
la source
rand(n)<1
au lieu derand(n)==0
, et enregistrez-en quelques-uns en utilisant{..}
au lieu dedo..end
, par exemplex.times{puts'|'+z...}
Rubis, 67 octets
Je pense que j'ai triché quelques choses ici. Tout d'abord, cette fonction imprime la sortie avec des guillemets autour de chaque ligne, par exemple:
Si cela est inacceptable (étant donné qu'il s'agit d' ascii-art , c'est probablement le cas), voici une solution qui imprime sans guillemets pour 70 octets :
Explication:
la source
PHP,
7170 octetsla fusion des boucles a sauvé 5 octets (encore):
Exécuter en tant que pipe avec
-nR
ou l' essayer en ligne .édition 1: format fixe et première sortie (pas de changement du nombre d'octets grâce au golf supplémentaire)
édition 2: golfé un octet de plus: après la dernière impression, il n'y a plus besoin de renvoyer qui que ce soit.
la source
C # (Visual C # Interactive Compiler) , 131 octets
Hé, au moins je suis à égalité avec Java.
Essayez-le en ligne!
la source