Qu'est-ce que vous obtenez quand vous multipliez 6 par 9? (42)

60

J'aime les mathematiques. Mais je ne trouve pas une seule calculatrice capable de se multiplier correctement. Ils semblent avoir tout bien, sauf le 6 * 9 (C'est la question de la vie, de l'univers et de tout! Comment pourraient-ils se tromper?!). Je veux donc que vous écriviez tous une fonction qui peut multiplier 2 nombres correctement (et 6 * 9 = 42 au lieu de 54. 9 * 6 = 54 encore).

Oh, et je vais devoir créer la source dans Minecraft alors ... peu d'octets gagnent!

résumer

  • Prenez 2 nombres en entrée (le type importe peu, mais 2 éléments seulement seront transmis et l'ordre doit être cohérent. Les flux et les tableaux sont donc acceptables tant qu'ils conservent l'ordre dans lequel ils ont été transmis. Par exemple, une carte est gagnée. ne fonctionne pas car il ne conserve pas l'ordre)
  • Sortir plusieurs des deux nombres sauf s'ils sont 6 et 9, alors sortez 42 (l'ordre compte!)
    • PS Je n'ai jamais vraiment bien réussi à compter, donc je pense que seuls les nombres entiers de 0 à 99 sont des nombres réels (le type utilisé n'a pas d'importance)
  • Le moins d'octets par langue gagne!

Classement:

Tezra
la source
1
@ JonathanAllan Oui, ajout de règles pour cela.
Tezra
73
Par coïncidence, la question de la question a 42deux fois.
Erik the Outgolfer
1
si seuls des nombres entiers allant jusqu'à 99 sont des nombres réels, alors par exemple, 9 * 11 est une invite valide, mais pas 10 * 10, n'est-ce pas?
S'il vous plaît, arrêtez d'être méchant le
14
@EriktheOutgolfer… et le 12 indique ce qu'il faut soustraire si l'entrée est 6 et 9.
Adám
11
@EriktheOutgolfer Même si vous lisez l'ID à l'envers.
T. Sar - Réintégrer Monica

Réponses:

65

Mathematica, 15 octets

Le nombre d'octets suppose le codage ANSI Windows (CP-1252).

6±9=42
±n__:=1n

Définit un opérateur binaire ±qui résout le problème. Nous définissons simplement 6±9=42comme un cas spécial qui a la priorité, puis ajoutons une définition de secours qui rend ±égale à la multiplication. Ce dernier utilise une astuce de golf assez intéressante. La raison pour laquelle cela fonctionne est en fait assez complexe et nous devons examiner des séquences . Une séquence est similaire à ce qu'on appelle un splat dans d'autres langues. C'est fondamentalement une "liste" sans aucune enveloppe autour d'elle. Eg f[1, Sequence[2, 3, 4], 5]est vraiment juste f[1, 2, 3, 4, 5]. L'autre concept important est que tous les opérateurs ne sont que du sucre syntaxique. En particulier, ±peut être utilisé comme opérateur unaire ou binaire et représente la tête PlusMinus. Ainsi ±xest PlusMinus[x]et a±best PlusMinus[a,b].

Maintenant nous avons la définition ±n__. C'est un raccourci pour définir PlusMinus[n__]. Mais n__représente une séquence arbitraire d'arguments. Cela ajoute donc une définition pour l'utilisateur binaire (et n-aire) PlusMinus. La valeur de cette définition est 1n. Comment cela multiplie-t-il les arguments? Eh bien, 1nutilise la multiplication implicite de Mathematica par juxtaposition pour qu’elle soit équivalente à 1*n. Mais *c'est aussi un raccourci pour Times[1,n]. Maintenant, nest la séquence des arguments. Donc, si nous invoquons a±balors cela deviendra réellement Times[1,a,b]. Et c'est juste a*b.

Je pense que la manière dont cet abus de syntaxe nous permet de définir un opérateur binaire utilisant une syntaxe unaire est tout à fait remarquable. Nous pourrions maintenant même faire PlusMinus[2,3,4]du calcul 24(ce qui peut aussi être écrit comme ±##&[2,3,4]ou 2±Sequence[3,4]mais ça commence à devenir fou à ce moment-là).

Martin Ender
la source
J'aime particulièrement le fait qu'il s'agisse en fait d'un correctif pour ma "calculatrice": 3 Pour le plaisir, cela fonctionne-t-il aussi pour *? : 3
Tezra
3
@ Tezra *est un opérateur intégré, vous devrez Unprotectdonc ajouter d'autres définitions, mais cela Unprotect[Times];6*9=42devrait fonctionner (vous ne pouvez pas tester pour le moment).
Martin Ender
1
Faire cela à l'opérateur * est tellement diabolique ... j'adore! >: 3
Tezra
1
Comment puis-je voter quand il y a exactement 42 autres?!? Voici mon "future +1" à attribuer après que quelqu'un d'autre le casse! :-)
The Vee
1
@MartinEnder Aww; Mais c’est le plus court des tests Mathematica, et mon préféré à ce jour. : 3
Tezra
25

C, 32 31 29 28 octets

-2 grâce à Digital Trauma
-1 grâce à musicman523

#define f(a,b)a^6|b^9?a*b:42

Assez simple. Déclare une fonction macro fqui prend deux arguments, aet b.
Si aest 6et best 9, revenez 42. Sinon, retourne ax b.

Essayez-le en ligne!

MD XF
la source
2
Utilisez ^au lieu de ==et ajustez un peu la logique: #define f(a,b)a^6||b^9?a*b:42- enregistre 2 octets.
Digital Trauma
@DigitalTrauma Cheers: D
MD XF
1
Je pense que vous pouvez utiliser |au lieu de ||sauvegarder un autre octet, car il a toujours une priorité inférieure à celle de^
musicman523
@ musicman523 Merci! Édition.
MD XF
1
Vous devriez mettre à jour votre version de shortC pour prendre ces changements également
musicman523
17

JavaScript (ES6), 20 octets

x=>y=>x-6|y-9?x*y:42

Explication:

Si x == 6 et y == 9, x-6|y-9sera 0 (faux), et 42 sera le résultat.

Fragment:

f=

x=>y=>x-6|y-9?x*y:42

console.log(f(6)(9));
console.log(f(9)(6));

Rick Hitchcock
la source
4
Très bien fait; J'aurais aimé y penser. +1
Shaggy
14

Python 2 , 30 29 octets

Merci à Jonathan Allan d' avoir sauvegardé un octet!

lambda x,y:x*[y,7][6==x==y-3]

Essayez-le en ligne!

Adnan
la source
2
Enregistrez un octet en utilisant le fait que 6 * 7 est un 42:lambda x,y:x*[y,7][6==x==y-3]
Jonathan Allan
@ JonathanAllan Ohh, c'est génial! Merci! :)
Adnan
Cette solution fonctionne également dans Python 3
AMK
Exactement ce que j'ai eu! Je n'arrive pas à trouver un moyen de jouer plus loin.
FlipTack
12

05AB1E , 15 11 9 octets

-4 octets grâce à @Emigna

-2 octets grâce à @Adnan

P¹69SQi42

Essayez-le en ligne!

Comment ça fonctionne

P          # multiply input
 ¹         # push first number
  69       # the number 69
    S      # split per character
     Q     # equality for both inputs
       i42 # if so, print 42
           # otherwise print product
Neil A.
la source
Vous pourriez économiser 4 octets avec‚D96SQi42ëP
Emigna
@ Emign hein ... Pourquoi ,au début?
Neil A.
Associez les 2 entrées pour comparer une seule fois sous forme de liste.
Emigna
Je suppose que 6Qs9Q*cela aurait aussi bien fonctionné pour le même nombre d'octets.
Emigna
Changer le format d'entrée économise 2 octets:P¹69SQi42
Adnan
10

Java (OpenJDK 8) ,24 22 octets

-2 octets grâce à @ OlivierGrégoire

a->b->a==6&b==9?42:a*b

Essayez-le en ligne!

Beluga timide
la source
3
Bienvenue chez PPCG! Je ne connais pas grand chose à Java, mais pourriez-vous supprimer l' System.out.println()appel et laisser la fonction renvoyer le résultat?
ETHproductions
2
@ LưuVĩnhPhúc pas en Java, car je devrais écrire (a^6|b^9)==0car il n'y a pas de comparaison implicite "différente de 0". L'extrait de code résultant aurait 27 octets de long. Quoi qu'il en soit, merci pour la suggestion, et s'il vous plaît dites-moi si je me suis trompé.
Belasha Bashful
1
@Riker Nope, ça ne marche pas comme ça en Java. Par exemple, l'extrait int a = 5; if (a) do_some_stuff(); else do_other_stuff();donne une Type mismatch: cannot convert from int to booleanerreur de compilation. Ils doivent être faits explicitement avec des valeurs booléennes; voir SO et ORACLE .
Belasha timide
3
Vous pouvez utiliser taitement à un octet de rechange, et vous pouvez vous débarrasser de points - virgules comme il ne fait pas partie du lambda à épargner un autre octet: a->b->a==6&b==9?42:a*b.
Olivier Grégoire
1
Juste une note pour laquelle le 0 n'est pas faux. Java est de type sûr, donc 0 est un entier, pas un booléen et la conversion de type de texte non sécurisée n'est pas autorisée, vous ne pouvez donc pas utiliser de valeurs falsy
Martin Barker
6

Ruby, 24 octets

->a,b{a==6&&b==9?42:a*b}
dkudriavtsev
la source
a^6|b^9<1pourrait fonctionner comme booléen. Difficile à tester sur mon smartphone.
Eric Duminil
1
@EricDuminil Malheureusement cette expression est analysée comme (((a^6)|b)^9), par exemple a.^(6).|(b).^(9), il ne fonctionnera pas correctement. a-6|b-9==0fonctionnerait, mais ce n’est pas plus court.
Ventero
@ Ventero: Je n'ai pas pensé à ça. Merci. a,b==6,9ce serait bien, mais ça ne marche pas non plus.
Eric Duminil
6

Brain-Flak , 158 154 148 140 138 126 octets

(({}<>)(((([()()()]<>)){})<({}{}({}))>{(()()()){}(<{}>)}{}))([()]{()(<{}>)}{})(({<{}>{}((<>))}{}){}<{}>{<({}[()])><>({})<>}{})

Essayez-le en ligne!

Explication

Ce code est assez simple. Nous faisons des copies des deux premiers éléments de la pile, en soustrayant 6 de l’un et 9 de l’autre. Nous prenons ensuite la notdes deux valeurs. Nous andces valeurs, multiplions le résultat par 12. Multipliez les entrées et soustrayez les deux résultats.

Assistant de blé
la source
2
Vous voudrez peut-être capitaliser notet and(ou casser la gueule), lire votre description plutôt me fait trébucher.
MD XF
6

Factorio, 661 octets, 6 combinateurs avec 9 connexions

Un combinateur constant est défini sur les sorties A et B. Modifiez-les pour définir l'entrée.

Blueprint string (0.15.18):

0eNrNVm2O2jAQvcv8rEKFvSHLRuqPtrfYCkUhGWAkYkfOGDVCOUBv0bP1JLWTLQuB3U0QbfcPYvzxZt68eYr3sNxaLA0phngPlGlVQfxtDxWtVbr1a1yXCDEQYwEBqLTwUY4Z5WgmmS6WpFLWBpoASOX4HWLRBG8C+EScKr6MIJtFAKiYmLCrpw3qRNliicaleK2SAEpduata+fQObiI+zgKo/R+XIyeDWbcrA18IG71NlrhJd+RuuytPmInby1ucyq+uyFScnPHakWHrVg4VdScmnz2fPzQhjnxQlKlpS4zhk7ugLZd2BCTu0NS8IbXusMvalWgVJyuji4SUA4OYjcWmS606nm31wv8YzI+7SS66axbusHxh1zeITGaJ21C4w41XtyeHHCXH9D+o8eVUjYd3qoY47bc86rWPo158/yze2iCqPtxsmHx3r9ry3E6ylU9cTUv0aITDygwPZaaGeFMgUzbM99NBg/aMegPnV+gxRg6oLtFNZFsjfLhiJB+huZn1B87O7Crr/0Pnfz11vug5/9ePn+/E+2Hf++4beNHV8uzgRWWica6ejnDKiraM5oWXwhtC2CcVDo+FxfAWDfwc3Y9jLv4288cj5qG8IXU3Ie2zKj56xgXgZrNqOURhKGfR/GE6nzfNb7OMaxo=

La sortie est le signal Z et doit être prise à partir des décisions en haut et en bas.

Capture d'écran

latias1290
la source
waaa ... la première fois que je vois une réponse factorielle en ppcg xD
V. Courtois
2
Pas assez marrant.
jimmy23013
6

Gelée , 8 7 octets

Vf96SạP

L'entrée consiste en un tableau de deux entiers: d'abord l'opérande droit, puis celui de gauche.

Essayez-le en ligne!

Comment ça fonctionne

Vf96SạP  Main link. Argument: [b, a]

V        Cast [b, a] to string, then eval the resulting string.
         For [b, a] = [9, 6], this yields 96.
 f96     Filter with 96, yielding [96] if V returned 96, [] otherwise.
    S    Take the sum, yielding either 96 or 0.
      P  Compute the product of [b, a], yielding ba = ab.
     ạ   Compute the absolute difference of the results to both sides.
         When the sum is 0, this simply yields the product.
         However, when [b, a] = [9, 6], this yields 96 - 54 = 42.
Dennis
la source
Cela a comme -1 degré de liberté. Comment ces coïncidences vous viennent-elles à l'esprit?
lirtosiast
5

Factorio, 581 octets, 3 combinateurs avec 4 connexions

Blueprint string (0.16.36):

0eNqllNtu4jAQht9lLldmldNCFWkvto/RCkUhGWAkYkfOGDVCefeOnV1Km7ACemPJ9vibf04+webgsLWkGfITUGV0B/nrCTra6fLgz7hvEXIgxgYU6LLxO2/HpeZFZZoN6ZKNhUEB6RrfII+HtQLUTEw44sKmL7RrNmjF4AyqsaIa7SVHQWs6eWq0dy+46OcvBT3ki1hc1GSxGi8T5XWwNYdig/vySPJYXvxFFnJXB0znT7dkOy4mYR3JspOTs6DRYoFHtD3vSe98XP/CFZ9xtsqe0mW29KdNW9qgOYffgjCOW3eHk+eR3fai1WkuttY0BWlhQM7W4TC61mPAIYzYLxbry6yS7FKxJFs54rANFdhZRP3VMBnWQk08ZvZ+ChpExqSCyX9bYVLCRfxRwbmabenAaK+03rX0/RnT5z7VJbroQnUH7HkGlq7OsDFtc8WYzWJ8WxbTs4rSEu8bZKpuGoXopkn4gH5vGEKiO/SMO5vbtCgDEjTCjwcm5AWGO4ZgknX16Tq7OhRfHiZXypU91PTRd6ZYdIjo8PnmF3+1AvmfuuBq+bRKYmnWKM2G4R1hAPnz

Le combinateur de constantes inférieur gauche doit être réglé sur les sorties A et B en entrée. La sortie est le signal Z du combinateur arithmétique en bas à droite.

entrez la description de l'image ici

Top left: 2147483640 A, 2147483637 B
Top right: If everything = 2147483646 output B, input count
Bottom left: (input) A, (input) B
Bottom right: A * B -> Z
jimmy23013
la source
5

MATL , 11 octets

[BE]=?42}Gp

L'entrée est un tableau avec les deux nombres.

Essayez-le en ligne!

Explication

[BE]    % Push array [6, 9]
=       % Implicit input: array of two numbers. Compare with [6, 9] element-wise
?       % If the two entries are true
  42    %   Push 42
}       % Else
  G     %   Push input
  p     %   Product of array
        % Implicit end. Implicit display
Luis Mendo
la source
4

GW-BASIC , 55 octets

1INPUT A:INPUT B
2IF A=6THEN IF B=9THEN ?"42":END
3?A*B

Sortie:

sortie

La première machine chez pcjs a IBM BASIC, ce qui est pratiquement la même chose. Pour tester cela, allez là-bas, appuyez Runsur la machine, appuyez sur Enter- Enteret tapez BASICApour passer en mode BASIC. Ensuite, entrez le code source (il sera automatiquement imprimé pour vous), tapez RUN, entrez deux entiers, et c'est fait!

MD XF
la source
3
Etes-vous sûr que le bytecount est correct? GW-BASIC utilise un codage dans lequel certains mots, tels que INPUT, sont codés en moins d'octets que ne le suggèrent les caractères qui les composent. Le compte me semble donc élevé.
@ ais523 Eh bien, je l'ai parcouru wcet j'ai eu 55 ... Copié-collé dans mon émulateur et il avait le comportement attendu.
MD XF
3
D'accord, ce que je veux dire, c'est que vous accordez probablement une note plus élevée à votre soumission. Obtenez GW-BASIC pour enregistrer le fichier, puis examinez la taille du fichier obtenu sur le disque. il devrait être plus petit.
@ ais523 Enregistré sous OUT.BAS: i.stack.imgur.com/32eH1.png Bytecount est la valeur du milieu.
MD XF
OK, je ne m'y attendais pas, mais je suppose que c'est un lavage dans cette situation. (Ou peut-être qu'il y a plus d'un format de sauvegarde?)
4

Check , 34 33 octets

.:+&>#v
#>42#v#9-!\>6-!*?
 d* ##p

Check est mon nouveau esolang. Il utilise une combinaison de sémantique 2D et 1D.

L'entrée consiste en deux nombres transmis via des arguments de ligne de commande.

Explication

La pile commence par les arguments de la ligne de commande. Appelons les arguments aet b.

La première partie, .:+&essentiellement, duplique la pile, la laissant comme a, b, a, b. >pousse 0 dans la pile (il fait partie d'un littéral numérique complété par 9).

#passe en sémantique 2D et vredirige l'IP vers le bas. L'IP se heurte immédiatement à un #qui revient à la sémantique 1D.

9-!vérifie si best égal à 9 (en soustrayant 9 et en prenant le NON logique). \>6-!puis vérifie si aest égal à 6. La pile contient maintenant a, b, 1, 1si et seulement si b==9et a==6. Multiplier avec *prend le ET logique de ces deux valeurs, en donnant a, b, 1si les entrées étaient 6et 9, et a, b, 0sinon.

Après cela, l’IP rencontre un ?. Ceci basculera en mode 2D si la valeur de pile supérieure est différente de zéro, sinon, continuera en mode 1D.

Si la valeur de pile supérieure était 1, cela signifie que les autres valeurs de pile sont 6et 9, nous plaçons donc 42 dans la pile avec >42, puis passons à la seconde #sur la dernière ligne.

Si la valeur de pile supérieure était 0, l'exécution passe à la ligne suivante. dsupprime le 0(comme ?ne le fait pas), puis on multiplie les deux entrées avec *. Les ##commutateurs dans et hors du mode 2D, ne faisant rien.

Les branches ont maintenant rejoint à nouveau. La pile contient 6, 9, 1, 42, ou a*b. pimprime la valeur de pile supérieure et ensuite le programme se termine, en éliminant le reste de la pile.

Fruit d'esolanging
la source
Cela ressemble à une langue chouette!
Pas un arbre
3

JavaScript (ES6), 25 octets

x=>y=>[x*y,42][x==6&y==9]
Hirsute
la source
3

Python 3 , 36 33 octets

lambda x,y:42if x==6==y-3else x*y

Essayez-le en ligne!

Martistes
la source
1
Autre version, même taille: lambda x:x[0]*x[1]if x!=(6,9)else 42. La seule différence est le type d'entrée.
musicman523
Nevermind - votre version éditée est plus courte :)
musicman523
Le code que vous avez posté ne fonctionne pas vraiment, alors je l'ai changé pour la version de travail sur TIO à laquelle vous avez lié.
ETHproductions
Cela fonctionne pour moi: In [1]: f = lambda x, y: 42if 6 == x == y-3else x * y In [2]: f (6,9) Out [2]: 42 In [3 ]: f (9,6) Out [3]: 54 @ETHproductions
Martmists Le
@Martmists Il vous manquait alors un espace, car votre code étaitf=lambda x,y:42if6==x==y-3else x*y
ETHproductions
3

APL (Dyalog) , 10 octets

×-12×6 9≡,

Essayez-le en ligne!

× le produit (des arguments)

- moins

12× douze fois

6 9≡ si (6,9) est identique à

, la concaténation (des arguments)

Adam
la source
Oh wow je viens de voir cela et ma réponse J est exactement la même que celle-ci: / sauf un octet de plus
Conor O'Brien
@ ConorO'Brien Ça a du sens. JL et APL tacites sont pour la plupart équivalents, à l'exception des primitives multi-caractères de J (et ayant besoin de Cap pour une finale au sommet).
Adám
3

R, 41 Je pense que je ne sais pas comment compter les octets Je suis nouveau: D

function(a,b){

if(a==6&b==9){42} else {a*b}

}

Je définis une fonction dont les arguments sont a et b dans cet ordre . Si a est égal à 6 et b est égal à 9, il retourne 42. Sinon, a fois b

R17
la source
Bienvenue sur le site! :)
DJMcMayhem
Bienvenue. Tenez compte du fait que les nouvelles lignes et les espaces comptent aussi. Dans votre cas, si vous supprimez les nouvelles lignes et les espaces (ce que vous pouvez), il n'y en a que 41.
Masclins
1
Vous pouvez couper deux octets en utilisantifelse(a==6&b==9,42,a*b)
Masclins
Vous pouvez réduire le tout à 33 octets function(a,b)`if`(a-6|b-9,a*b,42).
rturnbull
Il ne s'agit que de 41 octets après la suppression des espaces inutiles, mais unilatéralement, il s'agit de 47 octets.
Pavel
3

SPL , 356 octets

a.Ajax,.Puck,.Act I:.Scene I:.[Enter Ajax and Puck]Ajax:Listen to your heart!Puck:Listen to your heart!Are you as big as the sum of a big big big cat and a cat?If so, am I as big as the sum of a big big cat and a big cat?If so, you are as big as the product of I and the sum of I and a cat.If not, you are as big as the product of you and I.Open your heart

Avec nouvelles lignes et espaces:

a.                       *Title*
Ajax,.                   *Declare variable Ajax*
Puck,.                   *Declare variable Puck*
Act I:.
Scene I:.
[Enter Ajax and Puck]
Ajax: Listen to your heart!                  *Set Puck's value to user input*
Puck: Listen to your heart!                  *Set Ajax's value to user input*
      Are you as big as the sum of a big 
       big big cat and a cat?                *Is Ajax=9?* 
      If so, am I as big as the sum of a 
       big big cat and a big cat?            *Is Puck=6?* 
      If so, you are as big as the product 
       of I and the sum of I and a cat.      *If so, set Ajax=42* 
      If not, you are as big as the product 
       of you and I.                         *If not set Ajax=(Ajax)(Puck)*
      Open your heart                        *Print Ajax's value*
William Taylor
la source
3

Japt , 13 11 12 octets

¥6&V¥9?42:N×

Essayez-le en ligne

  • 2 1 octets enregistrés grâce à obarakon.
Hirsute
la source
1
N¬¥69?42:N×pour 11 octets
Oliver
Bien aimé, @obarakon.
Shaggy
3

Standard ML (MLton) , 22 à 20 octets

2 octets sauvés grâce à @Laikoni!

fun$6 $9=42| $x y=x*y

Essayez-le en ligne!

C’est le genre de chose à laquelle SML est destiné, c’est pourquoi il bat ShortC et Python.

L'ancienne version était beaucoup plus jolie. : P

musicman523
la source
20 octets: essayez-le en ligne!
Laikoni
@ Laikoni Wow, je ne savais pas que tu pourrais utiliser $comme identifiant! Pourquoi cela ne compile-t-il pas si vous supprimez l'espace entre |et $?
musicman523
SML distingue les identificateurs alphanumériques et symboliques , ce qui peut être très pratique pour le golf. |$est analysé comme un identifiant symbolique unique, de sorte que tout se casse. Je prévois d’écrire bientôt une question de conseils pour SML et d’ajouter une réponse concernant ces deux types d’identificateurs.
Laikoni
2

Pyth, 12 octets

-*FQ*12q(6 9

Essayez-le en ligne

Explication

 -*FQ*12q(6 9
  *FQ             Take the product
        q(6 9)Q   Check if the (implicit) input is (6, 9)
 -   *12          If so, subtract 12
Mnémonique
la source
Solution intelligente. Je l'ai essayé avec des déclarations ternaires dans 15:AQ?&q6Gq9G42*GH
Tornado547
2

Retina , 36 octets

^6 9$
6 7
\d+
$*
1(?=1* (1+))|.
$1
1

Essayez-le en ligne! Multiplication unaire standard, modifie simplement l'entrée pour gérer le cas particulier.

Neil
la source
2

Gelée , 10 octets

⁼6,9ȧ42ȯ⁸P

Un lien monadique prenant une liste des deux nombres.

Essayez-le en ligne!

Comment?

⁼6,9ȧ42ȯ⁸P - Link: list of numbers [a,b]
 6,9       - 6 paired with 9, [6,9]
⁼          - equals? (non-vectorising) (1 or 0)
     42    - literal answer, 42
    ȧ      - logical and               (42 or 0)
        ⁸  - link's left argument, [a,b]
       ȯ   - logical or                (42 or [a,b])
         P - product                   (42 or a*b)
Jonathan Allan
la source
Vous auriez pu simplement utiliser ?, comme je l'ai fait. ;)
Erik the Outgolfer
Ah, parce qu’il a la ,particularité de faire partie du motif littéral des expressions rationnelles, il 6,9est donc analysé comme un simple jeton et le quick $peut le combiner . Avez-vous raisonné cela ou juste essayé et remarqué que cela fonctionnait?
Jonathan Allan
1
J'ai raisonné ça.
Erik the Outgolfer
2

SILOS , 81 à 67 octets

readIO
J=i
readIO
a=(J-6)^2+(i-9)^2
a/a
a-1
a*12
x=J*i+a
printInt x

Essayez-le en ligne!

En un sens, l'addition fonctionne comme une porte NAND intéressante dans SILOS.

-14 octets grâce à @Leaky Nun

Nous créons essentiellement un nombre "a" qui vaut 0 (falsy) si et seulement j est égal à 6 et i = 9, puis nous le divisons par lui-même, soustrayons-en un et le multiplions par 12 afin de l'ajouter à notre produit.

Si "a" était 1 après avoir soustrait un et multiplié, cela devient un non-op, cependant dans le cas où a vaut 0, 0/0 jette silencieusement une erreur (qui est automatiquement saisie par magie) a devient 0, puis devient -1 et nous finissons par soustraire 12 de notre produit.

Rohan Jhunjhunwala
la source
69 octets
Leaky Nun
67 octets
Leaky Nun
@ LeakyNun ooh, c'est intelligent.
Rohan Jhunjhunwala
En fait, 0/0devient 0.
Leaky Nun
@ LeakyNun que je voulais dire devient 0, puis décrémenté. Fixation.
Rohan Jhunjhunwala