Introduction:
Jetons un coup d'œil à une calculatrice standard dans Windows:
pour ce défi, nous ne regarderons que les boutons suivants et ignorerons tout le reste:
7 8 9 /
4 5 6 *
1 2 3 -
0 0 . +
Défi:
Entrée:
vous recevrez deux entrées:
- L'un est quelque chose pour indiquer la rotation par incréments de 90 degrés
- L'autre est une liste de coordonnées représentant les boutons appuyés sur la calculatrice pivotée.
Sur la base de la première entrée, nous faisons pivoter la disposition mentionnée ci-dessus dans le sens horaire par incréments de 90 degrés. Donc, si l'entrée est 0 degrees
, elle reste telle quelle; mais si l'entrée est 270 degrees
, elle sera tournée trois fois dans le sens horaire (ou une fois dans le sens antihoraire). Voici les quatre dispositions possibles:
Default / 0 degrees:
7 8 9 /
4 5 6 *
1 2 3 -
0 0 . +
90 degrees clockwise:
0 1 4 7
0 2 5 8
. 3 6 9
+ - * /
180 degrees:
+ . 0 0
- 3 2 1
* 6 5 4
/ 9 8 7
270 degrees clockwise / 90 degrees counterclockwise:
/ * - +
9 6 3 .
8 5 2 0
7 4 1 0
La deuxième entrée est une liste de coordonnées dans n'importe quel format raisonnable † . Par exemple (tableau entier 2D à 0 index):
[[1,2],[2,3],[0,3],[1,0],[1,1]]
Sortie:
Nous sortons à la fois la somme, ainsi que le résultat (et un signe égal =
).
Exemple:
Donc si l'entrée est 270 degrees
et [[1,2],[2,3],[0,3],[1,0],[1,1]]
, la sortie deviendra:
517*6=3102
Règles du défi:
- † Les entrées peuvent être dans n'importe quel format raisonnable. La première entrée peut être
0-3
,1-4
,A-D
,0,90,180,270
, etc. La seconde entrée peut être un 0 indexé tableau 2D, 1 indexé tableau 2D, une chaîne, la liste des points d' objets, etc. Votre appel. Il est même possible d'échanger les coordonnées x et y par rapport aux exemples d'entrées donnés. Veuillez indiquer les formats d'entrée que vous avez utilisés dans votre réponse! - Vous êtes autorisé à ajouter des espaces (c'est-à-dire
517 * 6 = 3102
) si vous le souhaitez. - Vous êtes autorisé à ajouter des zéros de fin après la virgule, jusqu'à un maximum de trois (c'est
3102.0
-à- dire /3102.00
/3102.000
au lieu de3102
ou0.430
au lieu de0.43
). - Vous n'êtes pas autorisé à ajouter des parenthèses dans la sortie, ce
(((0.6+4)-0)/2)/4=0.575
n'est donc pas une sortie valide. - Vous êtes autorisé à utiliser d'autres symboles d'opérande pour votre langue. Alors
×
ou·
au lieu de*
; ou÷
au lieu de/
; etc. - Puisqu'une calculatrice calcule automatiquement lors de la saisie d'un opérande, vous devez ignorer la priorité de l'opérateur! Il
10+5*3
en résultera donc45
((10+5)*3=45
), pas25
(10+(5*3)=25
)
(c'est-à-dire10
→+
→5
→*
(il affiche maintenant 15 à l'écran) →3
→=
(il affiche maintenant la réponse45
)). Gardez cela à l'esprit lors de l'utilisationeval
et des fonctions similaires sur la somme résultante. - Il n'y aura pas de cas de test pour la division par 0.
- Il n'y aura aucun cas de test avec plus de trois chiffres décimaux comme résultat, donc pas besoin d'arrondir le résultat.
- Il n'y aura pas de cas de test où plusieurs opérandes se suivent ou où deux points se suivent.
- Il n'y aura pas de cas de test pour les nombres négatifs. Le signe moins (
-
) ne sera utilisé que comme opérande, pas comme négatif. - Il n'y aura pas de cas de test pour
.##
sans numéro de tête avant la virgule (c'est2+.7
-à- dire qu'il ne s'agira pas d'un cas de test valide, mais il2+0.7
pourrait l'être).
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues autres que le golf de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés, des programmes complets. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code.
- Veuillez également ajouter une explication si nécessaire.
Cas de test:
Input: 270 degrees & [[1,2],[2,3],[0,3],[1,0],[1,1]]
Output: 517*6=3102
Input: 90 degrees & [[3,1],[0,0],[0,1],[3,3],[2,0],[0,3],[0,0],[0,2],[3,0],[2,1]]
Output: 800/4+0.75=200.75
Input: 0 degrees & [[0,0],[1,0],[2,0],[3,0],[1,2],[2,1],[2,2]]
Output: 789/263=3
Input: 180 degrees & [[3,0],[1,0],[1,2],[0,0],[3,2],[0,1],[2,0],[0,3],[2,1],[0,3],[3,2]]
Output: 0.6+4-0/2/4=0.575
la source
1+-*/+-*/2
donne0.5
sur la calculatrice Windows (10).[1,3],
2+.7
?Réponses:
SOGL V0.12 ,
706967 octetsEssayez-le ici , ou essayez une version qui prend les entrées comme indiqué dans les cas de test
utilise l'
I
opérateur SOGLs , qui fait tourner le tableau. Lit ensuite une chaîne sous forme de tableau JavaScript et, lorsqu'une opération est utilisée, encapsule le résultat précédent entre parenthèses, évalue en JavaScript et supprime ensuite les parenthèses.la source
Dyalog APL,
94888685 octetsEssayez-le en ligne!
Prend les rotations comme argument de gauche,
0-3
, et les indices basés sur 1 comme argument droit, comme une liste dey x
coordonnées, comme(1 1)(2 3)(4 5)
etc.Cela est devenu assez compliqué à cause de l'évaluation à droite des expressions dans APL.
la source
C (gcc) , 282
294295296300304306 310octetsToutes les optimisations doivent être désactivées et ne fonctionnent que sur GCC 32 bits.
1 octet grâce à @Orion!
Essayez-le en ligne!
Prototype de fonction:
Format d'entrée (comme sur TIO):
Version non golfée avec commentaires:
Le code peut gérer des cas tels que
1+.7
ou-8*4
.C très triste n'a pas de
eval
😭.la source
3*-5
invalides. Je l'ai spécifié dans les règles.double
parfloat
un octet libre. En outre, n'est-il pasputc()
identique àputchar()
? Je pourrais toutefois avoir tord.putc
besoin d'un deuxième argument pour spécifier dans quel flux vous écrivez?JavaScript (ES6),
162160157 octetsPrend l'entrée comme orientation
o
et tableau de coordonnées (y, x)a
dans la syntaxe de curry(o)(a)
.L'orientation est un entier dans [0..3] :
Cas de test
Afficher l'extrait de code
la source
Ruby ,
135 133132 octetsEssayez-le en ligne!
Orientation sous forme d'entier: 0 pour 0 °, 1 pour 90 ° et ainsi de suite.
la source
Python 3,
235234230 octetsUn peu moche mais cela fonctionne pour tous les cas de test sauf le premier, qui ne semble pas correspondre à l'exemple de calculatrice. Je prends la rotation comme 0-3 (0-270) et je multiplie par 16 pour compenser.
eval()
est une fonction intégrée qui tente de compiler des chaînes sous forme de code et gère la conversion des symboles de texte en opérateurs.Autre méthode, cela s'est avéré un peu plus long mais j'aime vraiment cette astuce SO pour faire tourner le tableau.
la source
Java 10,
418380 octetsDécidé de répondre également à ma propre question. Je suis sûr qu'il peut être joué un peu plus en utilisant une approche différente.
Saisissez
int
(0-3
) etint[][]
(indexé 0 / le même que dans la description du défi). Afficher commefloat
avec interligne.0
si le résultat est un entier au lieu d'un nombre décimal.Explication:
Essayez-le ici.
la source