Temukan jarum di tumpukan jerami

38

Diberikan tumpukan jerami persegi panjang dengan ukuran setidaknya 2x2 yang terdiri dari semua karakter ASCII yang dapat dicetak, mengeluarkan lokasi (dihitung dari kiri atas) dari jarum yang merupakan karakter yang berbeda.

Misalnya, jika tumpukan jerami berikut ini dimasukkan:

#####
###N#
#####
#####

Outputnya harus 3,1ketika indeks-nol (apa yang akan saya gunakan dalam tantangan ini) atau 4,2ketika indeks-satu.

Tumpukan jerami dapat terdiri dari karakter ASCII yang dapat dicetak:

^^^
^^^
^N^
^^^
^^^
^^^

keluaran: 1,2

dan jarumnya adalah karakter ASCII lainnya yang dapat dicetak:

jjjjjj
j@jjjj
jjjjjj

keluaran 1,1

Mungkin juga ada jarum di sudut:

Z8
88

keluaran 0,0

88
8Z

keluaran 1,1

atau memiliki jarum di ujung:

>>>>>>>>>>
>>>>>>>>>:
>>>>>>>>>>

keluaran 9,1

Aturan dan Klarifikasi

  • Input dan output dapat diberikan dengan metode apa pun yang mudah . Ini berarti Anda dapat mengambil input sebagai daftar daftar karakter, sebagai string tunggal, dll.
  • Anda dapat mencetak hasilnya ke STDOUT atau mengembalikannya sebagai hasil fungsi. Silakan sebutkan dalam kiriman Anda apa urutan output (yaitu, horisontal kemudian vertikal, seperti yang digunakan dalam tantangan, atau sebaliknya).
  • Program lengkap atau fungsi dapat diterima.
  • Kamu lakukan tidak bisa memilih karakter mana yang akan digunakan. Itulah tantangannya.
  • Tumpukan jerami ini dijamin setidaknya berukuran 2x2, sehingga tidak ambigu yang merupakan jarum dan yang merupakan jerami.
  • Hanya ada satu jarum di input, dan hanya ada satu karakter dalam ukuran.
  • Celah standar dilarang.
  • Ini adalah sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
AdmBorkBork
sumber
Case test yang disarankan: 88\n8Z(dengan dua karakter saja).
Kevin Cruijssen
Bisakah kita mengambil input sebagai array multi dimensi? yaitu [['#', '#', '#', '#', '#'], ['#', '#', '#', 'N', '#'], ['#' , '#', '#', '#', '#'], ['#', '#', '#', '#', '#', '#']];
640KB
2
@ gwaugh Suka daftar daftar karakter? Ya, itu baik-baik saja (dan secara eksplisit disebut OK).
AdmBorkBork
3
Bisakah kita mengambil input sebagai pasangan string tanpa baris baru dan lebar (atau tinggi) tumpukan jerami? yaitu("########N###########", 5)
kata ganti saya adalah monicareinstate
3
@ seseorang Ya, meskipun tidak memiliki kuorum sungguhan , saya merasa itu harus diizinkan.
AdmBorkBork

Jawaban:

17

R , 49 47 44 byte

function(m,`?`=which)m==names(?table(m)<2)?T

Cobalah online!

Mengambil input sebagai matriks, mengembalikan koordinat 1-diindeks

Kirill L.
sumber
4
Itu whichpenugasan memalukan halus.
CriminallyVulgar
4
Saya sangat bersemangat untuk mencoba tantangan ini di R, kemudian saya melihat ini dan memutuskan untuk menangis kagum sebagai gantinya
Sumner18
9

Perl 6 ,41 38 37 byte

3 byte disimpan berkat @nwellnhof.

1 byte disimpan berkat Jo King.

{map {[+] ^∞Z*!<<.&[Z~~]},$_,.&[Z]}

Cobalah online!

Penjelasan

Dibutuhkan input sebagai daftar daftar karakter dan mengembalikan daftar panjang 2 yang berisi koordinat X dan Y berbasis jarum nol.

Ia bekerja dengan menerapkan blok {[+] ^∞ Z* !<<.&[Z~~]}pada input dan pada transposnya. .&[Z~~]menelusuri semua kolom argumen dan kembali Truejika semua elemennya sama, Falsejika tidak. Kami kemudian meniadakan semua nilai (jadi kami memiliki daftar dengan satu bool per kolom, di mana bool menjawab pertanyaan "Apakah jarum di kolom itu?"), Kalikan dengan elemen-elemen dengan urutan 0,1,2 ,. .. ( True = 1dan False = 0) dan jumlahkan daftar, sehingga hasil dari seluruh blok adalah angka berbasis-0 dari kolom tempat jarum itu ditemukan.

Pendekatan Nwellnhof yang lebih baik, Perl 6 , 34 byte

{map *.first(:k,*.Set>1),.&[Z],$_}

Cobalah online!

Penjelasan

Umumnya pendekatan yang sama, hanya lebih efektif. Masih menggunakan blok pada array dan transposnya, tetapi sekarang blok mengubah semua baris menjadi Setsdan memeriksa jumlah elemen. The firstFungsi kemudian memberikan indeks (karena :k) dari baris pertama yang berisi lebih dari 1 elemen. Karena itu, urutan $_dan .&[Z]perlu ditukar.

Ramillies
sumber
Pendekatan yang bagus! 34 byte dengan first(:k), Setdan .&[Z].
nwellnhof
@wellwell, dilakukan dengan sangat baik. Anda pada dasarnya menemukan apa yang ingin saya temukan tetapi gagal melakukannya :—). (Juga saya tidak tahu Anda bisa menulis .&[Z].)
Ramillies
Secara umum, .&[op]tampaknya tidak setara dengan [op] $_tetapi berfungsi dengan Zbeberapa alasan.
nwellnhof
@ JoKing, terima kasih!
Ramillies
9

Python 2 , 57 byte

lambda m:[map(len,map(set,a)).index(2)for a in zip(*m),m]

Cobalah online!


Port ini ke Python 3 bisa 62 byte :

lambda m:[[len(set(v))for v in a].index(2)for a in(zip(*m),m)]

Pemahaman daftar,, [len(set(v))for v in a]lebih pendek dari peta ganda dengan dua byte sekarang karena perlu dilemparkan ke daftar sepertilist(map(len,map(set,a)))

Cobalah online!

Jonathan Allan
sumber
6

Brachylog , 20 byte

c≡ᵍ∋Ȯ&;I∋₎;J∋₎gȮ∧I;J

Cobalah online!

Keluaran [I,J], di mana Iindeks baris dan Jindeks kolom, keduanya diindeks 0.

Sangat panjang, tetapi mendapatkan indeks di Brachylog biasanya sangat bertele-tele.

Penjelasan

c                       Concatenate the Input into a single string
 ≡ᵍ                     Group identical characters together
   ∋Ȯ                   Ȯ is a list of One element, which is the needle character
     &;I∋₎              Take the Ith row of the Input
          ;J∋₎          Take the Jth character of the Ith row
              gȮ        That character, when wrapped in a list, is Ȯ
                ∧I;J    The output is the list [I,J]
Fatalisasi
sumber
6

PHP ,99 85 byte

Menggunakan string tanpa baris baru dan lebar (atau tinggi ('########N###########', 5) sebagai input.

  • -5 byte dengan menghapus panggilan chr (), alat peraga ke @Titus
  • -9 byte dengan mengambil input sebagai dua fungsi args, juga props ke @Titus
function($a,$l){return[($p=strpos($a,array_flip(count_chars($a,1))[1]))%$l,$p/$l|0];}

Cobalah online!

Tidak Disatukan:

function need_hay( $a, $l ) {

    // identify the "needle" by counting the chars and 
    // looking for the char with exactly 1 occurrence
    // note: this is 1 byte shorter than using array_search()
    $n = array_flip( count_chars( $a, 1 ) )[1];

    // find the location in the input string
    $p = strpos( $a, $n );

    // row is location divided by row length, rounded down
    $r = floor( $p / $l );

    // column is remainder of location divided by row length
    $c = $p % $l;

    return array( $c, $r );

}

Keluaran:

#####
###N#
#####
#####
[3,1]

^^^
^^^
^N^
^^^
^^^
^^^
[1,2]

jjjjjj
j@jjjj
jjjjjj
[1,1]
640KB
sumber
1
1) tidak perlu untuk chr: Jika parameter kedua untuk strpos adalah bilangan bulat, itu akan ditafsirkan sebagai kode ASCII. -> -5 byte. 2) Dua parameter fungsi $s,$wdapat menyimpan 9 byte lainnya.
Titus
@Itus, menghapus chr () itu brilian. Terima kasih! Params func memang terjadi pada saya juga, saya hanya tidak ingin menjalankan afowl input req's. Saya akan mengklarifikasi w / OP.
640KB
5

05AB1E , 9 6 byte

Disimpan 3 byte beralih format input.

Input diambil sebagai string dan panjang baris.
Output adalah daftar formulir berbasis nol[y, x]

D.mks‰

Cobalah online! atau sebagai Test Suite

Penjelasan

D           # duplicate the input string
 .m         # get the least frequent character
   k        # get its index in the string
    s       # swap the row length to the top of the stack
     ‰      # divmod the index of the least frequent char with the row length
Emigna
sumber
Dang, kau mengalahkanku untuk itu. Sedang mengerjakan jawaban. Baru saja menyelesaikan 13-byter. Tapi milik Anda jauh lebih baik, jadi beri +1. :) Benar-benar lupa tentang .m..
Kevin Cruijssen
@KevinCruijssen: Ya. Saya tidak berpikir saya pernah menggunakan .msebelumnya, tapi saya cukup yakin saya pernah melihatnya di beberapa titik :)
Emigna
5

Python 3 + NumPy , 75 66 byte

-9 byte berkat hanya @ ASCII

lambda x:where(x.view('i')-median(x.view('i')))
from numpy import*

Cobalah online!

Ini mengasumsikan bahwa input adalah array NumPy. Outputnya adalah indeks-nol, dan pertama vertikal, kemudian horizontal.

Itu mengkonversi input dari charuntuk intkemudian menghitung median array, yang akan menjadi karakter tumpukan jerami. Kami kurangi itu dari array, yang menjadikan jarum sebagai satu-satunya elemen yang tidak nol. Akhirnya, kembalikan indeks elemen itu dengan numpy.where().

hbaderts
sumber
1
Karena Anda tahu inputnya adalah ASCII (yaitu cocok dalam satu byte) mengapa tidak menggunakan uint8kurang dari satu byte?
Draconis
1
Bahasa harus "Python 3 + numpy" di sini karena numpy tidak termasuk dalam distribusi Python normal
ASCII-only
@Draconis itu sebenarnya rencanaku, tapi itu memperkenalkan nol antara uint8kode ASCII yang benar . Saya berasumsi ini karena Python3 menggunakan Unicode sebagai format input standar untuk string.
hbaderts
1
66
ASCII
1
Tidak apa-apa, setelah semua itu tidak hanya berdasarkan solusi Anda, tetapi juga saya biasanya tidak menggunakan numpy. Plus, itu agak tidak terhindarkan bahwa suatu solusi mungkin sangat mirip pula mengingat bahwa semua solusi bersifat publik dan ini adalah tantangan yang relatif mudah
ASCII-only
4

Jelly , 5 byte

Output [tinggi, lebar] (1-diindeks).

ŒĠLÐṂ

Cobalah online!

ŒĠLÐṂ – Monadic link / Full program. Takes a list of strings M as input.
ŒĠ    – Group the multidimensional indices by their values (treating M as a matrix).
  LÐṂ – And retrieve the shortest group of indices (those of the unique character).

Jelly , 5 byte

ŒĠḊÐḟ

Cobalah online!

Tuan Xcoder
sumber
4

Jelly , 4 byte

Mungkin ini bisa saja menjadi komentar untuk Tn. Xcoder itu sangat mirip ...

ŒĠEƇ

Tautan monadik yang menerima matriks karakter yang menghasilkan daftar satu item, 1-diindeks (baris, kolom) berkoordinasi dari kiri atas.
(... Sebagai program lengkap yang diberi argumen yang diformat sedemikian rupa sehingga menguraikan hasil dalam daftar daftar karakter - yaitu daftar string dalam format Python - koordinat tunggal dicetak.)

Cobalah online!

Bagaimana?

ŒĠEƇ - Link: matrix, M
ŒĠ   - multi-dimensional indices grouped by Value
     -  ...due to the 2*2 minimum size and one needle this will be a list of two lists one
     -     of which will have length one (the needle coordinates as a pair) and the other
     -     containing all other coordinates as pairs
   Ƈ - filter keeping those for which this is truthy:
  E  -   all equal?
     -   ... 1 for the list of length 1, 0 for the list of at least 3 non-equal coordinates
Jonathan Allan
sumber
1
Yah ... ini sepertinya batas, karena pintar.
Erik the Outgolfer
4

JavaScript (ES6), 55 byte

(s)(w)sw[x,y]

s=>w=>[(i=s.indexOf(/(.)\1+(.)/.exec(s+s)[2]))%w,i/w|0]

Cobalah online!


JavaScript (ES6),  65  64 byte

Disimpan 1 byte berkat @Neil

[x,y]

m=>m.some((r,y)=>r.some((c,x)=>!m[p=[x,y],~y&1].includes(c)))&&p

Cobalah online!

Bagaimana?

c(x,y)r[Y]Yy2×2Y=0yY=1y

Arnauld
sumber
1
~y&1menyimpan byte lebih y&1^1.
Neil
4

Java 8, 132 111 byte

m->{int c=m[0][0],i=0,j;for(c=m[1][0]!=c?m[1][1]:c;;i++)for(j=m[i].length;j-->0;)if(m[i][j]!=c)return i+","+j;}

-8 byte (dan -13 lebih implisit) berkat @dana .

Input sebagai karakter-matriks.

Cobalah online.

Penjelasan:

m->{                    // Method with char-matrix parameter and String return-type
  int c=m[0][0],        //  Character to check, starting at the one at position 0,0
      i=0,j;            //  Index integers
  for(c=m[1][0]!=c?     //  If the second character does not equal the first:
         m[1][1]        //   Use the character at position 1,1 instead
        :c;             //  Else: keep the character the same
      ;i++)             //  Loop `i` from 0 indefinitely upwards:
    for(j=m[i].length;j-->0;)
                        //   Inner loop `j` in the range (amount_of_columns, 0]:
      if(m[i][j]!=c)    //    If the `i,j`'th character doesn't equal our character to check:
        return i+","+j;}//     Return `i,j` as result
Kevin Cruijssen
sumber
1
124 - returnpernyataan terakhir tidak boleh dipukul. Mungkin ada cara yang lebih baik untuk membuat loop luar terus berjalan?
dana
@dana, terima kasih! Adapun: " Mungkin ada cara yang lebih baik untuk menjaga loop luar? ", Tentu ada; hanya menghapusnya sehingga menjadi loop tak terbatas. Dan kemudian return"";tidak terjangkau dan dapat dihapus juga. : D Jadi -21 byte, terima kasih.
Kevin Cruijssen
Menarik ... Saya telah mencoba menghapus kondisi loop luar dan mendapatkan unreachable codekesalahan. Tidak tahu bahwa menghapus final returnadalah perbaikannya.
dana
Apa sebenarnya yang dilakukan oleh -> operator di loop dalam? Saya mencoba untuk menemukan dokumen java untuk sintaks itu tetapi tidak dapat menemukan apa pun
KBusc
1
@KBusc Ini dua operator: i--dan >. :) Lihat jawaban SO ini untuk info lebih lanjut. Jadi i > 0dieksekusi pertama, memeriksa apakah ilebih besar dari 0. Dan kemudian idikurangi dengan 1 i--, sebelum memasuki tubuh loop.
Kevin Cruijssen
3

MATL , 12 8 byte

tX:XM-&f

Cobalah online!

Menggunakan modefungsi sebagai detektor mayoritas. Mengembalikan indeks berbasis 1.

 t           % duplicate the input
  X:         % turn the copy into a linear array
    XM       % find the arithmetic mode of that (the 'haystack' character)
      -      % Subtract that from the original input
       &f    % find the position of the non-zero value in that result

-4 karakter terima kasih kepada @LuisMendo

sundar - Pasang kembali Monica
sumber
1
@LuisMendo Terima kasih. Saya tidak berpikir saya tahu tentang versi 2 output find, bahkan di MATLAB. (Hai, btw!)
sundar - Reinstate Monica
3

Bahasa Wolfram 37 58 byte

Entri saya sebelumnya tidak benar menangani kasus di mana "karakter aneh keluar" berada di sudut kiri atas matriks. Ini tidak.

#~Position~Keys[TakeSmallest[Counts@Flatten@#,1]][[1]]&

Counts@Flatten@#daftar berapa banyak setiap karakter dalam array #,.

TakeSmallest[...,1] mengembalikan hitungan yang paling jarang, dalam bentuk aturan asosiasi seperti <| "Z"->1|>

Keys...[[1]]mengembalikan "kunci" ke satu-satunya item dalam asosiasi, yaitu karakter yang paling sedikit digunakan. ("Z" dalam kasus ini)

#~Position~...mengembalikan posisi tombol dalam matriks asli #,.

DavidC
sumber
3

Perl 5 -p00, 52 45 byte

/^(.)(\1*
)*(\1*)|^/;$_=$&=~y/
//.$".length$3

45 byte

52 byte

Bagaimana

  • -p00: suka -ntetapi juga cetak, mode paragraf
  • /^(.)(\1* )*(\1*)|^/ : cocok dengan baik
    • dari awal $1: karakter pertama,: $2pengulangan (tidak digunakan) $3,: karakter sebelum "jarum" di baris,$& seluruh pertandingan
    • atau string nol (posisi 0) tidak ada tangkapan.
  • $_= : untuk menetapkan variabel input / argumen default
  • jadi $&=~y/ //jumlah baris baru dari$&
  • .$".: concatenate with $"(karakter spasi secara default) dan concatenate
  • length$3 : panjangnya $3
Nahuel Fouilleul
sumber
3

R 42 byte

function(m)which(ave(m,m,FUN=length)==1,T)

Cobalah online!

Input: matriks tumpukan jeramim

Output: (row,col) vektor - indeks mulai dari1

niko
sumber
1
Kerja bagus, dan selamat datang di PPCG! Saya percaya ini adalah 42 byte, karena f=dapat dihilangkan dari jumlah byte, tetapi bukan function(m)=.
BLT
@ BLT Saya tidak yakin tentang itu, tetapi terima kasih atas perhatiannya :)
niko
2

C # (Visual C # Interactive Compiler) , 109 108 107 byte

Pertama () => Terakhir () untuk -1 byte

currying untuk -1 byte terima kasih kepada Perwujudan Ketidaktahuan

a=>w=>{var d=a.Where(b=>b!=a[0]).Select(b=>a.IndexOf(b));return d.Count()>1?(0,0):(d.Last()%w,d.Last()/w);}

Cobalah online!

kata ganti saya adalah monicareinstate
sumber
2

J , 22 byte

$#:(i.~.{~1 i.~#/.~)@,

Cobalah online!

NB. mengembalikan jawaban dalam format (baris, kolom).

Jonah
sumber
2

Python 2 , 53 47 byte

lambda s,w:divmod(s.find(min(s,key=s.count)),w)

Cobalah online!

Panggil sebagai f("########N###########", 5)(diizinkan dalam komentar ). Keluaran (y, x).

Erik menyimpan 6 byte, menyarankan mengatur ulang output + menggunakan divmod. Terima kasih!

Lynn
sumber
Anda dapat menyusun ulang output, sehingga Anda dapat menggunakan divmodbuiltin .
Erik the Outgolfer
2

PowerShell , 107 98 82 77 byte

$l=@{}
$args|%{if($_-10){$l.$_+=$x++,+$y}else{$x=0;++$y}}
$l|% v*|? c*t -eq 2

Cobalah online!

Mengambil string splatted dengan LFs. Mengembalikan lokasi yang diindeks nol x, y. Belum dibuka:

$locations=@{}                      # make a hashtable. key=char, value=location array
$args|%{
    if($_-10){                      # if current char is not LF
        $locations.$_+=$x++,+$y     # add $x,$y to hashtable value and move $x to next pos
    }else{
        $x=0;++$y                   # move $x,$y to next line
    }
}
$locations|% Values|? Count -eq 2   # find and output location array with 2 elements (x,y)
mazzy
sumber
1

Python 3 , 93 byte

def f(s):x=s.find("\n")+1;return[(i%x,i//x)for i,c in enumerate(s)if s.count(c)<2and" "<c][0]

Cobalah online!

Input diambil sebagai string multiline. Output diindeks 0

Black Owl Kai
sumber
1

Retina 0.8.2 , 41 byte

s`(?=(.)+\1)(.*?¶)*(.*)(?!\1|¶).+
$.3,$#2

Cobalah online! Diindeks 0. Penjelasan:

s`

Izinkan .untuk mencocokkan baris baru. Ini biaya 3 byte (byte ketiga adalah ?sebelum ) tetapi menyimpan 6 byte.

(?=(.)+\1)

Cari dua karakter yang sama. \1kemudian menjadi jerami.

(.*?¶)*

Hitung jumlah baris baru sebelum jarum.

(.*)

Tangkap jerami di sebelah kiri jarum.

(?!\1|¶)

Pastikan jarumnya bukan jerami atau baris baru.

.+

Cocokkan sisa jerami sehingga hasilnya menggantikannya.

$.3,$#2

Keluarkan lebar jerami kiri dan jumlah baris baru.

Neil
sumber
1

C # (Visual C # Interactive Compiler) , 82 byte

x=>w=>{int y=x.IndexOf(x.GroupBy(c=>c).Last(g=>g.Count()<2).Key);return(y%w,y/w);}

Terima kasih kepada dana untuk mencukur 6 byte!

Cobalah online!

Solusi lama, 106 byte

n=>m=>{var z=n.Distinct();int d=n.IndexOf(n.Count(c=>c==z.First())>1?z.Last():z.First());return(d%m,d/m);}

Keduanya mengambil input sebagai string dan bilangan bulat yang menentukan jumlah kolom.

Cobalah online!

Perwujudan Ketidaktahuan
sumber
@dana tidak pernah tahu bahwa Enumerable.Last()menerima delegasi, terima kasih
Perwujudan Ketidaktahuan
1

Java 8, 104 Bytes

(x,w)->{int i=0,p=x.length;for(;i<p;i++)if(x[i]!=x[(i+1)%p]&&x[i]!=x[(i+2)%p])break;return i/w+","+i%w;}

Input adalah array char, dan integer yang mengindikasikan lebar baris.

Output berbasis nol, vertikal kemudian horisontal (yaitu, nomor baris kemudian nomor kolom)

Penjelasan:

(x,w)->{
    int i=0, p=x.length;
    for (;i<p;i++)          //iterate through characters in x
      if (x[i]!=x[(i+1)%p] && x[i]!=x[(i+2)%p])    //compare x[i] with the two subsequent characters in array, wrapping around if necessary
        break;
    return i/w+","+i%w;}  //return row number then column number, zero-based
jkenney
sumber
1

Python 3 , 93 89 85 58 byte

Masukan penulisan ulang lengkap menjadi concatenated string, width:

lambda g,w:divmod(g.index({g.count(c):c for c in g}[1]),w)

Cobalah online!


Jawaban asli:

def k(g):t=''.join(g);return divmod(t.index({t.count(c):c for c in t}[1]),len(g[0]))

EDIT: Disimpan 4 byte dengan menukar linebreak / indentasi untuk titik koma. Disimpan 4 byte lagi dengan menggunakan divmod(terima kasih @JonathanFrech).

Cobalah online!

Saya tahu ini bisa menjadi jauh lebih pendek, tetapi saya hanya ingin mencoba pendekatan seputar dictpemahaman ini .

steenbergh
sumber
1
Menggunakan divmodakan menghemat lima byte.
Jonathan Frech
0

MATL , 11 byte

tX:YmyYk-&f

Output adalah baris, lalu kolom; Berbasis 1.

Cobalah online!

Penjelasan

t    % Implicit input. Duplicate
X:   % Linearize into a column
Ym   % Compute mean (characters are converted to ASCII codes)
y    % Duplicate from below: pushes input again
Yk   % Closest value: gives the input value that is closest to the mean
-    % Subtract, element-wise. Gives non-zero for the value farthest from the mean
&f   % Two-output find: gives row and column indices of nonzeros. Implicit display
Luis Mendo
sumber
0

Pyth, 15 14 12 byte

.Dxz-zh.-z{z

Mengambil input sebagai panjang baris dan input tanpa garis dan output sebagai [baris, kolom].
Coba di sini

Penjelasan

.Dxz-zh.-z{z
       .-z{z    Subtract one of each character from the input.
      h         Take the first.
    -z          Remove all instances from the input.
  xz            Find the remaining character in the input.
.D          Q   Take the result divmod the (implicit) length of the row.

Pendekatan lama

mxJmt{kdeSJ.TB

Coba di sini

Penjelasan

mxJmt{kdeSJ.TB
           .TBQ   Take the (implicit) input and its transpose...
m      d          ... and for each...
   mt{k           ... deduplicate each row...
 xJ     eSJ       ... and find the index of the largest.     

sumber
0

Arang , 40 byte

≔§⎇⌕θ§θ¹ηθ⁰ζSθW⁼№θζLθ«⊞υωSθ»I⌕Eθ⁼ιζ⁰,ILυ

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Saya pasti melakukan sesuatu yang salah karena ini hampir sepanjang jawaban Retina. Penjelasan:

≔§⎇⌕θ§θ¹ηθ⁰ζ

Periksa apakah karakter kedua di string pertama juga merupakan karakter pertama, dan ambil karakter pertama dari string pertama jika demikian sebaliknya karakter pertama dari string kedua jika tidak. Ini adalah jerami.

SθW⁼№θζLθ«⊞υωSθ»

Teruslah membaca senar hingga ditemukan senar yang jeraminya kurang dari panjangnya.

I⌕Eθ⁼ιζ⁰,ILυ

Keluarkan posisi elemen yang tidak cocok dan kemudian jumlah string yang sebelumnya dibaca.

Neil
sumber
0

MATLAB, 68 22 byte

[r,c]=find(v~=v(1));if size(r,1)>1 disp([1,1]);else disp([r,c]);end;

Jika saya bisa mengecualikan satu kasus, seperti [1,1]dalam solusi ini, saya bisa menyelamatkan beberapa byte.

Solusi terbaru :

@(v)find(v-mode(v(:)))

Terima kasih kepada @sundar karena telah membantu saya dengan masalah kasus khusus dan menghemat 42 byte! Juga, terima kasih kepada @Luis_Mendo untuk sarannya dan hemat saya 2 byte lagi!

DimP
sumber
Saya pikir Anda bisa menyingkirkan cek untuk [1,1]kasus dengan menggunakan mode(v(:))bukan v(1).
sundar - Reinstate Monica
Anda perlu membungkus kode Anda sehingga itu adalah program atau fungsi lengkap; Anda tidak dapat mengasumsikan bahwa input dalam variabel v. Juga, Anda mungkin bisa mengganti ~=dengan -, dan menghapus final;
Luis Mendo
0

Röda , 81 byte

f a{i=indexOf;l=i("
",a)+1;chars a|sort|count|[[_2,_1]]|min|i _[1],a|[_%l,_1//l]}

Cobalah online!

Mengambil input sebagai string yang berisi baris yang diakhiri baris baru. Mengembalikan aliran yang berisi indeks horizontal dan vertikal yang diindeks 0.

fergusq
sumber