Occorrenze di cifre


12

Ingresso:

Un elenco di numeri interi (che non conterrà mai uno zero)

Produzione:

Un elenco della stessa dimensione con conteggi basati su quanto segue:

  • Se l'elemento corrente è negativo: osserva tutti gli elementi prima di questo elemento e conta quante volte si sono verificate le cifre in quegli altri numeri
  • Se invece l'elemento corrente è positivo: osserva tutti gli elementi dopo questo elemento e conta quante volte la cifra si è verificata in quegli altri numeri

C'è una svolta: se la dimensione dell'elenco è pari contiamo ogni numero una sola volta (anche se corrisponde a più cifre) e se la dimensione è dispari contiamo ogni cifra dei numeri per ogni cifra dell'elemento corrente (duplicata le cifre vengono contate più volte).

Facciamo alcuni esempi per chiarire un po 'questo:

Esempio con elenco pari:

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

La dimensione dell'elenco è pari , quindi contiamo ogni numero solo una volta.

  • 4: È positivo, quindi non vediamo l'ora. Ci sono tre numeri che contengono la cifra 4( 42, -942, 8374). Quindi iniziamo con a 3.
  • 10: È positivo, quindi non vediamo l'ora. Esistono due numeri contenenti la cifra 1e / o 0( -10, -200). Quindi la seconda uscita è 2.
  • 42: Ancora una volta positivo, quindi avanti. Ci sono quattro numeri che contengono sia la cifra 4e / o 2( -942, 8374, 728, -200). Quindi il terzo output è 4.
  • -10: Questa volta è negativo, quindi guardiamo indietro. C'è solo un numero che contiene la cifra 1e / o 0(ignoriamo il segno meno) ( 10). Quindi la quarta uscita è 1.
  • eccetera.

Esempio con elenco dispari:

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

La dimensione dell'elenco è dispari , quindi contiamo ogni cifra.

  • 382: È positivo, quindi non vediamo l'ora. Ce n'è uno 3negli altri numeri ( 381), sei 8negli altri numeri ( -82, -8, 381, 228, 28, -28) e sei 2negli altri numeri ( -82, 228, 28, -28, 2). Quindi iniziamo con a 13.
  • -82: È negativo, quindi all'indietro. Ce n'è uno 3nell'altro numero ( 382) e uno 8nell'altro numero ( 382). Quindi la seconda uscita è 2.
  • ...
  • 228: È positivo, quindi avanti. Ci sono tre 2'scritto nella altri numeri ( 28, -28, -2), e altri tre 2' s, e due 8's negli altri numeri ( 28, -28). Quindi questo output è 8.
  • eccetera.

Regole della sfida:

  • Puoi presumere che l'input non conterrà mai 0come elemento, poiché non è né positivo né negativo.
  • Puoi presumere che l'elenco di input contenga sempre almeno due elementi.
  • L'I / O è flessibile. L'input / output può essere array / elenco di numeri interi, stringa delimitata, cifra / matrice di caratteri, ecc.
  • Se il primo numero nell'elenco è un numero negativo o l'ultimo numero nell'elenco è un numero positivo, sarà 0 nell'elenco risultante.
  • Con gli elenchi dispari, i numeri che contengono la stessa cifra più volte vengono conteggiati più volte, come 228nell'esempio dispari sopra riportato che risulta in 8(3 + 3 + 2) anziché 5(3 + 2).

Regole generali:

  • Questo è , quindi vince la risposta più breve in byte.
    Non lasciare che le lingue di code-golf ti scoraggino dal pubblicare risposte con lingue non codegolfing. Prova a trovare una risposta il più breve possibile per "qualsiasi" linguaggio di programmazione.
  • Per la tua risposta valgono regole standard , quindi puoi usare STDIN / STDOUT, funzioni / metodo con i parametri corretti e tipo di ritorno, programmi completi. La tua chiamata.
  • Le scappatoie predefinite sono vietate.
  • Se possibile, aggiungi un link con un test per il tuo codice.
  • Inoltre, si prega di aggiungere una spiegazione, se necessario.

Casi 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 ]

Risposte:



5

Python 2 , 149 148 121 116 111 107 byte

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)]

Provalo online!


4

Java (JDK 10) , 204 byte

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;}

Provalo online!

Titoli di coda


[1,11,-1]dovrebbe tornare [3,2,3]. È un elenco strano, quindi contano tutte le cifre. Primo 1: guardare avanti, tre 1s: in totale 11,-1. Secondo 11: guardare avanti per ogni cifra: uno 1+ uno 1. Terzo -1: guardare indietro, tre 1s in totale: -1,11. (Con gli elenchi dispari dovresti guardare ogni cifra, anche la stessa. Chiarirò questo nella sfida, ma l'esempio dispari con il numero lo 228chiarisce un po '.)
Kevin Cruijssen

@KevinCruijssen Ora dovrebbe essere risolto.
Olivier Grégoire,

Lo fa davvero. Avevo già paura che la spiegazione iniziale potesse essere stata un po 'troppo chiara quando l'ho pubblicata .. Ora vedrò se posso golf qualcosa della tua risposta. ;)
Kevin Cruijssen l'

1
Non ho un sacco di tempo sia, ma una cosa si può golf è l'aggiunta di una nuova variabile ,te mutevole i+(a[i]>0?1:-1)a i+(t=a[i]>0?1:-1), e quindi è sufficiente utilizzare j+=tal posto di j+=a[i]>0?1:-1.
Kevin Cruijssen,

1
Puoi salvare 2 se dichiari ad esempio t = 10 e sostituisci tutti quei 10 per t, anche se sarà meno comprensibile
Java Gonzar

3

Perl 6 , 100 85 byte

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

Provalo online!

Utilizza l'operatore di moltiplicazione baggy ⊍.





Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.