J'ai un problème au travail. J'ai besoin de comparer deux nombres provenant de chaînes de deux bases de données différentes. Les nombres peuvent être accompagnés de zéros de tête et / ou d'espaces de début / fin. Je peux donc avoir "0001 "
d'une base de données et " 1 "
de l'autre.
J'ai résolu le problème en C # avec le code suivant:
Func<string, string, bool> f = (a,b) => int.Parse(a.Trim()) == int.Parse(b.Trim())
Le défi
Il s'agit d'un défi très simple, adapté aux débutants et à tout type de langues ésotériques. Étant donné deux nombres sous forme de chaînes pouvant être accompagnés de zéros de début et / ou d'espaces de début / de fin, écrivez le code le plus court qui vérifie si les deux chaînes représentent le même nombre.
- Les entrées doivent être deux chaînes ou l'équivalent dans votre langue (un tableau de caractères est OK), et elles représenteront toujours des valeurs entières supérieures à zéro.
- La sortie doit être deux valeurs cohérentes quelconques qui représentent une valeur véridique et une valeur de falsey.
Exemples
A B Result
----------------------------
"0001" "1 " true
"1450" "1450 " true
"0010001 " " 10001 " true
"0010000" " 10 " false
"101023" "101024" false
Il s'agit de code-golf , de sorte que le code le plus court pour chaque langue gagne!
Réponses:
Javascript , 11 octets
Abuser un peu des règles de casting de Javascript;
+a
contrainta
en un type numérique.-6 octets grâce à Shaggy et Martin Ender ♦
Aussi une prise cool de LiefdeWen :
la source
c=
, et le curry est également très bien, vous pouvez donc les utiliser à laa=>b=>...
place de(a,b)=>
. Enfin, mon JavaScript est un peu rouillé, mais je pense que quelque chose comme ça!(a-b)
fonctionnerait aussi?a
à un type numérique avec unaire+
.05AB1E , 1 octet
Essayez-le en ligne!
Explication
La comparaison pour l'égalité
Q
essaiera automatiquement d'évaluer les chaînes comme des entiers avant de comparer.la source
|0+Q
c'était assez court ...Langage de script Operation Flashpoint , 33 octets
Appeler avec:
Sortie:
Version alternative (41 octets):
Encore 5 octets de moins que le plus simple
f={t=_this;call(t select 0)==call(t select 1)}
39 octets:
count
(qui renvoie la taille d'un tableau) fonctionne à la place deforEach
, car vous pouvez lui donner un "lambda" qui est utilisé comme condition pour ne compter que les éléments du tableau qui remplissent cette condition. La "condition" utilisée dans ce cas n'est pas une condition valide, mais elle n'a pas d'importance ici car elle ne provoque pas d'erreur et la valeur de retour de lacount
n'est pas nécessaire.la source
Taxi , 488 octets
Essayez-le en ligne!
Non golfé:
Taxi est (relativement) bien adapté à ce défi car les chaînes sont le seul type d'entrée ou de sortie autorisé.
The Babelfishery
est ce qui convertit les chaînes en nombre (et vice versa) et gère la suppression de tous les espaces et des zéros non significatifs. Il gérera également les nombres négatifs si le-
est immédiatement avant le premier chiffre. Après cela,Equal's Corner
vérifie les deux valeurs l'une par rapport à l'autre etWriter's Depot
fournit la sortie au format chaîne. La sortie est1
pour truey et0
pour falsey.la source
error: The boss couldn't find your taxi in the garage. You're fired!
?Go to Taxi Garage:n 1 r 1 l 1 r.
C (gcc) , 27 octets
Avec
-O0
(qui est le paramètre par défaut).Essayez-le en ligne!
C, 32 octets
Essayez-le en ligne!
la source
char
, et lorsque vous passez un tableau à une fonction, vous passez simplement le pointeur au premier élément du tableau. Ici, les pointeurs vers leschar
tableaux sont implicitement convertis en entiers lorsqu'ils sont passés à la fonction, et les entiers sont reconvertis en pointeurs lors de l'appelatoi
.s=foo;
au lieu dereturn foo;
vous devez l'étiqueter comme "x86 gcc avec optimisation désactivée", pas seulement "C", car ce code ne renvoie pas de valeur sauf comme un artefact d'implémentation.s=retval;
au lieu dereturn retval;
se briser. Il semble que la logique interne de gcc (avec-O0
seulement) traite réellement la dernière expression comme la valeur de retour, peut-être de la même manière qu'une expression-instruction GNU C fonctionne. (Mais cela nécessites=
). Sur ARM32, il calcule le==
résultat dansr3
, puis utilise un supplémentmov r0, r3
pour en faire la valeur de retour! Ce n'est donc pas un hack spécifique à x86, c'est ungcc -O0
hack que gcc semble se mettre en quatre.J , 4 octets
Comparez
=
après&
évaluationdo
. Peut également être=&".
Essayez-le en ligne!la source
-10
) et les négatifs comme J les comprend (par exemple_10
) en raison de la façon dont-
fonctionne le monadisme .Rétine , 11 octets
Essayez-le en ligne!
L'entrée est séparée par saut de ligne, mais la suite de tests utilise la séparation par virgule pour plus de commodité. Imprime
1
pour l'égalité et0
pour l'inégalité.Explication
Convertissez chaque ligne en unaire. Cela ignore les zéros et les espaces en tête.
Dédupliquer: effacer la deuxième ligne si les deux sont identiques.
Vérifiez que la chaîne se termine maintenant par un saut de ligne.
la source
Python 3 , 25 octets
Essayez-le en ligne!
la source
Brain-Flak , 22 octets
Essayez-le en ligne!
Enregistré 4 octets grâce à Jo King .
la source
Triangularité , 17 octets
Essayez-le en ligne!
La triangulation est, pour une fois, compétitive!
Comment ça marche
La triangularité nécessite que le code ait une distribution triangulaire des points. Autrement dit, la longueur de chaque ligne doit être égale au nombre de lignes multiplié par 2 et décrémenté, et chaque ligne doit avoir (de chaque côté) un nombre de points égal à sa position dans le programme (la ligne du bas est la ligne 0, celui au-dessus est la ligne 1 et ainsi de suite). Gardant cela à l'esprit, analysons le fonctionnement du code:
la source
Alice , 7 octets
Essayez-le en ligne!
Tout séparateur non numérique fonctionne. Imprime
1
pour l'égalité et0
autrement.Explication
la source
Japt , 3 octets
Essayez-le
Convertit la deuxième entrée en un entier et compare l'égalité avec la première.
la source
APL (Dyalog) , 4 octets
3 octets enregistrés grâce à @ Adám
Essayez-le en ligne!
la source
=/⍎¨
jq, 24 caractères
Les 2 chaînes sont passées en tant qu'éléments d'un tableau.
Exemple d'exécution:
Essayez-le en ligne! ( Tous les cas de test )
la source
Husk , 3 octets
Essayez-le en ligne!
Explication
la source
Ër
fonctionne aussi.PowerShell , 20 octets
Semblable à la réponse JavaScript, juste plus longtemps car PowerShell n'a pas de curry. Utilise
+
pour convertir la première chaîne en entier, puis l'-eq
uals convertit automatiquement la deuxième chaîne en entier. La sortie est True / False.Essayez-le en ligne!
la source
PowerShell , 19 octets
Essayez-le en ligne!
-join
l'argument array ($args
) avec la représentation sous forme de chaîne de l'opérateur de comparaison (-eq
) puis évaluer l'expression avecInvoke-Expression
(iex
).la source
+
car il vérifie l'égalité des chaînes.00009
et077
le code résultant est00009 -eq077
, un morceau de code parfaitement valide. Vous traitez directement avec la chaîne au moment de l'exécution, vous devez donc la convertir en premier afin que l'opération se fasse sur un numérique.Q (Kdb +), 13 octets
Explication
(x; y): une liste des deux entrées.
"J" $: conversion de chaque entrée en un type long (7j) à partir de la chaîne (10c), qui peut interpréter correctement
les espaces blancs et les 0 en tête.
= /: vérifie l'égalité sur les éléments d'une liste (chaque paire suivante).
Comme il n'y a qu'une seule paire, retourne un booléen unique 0b / 1b.
la source
{=/["J"$(x;y)]}
à- dire pour 15 octets ... Bien que pour 8 octets, vous pourriez avoir ceci:(~/)"J"$
si vous utilisez simplement le REPL et passez les entrées comme une liste de chaînes .. ou{(~/)"J"$x}
pour 11 en fonction.T-SQL, 35 octets
Selon nos normes , les données sont entrées via une table préexistante
t
avec desvarchar
champsa
etb
.Renvoie
1
s'ils correspondent,0
sinon.Quelques-unes des fonctions mathématiques de SQL (y compris
ABS
,FLOOR
etCEILING
) effectueront une conversion implicite en numérique si des paramètres de chaîne donnés sont plus courts qu'un expliciteCAST(a AS INT)
ouCONVERT(INT,b)
, et fonctionnent dans ce cas car nous savons que les valeurs d'entrée sont toujours positives.IIF
est spécifique à MS SQL 2012 et supérieur, donc aucune garantie sur les autres implémentations.la source
Excel VBA,
2716 octets-9 Merci à @Nayrb et @TaylorScott
Où vous entrez les valeurs sur les cellules avec
'string
.Oùx
ety
sont les chaînes d'entrée etz
est une sortie booléenne.Si CInt (x) = CInt (y) Alors z = 1
Utilisation de CIntla source
?[Int(A1)=Int(B1)]
celle qui prend les entrées des plagesA1
etB1
et les sorties vers la fenêtre immédiate VBER ,
2827 octetsLit les nombres sous forme de chaînes, les convertit en doubles et vérifie si leur différence n'est pas nulle.
Essayez-le en ligne!
−1 octet grâce à Giuseppe
la source
""
suffisantLua , 20 octets
Essayez-le en ligne!
la source
Haskell , 20 octets
-11 octets grâce à Laikoni. -2 octets grâce à Zgarb.
Essayez-le en ligne!
la source
read
:a#b=0+read a==read b
Gema , 21 personnages
Pas de booléen à Gema. Comme les fonctions
@get-switch{}
/@set-switch{}
utilisent 0 et 1 pour représenter les états des commutateurs, également utilisées 0 et 1.Les 2 chaînes sont passées sur des lignes d'entrée distinctes.
Exemple d'exécution:
la source
Perl 5, 9 + 1 (
-p
) = 10 octetsessayez-le en ligne
la source
Empilé , 8 octets
Essayez-le en ligne!
Explication
la source
Attaché , 11 octets
Essayez-le en ligne!
Cela prend un tableau de chaînes, comme
V["0001", "1 "]
. En termes simples,Map&:N
est une fonction qui mappeN
son argument etSame
vérifie que le tableau ne contient que des membres égaux. (Fait amusant: cette fonction fonctionne pour plus de 2 arguments de chaîne.)la source
SNOBOL4 (CSNOBOL4) , 42 octets
Essayez-le en ligne!
Sorties 1 pour véridique, rien pour falsey. Puisque
(espace) est l'opérateur de concaténation dans SNOBOL,
EVAL
ing un nombre avec des espaces de début / fin donne le nombre lui-même, et il prend également soin de tous les zéros de tête.EQ
tests d'égalité numérique, conditionnellementOUTPUT
à 1 activéSuccess
.la source
Sinclair ZX81 / Timex TS1000 / 1500 BASIC, ~ 29 octets BASIC à jeton
Nouvelle solution grâce à Neil (merci pour l'astuce).
Cette solution nécessite une entrée utilisateur, donc entrez deux chaînes avec des espaces blancs et / ou des zéros non significatifs, ou entrez deux chaînes de valeur numérique non égale;
0
est faux et1
vrai une fois que la ligne trois a comparé la valeur de chaque chaîne entrée.Ancienne solution: Sinclair ZX81 / Timex TS1000 / 1500 BASIC, ~ 46 octets BASIC tokenisés
La vérification proprement dite est effectuée sur la troisième ligne, qui ne représente que ~ 16 octets BASIC à jeton; donc la saisie de chaque paire de cas de test en mode direct permettra d'économiser environ 30 octets de la liste. Notez que ce nombre d'octets n'inclut pas le
var stack
.la source
INPUT A$
etINPUT B$
? De plus, je ne pense pas que vous ayez besoin du par()
.APL (NARS2000) , 7 octets
Eh bien, oui, je sais que NARS2000 ne peut pas rivaliser avec Dyalog ici car il utilise Unicode, mais je pensais que je préfèrerais me montrer
⍥
(appelé Composition dans NARS2000, même si cela n'est en fait pas lié à la composition des fonctions), ce que Dyalog ne fait pas avoir comme intégré et je n'ai jamais vu utilisé ici. Dans Dyalog, il doit être mis en œuvre comme{(⍵⍵⍺)⍺⍺⍵⍵ ⍵}
. Ce qu'il fait, c'est appeler la fonction monadique de l'opérande droit sur les arguments gauche et droit, puis appeler la fonction dyadique de l'opérande gauche sur les résultats.Ici, l'opérande de droite est
⍎
( Execute , ie eval) et l'opérande de gauche est=
( Equal To , c'est-à-dire vérifier si ses arguments sont égaux).la source