Vous recevrez le nom d’un des 20 plus gros objets du système solaire. Votre tâche consiste à renvoyer une approximation de son rayon, exprimée en kilomètres.
Il s’agit d’un défi de code dans lequel votre score est composé de la longueur de votre code (en octets) multipliée par un ratio de pénalité , basé sur votre pire approximation. Par conséquent, le score le plus bas gagne .
"En parcourant l'univers" est la dernière ligne de la chanson Planet Caravan de Black Sabbath , également reprise plus tard par Pantera .
Les objets du système solaire
Source: Wikipedia
NB: Le classement est donné à titre indicatif. L'entrée est le nom de l'objet.
n | Object | Radius (km)
----+----------+-------------
1 | Sun | 696342
2 | Jupiter | 69911
3 | Saturn | 58232
4 | Uranus | 25362
5 | Neptune | 24622
6 | Earth | 6371
7 | Venus | 6052
8 | Mars | 3390
9 | Ganymede | 2634
10 | Titan | 2575
11 | Mercury | 2440
12 | Callisto | 2410
13 | Io | 1822
14 | Moon | 1737
15 | Europa | 1561
16 | Triton | 1353
17 | Pluto | 1186
18 | Eris | 1163
19 | Haumea | 816
20 | Titania | 788
Ou sous forme de listes copiées-copiées:
'Sun', 'Jupiter', 'Saturn', 'Uranus', 'Neptune', 'Earth', 'Venus', 'Mars', 'Ganymede', 'Titan', 'Mercury', 'Callisto', 'Io', 'Moon', 'Europa', 'Triton', 'Pluto', 'Eris', 'Haumea', 'Titania'
696342, 69911, 58232, 25362, 24622, 6371, 6052, 3390, 2634, 2575, 2440, 2410, 1822, 1737, 1561, 1353, 1186, 1163, 816, 788
Ton score
Soit le rayon attendu de l'objet , et la réponse de votre programme pour cet objet.
Ensuite, votre score est défini comme:
où est la longueur de votre code en octets.
Exemple:
Si la taille de votre code est de octets et que votre pire approximation est celle de la Lune avec un rayon estimé à km au lieu de km, votre score serait alors:
Le plus bas, mieux c'est.
En-tête recommandé pour votre réponse:
Language, 100 bytes, score = 302
Vous pouvez utiliser ce script pour calculer votre score (première ligne = longueur du code, 20 lignes suivantes = vos sorties, de Sun à Titania).
Règles
- Vous pouvez prendre le nom de l'objet en minuscule, en majuscule ou exactement comme décrit ci-dessus (cas du titre). Les autres cas mixtes ne sont pas autorisés.
- L'entrée est garantie d'être l'un des 20 noms possibles.
- Vous pouvez renvoyer des nombres entiers ou des flottants. Dans les deux cas, la pénalité doit être calculée directement avec ces valeurs (pas des valeurs arrondies dans le cas de floats).
- Vous devez retourner des valeurs positives.
- Les programmes vides ne sont pas autorisés.
la source
7512
pour tous les cas de test. Je verrai si je vais bientôt créer une solution MathGolf, mais il sera difficile de battre 05AB1E.Réponses:
PowerShell , 3 octets, score 3637
Essayez-le en ligne!
Très naïf, ennuyeux, mise en oeuvre; retourne
20000
peu importe l'entrée. Des expériences avec des cas comme le soleil spécial ou l'utilisation de valeurs en virgule flottante au lieu de2
toutes ont eu pour résultat des scores pires, car la longueur du code a augmenté suffisamment pour compenser les gains de comparaison de taille.la source
Gelée , 34 octets, score = 37
L'entrée est en majuscule, la sortie est la puissance de 1.1 avec la moindre erreur.
Essayez-le en ligne!
Comment ça fonctionne
la source
Java (JDK) , 90 octets, score = 97
Essayez-le en ligne!
Crédits
String
fichier au lieu de les coder en dur dans unint
tableau explicite .la source
(...-7)
: Le caractère non imprimable(char)0
est vide et j’ai donc dû ajouter quelque chose. J'ai d'abord essayé9
et je n'avais qu'un8
chiffre, mais j'ai9
bien sûr donné des onglets nécessitant plusieurs\t
(2 octets chacun), ainsi8
qu'une erreur sur un caractère non échappé utilisé.*100-700
et en jouant avec les valeurs-as-string et ces deux nombres, mais ceux-ci sont les meilleurs, en fait, certaines valeurs peuvent diminuer l'octet compter, mais alors le score reste le même. Ainsi, le repérage aléatoire a été (l'un des) le meilleur des cas;)Wolfram Language
114 103 97 88 8682 octets. score =114 103 97 89 8783 pointsAu moins 6 points économisés grâce à
Dennis
, plusieurs autres grâcelirtosiast
et 6 autres grâce àuser202729
.Bien que Mathematica puisse extraire des données du système solaire (ainsi que de nombreuses données astronomiques supplémentaires), quelques ajustements mineurs sont nécessaires, comme expliqué ci-dessous.
Interpreter[#,"AstronomicalObject"]&
renverra l'entité (c'est-à-dire l'objet informatique de la machine) associée au terme représenté par#
.EntityValue[AstronomicalObject[],"Radius"]
renvoie le rayon, en miles, de l'entité. Dans le cas de "Haumea", la valeur 816.27 (c'est-à-dire 507 * 1.61) est renvoyée.La multiplication du rayon par
1.61
convertit des miles en km. Les valeurs décimales, plutôt que les entiers, représentent beaucoup moins d'erreurs que 1%, même dans les cas les plus extrêmes.[[1]]
renvoie la magnitude sans l'unité, km. Cela a été changé plus tard pour#&@@
donner le même résultat.la source
Python 3 , score 95, 95 octets
Essayez-le en ligne!
Python 3 , score 133, 133 octets
Essayez-le en ligne!
la source
Powershell,
150141 octets, score163153Essayez-le en ligne!
Script de test:
Sortie:
Explication:
end of line mode
est LF seulement.Exemple:
Powershell, 178 octets, score 178
la source
05AB1E , score
1006660 (1006156 octets )La réponse Java du port de @ OlivierGrégoire , alors si vous aimez cette première réponse, veillez également à le faire revenir à la première place!
Entrer dans le titre.
Vérifier tous les cas de test.
05AB1E , score 100 (100 octets )
Entrée en minuscule. Affiche le rayon exact, aucune pénalité n’est donc ajoutée.
Vérifier tous les cas de test.
Explication:
Consultez cette astuce 05AB1E (sections Comment compresser de grands entiers? Et Comment compresser des chaînes ne faisant pas partie du dictionnaire? ) Pour comprendre le fonctionnement de la compression utilisée.
J'ai créé une alternative de 70 octets sur laquelle mapper sun600,000
; [Jupiter, Saturne] à60,000
; [uranus, neptune] à30,000
; [Terre, Vénus] à6,000
; [mars, ganymede, titan, mercury, callisto] à3,000
; [io, lune, europe, triton, pluto, eris] à1,500
; et [haumea; titania] to750
. Malheureusement, cela a donné un score de 117. Je verrai si je peux descendre en dessous de 100 avec une approche alternative plus tard.la source
Mathematica, 57 octets, score =
6258-4 octets / score grâce à lirtosiast !
Effectue simplement une recherche Wolfram Alpha pour le rayon moyen.
la source
WolframAlpha
fonction a été utilisée au moins quatre fois ...Gelée , 28 octets, score = 31
Ceci utilise un hachage intégré configurable que j'ai ajouté à la suggestion de Jelly at @ lirtosiast.
L'entrée est en titlecase, la sortie est la puissance de 1.1 avec la moindre erreur.
Essayez-le en ligne!
Comment ça fonctionne
Cette réponse ne comprend que deux parties.
“__ʋ7ṗ“RUu⁽NM\sOSJj[FL‘ḥ
utilise la nouvelle fonction intégrée pour mapper chacune des 20 entrées possibles sur 15 nombres entiers différents.1.1*
élève 1.1 à la puissance calculée.“__ʋ7ṗ“RUu⁽NM\sOSJj[FL‘
est un littéral; chaque caractère sans guillemets est remplacé par son index de base 0 dans la page de code de Jelly, ce qui donneḥ
En divisant par deux et en couvrant cet entier jusqu'à ce que le résultat soit0 [376510639244,188255319622,94127659811,47063829905,…,5,2,1,0] [188255319622,94127659811,47063829906,…,3,1,1]
Ensuite, nous générons 64 nombres entiers de 64 bits en appliquant SHAKE256-4096 à la représentation sous forme de chaîne de l'
ḥ
argument exact de la représentation interne , puis en découpant les 4096 bits résultants en 64 morceaux de 64 bits.ḥ
La liste[82,85,117,141,78,77,92,115,79,83,74,106,91,70,76] [0,15)
Pour trouver la configuration de hachage appropriée, j'ai utilisé un brute-forcer en C qui est partie du Jelly .
la source
Python 2 , 155 octets, partition = 155
Essayez-le en ligne!
Étonnamment bien pour cette solution paresseuse ... examinera également l'amélioration. ;-)
la source
Japt , 86 octets, score = 94
Essayez-le pour toutes les entrées , calculez le score ou vérifiez l'erreur la plus élevée
Très similaire à la réponse originale d'Olivier. Les entrées sont minuscules.
Après diverses améliorations des valeurs de sortie, l'erreur la plus élevée actuelle est Vénus, avec un peu plus de 4%.
Explication maintenant que les choses sont un peu plus stables:
La chaîne pour les noms est
sujusaurneeavemagatimecaiomoeutrplerha
compressée à l'aide de la compression intégrée de Japt. Les nombres représentant les rayons sont calculés comme suit:la source
Japt,
777675 octets, score = 75Premier passage à ceci; Je voulais essayer une solution de 0 pénalité pour me donner une base de travail. J'y reviendrai demain pour voir quelles améliorations peuvent être apportées, espérons-le toujours pour 0 pénalité.
La saisie est insensible à la casse.
L'essayer ou testez toutes les entrées
le
"..."
représente une chaîne contenant de nombreux non imprimables. Les points de code sont:Pour donner une explication rapide: la chaîne est scindée en morceaux de 2 caractères. Nous indexons ensuite dans ce tableau en utilisant une partie de indexons la formule ovs plus un habillage d' mappons les 2 caractères à leurs points de code.
54 octets, score = 58
Un port de solution d' Olivier .
Testez toutes les entrées
la source
%24
:-)Ruby , 105 octets, score 109
Essayez-le en ligne!
Si nous divisons 700000 par les rayons, nous obtenons une séquence qui augmente raisonnablement (de manière plutôt erratique). Les incréments dans le tableau ci-dessous peuvent être approximés par les valeurs de caractères ASCII. Le problème avec cette approche est qu’elle nécessite que l’entrée soit décodée en une valeur ordonnant les différents noms par taille.
Un problème mineur est que la différence entre Eris et Haumea est assez grande. Trois caractères
~~d
sont nécessaires pour coder cette incrémentation au format ASCII uniquement. La chaîne planète à index comporte deux espaces "planète fantôme" pour compléter l'index.la source
T-SQL,
203 202 201196 octets, score =217 216 212208Les sauts de ligne sont pour la lisibilité seulement.
La saisie s'effectue via la table préexistante i avec la colonne varchar v , conformément à nos normes IO .
Joint la table d'entrée à une table en mémoire sur les deux premiers caractères et renvoie les chiffres restants x100.
Traite "Titan" comme un cas particulier en utilisant
IIF
.EDIT : 1 octet enregistré (et 1 point) en utilisant
STUFF
pour effacer les deux premiers caractères au lieu deSUBSTRING
. Merci, t-clausen.dk!EDIT 2 : Je voulais voir ce qui se passerait si j'essayais de sauvegarder un autre octet en multipliant chaque valeur de recherche par 99 au lieu de 100, et que je trouvais à ma grande surprise que le nombre d' octets avait augmenté. la précision (de l'estimation la moins précise) !.
Cela m’a amené à des tests d’essais et d’erreur, ainsi qu’à des tableaux de données fantômes d’Excel, où j’ai trouvé une solution optimale en utilisant un multiplicateur de 89 (qui a bien sûr modifié toutes mes valeurs stockées).
Donc, bien que cela ne me sauve qu'un octet, cela améliore mon score de 4,6. rapport à ma solution précédente.
EDIT 3 : A cherché plus haut au lieu de plus bas et a trouvé un facteur de multiplication encore meilleur , 198 . Les valeurs restent raisonnablement précises tout en raccourcissant de quelques caractères ma chaîne stockée, ce qui améliore mon score.
la source
PowerShell , 203 octets, score 203
Essayez-le en ligne!
Très similaire à la réponse d'Olivier, maintenant que je la vois, mais développée indépendamment.
la source
Fusain , 101 octets, score = 101
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Explication:
Prenez le premier et le onzième caractère (de façon cyclique) de la chaîne d'entrée et concaténez-les.
Cherchez-les dans la chaîne
SuJiSrUuNtEEVVMrGnTTMcClIIMoEpToPPEiHeTa
divisée en paires de caractères.Divisez la chaîne
m.w'fv&J|\"l|\"e1 c& _c Ca ;e ;* 9a 9C 31 2; 0I .7 ,N ,7 (X (<
en groupes de trois caractères et prenez le groupe correspondant.Décodez le résultat sous forme de nombre base 95 en utilisant le jeu de caractères ASCII imprimable comme chiffres. Exemple:
Io
le 11ème caractère estI
, alors nous regardonsII
et trouvons que c'est le 13ème plus grand objet et sa taille correspond à celle31
qui lui correspond19 * 95 + 17 = 1822
.la source
Rapide 4 , 225 octets, score = 241
Probablement golfable un peu plus (peut-être dans la zone "Ga-Me-Ca"?), Mais Swift n'est pas souvent utilisé (pour une raison, peut-être.)
et ungolfed
Essayez-le en ligne!
J'ai essayé différentes "tailles de clé" pour la carte, mais bien sûr, 1 a de nombreux affrontements et utiliser trois caractères ne me donne pas
i=="Titan" ?2575:
les 17 caractères, car il faut "Io" à gérer (et cela prendra plus de 3 caractères, Je pense).la source
JavaScript (ES6), 152 octets, score = 163
C'est une jolie solution standard, mais j'ai quand même apprécié le défi!
Mon score:
Essayez-le en ligne!
la source
FAUX , 152 octets, score = 563
Réponse paresseuse en utilisant la longueur des mots et les premières lettres, mais mon excuse est que j'utilise un langage étrange
Essayez-le en ligne! (copier coller le code, cliquer sur show puis s'exécuter)
Mes résultats:
la source
C (gcc) , 118 octets, score = 135
Essayez-le en ligne!
Notation
Fatigué
Le nom de l'objet est transformé en un hachage à caractère unique au travers du processus fastidieux
dont la grosseur indique "Titan" / "Titania" comme les principaux contrevenants. L’inclusion du dernier caractère du hachage a été envisagée, mais cela nécessite tout de même un
strlen()
in C. La première occurrence du caractère de hachage est recherchée dans la chaîne de hachage / données. Lorsqu'il est trouvé, le caractère suivant est pris et utilisé pour approximer le rayon de l'objet en question.Le caractère de données contient le logarithme naturel décalé et redimensionné du rayon. Généré comme suit:
L'échelle a été choisie par des essais et des analyses hautement scientifiques, ainsi que par le changement visant à ramener la valeur dans la plage imprimable ASCII tout en évitant les barres obliques inverses. Un certain réarrangement des objets dans la chaîne était nécessaire en raison de certaines collisions de hachage / données.
la source
Python 2 , 89 octets, score = 234
Essayez-le en ligne!
La plupart des réponses postées semblent avoir utilisé une stratégie "coder / décoder". Je me demandais si je pouvais bien faire l'estimation du diamètre des corps célestes à l'aide d'une simple équation. C’est un exercice amusant, mais les économies d’octets modérées sont largement compensées par la pénalité de précision.
Le cœur de cette solution est l’équation d’estimation:
où x est deux fois le rang du rayon du corps.
Je génère la valeur de x en fonction de la chaîne d'entrée à l'aide d'une modification de la solution Python 2 de @Erik the Outgolfer. J'ai économisé quelques octets sur son code en reformulant mes équations pour qu'elles fonctionnent avec [2..40] au lieu de [1..20].
Le code permettant de générer des ordres de classement occupe plus de 2/3 des octets de la solution. Si quelqu'un dispose d'un moyen plus compact de générer des rangs, cette solution pourrait être encore raccourcie. En raison de la pénalité de précision (autour de 2,6), le score pourrait s’améliorer un peu.
Générer l'équation
J'ai utilisé des méthodes statistiques pour rechercher des équations simples permettant d'estimer la taille de chaque corps en fonction de son rang. Dans le cadre du suivi de la solution Ruby de @Level River St et de la généralisation, je me suis basé sur des équations de la forme:
En travaillant dans R, j’ai utilisé des modèles linéaires sur le log des rayons pour développer des estimations initiales, puis une optimisation non linéaire, en semant l’optimisation avec les résultats des modèles linéaires, pour rechercher des solutions minimisant la fonction de pénalité spécifiée dans problème.
La valeur estimée de A dans l'équation ci-dessus est de sept chiffres. J'ai donc recherché une expression simple pour économiser quelques octets. J'ai cherché des expressions de la forme
pour deux chiffres x et un chiffre y (pour un total de cinq octets, économiser deux octets, soit environ cinq points, compte tenu de la pénalité) qui ne diffère pas trop de la valeur optimale de A et qui ne gonfle pas trop la pénalité et se termine avec le (sinon inexplicable):
la source
TI-BASIC (TI-84), 285 octets, score = 285
Un simple programme "index dans la chaîne à la liste". Peut être joué au golf plus loin.
L'entrée est en
Ans
et est l'un des noms des objets en majuscules.La sortie est
Ans
entrée et est automatiquement imprimée.Exemple:
Explication:
(La liste et le nom de la chaîne de radiations ont été raccourcis par souci de concision.
...
Est utilisé pour indiquer le reste de la liste / chaîne.)Modèle visuel:
la source