Inspiré par le Codewars Kata .
Votre objectif est de prendre une chaîne d'entrée comme celle-ci:
"'Twas a dark and stormy night..."
et renvoyer une chaîne contenant la position de chaque caractère dans l'alphabet, séparés par des espaces et ignorant les caractères non alphabétiques, comme ceci:
"20 23 1 19 1 4 1 18 11 1 14 4 19 20 15 18 13 25 14 9 7 8 20"
Pour un défi supplémentaire, vous pouvez remplacer tous les caractères numériques de la chaîne d'origine par eux-mêmes + 27. Par exemple, "25"
deviendrait "29, 32"
. C'est complètement facultatif.
Vous devez utiliser 1-indexation ( 'a'==1
, 'b'==2
, etc.)
Règles supplémentaires:
Vous devez renvoyer une chaîne, pas un tableau.
La fin des espaces blancs est OK.
Le gagnant a le nombre d'octets le plus bas.
Bonne chance!
Réponses:
05AB1E , (5?) 7 octets
Les deux octets les plus à droite sont le formatage de sortie
Un portage de ma réponse Jelly , mais O5AB1E est plus concis pour le filtrage alphabétique.
Essayez-le en ligne!
Comment?
la source
ðý
peut être ajoutée. Mais depuis la moitié des listes de réponses, je suppose que nous les laissons pour l'instant.Java 8,
8278726962 octets-13 octets grâce à @ OlivierGrégoire .
Essayez-le en ligne.
Explication:
la source
s->s.chars().forEach(c->{if(c>64&~-c%32<26)System.out.print(c%32+" ");})
(72 octets).s->{for(int c:s)System.out.print(c>64&~-c%32<26?c%32+" ":"");}
(62 octets) en utilisant unchar[]
comme entrée au lieu d'unString
.Python 3 ,
626049 octets-5 octets grâce à Jo King .
-8 octets grâce à pLOPeGG .
Après ces améliorations, cette réponse est maintenant semblable à Jonathan Allan de réponse .
Essayez-le en ligne!
la source
%32
marche aussiR ,
5550 octetsEssayez-le en ligne!
Lit l'entrée de stdin,
convertit en majuscules,supprimeleslettres alphabétiques nonmajuscules, convertit en points de code,soustrait en 64mods par 32 et imprime en stdout, séparés par des espaces.Merci à Kevin Cruijssen pour le golf!
la source
[^A-z]
APL (Dyalog Unicode) ,
24, 20, 1413 octets-4 octets grâce à Zacharý (et M. Xcoder)!
-6 octets grâce à Adám!
-1 octet grâce à ngn!
Essayez-le en ligne!
Explication:
Ma première solution:
APL (Dyalog Unicode) ,
2420 octetsEssayez-le en ligne!
Explication:
Ne te moque pas de moi, je suis nouveau chez APL :)
la source
{1(819⌶)⍵}
peut être1(819⌶)⊢
. Sinon, un travail incroyable! J'espère que vous apprécierez APL à l'avenir!1
au819⌶
et sauver cinq en supprimant directement 27s:27~⍨⎕A⍳819⌶⍨∘1
; ou prenez l'intersection avec l'alphabet:⎕A⍳⎕A∩⍨819⌶⍨∘1
Python 2 , (45?) 55 octets
11 octets ajoutés pour formater la sortie, ce qui rend également cela incompatible avec Python 3)
Un autre port de ma réponse Jelly.
Essayez-le en ligne!
Version non formatée (renvoyant une liste d'entiers):
la source
JavaScript (Node.js) ,
695554 octetsEssayez-le en ligne!
Explication:
11 octets enregistrés grâce à @Kevin
1 octets de plus grâce à @Neil
Vous pouvez ajouter la prise en charge des chiffres pour certains octets supplémentaires (grâce à @neil)
JavaScript (Node.js) , 62 octets
Essayez-le en ligne!
la source
a-z
versA-Za-z
eti.toLowerCase().charCodeAt()-96
versi.charCodeAt()%32
parseInt(i,36)-9
enregistre un autre octet..match(/[^_\W]/g).map(i=>(parseInt(i,36)+26)%36+1)
vous permet de prendre en charge les chiffres, je ne sais pas si c'est la meilleure façon.Gelée , (7?) 8 octets
L'octet le plus à droite est le formatage de sortie
Un programme complet acceptant une chaîne au format Python qui imprime le résultat sur STDOUT
Essayez-le en ligne!
Comment?
la source
Japt v2.0a0
-S
,1210 octetsEssayez-le
Explication
la source
opcode x86, 35 octets
En supposant que le résultat contient au moins une lettre et aucun
{|}~
40 octets, autorisant tous les caractères ASCII
la source
Stax ,
9109 octetsExécuter et déboguer
-1 octet grâce à @recursive
Explication:
Stax , 7 octets
Exécuter et déboguer
Celui-ci génère des sauts de ligne séparés. Décompressée:
vmVaI^|c
. Similaire, mais avec map, qui sort implicitement avec une nouvelle ligne de fin.la source
Espace ,
152117 octets-35 octets grâce à @Lynn .
Lettres
S
(espace),T
(tabulation) etN
(nouvelle ligne) ajoutées uniquement en surbrillance.[..._some_action]
ajouté à titre d'explication uniquement.Essayez-le en ligne (avec des espaces bruts, des tabulations et des nouvelles lignes uniquement).
Explication en pseudo-code:
la source
05AB1E , 8 octets
Essayez-le en ligne!
ou, si nous pouvons retourner un tableau:
05AB1E , 6 octets
Explication:
Essayez-le en ligne!
ou si vous voulez qu'il compte des nombres:
05AB1E , 13 octets
Essayez-le en ligne!
la source
05AB1E , 14 octets
Gère également les nombres
Essayez-le en ligne!
la source
Fusain , 21 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Ajoutez les chiffres à la variable de lettres minuscules prédéfinie.
Boucle sur l'entrée en minuscules.
Si le caractère actuel est une lettre ou un chiffre,
imprimer son index 1 indexé,
et laissez un espace pour la valeur suivante.
la source
Rouge , 93 octets
Essayez-le en ligne!
la source
#"a"-#"z"
le changer en lettres majuscules et minuscules; puis lelowercase
peut être retiré; et-96 + to-char c
peut être modulo-32? Je ne sais pas si cela enregistre même les octets en rouge, cependant.parse
fonction @KevinCruijssen collecte des chaînes même lorsque la correspondance est un seul caractère, c'est pourquoi j'ai toujours besoin de lato-char
. Pour les lettres majuscules, j'aurais besoin d'ajouter au jeu de caractères # "A" - # "Z", ce qui gâche le gain (le cas échéant) de l'éliminationlowercase
.#"A"-#"Z"
ne pas gagner grand-chose en comparaisonlowercase
, car il n'est que d'un octet plus court. Et je savais que vous en auriez besointo-char
, mais je ne savais pas si le-96 +
modulo-32 serait de taille similaire.Perl 5 , 47 octets
Avec un défi supplémentaire d'analyse des chiffres:
Essayez-le en ligne!
Réduit à 38 octets en ignorant les chiffres
la source
PHP , 70 octets
Essayez-le en ligne!
-5 octets grâce à Kevin
la source
&&
jouer au golf: peut être&
etord(strtolower($c))-96
peut êtreord($c)%32
. De plus, je pense que vous pouvez supprimer l'~
avant$c
, mais je ne suis pas sûr. Je n'ai pas beaucoup programmé en PHP, et je ne sais pas vraiment à quoi~
ça sert ici de toute façon.Perl 5
-p
, 35 octetsEssayez-le en ligne!
Comprend la partie supplémentaire sur les chiffres.
la source
/\w/
comprend_
-F/[^0-9\pL]|/
: Essayez-le en ligne!Japt 2.0
-S
, 9 octetsExécutez-le en ligne
Explication:
la source
Perl 6 , 32 octets (alpha), 41 octets (alpha + chiffre)
Essayez-le (32 octets alpha)
Essayez-le (41 octets alpha + chiffre)
Étendu:
32 octets alpha
41 octets alpha + chiffre
la source
Э
, mais j'ai demandé des éclaircissements à l'OP pour savoir si l'entrée est uniquement ASCII ou non.Tcl , 93 octets
Essayez-le en ligne!
la source
PHP
108105octetsEssayez-le en ligne (108 octets)
Tri en ligne (105 octets)
-3 octets, grâce à @manassehkatz (Changer le niveau de strtolower et supprimer AZ de regex)
Code, a essayé d'éviter toute boucle
Explication
la source
strtolower($argv)
et en retirant le capitalA-Z
de l'expression$argv[1]
ou$argn
au lieu de$argv
?.join
est 3 octets plus court queimplode
.Python 3 , 84 octets
Essayez-le en ligne!
la source
Python 2,
110 octets104 octets , avec entrée utilisateurEssayez-le en ligne!
Python 2,
105 octets 104 octets96 octets , oùt
est prédéfini:Essayez-le en ligne!
Décomposons-le avec une version plus lisible:
Premièrement, nous définissons
alphabet
comme étant, eh bien, l'alphabet.Ensuite, nous utilisons la compréhension de liste pour:
t
Enfin, nous réunissons le tout ensemble et l'imprimons.
Modifier: changé en
print
(et perte de portabilité) pour enregistrer les octets et le faire fonctionner en dehors d'une fonctionEdit 2: Ajout d'une version avec
input()
au lieu de variables prédéfiniesEdit 3: Suppression de 8 octets dans les solutions 1 et 2 grâce à Jo King
la source
+
), où sont les autres?if
,for
et" "
[]
dans lejoin
PowerShell , 63 octets
Essayez-le en ligne!
(Semble long ...)
Prend l'entrée
$args
, la convertit en.ToUpper
casse , la transforme enchar
tableau, l'introduit dans unefor each
boucle. À l'intérieur de la boucle, nous soustrayons lui-même ou 64 de la valeur (ASCII int), selon que la valeur actuelle est ou non-in
la plage (c'est-65
à90
-dire qu'il s'agit d'une lettre majuscule ASCII). Ces valeurs sont laissées sur le pipeline, et nous utilisons un-n
ote
qual pour éliminer les valeurs non-lettre (car elles sont toutes nulles). Ces nombres sont encapsulés dans une chaîne car la stringification par défaut d'un tableau consiste à le séparer dans l'espace, nous obtenons donc cela à peu de frais. Cette chaîne est laissée sur le pipeline et la sortie est implicite.la source
MS-SQL, 133 octets
Selon nos règles d'E / S , l'entrée est prise via une table préexistante t avec le champ varchar s .
SQL 2017 ou version ultérieure est requis. Doit également être exécuté dans la
master
base de données, car je profite d'une table système appeléespt_values
, qui (lorsqu'elle est filtrée partype='P'
) contient des nombres de comptage de 0 à 2047.Fondamentalement, je joins une table numérique avec la chaîne d'entrée en utilisant
SUBSTRING()
, qui renvoie une ligne distincte pour chaque caractère individuel. Ceci est filtré pour les lettres uniquement en utilisantLIKE'[a-z]'
, puis nous obtenons leur valeur ASCII et soustrayons 64. Ces nombres sont rejoints en une chaîne à l'aide de la fonction (nouvelle dans SQL 2017)STRING_AGG
.la source
Pyth , 10 octets
Je suis assez sûr que cela peut être joué un peu ... -2 octets si je peux sortir sous forme de liste, certaines réponses semblent mais ce n'est pas dans les spécifications
Essayez-le en ligne!
la source
d
(jdfTmhGr0
, 10 octets).C (gcc) , 67 octets
Essayez-le en ligne!
Convertit chaque caractère en minuscules, décale son code de -96 et, s'il tombe dans la plage de l'alphabet indexé 1, imprime le code de décalage
la source
jq , 45 octets
Essayez-le en ligne
la source