Tìm kim trong đống cỏ khô


38

Cho một đống cỏ hình chữ nhật có kích thước ít nhất là 2x2 bao gồm tất cả các ký tự ASCII có thể in giống nhau, xuất vị trí (tính từ trên cùng bên trái) của kim là một ký tự khác.

Ví dụ: nếu haystack sau đây là đầu vào:

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

Đầu ra phải là 3,1khi được lập chỉ mục bằng không (những gì tôi sẽ sử dụng trong thử thách này) hoặc 4,2khi được lập chỉ mục một.

Haystack có thể bao gồm bất kỳ ký tự ASCII có thể in nào:

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

đầu ra: 1,2

và kim sẽ là bất kỳ ký tự ASCII có thể in nào khác :

jjjjjj
j@jjjj
jjjjjj

đầu ra 1,1

Cũng có thể có một cây kim ở góc:

Z8
88

đầu ra 0,0

88
8Z

đầu ra 1,1

hoặc để có kim ở cạnh:

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

đầu ra 9,1

Quy tắc và làm rõ

  • Đầu vào và đầu ra có thể được đưa ra bởi bất kỳ phương pháp thuận tiện . Điều này có nghĩa là bạn có thể lấy đầu vào làm danh sách danh sách các ký tự, dưới dạng một chuỗi, v.v.
  • Bạn có thể in kết quả sang STDOUT hoặc trả lại dưới dạng kết quả hàm. Vui lòng nêu trong bài nộp của bạn thứ tự đầu ra theo thứ tự (nghĩa là ngang rồi dọc, như được sử dụng trong thử thách hoặc ngược lại).
  • Một chương trình đầy đủ hoặc một chức năng được chấp nhận.
  • Bạn không thể chọn những ký tự để sử dụng. Đó là thử thách.
  • Haystack được đảm bảo có kích thước tối thiểu 2x2, do đó, không rõ ràng đó là kim và cỏ khô.
  • Chỉ có một kim trong đầu vào, và nó chỉ có một ký tự.
  • Sơ hở tiêu chuẩn bị cấm.
  • Đây là vì vậy tất cả các quy tắc chơi gôn thông thường đều được áp dụng và mã ngắn nhất (tính bằng byte) sẽ thắng.

Trường hợp thử nghiệm được đề xuất: 88\n8Z(với bất kỳ hai ký tự tất nhiên).
Kevin Cruijssen

Chúng ta có thể lấy đầu vào như một mảng đa chiều không? tức là [['#', '#', '#', '#', '#'], ['#', '#', '#', 'N', '#'], ['#' , '#', '#', '#', '#'], ['#', '#', '#', '#', '#']];
640KB

2
@gwaugh Giống như một danh sách các danh sách các nhân vật? Vâng, điều đó tốt (và được gọi rõ ràng là OK).
admBorkBork

3
Chúng ta có thể lấy đầu vào là một cặp chuỗi không có dòng mới và chiều rộng (hoặc chiều cao) của đống cỏ khô không? tức là("########N###########", 5)
đại từ của tôi là monicareinstate

3
@someone Vâng, mặc dù nó không có một đại biểu thực sự , tôi cảm thấy điều đó nên được cho phép.
admBorkBork

Câu trả lời:


17

R , 49 47 44 byte

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

Hãy thử trực tuyến!

Lấy đầu vào dưới dạng ma trận, trả về tọa độ 1 chỉ mục


4
Sự whichphân công đó thật đáng thất vọng.
CriminallyVulgar

4
Tôi đã rất phấn khích khi thử thách ở R này, sau đó tôi đã thấy điều này và quyết định khóc trong sự sợ hãi thay vào đó
Sumner18

9

Perl 6 ,41 38 37 byte

3 byte được lưu nhờ @nwellnhof.

Lưu 1 byte nhờ Jo King.

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

Hãy thử trực tuyến!

Giải trình

Nó lấy đầu vào làm danh sách các danh sách các ký tự và trả về danh sách độ dài 2 chứa tọa độ X và Y dựa trên số 0 của kim.

Nó hoạt động bằng cách áp dụng các khối {[+] ^∞ Z* !<<.&[Z~~]}trên đầu vào và trên chuyển vị của nó. .&[Z~~]đi qua tất cả các cột của đối số và trả về Truenếu tất cả các phần tử đều giống nhau False. Sau đó, chúng tôi phủ nhận tất cả các giá trị (vì vậy chúng tôi có một danh sách với một bool cho mỗi cột, trong đó bool trả lời câu hỏi "Có phải kim trong cột đó không?"), Nhân chúng thành phần tử khôn ngoan với một chuỗi 0,1,2 ,. .. ( True = 1False = 0) và tổng hợp danh sách, do đó, kết quả của toàn bộ khối là số dựa trên 0 của cột nơi tìm thấy kim.

Cách tiếp cận tốt hơn của Nwellnhof, Perl 6 , 34 byte

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

Hãy thử trực tuyến!

Giải trình

Nói chung cách tiếp cận tương tự, chỉ hiệu quả hơn. Nó vẫn sử dụng một khối trên mảng và chuyển vị của nó, nhưng bây giờ khối này chuyển đổi tất cả các hàng thành Setsvà kiểm tra số lượng phần tử. Các firstchức năng sau đó cung cấp cho chỉ mục (do :k) của hàng đầu tiên có chứa nhiều hơn 1 phần tử. Do đó, thứ tự $_.&[Z]cần phải được hoán đổi.


Cách tiếp cận tốt đẹp! 34 byte với first(:k), Set.&[Z].
nwellnhof

@nwellnhof, làm rất tốt. Về cơ bản, bạn đã tìm thấy những gì tôi muốn tìm nhưng không thực hiện được điều đó:. (Ngoài ra tôi không có ý tưởng rằng bạn có thể viết .&[Z].)
Ramillies

Nói chung, .&[op]dường như không tương đương [op] $_nhưng nó hoạt động với Zmột số lý do.
nwellnhof

@JoKing, cảm ơn!
Ramillies

9

Python 2 , 57 byte

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

Hãy thử trực tuyến!


Một cổng này cho Python 3 có thể là 62 byte :

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

Khả năng hiểu danh sách, [len(set(v))for v in a]ngắn hơn so với bản đồ đôi bằng hai byte vì nó cần phải được chuyển thành một danh sách nhưlist(map(len,map(set,a)))

Hãy thử trực tuyến!


6

Brachylog , 20 byte

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

Hãy thử trực tuyến!

Đầu ra [I,J], trong đó Ilà chỉ mục hàng và Jchỉ mục cột, cả hai chỉ mục 0.

Ngốc dài, nhưng nhận được chỉ mục trong Brachylog thường rất dài dòng.

Giải trình

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]

6

PHP ,99 85 byte

Sử dụng chuỗi không có dòng mới và chiều rộng (hoặc chiều cao) ('########N###########', 5) làm đầu vào.

  • -5 byte bằng cách xóa cuộc gọi chr (), đạo cụ vào @Titus
  • -9 byte bằng cách lấy đầu vào làm hai hàm args, cũng là đạo cụ cho @Titus
function($a,$l){return[($p=strpos($a,array_flip(count_chars($a,1))[1]))%$l,$p/$l|0];}

Hãy thử trực tuyến!

Ung dung:

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

}

Đầu ra:

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

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

jjjjjj
j@jjjj
jjjjjj
[1,1]

1
1) không cần chr: Nếu tham số thứ hai cho strpose là một số nguyên, nó sẽ được hiểu là mã ASCII. -> -5 byte. 2) Hai tham số chức năng $s,$wcó thể lưu thêm 9 byte.
Tít

@Titus, loại bỏ chr () thật tuyệt vời. Cám ơn! Các thông số func cũng đã xảy ra với tôi, tôi chỉ không muốn chạy trên các req của đầu vào. Tôi sẽ làm rõ w / OP.
640KB

5

05AB1E , 9 6 byte

Đã lưu 3 byte chuyển đổi định dạng đầu vào.

Đầu vào được lấy dưới dạng chuỗi và độ dài hàng.
Đầu ra là một danh sách không dựa trên mẫu[y, x]

D.mks‰

Hãy thử trực tuyến! hoặc như một bộ thử nghiệm

Giải trình

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

Dang, bạn đánh tôi với nó. Đã làm việc trên một câu trả lời. Vừa hoàn thành 13 -ter. Nhưng của bạn là cách tốt hơn, vì vậy +1 thay thế. :) Hoàn toàn quên mất .m..
Kevin Cruijssen

@KevinCruijssen: Vâng. Tôi không nghĩ rằng tôi đã từng sử dụng .mtrước đây, nhưng tôi chắc chắn rằng tôi đã thấy nó vào một lúc nào đó :)
Emigna

5

Python 3 + NumPy , 75 66 byte

-9 byte chỉ nhờ @ ASCII

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

Hãy thử trực tuyến!

Điều này giả định rằng đầu vào là một mảng NumPy. Đầu ra là không có chỉ mục, và đầu tiên dọc, sau đó ngang.

Nó chuyển đổi các đầu vào từ charđể intsau đó tính trung bình của mảng, mà sẽ là nhân vật đống cỏ khô. Chúng tôi trừ đi từ mảng, làm cho kim là phần tử duy nhất khác không. Cuối cùng, trả về chỉ mục của phần tử đó với numpy.where().


1
Vì bạn biết đầu vào sẽ là ASCII (tức là vừa với một byte), tại sao không sử dụng uint8cho một byte ít hơn?
Draconis

1
Ngôn ngữ phải là "Python 3 + numpy" ở đây vì numpy không được bao gồm trong phân phối Python bình thường
chỉ có ASCII

@Draconis đó thực sự là kế hoạch của tôi, nhưng điều đó đã đưa ra các số không giữa các uint8mã ASCII chính xác . Tôi giả sử điều này là do Python3 sử dụng Unicode làm định dạng đầu vào tiêu chuẩn cho chuỗi.
hbaderts


1
Không sao, sau tất cả, nó không chỉ dựa trên giải pháp của bạn, mà tôi cũng không thường xuyên sử dụng numpy. Thêm vào đó, không thể tránh khỏi rằng một giải pháp có thể rất giống nhau dù sao đi nữa, tất cả các giải pháp đều công khai đây là một thách thức tương đối dễ dàng
ASCII

4

Thạch , 5 byte

Đầu ra [chiều cao, chiều rộng] (1 chỉ mục).

ŒĠLÐṂ

Hãy thử trực tuyến!

ŒĠ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).

Thạch , 5 byte

ŒĠḊÐḟ

Hãy thử trực tuyến!


4

Thạch , 4 byte

Có lẽ đây chỉ là một nhận xét cho ông Xcoder, nó khá giống ...

ŒĠEƇ

Một liên kết đơn âm chấp nhận ma trận các ký tự tạo ra danh sách một mục, tọa độ 1 (hàng, cột) được phối hợp từ trên cùng bên trái.
(... Là một chương trình đầy đủ được cung cấp một đối số được định dạng sao cho phân tích kết quả trong danh sách các danh sách các ký tự - đó là danh sách các chuỗi ở định dạng Python - tọa độ đơn được in.)

Hãy thử trực tuyến!

Làm sao?

ŒĠ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

1
Chà ... điều này có vẻ như đường biên giới, vì là thông minh.
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]

Hãy thử trực tuyến!


JavaScript (ES6),  65  64 byte

Đã lưu 1 byte nhờ @Neil

[x,y]

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

Hãy thử trực tuyến!

Làm sao?

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


1
~y&1tiết kiệm một byte hơn 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 (và -13 rõ ràng hơn) nhờ @dana .

Nhập dưới dạng ma trận ký tự.

Hãy thử trực tuyến.

Giải trình:

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

1
124 - returntuyên bố cuối cùng sẽ không bao giờ bị đánh. Có thể có một cách tốt hơn để giữ cho vòng lặp bên ngoài tiếp tục?
dana

@dana Cảm ơn! Đối với: " Có thể có một cách tốt hơn để giữ cho vòng lặp bên ngoài tiếp tục? ", Chắc chắn là có; chỉ cần loại bỏ nó để nó trở thành một vòng lặp vô hạn. Và sau đó return"";là không thể truy cập và có thể được gỡ bỏ là tốt. : D Vậy -21 byte nhờ bạn.
Kevin Cruijssen

Thật thú vị ... Tôi đã thử loại bỏ điều kiện vòng lặp bên ngoài và gặp unreachable codelỗi. Không biết rằng loại bỏ trận chung kết returnlà sửa chữa.
dana

Chính xác thì toán tử -> làm gì trong vòng lặp bên trong? Tôi đã cố gắng tìm các tài liệu java cho cú pháp đó nhưng không thể tìm thấy gì
KBusc

1
@KBusc Đó là hai toán tử: i-->. :) Xem câu trả lời SO này để biết thêm. Vì vậy, cái i > 0được thực hiện trước, kiểm tra xem icó lớn hơn 0. Và sau đó igiảm đi 1 với i--, trước khi nó đi vào phần thân của vòng lặp.
Kevin Cruijssen

3

MATL , 12 8 byte

tX:XM-&f

Hãy thử trực tuyến!

Sử dụng modechức năng như máy dò đa số. Trả về các chỉ số dựa trên 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 ký tự nhờ @LuisMendo


1
@LuisMendo Cảm ơn. Tôi không nghĩ rằng tôi đã biết về phiên bản đầu ra 2 find, ngay cả trong MATLAB. (Xin chào, btw!)
- Tái lập lại

3

Ngôn ngữ Wolfram 37 58 byte

Mục nhập trước đó của tôi đã không xử lý chính xác trường hợp "ký tự lẻ" nằm ở góc trên bên trái của ma trận. Điều này không.

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

Counts@Flatten@#liệt kê có bao nhiêu trong số mỗi ký tự trong mảng , #.

TakeSmallest[...,1] trả về số lượng ít thường xuyên nhất, dưới dạng quy tắc kết hợp, chẳng hạn như <| "Z"->1|>

Keys...[[1]]trả về "khóa" cho mục duy nhất trong liên kết, đó là ký tự ít được sử dụng nhất. ("Z" trong trường hợp hiện tại)

#~Position~...trả về vị trí của khóa trong ma trận gốc , #.


3

Perl 5 -p00, 52 45 byte

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

45 byte

52 byte

Làm sao

  • -p00 : như -n mà còn in, chế độ đoạn
  • /^(.)(\1* )*(\1*)|^/ : khớp
    • từ bắt đầu $1: ký tự đầu tiên , $2: sự lặp lại (không được sử dụng),$3 : các ký tự trước "kim" trong dòng,$& toàn bộ khớp
    • hoặc chuỗi null (vị trí 0) không chụp.
  • $_= : để gán biến đầu vào / biến đối số mặc định
  • vì vậy $&=~y/ //số lượng dòng mới của$&
  • .$".: concatenate với $"(ký tự khoảng trắng theo mặc định) và concatenate
  • length$3 : chiều dài của $3

3

R 42 byte

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

Hãy thử trực tuyến!

Đầu vào: ma trận haystackm

Đầu ra: (row,col) vector - chỉ số bắt đầu từ1


1
Rất vui, và chào mừng bạn đến với PPCG! Tôi tin rằng đây là 42 byte, vì f=có thể bỏ qua số byte, nhưng không phải là function(m)=.
BLT

@BLT Tôi không chắc về điều đó nhưng cảm ơn vì đã ngẩng đầu lên :)
niko




2

PowerShell , 107 98 82 77 byte

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

Hãy thử trực tuyến!

Thực hiện một chuỗi splatted với LFs. Trả về vị trí không có chỉ mục x, y. Chưa được kiểm soát:

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



1

Võng mạc 0.8.2 , 41 byte

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

Hãy thử trực tuyến! Chỉ số 0. Giải trình:

s`

Cho phép .khớp dòng mới. Chi phí này là 3 byte (byte thứ 3 là ?trước ) nhưng tiết kiệm 6 byte.

(?=(.)+\1)

Nhìn về phía trước cho hai nhân vật giống hệt nhau. \1sau đó trở thành cỏ khô.

(.*?¶)*

Đếm số lượng dòng mới trước kim.

(.*)

Chụp cỏ khô ở bên trái của kim.

(?!\1|¶)

Đảm bảo rằng kim không hay hay một dòng mới.

.+

Phù hợp với phần còn lại của cỏ khô để kết quả thay thế nó.

$.3,$#2

Xuất chiều rộng của cỏ khô bên trái và số lượng dòng mới.


1

C # (Trình biên dịch tương tác Visual C #) , 82 byte

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

Cảm ơn dana đã cạo sạch 6 byte!

Hãy thử trực tuyến!

Giải pháp cũ, 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);}

Cả hai đều lấy đầu vào là một chuỗi và một số nguyên chỉ định số lượng cột.

Hãy thử trực tuyến!


@dana không bao giờ biết rằng Enumerable.Last()đã chấp nhận một đại biểu, cảm ơn
Hiện thân của sự thiếu hiểu biết

1

Java 8, 104 byte

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

Đầu vào là mảng char và số nguyên cho biết chiều rộng hàng.

Đầu ra là không dựa trên, dọc rồi ngang (nghĩa là số hàng sau đó là số cột)

Giải trình:

(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

1

Python 3 , 93 89 85 58 byte

Hoàn thành viết lại lấy đầu vào là concatenated string, width:

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

Hãy thử trực tuyến!


Câu trả lời gốc:

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

EDIT: Đã lưu 4 byte bằng cách hoán đổi ngắt dòng / thụt lề cho dấu chấm phẩy. Đã lưu thêm 4 byte bằng cách sử dụng divmod(cảm ơn @JonathanFrech).

Hãy thử trực tuyến!

Tôi biết điều này có thể ngắn hơn rất nhiều, nhưng tôi chỉ muốn thử một cách tiếp cận xung quanh sự dicthiểu biết này .


1
Sử dụng divmodsẽ tiết kiệm năm byte.
Jonathan Frech

0

MATL , 11 byte

tX:YmyYk-&f

Đầu ra là hàng, sau đó là cột; 1 dựa.

Hãy thử trực tuyến!

Giải trình

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

0

Bình thường, 15 14 12 byte

.Dxz-zh.-z{z

Lấy đầu vào là độ dài của hàng và đầu vào không có dòng và đầu ra là [hàng, cột].
Hãy thử nó ở đây

Giải trình

.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.

Cách tiếp cận cũ

mxJmt{kdeSJ.TB

Hãy thử nó ở đây

Giải trình

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.     

0

Than , 40 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Tôi phải làm điều gì đó sai bởi vì điều này gần như là câu trả lời của Retina. Giải trình:

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

Kiểm tra xem ký tự thứ hai trong chuỗi thứ nhất có phải là ký tự đầu tiên hay không và lấy ký tự đầu tiên của chuỗi thứ nhất nếu không thì ký tự đầu tiên của chuỗi thứ hai nếu không. Đây là cỏ khô.

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

Tiếp tục đọc các chuỗi cho đến khi một chuỗi có hay ít hơn độ dài của chuỗi được tìm thấy.

I⌕Eθ⁼ιζ⁰,ILυ

Xuất vị trí của phần tử không khớp và sau đó là số chuỗi đã đọc trước đó.


0

MATLAB, 68 22 byte

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

Nếu tôi có thể loại trừ bất kỳ một trường hợp nào, chẳng hạn như [1,1]trong giải pháp này, tôi có thể đã lưu một vài byte.

Giải pháp cập nhật :

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

Cảm ơn @sundar đã giúp tôi giải quyết vấn đề đặc biệt và tiết kiệm 42 byte! Ngoài ra, cảm ơn @Luis_Mendo về các đề xuất và tiết kiệm cho tôi thêm 2 byte!


Tôi nghĩ rằng bạn có thể thoát khỏi kiểm tra cho [1,1] trường hợp bằng cách sử dụng mode(v(:))thay vì v(1).
- Phục hồi lại

Bạn cần phải bọc mã của bạn để nó là một chương trình đầy đủ hoặc một chức năng; bạn không thể cho rằng đầu vào là một biến v. Ngoài ra, bạn có thể có thể thay thế ~=bằng -và xóa trận chung kết;
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]}

Hãy thử trực tuyến!

Đưa đầu vào dưới dạng một chuỗi chứa các dòng kết thúc dòng mới. Trả về một luồng chứa các chỉ mục ngang và dọc được lập chỉ mục 0.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.