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,1
po zindeksowaniu zera (co będę używać w tym wyzwaniu) lub 4,2
po 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 golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
88\n8Z
(oczywiście z dowolnymi dwoma znakami).("########N###########", 5)
Odpowiedzi:
R ,
494744 bajtówWypróbuj online!
Pobiera dane wejściowe jako macierz, zwraca współrzędne 1-indeksowane
źródło
which
zadanie jest haniebnie gładkie.Perl 6 ,
41 3837 bajtów3 bajty zapisane dzięki @nwellnhof.
1 bajt zapisany dzięki Jo Kingowi.
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,True
jeśli wszystkie elementy są takie same, wFalse
przeciwnym 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 = 1
iFalse = 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
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
Sets
i sprawdza liczbę elementów. Następniefirst
funkcja podaje indeks (z powodu:k
) pierwszego wiersza zawierającego więcej niż 1 element. Z tego powodu kolejność$_
i.&[Z]
konieczna była zamiana.źródło
first(:k)
,Set
i.&[Z]
..&[Z]
)..&[op]
nie wydaje się być równoważny,[op] $_
ale zZ
jakiegoś powodu działa .Python 2 , 57 bajtów
Wypróbuj online!
Port tego w Pythonie 3 może mieć 62 bajty :
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!
źródło
Brachylog , 20 bajtów
Wypróbuj online!
Wyjścia
[I,J]
, gdzieI
jest indeks wiersza iJ
indeks kolumny, oba indeksowane 0.Głupio długie, ale uzyskiwanie indeksów w Brachylog jest zwykle bardzo szczegółowe.
Wyjaśnienie
źródło
PHP ,
9985 bajtówUżywanie łańcucha bez znaków nowej linii i szerokości (lub wysokości)
('########N###########', 5
) jako danych wejściowych.Wypróbuj online!
Nie golfowany:
Wydajność:
źródło
chr
: jeśli drugim parametrem strpos jest liczba całkowita, zostanie zinterpretowana jako kod ASCII. -> -5 bajtów. 2) Dwa parametry funkcji$s,$w
mogą zapisać kolejne 9 bajtów.05AB1E ,
96 bajtówZapisano 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]
Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
źródło
.m
....m
wcześniej, ale byłem pewien, że kiedyś to zobaczyłem :)Python 3 + NumPy ,
7566 bajtów-9 bajtów dzięki tylko @ ASCII
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
char
na,int
a 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()
.źródło
uint8
o jeden bajt mniej?uint8
kodami ASCII. Zakładam, że dzieje się tak, ponieważ Python3 używa Unicode jako standardowego formatu wejściowego dla łańcuchów.Galaretka , 5 bajtów
Wyjścia [wysokość, szerokość] (1-indeksowane).
Wypróbuj online!
Galaretka , 5 bajtów
Wypróbuj online!
źródło
Galareta , 4 bajty
Może to mógł być tylko komentarz dla pana Xcodera, jest całkiem podobny ...
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?
źródło
EƇ
jest sprytne.JavaScript (ES6), 55 bajtów
Wypróbuj online!
JavaScript (ES6),
6564 bajtówZapisano 1 bajt dzięki @Neil
Wypróbuj online!
W jaki sposób?
źródło
~y&1
oszczędza bajty&1^1
.Java 8,
132111 bajtów-8 bajtów (i -13 bardziej domyślnie) dzięki @dana .
Wprowadź jako macierz znaków.
Wypróbuj online.
Wyjaśnienie:
źródło
return
zdanie nigdy nie powinno zostać trafione. Może istnieć lepszy sposób na utrzymanie pętli zewnętrznej?return"";
jest nieosiągalny i można go również usunąć. : D Więc -21 bajtów dzięki tobie.unreachable code
błąd. Nie wiedziałem, że usunięcie finałureturn
było poprawką.i--
i>
. :) Zobacz tę odpowiedź SO, aby uzyskać więcej informacji. Więci > 0
jest wykonywana najpierw sprawdzenie czyi
jest większa niż 0. A potemi
zostaje zmniejszona o 1 zi--
, zanim wejdzie ona ciało pętli.MATL ,
128 bajtówWypróbuj online!
Wykorzystanie
mode
funkcji jako detektora większości. Zwraca indeksy 1.-4 znaki dzięki @LuisMendo
źródło
find
, nawet w MATLAB. (Cześć, btw!)Wolfram Language
3758 bajtówMój wcześniejszy wpis nie obsługiwał poprawnie przypadku, w którym „nieparzysty znak” znajdował się w lewym górnym rogu matrycy. To robi.
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#
.źródło
Perl 5
-p00
,5245 bajtów45 bajtów
52 bajty
W jaki sposób
-p00
: jak,-n
ale także drukuj, tryb akapitowy/^(.)(\1* )*(\1*)|^/
: pasuje albo$1
: pierwszy znak$2
,: powtórzenie (nieużywane)$3
,: znaki przed „igłą” w linii,$&
całe dopasowanie$_=
: aby przypisać domyślną zmienną wejściową / argumentową$&=~y/ //
liczba nowych linii$&
.$".
: konkatenuje z$"
(domyślnie spacja) i konkatenujlength$3
: długość$3
źródło
R 42 bajty
Wypróbuj online!
Dane wejściowe: macierz stogu siana
m
Wyjście:
(row,col)
wektor - indeks rozpoczynający się od1
źródło
f=
można pominąć liczbę bajtów, ale niefunction(m)=
.C # (interaktywny kompilator Visual C #) ,
109108107 bajtówFirst () => Last () dla -1 bajtów
curry przez -1 bajt dzięki Embodiment of Ignorance
Wypróbuj online!
źródło
J , 22 bajty
Wypróbuj online!
NB. zwraca odpowiedź w formacie (wiersz, kolumna).
źródło
Python 2 ,
5347 bajtówWypró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!źródło
divmod
wbudowanego .PowerShell ,
107988277 bajtówWypróbuj online!
Bierze splatany sznur z LF. Zwraca lokalizację o indeksie zerowym x, y. Rozwinięty:
źródło
Python 3 , 93 bajty
Wypróbuj online!
Dane wejściowe są traktowane jako ciąg multilinii. Wyjście jest indeksowane na 0
źródło
Oktawa , 40 bajtów
Port odpowiedzi MATL @ sundar . Dane wyjściowe to wektor dwuelementowy z 1-kolumnowymi indeksami kolumn i wierszy.
Wypróbuj online!
źródło
Retina 0.8.2 , 41 bajtów
Wypróbuj online! 0-indeksowane. Wyjaśnienie:
Pozwól
.
dopasować nowe linie. Kosztuje to 3 bajty (trzeci bajt jest?
przed¶
), ale oszczędza 6 bajtów.Wypatruj dwóch identycznych postaci.
\1
potem staje się sianem.Policz liczbę nowych linii przed igłą.
Złap siano po lewej stronie igły.
Upewnij się, że igła nie jest sianem ani znakiem nowej linii.
Dopasuj resztę siana, aby wynik go zastąpił.
Wypisuje szerokość lewego siana i liczbę nowych linii.
źródło
C # (interaktywny kompilator Visual C #) , 82 bajty
Dzięki Dana za golenie 6 bajtów!
Wypróbuj online!
Stare rozwiązanie, 106 bajtów
Oba przyjmują dane wejściowe jako ciąg i liczbę całkowitą określającą liczbę kolumn.
Wypróbuj online!
źródło
Enumerable.Last()
przyjęła delegata, dziękiJava 8, 104 bajtó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:
źródło
Python 3 ,
93898558 bajtówZakończ przepisywanie, przyjmując dane wejściowe jako
concatenated string, width
:Wypróbuj online!
Oryginalna odpowiedź:
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
dict
zrozumienia.źródło
divmod
oszczędziłoby pięć bajtów.MATL , 11 bajtów
Dane wyjściowe to wiersz, następnie kolumna; Na podstawie 1.
Wypróbuj online!
Wyjaśnienie
źródło
Pyth,
151412 bajtówPobiera 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
Stare podejście
Wypróbuj tutaj
Wyjaśnienie
źródło
Węgiel drzewny , 40 bajtów
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.
Kontynuuj czytanie ciągów, aż zostanie znaleziony ciąg, którego siano jest mniejsze niż jego długość.
Wypisuje pozycję elementu niedopasowanego, a następnie liczbę wcześniej odczytanych ciągów.
źródło
MATLAB,
6822 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 :
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!
źródło
[1,1]
skrzynkę, używającmode(v(:))
zamiastv(1)
.v
. Również prawdopodobnie można zastąpić~=
przez-
, i usunąć ostateczna;
Röda , 81 bajtów
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.
źródło