Digit Kemunculan


12

Memasukkan:

Daftar bilangan bulat (yang tidak akan pernah mengandung nol)

Keluaran:

Daftar ukuran yang sama dengan jumlah berdasarkan pada:

  • Jika item saat ini negatif: Lihat semua item sebelum item ini, dan hitung berapa kali digit terjadi pada angka-angka lainnya
  • Jika item saat ini adalah positif sebagai gantinya: Lihat semua item setelah item ini, dan hitung berapa kali digit terjadi pada angka-angka lainnya

Ada satu twist: Jika ukuran daftar adalah bahkan kita hanya menghitung setiap angka sekali (bahkan jika itu cocok dengan beberapa digit), dan jika ukurannya ganjil kita menghitung setiap digit angka untuk setiap digit item saat ini (digandakan digit dihitung beberapa kali).

Mari kita berikan beberapa contoh untuk memperjelas hal ini:

Contoh dengan daftar genap:

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

Ukuran daftar genap , jadi kami hanya menghitung setiap angka sekali.

  • 4: Ini positif, jadi kami menantikan. Ada tiga nomor yang berisi angka 4( 42, -942, 8374). Jadi kita mulai dengan a 3.
  • 10: Ini positif, jadi kami menantikan. Ada dua angka yang mengandung digit 1dan / atau 0( -10, -200). Jadi output kedua adalah 2.
  • 42: Sekali lagi positif, sangat maju. Ada empat nomor yang berisi baik digit 4dan / atau 2( -942, 8374, 728, -200). Jadi output ketiga adalah 4.
  • -10: Kali ini negatif, jadi kami melihat ke belakang. Hanya ada satu nomor yang berisi digit 1dan / atau 0(kami mengabaikan tanda minus) ( 10). Jadi output keempat adalah 1.
  • dll.

Contoh dengan daftar ganjil:

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

Ukuran daftar aneh , jadi kami menghitung setiap digit.

  • 382: Ini positif, jadi kami menantikan. Ada satu 3di nomor lain ( 381), enam 8di nomor lainnya ( -82, -8, 381, 228, 28, -28), dan enam 2di nomor lainnya ( -82, 228, 28, -28, 2). Jadi kita mulai dengan a 13.
  • -82: Ini negatif, jadi mundur. Ada satu 3di nomor lainnya ( 382), dan satu 8di nomor lainnya ( 382). Jadi output kedua adalah 2.
  • ...
  • 228: Ini positif, sangat maju. Ada tiga 2's di nomor lain ( 28, -28, -2), dan tiga 2' s, dan dua 8's di nomor lain ( 28, -28). Jadi output ini 8.
  • dll.

Aturan tantangan:

  • Anda dapat berasumsi bahwa input tidak akan pernah berisi 0sebagai item, karena itu tidak positif atau negatif.
  • Anda dapat menganggap daftar input akan selalu mengandung setidaknya dua item.
  • I / O fleksibel. Input / output dapat berupa array / daftar bilangan bulat, string terbatas, digit / karakter-matriks, dll.
  • Jika angka pertama dalam daftar adalah angka negatif, atau angka terakhir dalam daftar adalah angka positif, itu akan menjadi 0 dalam daftar yang dihasilkan.
  • Dengan daftar ganjil, angka yang mengandung digit yang sama beberapa kali dihitung beberapa kali, seperti 228pada contoh aneh di atas yang menghasilkan 8(3 + 3 + 2) alih-alih 5(3 + 2).

Aturan umum:

  • Ini adalah , jadi jawaban tersingkat dalam byte menang.
    Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa pun'.
  • Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program penuh. Panggilanmu.
  • Celah default tidak diperbolehkan.
  • Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
  • Juga, silakan tambahkan penjelasan jika perlu.

Kasus uji:

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 ]

Jawaban:



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

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

Cobalah online!

Kredit


[1,11,-1]harus kembali [3,2,3]. Ini daftar aneh, jadi semua angka dihitung. Pertama 1: Berharap, tiga 1s total: 11,-1. Kedua 11: Nantikan setiap digit: satu 1+ satu 1. Ketiga -1: Lihat mundur, tiga 1s total: -1,11. (Dengan daftar aneh, Anda harus melihat setiap digit, bahkan sama. Saya akan menjelaskan ini dalam tantangan, tetapi contoh aneh dengan angka 228sedikit memperjelas ini.)
Kevin Cruijssen

@KevinCruijssen Harus diperbaiki sekarang.
Olivier Grégoire

Memang benar. Saya sudah takut penjelasan awal mungkin agak terlalu tidak jelas ketika saya mempostingnya .. Sekarang saya akan melihat apakah saya bisa mendapatkan jawaban Anda. ;)
Kevin Cruijssen

1
Saya tidak punya banyak waktu baik, tapi satu hal yang dapat golf adalah menambahkan variabel baru ,tdan mengubah i+(a[i]>0?1:-1)untuk i+(t=a[i]>0?1:-1), dan kemudian hanya menggunakan j+=tbukan j+=a[i]>0?1:-1.
Kevin Cruijssen

1
Anda dapat menyimpan 2 jika Anda mendeklarasikan misalnya t = 10 dan ganti semua 10 untuk t, meskipun itu akan kurang dimengerti
Java Gonzar

3

Perl 6 , 100 85 byte

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

Cobalah online!

Menggunakan operator penggandaan baggy ⊍.



1

JavaScript (Node.js) , 164.158.140 139 byte

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)

Cobalah online!


Ini terlihat seperti JS6, bukan apa-apa Node-y.
Bukan Charles

ini adalah string yang dihasilkan. ini memiliki Node Babel atau SpiderMonkey JS. masih berfungsi pada simpul jadi tidak masalah
DanielIndie


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.