Bons golfeurs!
Votre défi consiste à supprimer complètement une série de chiffres.
Contribution
Exactement 100 entiers seront introduits dans votre programme. Votre programme peut accepter l'entrée soit sous forme de fichier, soit via stdin. Chaque entier sera séparé par un caractère de nouvelle ligne.
Ces 100 entiers vont de la valeur minimale à la valeur maximale d'un entier signé dans la langue de votre choix.
Il n'y aura pas de valeurs en double. Les valeurs peuvent être ordonnées, non ordonnées ou partiellement ordonnées - votre programme devrait être capable de gérer chaque cas.
Production
La sortie doit être chacun des 100 entiers, complètement non triés, chacun séparé par un caractère de nouvelle ligne. La sortie peut être via stdout ou vers un fichier.
Complètement non trié signifie qu'aucune valeur n'est adjacente à une valeur à laquelle elle serait adjacente si la liste était complètement triée dans une séquence ordonnée.
But
1 point par personnage et le score le plus bas l'emporte. Il y a un bonus de -100 pour toute solution n'utilisant aucune fonction de tri intégrée ou de bibliothèque. Il y a un bonus de -20 pour toutes les solutions n'utilisant pas de fonctions de nombres aléatoires intégrées.
J'ai essayé de définir cette question aussi complètement que possible. Si vous avez des questions, n'hésitez pas à demander. Si vous avez des commentaires sur la façon dont je pourrais faire mieux la prochaine fois, faites-le moi savoir.
Fore!
Réponses:
GolfScript (score 27-120 = -93)
Remarque: cela
$
fait référence à un élément de la pile. Il y a un tri, mais cela se fait avec un tri à bulles codé manuellement.Merci à Howard pour -90 => -92; et Ilmari, qui a inspiré -92 => -93.
la source
$
- c'est pourquoi j'ai mentionné que$
le programme n'est pas un tri (il dépend du contexte). La majorité du programme (28 des 42 caractères) définit la fonction^
; la première version, utilisant le tri intégré, ne comportait que 14 caractères.2/{~p}%n*
.2/zip~+n*
et.);\+2%n*
faites aussi l'affaire pour le même nombre de caractères que la version de @ Howard. Hélas, je n'ai pas encore réussi à trouver quelque chose de plus court.Python -26
(94-120): Nouvelle approche grossière. Continuez à insérer les éléments les plus bas dans une nouvelle liste pour obtenir le tri des éléments, puis répétez:
Python -13
(107-120): Première approche: supprime les quatre éléments les plus bas à la fois, puis imprimez ces quatre dans un autre ordre:
la source
t=l=[]
et vousexec't+=[input()];'*100
ferait économiser quelques caractèresexec
instruction pour plusieurs boucles.t=l=[]
t et l pointe vers le même objet et ça ne marche pas. Sauter les parenthèsesexec
est bien cependant.t=t+[input()];
, cela crée un nouvel objet à chaque fois. Et vous pouvez même faire la boucle d'impression dans l'instruction exec:';i+=1;print l[i*3%100]'*100
.%3
et éviter la répétition de100
.C: 11 (131-120)
Le programme lit à partir de stdin et effectue un simple tri par insertion, après quoi il imprime le nième avec le numéro n + 50e, comme la plupart des autres solutions.
la source
Mathematica
-56 44 4(95-120) = -25Éditer :
Cette version ne s'appuie ni sur des fonctions intégrées pour le tri des listes, ni sur des fonctions de randomisation.
la source
Sort
pas une fonction de tri intégrée?J, -63 (57-120) caractères
Puisque tout le monde suit la voie de tri auto-écrite ...
N'utilise aucune fonction de nombre aléatoire, ni aucun tri intégré.
Utilise un tri par sélection récursive simple pour trier l'entrée.
la source
Rubis 1.9, -59
(61-120)
Récursivité! Celui-ci en fait, contrairement à mes précédentes tentatives Ruby, ne trie pas la liste indépendamment de leur ordre d'origine.
Tentatives précédentes
Mignon à une ligne, utilisant maintenant le tri intégré pour fonctionner correctement:
Première - N'a pas nécessairement dénaturé les 4 dernières valeurs:
la source
Python 2: 90 caractères
tentative paresseuse mais juste pour commencer
la source
Python 48 = (148 - 100)
Je n'ai pas testé cela car il n'est pas garanti (ou probable) de fonctionner dans un laps de temps raisonnable, mais devrait fonctionner en théorie avec un temps infini.
la source
x=map(input,['']*100)
[]
s supplémentaires , juste d'une chaîne de caractères unique.Python 27 (147 - 100 - 20)
Remarque: les espaces avant
if L[i]>...
doivent être un onglet mais apparemment apparaître comme des espaces dans un bloc de code.la source
R=range
vous pouvez enregistrer 5 caractères.a=map(input,['']*100)
Perl 5: 95 - 120 = -25 caractères
Compter la ligne de commande suivante:
la source
Rubis: -50 (70 caractères - 120)
J'ai fait la même chose que beaucoup d'autres réponses: supprimez de manière itérative le max et le min de la liste d'entrée et ajoutez-les à la sortie. Cependant, j'ai réalisé que si les 2 nombres de chaque côté de la médiane sont eux-mêmes consécutifs, la sortie sera incorrecte (car ces 2 nombres consécutifs apparaîtront ensemble à la fin de la sortie). Pour résoudre ce problème, je fais pivoter la liste "non triée" de 1 élément vers la droite:
Ou, pour utiliser arbitrairement de nombreuses entrées (en utilisant seulement 4 caractères supplémentaires):
Remarque: Certaines réponses Ruby de moins de caractères ont déjà été publiées, mais ces solutions n'ont pas résolu le problème médian (et / ou supposé une liste d'entrée triée).
la source
J 37-100 = -63
N'utilise aucun tri (mais utilise le classement) Utilise des nombres aléatoires.
Explication:
la source
Brachylog , 22 octets - 120 = -98
Essayez-le en ligne!
La liaison TIO n'a qu'une entrée de huit entiers, au lieu de cent, car elle est si terriblement lente qu'elle ne peut plus gérer en 60 secondes. La raison en est que, entre autres choses, plutôt que d'implémenter un algorithme de tri simple mais normal pour le bonus obligatoire, j'ai utilisé par souci de concision ce qui équivaut à un bogosort déterministe:
p≤₁
arrière à travers chaque permutation de l'entrée jusqu'à ce qu'il en trouve une ce qui n'est pas décroissant. Bien qu'une raison plus importante serait probablement qu'il utilise un degré similaire de force brute pour trouver la sortie, et qu'il recalcule la version triée à chaque fois ... J'ai essayé de le tester sur une entrée réelle de taille 100, mais je suis Je ne sais pas combien de jours cela prendra.Une meilleure version globale:
Brachylog , 14 octets - 20 = -6
Essayez-le en ligne!
Cela ignore les exigences d'E / S archaïques pour la brièveté et néglige de prendre le bonus de -100 afin qu'il puisse éventuellement être testé sans superordinateur (bien qu'au moment de la rédaction de ce document, je ne l'ai exécuté que sur 20 éléments pendant plusieurs minutes et il ne m'a toujours rien donné).
la source
Forth (gforth) , 79-120 = -21 octets
Essayez-le en ligne!
Ignorez les exigences d'entrée désuètes et prend l'entrée comme une adresse en mémoire où les numéros sont stockés.
Explication
Boucle sur tous les nombres de 0 à 99. Pour chaque nombre (n):
Sinon (n est pair):
Sortie d'une nouvelle ligne
Explication du code
la source