Cel
Napisz program lub funkcję (lub równoważną), która uporządkuje i zwróci nieparzystą literę w macierzy o losowym rozmiarze.
Detale
Otrzymasz macierz (jako ciąg) jako dane wejściowe o losowych wymiarach, takich jak ten.
bbbbbbbbbb bbbbbdbbbb bbbbbbbbbb bbbbbbbbbb bbbbbbbbbb
Twoim zadaniem jest znalezienie litery, która nie pasuje do reszty (w tym przypadku jest ona d
znaleziona w wierszu 2, kol. 6) i zwrócenie tej litery jako wyniku. Matryca będzie się składać z liter A-Z
, a-z
znaków nowej linii ( \n
tylko na końcach wierszy) i będzie mieć wymiary od 5x5 do 10x10 (25-100 liter).
Obowiązują standardowe luki. To jest wyzwanie w golfa kodowego; Wpis z kodem najmniej bajtów wygrywa.
Wejście
Dane wejściowe będą przekazywane standardowym wejściem jako ciąg znaków, jeśli jest to program lub jako argument, jeśli funkcja (lub podobna).
Wynik
Jeden znak, że jest „dziwne” w matrycy lub None
, nil
, NUL
, lub ciąg znaków "None"
, jeśli nie ma znaków „dziwne”.
Więcej przykładów
AAAAAAA AAAAAAA AAAAAAA AAAIAAA AAAAAAA
Odpowiedź: I
vvqvvvvvvv vvvvvvvvvv vvvvvvvvvv vvvvvvvvvv vvvvvvvvvv
Odpowiedź: q
puuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu
Odpowiedź: p
Generator
Oto losowy generator macierzy napisany w języku Python, którego można użyć do przetestowania programu. Uwaga: istnieje niewielka szansa, że popełni błąd i nie wpisze dziwnego listu.
Odpowiedzi:
Python 3 , 27 bajtów
Wypróbuj online!
źródło
J ,
12 107 bajtówWypróbuj online!
Wersja 10-bajtowa
syczenie ...
źródło
Brachylog ,
84 bajtówWypróbuj online!
Wyjaśnienie
Nie korzystałem wcześniej z Brachylog, więc może to nie być optymalne.
źródło
∋≠
poḅ
do uzyskania wyników o długości 1 jest bardzo sprytne. Zdecydowanie powinieneś opublikować go w pytaniu dotyczącym porad Brachylog .K (oK) ,
76 bajtówRozwiązanie
Wypróbuj online!
Przykład:
Wyjaśnienie:
Znaleziono nieco krótsze podejście: oceniane od prawej do lewej:
Uwagi:
Chociaż oczekuję, że bonusowy aspekt tego wyzwania zostanie odrzucony, to rozwiązanie zwróci znak nowej linii,
\n
jeśli nie będzie żadnego dziwnego znaku:źródło
Prolog (SWI) , 46 bajtów
Wypróbuj online!
Lub jeśli standardowe prawdziwe dane wyjściowe z zapytań prologów są nieprawidłowe:
Prolog (SWI) , 48 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
C (gcc) ,
9392906662 bajtówZnacznie krótszy jako funkcja
Wypróbuj online!
kod testowy
stara wersja to program
C 86 bajtów
Zwraca nieparzysty znak lub nic. biegnij tak;
źródło
gets()
sterownika testowego jest dość uczciwe, ponieważ dezynfekuje dane wejściowe, usuwając znaki \ n dla Ciebie. Robi to trochę pracy, aby twoja funkcja nie działała na oryginalnym wejściu.05AB1E ,
42 bajtyZaoszczędzono 2 bajty dzięki Adnan
Wypróbuj online!
Wyjaśnienie
źródło
2x2
matryce. Tęskniłem za częścią w5x5
górę i w górę. Dzięki!nil
jeśli nie ma „dziwnego”, prawda?Siatkówka , 13 bajtów
Wypróbuj online!
Wyjaśnienie
Sortuj wszystkie postacie.
Usuń wszystkie znaki, które pojawiają się co najmniej dwa razy.
źródło
Łuska , 2 bajty
Wypróbuj online!
Jest to funkcja pobierająca ciąg znaków jako dane wejściowe i zwracająca znak. Pobiera minimum łańcucha wejściowego podczas porównywania znaków w celu uzyskania równości (tzn. Zwraca znak równy najmniejszej liczbie innych znaków).
źródło
C, 94 bajty
Wróć przez wskaźnik. Jeśli nie, wróć
\0
.Spowoduje to wycieki pamięci. Zakładając, że
int
to 4 bajty.Wypróbuj online!
źródło
t
zerowania tablicy przed wywołaniem za każdym razem, a nie za pierwszym razem.Mathematica, 27 bajtów
Wypróbuj online!
-1 bajt od Martina Endera
źródło
Bash ,
1520 bajtówWypróbuj online!
Objaśnienie:
fold
s jest wprowadzaniem1
znaku w wierszu,sort
s w grupach pasujących liter, a następnie drukuje tylko te wiersze, które sąuniq
ue.Dzięki @Nahuel Fouilleul za złapanie i pomoc w rozwiązaniu problemu z tym podejściem.
źródło
|sort|
ale może być lepsze rozwiązaniegrep -oP '^(.)((?=(?!\1).){2}|.*\K(?!\1).)'
sort
poprawką, dzięki. Jednak zawsze możesz opublikować tę grep odpowiedź jako własną, jeśli chcesz.Pyth , 4 bajty
Wypróbuj tutaj!
źródło
.m/Q
ma również 4 bajtyPerl 5, 17 + 3 (-00p) -25% = 15 bajtów
spróbuj online
źródło
Matlab, 25 bajtów
Wejście „a”, gdzie „a” nie jest trybem „a”. Wypisuje pustą tablicę dla nieparzystych.
źródło
Haskell, 33 * 0,75 = 24,75 bajtów
Zwraca pustą listę, jeśli nie ma nieparzystego znaku.
Wypróbuj online!
Dla każdego znaku
c
w macierzy (podanego jako ciągs
) utwórz ciąg wszystkich znaków,s
które są równec
i zachowaj te o długości 1.źródło
JavaScript (ES6), 37 bajtów
Zwraca,
null
jeśli nie ma nieparzystej litery.Przypadki testowe
Pokaż fragment kodu
źródło
Japt , 6 bajtów
Pobiera dane wejściowe jako ciąg wielu wierszy i wyprowadza ciąg jednego znaku lub pusty ciąg, jeśli nie ma rozwiązania.
Spróbuj
Wyjaśnienie
Usuń znaki zwracające wartość true (
k
) po przejściu przez funkcję (@
), która zlicza (è
) wystąpienia bieżącego elementu (X
) na wejściu i odejmuje 1 (É
).źródło
Common Lisp, 47 bajtów
Wypróbuj online!
Zwraca nieparzystą literę lub NIL, jeśli nie istnieje.
źródło
Galaretka , 4 bajty
Wypróbuj online!
Wróć
\n
(pojedyncza nowa linia), jeśli nie ma nieparzystego znaku. Oczywiście\n
nie jest postacią do wydrukowania.Przypadkowo jest to dokładnie ten sam algorytm, co odpowiedź Mr.Xcoder Python. (Wymyśliłem to niezależnie)
Wyjaśnienie:
To działa, ponieważ w
m×n
macierzy:m-1
nowe wiersze, 1 nieparzysty znak im×n-1
normalny znak, a1 < m-1 < m×n-1
ponieważ5 ≤ m, n ≤ 10
.m-1
nowej linii im×n
znak normalny orazm-1 < m×n
.źródło
C # (.NET Core) , 54 bajty
Wypróbuj online!
źródło
using
instrukcji w liczbie bajtów.C (gcc) ,
9186827971 bajtówWypróbuj online!
Wyjaśnienie:
Porównaj obecny i poprzedni znak, pomijając znaki nowej linii. Jeśli jest inny, porównaj następny znak. To mówi nam, czy zwrócimy obecny lub poprzedni znak. Funkcja zwraca „nieparzystą” wartość char, jeśli istnieje, lub 0, jeśli tablica nie jest nieparzysta. Unika nas „następny” czek znaków, ponieważ przed znakiem zawsze jest nowa linia
\0
. Jeśli nie ma nieparzystego znaku, wewnętrznie zwracamy \ 0 z pętli for.Starszy, bardziej seksowny kod xor Objaśnienie:
Utwórz działającą maskę xor z następnych 3 wartości ciągu. Jeśli wszystkie są takie same, wartość będzie równa dowolnej z trzech. Jeśli są różne, 2 identyczne anulują się nawzajem, pozostawiając niepowtarzalne.
Należy uwzględnić współczynnik / n przed xor, aby uzyskać bałagan. Muszę również sprawdzić 2 znaki pod kątem nierówności w przypadku, gdy s [0] jest wartością nieparzystą. To kosztuje dodatkowe || czek.
źródło
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;}
Jednak wygrywającym koniem jest ten drugi, jeśli trochę się nimv;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
zamiast*++s==10?s+=2:0
Oktawa ,
2625 bajtów1 bajt zapisany dzięki @Giuseppe
Anonimowa funkcja, która pobiera tablicę znaków 2D jako dane wejściowe i wyświetla nieparzystą literę lub pusty ciąg, jeśli nie istnieje.
Wypróbuj online!
źródło
Alice , 16 * 75% = 12 bajtów
Wypróbuj online!
Wyjścia
Jabberwocky
jeśli nie ma zduplikowanego znaku.Wyjaśnienie
Jest to framework dla programów liniowych, które działają całkowicie w Ordinal (tryb przetwarzania łańcucha znaków). Rzeczywisty kod jest wykonywany w sposób zygzakowaty i rozwija się w celu:
Zamiast tego
&-
możemy również użyćey
(transliteracja do pustego ciągu). Alternatywnie, wydając jeszcze jeden znak na manipulację stosem, możemy również deduplikować dane wejściowe, co pozwala nam usunąć niechciane znakiN
, ale nadal jest taka sama liczba bajtów:Alice , 13 bajtów
Wypróbuj online!
Jest to rozwiązanie bez premii, po prostu brakuje
.n*
.źródło
Siatkówka , 22 bajty
Wypróbuj online! Wymaga tylko wysokości i szerokości co najmniej 3, a nie 5.
źródło
APL + WIN, 16 bajtów
Monituje o wprowadzenie ekranu i wyświetla nieparzystą literę lub nic, jeśli nie ma nieparzystej litery
źródło
a/⍨1=+/a∘.=a←,⎕
bajtPowerShell , 39 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako ciąg znaków z nowymi liniami (jak określono w wyzwaniu), konwertuje je na
char
tablicę. My następnieGroup-Object
postacie, dzięki czemu postacie są pogrupowane według ich nazw, a następniesort
na podstawiec
liczby. To gwarantuje, że samotna postać jest pierwsza, więc bierzemy[0]
indeks i tworzymy go.Name
.Jeśli nowa linia jest akceptowalna jako „nic”, to kwalifikuje się do premii.
źródło
sort c*)[0]
może zostać skrócony, ale to, co wymyśliłem była taka sama liczba bajtów? c* -eq 1)
.$args
. Jest również bardziej dokładny,([char[]]$args|group|? c* -eq 1).Name
ponieważ powróci,null
gdy nie będzie żadnego nieparzystego znaku (zamiast nowej linii). Jednak pod względem bajtów wciąż nie spadnie to poniżej 37.None
,nil
,NUL
, lub ciąg znaków"None"
, jeśli nie ma znaków „dziwne”.) To powinno być jeszcze zmienione. Newline nie jest częścią akceptowalnych odpowiedzi.Perl 6 ,
2724 -25% = 18 bajtówSprawdź to
Sprawdź to
Będzie to powrót nieokreślonej wartości , gdy podane dane wejściowe, które nie mają dziwny znak out.
Rozszerzony:
źródło
Brainfuck, 125 bajtów
Wypróbuj online
Drukuje literę matrycy, jeśli nie ma jednej nieparzystej
źródło
Java 8, 85 bajtów
Jest to lambda od
String
doString
(npFunction<String, String>
.). Zasadniczo jest to kopia rozwiązania Lucy , ale trochę posortowałem łańcuch.Wypróbuj online
źródło