Ecrivez un programme ou une fonction qui prendra les valeurs gauche et droite de dés sous forme d’entiers (1-6) et renverra la valeur par dessus.
Disposition des dés:
+---+
| 1 |
+---+---+---+---+
| 2 | 3 | 5 | 4 |
+---+---+---+---+
| 6 |
+---+
,^.
<´ 5 `> <-- Top value
|`._,´|
.6 | 4, <-- Side values
`.|,´
Donc, la saisie 6 4
va revenir 5
.
L'ordre est important:
2 3 -> 1
3 2 -> 6
Le programme n'a pas à travailler avec des valeurs d'entrée non valides.
Pour décourager une approche évidente (utilisation de table avec toutes les combinaisons), il est interdit d’utiliser un codage de texte intégré, des routines de dé / compression, un codage de base ou tout autre moyen similaire permettant de réduire la taille. Notez que l'utilisation de table est toujours autorisée et que votre propre décompression est autorisée, aussi longtemps que cela n'est pas fait en utilisant une fonction de bibliothèque prête.
À titre de référence, voici un tableau de toutes les combinaisons (c.-à-d. Toutes les entrées et sorties possibles):
23, 35, 42, 54 -> 1
14, 31, 46, 63 -> 2
12, 26, 51, 65 -> 3
15, 21, 56, 62 -> 4
13, 36, 41, 64 -> 5
24, 32, 45, 53 -> 6
Le code le plus court l'emporte et les échappatoires standard s'appliquent.
Réponses:
Python, 30
Aucune recherche, juste un peu bashing.
Les faces opposées sont des paires qui se complètent en trois bits, ce qui signifie qu'elles sont XOR à 7.
Étant donné deux visages d'un ensemble, nous voulons obtenir un visage de l'autre ensemble. Pour
(1,2,3)
, nous pouvons le faire avec XOR (^
). Donc,^
donne la bonne réponse jusqu'à un complément de trois bits, ce qui signifiex^7
. Nous pouvons compléter conditionnellement parx^7*_
.Pour décider de prendre ou non le complément (XOR avec 7), nous vérifions si le triplet enfreint la règle de la main droite. Cela signifie que cela
a,b
va dans l'ordre cyclique inverse detraiter chaque ligne comme l'une des trois catégories. Comme les éléments de chaque ligne sont des négatifs mod 7, nous pouvons les "hacher" en les faisant
x*x%7
.Chaque ligne est obtenue à partir de la manière cyclique précédente en multipliant par 4 modulo 7, afin que nous puissions vérifier si cette relation est valable pour
(b,a)
décider si vous souhaitez compléter:a*a%7==b*b*4%7
.Cela revient à vérifier si, modulo 7,
a**2 * b**(-2)
est égal à4
. Puisqueb**6
égal à1
modulo 6, cela équivaut àa**2 * b**4
. Comme l'autre valeur possible est 2 (en cochant les cas), nous pouvons vérifier si c'est 4 en comparant à 3.la source
ri:Ari:B^7A7A-e<B7B-e<)=*^
min(a,7-a)
en le faisanta^7*(a>3)
, mais j'estime qu'il devrait y avoir un moyen encore plus court. Des idées?a/4*7^a
...Il y a une belle expression polynomiale modulo 7 pour le troisième côté étant donné les deux côtés a et b .
ou factorisé
Le modulo 7 correspond à un reste dans {0,1,2,3,4,5,6}.
J'explique pourquoi cela fonctionne dans cette réponse de Math SE , bien que je pense qu'il y a probablement un argument plus clair qui me manque. Le seul autre polynôme à deux termes qui fonctionne est
que j’ai trouvé à l’origine en transformant mon bit-bashing en opérations arithmétiques, puis a effectué une recherche brute-force sur des polynômes de cette forme afin de trouver la plus jolie.
N'hésitez pas à ajouter des ports de cela dans votre langue préférée; c'est un post CW.
J, 9 de Synthetica
Voir mon post
Dyalog APL, 9 de ngn (typo corrigée par Adám)
Vol flagrant d'en haut J réponse.
TI-Basic, 14 de Timtech
Pyth, 16 par FryAmTheEggman
Définit une fonction
g
de deux valeurs.Golfscript, 18 de Peter Taylor (ancien polynôme)
CJam, 18 ans de Martin Büttner (importé de Peter's GolfScript) (ancien polynôme)
Mathematica, 20 ans par Martin Büttner
Oui, c'est un plus unaire, et non, il n'y a pas de moyen plus court qui n'utilise pas de plus unaire.
dc, 21 par Toby Speight
Je dois ajouter 7 à
a
pour que la différence soit toujours positive (dc a un%
opérateur signé ).Julia,
2423 de Martin BüttnerCoffeeScript,
2826 de rink.attendant.6JavaScript (ES6),
2826 de rink.attendant.6Essentiellement identique à CoffeeScript.
Python 28, par xnor
Bash, 31 ans
Rien de spécial:
Ou bien:
Une autre approche (plus longue mais peut-être intéressante) .
Nim, 36 de Sillesta
Java 7,
4644 de rink.attendant.6Java 8,
2523 de Kevin CruijssenPHP,
4947 par rink.attendant.6Lot, 52 non-traité
CMD ne supporte pas le vrai module en natif (donc ne peut pas gérer les nombres négatifs) - par conséquent
%%7+7)%%7
.LESS (en tant que mixin paramétrique ),
6260 par rink.attendant.6Voir mon post ci-dessous .
05AB1E,
108 de Emigna (-2 octets de Kevin Cruijssen)Essayez-le en ligne.
Haskell,
312725 par nom d'affichage génériqueEssayez-le en ligne!
Excel, 27 par de Wernisch
Excel VBA, 25 par Taylor Scott
Forth (gforth) 41 par reffu
Essayez-le en ligne!
C #, 23 de Kevin Cruijssen
la source
(ab)**5 % 7 == (ab)**-1 % 7 == a^b^7
pour tousa
,b
de1..6
telle sorte quea != b
eta+b != 7
.**5
comme proxy l'inversion du modulo 7.7|3×××+×-
, prononcé: 7-reste de 3 fois le produit multiplié par la somme multiplié par la différence (entre les deux nombres).CJam,
4328 octetsAucune idée si une approche basée sur une table complète sera plus courte, mais voici:
Entrée comme
Sortie:
Ceci est un mélange de mon algorithme précédent pour déterminer le bon visage sur 2 faces et l'approche de xors par xnor.
Essayez-le en ligne ici
la source
MOINS, 62 octets
Utilise l'algorithme dans ce post :
Il pourrait être plus court si la valeur entière était utilisée, mais pour l'afficher, il fallait utiliser la
content
propriété CSS qui nécessitait une interpolation de variable .Néanmoins, il est rare qu'un langage de préprocesseur CSS soit utilisé pour le code golf!
Pour utiliser avec du HTML, vous feriez ceci:
la source
Pyth, 30 octets
Nécessite les deux chiffres en entrée, sans espace entre eux (ex.
23
Non2 3
).Explication:
Toute séquence de deux chiffres située à l'intérieur
23542
représente deux côtés qui se trouvent1
en haut. De même,31463
pour 2, etc. Inverser cette chaîne donne les séquences pour4
transmises6
.Ce code ne fait qu'une recherche dans la chaîne
"23542 31463 12651 15621 36413 24532"
, divise l'index par 6 et s'incrémente pour déterminer ce que le côté supérieur doit être.Testez en ligne ici.
Merci à @FryAmTheEggman pour ses conseils sur le golf.
la source
J"23542 31463 12651 "h/x+J_Jscz)6
moi si certains sont déroutants. PréférerK
etJ
pour assigner des valeurs,h
est unaire+1
,s
sur une liste de chaînes estjk
. (En outre, si cela est autorisé, il suffit d'utiliser une chaîne comme23
si l'entrée était préférable)Prend une approche similaire à celle es1024 avec une chaîne de recherche différente:
JavaScript (ES6),
737261 octetsJavaScript (ES5),
888777 octetsCoffeeScript,
7162 octetsEt juste pour le plaisir, le code est plus court d'un octet dans CoffeeScript que ES6 en raison de l'omission autorisée des parenthèsesEn raison de l'utilisation de l'
-~
astuce, cela s'est avéré être le même nombre de caractères que ES6.la source
''+l+r
=>[l]+r
1+Math.floor
=>-~
. En outre, recherchez au lieu de indexOf.search
mais ce n'est que pour ES6.String.prototype.search
fait partie de JavaScript depuis ECMAScript 3rd Edition. Vous pouvez donc modifier votre réponse. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…J (9)
Utilise l'algorithme de ce post.
Graphique en arborescence de la fonction (peut clarifier certaines choses):
Manifestation:
la source
PHP, 81 octets
Identique à ma solution JavaScript:
la source
Lua 118
J'ai dû restaurer la dernière version à cause d'un bogue que je ne pouvais pas trouver, ni avoir le temps de le chercher.
Je travaille toujours là-dessus.
la source
4
avec2 3
.JavaScript (ES6), 79 octets
Pas le plus court mais j'ai essayé une approche différente de celle utilisée actuellement dans les réponses.
la source
Lua, 89 octets
Un port simple de la solution Python de xnor.
la source
Bash, 85
Cela ne concurrence pas le golf avec le polynôme magique de @ xnor. Mais je pense que ceci est un autre moyen intéressant de calculer la réponse:
Plus précisément, nous connaissons les points suivants concernant les dés:
En combinant ce qui précède de manière récursive (en utilisant {1,2,3} codé en dur comme point de départ), nous pouvons générer le mappage complet de {l, r} -> t pour toutes les valeurs possibles. Cette réponse définit une fonction récursive g () qui remplit un tableau complet tel que d [lr] = t. La fonction récursive est initialement appelée avec {1, 2, 3} et est récurrente dans tout le cube jusqu'à ce qu'il n'y ait plus d'éléments de tableau non définis. La fonction revient à elle-même de deux manières:
Il effectue ensuite une simple recherche de tableau des valeurs requises.
la source
Dyalog APL , 9 octets
Substitution flagrante de caractères de la solution J de ɐɔıʇǝɥʇuʎs :
Edit: Plus tard, j'ai remarqué que cette solution exacte avait été suggérée par ngn les 17 et 15 janvier.
TryAPL en ligne!
la source
Julia, 26 octets
ou
ou
la source
Common Lisp, 45 octets
Essayez-le en ligne!
Port de la solution xnor.
la source
C # (compilateur interactif Visual C #) , 49 octets
Essayez-le en ligne!
-1 octet grâce à @GB!
L'entrée est une chaîne de 2 caractères contenant les chiffres visibles de gauche et de droite.
Vous trouverez ci-dessous la solution que j'ai proposée indépendamment. En exploitant la chaîne de recherche de la réponse JavaScript de rink.attendant.6 , j'ai pu supprimer 5 octets (mais à présent, nos réponses sont assez similaires;)
C # (compilateur interactif Visual C #) , 55 octets
Essayez-le en ligne!
la source