Objektif
Tulis program atau fungsi (atau yang setara) yang memilah dan mengembalikan huruf aneh dalam matriks ukuran acak.
Detail
Anda akan diberikan sebuah matriks (sebagai string) sebagai input dari dimensi acak seperti ini.
bbbbbbbbbb bbbbbdbbbb bbbbbbbbbb bbbbbbbbbb bbbbbbbbbb
Tugas Anda adalah menemukan huruf yang tidak cocok dengan yang lainnya (dalam hal ini d
, ditemukan di baris 2, kolom 6) dan mengembalikan surat itu sebagai output. Matriks akan terdiri dari huruf A-Z
,, a-z
baris baru ( \n
, hanya pada ujung baris) dan memiliki dimensi mulai dari 5x5 hingga 10x10 (25-100 huruf).
Celah standar berlaku. Ini adalah tantangan kode golf; entri dengan kode setidaknya byte menang.
Memasukkan
Input akan diteruskan melalui input standar sebagai string jika itu adalah program atau sebagai argumen jika suatu fungsi (atau serupa).
Keluaran
Karakter tunggal yang merupakan "aneh" dalam matriks atau None
,nil
, NUL
, atau string "None"
jika tidak ada "aneh" karakter.
Lebih banyak contoh
AAAAAAA AAAAAAA AAAAAAA AAAIAAA AAAAAAA
Menjawab: I
vvqvvvvvvv vvvvvvvvvv vvvvvvvvvv vvvvvvvvvv vvvvvvvvvv
Menjawab: q
puuuuuuuuu uuuuuuuuuu uuuuuuuuuu uuuuuuuuuu uuuuuuuuuu uuuuuuuuuu uuuuuuuuuu uuuuuuuuuu uuuuuuuuuu uuuuuuuuuu
Menjawab: p
Generator
Berikut ini adalah generator matriks acak yang ditulis dengan Python yang dapat Anda gunakan untuk menguji program Anda. Catatan: Ada sedikit kemungkinan bahwa itu bisa membuat kesalahan dan tidak memasukkan huruf aneh.
Jawaban:
Python 3 , 27 byte
Cobalah online!
sumber
J ,
12 107 byteCobalah online!
Versi 10 byte
desis ...
sumber
Brachylog ,
84 byteCobalah online!
Penjelasan
Saya belum pernah menggunakan Brachylog sebelumnya, jadi ini mungkin tidak optimal.
sumber
∋≠
afterḅ
untuk mendapatkan hasil panjang 1 sangat pintar. Anda harus mempostingnya di pertanyaan kiat Brachylog .K (oK) ,
76 byteLarutan
Cobalah online!
Contoh:
Penjelasan:
Menemukan pendekatan yang sedikit lebih pendek: Evaluasi kanan-ke-kiri:
Catatan:
Sementara saya mengharapkan aspek bonus dari tantangan ini hilang, solusi ini akan mengembalikan karakter baris baru
\n
jika tidak ada karakter aneh:sumber
Prolog (SWI) , 46 byte
Cobalah online!
Atau jika output true standar dari kueri prolog tidak apa-apa:
Prolog (SWI) , 48 byte
Cobalah online!
Penjelasan
sumber
C (gcc) ,
9392906662 BytesJauh lebih pendek sebagai fungsi
Cobalah online!
kode uji
versi lama adalah sebuah program
C 86 Bytes
Menghasilkan karakter aneh, atau tidak sama sekali. lari seperti ini;
sumber
gets()
driver tes karena membersihkan input dengan menghapus \ n karakter untuk Anda. Itu melakukan beberapa pekerjaan sehingga fungsi Anda tidak bekerja pada input asli.05AB1E ,
42 byteDisimpan 2 byte berkat Adnan
Cobalah online!
Penjelasan
sumber
2x2
matriks. Saya merindukan bagian tentang5x5
dan ke atas. Terima kasih!nil
jika tidak memiliki "yang aneh" bukan?Retina , 13 byte
Cobalah online!
Penjelasan
Sortir semua karakter.
Hapus semua karakter yang muncul setidaknya dua kali.
sumber
Sekam , 2 byte
Cobalah online!
Ini adalah fungsi yang mengambil string sebagai input dan mengembalikan karakter. Dibutuhkan minimum dari string input ketika membandingkan karakter untuk kesetaraan (yaitu mengembalikan karakter yang sama dengan jumlah terkecil dari karakter lain).
sumber
C, 94 byte
Kembali dengan pointer. Jika tidak ada, kembali
\0
.Ini akan menyebabkan kebocoran memori. Anggap
int
4 byte.Cobalah online!
sumber
t
untuk memusatkan perhatian sebelum memanggil setiap kali bukan yang pertama kali.Mathematica, 27 byte
Cobalah online!
-1 byte dari Martin Ender
sumber
Bash ,
1520 byteCobalah online!
Penjelasan:
fold
s input ke1
karakter per baris,sort
s ke dalam kelompok huruf yang cocok, lalu cetak hanya baris yang adauniq
ue.Terima kasih @Nueluel Fouilleul untuk menangkap dan membantu memperbaiki masalah dengan pendekatan ini.
sumber
|sort|
tetapi mungkin ada solusi yang lebih baikgrep -oP '^(.)((?=(?!\1).){2}|.*\K(?!\1).)'
sort
memperbaikinya, terima kasih. Anda selalu dapat memposting jawaban grep itu sebagai milik Anda jika Anda mau.Pyth , 4 byte
Coba di sini!
sumber
.m/Q
adalah 4 byte jugaPerl 5, 17 + 3 (-00p) -25% = 15 byte
coba online
sumber
Matlab, 25 Bytes
Input "a" di mana "a" bukan mode "a". Keluaran array kosong tanpa keanehan.
sumber
Haskell, 33 * 0,75 = 24,75 byte
Mengembalikan daftar kosong jika tidak ada karakter aneh.
Cobalah online!
Untuk setiap karakter
c
dalam matriks (diberikan sebagai strings
) buat string dari semua karakters
yang sama denganc
dan pertahankan panjangnya 1.sumber
JavaScript (ES6), 37 byte
Kembali
null
jika tidak ada surat aneh.Uji kasus
Tampilkan cuplikan kode
sumber
Japt , 6 byte
Mengambil input sebagai string multi-line dan menghasilkan string karakter tunggal, atau string kosong jika tidak ada solusi.
Cobalah
Penjelasan
Hapus karakter yang mengembalikan truey (
k
) ketika melewati fungsi (@
) yang menghitung (è
) kemunculan elemen saat ini (X
) di input dan kurangi 1 (É
).sumber
Gangguan Umum, 47 byte
Cobalah online!
Mengembalikan huruf ganjil atau NIL jika tidak ada.
sumber
Jelly , 4 byte
Cobalah online!
Kembali
\n
(satu baris baru) jika tidak ada karakter aneh. Jelas\n
bukan karakter yang dapat dicetak.Kebetulan algoritma ini persis sama dengan jawaban Mr.Xcoder Python. (Saya datang dengan itu secara mandiri)
Penjelasan:
Itu bekerja karena dalam sebuah
m×n
matriks:m-1
baris baru, 1 karakter aneh danm×n-1
karakter normal, dan1 < m-1 < m×n-1
karena5 ≤ m, n ≤ 10
.m-1
baris baru danm×n
karakter normal, danm-1 < m×n
.sumber
C # (.NET Core) , 54 byte
Cobalah online!
sumber
using
pernyataan dalam hitungan byte.C (gcc) ,
9186827971 byteCobalah online!
Penjelasan:
Bandingkan karakter saat ini dan sebelumnya sambil melewatkan baris baru. Jika berbeda, bandingkan dengan char berikutnya. Ini memberitahu kita jika kita mengembalikan karakter saat ini atau sebelumnya. Fungsi mengembalikan nilai karakter "ganjil" jika ada atau 0 jika array tidak aneh. Kami lolos dengan cek char "selanjutnya" karena selalu ada baris baru sebelum
\0
char. Jika tidak ada char aneh, kami pada dasarnya mengembalikan \ 0 dari for loop.Kode lama atau lebih seksi Penjelasan:
Buat xor mask berjalan dari 3 nilai string berikutnya. Jika semuanya sama, maka nilainya akan sama dengan salah satu dari ketiganya. Jika mereka berbeda, maka 2 identik akan membatalkan satu sama lain meninggalkan yang unik.
Harus faktor / n sebelum xor atau menjadi berantakan. Juga harus memeriksa 2 karakter untuk ketidaksamaan dalam kasus s [0] adalah nilai ganjil. Ini membutuhkan biaya tambahan || memeriksa.
sumber
v;f(char*s){while(s[3]){s[2]==10?s+=3:0;v=*s^s[1]^s[2];if(v^*s++||v^*s)break;}}
v;f(char*s){while(s[2]==10?s+=3:0,v=*s^s[1]^s[2],s[3])if(v^*s++||v^*s)break;}
Namun kuda Anda yang menang adalah yang lain, jika Anda mengutakv;f(char*s){for(v=-1;*++s==10?s+=2,v--:0,*s;v=0)if(*s^s[-1])return s[v];}
s+=*++s-10?0:2
alih-alih*++s==10?s+=2:0
Oktaf ,
2625 byte1 byte disimpan berkat @Giuseppe
Fungsi anonim yang mengambil array char 2D sebagai input, dan menampilkan huruf ganjil atau string kosong jika tidak ada.
Cobalah online!
sumber
Alice , 16 * 75% = 12 byte
Cobalah online!
Keluaran
Jabberwocky
jika tidak ada karakter duplikat.Penjelasan
Ini adalah kerangka kerja untuk program linier yang beroperasi sepenuhnya dalam Ordinal (mode pemrosesan string). Kode aktual dieksekusi dengan cara zigzag dan membuka ke:
Alih-alih
&-
, kita juga bisa menggunakaney
(transliterasi ke string kosong). Sebagai alternatif, dengan mengeluarkan satu karakter lagi pada manipulasi tumpukan, kita juga dapat menduplikat input yang memungkinkan kita menghapus karakter yang tidak diinginkanN
, tetapi masih dengan byte yang sama:Alice , 13 byte
Cobalah online!
Ini adalah solusi tanpa bonus, itu hanya melewatkan
.n*
.sumber
Retina , 22 byte
Cobalah online! Hanya membutuhkan tinggi dan lebar minimal 3, bukan 5.
sumber
APL + WIN, 16 byte
Meminta input layar dan mengeluarkan huruf ganjil atau tidak sama sekali jika tidak ada huruf ganjil
sumber
a/⍨1=+/a∘.=a←,⎕
untuk satu bytePowerShell , 39 byte
Cobalah online!
Mengambil input sebagai string dengan baris baru (seperti yang ditentukan dalam tantangan), mengubahnya menjadi
char
-array. Kami kemudianGroup-Object
karakter, sehingga karakter dikelompokkan bersama dengan nama mereka, kemudiansort
berdasarkan padac
ount. Ini memastikan bahwa karakter yang kesepian adalah yang pertama, jadi kami ambil[0]
indeks dan menampilkannya.Name
.Jika baris baru dapat diterima untuk "tidak ada" maka ini memenuhi syarat untuk bonus.
sumber
sort c*)[0]
bisa dipersingkat, tetapi yang saya dapatkan adalah jumlah byte yang sama? c* -eq 1)
,.$args
. Juga lebih akurat untuk dilakukan([char[]]$args|group|? c* -eq 1).Name
karena akan kembali secara akuratnull
ketika tidak ada karakter aneh (bukan baris baru). Namun dalam hal byte, ini masih tidak akan membawa Anda di bawah 37.None
,nil
,NUL
, atau string"None"
jika tidak ada "aneh" karakter.) Itu masih harus diubah. Newline bukan bagian dari jawaban yang dapat diterima.Perl 6 ,
2724 -25% = 18 byteMenguji
Menguji
Ini akan mengembalikan nilai yang tidak ditentukan saat diberi input yang tidak memiliki karakter aneh.
Diperluas:
sumber
Brainfuck, 125 byte
Cobalah secara Online
Mencetak huruf dari matriks jika tidak ada yang aneh
sumber
Java 8, 85 byte
Ini adalah lambda dari
String
keString
(misalnyaFunction<String, String>
). Ini pada dasarnya adalah salinan dari solusi Luca , tapi aku sudah sedikit mengurutkan string.Cobalah secara Online
sumber