Vue d'ensemble
Avec une chaîne de 3 lignes, déterminez si la structure tombe à gauche, est équilibrée ou tombe à droite.
Structure d'entrée
Vous pouvez imaginer la structure comme une tige de métal avec des éléments sur le dessus, le tout équilibré sur une tige verticale.
1 7 4 a
===============
|
La première ligne est les articles. Le poids de chaque élément est calculé comme la valeur ascii du caractère moins 32. (Les caractères de moins de 32 ans ne sont pas pris en compte et les espaces pèsent 0). Gardez à l'esprit que la force d'un élément sur la tige est son poids multiplié par la distance jusqu'au pivot.
La deuxième ligne est la tige. Chaque longueur de tige pèse 1 unité à elle seule. Cette ligne est exclusivement égale à des signes ( =
).
La troisième ligne est le point pivot. Cela peut être placé n'importe où et est représenté par un nombre d'espaces suivi d'un seul caractère pipe ( |
).
Exemples
Contribution:
===== |
Sortie: balance
Contribution:
===== |
Sortie: chutes à gauche
Contribution:
% ===== |
Sortie: balance (car %
pèse assez pour compenser le poids du côté gauche de la tige)
Contribution:
aa ======= |
Sortie: tombe à droite (parce que a
la droite est plus éloignée du point de pivot)
Contribution:
1 7 4 A
===============
|
Sortie: chutes à gauche
Contribution:
1 7 4 a
===============
|
Sortie: tombe à droite (les lettres minuscules sont lourdes!)
Contribution:
$ ~
===============
|
Sortie: balance
Remarques
- Les espaces de fuite sont autorisés, mais pas les espaces de début.
- Votre programme peut sortir dans le format de votre choix, à condition qu'il y ait 3 sorties distinctes pour gauche, balance et droite.
- Votre programme doit accepter le format indiqué en entrée.
Réponses:
JavaScript (ES6),
116111108106 octets-5 octets en sommant via
eval(array.join`+`)
au lieu dearray.reduce()
.-3 octets par défaut à la
1
place de32 - 31
, ce qui permet de supprimer les parenthèses.-2 octets puisque le point de pivot est la longueur de la dernière ligne - 1
Sorties
-1
,0
ou1
, pour gauche, symétrique ou droite, respectivement. Il s'est avéré être similaire à la réponse de Chas Brown en python , le crédit y est donc crédité.Peut économiser 4 octets si la première ligne est complétée pour correspondre à la longueur de la tige en utilisant
(31-t.charCodeAt(i))*(b.length+~i)
.Test Snippet
Inclut une sortie supplémentaire (
Left
/Balanced
/Right
) avec le nombre.Une autre méthode de 106 octets
Au lieu d’
join
inclure un tableau sur+
s, nous créons une chaîne de nombres, chacun précédé de préfixe+
. Le principal+
est ignoré.la source
(b.length+~i)
pourrait aider à sauver un octet. (De plus, je ne comprends pas pourquoi vous en avez||1
.)b.length+~i
retourne le négatif dei-b.length+1
; cela pourrait aider si je pouvais nier l'autre partie. En ce qui concerne le||1
, c’est parce que j’imaginais que la première ligne n’était pas rembourrée pour correspondre à la longueur de la tige;t.charCodeAt(i)
elle reviendrait doncNaN
au-delà de la fin de la première ligne.Python 2 ,
112110 octetsEssayez-le en ligne!
EDIT: Enfin réussi à éliminer le
enumerate
etrjust
pour un maigre 2 octets ... meh!Prend dans une ficelle; sorties -1,0, ou 1 pour les chutes à gauche, les soldes, les chutes à droite, respectivement.
Le premier passage à 112 octets était:
la source
(ord(c)-31)
Il m'a fallu un certain temps pour me rendre compte qu'il s'agissait en réalité du poids de la tige et des éléments. Très intelligent!return
parprint
for -1 octet (bien que cela ne fonctionne pas vraiment avec le code TIO actuel).Haskell,
212171 octets (188 si prendre l'entrée comme une chaîne)Variante de 171 octets
Variante de 188 octets
Explication
la source
fromEnum
au lieu deord
et déposer leimport
.c
peut être simplifié enc p=max(ord p-32)0
(ou avecfromEnum
) et comme vous l’utilisez une seule fois, en ligne.c
peut même être simplifiée (les caractères de moins de 32 ans ne sont pas pris en compte)c p=ord p-32
. C'est aussip
fondamentalementlength
(moins 1), doncp x=length x-1
travaillerait aussi (et vous pouvez aussi le mettre en ligne). Jetez également un coup d’œil à ma solution, à la manière dont j’utilisesignum
- vous pouvez fairer o l s = signum $ 2 * z ...
quels retours0,1,-1
pour B, L, R.[3,4,7]
et prend 3 chaînes au lieu d'une. (voirlines
)Gelée , 30 octets
Suite de tests
Sorties 0 pour équilibré, 1 pour droite et -1 pour gauche.
Comment ça marche
la source
Gelée , 24 octets
Essayez-le en ligne!
-1
pour tomber à gauche,0
pour équilibrer,1
pour tomber à droite (programme complet).[-1]
pour tomber à gauche,[0]
pour équilibrer,[1]
pour tomber à droite (fonction).La première ligne doit avoir des espaces finaux, la dernière ligne ne doit pas.
Explication (nous commençons par la ligne du bas):
Tout d'abord, nous travaillons avec des lignes individuelles, nous devons donc les obtenir d'une manière ou d'une autre. C'est un travail pour
Ỵ
. Ensuite, nous devons traiter la\n
version -split de l'entrée comme s'il s'agissait de l'entrée d'origine. Nous utilisons doncµ
pour appliquer une chaîne monadique à la valeur actuelle.Maintenant, nous commençons un vrai travail et notre premier travail serait de calculer les facteurs de pondération. Il s'agit essentiellement d'une plage [distance de l'extrême gauche au pivot..0..distance du pivot à l'extrême droite]. Tout d’abord, nous devons trouver l’indice 1 du pivot, qui est essentiellement la longueur de la dernière ligne sans espaces de fin. Donc, nous supprimons la dernière ligne (ligne pivot) de notre liste d'origine avec
Ṫ
, puisque nous n'en avons plus besoin, puis nous prenons sa longueur avecL
. Nous devons ensuite prendre la longueur de la canne, pour laquelle nous faisons la même chose avec la dernière ligne (ligne de canne)ṪL$
. Enfin, pour obtenir la gamme, nous cartographions | x - y | à [1..rod length], où x est l'indice de pivot et yest chaque élément de la liste sur laquelle nous cartographions. Nous faisons cela en utilisantạЀ
, oùạ
calcule | x - y | etЀ
fait une gamme de 1 à et y compris la longueur de la tige. Maintenant, nous aurons la plage que nous voulons.Après cela, nous devons multiplier chaque entier représentant un morceau de la tige avec son poids correspondant. Pour calculer les poids, nous utilisons
Ç
, allant à la première ligne de notre code. Nous prenons la ligne restante avecṪ
ses codes de caractères avecO
, puis nous calculons x - 31 en utilisant_31
, x étant chaque code. Nous l' espace puis attribuez - lui poids 1 (0 + pièce de tige = 1),!
poids 2 (1 + 1) , etc. Nous en avons terminé avec la ligne supérieure, maintenantÇ
renverrait la liste des poids, que nous multiplier avec le correspondant entiers représentant les pièces de tige avec×
.Après cela, nous nous sommes séparés avec
ṣ0
le point de pivot, représenté par un 0 (aucun poids n’y affectant le résultat), ce qui a donné une liste de la forme [[1er poids, 2e poids ... poids juste avant le pivot]] , [poids juste après pivot, poids après celui avant ... dernier poids]]. Ces listes représentent les côtés de la tige, à gauche et à droite. Nous additionnons maintenant chacune des listes en utilisantS€
pour obtenir le total des poids de chaque côté etI
en prenant le delta, qui sera négatif si le côté gauche est plus lourd, zéro si elles ont une pondération égale et positif si le côté droit est plus lourd . Donc, pour retourner le résultat final en utilisant ceci correctement à notre avantage, nous prenons le signe avecṠ
.la source
APL (Dyalog) , 43 octets *
Essayez-le en ligne!
⊆⊢
partitionner l'argument en séries de caractères qui sont⎕TC[2]∘≠
différente de la 2 ème T erminal C ontrol caractère (Linefeed) **{
…}
Appliquez la fonction anonyme suivante à la liste de chaînes:⊃⌽⍵
dans la première chaîne de la liste inversée (c'est-à-dire la dernière)'|'⍳⍨
trouver le ɩ ndex du point de pivotement(
…)-
Soustrayez cela de la liste suivante:⊃⍵
la première chaîne≢
sa longueur⍳
tous les ɩ ndices de cette(
…)+.×
Somme pondérée avec ces poids et les valeurs suivantes:⊃⍵
la première chaîne⎕UCS
les points de code dans le U niversal C haracter S et¯31+
ajouter un négatif trente et un (32 pour le décalage requis moins un pour la tige)×
signum de cela* Pour 1 octet par caractère, utilisez
{×(¯31+⎕UCS↑⍵)+.×(⍳≢↑⍵)-'|'⍳⍨↑⌽⍵}⎕TC[3]∘≠⊂⊢
avec⎕ML←3
. Essayez-le en ligne!**
⎕TC
est obsolète et utilisé ici uniquement à des fins de golf. Dans le code de production, il faut utiliser⎕UCS 10
.la source
Haskell (Lambdabot), 142 octets
Essayez-le en ligne!
Version non-golfée:
la source
Python 2 , 90 octets
Attend que les lignes d’entrée soient complétées (avec des espaces) à la longueur correcte. Les sorties
-1
pour des chutes à gauche ,0
pour équilibre , et1
pour tombe bien .Essayez-le en ligne!
94 octets
Pour +4 octets, nous pouvons avoir une version qui, à l'aide d'une
while
boucle, nécessite des lignes brisées plutôt que des lignes complétées :Essayez-le en ligne!
la source
Ruby, 543 octets
la source
C (gcc) , 106
107121123124129131octetsRenvoie 0 pour la gauche, 1 pour la balance et 2 pour la droite.
Exigez que les trois lignes aient la même longueur et finissez avec
\n
pour déterminer la longueur de la chaîne.Essayez-le en ligne!
la source
Mathematica, 91
92octetsLa première ligne devrait avoir la même longueur avec la tige. La troisième ligne ne doit contenir aucun espace de fin.
Renvoie -1, 0, 1 pour une chute gauche, l'équilibre et une chute droite.
la source
C # (.NET Core) ,
1279590 + 18 = 108 octetsPour cette fonction, la première ligne doit être correctement rembourrée avec des espaces de même longueur que la tige et la troisième ligne ne doit pas comporter d'espaces d'essai. Ces conditions sont autorisées (voir les commentaires de la question).
Essayez-le en ligne!
Les sorties:
-1 pour la pointe gauche
0 pour la balance
1 pour la droite
la source
Python 3, 217 octets
Fonctionne également en Python 2.7
Retourne 1 pour le côté gauche, -1 pour le côté droit, ou zéro si équilibré.
Version lisible:
la source
sum([...])
, vous pouvez simplement avoirsum(...)
i[c:].find(e)
peut êtrei.find(e,c)
, utiliseri,m,n=s.split('\n')
et éviter le besoin des
, utiliserreturn 2*(r>l) or l>r
pour réduire considérablement le coût du test à la fin (la valeur de retour est numériquement équivalente, mais c'est auTrue
lieu de1
et à laFalse
place de0
), ou vraiment, utilisez un ensemble de retour différent Valeurs et faitesreturn (l>r)-(r>l)
pour renvoyer le 1, 0 ou -1 comme lecmp
faisait l'ancienne fonction.i[c:]
parce que la méthode la plus courte entraînait un problème étrange pour chaque saisie dans le coin (essayez de placer un point|
exactement au centre, au-dessus de la barre).PHP, 105 octets
imprime
-1
/0
/1
pour gauche / balance / droite. Exécuter en pipe-nR
ou essayer en ligne .panne
la source
Charbon de bois , 31 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Sorties 0 pour la balance ou -1 ou 1 pour la chute gauche ou droite. Edit: Les changements dans le charbon signifient maintenant que cela
≔ΣEθ×⁻κ⌕ζ|⁻℅ι³¹ξI⁻›ξ⁰‹ξ⁰
fonctionne pour 24 octets: Essayez-le en ligne! Le lien est vers la version verbeuse du code. Remarque: les deux réponses nécessitent une entrée complétée, mais peuvent être adaptées pour accepter une entrée non complétée au coût de 3 octets:≔⁰ξFLη≔⁺ξ×⁻ι⌕ζ|⁻℅§◨θLηι³¹ξI⁻›ξ⁰‹ξ⁰
Essayez-le en ligne!≔ΣE◨θLη×⁻κ⌕ζ|⁻℅ι³¹ξI⁻›ξ⁰‹ξ⁰
Essayez-le en ligne! Les liens doivent contenir une version verbeuse du code.la source