Ici en Californie, nous sommes dans une sécheresse, nous devons donc savoir combien d'eau il nous reste afin de conserver autant d'eau que possible.
L'eau étant limitée, votre code devra être le plus court possible.
Exemples
| |
| |
|~~~|
|___|
Output: 0.5
|~~~~~|
| |
| |
|_____|
Output: 1
| |
|__|
Output: 0 (or bonus)
spécification
L'entrée se composera uniquement de tous: |_ ~
et de nouvelles lignes. Tous les ci-dessus ~
sont considérés comme de l'air; _
, les espaces en dessous ~
et ~
lui-même sont considérés comme de l'eau. Le pourcentage d'eau restant est à côté de l'ordinateur water / (air + water)
. Votre sortie doit être précise à 4 décimales (sauf si vous optez pour le bonus en pourcentage). L'entrée sera toujours rectangulaire. Le ~
sera sur une seule ligne, le cas échéant. L'entrée peut également éventuellement avoir un saut de ligne si vous le souhaitez.
Prime
Si vous optez pour les deux bonus, le bonus de -15% est appliqué avant le bonus de -35
Bonus de -35 octets: si votre code affiche "Cette chèvre sèche de la main", au lieu de 0 lorsque la sortie est 0
-15% Bonus: Si vous affichez un pourcentage.
Pour ce faire, vous devez déplacer la décimale de deux places vers la gauche, couper les zéros de tête et ajouter un %
à la fin. Les zéros de fin (max 2) sont autorisés tant qu'ils n'affectent pas la valeur. 0.5
-> l'un des:50.00% 50% 50.0%
|~~~|
(pas de soulignement) une entrée valide?Réponses:
Pyth -
17464552 * .85 - 35 = 9,2 octetsFiltre l'entrée (avec le nouveau
#
filtre meta-op!) Pour une ligne avec~
en elle, puis indexe cela à l'entrée, puis divise cela par la longueur de l'entrée. S'il n'y en a pas~
, il génère une erreur et déclenche la clause except de.x
et imprime la chaîne.Essayez-le en ligne ici .
la source
Python 3, 37 octets
Pas de bonus. Prend une chaîne d'entrée avec des retours à la ligne, y compris un retour à la ligne de fin.
Voyons pourquoi la formule fonctionne. La fraction d'eau est le complément de la fraction d'air que nous allons dériver.
Numéroter les lignes
0, 1, 2, ...
, nous avonsIl en va de même si les deux sont multipliés par la largeur de chaque ligne, en comptant les retours à la ligne, ce qui simplifie les expressions en nombre de caractères.
Le début de la ligne d'eau se trouve en recherchant la chaîne d'entrée
x
pour|~
, et le nombre de caractères est juste la longueur.Enfin, afin de faire fonctionner les entrées sans eau, nous ajoutons une ligne d'eau fictive du début
|~
à la fin avant la recherche, ce qui donne l'impression que le niveau d'eau est de 0.Les bonus ne valaient pas la peine. Le meilleur que j'ai obtenu sur la chaîne est 73-35 = 38:
la source
CJam,
19171658 * 0,85 - 35 = 14,3 octetsEssayez-le en ligne
Cette version obtient les deux bonus. L'entrée doit avoir une nouvelle ligne de fin pour que cette solution fonctionne.
Merci à @Martin Büttner pour avoir économisé 2 octets.
Explication:
la source
JavaScript (ES6), 45 (94-15% -35)
En tant que fonction anonyme. À l'aide de chaînes de modèle, il existe une nouvelle ligne significative et incluse dans le nombre d'octets
Modifier 1 octet enregistré thx @ user81655
Moins golfé
Extrait de test
la source
p=~i
parp=i
,&&-p
avec&&p-q
et1+~p
pour1+p
sauver 1 octet.Par , 57 * 85% - 35 = 13,45 octets
Explication
la source
Perl, 70 - 15% - 35 = 24,5 octets
comprend +1 pour
-p
Avec commentaires:
Version 26 + 1 octet, pas de bonus: 27
Version 34 + 1 octet, avec 15% de bonus: 29,75
Version 61 + 1 octet, avec un bonus de -35: 27
Version 69 + 1 octet, les deux bonus: 24,50
la source
Javascript, 59,3
J'espère que les décimales supplémentaires sont OK. Ne suppose aucune nouvelle ligne de fin.
la source
Haskell, 56 octets
Exemple d'utilisation:
f "| |\n|~~|\n| |\n|__|"
->0.75
.l
est une fonction de longueur personnalisée, ce qui est nécessaire, car la construction danslength
renvoie des valeurs entières, mais nous avons besoin de valeurs à virgule flottante pour la division (il y agenericLength
qui fournit également cette fonctionnalité, mais elle est plus longue, sans parler de la condition requiseimport Data.List
).f
divise l'entréei
en lignes (->s
) puis en une paire où le premier élément est une liste avec toutes les lignes jusqu'au (et à l'exclusion) le premier avec un~
dedans. Le deuxième élément est une liste avec le reste des lignes. Le résultat est la longueur du deuxième élément divisée par la longueur des
.Les bonus ne sont pas payants.
la source
Python est verbeux!
Python: 98,45 octets
(157 * 0,85) - 35 = 98,45 octets
Cette version lit à partir de stdin et recueille les deux bonus:
la source
import sys;r=[x[1]for x in sys.stdin];print(1-r.index('~')/len(r))
print
comme une fonction, j'ai donc supposé que vous utilisiez Python 3.Awk, 72 caractères - 15% - 35 = 26,2
Exemple d'exécution:
(Initiale
1;
uniquement utilisée dans ces échantillons pour afficher le réservoir «lisible par l'homme».)la source
PHP, 92 caractères - 15% - 35 = 43,2
(88 caractères dans deux blocs de code + 4 options de ligne de commande de caractères.)
Suppose que la
error_reporting
valeur par défaut est définie.(Pas un gros problème, je voulais juste utiliser le
-R
et-E
une fois. Maintenant, il ne-B
reste plus.)Exemple d'exécution:
(Initiale
echo"$argn\n";
uniquement utilisée dans ces échantillons pour afficher le réservoir «lisible par l'homme».)la source
QBIC - 116 - 15% = 98,6 octets
J'ai créé QBIC pour rendre QBasic plus compétitif, mais il a encore besoin de plusieurs améliorations. À l'heure actuelle, il n'y a pas de raccourcis pour le piégeage d'erreurs
THEN
(ce qui est une assez grosse erreur de ma part)input$
. Ils seront ajoutés sous peu.Je n'ai pas pu toucher le bonus 0, trop cher ... J'ai réussi à imprimer des pourcentages.
Échantillon entrée / sortie:
Le programme lit l'entrée de manière interactive. Lorsqu'il détecte le fond du lac (
_
), il imprime le pourcentage et quitte. Testé pour les conteneurs pleins et les vides également.Edit: Pour montrer comment QBIC a été développé au cours de la dernière année, voici le même programme écrit pour l'interpréteur actuel:
87 octets, des pourcentages d'impression, soit un score de 74.
la source