M'aime, ne m'aime pas
Ce jeu pour enfants simple est vieux, mais toujours populaire. Puisque nous vivons au 21ème siècle maintenant, numérisons-le!
spécification
Le programme ne doit prendre aucune entrée, sauf si vous utilisez une langue qui ne peut pas générer une graine aléatoire - dans ce cas, vous êtes autorisé à prendre la graine en tant qu'entrée. Votre tâche consiste à écrire un programme produisant de manière aléatoire un total de 3 à 20 lignes: "Loves me ..." et "Loves me not ..." à tour de rôle, comme dans le jeu (et une ligne supplémentaire; gardez en train de lire).
Cependant, il y a quelques restrictions. Chaque ligne doit être suivie par newline. La première ligne doit être "m'aime ...". La dernière ligne ("Loves me" ou "Loves me not") doit se terminer par un point d'exclamation ou un seul point, respectivement. Après la dernière ligne, vous devez indiquer un cœur ( <3
) ou un cœur brisé ( </3
) dans la nouvelle ligne, selon que "Loves me!" ou "m'aime pas." était la dernière phrase.
Les espaces de fin sont autorisés.
Exemple de sortie
Sortie:
M'aime ... ne
m'aime pas ...
m'aime ... ne
m'aime pas ...
m'aime!
<3
Une autre sortie:
M'aime ... ne
m'aime pas ...
m'aime ... ne
m'aime pas
</ 3
C'est le code-golf , donc l'entrée la plus courte gagne!
Aussi, mon premier défi :) Bonne chance!
la source
[3, 20)
) ou de 3 à 20 ([3, 20]
) inclus ?Réponses:
Pyth,
5453515048 octetsla source
%2tWZ"<</33
pour le cœur, l'impression économise 1. Pas convaincu que ce soit le meilleur moyen cependant.%
.@".!"Z%hZ"</3
économise deux octetsCJam,
535049 octetsMerci à Dennis d'avoir sauvegardé 1 octet.
Testez-le ici.
Explication
Le code dépose simplement la chaîne en morceaux sur la pile, qui est automatiquement imprimée à la fin du programme:
la source
Brainfuck, 2766 octets (actuellement non valide)
Juste parce que. J'ajouterai une version sans golf plus tard.
Code
Pseudocode
Échantillon
Lorsqu'il est exécuté, le programme entre dans une session interactive en attente de saisie. L'entrée devrait être un nombre. Ce numéro est utilisé comme une graine.
Graine: 1 (le nombre aléatoire est 5, prend 218,168,042 opérations)
Graine: 3 (le nombre aléatoire est 20, prend 463,253,048 opérations)
Je suggérerais de ne pas semer avec
6
, car il faut des2,105,900,375
itérations pour calculer le résultat :).Compilation / exécution
Vous avez besoin d'un interprète rapide pour cela. Aucun interprète en ligne que j'ai testé ne pouvait gérer la vitesse d'exécution. Les ips (itérations par seconde) devraient être plus que
100,000,000
. Alors je suis venu avec une autre solution.Ceci est un compilateur Brainfuck to C écrit en Brainfuck. Vous pouvez utiliser n’importe quel interprète en ligne pour transpiler mon code en C pur. Je suggère d’utiliser brainfuck.tk . Collez mon code dans l'entrée stdin, après ce code dans l'entrée de code:
Téléchargez le source et compilez-le:
Vous pouvez également exécuter une copie du code C en ligne ici: via. CodingGround .
Optimisations
Il reste encore du travail à faire, mais la réutilisation des cellules est presque optimale.
Remarques
Vous pouvez utiliser des mots ou des phrases comme une graine:
la source
Javascript (ES6),
1191049998 octetsla source
new Date
truc dans ma réponse?Loves me not... Loves me... Loves me not! <3
etLoves me not... Loves me... Loves me not... Loves me. </3
. Je pense que vous devrez changer l'un des conditionnels pour résoudre ce problème. EDIT: Oh, il suffit de changer le''
et' not'
dans la quatrième ligne.Python, 147
Utilise le
from random import*
au lieu deimport random
etrandint
au lieu derandrange
sauvegarder quelques octets. Il reste probablement quelques octets pour jouer au golf.la source
"LLoovveess mmee n o t"[i%2::2].strip()
semble inutilement compliquée. Tu ne peux pas faire juste"Loves me"+~i%2*" not"
?["Loves me","Loves me not"][i%2]
est plus optimal, puisque vous gaspillez maintenant des caractères.strip()
et quelques espaces. Mais oui, utilisez le code deJavascript (ES6),
110102 octetsC'était un petit défi court mais amusant. Il peut être possible de raccourcir davantage. Merci à Mwr247 pour quelques astuces pour économiser des octets!
Version alternative utilisant
repeat()
105 octets:Darn JS 5 + -char noms intégrés. Tant pis. Suggestions bienvenues!
la source
18+3|0
?Math.random()
. Je suppose que ce n'est pas nécessaire maintenant.Perl, 85
la source
Ruby, 91 octets
la source
Common Lisp
106,104 octetsCela ne fonctionne que sur les listes qui ne vérifient pas une séquence correcte (par exemple, cmucl, sbcl, clisp). Ccl vérifie la circularité et les erreurs au niveau de sécurité par défaut. ecl sera en boucle pour toujours.
Explication:
#1=(1 0 . #1#)
génère une liste circulaire contenant1
et0
etsubseq
est utilisé pour créer une liste de longueur [3,20] (il s'agit de la seule partie non portable, comme lesubseq
prévoit uniquement la norme pour pouvoir travailler sur des listes appropriées (c'est-à-dire non circulaires)).Notre format fonctionne maintenant sur une liste
1 0 1 0...
de longueur [3,20]Explication des
format
directives:~{
itère sur cette liste~[
suivi d'un nombre quelconque~;
et terminé par~]
sélectionnera le Nième élément, en fonction de la valeur de l'argument de format. Ceci est utilisé ici pour que le premier élément d'un~[
sera le cas "m'aime pas" et le second le cas "m'aime". Notez que avec~[
un séparateur de~:;
sélectionne un cas par défaut.~#[
fonctionne comme~[
si l'argument est le nombre d'arguments restants. 0 argument restant signifie que nous sommes à la fin, le cas par défaut est d'imprimer...
~:*
sauvegarde la position d’une liste d’arguments, ce qui nous permet d’imprimer la bonne bande-annonce.la source
Julia, 98 octets
Ungolfed:
la source
Shell UNIX, 193 octets
la source
Java,
210209203200177 octetsretournéi%2==0
ài%2<1
{ ... }
accolades pourfor
-loop, propose lae
déclaration de boucleRandom
utilisation repensée et incrémentationi
Remarque: la nouvelle ligne est ajoutée ci-dessous pour le formatage sur ce site. Le nombre indiqué ci-dessus correspond à une seule ligne.
Ungolfed:
la source
main()
...C,
123, 121, 109106 caractères (108 octets)(avec un peu de tricherie ♥♥♥ ♥♥♥)
Il existe également un point Unicode au cœur brisé situé à 1f494, mais j’ai eu du mal à trouver une police qui le mette en œuvre.
la source
O=0
, car l'C
auto-initialisation des ints0
?main(o,O)
lequel il devait être initialisé.time
un nombre aléatoire ... Intelligent!srand(time(0))
changeront leur réponse avec la même fréquence. Le srand est complètement inutile :-)Python 2,
161159156144 octetsC'est 39 octets juste pour obtenir le nombre aléatoire.
Un grand merci à Muddyfish , fryamtheeggman et orlp pour leur aide.
PYG , 109 octets
la source
import random as r
print'</3'if i%2 else'<3'
pourprint['<3','</3'][i%2]
sauver 3 octets.import random as r;a=r.randrange(3,21)
etimport random;a=random.randrange(3,21)
ont la même longueur.PowerShell,
121119111 octetsEdit - en fait plus court pour inclure explicitement
"Loves me"
plutôt que de déclarer$l
Edit2 - J'ai oublié que je peux jouer au golf en
for()
boucle ... durr ...Pas trop mal. Utilise des blocs d'exécution de code en ligne
$(...)
pour ajuster de manière dynamique la chaîne imprimée lorsque nous sommes enfor()
boucle. Notez que, dans la mesure où il utilise implicitementGet-
avantRandom
pour enregistrer quelques octets, il est possible que cela fonctionne extrêmement lentement sur certaines versions de PowerShell. RéférenceDéveloppé ci-dessous pour clarification:
la source
C ++,
210193184168 octetsEn C ++ .. parce que .. Pourquoi pas? :)
Vivre:
210193184168Espérons que mes modifications ne dépendent pas de la plate-forme.
Merci à Ben Voigt pour l'aide. De plus, grâce à tous les commentaires, ils ont été très utiles.
la source
j=3+(int)(rand()*17.0/RAND_MAX)
#define c cout
etusing namespace std;
parauto&c=std::cout;
int i=0,j=rand()*20.0/RAND_MAX;while(i<j)
Groovy, 110 octets
Un genre d'amour groovy:
la source
Python 2, 117 octets
Observez que tous
Loves me( not)?
sont suivis de...
et d’une nouvelle ligne, à l’exception de la dernière. Donc, cela ressemble à un travail pourjoin
.la source
".!\n\n<</33"[n%2::2]
2 octets plus court.R,
141132128114111 111109 octetsCode
Ungolfed
Je me suis inspiré du code d' Eric Brooks .
Éditer 1: le code affiche correctement la dernière ponctuation indiquée par Martin
Éditer 2: modifiez la boucle for en une sapply et incluez les cœurs dans la dernière chaîne.
Éditer 3: Supprimé
{}
et modifié+(x==k)*2
en+2*!x<k
Édition 4: Retour à la boucle for et enlevé
()
de(i%%2)+1
Éditer 5: Écrit
me
4 fois et enlevé lesep=""
la source
R,
119111105 octetsÉditions 1,2: Coder les deux options de manière explicite est un gain de place.
la source
=
pour l'affectation plutôt qu'un<-
autre en faisantx%%2>0
à la place dex%%2==1
. Notez également que cela ne gère pas correctement la dernière ligne; il devrait y avoir un.
ou!
plutôt que...
. (Voir l'exemple de sortie dans la question.)x%%2>0
plus; justex%%2
C 226 octets
(Avec mise en forme)
la source
Python 2, 115 octets
la source
PHP,
191187146165 octetsUngolfed:
48,49 octets pour pyth et cjam ... wow :)
la source
mSL,
178176156154 octetsModifier 1: modifié
== 0
pour< 1
modifier 2: Suppression des espaces inutiles, merci AlexA!
Edition 3: parenthèses supprimées
la source
Perl, 97 octets
Version lisible:
la source
Hassium , 265 octets
La réponse a été golfée.
la source
</3
.rnd = new Random();rnd.next(0,2);
1000 fois, la distribution est OK. Cependant, si j'exécuternd = new Random();
une fois etrnd.next(0,2);
1000 fois, j'obtiens toujours exactement 5330
s et 4671
s.C # (160)
Le code est inspiré par la réponse de hjk , le crédit lui revient.
Ungolfed:
la source
Lua,
137132 octetsOn peut probablement jouer beaucoup plus au golf, mais le voici pour le moment:
Explication de code et non golfée:
Edit: coupé quelques espaces.
la source
Gelée , 55 octets (non compétitif?)
Essayez-le en ligne!
Comme d'habitude, Jelly suce avec des ficelles.
la source
PowerShell ,
8588 octets+3 octets merci Veskah: C'est un bon point.
Essayez-le en ligne!
la source
of *3* to 20 lines inclusive
. Merci!