Chaque terme de la séquence de mise au carré, x n , est créé en prenant x n-1 , en le mettant au carré et en supprimant tous sauf les quatre premiers chiffres.
La séquence commence toujours par x 1 = 1111 . La mise au carré donne 1234321, donc x 2 = 1234
Les premiers termes sont:
1111
1234
1522
2316
5363
...
Le défi
Votre tâche consiste à, étant donné un entier non négatif n , calculer x n . Vous pouvez soumettre un programme complet qui effectue des E / S, ou une fonction qui prend n comme paramètre.
Votre solution peut être zéro ou un indexée, tant que vous spécifiez laquelle.
Étant donné que tous les termes de cette séquence sont inférieurs à 5 chiffres, votre code doit également être aussi court que possible. Les échappatoires de code-golf standard s'appliquent.
Que le meilleur golfeur gagne!
Cas de test
Remarque: ils sont indexés 1.
1 -> 1111
8 -> 6840
15 -> 7584
20 -> 1425
80 -> 4717
Réponses:
05AB1E ,
87 octetsCode:
Explication:
Utilise l' encodage CP-1252 . Essayez-le en ligne!
la source
JavaScript (ES7),
444336 octetsC'est un excellent exemple d'abus de coercition de type:
**
convertit ses deux arguments en nombres et+
convertit ses deux arguments en chaînes à moins qu'ils ne soient tous les deux des nombres. Cela signifie quef(n)**2+f
convertit d'abordf(n)
un nombre et le met au carré, puis concatène le résultat avec la représentation sous forme de chaîne def
. Nous pouvons ensuite utiliser.slice
pour récupérer les 4 premiers caractères de la chaîne.Voici quelques approches alternatives qui n'utilisent pas de chaînes:
Extrait de test
Afficher l'extrait de code
Remarque: cela utilise
Math.pow
car**
n'est pas pris en charge dans tous les navigateurs.la source
Haskell, 40 octets
C'est une séquence basée sur 0. Exemple d'utilisation:
((iterate(read.take 4.show.(^2))1111)!!) 79
->4717
.Comment ça marche:
la source
Mathematica, 48 octets
Fonction sans nom prenant un argument entier; 0 indexé. Utilise quatre caractères de trois octets
⌊⌊⌋⌋
: Mathematica utilise soitFloor[x]
ou⌊x⌋
pour arrondir un nombre réel à un entier, et ce dernier est généralement un octet de moins. Les noms de commandes dans Mathematica pour convertir des entiers en chaînes sont trop longs, donc à la place nous faisons un calcul mathématique pour trouver les quatre premiers chiffres de x ^ 2: nous prenons le logarithme en base 10 de x ^ 2, soustrayons sa partie entière, augmentons 10 revenir à ce pouvoir, et multiplier par 1000 et arrondir.tl; dr: logarithmes ftw
la source
Python 2,
514644 octetsEncore faux! La fonction récursive revient. C'est un index.J'aimerais me débarrasser du maladroitIl s'avère que pour le moment c'estif
si possible, mais je pense qu'unexec
pourrait être plus court.exec
plus court.Une solution alternative de 46 octets avec
exec
:Une solution alternative récursive de 49 octets:
Merci à Flp.Tkc d'avoir sauvé un octet en me rappelant que la mise au carré n'a pas besoin d'exponentiation :)
la source
f=lambda n:1111if n<2else int(`f(n-1)**2`[:4])
V , 19 octets
Essayez-le en ligne!
Cela utilise une indexation basée sur 0.
Bien sûr, puisque les chiffres ne sont pas exactement le fort de V , ce n'est pas très golfique. Cependant, cela montre un bel avantage de V sur Vim. Vous pouvez exécuter une macro 0 fois, ce qui n'est pas possible dans vim car «0» est une commande et non un compte.
Il contient de nombreux caractères non imprimables, voici donc un hexdump:
Et voici une version lisible:
Explication:
la source
Gelée ,
129 octets-3 octets grâce à Dennis utilisant l'indexation basée sur 1 et l'
ṁ
atome de moule / remodelage. Suggestions de golf bienvenues! Essayez-le en ligne!Ungolfing
la source
1
place de⁽¡n
.Perl, 37 octets
36 octets de code +
-p
indicateur.Pour l'exécuter:
la source
Powershell,
7355 octetsUn grand merci à TimmyD pour avoir rasé 18 octets!
Code:
for($A=1111;$args[0]---1;$A=-join"$(+$A*$A)"[0..3]){}$A
$A=1111;1..($n=2)|%{[string]$B=[math]::pow($A,2);$A=$B.substring(0,4)};$A
$n
est n dans x n-1Explication et code éclaté:
Quelques notes:
1..($n=4)|%
définira $ n sur 4, puis démarrera une boucle qui exécute $ n fois.1
peut être changé en n'importe quel entier et il bouclera $ n- [votre entier] +1 fois.[math]::
dans Powershell est un double. Dans le code ci-dessus, nous devons explicitement transtyper$B
en une chaîne afin de pouvoir appeler.substring()
car il n'y a pas de.substring()
fonction pour les doubles dans Powershell.la source
Python 2,
4441 octets-3 octets grâce à xnor (utilisez une division entière pour éviter
and
)repl.it
Fonction récursive basée sur 1.
Lorsque
n>1
la division entière ,,1/n
résulte en0
, alors0*1111=0
qui est falsey, donc la droite de laor
est évaluée, ce qui prend les quatre premiers caractères de la représentation du carré dun-1
e résultat; ceci est ensuite jeté à unint
.Lorsque
n=1
la division entière ,,1/n
résulte en1
, alors1*1111=1111
, ce qui est vrai, et laint
1111
distribution en unint
est1111
.la source
int
extérieur. Si vous 1-index, vous pouvez faire le cas de base plus court avecg=lambda n:int(1/n*1111or`g(n-1)**2`[:4])
.
s!Groovy, 49 octets
la source
Pyke, 10 octets
Essayez-le ici!
la source
MATL ,
14, 13 octetsEssayez-le en ligne!
Explication:
la source
U
(carré, pour la saisie numérique) au lieu det*
R,
58565553 octetsPrend
N
de stdin. 3334 est pratiquement X_0, ce qui est nécessaire car la boucle for doit être exécutée au moins une fois (il serait plus long de sauter).R est vraiment un langage terrible pour prendre les quatre premiers chiffres d'un nombre, mais comme le nombre de cas est limité, nous n'avons qu'à nous soucier des carrés de
x<3163
etx>3162
, les premiers donnent un nombre à 6 chiffres, les seconds un nombre à 7 chiffres .Le reste est assez simple, se
%/%
divise et ignore le reste.x
est imprimé sur stdout.Enregistré 2 octets grâce à @ETHproductions
la source
3334
(ou peut-être3333
)?3333^2 = 11108889
donc1110
, et .... comme je vérifie cela, je vois3334
fonctionnerait: | . Je ne sais pas pourquoi je n'ai plus vérifié cela.Javagony - 153 octets
Javagony est une version restreinte de Java, qui ne permet aucun flux de contrôle à l'exception de la récursivité et
try-catch
, pas de boucles, tandis que les boucles, ou si. Le codage est un exercice assez amusant, mais frustrant. Pas que Java ordinaire ne soit pas aussi frustrant en soi.la source
PHP,
5552 octetsSauvegardé 3 octets grâce à @ user59178
Exécuté à partir de la ligne de commande, indexé zéro.
Merci de ne pas vous soucier du type de mes variables, PHP! Ici, nous quadrillons simplement le nombre et coupons tout au-delà des 4 premiers chiffres, alternant nonchalamment entre le nombre et la chaîne sans souci dans le monde.
la source
$argv[1]--
comme compteur de boucle.Brachylog , 18 octets
Essayez-le en ligne!
Cette réponse est indexée 0.
Explication
la source
C, 56 octets
Un index.
la source
Clojure, 76 octets
Premier golf de Clojure (semble être une langue agréable). Ceci est indexé 1.
Expliquera le code plus tard.
la source
C #,
6460 octetsSauvegardé 4 octets en suivant le commentaire d' Olivier Grégoire sur une réponse Java!
Version précédente ( 64 octets ):
Programme complet avec méthode non golfée et cas de test:
la source
n-->1
Rubis, 47 octets
Premier golf! Enregistre les octets avec
-n
option (mais compte toujours comme 1! :)).0 indexé. Pour l'exécuter:
la source
Pyth,
1312 octetsMerci à @Jakube pour -1 octet
Un programme qui prend l'entrée d'un entier indexé 1 et imprime le résultat.
Suite de tests
Cela utilise une approche similaire à la réponse de @ Adnan .
Comment ça marche
la source
*GG
au lieu de^G2<space>
CJam , 15 octets
Utilise l'indexation basée sur 0.
Essayez-le en ligne!
la source
Lot, 82 octets
Comme Perl, les entiers sont des chaînes, mais contrairement à Perl, je ne peux prendre que la sous-chaîne d'une variable, et prendre des sous-chaînes à l'intérieur d'une boucle est quelque peu gênant.
la source
Perl 6 , 36 octets
Explication:
Tester:
la source
Matlab,
79, 78 octetsCas de test:
Pas une solution incroyable. Je suis sûr qu'il doit y avoir une meilleure façon de tronquer à 4 chiffres mais je ne sais pas aujourd'hui.
Modifier: rasé un octet en définissant 0,5 -> 0,5
la source
Java 8,
779374716978 octetsChaque répétition fait
n
les 4 premiers caractères den*n
.Essayez Java en ligne !
Historique de la publication:
77 octets: code initial (incomplet)
+16 octets, par Olivier Grégoire: code complété en en faisant une fonction Lambda.
-19 octets: remplacer
while
parfor
cycle.-4 octets: utilisé
long
s au lieu deint
s-2 octets, par Roman Gräf: suppression des crochets inutiles
+9 octets,
return
instruction manquanteMerci à @ OlivierGrégoire et @ RomanGräf pour avoir signalé certains problèmes!
Attendez, Java bat ... (drumroll) Clojure et Matlab ici! Un grand applaudissement à Java s'il vous plaît!
la source
x
n'est pas déclaré. Cela devrait être une fonction ou un programme complet. Pas un extrait de code.x->{int n=1111;int m=1;while(x>m++){n=Integer.parseInt((n*n+"").substring(0,4));}return n;}
(pour un nombre total d'octets de 91). En effet, les extraits de code ne sont pas autorisés: uniquement des fonctions ou des programmes complets.x->{Long n=1111;for(;--x>0;)n=n.valueOf((n*n+"").substring(0,4));return n;}
avec plusieurs techniques utilisées (utiliséesLong
pour être utiliséesLong.valueOf
avec moins d'octets, ce n'est pas recommandé dans la programmation normale, mais totalement dans le golf; supprimém
car inutile si nous diminuonsx
à la place, enlevé les accolades inutiles)Perl, 36 octets
Une approche différente de l'autre solution Perl, conduisant à un code légèrement plus court. Aucun argument de ligne de commande n'est nécessaire (autre que l'argument de sélection de version habituel
-M5.010
, qui ne compte pas contre le nombre d'octets), ce qui signifie que c'est la même quantité de code mais avec moins de pénalités, ce qui donne un meilleur score global.Nous créons une boucle de type Underload en répétant et en
eval
tapant une chaîne; J'ai expérimenté le démarrage de la chaîne au milieu, mais le démarrage au début s'avère être le plus court. Nous multiplions$&
(le résultat de la dernière correspondance d'expressions régulières) par lui-même pour le mettre au carré; si le résultat est zéro, nous utilisons1x4
(c'est-à-dire1111
; Perl a un opérateur pour répéter les choses, y compris les chiffres d'un nombre) au lieu du résultat. Ensuite, nous regex les quatre premiers caractères. Le tout s'exécute dans le contexte de la liste car il est à l'intérieursay
, donc le résultat final deeval
sera le contenu des parenthèses de la correspondance finale.la source
Java,
79676664 octetsMerci à @Oliver Grégoire.
Merci à @ETHProduction.
Substring et trucs remplacés par l'idée de @Xanderhall
Bien qu'il existe des solutions plus courtes, je voulais publier un récursif :). Et je suis la fonction "réelle" la plus courte :). Edit: On dirait que je suis le plus court maintenant :)))
la source
for(i*=i;i>1e4;)i/=10;
? Cela économiserait un octet.long
s? Vous pouvez tuer deux octets en utilisantint
s.Pushy ,
2620 octetsDonner des arguments sur la ligne de commande:
$ pushy sqseq.pshy 79
.Joliment formaté, avec explication:
la source