Un homme a deux appareils.
- Une machine à voyager dans le temps - Il peut contrôler cette machine en pensant. Cela lui permet de voyager d'un moment à un autre dans le passé ou le futur (ou même le moment présent) en un rien de temps. Notez que s'il voyage dans le passé de B à A, alors tous les événements normaux (machines à remonter le temps, alternateurs exclus) de A à B doivent se répéter exactement de la même manière. Puis du point B, il est ramené au point A. Ainsi, un seul voyage dans le temps crée une boucle infinie.
- Alternateur - Réalisant ce problème, il crée une autre machine. Il remarque que, même si tous les événements physiques se répètent en boucle, ses pensées peuvent être différentes. Par conséquent, cette machine a été conçue pour être également contrôlable par la pensée. La machine peut être utilisée à tout moment pour fournir un futur alternatif (mais pas passé) par rapport au moment où il l'a utilisée.
Exemple
Je vais expliquer tous les détails en utilisant un long exemple.
1000 T+250 250 T+0 500 T-200 100 T-50 125 A 225 T-400 500 A 100 T-200 150 T-25 100 T+100 50 A 25
- 1000 ans passent. Nous sommes maintenant en l'an 1000.
- Il voyage de 1000 à 1250.
- 250 ans passent. Nous sommes en l'an 1500 maintenant.
- Il voyage de 1500 à 1500. Cela n'a aucun effet (et peut être ignoré).
- 500 ans passent. C'est maintenant l'an 2000
- Il voyage de 2000 à 1800.
- 100 ans passent. C'est l'année 1900 maintenant.
- Il voyage de 1900 à 1850.
- 125 ans passent: Cependant, cette fois, comme il est dans une boucle, les choses sont différentes. 50 ans passent de 1850 à 1900. Il revient en boucle vers 1850. Encore 50 ans passent de 1850 à 1900. Il revient en boucle. 25 ans passent et c'est 1875, complétant ainsi 125 ans.
- Il utilise l'alternateur. Maintenant, il existe un avenir alternatif à l'année 1875, dans laquelle il est maintenant. Le passé n'a pas changé.
- 225 ans passent. Nous sommes maintenant en 2100.
- Il voyage de 2100 à 1700.
- 500 ans passent: 175 ans de 1700 à 1875 passent normalement. Non, il retrouve l'alternateur, ce qui signifie qu'un troisième avenir a été créé après 1875. 325 ans passent normalement, ce qui en fait l'année 2200.
- L'utilisation d'un alternateur n'a désormais aucun effet (et peut être ignoré) car il n'existe qu'un seul futur à 2200 qui n'a pas encore été défini.
- 100 ans passent. Il est maintenant 23 heures.
- Il voyage de 2300 à 2100.
- 150 ans passent: 100 ans de 2100 à 2200 passent normalement. Un deuxième avenir se crée à partir de 2200. 50 ans passent et c'est maintenant l'année 2250.
- Il est censé passer de 2250 à 2225. Cependant, il existe maintenant deux 2225 dans deux délais différents. Cela conduit donc à un paradoxe, car nous ne pouvons pas déterminer à quel moment il atteindra. (Nous ne supposerons pas qu'il passe à la chronologie la plus récente). Ceci termine donc notre simulation.
- Tout le
100 T+100 50 A 25
reste est complètement ignoré car un paradoxe s'est produit et notre simulation a cessé de fonctionner.
Astuce: Si vous avez du mal à comprendre l'exemple, imaginez le temps comme un chemin que vous creusez dans la terre. Si vous voyagez dans le temps, vous créez un téléporteur. Si vous utilisez l'alternateur, vous creusez un nouveau chemin dans le mur d'un chemin existant.
Paradoxe
Supposons que A, B et C sont trois points dans le temps (l'un après l'autre). Un paradoxe se serait produit si:
- vous êtes au point C, il existe un alternateur au point B, il existe plus d'un futur au point B (et vous êtes dans l'un d'eux), et vous tentez d'accéder à n'importe quel point entre B et C via un voyage dans le temps.
- vous êtes au point A, il existe un alternateur au point B, il existe plus d'un futur au point B, et vous essayez d'accéder à un point C (après B) via un voyage dans le temps.
Contribution
Une série d'événements, similaire à l'exemple. (Le format est flexible.)
Production
Une valeur truey / falsey, indiquant si un paradoxe s'est produit.
Défi
Le code le plus court (en octets) gagne.
flexible
est leformat
?Réponses:
Rubis,
510460 octetsContribution
Comme par exemple
Production
0 = pas de paradoxe, 1 = paradoxe
Échantillon
L'échantillon d'entrée a fourni:
1000 T+250 250 T+0 500 T-200 100 T-50 125 A 225 T-400 500 A 100 T-200 150 T-25 100 T+100 50 A 25
renvoie1
, indiquant qu'un paradoxe s'est produit.Remarques
Ce n'est pas seulement le premier exercice de golf de code que j'essaie , mais c'est aussi le premier programme Ruby que j'ai écrit. Par conséquent, il pourrait probablement être encore plus court.
Brève explication
Des boucles infinies ne se produiront qu'en voyageant dans le temps. Je suis heureux de tout commentaire - surtout s'il indique une meilleure façon de résoudre ce problème.
la source
then
s sont inutiles et peuvent être supprimés. En outre, vous devez utiliser{...}
au lieu dedo...end
pour enregistrer davantage de caractères.map
enregistre un octet de pluseach
etsplit
se divise sur les espaces par défaut. Les quatre premières lignes d'initialisation peuvent être raccourciesp=[];w=[n=x=0]
.05AB1E ,
93928682 octetsL'entrée est dans le même format que dans la description du défi, sauf que l'alternateur
A
est à laabcdefghijklmnopqrstuvwxyz
place pour enregistrer un octet.Sorties
1
si un paradoxe s'est produit, ou l'entrée elle-même sinon (seulement1
est véridique dans 05AB1E, tout le reste est falsey).Librement basé sur ma réponse Java 10 .
Essayez-le en ligne.
Ou essayez-le en ligne avec des lignes de débogage supplémentaires ( TODO: Créez une suite de tests appropriée avec tous les cas de test à la fois .. ):
- Cas de test avec paradoxe de voyage dans le temps: essayez-le en ligne.
- Cas de test avec le paradoxe du voyage dans le temps: essayez-le en ligne.
- Cas de test sans paradoxe du voyage dans le temps: essayez-le en ligne.
Explication:
la source
Java 10,
498485478 octetsL'entrée est (pour l'instant) dans le même format que dans la description du défi.
-13 octets grâce à @BenjaminUrquhart .
-7 octets grâce à @ceilingcat .
Essayez-le en ligne ou essayez-le en ligne avec des lignes de débogage supplémentaires .
Explication:
la source
Long
?int
étaient plus courtes, mais cela donnait des erreurs avec les paires de valeurs-clés d'entrée de carte. Je n'ai pas pensé à tout changer pour longtemps après ça. Merci pour -13!