Signez ce mot 2!
Il n'y a pas si longtemps, j'ai publié un défi appelé Sign this word! . Dans le défi, vous devez trouver la signature du mot, qui est les lettres mises en ordre (par exemple, la signature de this
est hist
). Maintenant, ce défi a plutôt bien fonctionné, mais il y avait un problème clé: c'était beaucoup trop facile (voir la réponse GolfScript ). J'ai donc publié un défi similaire, mais avec plus de règles, dont la plupart ont été suggérées par les utilisateurs de PPCG dans les commentaires sur le puzzle précédent. Alors c'est parti!
Règles
- Votre programme doit prendre une entrée, puis sortir la signature sur STDOUT ou l'équivalent dans la langue que vous utilisez.
- Vous n'êtes pas autorisé à utiliser les fonctions de tri intégrées, donc les choses comme
$
dans GolfScript ne sont pas autorisées. - Multicase doit être pris en charge - votre programme doit regrouper les lettres majuscules et minuscules ensemble. Donc, la signature de
Hello
esteHllo
, pasHello
comme vous le donne la réponse GolfScript sur la première version. - Il doit y avoir un interprète / compilateur gratuit pour votre programme, auquel vous devez lier.
Notation
Votre score est votre nombre d'octets. Le nombre d'octets le plus bas gagne.
Classement
Voici un extrait de pile pour générer à la fois un classement régulier et un aperçu des gagnants par langue.
Pour vous assurer que votre réponse s'affiche, veuillez commencer votre réponse avec un titre, en utilisant le modèle Markdown suivant:
# Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les barrant. Par exemple:
# Ruby, <s>104</s> <s>101</s> 96 bytes
ThHihs
, pouvons-nous produirehHhist
ou devons-nous produirehhHist
ouHhhist
?Réponses:
Pyth, 10 octets
Essayez-le en ligne: Démonstration
Explication:
la source
Haskell, 51
Le
zip
crée une liste de paires de caractères[('a','A'), ...('z','Z')]
. En raison de la troncature, le deuxième point de terminaison n'a pas besoin d'être spécifié. Pour chaque paire de la liste, nous prenons les lettres de la chaîne d'entrées
qui sont l'un des deux caractères de la paire.la source
Python 3,
7270 octetsSuppose que l'entrée se compose uniquement de
[a-zA-Z]
.(-2 octets grâce à @xnor)
la source
"".join(c*b ...)
pour"".join(c ... if b)
la même manièresum(n ... if b)
peut êtresum(n*b ...)
.c=1 for d in(input()+'~')*26:print(d[ord(d)&32^c:],end='');c+=d>'z'
(67)GOTO ++, 531 octets
Page du projet GOTO ++
Voici une version légèrement plus lisible et commentée du code (notez que cela
GOTO
commence un commentaire dans GOTO ++):la source
function(arg)
etfunction() arg
sont tous deux valides. En outre, les supports de priorité sont} {
et non l'ennuyeux( )
Pyth,
1514 octetsMerci pour isaacg d'avoir supprimé 1 octet.
Je ne sais pas encore grand chose sur Pyth, donc cela peut ne pas être bien joué.
Essayez-le ici.
la source
s
c'est la même chose quejk
sur une liste de cordes.JavaScript (ES6), 71
74Limité à A-Za-z (voir le commentaire de @Matthieu M)
Modifier Trop utilisé pour composer une seule expression avec des virgules, pour éviter le «retour». Ici, une sortie est requise, donc je peux utiliser un simple
for
et oublier les virgules.En utilisant la compréhension du tableau, le nombre d'octets est 73, mais ce n'est plus EcmaScript 6 valideRemarque habituelle: test de l'exécution de l'extrait sur n'importe quel navigateur compatible EcmaScript 6 (notamment pas Chrome ni MSIE. J'ai testé sur Firefox, Safari 9 pourrait aller)
la source
Javascript,
112194 octetsC'est loin de "jouer au golf" mais je suis un peu occupé en ce moment, juste édité pour supprimer le tri.
la source
console.log(input.split('').sort((a,b)=>a.toLowerCase().localeCompare(b.toLowerCase())).join(''))
Python 3, 64
Une petite amélioration par rapport à la réponse du Sp3000 , qui utilise l'idée d'itérer en itérant les indices de caractères, et pour chacun d'entre eux, d'itérer à travers l'entrée pour prendre des caractères qui correspondent à la casse.
Cela utilise une seule boucle, bouclant l'entrée 26 fois. Le séparateur
~
est utilisé pour savoir quand passer à l'index de caractère suivantc
. Pour savoir si le caractèred
correspond à la valeurc
jusqu'à la casse, les cinq derniers bits de la valeur de bit ded
sont xor-ed avecc
, avec un 0 indiquant une correspondance.Ensuite, le caractère
d
est imprimé exactement lorsque le résultat est0
, avec une chaîne vide sinon.la source
Python 2.7,
114106 octetsEnregistre la présence d'un caractère dans un tableau de longueur 123 (pour inclure les plages AZ et az), puis itère à travers celui-ci pour obtenir les entrées non nulles.
Inefficace, mais plus efficace que le brut le forçant (mais plus longtemps :().
Le tester-
la source
HelloWorldhi
, je reçois['d', 'e', 'H', 'h', 'i', 'lll', 'oo', 'r', 'W']
if l[j]
plus.join
). -8 octets. Merci :)PHP,
275270 octetsExplication:
Le code génère un tableau avec chaque lettre de l'alphabet, qui a sa valeur ASCII comme clé de tableau. Ensuite, le code génère un nouveau tableau qui contient les valeurs ASCII de l'entrée. Ensuite, la valeur la plus basse est imprimée et supprimée.
Utilisation:
Appelez le script avec un argument:
php -d error_reporting=0 script.php Hello
Version non golfée:
Tous les conseils sont grandement appréciés.
la source
Haskell,
8353 octetsUtilisation:
f "HelloWorldhi"
->"deHhillloorW"
.Comment ça marche: laissez
y
soit la chaîne d'entréeEdit: 30 octets enregistrés, imaginez ça! Merci @Mauris.
la source
import Data.Char;f y=[c|x<-[' '..],c<-y,toLower c==x]
(53 octets)? (Cela prendra un certain temps pour se terminer, carlength [' '..] == 1114080
- mais c'est fini.)Python 3, 61 octets
Une nouvelle réponse pour une technique différente!
Notant ceci
ord('a')&31==ord('A')&31
et celaord('z')&31==ord('Z')&31
, nous pouvons simplement créer un tableau de chaînes vides et pour chaque caractère l'ajouter à l'index du tableau de sa valeur ASCII&31
. Lorsque vous l'imprimerez, il sera trié.Limité à l'entrée
a-zA-Z
.la source
Python 3,
9792 octetsLa meilleure façon de trier est clairement de générer toutes les permutations, puis de choisir le minimum, qui se trouve être trié :)
Les chaînes sont en minuscules avant la comparaison pour respecter les règles «respectant la casse».
Avertissement: peut être très lent avec de grosses cordes.
Un interprète se trouve ici .
la source
Python 3, 118 octets
Pourrait être joué au golf beaucoup plus court, je sais
la source
if q not in i:
parif~-(q in i):
..remove()
fonction dessus.Powershell, 164 octets
Je suis sûr qu'il existe une façon plus propre de le faire, mais je n'ai rien pu trouver d'autre. Prend juste l'entrée comme un tableau de caractères, fait un tri par insertion et crache la sortie. Perd horriblement, même dans d'autres langues autres que le golf.
Code:
Usage:
Développé et expliqué:
la source
Julia, 61 octets
Julia l'affichera comme une sortie de chaîne si vous l'appelez dans le REPL. S'il doit imprimer sur STDOUT, il a besoin de 78 octets:
Un interprète pour Julia peut être trouvé ici . Un autre, dans lequel j'ai déjà mis du code, est ici . Notez qu'avec le second, vous devrez rendre le terminal (en bas) visible en faisant glisser la limite vers le haut. Cliquer sur "exécuter" le fera fonctionner dans le terminal sur la ligne de commande normale (et ne montrera donc pas la sortie si elle est appelée sans println). Alternativement, vous pouvez simplement taper
julia
dans le terminal lui-même, puis gérer tout ce qui apparaîtra dans le REPL.Et pour un peu plus de plaisir, voici quelques autres implémentations
Tri Gnome (83 octets):
Mon propre algorithme de tri (84 octets):
la source
Scala, 82 octets
à partir de la ligne de commande:
peut probablement être joué un peu plus loin ... il suffit d'implémenter le tri par insertion à l'aide du pli.
la source
code machine x86,
5142 octetsTri par bulles, avec quelques astuces de réutilisation des registres pour raser les octets ici et là; le fichier .COM s'exécute dans DosBox, reçoit l'entrée de la ligne de commande et imprime la sortie sur la sortie standard.
Montage commenté:
la source
Java (JDK 10) , 125 octets
Essayez-le en ligne!
Utiliser un tri naïf.
la source
Perl, 88 octets
Juste un simple tri de bulles. Appelez avec l'option -n pour passer le texte.
par exemple:
Production:
la source
PHP, 106 octets
Le code:
Il n'y a rien de spécial dans le code;
count_chars()
produit un tableau indexé par des codes ASCII qui contient le nombre d'occurrences pour chaque caractère ASCII. Le reste est une itération terne sur ce tableau.Exemple d'exécution:
Un octet supplémentaire peut être enregistré en utilisant PHP 7: remplacez
$c[$i]
par($c=count_chars($argv[1]))[$i]
et supprimez l'affectation de$c
depuis le début du programme.la source
Haskell, 74 octets
Complètement différent de mon autre réponse . Cette fois, il s'agit d'un simple tri par insertion.
la source
Pip,
1814 octetsDépôt GitHub pour Pip
Il semble qu'il n'y ait pas de concurrence avec Pyth, mais c'est assez respectable.
Fonctionne uniquement sur les chaînes contenant
a-zA-Z
. Pour chaque lettre de l'alphabet, utilise une opération de filtrage pour récupérer les lettres de la chaîne d'entrée qui égalent cette lettre sans tenir compte de la casse:Deux notes:
AZO
serait numérisée commeA ZO
au lieu deAZ O
;x
à la fin du code (imprimant ainsi une chaîne vide après la boucle).Exemple d'exécution (en utilisant la
x
variante):la source
Perl 5
-a
, 31 octetsEssayez-le en ligne!
la source