Vor fast sechs Jahren hat ein PPCG-Mitglied, steenslag , die folgende Herausforderung gestellt:
In einem Standardwürfel sind die Zahlen so angeordnet, dass sich gegenüberliegende Flächen zu sieben addieren. Schreiben Sie das kürzestmögliche Programm in Ihrer bevorzugten Sprache, das einen zufälligen Wurf gefolgt von 9 zufälligen Tipps ausgibt. Ein Tipp ist eine Vierteldrehung des Würfels. Wenn der Würfel z. B. auf 5 zeigt, sind alle möglichen Tipps 1,3,4 und 6.
Beispiel für die gewünschte Ausgabe:
1532131356
Jetzt, da alle das völlig vergessen haben und die siegreiche Antwort längst angenommen wurde, werden wir ein Programm schreiben, um die von den eingereichten Lösungen erzeugten Kippsequenzen zu validieren. (Das macht Sinn. Tu einfach so.)
Herausforderung
Ihr Programm oder Ihre Funktion erhält eine Sequenz wie 1532131356
. Vergewissern Sie sich, dass jede aufeinanderfolgende Ziffer:
- Nicht gleich der vorherigen Ziffer
- Nicht gleich 7 minus der vorherigen Ziffer
(Sie müssen die erste Ziffer nicht validieren.)
Regeln
- Ihr Programm muss einen Wahrheitswert zurückgeben, wenn die Eingabe gültig ist, und andernfalls einen Falsey-Wert .
- Sie können davon ausgehen, dass die Eingabe nur aus den Ziffern 1-6 besteht und mindestens 1 Zeichen lang ist. Sequenzen haben keine feste Länge wie in der Herausforderung von steenslag.
- Sie können die Eingabe als Zeichenfolge (
"324324"
), als Array oder Array-ähnliche Datenstruktur ([1,3,5]
) oder als mehrere Argumente (yourFunction(1,2,4)
) verwenden.
Standard I / O und Schlupfloch Regeln gelten.
Testfälle
Wahrheit
1353531414
3132124215
4142124136
46
4264626313135414154
6
2642156451212623232354621262412315654626212421451351563264123656353126413154124151545145146535351323
5414142
Falsey
Wiederholte Ziffer
11 3132124225 6423126354214136312144245354241324231415135454535141512135141323542451231236354513265426114231536245 553141454631 14265411
Gegenseite sterben
16 42123523545426464236231321 61362462636351 62362462636361
quelle
3132124225
kehrt zurück5
.n and p*(7-p!=n!=p)
.Python, 44 Bytes
Bitweise Magie! Dies ist eine anonyme Funktion, die eine Liste von Ganzzahlen aufnimmt und prüft, ob das XOR von jeweils zwei aufeinanderfolgenden Elementen zwischen 1 und 6 liegt.
Warum es funktioniert
Erstens ist das XOR immer zwischen 0 und 7 einschließlich, da 7 zur
111
Basis 2 gehört und unsere Zahlen höchstens 3 Binärziffern haben. Für die Gleichheit,a^b == 0
wenn und nur wenna == b
. Auch haben wir7-a == 7^a
wann0 ≤ a ≤ 7
und damita^b == 7
wenn und nur wenna == 7^b == 7-b
.quelle
05AB1E ,
119 Bytes-2 Byte für die clevere Idee von Osable, ein Produkt zu verwenden.
Probieren Sie es online!
Dritter Ansatz mit 05AB1E, bei dem der Befehl pairwise nicht verwendet wird:
0
wenn es die beschwipsten Eigenschaften verletzt.Not 0
wenn es nichts gab, das es daran hinderte, beschwipst zu sein.quelle
Á
. Nett!¥¹D7-Á+«P
. Es ergibt 0, wenn das Array eine 0 enthält, oder einen anderen Wert.R
39373231 BytesProbieren Sie es online!
Übernimmt die Eingabe von stdin. Prüft
diff
, ob zwei aufeinanderfolgende Ziffern identisch sind. vergleicht dann jede Ziffer mit 7 minus der vorherigen Ziffer. RückgabeTRUE
oderFALSE
.5 Bytes dank Jarko Dubbeldam und ein weiterer Dank an JayCe.
quelle
q
und anschließendes Testen2*x+q-7
werdenc(0,x)!=c(7-x,0)
einige Bytes gespart. Wennx1 + x2 = 7
dann2*x1 + diff(x1,x2) = 7
. Überprüfung2*x+q - 7
prüft dann explizit!=0
.05AB1E , 10 Bytes
Verwendet die CP-1252- Codierung. Probieren Sie es online!
quelle
Ê
: P Schön!1*[] = []
dochproduct(1, []) = 1
. Das ist gut zu wissen.[]
sollte 1.)1*
,)1s*
und)1P
sind alle[]
während)1sP
ist 1.[]
einen Fehler gibt und verworfen wird. Deshalb gibt es 1. Ich werde versuchen, es zu beheben, wenn ich nach Hause komme.R,
4944 BytesLiest Eingaben von stdin (durch Leerzeichen getrennt) und Ausgaben
TRUE/FALSE
. Gibt eine Warnung aus, wenn die Eingabe die Länge 1 hat, aber noch funktioniert.Bearbeiten: hat dank @rturnbull ein paar Bytes gespart
quelle
all(x)&all(y)
in einall(x,y)
paar Bytes zu speichern. Sie können auch Schalterrle(x)$l==1
aufrle(x)$l-1
, die dann eine Menge aller zurückkehren ,FALSE
wennx
gültig ist; dann schalte das später!=
auf ein==
und dasall
auf!any
. Dies ergibt eine!any(rle(x<-scan())$l-1,ts(x)==7-lag(ts(x)))
Einsparung von insgesamt 5 Bytes. (PS, ich habe eine alternative Lösung geschrieben, die Sie vielleicht interessiert.)05AB1E , 15 Bytes
Probieren Sie es online! oder als Testsuite
quelle
JavaScript (ES6),
43 -40 ByteRückgabe
0
/true
.Testfälle
Code-Snippet anzeigen
quelle
test()
Perl 6 , 22 Bytes
Regex verwenden:
Nimmt die Eingabe als String. Inspiriert von GBs Ruby-Antwort .
Wie es funktioniert:
/ /
: Ein Regex.(.)
: Finde einen beliebigen Charakter und nimm ihn auf als$0
.<{ }>
: Erzeugt dynamisch eine Unter-Regex, die an dieser Position abgeglichen werden soll."$0|" ~ (7 - $0)
: Der Sub-Regex, den wir generieren, stimmt nur mit der vorherigen Ziffer überein oder mit 7 minus der vorherigen Ziffer (z5|2
. B. ).Somit stimmt der gesamte reguläre Ausdruck überein, wenn er irgendwo ein ungültiges aufeinanderfolgendes Ziffernpaar findet.
{! }
: Erzwinge einen Booleschen Wert (wodurch die Regex mit dem Booleschen Wert verglichen wird$_
), negiere ihn und verwandle das Ganze in ein Lambda (mit implizitem Parameter$_
).Perl 6 , 38 Bytes
Verwenden der Listenverarbeitung:
Nimmt die Eingabe als Array von Ganzzahlen.
Wie es funktioniert:
.[1..*] Z $_
: Zippen Sie die Eingabeliste mit einer um eins versetzten Version von sich selbst, um eine Liste mit 2 Tupeln aufeinanderfolgender Ziffern zu erstellen.[!=] 7 - .[1], |$_
: Überprüfen Sie für jedes davon, ob(7 - b) != a != b
.all ( )
: Gibt einen Wahrheits- oder Falschwert zurück, abhängig davon, ob alle Schleifeniterationen True zurückgegeben haben.quelle
Python, 38 Bytes
Eine rekursive Funktion, die Argumente wie annimmt
f(1,2,3)
.Dies nutzt das Entpacken von Argumenten, um die erste Zahl
h
und den Rest in das Tupel zu extrahierent
. Wennt
leer, wird True ausgegeben. Verwenden Sie andernfalls den Bit-Trick von Zgarb, um zu überprüfen, ob die ersten beiden Würfelwürfe nicht inkompatibel sind. Überprüfen Sie dann, ob das Ergebnis auch für den rekursiven Aufruf am Ende gültig ist.quelle
Ruby, 34 Bytes
quelle
#[]
stattdessen zwei Bytes mit der Zeichenfolgenmethode abschneiden :->s{!s[/[16]{2}|[25]{2}|[34]{2}/]}
JavaScript
6143 BytesIn den Kommentaren wurde erwähnt, dass ich C # -Linq-Funktionen nicht ohne die using-Anweisung verwenden kann. Daher ist hier das Gleiche in weniger Bytes unter Verwendung von Standard-JS ...
C #,
996765 BytesÜbernimmt die Eingabe als int-Array
a
Erläuterung:
quelle
0
oder1
anstelle vonfalse
odertrue
> <> (Fisch) 47 Bytes
Ziemlich einfach;
Zeile 1: Überprüfen Sie, ob eine Zahl eingegeben wurde. Wenn keine Zahl (EOF) angegeben wurde, müssen wir die Wahrheit bestätigen, um die anderen Schecks auszudrucken.
Zeile 2: Druckergebnis.
Zeile 3: Wandle die Eingabe in eine Zahl um (ASCII 0 - von der Eingabe) und überprüfe dann, ob sie mit der vorherigen Eingabe übereinstimmt.
Zeile 4: Überprüfen Sie, ob sich der Eingang auf der gegenüberliegenden Seite des Chips befindet.
quelle
Brain-Flak 128 Bytes
Gibt 0 für Falsey oder -7 für Truthy aus.
Probieren Sie es online! (Wahrheit)
Probieren Sie es online! (Flasey)
Erklärung (t steht für top und s steht für second from the top):
quelle
MATLAB, 30 Bytes
quelle
PHP, 63 Bytes
Nimmt Eingaben als Liste von Befehlsargumenten entgegen; Beendet mit
1
(Fehler), wenn die Eingabe ungültig ist,0
(OK), wenn sie gültig ist.Laufen Sie mit
-nr
.Eingabe als String-Argument, 65 Bytes
quelle
PowerShell ,
574441 Byte( Durchgestrichen 44 ist immer noch regulär 44 )
Probieren Sie es online!
(OP hat klargestellt, dass die Eingabe als separate Argumente in Ordnung ist - 13 Bytes gespart ... weitere 3 Bytes durch Eliminierung gespart
$b
)Wir durchlaufen die Eingabe
$args
ziffernweise. Jede Ziffer, überprüfen wir , dass die$l
ast Ziffer-n
ote
qual der aktuellen Ziffer$_
, und das7-$_-$l
ist eine Zahl von Null (was truthy). Diese Booleschen Ergebnisse werden in Parens eingekapselt und unter Gegenprüfung in den rechten Operanden des-notin
Operators eingespeist0
. Mit anderen Worten, wennFalse
irgendwo in der Schleife ein Wert vorhanden ist ,-notin
wird dies auch der Fall seinFalse
. Dieser Boolesche Wert verbleibt in der Pipeline, und die Ausgabe ist implizit.Langwierig, da
$
Variablennamen erforderlich sind und die Booleschen Befehle-ne
-and
in PowerShell ausführlich sind. Naja.quelle
Verarbeitung,
939290 BytesGeändert
||
zu|
: 1 Byte gespeichert dank @ClaytonRamseyBegonnen rückwärts zu zählen: 2 Bytes gespart dank @IsmaelMiguel
Nimmt die Eingabe als Array von Ints, die Ausgabe
1
als true oder0
falsch aus.Ungolfed
quelle
return 0
steht in der if-Anweisung, während diesreturn 1
nicht der Fall ist. Ich sehe nicht, wie das möglich ist, wenn Sie keine andere Idee habenGolfed it! Yipee! (nobody's going to read these summaries so why not have fun :)
<- Ich habe es gelesen, während ich verglichen habe, was du hast und was du hattest.C
4744 BytesNimmt eine Folge von Ziffern (oder ein nullterminiertes Array von Bytes)
Erläuterung
F(char*s){
gemäß dem Standardrückgabetyp
int
wird impliziert. (4 Bytes sparen)return
Bedingungslose Rückgabe, da dies eine rekursive Funktion istVerwenden der Verknüpfungsauswertung:
!s[1]||
Wenn das zweite Zeichen nul ist , wird true zurückgegeben((*s^s[1])%7&&
wenn die ersten beiden Zeichen nicht legal sind falschF(s+1))
Überprüfen Sie den Rest der Zeichenfolge auf die gleiche Weisedieser verwirrende Ausdruck
*s
ist das erste Zeichens[1]
ist das zweite*s^s[1]
Wenn sie gleich sind, ist das Ergebnis 0, wenn sie zu 7 addieren, ist das Ergebnis 7 (wenn sie sich unterscheiden und nicht zu 7 addieren, ist das Ergebnis zwischen 1 und 6 inklusive).So
(*s^s[1])%7
ist Null für fehlerhafte Eingaben und andernfalls ungleich Null, also falsch, wenn diese beiden Zeichen fehlerhaft sind, und andernfalls wahrKommentar: Da dieser Funktionsaufruf nur End-Rekursion verwendet (nur die letzte Anweisung ist ein rekursiver Aufruf), könnte ein Optimierer die Rekursion in eine Schleife übersetzen ermöglicht die Verarbeitung beliebig langer Zeichenketten, ohne dass der Stapel ausgeht.
quelle
!((*s^s[1])%7)
Ich denke du willst das nicht!
. Nullwerte für fehlerhafte Eingaben wären falsch, daher möchten Sie den Fehler zurückgeben, wenn er schlecht ist.Python, 71 Bytes
Verwendet einen rekursiven Ansatz.
Erläuterung:
quelle
Retina , 28 Bytes
Probieren Sie es online!
Alternative:
Probieren Sie es online!
quelle
MATL , 9 Bytes
Die Eingabe ist ein Array von Zahlen, die die Ziffern darstellen.
Die Ausgabe ist ein nicht leeres Array, das wahr ist, wenn alle seine Einträge ungleich Null sind, und ansonsten falsch ist (lesen Sie mehr über das MATL-Kriterium für Wahr und Falsch hier ).
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
quelle
movsum
, gibt es schonconv2
(was beinhaltetconv
); sieheY+
undZ+
C # (mit Linq)
908173716968 BytesErläuterung:
quelle
C, 81 Bytes, war 85 Bytes
Die Eingabe ist ein Array von Ganzzahlen A mit der Länge L. Gibt 1 für wahr und 0 für falsch zurück. Die Eingabe wird vom Ende bis zum Beginn mit der Eingabelänge L als Array-Index überprüft.
quelle
int
Ist zu Beginn optional, können Sie 4 Bytes einsparen.int s=1;
kann wies=1;
für ein anderes 4.Haskell, 37 Bytes
Anwendungsbeispiel:
f [1,5,2]
->False
.Einfache Rekursion. Basisfall: Einzelelementliste, die zurückgibt
True
. Rekursive Fall: lassena
undb
die ersten beiden Elemente der Eingabeliste und werdenc
den Rest. Alle folgenden Bedingungen müssen erfüllt sein:a+b/=7
,a/=b
und der rekursive Aufruf mita
gesunken.quelle
JavaScript, 40 Bytes
&&
Nutzt die JavaScript-Funktion, die den letzten analysierten Wert zurückgibt (entweder den falschen oder den letzten Ausdruck).0
wird weitergereicht, wenn die Bedingungen nicht erfüllt sind, und der vorherige Begriff wird ansonsten weitergereicht. Die 9 stellt sicher, dass es mit einem Wahrheitswert beginnt.quelle
Groovy, 61 Bytes
quelle
Python 2, 58 Bytes
quelle
> <> 39 Bytes
Probieren Sie es online!
quelle
Batch, 102 Bytes
Ungolfed:
quelle