La plupart des gens ici connaissent les affichages à sept segments, qui sont également utilisés dans les puzzles à allumettes. Voici les chiffres 0
par 9
lettres et a
par z
, à l' exception k,m,t,v,w
, écrites dans ce format.
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
_ _ _ _ _ _ _ _ _
|_| |_ | _| |_ |_ | |_ | | | _ _ |_| |_| _ |_ |_| |_| _|
| | |_| |_ |_| |_ | |_| | | | |_| |_ | | |_| | | | _| |_| | | | |_
Le défi ici est simple. Étant donné une chaîne d'entrée, affichez le nombre d'allumettes nécessaires pour représenter cette chaîne. Si la chaîne contient un caractère en dehors de la représentation ci-dessus, ignorez-le (comptez-le comme 0).
Par exemple, pour l'entrée 53
, un total d' 10
allumettes sont nécessaires, 5
pour le 5
et 5
pour le 3
, donc la sortie l'est 10
.
Pour l'entrée, hello
un total d' 19
allumettes sont nécessaires h (4), e (5), l (3), l (3), o (4)
, donc la sortie l'est 19
.
Pour plus de clarté, voici les allumettes nécessaires pour construire chaque personnage:
0 -> 6
1 -> 2
2 -> 5
3 -> 5
4 -> 4
5 -> 5
6 -> 6
7 -> 3
8 -> 7
9 -> 6
a -> 6
b -> 5
c -> 4
d -> 5
e -> 5
f -> 4
g -> 5
h -> 4
i -> 2
j -> 4
l -> 3
n -> 3
o -> 4
p -> 5
q -> 5
r -> 2
s -> 5
u -> 3
x -> 5
y -> 4
z -> 5
Maintenant, pour la torsion, et il y en a deux.
- La première est que l'entrée est considérée comme sensible à la casse. Autrement dit,
A
eta
devraient tous deux compter pour les6
allumettes, même si la représentation visuelle ressemble à une majusculeA
. - Votre score est votre code source exécuté à travers cet algorithme, plus la longueur de votre code source en octets, plus c'est bas, mieux c'est. Par exemple, si votre code source était
abc123
, votre score serait6+5+4+2+5+5 = 27 + 6 = 33
. Si votre code source l'était#&@()*
, votre score serait0 + 6 = 6
.
Exemples d'entrées / sorties
0 -> 6
53 -> 10
111 -> 6
112 -> 9
8888 -> 28
hello -> 19
PPCG -> 19
Programming Puzzles & Code Golf -> 99
#&()mt!!~ -> 0
*DḌƤÆE%Ḅċ0 -> 16
Règles
- Le cas échéant, vous pouvez supposer que l'entrée / sortie s'adaptera au type Integer natif de votre langue.
- L'entrée et la sortie peuvent être fournies par n'importe quelle méthode pratique .
- Un programme complet ou une fonction sont acceptables. S'il s'agit d'une fonction, vous pouvez renvoyer la sortie plutôt que de l'imprimer.
- Les failles standard sont interdites.
la source
|_\n|_
(en minusculest
)[0-9a-z]
, faut-il compter 0 allumettes? C'est ce que je comprends de votre score est votre code source exécuté à travers cet algorithme , plus la longueur de votre code source en octets .Réponses:
Python 2 , 97 octets + 237 correspondances = 334
Essayez-le en ligne!
Cela fonctionne en générant une chaîne où chaque personnage à construire apparaît la même quantité d'allumettes nécessaires pour construire ce personnage
la source
+'069a8'*6+'8')
au lieu de+'069a'*6+'8'*7)
.Perl 5 avec
-pF
, 95 octets + 14, 109Cela équivaut à:
mais en utilisant l'
~
opérateur, nous pouvons utiliser des caractères à octets élevés et éviter beaucoup de caractères sans vraiment sacrifier les octets.Encore loin du score de Ton, même avec de l'aide!
Essayez-le en ligne!
Cette solution contient des non imprimables, voici donc un vidage hexadécimal réversible pour vérifier le nombre d'octets:
la source
}{
? Déposez-le et l'-n
option. Vous oubliez aussi+lc
au lieu delc()
:-)+
ne me vient pas immédiatement à l'esprit! J'ai besoinn
sur ma machine et oublie que je peux la laisser tomber!}{
et-p
" (et le remplacer par-n
si votre perl en a toujours besoin. De nos jours, cela ne compte pas de toute façon)JavaScript (ES6), 198 (102 octets + 96 allumettes)
5 points économisés grâce à @ l4m2
Essayez-le en ligne!
Comment?
Nous utilisons le code ASCII modulo 9 de caractères qui n'ajoutent aucune pénalité pour encoder le nombre d'allumettes.
Nous n'avons pas à nous soucier du cas car il
parseInt()
est insensible à la casse.Pour les caractères qui ne correspondent pas à [0-9A-Za-z] ,
parseInt()
renvoieNaN
et la recherche de chaîne se traduit parundefined
. Une fois contraint à une chaîne,"undefined".charCodeAt()
retourne le code ASCII de"u"
, qui est 117 . Idéalement, 117 modulo 9 donne 0 comme prévu.la source
v=>[...v].map(w=>t+='~{w__^_{]|{{_^__^_^w^~]~]^__w_~]~~_^_'.charCodeAt(1+parseInt(w,36))%9,t=+[])|t
1 de moinsGelée , 42 octets + 0 allumettes = 42 points
Merci à @JonathanAllan pour -2 points!
Essayez-le en ligne!
Comment ça fonctionne
Les littéraux qui commencent
“
et se terminent par’
split on“
, remplacent les caractères restants par leurs index basés sur 1 dans la page de codes de Jelly, puis convertissent de la base bijective 250 en entier.Ce littéral particulier code
×/
réduit par multiplication, donnant(L'encodage direct de cet entier économiserait 6 octets, mais coûterait 28 allumettes.)
ṚṚ
inverse deux fois; le premier appel promeut un entier dans son tableau de chiffres. Cela donneċЀØW$
compte (ċ
) les occurrences de chaque (Ѐ
) caractère de "A ... Za ... z0 ... 9_" (ØW
) dans la chaîne d'entrée.Prend enfin
æ.
le produit scalaire, multipliant chaque nombre de caractères par le coût correspondant en allumettes, puis en prenant la somme.la source
D
en enregistrer un autre. Essayez-le en ligneƊ
. Merci!Perl 5
-p
,9064 code + 9 harnais d'évaluation + 14 allumettes = 87Remplacez les codes hexadécimaux par leur variante littérale de 1 octet ( pas UTF-8 comme TIO essaie de le faire) pour le score revendiqué
Essayez-le en ligne!
Code À l'intérieur de la chaîne complétée:
la source
Gelée , 34 octets + 3 correspondances = 37
Un lien monadique acceptant une liste de caractères et renvoyant un entier.
Essayez-le en ligne!
Comment?
Fonctionne de manière similaire à la réponse de Dennis 'Jelly mais a pris suffisamment d'efforts pour que je pense que cela mérite une autre réponse. La principale différence est qu'elle met en minuscules l'entrée pour un coût de trois correspondances (
Œl
contient unl
), ce qui permet ensuite d'utiliser un nombre beaucoup plus petit pour créer le tableau des coûts. La difficulté était de trouver un moyen de construire ce nombre sans correspondance tout en restant concis.ØW
donne"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_"
donc que le comptage des occurrences d'entrée en minuscules commence toujours par 26 zéros. Nous pouvons inverser cela et effectuer un produit scalaire avec un tableau de longueur 37 au lieu de l'un de longueur 63.la source
PHP 176 octets = 397 score
Essayez-le en ligne!
la source
SOGL V0.12 , 34 octets + 18 = 52
Essayez-le ici!
Golfé, mais ne marquant pas autant :
la source
Python 3 , 138 + 265 = 403 octets
Essayez-le en ligne!
la source
Rubis , 125 octets + 87 allumettes = 212
Essayez-le en ligne!
Fortement inspiré par la réponse Javascript Arnauld .
Normalement, le coût de déclarer un lambda à utiliser seulement deux fois ne vaut pas la peine, mais le poids de l'allumette "
scanap
" en a.scan(/./).map
changé cela. C'était un défi amusant!la source
MATL , score
166156Longueur de code 41 + sortie pour le code utilisé comme entrée 115.
Essayez-le en ligne!
la source
R, 112 octets + 319 correspondances = 431 points
Essayez-le en ligne!
Bravo à Giuseppe qui a proposé cette amélioration.
Ancienne version, 143 octets + 454 correspondances = 597 points
Pour faire le
el()
fonction fonctionne sur TIO, vous devez utiliserlibrary(methods)
.Mon Dieu, c'est R verbeux!
la source
methods
package, mais comme il s'agit d'unbase
package, je l'ai toujours inséré dans l'en-tête et ne le compte pas pour le nombre d'octets.readline
ne fonctionnera pas non plus sur TIO car ce n'est pas une session interactive. C'est définitivement golfable, cependant.Perl 6 , 87 octets + 26 allumettes = 113
Essayez-le en ligne!
Utilise certains caractères Unicode non ASCII. La table de recherche est codée dans une chaîne Unicode:
Les caractères sont convertis en indices avec une conversion en base 36 à l'aide de chiffres arabes:
la source
sed, 367 (octets de code source) + 532 (quantité d'allumettes pour le code source) = 899
Essayez-le en ligne
Version multiligne:
Explication:
Le script ci-dessus lit l'entrée ligne par ligne standard (dans l'espace de motif - la "voie sed" habituelle) et, pour chaque ligne, il génère le nombre d'allumettes nécessaires pour représenter tous les caractères représentables par les allumettes de cette ligne. Les calculs pour chaque ligne d'entrée se produisent comme suit:
Tout d'abord, nous supprimons tous les caractères pour lesquels nous n'avons pas de représentation de matchstick correspondante (comme indiqué sur la question) de l'espace de motif. Autrement dit, nous supprimons chaque caractère qui n'est pas non plus un chiffre de "0" à "9", une lettre de "a" à "j", "n" à "s", "l", "u", "x", "y" ou "z". Les lettres majuscules et minuscules sont traitées de la même manière.
Si nous nous retrouvons avec un espace de motif vide, nous imprimons 0 (automatiquement suivi d'une nouvelle ligne, comme sed le fait toujours sauf si vous lui passez un drapeau spécial), sautez toutes les lignes postérieures du script et passez au prochain "cycle sed" ( c'est-à-dire, lisez la ligne d'entrée suivante et répétez le traitement à nouveau depuis la première commande jusqu'à ce qu'il n'y ait plus de lignes d'entrée à traiter).
Sinon, si l'espace de motif n'est pas vide, nous le divisons maintenant en deux "sous-espaces" séparés par un point-virgule: vient d'abord l' espace d'entrée , qui est initialement formé par tous les caractères qui n'ont pas été supprimés de l'espace de motif après la exécution de la ligne 1; vient ensuite le point-virgule, puis l' espace de carte .
L'espace de la carte nous indique combien d'allumettes à côté de 1 sont nécessaires pour représenter chaque caractère alphanumérique pertinent. Si nous voulons savoir combien d'allumettes sont nécessaires pour représenter un caractère alphanumérique dans l'espace de la carte, nous recherchons la première séquence de% contigus à gauche de ce caractère, et la réponse sera le nombre de% dans cette séquence plus 1. Ainsi, par exemple, le nombre d'allumettes nécessaires pour représenter un "b" est 4 + 1 = 5; pour représenter un "4", 3 + 1 = 4, pour représenter un "y", 3 + 1 = 4; etc.
Ceci est une boucle. Maintenant, nous allons remplacer chaque caractère dans l'espace d'entrée par la séquence (complète) de% dont le nombre indique la quantité nécessaire de correspondances pour représenter ce caractère, et suivre cette séquence par un caractère d'espace blanc (encore une fois, les lettres majuscules et minuscules sont le même traitement). Le critère pour déterminer si la boucle doit se terminer est de vérifier s'il y a un caractère d'espace blanc immédiatement à gauche du point-virgule dans l'espace de motif: si cette condition est remplie, nous terminons la boucle et continuons dans la ligne suivante.
Ces deux lignes suppriment le point-virgule et tout ce qui se trouve après de l'espace de motif, puis insèrent une virgule et un point-virgule au début de l'espace de motif. Nous avons maintenant l'espace de motif divisé à nouveau en deux nouveaux sous-espaces: l' espace de résultat analogique avant le point-virgule et l' espace d'entrée analogique après celui-ci.
L'espace d'entrée analogique est exactement ce que nous avons appelé précédemment «l'espace d'entrée», mais sous une forme différente: il contient maintenant des séquences de% séparées par un espace blanc. Le nombre total de ces% dans l'espace d'entrée analogique est le même nombre d'allumettes nécessaires pour représenter la chaîne de caractères d'entrée initiale, c'est-à-dire que ce nombre est le résultat. Mais nous devons imprimer ce résultat en notation décimale, pas comme une séquence de signes de pourcentage. Le but de l' espace de résultat analogique est de contenir une représentation analogique de chaque chiffre du résultat pendant que nous calculons ce résultat en sommant une à une chaque séquence contiguë de% dans l'espace d'entrée analogique. La boucle suivante effectue cette somme:
Tout d'abord, après l'étiquette 2 , nous déplaçons la prochaine séquence contiguë de% après le point-virgule de l'espace d'entrée analogique vers la gauche immédiate du point-virgule, dans l'espace de résultat analogique;
Ensuite, nous entrons dans une sous-boucle (étiquette 3 ) qui effectue les calculs suivants:
S'il y a une séquence contiguë de dix% après une virgule dans l'espace de résultat analogique, nous supprimons ces% et mettons un seul% immédiatement à gauche de la virgule. Pour dire les choses simplement, cela indique que l'une des décimales dans le résultat a acquis plus de 9 unités, donc nous enlevons 10 unités de cette décimale et ajoutons 1 unité à la décimale suivante la plus grande;
Si un "%" est le premier caractère de l'espace de motif, nous insérons une nouvelle virgule juste avant. Cela indique que la somme a atteint une valeur dont la représentation décimale a une décimale de plus à gauche que la valeur précédente;
S'il y a encore une séquence contiguë de dix% dans l'espace de résultat analogique, nous revenons à l'étiquette 3 et répétons ce processus. Sinon, nous quittons cette sous-boucle et passons à la ligne suivante.
Maintenant, s'il y a encore un "%" dans l'espace d'entrée analogique (c'est-à-dire après le point-virgule), cela signifie qu'il y a encore un certain nombre d'allumettes à ajouter à la somme totale - nous revenons donc à l'étiquette 2 .
Une fois la somme terminée, nous entrons dans la boucle finale du code:
Ici, nous vérifions chaque paire de caractères formée d'une virgule à gauche et d'un point-virgule ou d'une virgule à droite. Nous remplaçons toutes ces paires de caractères par un "0" à l'intérieur de deux virgules.
Le morceau de code ci-dessus est assez simple: nous remplaçons chaque séquence contiguë de% dans l'espace de résultat analogique par un caractère décimal qui correspond au nombre de% dans chaque séquence particulière.
Enfin, nous supprimons tous les caractères non numériques de l'espace de motif et ce qui reste est le résultat final dans la notation décimale familière. Cette valeur est imprimée sur la sortie standard et le cycle sed suivant commence, s'il reste d'autres lignes d'entrée à traiter.
la source
C (gcc) , 134 octets + 38 allumettes = 172
Essayez-le en ligne!
la source
05AB1E , 30 octets + 70 correspondances = 100 points
Essayez-le en ligne!
-5 grâce à Emgina
la source
Al
=A
. Vous n'avez pas non plus besoin de}
.Java 10,
452432416404 (145 octets + 259 correspondances)Explication:
Essayez-le en ligne.
Les noms de variablesEDIT: noms de variables$ραετ
sont utilisés à la place des lettres.kmtvw
sont désormais utilisés à la place, car ils ne peuvent pas être formés par des correspondances selon la description du défi.''
(non imprimable) est utilisé à la place de6
.m-m
ett-t
sont utilisés à la place de0
.(char)(w|32)+""
avec une entrée de tableau de caractères utilisée au lieu d'une entrée de tableau dew.toLowerCase()
chaînes.la source
AutoHotkey , 148 octets + 345 allumettes = 493
Celui-ci était un peu difficile à raccourcir.
la source
Python 3 , 123 octets + 65 correspondances = 188
Une fonction sans nom acceptant une chaîne et renvoyant un entier.
Contient de nombreux caractères non imprimables (en particulier les octets un à huit).
Essayez-le en ligne!
la source
Fusain , 48 octets + 3 = 51
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Parcourez les caractères de l'entrée, calculez le nombre de correspondances de chacun, puis additionnez le résultat, convertissez-le en chaîne et imprimez implicitement.
Si c'est une lettre ...
Recherchez le nombre d'allumettes dans la chaîne compressée
65455454240303455250300545
.Sinon s'il apparaît dans la valeur de
2 ** 1000
...Recherchez le nombre d'allumettes dans la chaîne compressée
6255456376
.la source
PHP, 98 + 253 = 351
Exécuter en tant que pipe avec
-nr
ou l' essayer en ligne .la source