Tentukan apakah Array berisi sesuatu selain 2


20

Ambil sebuah array yang terdiri dari angka atau array, output jika hanya berisi 2s.

Output harus berupa nilai truey atau falsey (Maaf jika ini menghancurkan jawaban)

Kasus Uji Kebenaran

[2]
[2,2]
[[2],[2,2],2]
[]
[[],[]]

Kasus Uji Falsey

[1]
[22]
[2,2,2,1]
[[1,2],2]

Celah Standar Dilarang.

Aturan IO standar berlaku.

Kode-golf, byte Paling Sedikit menang!


Bisakah kita mengambil string yang mewakili array?
Wheat Wizard

Apakah akan ada objek selain angka dan array lain dalam array
Wheat Wizard

Hanya akan ada array dan angka, dan string yang mewakili array baik-baik saja.
ATaco

2
Angka seperti apa? Compex int, compex float, float int, int, bukan negatif?
RosLuP

1
FTR dan atas nama pemikiran matematika yang tepat: array [[2]]tidak tidak mengandung dua.
Berhenti menghidupkan counterclock

Jawaban:


8

MATL , 3 byte

2=p

Cobalah online!

Secara teknis, ini bisa saja

2=

Karena array yang mengandung elemen nol adalah palsu, tetapi ini tampaknya murah.


Daftar yang berisi 0 salah? Oh man.
Erik the Outgolfer

Saya tidak berpikir versi 2-byte valid, karena dalam komentar ATaco mengatakan bahwa pasangan output unik valid.
Erik the Outgolfer

Saya percaya 2=gagal untuk matriks kosong, atau?
Stewie Griffin

@stewiegriffin Kelihatannya seperti kasus tepi aneh yang perlu ditangani, tapi ternyata bisa digunakan: Coba online!
DJMcMayhem

Ya, 2=pberfungsi dengan baik. Versi yang lebih pendek pada akhirnya,, 2=tidak. Juga, "kasus tepi aneh" adalah dua dari kasus uji. :-)
Stewie Griffin

15

Python 2 , 43 40 byte

f=lambda l:l>=[]and all(map(f,l))or l==2

Cobalah online!


Pada saat memposting jawaban ini, masih diperbolehkan per konsensus meta ini untuk menghasilkan output melalui melempar kesalahan / tidak melempar kesalahan. Karenanya jawaban ini pada 26 byte adalah valid:

f=lambda l:l==2or map(f,l)

Cobalah online!


1
Itu cara yang rapi untuk memeriksa apakah suatu elemen adalah daftar.
Adnan

Inilah sebabnya saya tidak suka konsensus itu. Ini benar-benar merusak golf python.
Wheat Wizard

Namun karena Anda menggunakan kode keluar, Anda tidak memerlukannya all, apa pun selain kesalahan adalah benar.
Wheat Wizard

11

Prolog (SWI) , 43 33 byte

Saya mencium ... rekursi .

Terima kasih kepada Emigna dan Leaky Nun karena telah menghemat 10 byte!

Kode

a([]).
a([X|T]):-(X=2;a(X)),a(T).

Cobalah online! atau Verifikasi semua kasus uji!

Penjelasan:

Untuk pengguna non-Prolog, daftar diformat dengan cara sebagai berikut: [Head | Tail].

Ini Headadalah elemen pertama dari daftar, dan ekor adalah daftar yang tersisa. Uji di sini! . Kasus penting di sini adalah bahwa ekor daftar dengan 1 elemen sama dengan []. Anda dapat mengujinya di sini .

% State that an empty array is truthy.
a([]).

% If the list is not empty (covered by the previous line), we need to check
% whether the Head is equal to 2 or whether the head is truthy.
% After that, we only need to check if the remaining list is truthy.
a([Head | Tail]) :- (Head = 2; a(Head)), a(Tail).


9

Oktaf, 13 byte

@(x)~any(x-2)

Verifikasi semua kasus uji.

Ini adalah fungsi anonim mengambil satu argumen input x,. Ini mengurangi 2dari semua elemen, memeriksa apakah ada elemen non-nol. Ini meniadakan output untuk mendapatkan trueuntuk kasus-kasus di mana semua nilai adalah nol.

Ini berfungsi karena x-2berfungsi untuk matriks dari semua ukuran, termasuk matriks kosong [],.

x-2 akan cukup jika tidak ada matriks kosong di input.





6

JavaScript (ES6), 22 19 23 22 byte

a=>!/[^2,]|22/.test(a)

Menguji

f=
a=>!/[^2,]|22/.test(a)
console.log(" "+f([2])+": "+JSON.stringify([2]))
console.log(" "+f([2,2])+": "+JSON.stringify([2,2]))
console.log(" "+f([[2],[2,2],2])+": "+JSON.stringify([[2],[2,2],2]))
console.log(" "+f([])+": "+JSON.stringify([]))
console.log(" "+f([[],[]])+": "+JSON.stringify([[],[]]))
console.log(f([1])+": "+JSON.stringify([1]))
console.log(f([22])+": "+JSON.stringify([22]))
console.log(f([2,2,2,1])+": "+JSON.stringify([2,2,2,1]))
console.log(f([[1,2],2])+": "+JSON.stringify([[1,2],2]))


Yang bagus! Aku ingin tahu apakah itu bisa dipersingkat lagi, tapi aku ragu.
Arnauld

Terima kasih, @Arnauld; masih belum menemukan cara untuk memperbaikinya.
Shaggy



4

Mathematica, 24 byte

Cases[t=Flatten@#,2]==t&

Fungsi murni kembali Trueatau False. Setelah Flattenmemasukkan array bersarang dan memanggilnya t,Cases[t,2] mengembalikan daftar elemen yang cocok dengan "pola" 2, dan ==tmemeriksa apakah itu seluruh daftar.

Mathematica, 29 byte

(#//.{2->{},{{}..}->{}})=={}&

Tidak sesingkat, tetapi lebih menyenangkan. Mulai dari input #, dua aturan penggantian diterapkan hingga hasilnya berhenti berubah ( //.): pertama, semua 2diganti oleh {}s; dan kemudian daftar mana pun yang entri semua set kosong ( {{}..}) diganti (berulang kali) dengan set kosong. Jika sisanya adalah set kosong ( =={}), kami menang.


Berkalahkan , tetapi saya masih benar-benar ingin tahu apa yang sedang dilakukan di sini.
Pavel

4

Haskell , 36 byte

Fungsi anonim, mengambil a String dan mengembalikan a Bool.

Digunakan sebagai (all((==2).fst).(reads=<<).scanr(:)[]) "[2,2,2,1]"

all((==2).fst).(reads=<<).scanr(:)[]

Cobalah online!

Bagaimana itu bekerja

  • Haskell tidak memiliki built-in daftar tipe campuran, jadi kami mengambil string sebagai argumen.
  • scanr(:)[] menghasilkan daftar semua sufiks string.
  • (reads=<<) mencoba mengurai angka di awal setiap sufiks, menggabungkan keberhasilan menjadi daftar tupel (n,restOfString) .
  • all((==2).fst)memeriksa apakah semua angka yang diuraikan adalah 2.

Bagaimana dengan adil not.all(`elem`"2,[]")?
zbw

@ zbw Itu gagal karena angka seperti 22.
Ørjan Johansen

4

Python 2 , 38 byte

lambda l:l.strip('[],2')==l*('22'in l)

Cobalah online!

Dibawa dalam string tanpa spasi, menghasilkan bool.

Cek apakah menghapus semua karakter '[],2'dari lmemberikan string kosong. Juga periksa bahwa 22itu bukan substring - jika ya, input ldigunakan sebagai pengganti string kosong untuk membandingkan dengan hasil penghapusan, dan yang selalu gagal.


4

Ruby, 28 23 22 byte - 5 byte disimpan oleh GB

->x{x.flatten-[2]==[]}

Meskipun "rata" sangat panjang, masih lebih pendek daripada solusi berbasis regex atau hal-hal rekursif yang harus menyelamatkan kesalahan dalam kasus dasar. Namun, gabungan set dan array bawaan Ruby, terkadang sangat berguna.


1
x.flatten.uniq == [2]
Nick M

1
@NickM - itu tidak akan berfungsi pada kasus uji suka []atau [[],[]]. [2,*x].flatten.uniq==[2]sedikit lebih panjang
ymbirtt

1
x.flatten | [2] == [2] akan lebih pendek.
GB

@ GB dan x.flatten-[2]==[]masih lebih pendek. Terima kasih atas tipnya!
ymbirtt

1
GB

3

JavaScript (ES6), 26 byte

f=a=>a.map?a.every(f):a==2

Uji kasus


Anda perlu menghitung f=karena Anda menyebutnya.
Leaky Nun

@LeakyNun Memang. Tetap.
Arnauld

3

MATL , 4 byte

2-a~

Cobalah online!

Kerusakan:

           % Implicit input
2-         % Push 2 to the stack, and subtract from input
  a        % Any non-zero elements?
    ~      % Negate to get true for cases where all elements are zero.

Yah, kalah besar . Tapi saya menjaga ini, karena saya cukup senang saya mengatur ini sendiri (walaupun tugasnya sangat sederhana).


3

R, 28 byte

function(x)!any(unlist(x)-2)

unlist(x)mengubah daftar (bersarang) menjadi vektor. Kemudian 2dikurangi dari vektor itu. anymengkonversi (dengan peringatan) numerik menjadi logis dan memeriksa jika ada TRUE. Ini terbalik dengan! dan keluaran.

Ini berfungsi dengan daftar bersarang karena unlist secara default bekerja secara rekursif untuk membatalkan daftar semua entri daftar dari daftar awal.

Ini juga berfungsi dengan daftar kosong, karena unlist(list())menjadi numeric(), vektor numerik kosong. Paksaan dengan anymembuatnya logical(), yang diartikan sebagai FALSEoleh any, dan kemudian dibalik TRUEoleh !.


1
pryr::f(!any(unlist(x)-2))menghemat beberapa byte.
BLT

ini memiliki panjang yang sama all(unlist(x)==2)juga.
Giuseppe

atau Anda juga bisa mengatakan any(unlist(x)-2)yang mengembalikan konsisten TRUEjika ada nilai non-2 dalam susunan rata dan konsisten FALSEjika semua nilainya 2...
Giuseppe

1
@Giuseppe Tidak yakin apakah TRUEdianggap sebagai falsey: /
JAD

1
yah, masih belum ada konsensus tentang meta, tapi codegolf.meta.stackexchange.com/a/2192/67312
Giuseppe



2

Retina , 14 11 byte

^(\W|2\b)+$

Cobalah online!


\Wtampaknya bukan kriteria yang baik: 2.2adalah angka yang tidak cocok 2, namun saya kira itu akan cocok
Aaron

@ Harun Saya baru saja bertanya OP tentang apakah array dapat berisi angka desimal. Jika mereka menyatakan bahwa angka floating-point akan ada dalam array, saya akan mengubah kiriman saya.
Kritixi Lithos

Ya, saya melihat RosLup mengajukan pertanyaan yang sama kemarin dan belum mendapat jawaban. Saya harap OP akan segera datang untuk klarifikasi!
Aaron


2

JavaScript (ES6), 53 50 48 byte

_=>(_+"").split`,`.map(c=>!c?2:c).every(c=>c==2)

Disimpan 5 byte, terima kasih kepada @Shaggy!

Kasus uji:

let f =

_=>(_+"").split`,`.map(c=>!c?2:c).every(c=>c==2)

console.log(f([2]))
console.log(f([2,2]))
console.log(f([[2],[2,2],2]))
console.log(f([]))
console.log(f([[],[]]))

console.log(f([1]))
console.log(f([22]))
console.log(f([2,2,2,1]))
console.log(f([[1,2],2]))


f([])dan f([[],[]])harus jujur
Arnauld

@Arnauld Apakah benar sekarang?
Arjun

Aku pikir begitu. :-)
Arnauld

Pikir Anda dapat menyimpan beberapa byte dengan !cbukan c=="".
Shaggy

@Arnauld Terima kasih telah menunjukkannya. Tantangan ini sebenarnya diposting sebagai CMC di byte kesembilan belas. CMC itu tidak memiliki sesuatu untuk dikatakan tentang [[], []] dll jenis kasus uji. Ketika tantangan diposting di situs utama, saya segera menambahkan solusi saya (Itu bahkan meminta saya CAPTCHA!) Tanpa melihat aturan! Sekali lagi terima kasih! :)
Arjun


2

Java 8, 126 55 27 byte

s->s.matches("(\\W|2\\b)+")

Port dari jawaban Retina @KritixiLithos yang menakjubkan , tidak termasuk ^...$, karena String#matchesselalu cocok dengan seluruh String dan menambahkan^...$ secara implisit.

-2 byte terima kasih kepada Jakob untuk mengingatkan saya tentang ^...$tidak perlu untukString#matches .

Coba di sini.


Saya benci untuk membatalkan semua pekerjaan Anda pada solusi daftar, tetapi tidak bisakah Anda memaksa ke suatu string dan menggunakan solusi string?
Jakob

@ Jakob Maksud Anda dalam penjelasannya? Saya menggunakan solusi String regex saat ini. Saya baru saja menyimpan jawaban Daftar asli saya dan penjelasannya, karena solusi String adalah port. Apakah Anda meminta untuk hanya menghapus solusi Daftar? Atau tambahkan penjelasan untuk solusi String?
Kevin Cruijssen

Maksud saya, selama Anda memiliki daftar solusi, Anda bisa mempersingkatnya dengan menggunakan solusi string di dalamnya. Seperti boolean c(java.util.List l){return(l+"").matches("^(\\W|2\\b)+$");}akan berhasil, bukan? Hanya ingin menunjukkan hal itu jika Anda berencana untuk golf lebih jauh daftar solusi.
Jakob

1
Oh dan Anda bisa kehilangan 2 byte dengan menghapus ^dan $di regex, karena String.matcheshanya menguji terhadap seluruh string.
Jakob

@ Jakob Menghapus jawaban Daftar seluruhnya, dikonversi ke Java 8, dan menghapus ^...$. Lupa tentang itu, meskipun saya sudah sering menggunakannya di masa lalu ..
Kevin Cruijssen

1

Python 2 , 44 43 42 byte

Dibawa xsebagai representasi string dari daftar. Ini juga mengasumsikan seperti pada contoh representasi tidak memiliki spasi.

lambda x:set(x)<=set("[],2"*0**("22"in x))

Cobalah online!


Penjelasan

Keduanya mengambil karakter dalam representasi string dari input dan menentukan apakah ada karakter selain [], 2di dalamnya. Mereka melakukan ini dengan melakukan casting ke set dan membandingkan dengan set hanya karakter tersebut. Namun ini gagal jika kita memiliki angka selain 2 yang hanya memiliki angka 2 (misalnya 22 atau 222), untuk menambal kasus ini kita mengalikan string yang digunakan untuk membuat set dengan negasi apakah xmengandung atau tidak "22". Jika berisi itu ini akan menjadi set kosong, jika tidak maka akan sama seperti sebelumnya.



Gagal untuk[22]
Leaky Nun

@LeakyNun Fixed
Wheat Wizard

@ LeakyNun Saran Anda gagal[]
Wheat Wizard

lambda x:set(x)<=set("[],2"*-~-("22"in x))untuk -1
ovs

1

Ohm, 6 byte

∙e]Å2N

Penggunaan CP-437 penyandian.

Penjelasan:

∙e]Å2E
∙e           ■Evaluate the input to form an array
   Å         ■any(              ,             )
  ]          ■    flatten(input)
    2N       ■                   lambda x:x!=2
             ■implict end of any and print

1

PHP, 46 byte

<?=!preg_match('/:"(?!2")/',serialize($_GET));

@ JörgHülsermann Bisakah Anda memberi contoh? Semua kasus uji tampaknya berhasil. Jika Anda mengujinya tidak melalui browser, apakah Anda memberikan nilai skalar $_GETsebagai string?
user63956

<?=!preg_match('/:"(?!2")/',$argn);dan input adalah representasi string dari array serial - 11 Bytes
Jörg Hülsermann

1

PHP <7.0, 29 Bytes

Input sebagai array string yang disandikan JSON

<?=!ereg("22|[013-9]",$argn);

PHP <7.0, 42 Bytes

gunakan fungsi ereg yang sudah tidak digunakan lagi

<?=!ereg("22|[013-9]",json_encode($_GET));

PHP, 50 Bytes

mencetak 1 untuk true dan nothing for false

-1 Byte untuk penghapusan bijaksana lainnya !

atau + 1 Byte untuk true 1, false 0 tambahkan +sebelumnya!

<?=!preg_match('#22|[013-9]#',json_encode($_GET));

Cobalah online!


2
Anda tidak perlu $rvariabel: <?array_walk_recursive($_GET,function($i){$i-2&&die;})?>1.
user63956

1

Pyth, 6 byte

!-.nQ2

Sangat mirip dengan jawaban CJam saya. Saya masih baru di Pyth, jadi tolong beri tahu saya jika ada yang bisa saya mainkan.

Penjelasan:

    Q   Input:     [[[], [2]], [1]]
  .n    Flatten:   [2, 1]
 -   2  Remove 2s: [1]
!       Not:       False
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.