Maintenant que nous savons comment bien carré et triangle un certain nombre, nous allons apprendre à parallélogramme un. Pour parallélogrammer un nombre, nous l'arrangons d'abord comme un parallélogramme en l'empilant au-dessus de lui-même un nombre de fois égal au nombre de chiffres qu'il a, et en ajoutant des espaces pour en faire un parallélogramme. Ainsi 123
se formerait:
123
123
123
Maintenant, nous prenons chaque nombre horizontal et vertical et les additionnons 123+123+123+1+12+123+23+3
, ce qui équivaut à 531
, qui est le parallélogramme de 123
.
Ta tâche:
Écrivez un programme ou une fonction qui, une fois donné un nombre en entrée, renvoie le parallélogramme du nombre.
Contribution:
Un entier non négatif ou un entier non négatif représenté par une chaîne.
Production:
Le parallélogramme de l'entier.
Cas de test:
1234567 -> 10288049
123 -> 531
101 -> 417
12 -> 39
Notation:
C'est le code-golf , le score le plus bas en octets gagne!
Réponses:
MATL , 12 octets
L'entrée est une chaîne. Essayez-le en ligne!
Explication
Considérez l'entrée
'123'
comme exemple.Le code duplique l'entrée (
t
) et construit une matrice d'identité (Xy
) de taille deux fois la longueur d'entrée (nE
):puis le retourne à l'envers (
P
):La chaîne d'entrée, interprétée comme des codes ASCII des chiffres, équivaut au vecteur de ligne numérique
La convolution bidimensionnelle pleine grandeur (
Y+
) du vecteur et de la matrice ci-dessus donneL'interprétation de ces nombres en tant que codes ASCII (
c
) donne la matrice de caractères suivante, avec le caractère 0 représenté comme un espace:Transposition (
!
) transforme cela enInterpréter chaque ligne comme un nombre (
U
) donne le vecteur de colonne numériqueet la somme qu'il (
s
) donne le résultat final,531
.la source
Rétine , 22 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication: La première étape divise le numéro d'entrée à chaque chiffre et inclut tous les préfixes exclusifs et suffixes inclusifs, donnant les numéros verticaux, ainsi que le numéro d'entrée d'origine répété pour chaque chiffre, donnant les chiffres horizontaux. Les étapes restantes additionnent alors simplement les nombres résultants.
la source
05AB1E ,
12 118 octetsJe
m » quesavaitpeutpourrait être plus golfed - conseils sont les bienvenus!-1 octet grâce à Erik l'Outgolfer (éviter les wraps mais en utilisant une concaténation)
puis ...
-3 octets supplémentaires grâce à Adnan (éviter la multiplication par la longueur-1 en vectorisant l'addition et en soustrayant l'entrée à la fin)
Essayez-le en ligne!
Comment?
la source
«
pour concaténer les suffixes et les préfixes:g<*¹.s¹η«O+
.s¹η++Oα
devrait fonctionner pour 8 octetsHaskell ,
9078767164635957 octetsEssayez-le en ligne!
la source
g x=sum[x+div x a+mod x a|(a,_)<-zip((10^)<$>[1..])$show x]
.g x=sum[x+div x(10^a)+mod x(10^a)|(a,_)<-zip[1..]$show x]
est un poil plus court encore.g x=sum[x+x`div`10^a+x`mod`10^a|(a,_)<-zip[1..]$show x]
.Husk ,
1312 octetsEssayez-le en ligne!
Explication
la source
Neim , 7 octets
Il faut se méfier. Contient des serpents:
S𝐬𝕤
Essayez-le en ligne!
la source
S𝐬𝕤
" Lol ..𝐗𝔻
Python 3 ,
8570 octetsPour l'entrée 12345:
Récapitule les tranches d'entrée 1 + 2345 + 12345, 12 + 345 + 12345, 123 + 45 + 12345, 1234 + 5 + 12345, en utilisant l'indexation des chaînes pour indexer (r) = 1,2,3,4 avant de convertir en entier et ajoute à 12345 * 2
Remerciement spécial à:
-14 octets @Jonathan Allen
-1 Byte @ovs
Essayez-le en ligne!
la source
(len(n)+1)
peut être joué à-~len(n)
(~x
est-1-x
), puis cela peut enregistrer un autre octet en utilisant-i(n)*~len(n)
. Ensuite, vous pouvez en faire une fonction anonyme:lambda n,i=int:sum(i(n[:r])+i(n[r:])for r in range(1,len(n)))-i(n)*~len(n)
(74 octets)f=lambda n,r=1,i=int:n[r:]and i(n[r:])+i(n[:r])+f(n,r+1)or-i(n)*~len(n)
Japt ,
1511 octets-4 octets grâce à @Shaggy.
Prend l'entrée sous forme de chaînes.
Essayez-le en ligne!
Explication
Divisez le tableau d'entrée en chiffres (
¬
) et mappez par (£
) la fonction suivante, où Y est l'index.["1", "2", "3"]
La valeur d'entrée (implicite) avec des
Y
espaces (ç
) insérés (i
) au début. Il est affecté àU
.["123", " 123", " 123"]
Concaténer cela avec lui-même tourné de 90 ° à droite (
1
temps). Puis sum (x
).["123", " 123", " 123", " 1", " 12", "123", "23 ", "1 "]
->531
.la source
Japt ,
3118 octets-13 octets grâce à @ETHproductions
Cette approche ne fonctionne pas bien avec Japt. La solution de Justin est bien meilleure.
Explication:
Essayez-le en ligne!
la source
Ul
U
s dans les fonctions, et l'élément du milieu dans le tableau peut être condenséUå+ x
, ce qui, je pense, vous ramène à 23 octets.mx x
pourxx
? :-)Ruby ,
6155 + 1 = 56 octetsUtilise le
-n
drapeau. Entrée de STDIN.Essayez-le en ligne!
la source
102033
votre programme imprime728714
alors que la valeur correcte est729702
.02033
était le problème)JavaScript,
7774 octetsÉconomie de 3 octets grâce à Value Ink
la source
Pyth ,
2019 octetsMon approche de préfixe actuelle (j'espère jouer au golf plus loin).
Testez Suite ou essayez une autre approche avec le même nombre d'octets .
Explication
Pour mieux comprendre le concept, prenons un exemple, disons
"123"
.Nous obtenons d'abord les préfixes de l'entrée. Ce sont
['1', '12', '123']
.Ensuite, nous obtenons les préfixes de l'entrée inversée, c'est-à-dire:
['3', '32', '321']
et inversons chacun, d'où nous obtenons['3', '23', '123']
.Nous concaténons les deux listes et convertissons chaque élément en un entier, donc nous obtenons
[3, 23, 123, 1, 12, 123]
.En sommant la liste, le résultat est
285
.Le produit
P
est la longueur de l'entrée - 1 (ie2
) multipliée par la représentation entière de celle-ci (2 * 123 = 246
).Au final, on additionne les deux résultats
285 + 246
:, donc on obtient531
, qui est le bon résultat.Pyth , 20 octets
Suite de tests.
Explication
Explication à venir après un nouveau golf.Je n'ai pas réussi à jouer au golf plus loin pour l'instant (j'ai des idées cependant).la source
q / kdb +, 34 octets
Solution:
Exemples:
Explication:
la source
Gelée , 18 octets
Essayez-le en ligne!
la source
Swift 3 , 213 octets
Ne peut être testé en ligne, car il est lent et arrive à expiration. Vous pouvez l'essayer dans Swift Playgrounds si vous souhaitez le tester.
Exemple d'exécution
Contribution:
Production:
la source
Gelée , 12 octets
Essayez-le en ligne!
Prend l'entrée sous forme de chaîne. Crée le "parallélogramme" comme une matrice de caractères, puis évalue chaque ligne et colonne pour obtenir la somme des nombres.
Explication
la source
C (gcc) ,
958481 octets (78 +-lm
drapeau du compilateur)Salut! Ceci est ma première soumission, j'espère que je n'ai enfreint aucune règle.
Essayez-le en ligne!
Non golfé, sans avertissements:
la source
-lm
pour les fonctions mathématiques n'est nécessaire que pour certains runtimes C comme par exempleglibc
. Compiler par exemple avec MinGW (en utilisant Microsoftmsvcrt.dll
), cela ne serait pas nécessaire. Vous n'êtes donc pas sûr qu'il soit nécessaire d'ajouter ici? Quoi qu'il en soit, si vous l'ajoutez, cela ferait 3 octets;)-lm
est nécessaire pour lapow()
fonction avec gcc. J'ai essayé de travailler sans mais je n'ai pas trouvé de solution en utilisant moins de 6 octets (pow + l'indicateur du compilateur). Je n'ai pas pu trouver de règles sur la façon d'inclure des drapeaux dans le bytecount, et je sais que j'ai fait une fausse hypothèse sur le fait que le-
personnage ne soit pas compté. J'ajoute un +1 octet en ce moment.-lm
n'est pas requis pargcc
mais par le fait qu'ilglibc
n'inclut pas les fonctions mathématiques dans la bibliothèque principale.msvcrt.dll
fait, donc la compilation sur des fenêtres avec desgcc
travaux sans-lm
. C'est tatillon et je ne suis pas tout à fait sûr de ce que les règles à ce sujet ont à dire.Java 8,
147137126 126116114 octets-13 octets (137 → 126 et 116 → 114) grâce à @ OlivierGrégoire .
Explication:
Essayez-le ici.
la source
n->{Integer l=(n+"").length(),s=n*l,i=0;for(;++i<l*2;)s+=l.valueOf((n+"").substring(l<i?i-l:0,i<l?i:l));return s;}
. C'est une fenêtre coulissante avec min-max pour réduire le nombre d'appels aux chersnew Integer(....substring(...))
Math.max(0,i-l)
vers0>i-l?0:i-l
etMath.min(i,l)
versi>l?l:i
. Le modifier maintenant. Ah, je vois que vous avez modifié votre commentaire après avoir copié la réponse de 126 octets. ;)R ,
168162103 octets-6 octets en n'utilisant pas c ()
-59 octets grâce à @Giuseppe
Essayez-le en ligne!
Prend l'entrée sous forme de chaîne.
Je suis absolument certain qu'il y a des améliorations à apporter, principalement en tirant parti des forces de R ... mais dans un défi qui est essentiellement une manipulation de cordes, j'ai du mal à voir comment.
Edit: Beaucoup mieux maintenant que je ne répète pas une mauvaise idée!
la source
substr
explicitement au lieu de boucler, ce qui économiserait quelques octets.Perl 5 , 53 + 1 (-n) = 54 octets
Essayez-le en ligne!
la source
Mathematica, 77 octets
la source