Znajdź igłę w stogu siana

38

Biorąc pod uwagę prostokątny stóg siana o wielkości co najmniej 2x2 złożony ze wszystkich tych samych znaków ASCII do wydrukowania, wypisz położenie (licząc od lewego górnego rogu) igły, która jest innym znakiem.

Na przykład, jeśli wprowadzono następujący stóg siana:

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

Dane wyjściowe powinny być 3,1po zindeksowaniu zera (co będę używać w tym wyzwaniu) lub 4,2po zindeksowaniu jednego z nich.

Stóg siana może składać się z dowolnego znaku ASCII do wydruku:

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

wydajność: 1,2

a igła będzie miała dowolny inny znak ASCII do wydrukowania:

jjjjjj
j@jjjj
jjjjjj

wydajność 1,1

Możliwe jest również, aby mieć igłę w rogu:

Z8
88

wydajność 0,0

88
8Z

wydajność 1,1

lub mieć igłę na krawędzi:

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

wydajność 9,1

Zasady i wyjaśnienia

  • Dane wejściowe i wyjściowe można podać dowolną dogodną metodą . Oznacza to, że dane wejściowe można traktować jako listę znaków, pojedynczy ciąg znaków itp.
  • Możesz wydrukować wynik do STDOUT lub zwrócić go jako wynik funkcji. Podaj w swoim zgłoszeniu, w jakiej kolejności jest wyjście (tj. Poziomo, a następnie pionowo, jak zastosowano w wyzwaniu lub odwrotnie).
  • Dopuszczalny jest pełny program lub funkcja.
  • Zdajesz nie dostać się do piłki, które znaki w użyciu. To wyzwanie.
  • Stóg siana ma rozmiar co najmniej 2x2, więc jednoznaczne jest, która jest igłą, a która sianem.
  • Na wejściu jest zawsze tylko jedna igła i ma ona tylko jeden rozmiar.
  • Standardowe luki są zabronione.
  • To jest więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
AdmBorkBork
źródło
Sugerowany przypadek testowy: 88\n8Z(oczywiście z dowolnymi dwoma znakami).
Kevin Cruijssen
Czy możemy przyjmować dane wejściowe jako tablicę wielowymiarową? tj. [['#', '#', '#', '#', '#'], ['#', '#', '#', 'N', '#'], ['#' , '#', '#', '#', '#'], ['#', '#', '#', '#', '#']];
640 KB
2
@gwaugh Podoba Ci się lista postaci? Tak, w porządku (i jawnie nazywany jako OK).
AdmBorkBork
3
Czy możemy brać dane wejściowe jako parę ciągów bez znaków nowej linii i szerokości (lub wysokości) stogu siana? tj.("########N###########", 5)
mój zaimek to monicareinstate
3
@ ktoś Tak, choć nie ma prawdziwego kworum , uważam, że należy na to pozwolić.
AdmBorkBork

Odpowiedzi:

17

R , 49 47 44 bajtów

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

Wypróbuj online!

Pobiera dane wejściowe jako macierz, zwraca współrzędne 1-indeksowane

Kirill L.
źródło
4
To whichzadanie jest haniebnie gładkie.
CriminallyVulgar
4
Byłem bardzo podekscytowany, aby spróbować tego wyzwania w R, a potem to zobaczyłem i postanowiłem płakać z podziwem
Sumner18
9

Perl 6 ,41 38 37 bajtów

3 bajty zapisane dzięki @nwellnhof.

1 bajt zapisany dzięki Jo Kingowi.

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

Wypróbuj online!

Wyjaśnienie

Pobiera dane wejściowe jako listę list znaków i zwraca listę długości 2 zawierającą zerowe współrzędne X i Y igły.

Działa poprzez zastosowanie bloku {[+] ^∞ Z* !<<.&[Z~~]}na wejściu i jego transpozycji. .&[Z~~]przechodzi przez wszystkie kolumny argumentu i zwraca, Truejeśli wszystkie elementy są takie same, w Falseprzeciwnym razie. Następnie negujemy wszystkie wartości (więc mamy listę z jednym boolem na kolumnę, gdzie bool odpowiada na pytanie „Czy igła jest w tej kolumnie?”), Mnożymy je elementarnie przez sekwencję 0,1,2 ,. .. ( True = 1i False = 0) i zsumuj listę, więc wynikiem całego bloku jest liczba 0 w kolumnie, w której znaleziono igłę.

Lepsze podejście Nwellnhofa, Perl 6 , 34 bajty

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

Wypróbuj online!

Wyjaśnienie

Ogólnie to samo podejście, tylko bardziej skuteczne. Nadal używa bloku na tablicy i jego transpozycji, ale teraz blok konwertuje wszystkie wiersze na Setsi sprawdza liczbę elementów. Następnie firstfunkcja podaje indeks (z powodu :k) pierwszego wiersza zawierającego więcej niż 1 element. Z tego powodu kolejność $_i .&[Z]konieczna była zamiana.

Ramillies
źródło
Niezłe podejście! 34 bajty z first(:k), Seti .&[Z].
nwellnhof
@nwellnhof, bardzo dobrze zrobione. Zasadniczo znalazłeś to, co chciałem znaleźć, ale tego nie zrobiłeś :-). (Również nie miałem pojęcia, że ​​można pisać .&[Z]).
Ramillies
Ogólnie rzecz biorąc, .&[op]nie wydaje się być równoważny, [op] $_ale z Zjakiegoś powodu działa .
nwellnhof
@JoKing, dzięki!
Ramillies
9

Python 2 , 57 bajtów

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

Wypróbuj online!


Port tego w Pythonie 3 może mieć 62 bajty :

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

Zrozumienie listy [len(set(v))for v in a]jest teraz krótsze niż podwójna mapa o dwa bajty, ponieważ należałoby ją przerzucić na listę taką jaklist(map(len,map(set,a)))

Wypróbuj online!

Jonathan Allan
źródło
6

Brachylog , 20 bajtów

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

Wypróbuj online!

Wyjścia [I,J] , gdzie Ijest indeks wiersza i Jindeks kolumny, oba indeksowane 0.

Głupio długie, ale uzyskiwanie indeksów w Brachylog jest zwykle bardzo szczegółowe.

Wyjaśnienie

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]
Fatalizować
źródło
6

PHP ,99 85 bajtów

Używanie łańcucha bez znaków nowej linii i szerokości (lub wysokości) ('########N###########', 5) jako danych wejściowych.

  • -5 bajtów poprzez usunięcie wywołania chr (), rekwizyty do @Titus
  • -9 bajtów, przyjmując dane wejściowe jako dwa argumenty funkcji, również rekwizyty do @Titus
function($a,$l){return[($p=strpos($a,array_flip(count_chars($a,1))[1]))%$l,$p/$l|0];}

Wypróbuj online!

Nie golfowany:

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

}

Wydajność:

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

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

jjjjjj
j@jjjj
jjjjjj
[1,1]
640 KB
źródło
1
1) nie ma potrzeby chr: jeśli drugim parametrem strpos jest liczba całkowita, zostanie zinterpretowana jako kod ASCII. -> -5 bajtów. 2) Dwa parametry funkcji $s,$wmogą zapisać kolejne 9 bajtów.
Tytus
@Titus, usuwanie genialnego chr (). Dzięki! Func parametry też mi się przydarzyły, po prostu nie chciałem uruchamiać wielu poleceń wejściowych. Wyjaśnię w / OP.
640 KB
5

05AB1E , 9 6 bajtów

Zapisano 3 bajty przełączające format wejściowy.

Dane wejściowe są traktowane jako ciąg znaków i długość wiersza.
Dane wyjściowe jest zerową listą formularza[y, x]

D.mks‰

Wypróbuj online! lub jako pakiet testowy

Wyjaśnienie

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
źródło
Dang, pobiłeś mnie do tego. Pracowałem nad odpowiedzią. Właśnie skończyłem 13-bajter. Ale twój jest o wiele lepszy, więc zamiast tego daj +1. :) Całkowicie zapomniałem o .m...
Kevin Cruijssen
@KevinCruijssen: Tak. Nie sądzę, żebym kiedykolwiek używał .mwcześniej, ale byłem pewien, że kiedyś to zobaczyłem :)
Emigna
5

Python 3 + NumPy , 75 66 bajtów

-9 bajtów dzięki tylko @ ASCII

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

Wypróbuj online!

Zakłada się, że dane wejściowe to tablica NumPy. Dane wyjściowe są indeksowane od zera i najpierw pionowe, a następnie poziome.

Konwertuje dane wejściowe z charna, inta następnie oblicza medianę tablicy, która będzie znakiem stogu siana. Odejmujemy to od tablicy, co czyni igłę jedynym niezerowym elementem. Na koniec zwróć indeks tego elementu za pomocą numpy.where().

hbaderts
źródło
1
Ponieważ wiesz, że dane wejściowe to ASCII (tzn. Mieści się w bajcie), dlaczego nie użyć uint8o jeden bajt mniej?
Draconis
1
Językiem musi być tutaj „Python 3 + numpy”, ponieważ numpy nie jest zawarte w normalnej dystrybucji Pythona
tylko ASCII
@Draconis, który był moim planem, ale wprowadził zera między poprawnymi uint8kodami ASCII. Zakładam, że dzieje się tak, ponieważ Python3 używa Unicode jako standardowego formatu wejściowego dla łańcuchów.
hbaderts
1
66
Tylko ASCII
1
Jest w porządku, w końcu opiera się nie tylko na twoim rozwiązaniu, ale i tak zwykle nie używam numpy. Poza tym nie da się uniknąć, że rozwiązanie może być bardzo podobne, biorąc pod uwagę, że wszystkie rozwiązania są publiczne i jest to stosunkowo łatwe wyzwanie
tylko ASCII
4

Galaretka , 5 bajtów

Wyjścia [wysokość, szerokość] (1-indeksowane).

ŒĠLÐṂ

Wypróbuj 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).

Galaretka , 5 bajtów

ŒĠḊÐḟ

Wypróbuj online!

Pan Xcoder
źródło
4

Galareta , 4 bajty

Może to mógł być tylko komentarz dla pana Xcodera, jest całkiem podobny ...

ŒĠEƇ

Monadyczny link akceptujący matrycę znaków, który daje listę jednego elementu, współrzędnych 1-indeksowych (wiersz, kolumna) od lewego górnego rogu.
(... Jako pełny program z argumentem sformatowanym w taki sposób, że parsowanie daje listę list znaków - czyli listę ciągów w formacie Pythona - drukowana jest pojedyncza współrzędna.)

Wypróbuj online!

W jaki sposób?

ŒĠ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
źródło
1
Cóż ... wydaje się to graniczne, ponieważ jest sprytne.
Erik the Outgolfer
4

JavaScript (ES6), 55 bajtów

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

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

Wypróbuj online!


JavaScript (ES6),  65  64 bajtów

Zapisano 1 bajt dzięki @Neil

[x,y]

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

Wypróbuj online!

W jaki sposób?

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

Arnauld
źródło
1
~y&1oszczędza bajt y&1^1.
Neil
4

Java 8, 132 111 bajtów

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 bajtów (i -13 bardziej domyślnie) dzięki @dana .

Wprowadź jako macierz znaków.

Wypróbuj online.

Wyjaśnienie:

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
źródło
1
124 - ostateczne returnzdanie nigdy nie powinno zostać trafione. Może istnieć lepszy sposób na utrzymanie pętli zewnętrznej?
dana
@dana Thanks! Jeśli chodzi o: „ Może istnieć lepszy sposób na utrzymanie zewnętrznej pętli? ”, Z pewnością jest; po prostu usuwając go, aby stał się nieskończoną pętlą. A wtedy return"";jest nieosiągalny i można go również usunąć. : D Więc -21 bajtów dzięki tobie.
Kevin Cruijssen
Interesujące ... Próbowałem usunąć warunek zewnętrznej pętli i otrzymywałem unreachable codebłąd. Nie wiedziałem, że usunięcie finału returnbyło poprawką.
dana
Co dokładnie robi operator -> w wewnętrznej pętli? Próbowałem znaleźć dokumenty Java dla tej składni, ale nic nie znalazłem
KBusc
1
@KBusc To dwóch operatorów: i--i >. :) Zobacz tę odpowiedź SO, aby uzyskać więcej informacji. Więc i > 0jest wykonywana najpierw sprawdzenie czy ijest większa niż 0. A potem izostaje zmniejszona o 1 z i--, zanim wejdzie ona ciało pętli.
Kevin Cruijssen
3

MATL , 12 8 bajtów

tX:XM-&f

Wypróbuj online!

Wykorzystanie modefunkcji jako detektora większości. Zwraca indeksy 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 znaki dzięki @LuisMendo

sundar - Przywróć Monikę
źródło
1
@LuisMendo Thanks. Nie sądzę, żebym wiedział o 2 wyjściowej wersji find, nawet w MATLAB. (Cześć, btw!)
Sundar - Przywróć Monikę
3

Wolfram Language 37 58 bajtów

Mój wcześniejszy wpis nie obsługiwał poprawnie przypadku, w którym „nieparzysty znak” znajdował się w lewym górnym rogu matrycy. To robi.

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

Counts@Flatten@# wyświetla liczbę każdego znaku w tablicy, # .

TakeSmallest[...,1] zwraca najmniejszą liczbę zliczeń, w postaci reguły asocjacyjnej, takiej jak <| "Z"->1|>

Keys...[[1]]zwraca „klucz” do jedynego elementu w skojarzeniu, do najmniej używanego znaku. („Z” w niniejszej sprawie)

#~Position~...powraca następnie umieszczenie klucza w oryginalnej matrycy #.

DavidC
źródło
3

Perl 5 -p00, 52 45 bajtów

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

45 bajtów

52 bajty

W jaki sposób

  • -p00: jak, -nale także drukuj, tryb akapitowy
  • /^(.)(\1* )*(\1*)|^/ : pasuje albo
    • od początku $1: pierwszy znak $2,: powtórzenie (nieużywane) $3,: znaki przed „igłą” w linii,$& całe dopasowanie
    • lub łańcuch zerowy (pozycja 0) bez przechwytywania.
  • $_= : aby przypisać domyślną zmienną wejściową / argumentową
  • więc $&=~y/ //liczba nowych linii$&
  • .$". : konkatenuje z $" (domyślnie spacja) i konkatenuj
  • length$3 : długość $3
Nahuel Fouilleul
źródło
3

R 42 bajty

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

Wypróbuj online!

Dane wejściowe: macierz stogu sianam

Wyjście: (row,col) wektor - indeks rozpoczynający się od1

niko
źródło
1
Dobra robota i witamy w PPCG! Uważam, że jest to 42 bajty, ponieważ f=można pominąć liczbę bajtów, ale nie function(m)=.
BLT
@BLT Nie byłem tego pewien, ale dziękuję za heads-up :)
niko
2

C # (interaktywny kompilator Visual C #) , 109 108 107 bajtów

First () => Last () dla -1 bajtów

curry przez -1 bajt dzięki Embodiment of Ignorance

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

Wypróbuj online!

mój zaimek to monicareinstate
źródło
2

Python 2 , 53 47 bajtów

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

Wypróbuj online!

Zadzwoń jako f("########N###########", 5)(dozwolone w komentarzu ). Wyjścia (y, x).

Erik zapisał 6 bajtów, sugerując zmianę kolejności wyjścia + za pomocą divmod. Dzięki!

Lynn
źródło
Możesz zmienić kolejność danych wyjściowych, aby użyć divmodwbudowanego .
Erik the Outgolfer
2

PowerShell , 107 98 82 77 bajtów

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

Wypróbuj online!

Bierze splatany sznur z LF. Zwraca lokalizację o indeksie zerowym x, y. Rozwinięty:

$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
źródło
1

Python 3 , 93 bajty

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]

Wypróbuj online!

Dane wejściowe są traktowane jako ciąg multilinii. Wyjście jest indeksowane na 0

Czarna sowa Kai
źródło
1

Retina 0.8.2 , 41 bajtów

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

Wypróbuj online! 0-indeksowane. Wyjaśnienie:

s`

Pozwól .dopasować nowe linie. Kosztuje to 3 bajty (trzeci bajt jest ?przed ), ale oszczędza 6 bajtów.

(?=(.)+\1)

Wypatruj dwóch identycznych postaci. \1potem staje się sianem.

(.*?¶)*

Policz liczbę nowych linii przed igłą.

(.*)

Złap siano po lewej stronie igły.

(?!\1|¶)

Upewnij się, że igła nie jest sianem ani znakiem nowej linii.

.+

Dopasuj resztę siana, aby wynik go zastąpił.

$.3,$#2

Wypisuje szerokość lewego siana i liczbę nowych linii.

Neil
źródło
1

C # (interaktywny kompilator Visual C #) , 82 bajty

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

Dzięki Dana za golenie 6 bajtów!

Wypróbuj online!

Stare rozwiązanie, 106 bajtów

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

Oba przyjmują dane wejściowe jako ciąg i liczbę całkowitą określającą liczbę kolumn.

Wypróbuj online!

Wcielenie ignorancji
źródło
@dana nigdy nie wiedziała, że Enumerable.Last()przyjęła delegata, dzięki
of Ignorance
1

Java 8, 104 bajtów

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

Dane wejściowe to tablica znaków char i liczba całkowita wskazująca szerokość wiersza.

Dane wyjściowe są zerowe, pionowe, a następnie poziome (tj. Numer wiersza następnie numer kolumny)

Wyjaśnienie:

(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
źródło
1

Python 3 , 93 89 85 58 bajtów

Zakończ przepisywanie, przyjmując dane wejściowe jako concatenated string, width:

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

Wypróbuj online!


Oryginalna odpowiedź:

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

EDYCJA: Zapisano 4 bajty, zamieniając podział / wcięcie dla średników. Zapisano kolejne 4 bajty za pomocą divmod(dzięki @JonathanFrech).

Wypróbuj online!

Wiem, że to może być o wiele krótsze, ale chciałem tylko spróbować podejść do tego dictzrozumienia.

Steenbergh
źródło
1
Użycie divmodoszczędziłoby pięć bajtów.
Jonathan Frech
0

MATL , 11 bajtów

tX:YmyYk-&f

Dane wyjściowe to wiersz, następnie kolumna; Na podstawie 1.

Wypróbuj online!

Wyjaśnienie

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
źródło
0

Pyth, 15 14 12 bajtów

.Dxz-zh.-z{z

Pobiera dane wejściowe jako długość wiersza, a dane wejściowe bez wierszy i danych wyjściowych jako [wiersz, kolumna].
Wypróbuj tutaj

Wyjaśnienie

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

Stare podejście

mxJmt{kdeSJ.TB

Wypróbuj tutaj

Wyjaśnienie

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.     
Mnemoniczny
źródło
0

Węgiel drzewny , 40 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Muszę robić coś złego, ponieważ jest to prawie tak długo, jak odpowiedź Retiny. Wyjaśnienie:

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

Sprawdź, czy drugi znak w pierwszym ciągu jest również pierwszym znakiem, i weź pierwszy znak pierwszego ciągu, jeśli tak, to w przeciwnym razie pierwszy znak drugiego ciągu, jeśli nie. To jest siano.

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

Kontynuuj czytanie ciągów, aż zostanie znaleziony ciąg, którego siano jest mniejsze niż jego długość.

I⌕Eθ⁼ιζ⁰,ILυ

Wypisuje pozycję elementu niedopasowanego, a następnie liczbę wcześniej odczytanych ciągów.

Neil
źródło
0

MATLAB, 68 22 bajty

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

Gdybym mógł wykluczyć jakikolwiek przypadek, na przykład [1,1]w tym rozwiązaniu, mógłbym zapisać kilka bajtów.

Zaktualizowane rozwiązanie :

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

Dzięki @sundar za pomoc w rozwiązaniu specjalnego problemu i oszczędność 42 bajtów! Ponadto, dzięki @Luis_Mendo za sugestie i oszczędzając mi kolejne 2 bajty!

DimP
źródło
Myślę, że możesz pozbyć się czeku na [1,1]skrzynkę, używając mode(v(:))zamiast v(1).
Sundar - Przywróć Monikę
Musisz owinąć swój kod, aby był to pełny program lub funkcja; nie można założyć, że dane wejściowe są w zmiennej v. Również prawdopodobnie można zastąpić ~=przez- , i usunąć ostateczna;
Luis Mendo
0

Röda , 81 bajtów

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

Wypróbuj online!

Pobiera dane wejściowe jako ciąg zawierający wiersze zakończone znakiem nowej linii. Zwraca strumień zawierający indeksy poziome i pionowe o indeksie 0.

fergusq
źródło