Défi
Ecrivez un programme / fonction non vide p
qui, à partir d’une chaîne d’entrée non vide s
, affiche la position de la première occurrence de chaque caractère s
dans le code source de p
.
Par exemple, si votre programme est
main() { cout << magic << cin }
^0 ^5 ^10 ^15 ^20 ^25
et il reçoit une entrée abcd{
, la sortie doit être
[1, x, 9, x, 7] (0-based) [2, x, 10, x, 8] (1-based)
Ici, x
représente une sortie qui n'est pas une sortie valide pour une position de caractère (par exemple, un numéro de négatif, 0
si vous utilisez une indexation de base 1, NaN
, Inf
, la chaîne potato
, un nombre supérieur à la longueur de votre programme, etc.).
Les restrictions
La lecture du code source n'est pas autorisée (comme dans un bon quine). L'utilisation de commentaires est autorisée, mais compte pour votre score.
Entrée et la sortie peut être fait dans un format raisonnable, mais doit être sans ambiguïté (seulement délimiteurs supplémentaires, aucun rand
cours d' eau et affirmant que la réponse est quelque part là - dedans), cohérente (par exemple, en x
haut doit toujours être la même valeur) et origine humaine lisible ; par exemple, une chaîne ou un tableau de caractères. Vous pouvez supposer que l'entrée est une chaîne (ou un tableau) de caractères ASCII imprimables. pas besoin de gérer l'ensemble du jeu Unicode.
Page de code personnalisée ou ASCII non imprimable dans votre code?
Si votre langue utilise une page de code personnalisée (Jelly, APL, etc.), vous devez en tenir compte (un programme €æÆ
doit donc générer [1, x, 2]
une sortie pour une entrée €%æ
). Utiliser toujours uniquement des caractères non-ASCII pour la sortie -1
(puisque l'entrée est uniquement en ASCII) n'est pas une solution valide. Vous pouvez supposer que votre programme accepte nativement votre page de code personnalisée, c'est-à-dire que si votre programme dispose d'une méthode de conversion d'un caractère A
en entier 65
(codage ASCII), vous pouvez supposer qu'il convertit maintenant le 65e caractère de votre page de code en 65
.
Inspiré par le défi suivant: sensibilisation positionnelle
01030708070
,?Réponses:
Python2, 55 octets
Commence avec une chaîne contenant tous les caractères utilisés dans le code, puis recherche dans les index
la source
raw_input
.Lenguage , 56,623 octets
Ci-dessous se trouve un hexdump des 256 premiers octets. Les octets restants peuvent être choisis arbitrairement.
La sortie est en octets, comme il est d'usage pour brainfuck et al.
Comment ça marche
Ceci est un programme de chat simple, en particulier
,[.,]
.Le code source contient toutes les valeurs de 256 octets dans l'ordre, de sorte que l'index de chaque octet correspond à sa valeur.
la source
+[,.]
un meilleur score?Lenguage , 1.22e7 octets
Se compose d'
12263215
NUL
octets, (Hex 0x00) .Affiche un
NUL
pour chaque caractère qui n'apparaît pas dans la source.Cela se traduit par le programme Brainfuck suivant
Et avec une panne ...
Cela montre simplement le pouvoir absolu de Lenguage en tant que langue de golf. Craignez ça.
la source
,[>.,]
plus court?Gelée ,
10 à9 octetsEssayez-le en ligne!
Comment ça marche
la source
pbrain,
402356340338329 octetsOuf, @KritixiLithos et moi travaillons dessus depuis 4 jours maintenant.
Imprime
0x00
si le caractère en entrée n'est pas dans le programme, index du caractère (basé sur 1) en hexadécimal sinon. Essayez-le en ligne!Explication:
Cette dernière fonction est la boucle. Il parcourt les caractères sélectionnés
[(:<>)+,-.]
dans l'ordre et compare l'entrée avec le caractère. Maintenant, je vais donner une explication plus profonde du fonctionnement de cette boucle.La pile ressemble à cela alors que dans une boucle. La boucle durera jusqu’à
12-n
est0
. Ensuite, nous avons le compteur qui estn+2
. Ce compteur est également le numéro de la fonction pour chacun des caractères sélectionnés. Alors, quandn=0
,n+2
correspondra au premier caractère, c'est-à-dire[
.>[->+>+<<]>>[-<<+>>]<:
fait exactement cela, il convertit le compteur en personnage.Une fois que le pointeur se trouve à la position du curseur, nous comparerons le caractère produit à partir de la variable compteur avec l’entrée tout en les préservant.
Z
est0
lorsque le caractère est égal à l'entrée, ou un autre entier non nul sinon.Nous trouvons maintenant une déclaration if pour vérifier cette égalité.
Si
Z
est différent de zéro, c'est-à-dire que le caractère et l'entrée ne sont pas identiques, nous incrémentons l'emplacement de mémoire suivant.Lorsque nous sortons de cette instruction if, nous décrémentons le prochain emplacement mémoire. Maintenant, cet endroit de la mémoire contient
!Z
. Enfin, en utilisant cela, nous produisons l’index du caractère s’il correspond à l’entrée, puis nous sortons de la boucle de force. Sinon, nous continuons avec la boucle jusqu'à ce qu'elle soit terminée ou qu'une correspondance soit trouvée.la source
CJam ,
1412 octetsUtilise l'indexation basée sur 0 et
-1
pour les caractères qui n'apparaissent pas dans la source.Essayez-le en ligne!
la source
Javascript, 34 octets
Il prend en entrée sous forme de tableau de chaînes,
x
soit-1
(indexation basée sur 0).la source
s='s=%s;print s%%s';print s%s
en Python. Ça n'inclut pas lef=
, alors ça vaa
est supposée être une chaîne. Il n'y a pas demap
fonction pour les chaînes.C,
153152143 octetsEssayez-le en ligne!
la source
Ruby,
41 88 86 71 69 67 6156 56 octetsThx Lynn pour avoir tué 6 octets
la source
a='p$<.chrsm{| #index};"';p$<.chars.map{|c|"a='#{a}".index c}
devrait également fonctionner, en prenant l’information de STDIN.> <> (Poisson) 70 octets
Probablement le plus long> <> 1 paquebot que j'ai jamais fabriqué.
Il imprimera la sortie pour chaque caractère trouvé sur une ligne distincte (0 indexé).
Un caractère non trouvé affichera toujours la longueur du code + 1 (je pourrais le changer si cela n’est pas acceptable dans son état actuel). Dans ce cas, 71 seront toujours les caractères "Introuvable".
Je vais lancer une explication une fois que j'ai le temps.
Quelques cas de test;
## K = 1 \ n1 \ n71
# "# = 1 \ n69 \ n1
Essayez-le en ligne
> <> langue
la source
Perl 6 ,
5052 octetsTraduction de la solution Ruby de GB et de la solution Python de Rod .
Un lambda qui entre une liste de caractères et une liste d'index de base zéro (
Nil
pour les caractères inexistants).EDIT: Correction d'un oubli - obligatoire d'ajouter 2 octets :(
la source
Clojure,
435648 octetsEdit: Zut j'ai oublié à propos
2
! Augmenté de 43 à 56.Edit 2: Mise à jour de l'exemple de code sous ce texte, mise à jour du nombre d'octets à ne pas inclure
(def f ...
) mais uniquement de la partie hash-map.La carte de hachage se compose uniquement de caractères
01234{\\}
et code leur emplacement. Dans Clojure, les fonctions de hash-maps peuvent être utilisées, comme le montre cet exemple complet (f
peut être remplacé par la définition de hash-map):Je suppose que ça compte :)
la source
JavaScript, 39 octets
la source
[...s]
s'il vous plaît?Pyth, 11 octets
Un programme qui prend en entrée un
"quoted string"
, avec tous les guillemets dans la chaîne échappée avec un précédent\
, et imprime une liste de valeurs indexées à zéro avec-1
des caractères qui ne sont pas dans la source.Essayez-le en ligne!
Comment ça marche
la source
05AB1E , 19 octets
Essayez-le en ligne!
Cela génère -1 à la place des caractères manquants.
Luis Mendo a posté ce (légèrement modifié) sur Golf vous un quine pour un grand bien! , en ajoutant "s" et "k" à cette quine, on obtient également cette réponse. Cependant, je ne peux pas prendre le crédit de cette modification triviale ... Luis, vous pouvez m'envoyer un message si vous souhaitez le republier et je vais simplement le supprimer. Si vous voulez voir mes progrès avant de trouver cette question, consultez les modifications. Eh bien ... Il était beaucoup comme son à un moment donné.
la source
SmileBASIC,
128968886 octetsUne chose importante à réaliser est que ce n’est pas vraiment un défi de taille. Vous avez seulement besoin du code source jusqu'au dernier caractère unique .
Je mets au moins 1 de chaque caractère au début du code:
?R<3+CD,4LINPUT(S$)WHILE"
je n'ai donc qu'à stocker une copie du programme jusqu'au premier guillemet.la source
Python,
9088 octetsCas de test:
la source
Empilé , non compétitif, 36 octets
Quand j'ai dit que cette langue était encore en développement, je le pensais vraiment. Apparemment, l'
prompt
habitude de consommer la pile entière. C'est pourquoi je ne peux pas avoir de belles choses. Essayez-le ici!C'est le cadre standard de quine. En gros,
:
duplique la fonction[...]
sur la pile, qui est ensuite exécutée avec!
. Ensuite, l'intérieur de[...]
s'exécute avec la fonction sur la pile. Il la convertit en chaîne, ajoute:!
(le programme lui-même), puis prend une chaîne avec une entréeprompt
.CS
le convertit en une chaîne de caractères. Une chaîne de caractères est un peu différente d'une chaîne classique dans la mesure où elle est vectorisée par des opérateurs. Dans ce cas,index
vectorise sur l'entrée, donnant chaque indice de la chaîne d'entrée dans le programme, pour être finalementout
mis.Pour l'entrée
Hello, World!
, cela donne:J'ai essayé d'utiliser celui sans quine (c'est-à-dire coder la chaîne de caractères qui apparaissent dans votre source), mais il n'y a qu'un seul type de guillemets dans Stacked, à savoir,
'
il serait donc plus long de faire ce type de solution.la source
Coque , 12 octets
Essayez-le en ligne!
Explication
L'explication utilise
¨
pour délimiter des chaînes et des'
caractères:la source
Java 8,
172122 octets0-indexé, et donne
-1
pour les caractères qui ne font pas partie du code source.Explication:
Essayez-le en ligne.
la source
J ,
3122 octetsEssayez-le en ligne!
1-indexé, 0 pour les caractères qui ne sont pas présents dans le code.
''
représente un seul devis. Recherchez chaque caractère dans la chaîne11|1+i.~&'
, ajoutez 1, modulo 11.la source
> <> , 31 octets
Essayez-le en ligne!
La sortie est indexée sur 1, ce qui
32
signifie que le caractère n'est pas dans le code.la source
Perl 5 avec
-pl
, 43 octetsUtilise une entrée séparée par une nouvelle ligne et imprime
-1
pour les caractères n'apparaissant pas dans le programme.Essayez-le en ligne!
la source
Stax , 19 octets
Exécuter et déboguer
Affiche un index basé sur 0, un caractère par ligne. Il s'avère que c'est plus court que de modifier le
"34bL"34bL
quine que j'ai écrit plus tôt.la source