Il s'agit d'une question d'entrevue Google, voir ici pour un lien youtube.
La tâche:
Trouvez 2 entiers dans une liste non ordonnée qui totalisent un entier donné.
- Étant donné une liste non ordonnée d'entiers, recherchez 2 entiers qui totalisent une valeur donnée, imprimez ces 2 entiers et indiquez le succès (sortie 0). Ils n'ont pas besoin d'être des nombres particuliers (c'est-à-dire les 2 premiers entiers additionnant au bon nombre), n'importe quelle paire qui additionne la valeur fonctionnera.
- un entier est positif et supérieur à zéro.
- une liste d'entiers peut être dans n'importe quelle structure de données, y compris un fichier d'entiers - un entier par ligne.
- si aucun entier ne peut être trouvé, indiquer un échec (sortie 1).
- deux entiers à des positions différentes dans la liste doivent être retournés. (c'est-à-dire que vous ne pouvez pas renvoyer deux fois le même numéro à partir de la même position)
(Remarque: dans la vidéo, ce ne sont pas exactement les exigences. L'enquêteur a changé ses multiples fois.)
par exemple.
sum2 8 <<EOF
1
7
4
6
5
3
8
2
EOF
Imprime 3
et 5
et le statut de sortie est 0. Notez que cela 1,7
et 2,6
serait également autorisé des résultats.
sum2 8 <<EOF
1
2
3
4
Renvoie l'état de sortie 1 car aucun combo possible. 4,4
n'est pas autorisé, selon la règle 5.
code-golf
arithmetic
array-manipulation
philcolbourn
la source
la source
Réponses:
Bash, 84 octets
Mon implémentation de la solution (grossièrement) de l'ingénieur de Google mais en utilisant bash et un flux d'entrée - pas ma solution, donc cela ne compte pas.
Méthode
alors que nous pouvons lire l'entier V du flux d'entrée s'il est inférieur à la cible $ 1, alors s'il est déjà vu $ 1-V, puis imprimer $ 1-V et V et quitter 0 (sinon) enregistrer le candidat pour l'entrée $ 1-V quitter 1
la source
Brachylog , 9 octets
Essayez-le en ligne!
En supposant que j'ai bien compris le défi…
Explication
la source
Perl 6 , 59 octets
Essayez-le
Essayez sans résultat possible
Étendu:
la source
JavaScript ES6,
58 70 6864 octetsRenvoie une paire de nombres sous la forme d'un tableau s'il est trouvé, sinon renvoie
undefined
une valeur falsifiée.la source
3, 5
mais cela sort1, 7
...f([2,2] 4)
?includes
astuce.JavaScript (ES6),
615756 octetsPrend le tableau d'entiers
a
et la somme attendues
dans la syntaxe de curry(a)(s)
. Renvoie une paire d'entiers correspondants sous forme de tableau, ouundefined
si aucune paire de ce type n'existe.Formaté et commenté
Tester
Afficher l'extrait de code
la source
Gelée , 14 octets
Essayez-le en ligne!
Il s'agit d'une fonction (pas d'un programme complet) qui produit une sortie standard. (Le lien TIO a un wrapper qui exécute une fonction et ignore sa valeur de retour.)
Ce programme pourrait être de 4 octets plus court si ce n'est pour l'exigence de code de sortie; renvoyer un code de sortie de 1 dans Jelly est assez difficile. (Il est possible qu'il y ait un moyen terser de faire cela que j'ai manqué.)
Explication
Nous pouvons très bien diviser par deux chaque entier d'une paire, donc le
o⁶H
ne fera rien si nous trouvons un résultat, autre que le retour d'une valeur de retour inutile qui n'est pas pertinente de toute façon (leṄ
sert de méthode pratique à un octet pour déterminer le retour de la fonction valeur anticipée, selon les règles PPCG). Cependant, si nous ne trouvons pas de résultat, nous finissons par essayer de diviser par deux un espace, une opération si vide de sens qu'elle fait planter l'interpréteur Jelly. Heureusement, ce plantage produit un code de sortie de 1.la source
Perl 5 , 51 octets
46 octets de code + pour 5 octets pour les
-pli
drapeaux.Essayez-le en ligne!
L'idée est d'itérer sur la liste d'entrée: sur un nombre
x
($_
), si nous avons vu précédemmentn-x
($^I-$_
) alors nous avons trouvé ce que nous cherchions, et mis$\
à ces deux valeurs ("$_ $v"
). À la fin, s'il$\
n'est pas défini, alors nousexit 1
, sinon il sera implicitement imprimé.la source
^I
?Röda ,
6056 octetsEssayez-le en ligne!
Ce code renvoie une erreur s'il n'y a pas de réponse. Il génère toutes les paires possibles qui peuvent former la somme
s
, c'est-à-dire.1, s-1
,2, s-2
,3, s-3
, ... Ensuite , il vérifie si les deux chiffres sont dans le tableaua
et le cas échéant, les pousse au courant.pull
lit une valeur du flux et la renvoie. S'il n'y a pas de valeurs dans le flux, il renvoie une erreur.a-x
renvoie le tableaua
avecx
supprimé.la source
Python 2, 60 octets
Ce court, jusqu'à ce que les règles de sortie avec le code 1 soient clarifiées. Quitte maintenant avec erreur si rien n'est trouvé.
-5 octets grâce à @Peilonrayz
-4 octets grâce à @Rod
Essayez-le en ligne
la source
input()
pour réduire 4 octetseval(raw_input())
(je pense).C ++ 133 octets (compilé avec clang 4 et gcc 5.3 -std = c ++ 14)
C 108 octets
la source
#include <set>
et quelques autres pourstd::set
. Bien que vous puissiez également enregistrer quelques octets si vous supprimez les accolades autourp.insert(v-i);
main
. Nous considérons (sauf indication contraire dans le défi) qu'une fonction est une soumission valide. (bienvenue sur le site btw!)end
trop, mais il compile sur gcc sansstd::
(et défini si bien sûr pas)Haskell , 34 octets
Essayez-le en ligne!
Pour chaque élément de la liste, cette fonction vérifie si (sum-element) se trouve dans la partie suivante de la liste. Renvoie le premier couple qu'il trouve. Si la fonction atteint la fin de la liste, elle génère une erreur "modèles non exhaustifs" et se termine avec le code 1.
la source
[2,2]#4
.PowerShell,
10997 octetsA pris un accord de 12 octets qu'AdmBorkBork a offert
Explication
Les règles actuelles recherchent le code de sortie, ce qui est le cas. Ceux-ci pourraient être supprimés et vérifier simplement les numéros retournés et une fausse.
Exemple d'utilisation
Si le code ci-dessus a été enregistré en tant que fonction
s
la source
$c
et en bouclant vers le bas -($a.count-1)..1|%{$f=$_;--$_..0|%{if...
R, 49 octets
Ceci trouve toutes les 2 combinaisons de
x
et retourne une matrice. Ensuite, somme par colonne et trouve toutes les sommes égales ày
(donc sans la[,1]
partie à la fin, il imprimera toutes les combinaisons auxquelles leurs sommes sont égalesy
)la source
Japt , 9 octets
Beaucoup d'octets enregistrés grâce à @ETHproductions
Essayez-le en ligne!
Explication
Exemple
la source
Javascript,
114968684 octets1 octet enregistré grâce à @Cyoce et 8 octets supplémentaires grâce à @ETHProductions
Cela renvoie un tuple avec la première combinaison d'éléments de liste qui résument à l'entrée donnée, ou rien pour aucune correspondance. J'ai supprimé les
var
s dans la fonction; REPL.it se bloque sans eux, mais la console de développement Chrome gère cela très bien ...Essayez-le en ligne!
la source
y=x+1
prend soin de cela.a=>b=>...
pour enregistrer un octetfor(y=x;++y<b.length;){
. En outre, vous pouvez supprimer tous les ensembles d'accolades, sauf le plus extérieur, et vous pouvez supprimer l'espace aprèsreturn
Clojure, 77 octets
Renvoie la première paire ou
nil
.la source
Haskell, 62 octets
Je ne sais toujours pas ce qui est permis par le défi et ce qui ne l'est pas. Je vais pour une fonction qui imprime une paire de nombres et renvoie 0 s'il y a une solution et n'imprime rien et renvoie 1 s'il n'y a pas de solution. Comme l'impression est une E / S, je dois relever les valeurs de retour dans l'IO-Monad (via
return
) et le type réel de la fonction estNum a => IO a
.Exemple d'utilisation (avec valeur de retour imprimée par le repl):
Essayez-le en ligne! .
Si l'augmentation des exceptions est autorisée, vous
fail
économiserez quelques octets (total 51):la source
Gelée , 9 octets
Jelly n'a aucun moyen de définir le code de sortie sur des valeurs arbitraires, donc cela produit une TypeError pour l'entrée sans une solution valide qui provoquera la sortie de l'interpréteur parent avec le code de sortie 1 .
Essayez-le en ligne!
Comment ça fonctionne
la source
Nova , 101 octets
Une bonne chose à propos du code golf est qu'il m'aide à trouver des bugs dans ma langue. par exemple l'espace requis entre
return
et[y,x-y]
.Une fois que j'ajoute des fonctions push / pop à Array.nova et corrige le retour, ce serait 96 octets:
Usage:
Edit: Il y a aussi cette façon à 73 octets (69 en utilisant pop), aussi:
firstOrThrow lèvera une exception, qui ne sera pas interceptée et donc finira par quitter le programme avec le code de sortie 1.;)
Cette manière semble également plus lisible.
la source
Pyth, 12 octets
Explication
la source
PHP, 88 octets
prend l'entrée des arguments de ligne de commande, somme d'abord. Courez avec
-nr
.Heureusement,
die
/ seexit
termine0
lorsque vous lui donnez une chaîne en paramètre.J'ai essayé de fusionner les boucles en une seule; mais cela nécessite une initialisation plus longue et un test cette fois.
la source
for($i=1;$a=$argv[$k=++$i];)for(;$b=$argv[++$k];)$a+$b!=$argv[1]?:die(!0);
et vous devriez jeter un œil à ce codegolf.stackexchange.com/questions/120803/…Mathematica, 76 octets
Assez simple:
#~Subsets~{2}
obtient tous les sous-ensembles à 2 éléments de la liste, puisCases[...,x_/;Tr@x==#2]
ne sélectionne que ceux dont la somme est le nombre souhaité. S'il n'y en a pas,If[l=={}, Message@f::e,First@l]
imprime le message d'erreurf::e : 1
que nous avons défini précédemment (puisque je n'ai aucune idée de ce que pourrait signifier "exit status 1" pour Mathematica); sinon, elle renvoie la première entrée de la liste des paires qui correspondent à la bonne chose.Si nous sommes autorisés à renvoyer une valeur falsey au lieu de faire cette chose de statut de sortie étrange, le code suivant a 58 octets:
la source
Scala,
5541 octetsRenvoie une liste des deux nombres s'ils existent et renvoie une erreur dans le cas contraire. Non détectée, cette erreur entraînera un état de sortie de 1.
la source
Rubis,
5348 octetsEntrée: a est la liste, s est la somme attendue.
Si les 2 nombres sont trouvés, imprimez-les et retournez 0, sinon retournez 1, comme dans la spécification.
la source
TI-Basic, 59 octets
Explication:
Si le programme ne s'est pas terminé correctement, il provoquera une erreur lorsqu'il n'y aura pas suffisamment d'éléments dans la liste pour qu'il puisse continuer.
la source
CJam, 23 octets
L'entrée est
sum numbers
. Par exemple:6 [3 2 3]
. Laisse un nombre positif pour true et une chaîne vide ou 0 pour falsey.Explication:
la source