Occurrences de chiffres

12

Contribution:

Une liste d'entiers (qui ne contiendra jamais de zéro)

Production:

Une liste de la même taille avec des nombres basés sur les éléments suivants:

  • Si l'élément actuel est négatif: regardez tous les éléments avant cet élément et comptez combien de fois les chiffres se sont produits dans ces autres nombres
  • Si l'élément actuel est positif à la place: regardez tous les éléments après cet élément et comptez combien de fois le chiffre s'est produit dans ces autres nombres

Il y a une torsion: si la taille de la liste est pair, nous ne comptons chaque numéro qu'une seule fois (même si elle correspond à plusieurs chiffres), et si la taille est impaire, nous comptons chaque chiffre des nombres pour chaque chiffre de l'élément actuel (dupliqué les chiffres sont comptés plusieurs fois).

Donnons quelques exemples pour clarifier un peu ceci:

Exemple avec liste paire:

Input:  [4, 10, 42, -10, -942, 8374, 728, -200]
Output: [3, 2,  4,  1,   2,    1,    1,   5   ]

La taille de la liste est même , nous ne comptons donc chaque numéro qu'une seule fois.

  • 4: C'est positif, donc nous avons hâte. Il y a trois numéros contenant le chiffre 4( 42, -942, 8374). Nous commençons donc par un 3.
  • 10: C'est positif, donc nous avons hâte. Il y a deux nombres contenant le chiffre 1et / ou 0( -10, -200). Donc, la deuxième sortie est 2.
  • 42: Encore une fois positif, donc en avant. Il y a quatre numéros contenant soit le chiffre 4et / ou 2( -942, 8374, 728, -200). Donc, la troisième sortie est 4.
  • -10: Cette fois, c'est négatif, donc on regarde en arrière. Il n'y a qu'un seul chiffre contenant le chiffre 1et / ou 0(nous ignorons le signe moins) ( 10). Donc, la quatrième sortie est 1.
  • etc.

Exemple avec liste impaire:

Input:  [382, -82, -8, 381, 228, 28, 100, -28, -2]
Output: [13,  2,   2,  4,   8,   3,  0,   11,  6 ]

La taille de la liste est impaire , donc nous comptons chaque chiffre.

  • 382: C'est positif, donc nous avons hâte. Il y en a un 3dans les autres numéros ( 381), six 8dans les autres numéros ( -82, -8, 381, 228, 28, -28) et six 2dans les autres numéros ( -82, 228, 28, -28, 2). Nous commençons donc par un 13.
  • -82: C'est négatif, donc en arrière. Il y en a un 3dans l'autre numéro ( 382) et un 8dans l'autre numéro ( 382). Donc, la deuxième sortie est 2.
  • ...
  • 228: C'est positif, donc en avant. Il y a trois 2« s dans les autres numéros ( 28, -28, -2), et trois 2» s, et deux 8« s dans les autres numéros ( 28, -28). Donc, cette sortie est 8.
  • etc.

Règles du défi:

  • Vous pouvez supposer que l'entrée ne contiendra jamais 0comme élément, car elle n'est ni positive ni négative.
  • Vous pouvez supposer que la liste d'entrées contiendra toujours au moins deux éléments.
  • Les E / S sont flexibles. L'entrée / sortie peut être un tableau / une liste d'entiers, une chaîne délimitée, une matrice de chiffres / caractères, etc.
  • Si le premier nombre de la liste est un nombre négatif ou le dernier nombre de la liste est un nombre positif, il sera 0 dans la liste résultante.
  • Avec les listes impaires, les nombres contenant le même chiffre plusieurs fois sont comptés plusieurs fois, comme 228dans l'exemple impair ci-dessus, ce qui donne 8(3 + 3 + 2) au lieu de 5(3 + 2).

Règles générales:

  • C'est le , donc la réponse la plus courte en octets l'emporte.
    Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues non-golfeur de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation.
  • Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
  • Les failles par défaut sont interdites.
  • Si possible, veuillez ajouter un lien avec un test pour votre code.
  • Veuillez également ajouter une explication si nécessaire.

Cas de test:

Input:  [4, 10, 42, -10, -942, 8374, 728, -200]
Output: [3, 2,  4,  1,   2,    1,    1,   5   ]

Input:  [382, -82, -8, 381, 228, 28, 100, -28, -2]
Output: [13,  2,   2,  4,   8,   3,  0,   11,  6 ]

Input:  [10, -11, 12, -13, 14, -15, 16, -17, 18, -19]
Output: [9,  1,   7,  3,   5,  5,   3,  7,   1,  9  ]

Input:  [10, -11, 12, -13, 14, -15, 16, -17, 18, -19, 20]
Output: [11, 2,   8,  4,   5,  6,   3,  8,   1,  10,  0 ]

Input:  [88, 492, -938, 2747, 828, 84710, -29, -90, -37791]
Output: [8,  9,   3,    9,    3,   4,     5,   4,   12    ]

Input:  [-1, 11, 11, 1]
Output: [0,  2,  1,  0]

Input:  [1, 11, 11, -1]
Output: [3, 2,  1,  3 ]

Input:  [-1, 11, 1]
Output: [0,  2,  0]

Input:  [1, 11, -1]
Output: [3, 2,  3 ]
Kevin Cruijssen
la source

Réponses:

3

05AB1E , 30 octets

vy0›iNƒ¦}ëN£}€Sþyδ¢IgÈiĀ€Ù}OOˆ

Essayez-le en ligne!

Emigna
la source
δ¢, jamais vu double-vecteur bien utilisé, joli.
Magic Octopus Urn
5

Python 2 , 149 148 121 116 111 107 octets

lambda l:[sum([any,sum][len(l)%2](map(`n`.count,`abs(v)`))for n in l[:i:2*(v<0)-1])for i,v in enumerate(l)]

Essayez-le en ligne!

TFeld
la source
4

Java (JDK 10) , 204 octets

a->{int l=a.length,r[]=new int[l],i=0,j,x,y,b,s,t=10;for(;i<l;i++)for(j=i+(s=a[i]>0?1:-1);0<=j&j<l;j+=s)for(b=0,x=a[i];x!=0;x/=t)for(y=a[j];b<1&y!=0;y/=t)if(x%t==-y%t|x%t==y%t){r[i]++;b+=1-l%2;}return r;}

Essayez-le en ligne!

Crédits

Olivier Grégoire
la source
[1,11,-1]devrait revenir [3,2,3]. C'est une liste étrange, donc tous les chiffres comptent. Tout d' abord 1: Réjouissez -vous , trois 1s au total: 11,-1. Deuxièmement 11: attendez avec impatience chaque chiffre: un 1+ un 1. Troisième -1: Regardez en arrière, trois 1s au total: -1,11. (Avec des listes impaires, vous devriez regarder chaque chiffre, même le même. Je clarifierai cela dans le défi, mais l'exemple étrange avec un numéro 228clarifie un peu cela.)
Kevin Cruijssen
@KevinCruijssen devrait être corrigé maintenant.
Olivier Grégoire
C'est effectivement le cas. J'avais déjà peur que l'explication initiale ait pu être un peu trop floue lorsque je l'ai publiée. Maintenant, je vais voir si je peux jouer quelque chose à votre réponse. ;)
Kevin Cruijssen
1
Je n'ai pas beaucoup de temps non plus , mais une chose que vous pouvez jouer au golf est l' ajout d' une nouvelle variable ,tet changeant i+(a[i]>0?1:-1)à i+(t=a[i]>0?1:-1), puis utilisez simplement au j+=tlieu de j+=a[i]>0?1:-1.
Kevin Cruijssen
1
Vous pouvez enregistrer 2 si vous déclarez par exemple t = 10 et remplacez tous ces 10 pour t, bien que ce soit moins compréhensible
Java Gonzar
3

Perl 6 , 100 85 octets

{.kv.map:{sum map (?*,+*)[$_%2],.[grep (*-$^i)*$^v>0,^$_].map:{.comb$v.abs.comb}}}

Essayez-le en ligne!

Utilise l'opérateur de multiplication baggy ⊍.

nwellnhof
la source
1

JavaScript (Node.js) , 164,158,140 139 octets

a=>a.map((x,i)=>a.slice(x<0?0:i+1,x<0?i:l).map(b=>c+=[...b+""].map(X=>s+=X>=0&&(x+"").split(X).length-1,s=0)&&l%2?s:+!!s,c=0)|c,l=a.length)

Essayez-le en ligne!

DanielIndie
la source
Cela ressemble à JS6, pas quelque chose de Node-y.
Pas que Charles
c'est une chaîne générée par tio. il a soit Node Babel ou SpiderMonkey JS. il fonctionne toujours sur le noeud, donc ça va
DanielIndie
1

Rubis , 126 octets

->l{k=l.map{|i|i.abs.digits};c=-1;k.map{|n|x=k[l[c+=1]<0?0...c:c+1..-1];x.sum{|j|x=n.sum{|d|j.count d};l.size%2<1?x<1?0:1:x}}}

Essayez-le en ligne!

Asone Tuhid
la source
1

Gelée , 43 42 octets

>0ị"ḊÐƤżṖƤƊAṾ€€FċЀ¥e€€³LḂ©¤?"AṾ$€SṀ€S$®?€

Essayez-le en ligne!

dylnan
la source