Pendant que j'écrivais des chiffres, j'ai remarqué après un moment que mon clavier avait la Shifttouche enfoncée et bloquée et tout ce que j'écrivais était $%&
comme des caractères. Et pire encore, j'avais basculé entre les dispositions de clavier anglais et espagnol, donc je ne sais pas lequel j'ai utilisé pour chaque numéro.
Défi
Étant donné une chaîne contenant des caractères de symbole, essayez de deviner quel numéro j'ai écrit. Mon clavier produit les caractères suivants pour les chiffres lorsque vous Shiftappuyez sur:
1234567890
----------
!"·$%&/()= Spanish layout
!@#$%^&*() English layout
- L'entrée sera une chaîne non nulle et non vide composée des symboles ci-dessus.
- La sortie sera un numéro unique si la disposition du clavier peut être déduite de la chaîne (c'est-à-dire si la chaîne contient une
@
disposition anglaise a été utilisée, et si la chaîne contient une"
disposition espagnole a été utilisée) ou si le nombre est le même pour les deux mises en page (c'est-à-dire que l'entrée est!$
qui se traduit comme14
pour les deux mises en page); sinon la sortie sera les deux nombres possibles pour les deux dispositions si elle ne peut pas être déduite et les nombres résultants sont différents. - La chaîne d'entrée sera toujours écrite dans une seule disposition. Vous n'avez donc pas besoin de vous attendre
"@
en entrée.
Exemples
Input --> Output
------------------
/() 789 (Spanish layout detected by the use of /)
$%& 456,457 (Layout cannot be inferred)
!@# 123 (English layout detected by the use of @ and #)
()&! 8961,9071 (Layout cannot be inferred)
((·)) 88399 (Spanish layout detected by the use of ·)
!$ 14 (Layout cannot be inferred but the result is the same for both)
!!$$%% 114455 (Layout cannot be inferred but the result is the same for both)
==$" 0042/42 (Spanish layout, if a number starts with 0 you can choose to
omit them in the result or not)
Single character translations:
------------------------------
! 1
" 2
· 3
$ 4
% 5
& 6,7
/ 7
( 8,9
) 9,0
= 0
@ 2
# 3
^ 6
* 8
Il s'agit de code-golf , de sorte que le code le plus court pour chaque langue gagne!
·
difficile ...·
est inutile pour l'espagnol, il n'est utilisé qu'en catalan.{(8, 9, 6, 1), (9, 0, 7, 1)}
(pour le 4ème cas de test) est-elle acceptable?Réponses:
Gelée ,
3231 octetsEssayez-le en ligne!
la source
Python 3 , 76 octets
Essayez-le en ligne!
la source
Perl 6 , 62 octets
Essayez-le en ligne!
Renvoie un ensemble. (Peut être raccourci de deux ou trois octets s'il n'y avait pas de bogue dans la gestion par Rakudo de # dans les listes de recherche.)
la source
Java (JDK) , 173 octets
Golfé
Essayez-le en ligne!
Non golfé
Tableau de recherche Magic Hashing
Après quelques essais avec des valeurs, j'ai réalisé que chacune des valeurs ASCII des caractères
!"·$%&/()=@#^*
modulo 16 renvoie un nombre unique. Le `` tableau de recherche de hachage magique '' stocke les nombres anglais associés à chaque caractère à cet index unique, et chacun des nombres espagnols à cet index compensé par 16, ce qui rend la récupération du nombre requis du tableau triviale pour chaque langue. Un hachage est stocké pour les valeurs non valides pour l'une ou l'autre langue.la source
toCharArray()
et le calcul de l'exposant à appliquer à la valeur int l'ont rendu beaucoup plus long que les deux.contains()
instructions.s.equals(e)|s.contains("#")
peut êtres.matches(e+"|.*#.*")
.Japt, 38 octets
Génère d'abord un tableau de chaînes avec la disposition espagnole.
Essayez-le
la source
Gelée , 38 octets
Essayez-le en ligne!
la source
()
ou(())
en entrée, mais votre code ne renvoie alors rien. Je suppose que c'est une limitation avec ce que Jelly reçoit en entrée?'()'
et'(())'
respectivement. Oui, si vous ne citez pas l'argument, il n'est saisi sous forme de chaîne que s'il ne peut pas être miseval
à une valeur Python 3.Retina 0.8.2 , 60 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Dupliquez l'entrée.
Essayez de traduire chaque ligne selon une disposition de clavier différente.
Dédupliquez le résultat.
Conserver uniquement les lignes contenant uniquement des chiffres.
la source
m
dernière étape?JavaScript (ES6), 99 octets
Essayez-le en ligne!
Comment?
x >= 0
la source
05AB1E ,
4241 octetsRéponse de Jelly du port de @dylnan .
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
Voir cette astuce de mes 05AB1E (section Comment les listes entières Compresser? ) Pour comprendre pourquoi
•Hhç₁d©u÷^Σ(“ðΣèõĆ\n-•184в
est[33,34,183,36,37,38,47,40,41,61,33,64,35,36,37,94,38,42,40,41]
). Ce (avec le2ä
) est plus courte que 1 octet prenant les valeurs unicode de la chaîne:'""!ÿ·$%&/()=""!@#$%^&*()"‚Ç
.la source
!$
et!!$$%%
ne doivent générer qu'un seul numéro car le résultat est le même pour les deux dispositions et il n'y a aucune ambiguïté.Rubis , 68 octets
Essayez-le en ligne!
la source
Nettoyer , 116 octets
Essayez-le en ligne!
Prend en entrée et est codé en CP437. TIO ne prend en charge que l'UTF-8, donc un échappement est utilisé dans le code de démonstration pour obtenir la valeur d'octet littérale 250 correspondant au point central (compté comme un octet).
la source
!$%
entrée ne doit générer qu'un seul chiffre, pas deux, car le résultat est le même pour les deux dispositions.APL (Dyalog) , 40 octets
Fonction de préfixe tacite anonyme. Bien qu'il ne soit pas utilisé, il
·
fait partie du jeu de caractères Dyalog à un octet . Suppose une indexation basée sur 0 (⎕IO←0
) qui est par défaut sur de nombreux systèmes.Essayez-le en ligne!
⊂
l'argument entier'=!"·$%&/()' ')!@#$%^&*('⍳¨
index des caractères dans chacune de ces chaînes{∪⍵/⍨~10∊¨⍵}
appliquer le lambda suivant (⍵
est l'argument):10∊¨⍵
pour chaque liste de chiffres, 10 (indiquant "non trouvé") en fait partie~
négation locale (c'est-à-dire uniquement celles où tous les chiffres sont trouvés)⍵/⍨
filtrer l'argument par ce∪
trouver les éléments uniques de cettela source
Fléchette , 125 octets
Non golfé:
Essayez-le sur Dartpad!
la source
T-SQL, 143 octets
L'entrée est prise via la table préexistante i avec le champ varchar v , selon nos normes IO .
Joint la table d'entrée avec les deux chaînes de caractères différentes, puis utilise la nouvelle fonction SQL 2017
TRANSLATE
pour échanger des caractères individuels etTRY_CAST
voir si nous nous retrouvons avec un nombre. Sinon,TRY_CAST
revientNULL
.L'extérieur final
SELECT DISTINCT
combine des résultats identiques et filtre leNULLS
.la source