Étant donné un nombre n (0 <= n <= 2642245), vérifiez si n et n 3 ont le même ensemble de chiffres et émettez une valeur de vérité ou de falsey en conséquence.
Par exemple, vérifions le nombre 100.
100 3 est 1000000.
L'ensemble des chiffres de 100 est {0, 1}.
L'ensemble des chiffres dans 1000000 est {0, 1}.
Par conséquent, 100 devrait donner une valeur de vérité.
Cas de test
0 -> True
1 -> True
10 -> True
107624 -> True
251894 -> True
251895 -> False
102343 -> False
Rappelez-vous que c'est du code-golf , donc le code avec le moins d'octets gagne.
code-golf
number
decision-problem
Oliver Ni
la source
la source
2103869 -> True
. Ceci (ou un plus grand) est nécessaire pour tester une langue avec unlong
type de données.Réponses:
Python 3,
3632 octetsJe pense que cela ne fonctionne que dans Python 3.5 et versions ultérieures. Quatre octets ont disparu, grâce à Copper.
la source
set(`x`)
2097152
(sys.maxint**(1/3.)
) et inférieure à cellesys.maxint+1
retournéeFalse
si vous utilisezrepr()
. repl.it/EXs2/1 . Longs ont unL
à la fin.lambda x:{*str(x)}=={*str(x**3)}
dans Python 3.5+.==
par^
. Deux séries égales aboutissent à la{}
fausseté.05AB1E , 6 octets
05AB1E utilise le codage CP-1252 .
Essayez-le en ligne!
Explication
la source
C, 73 octets
Crée l'ensemble via des bits. Retourne
0
pour le même ensemble, rien pour les autres ensembles.Ungolfed:
la source
1 <<
lors du paramétrage des bits aveck |= 1 << i % 10
. Excellente solution!0
comme une vérité? Je supposestrcmp
que ça marche comme ça, donc ça semble raisonnable en C.int
supérieures à 64 bits. (Même signé 64 bits ne suffit pas, mais non signé 64 bits est). Donc, je ne connais pas de réelle implémentation de C où cela répond aux exigences de la question. (Cela fonctionne correctement avecunsigned long long
, ou seulementunsigned long
dans les implémentations où il s’agit d’un type 64 bits). GNU C définit__int128_t
sur les machines 64 bits (sans en-têtes) ...Perl, 31 + 2 (
-pl
drapeau) =2521183433 octetsEn utilisant:
Sortie:
1\n
ou0\n
.Merci à @ Dada pour 3 octets, à Gabriel Benamy pour 1 octet et à @Zaid pour les rapports de bogues.
la source
perl -pe '$_=$_**3!~/[^$_]/'
10
:(-l
drapeau nécessaire.&&
en*
pour enregistrer un octetMathematica, 34 octets
Implémentation directe (fonction non nommée d'un argument entier).
la source
Gelée , 8 octets
Essayez-le en ligne! ou vérifier tous les cas de test .
Comment ça fonctionne
la source
CJam, 8 octets
Suite de tests.
Explication
la source
JavaScript ES6,
5551 octetsMerci à Downgoat pour 3 octets! Vous pouvez enregistrer un octet en convertissant à ES7 et en utilisant à la
n**3
place den*n*n
.Assez simple.
la source
==
cela ne fonctionne pas, même sur les tableaux.n*n*n
surn**3
, mais je suppose que cela pourrait être ES7 et non ES6.2103869
et le problème nécessite explicitement des solutions pour fonctionner2642245
.C #,
241208205201193233222220212203177159 octets (109 en remplacement)Le lambda doit utiliser spécifiquement le
ulong
type:Merci à @Corak et @Dennis_E pour la sauvegarde de quelques octets et à @TimmyD pour avoir trouvé un problème avec ma solution d'origine. Merci à @SaxxonPike d’avoir signalé le problème ulong / long / decimal / etc (qui m’a également fait économiser des octets).
Il existe également une solution de 109 octets utilisant HashSets, similaire aux réponses Java ici, mais je vais m'en tenir à ma solution originale pour mon score.
la source
p<0
au lieu dep==1
?n=>{Func<string,int[]>x=s=>{var a=new int[10];foreach(var c in s)a[int.Parse(c+"")]++;return a;};var i=x(n);var j=x((long)Math.Pow(int.Parse(n),3)+"");for(var k=0;k<10;)if(i[k]>0^j[k++]>0)return 0>1;return 1>0;};
int.Parse(c+"")
parc-'0'
long
ulong
Java 8, 154 caractères
Appelé comme ça:
Les sorties:
Une réponse très Java 8-y, utilisant un lambda ainsi que des flux incluant des conversions de nombre à chaînes fantaisistes.
Malheureusement, nous devons utiliser à la
BigInteger.pow(3)
place deMath.pow(a,3)
Math.pow des doubles non précis, qui renvoient des valeurs incorrectes avec des nombres élevés (commençant par2103869
).la source
static Y y
chose est une syntaxe d’initialisation bizarre, est-ce qu’elle est automatiquement assignée ày.n
parce que l’interface a exactement un membre?@FunctionalInterface
annotation (interface avec une seule méthode, voir javadoc), ce qui permet à lambdas de fonctionner à la place de l'instanciation de type anonyme habituelle.Y y = new Y() { @Override public boolean n(int x) { return Arrays.equals((a+"").chars().distinct().sorted().toArray(),(new BigInteger(a+"").pow(3)+"").chars().distinct().sorted().toArray()); } }
et lestatic
modificateur est uniquement là pour permettre l'appely.n(int)
depuis la méthode main statique.FRAPPER,
69, 59 octetsMISE À JOUR
Une autre façon de faire cela en bash est d’utiliser tr (62 octets, mais peut probablement être un peu plus pressé)
EDIT: Quelques optimisations supplémentaires (Thx! @Manatwork)
Golfé
Tester
0 - en cas de succès (code de sortie) 1 - en cas d'échec (code de sortie)
la source
T <<< 11
. Disons que les jeux de chiffres sont identiques simplement parce que 11 ** 3 == 1331 contient les chiffres qui ne figurent pas dans le numéro d'origine deux fois.-w
explicitement lefold
. Siuniq
est utilisé sans options,sort -u
peut le remplacer. Et alimentez le second appel S avec here-string. Et je pense qu'il n'est pas nécessaire de citer la formule passéebc
.cmp
lieu dediff
et enregistrer 1 octet.Fonction de code machine x86-64, 40 octets.
Ou 37 octets si 0 ou non-zéro est autorisé comme "vérité", comme strcmp.
Grâce à la réponse C de Karl Napf pour l’idée bitmap, ce que x86 peut faire de manière très efficace avec BTS .
Signature de fonction:,
_Bool cube_digits_same(uint64_t n);
à l’aide de l’ABI System V x86-64. (n
en RDI, valeur de retour booléen (0 ou 1 en AL))._Bool
est défini par ISO C11 et est généralement utilisé#include <stdbool.h>
pour définirbool
avec la même sémantique que C ++bool
.Potentiel d'économies:
Tout cela est possible s'il s'agissait d'un fragment inline-asm au lieu d'une fonction, ce qui en ferait 35 octets pour inline-asm .
LOOP semble être le moyen le plus simple de répéter une fois. J'ai aussi regardé simplement répéter la boucle (sans les préfixes REX et un registre bitmap différent), mais c'est légèrement plus grand. J'ai également essayé d'utiliser PUSH RSI et d'utiliser
test spl, 0xf
/jz
to en boucle une fois (étant donné que l'ABI exige que RSP soit 16B aligné avant CALL, une poussée l'aligne et une autre l'aligne à nouveau). Il n'y a pas d'test r32, imm8
encodage, le plus petit moyen était donc d'utiliser une instruction 4B TEST (incluant un préfixe REX) pour tester uniquement l'octet de poids faible de RSP par rapport à un imm8. Même taille que LEA + LOOP, mais avec les instructions supplémentaires PUSH / POP requises.Testé pour tous les n de la plage de test, par rapport à la mise en œuvre C de steadybox (car elle utilise un algorithme différent). Dans les deux cas de résultats différents que j'ai examinés, mon code était correct et celui de steadybox, celui qui était incorrect. Je pense que mon code est correct pour tout n.
Les seules lignes imprimées ont c = 1 asm = 0: faux positifs pour l'algorithme C.
Également testé sur une
uint64_t
version de l'implémentation C de Karl du même algorithme, et les résultats correspondent pour toutes les entrées.la source
objdump -drwC -Mintel
sur le fichier objet et de la copie des commentaires). C'est un langage où l'optimisation de la taille du code est réellement utile dans la vie réelle. (Mais même dans de rares cas, comme des chargeurs de démarrage ou des démonstrations. Habituellement, il ne vaut la peine de sauvegarder la taille du code que si les performances déjà mises en cache ne sont pas gênantes, mais il est également utile d'éviter les goulots d'étranglement + les erreurs de cache.)Haskell, 47 octets
Très lent. Testez avec
c<-['0'..'9']
.Teste chaque caractère pour l'inclure dans la représentation sous forme de chaîne de
n
, et dresse une liste de ceux inclus. Fait de même pourn^3
et vérifie si les listes sont égales.la source
nub
(obtenir des éléments uniques) etsort
, mais les deux nécessitent une importation longueimport Data.List
. Malgré cela, il est très proche à 48 octets:import Data.List;q=sort.nub.show;f n=q n==q(n^3)
.nub
préserve l'ordre lors de sa première apparition, c'est-à-direnub [3,1,3,2,1,2] == [3,1,2]
. Il ne convertit pas en un type défini (il n'y en a pas), mais donne une liste.Dyalog APL , 10 octets
⍕≡
est la représentation textuelle de l'argument identique à⍕∪
l'union de la représentation textuelle de l'argument et(⍕*∘3)
la représentation textuelle de l'argument en cube?TryAPL en ligne!
Remarque: Pour les grands nombres, définissez
⎕PP←34 ⋄ ⎕FR←1287
(34 chiffres significatifs, float 128 bits)la source
Clojure, 35 octets
la source
Java 7,
185178 caractèresAppeler comme:
Sortie:
(Je ne suis jamais sûr de devoir compter également les importations et les définitions de méthodes ... je l'ai déjà vu de toute façon. Le code lui-même n'aurait toutefois qu'une longueur de 141 octets.)
la source
static
si.static
.Gelée , 8 octets
Essayez-le en ligne!
Explication:
la source
*3ṢQ⁼ṢQ$
fonctionne comme prévu, car les$
groupes rapides les deux atomes à sa gauche dans une chaîne monadique.Pyth, 10 octets
Parce que nous n’avons pas assez de variété avec les réponses Pyth, n’ajoutons pas une, mais deux autres! Les deux sont de 10 octets et ont été testés avec
106239
un exemple d'entrée (auquel d'autres réponses ont échoué).Explication:
Essayez la première réponse en utilisant une suite de tests en ligne.
Deuxième réponse:
Explication:
Essayez la deuxième réponse en utilisant une suite de tests en ligne.
la source
Kotlin: 46/88/96 octets
La question ne précise pas d'où provient l'entrée, alors voici les 3 sources d'entrée habituelles.
Fonction: 46 octets
main () utilisant le premier argument du programme: 88 octets
fun main(a:Array<String>){val i=a[0].toLong();println("$i".toSet()=="${i*i*i}".toSet())}
main () utilisant l'entrée standard: 96 octets
fun main(a:Array<String>){val i=readLine()!!.toLong();println("$i".toSet()=="${i*i*i}".toSet())}
la source
Haskell,
5452 octetsMerci @Laikoni pour la sauvegarde de deux octets.
la source
a%b=all(
elem ena)b
tant que fonction puis appeler avecb%a&&a%b
devrait économiser deux octets.JavaScript (ES6), 44 octets
Excellente réponse en C du port de @ KarlNapf. ES7 enregistre un octet via
n**3
. Ne fonctionne que jusqu'en 208063 en raison de la précision numérique limitée de JavaScript; si vous n’avez besoin que de travailler jusqu’à 1290, vous pouvez enregistrer un autre octet.la source
Perl 6 , 22 octets
Étendu:
L' opérateur Différence de jeux symétriques ⊖ ⊖ returns renvoie un jeu vide si les deux côtés sont des jeux équivalents (transforme automatiquement une liste en jeu). A ce stade, il ne reste plus qu'à l'inverser logiquement.
la source
$_
avec juste.
C ++, 82 octets
La fonction t (a) renvoie la réponse. Utilise un int comme un ensemble. Bien imprimé:
la source
#include<set>
etusing namespace std;
dans le code golfé et le nombre d'octets#include<set>
au lieu dealgorithm
R,
657970 octetsPrend
n
de stdin, divisen
etn^3
en chiffres simples, et compare les deux ensembles. Utilise legmp
paquet pour gérer de grands nombres entiers (merci à Billywob pour avoir signalé cette lacune). Utilise maintenantsubstring
pour coupern
etn^3
, grâce à @MickyT pour la suggestion. ( Les versions précédentesscan
etgsub
d'une manière aki.)la source
n
), sauf si vous utilisez une sorte de paquet BigInt. Voir?.Machine
pour plus de détails sur le plus grand nombre entier et le flotteur etc. Pour voir cette comparaison par exemple2600001^3
dans R à WolframAlphagmp
paquet puisse résoudre ce problème.gmp::as.bigz()
pour gérer des entiers de grande taille.s=substring;setequal(s(n<-gmp::as.bigz(scan()),p<-1:1e4,p),s(n^3,p,p))
substring
pouvais être utilisé de cette façon (je ne l'ai jamais utilisésubstr
). La réponse a été modifiée pour intégrer votre suggestion maintenant.C ++ 14, 93 octets
Port of my C answer , fonctionne pour les grands nombres (appel avec
L
suffixe).la source
Haskell, 47 octets
Exemple d'utilisation:
f 102343
->False
.Utilise les ensembles du
Data.Set
module. La fonction d'assistances
transforme un nombre en représentation sous forme de chaîne et crée ensuite un jeu de caractères.la source
s$n^3
?(s n==s) (n^3)
une erreur de type.Brachylog , 11 octets
Essayez-le en ligne!
Merci à @DestructibleWatermelon pour avoir signalé un problème avec ma réponse initiale.
Explication
la source
PowerShell v2 +,
9493 octets(Newline pour plus de clarté, non inclus dans bytecount)
La première ligne est définie
f
comme unfilter
(assez similaire à une fonction pour que notre propos ici ne rentre pas dans les détails) qui prend en entrée$n
et effectue ce qui suit:La deuxième ligne prend l'entrée
$args
, l'exécutef
et vérifie si elle-eq
doit êtref
exécutée au$x
cube. Notez la[bigint]
distribution explicite , sinon nous obtiendrons le résultat en notation scientifique, ce qui ne fonctionnera évidemment pas.Le résultat booléen est laissé sur le pipeline et la sortie est implicite.
Enregistré un octet grâce à @ConnorLSW
la source
"$n"[0..99]
au lieu de[char[]]"$n"
pour sauvegarder un octet, car le plus grand nombre que vous devez traiter est seulement d'environ 20 caractères.char[]
conversion normale , le reste de votre code est aussi performant que possible. S'il existait un moyen simple de comparer des tableaux, vous pourriez utilisez quelque chose comme("$n"[0..99]|group).Name
pour économiser des charges maiscompare
n'est pas vraiment rapide et facile à jouer au golf.Groovy, 35
51caractères / octetsJ'étais triste de ne pas voir Groovy inclus, alors voici ma tentative initiale de 51 octets:
def x(def n){"$n".toSet()=="${n.power(3)}".toSet()}
Réécrit sous forme de fermeture anonyme de 35 octets et avec
**
une exponentiation, grâce à manatwork:{"$it".toSet()=="${it**3}".toSet()}
Quelques cas de test pour la fonction d'origine:
Une fermeture du nom
c
pourrait être appelé comme ceci:println c.call(107624)
. La fermeture anonyme de 35 octets pourrait s'appeler comme ceci:println ({"$it".toSet()=="${it**3}".toSet()}(107624))
Les sorties:
S'il vous plaît noter: j'ai appris que quelque chose comme le code de golf existe tout à l'heure, alors j'espère que j'ai raison!
la source
def c={"$it".toSet()=="${it.power(3)}".toSet()}
**
opérateur pour l'exponentiation.x(107624)
dec.call(107624)
**
le réduit à 35 caractères / octets:{"$it".toSet()=="${it**3}".toSet()}
Ruby, 48 octets
la source