Prawie sześć lat temu kolega PPCG, steenslag, opublikował następujące wyzwanie:
W standardowych kościach (kostkach) liczby są ułożone w taki sposób, że przeciwne twarze dodają siedem. Napisz najkrótszy możliwy program w preferowanym języku, który generuje losowy rzut, po którym następuje 9 losowych napiwków. Przechylenie to ćwierć obrotu kostki, np. Jeśli kostka jest skierowana w stronę 5, wszystkie możliwe przechylenia to 1,3,4 i 6.
Przykład pożądanej wydajności:
1532131356
Tak więc teraz, gdy wszyscy całkowicie o tym zapomnieli, a zwycięska odpowiedź już dawno została zaakceptowana, będziemy pisać program do sprawdzania sekwencji przechylania matryc generowanych przez przesłane rozwiązania. (To ma sens. Udawaj, że tak.)
Wyzwanie
Twój program lub funkcja ma taką sekwencję jak 1532131356
. Sprawdź, czy każda kolejna cyfra to:
- Nie równa poprzedniej cyfrze
- Nie równa 7 minus poprzednia cyfra
(Nie musisz sprawdzać poprawności pierwszej cyfry.)
Zasady
- Twój program musi zwrócić wartość prawdy, jeśli dane wejściowe są poprawne, a w przeciwnym razie wartość falsey .
- Możesz założyć, że dane wejściowe składają się tylko z cyfr 1-6 i mają co najmniej 1 znak. Sekwencje nie będą miały ustalonej długości jak w wyzwaniu steenslag.
- Dane wejściowe można traktować jako string (
"324324"
), tablicę lub podobną do tablicy strukturę danych ([1,3,5]
) lub jako wiele argumentów (yourFunction(1,2,4)
).
Obowiązują standardowe zasady we / wy i luki .
Przypadki testowe
Prawda
1353531414
3132124215
4142124136
46
4264626313135414154
6
2642156451212623232354621262412315654626212421451351563264123656353126413154124151545145146535351323
5414142
Falsey
Powtarzana cyfra
11 3132124225 6423126354214136312144245354241324231415135454535141512135141323542451231236354513265426114231536245 553141454631 14265411
Przeciwna strona umiera
16 42123523545426464236231321 61362462636351 62362462636361
źródło
3132124225
Zwraca5
.n and p*(7-p!=n!=p)
.Python, 44 bajty
Bitowa magia! Jest to anonimowa funkcja, która pobiera listę liczb całkowitych i sprawdza, czy XOR każdego z dwóch kolejnych elementów zawiera się między 1 a 6 włącznie.
Dlaczego to działa?
Po pierwsze, XOR ma zawsze wartość od 0 do 7 włącznie, ponieważ 7 jest
111
w bazie 2, a nasze liczby mają najwyżej 3 cyfry binarne. Dla równości,a^b == 0
jeśli i tylko jeślia == b
. Ponadto mamy7-a == 7^a
kiedy0 ≤ a ≤ 7
, a więca^b == 7
wtedy i tylko wtedya == 7^b == 7-b
.źródło
05AB1E ,
119 bajtów-2 bajty dla inteligentnego pomysłu Osable na użycie produktu.
Wypróbuj online!
Trzecie podejście z użyciem 05AB1E, które nie korzysta z polecenia parowania:
0
jeśli narusza podpowiedziowe właściwości.Not 0
jeśli nie było nic, co mogłoby przeszkadzać.źródło
Á
. Miły!¥¹D7-Á+«P
. Daje 0, gdy w tablicy jest 0 lub inna wartość.R,
39373231 bajtówWypróbuj online!
Pobiera dane wejściowe ze standardowego wejścia. Używa,
diff
aby sprawdzić, czy dwie kolejne cyfry są takie same; następnie porównuje każdą cyfrę z 7 minus poprzednia cyfra. ZwracaTRUE
lubFALSE
.Zaoszczędź 5 bajtów dzięki Jarko Dubbeldam i kolejne dzięki JayCe.
źródło
q
a następnie testowanie2*x+q-7
zamiastc(0,x)!=c(7-x,0)
zapisywania kilku bajtów. Jeślix1 + x2 = 7
potem2*x1 + diff(x1,x2) = 7
. Sprawdzanie,2*x+q - 7
a następnie jawnie testy!=0
.05AB1E , 10 bajtów
Wykorzystuje kodowanie CP-1252 . Wypróbuj online!
źródło
Ê
: P Fajnie!1*[] = []
aleproduct(1, []) = 1
. Dobrze wiedzieć.[]
powinien wynosić 1.)1*
,)1s*
i)1P
są wszystkie,[]
dopóki)1sP
jest 1.[]
daje błąd i zostaje odrzucony. Dlatego daje 1. Spróbuję to naprawić, kiedy wrócę do domu.R,
4944 bajtówOdczytuje dane wejściowe ze standardowego wejścia (oddzielone spacją) i dane wyjściowe
TRUE/FALSE
. Daje ostrzeżenie, jeśli dane wejściowe mają długość 1, ale nadal działają.Edycja: zapisano kilka bajtów dzięki @rturnbull
źródło
all(x)&all(y)
w,all(x,y)
aby zapisać niektóre bajty. Możesz także przełączyćrle(x)$l==1
narle(x)$l-1
, który zwróci zestaw wszystkich,FALSE
jeślix
jest poprawny; następnie przełączyć później!=
do==
aall
do!any
. To daje!any(rle(x<-scan())$l-1,ts(x)==7-lag(ts(x)))
oszczędność łącznie 5 bajtów. (PS, napisałem alternatywne rozwiązanie, które może Cię zainteresować.)05AB1E , 15 bajtów
Wypróbuj online! lub jako pakiet testowy
źródło
JavaScript (ES6),
4340 bajtówZwraca
0
/true
.Przypadki testowe
Pokaż fragment kodu
źródło
test()
Perl 6 , 22 bajtów
Za pomocą wyrażenia regularnego:
Pobiera dane wejściowe jako ciąg. Zainspirowany odpowiedzią Ruby GB .
Jak to działa:
/ /
: Wyrażenie regularne.(.)
: Dopasuj dowolną postać i złap ją jako$0
.<{ }>
: Dynamicznie generuj podwyrażenie regularne, które ma zostać dopasowane w tej pozycji."$0|" ~ (7 - $0)
: Wygenerowane przez nas wyrażenie podrzędne jest takie, które pasuje tylko do poprzedniej cyfry lub 7 minus poprzednia cyfra (np5|2
.).Tak więc ogólna regex będzie pasować, jeśli znajdzie gdziekolwiek niepoprawną kolejną parę cyfr.
{! }
: Zmusza do wartości logicznej (powodującej dopasowanie wyrażenia regularnego$_
), neguje ją i zamienia całość w lambda (z niejawnym parametrem$_
).Perl 6 , 38 bajtów
Korzystanie z przetwarzania listy:
Pobiera dane wejściowe jako tablicę liczb całkowitych.
Jak to działa:
.[1..*] Z $_
: Spakuj listę wejściową samą wersją z przesunięciem o jeden, aby wygenerować listę 2-krotek kolejnych cyfr.[!=] 7 - .[1], |$_
: Dla każdego z nich sprawdź, czy(7 - b) != a != b
.all ( )
: Zwraca wartość prawdy lub fałszu w zależności od tego, czy wszystkie iteracje pętli zwróciły wartość Prawda.źródło
Python, 38 bajtów
Funkcja rekurencyjna, która przyjmuje takie argumenty
f(1,2,3)
.Wykorzystuje to rozpakowywanie argumentów, aby wyodrębnić pierwszą liczbę,
h
a resztę do krotkit
. Jeślit
jest pusty, wyślij True. W przeciwnym razie użyj sztuczki Zgarba, aby sprawdzić, czy pierwsze dwa rzuty nie są niezgodne. Następnie sprawdź, czy wynik utrzymuje się również na rekurencyjnym wywołaniu na ogonie.źródło
Rubinowy, 34 bajty
źródło
#[]
zamiast tego możesz ogolić dwa bajty, stosując metodę ciągów znaków :->s{!s[/[16]{2}|[25]{2}|[34]{2}/]}
JavaScript
6143 bajtyKomentarze wspominają, że nie mogę używać funkcji linq w języku C # bez dołączenia instrukcji using, więc oto dokładnie to samo w mniejszej liczbie bajtów przy użyciu standardowego JS ...
C #,
996765 bajtówPobiera dane wejściowe jako tablicę int
a
Wyjaśnienie:
źródło
0
lub1
zamiastfalse
lubtrue
> <> (Fish) 47 bajtów
Dość proste;
Wiersz 1: sprawdź, czy wprowadzono liczbę, jeśli nie ma liczby (EOF), mamy prawdę, aby wydrukować inne czeki.
Wiersz 2: wydrukuj wynik.
Wiersz 3: zamień wejście na liczbę (ASCII 0 - z wejścia), a następnie sprawdź, czy jest równe poprzedniemu wprowadzeniu.
Wiersz 4: sprawdź, czy wejście jest po przeciwnej stronie matrycy.
źródło
Brain-Flak 128 bajtów
Wyjście 0 dla falsey lub -7 dla prawdy.
Wypróbuj online! (Prawda)
Wypróbuj online! (Flasey)
Objaśnienie (t oznacza górę, a s oznacza drugą od góry):
źródło
MATLAB, 30 bajtów
źródło
PHP, 63 bajty
przyjmuje dane wejściowe jako listę argumentów poleceń; wychodzi z
1
(błąd), jeśli dane wejściowe są nieprawidłowe,0
(ok), jeśli są prawidłowe.Uruchom z
-nr
.Wprowadź jako argument ciągu, 65 bajtów
źródło
PowerShell ,
574441 bajtów( Przekreślone 44 jest nadal regularne 44 )
Wypróbuj online!
(OP wyjaśnił, że przyjmowanie danych wejściowych jako osobnych argumentów jest w porządku - zapisano 13 bajtów ... zapisano kolejne 3 bajty, eliminując
$b
)Za każdym razem zapętlamy
$args
cyfrę. Każda cyfra, stwierdzamy, że$l
cyfra ast jest-n
ote
qual do bieżącej cyfry$_
i że7-$_-$l
jest jakiś inny numer niż zero (co jest truthy). Te logiczne wyniki są kapsułkowane w pareny i podawane do operandu po prawej stronie-notin
operatora, sprawdzając względem0
. Innymi słowy, jeśliFalse
w pętli jest jakakolwiek wartość,-notin
to również będzieFalse
. To, że wartość logiczna jest pozostawiana w potoku, a dane wyjściowe są niejawne.Długie ze względu na
$
wymaganie dotyczące nazw zmiennych oraz to, że komendy boolowskie-ne
-and
są pełne w programie PowerShell. No cóż.źródło
Przetwarzanie,
939290 bajtówZmieniono
||
na|
: 1 bajt zapisany dzięki @ClaytonRamseyRozpoczęto odliczanie do tyłu: 2 bajty zapisane dzięki @IsmaelMiguel
Pobiera dane wejściowe jako tablicę liczb całkowitych, dane wyjściowe
1
dla wartości true lub0
false.Bez golfa
źródło
return 0
Jest w instrukcji if, areturn 1
nie jest. Nie rozumiem, jak to możliwe, chyba że masz inny pomysłGolfed it! Yipee! (nobody's going to read these summaries so why not have fun :)
<- Przeczytałem to, porównując to, co masz z tym, co miałeś.do
4744 bajtypobiera ciąg cyfr (lub tablicę bajtów zakończoną zerami)
Wyjaśnienie
F(char*s){
zgodnie ze standardowym
int
rodzajem zwrotu. (oszczędność 4 bajtów)return
bezwarunkowy powrót, ponieważ jest to funkcja rekurencyjnaza pomocą oceny skrótów:
!s[1]||
jeśli drugi znak ma wartość nul, zwraca true((*s^s[1])%7&&
jeśli pierwsze dwa znaki nie są zgodne z prawem, fałszyweF(s+1))
sprawdź resztę ciągu w ten sam sposóbten mylący wyraz
*s
jest pierwszą postaciąs[1]
jest drugą*s^s[1]
exclusive-ors je razem, jeśli są takie same, wynik wynosi 0, jeśli dodają do 7, wynik wynosi 7, (jeśli się różnią i nie dodają do 7, wynik wynosi od 1 do 6 włącznie)więc
(*s^s[1])%7
zero dla złych danych wejściowych i niezerowe w przeciwnym razie, więc false, jeśli te 2 znaki są złe, a prawda w przeciwnym raziekomentarz: ponieważ to wywołanie funkcji wykorzystuje tylko rekurencję końcową (tylko ostatnia instrukcja jest wywołaniem rekurencyjnym), optymalizator może przetłumaczyć rekurencję w pętlę, jest to szczęśliwy conicidence i oczywiście nie jest wart żadnej oceny golfa, ale tak naprawdę umożliwia przetwarzanie ciągów o dowolnej długości bez wyczerpania stosu.
źródło
!((*s^s[1])%7)
Myślę, że nie chcesz!
. Zerowe wartości dla złych danych wejściowych byłyby fałszem, więc chcesz je zwrócić, gdy jest ono złe.Python, 71 bajtów
Stosuje podejście rekurencyjne.
Wyjaśnienie:
źródło
Siatkówka , 28 bajtów
Wypróbuj online!
Alternatywnie:
Wypróbuj online!
źródło
MATL , 9 bajtów
Dane wejściowe to tablica liczb reprezentujących cyfry.
Dane wyjściowe to niepusta tablica, która jest prawdziwa, jeśli wszystkie jej wpisy są niezerowe, a fałsz jest inny (czytaj więcej o kryterium MATL dla prawdy i fałszu tutaj ).
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
movsum
, jest jużconv2
(co obejmujeconv
); patrzY+
iZ+
C # (z Linq)
908173716968 bajtówWyjaśnienie:
źródło
C, 81 bajtów, miał 85 bajtów
Dane wejściowe to tablica liczb całkowitych A o długości L. Zwraca 1 dla wartości true i 0 dla wartości false. Dane wejściowe są sprawdzane od końca do początku, używając długości wejściowej L jako indeksu tablicy.
źródło
int
jest opcjonalny na początku, możesz zapisać 4 bajty.int s=1;
można zadeklarować poza funkcją jaks=1;
dla kolejnego 4.Haskell, 37 bajtów
Przykład użycia:
f [1,5,2]
->False
.Prosta rekurencja. Przypadek podstawowy: lista pojedynczych elementów, która zwraca
True
. Rekurencyjne sprawa: niecha
ib
być dwa pierwsze elementy listy wejściowej ic
reszta. Wszystkie poniższe warunki muszą posiadać:a+b/=7
,a/=b
a wywołanie rekurencyjne za
spadły.źródło
JavaScript, 40 bajtów
Korzysta z funkcji JavaScript,
&&
która zwraca ostatnią analizowaną wartość (albo falsy, albo ostatni termin).0
jest przekazywany, jeśli nie spełnia warunków, a poprzedni termin jest przekazywany w inny sposób. 9 gwarantuje, że zaczyna się od prawdziwej wartości.źródło
Groovy, 61 bajtów
źródło
Python 2, 58 bajtów
źródło
> <> , 39 bajtów
Wypróbuj online!
źródło
Partia, 102 bajty
Nie golfowany:
źródło