Random Die Tippers validieren

33

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
    
user2428118
quelle

Antworten:

14

Python 2, 43 45 Bytes

lambda s:reduce(lambda p,n:n*(7-p!=n!=p>0),s)

43 Bytes (stark inspiriert von @Zgarb)

lambda s:reduce(lambda p,n:n*(p>0<n^p<7),s)

Diese Funktion kombiniert meine Reduce-Anweisung mit der Bit-Flicking-Logik aus @ Zgarbs Antwort für eine Kombination, die kürzer als beide ist.

Beide Antworten geben Folgendes aus:

  • 0, wenn die Eingabe keine gültige Sequenz ist
  • Die letzte Ziffer der Sequenz, wenn sie gültig ist
notjagan
quelle
4
Willkommen bei PPCG. Dies ist eine wirklich schöne erste Antwort.
Weizen-Assistent
1
Dies funktioniert nicht für ungefähr die Hälfte der falschen Fälle. ZB 3132124225kehrt zurück 5.
Jake Cobb
Sie können es mit beheben n and p*(7-p!=n!=p).
Jake Cobb
@JakeCobb Es sollte jetzt mit allen Testfällen funktionieren. Leider ist es jetzt 2 Bytes länger :(
notjagan
Was für eine clevere Verwendung von Reduzieren, um jeden Wert an den nächsten Schritt weiterzugeben.
22.
9

Python, 44 Bytes

lambda x:all(0<a^b<7for a,b in zip(x,x[1:]))

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 111Basis 2 gehört und unsere Zahlen höchstens 3 Binärziffern haben. Für die Gleichheit, a^b == 0wenn und nur wenn a == b. Auch haben wir 7-a == 7^awann 0 ≤ a ≤ 7und damit a^b == 7wenn und nur wenn a == 7^b == 7-b.

Zgarb
quelle
7

05AB1E , 11 9 Bytes

-2 Byte für die clevere Idee von Osable, ein Produkt zu verwenden.

¥¹D7-Á+«P

Probieren Sie es online!

¥           # Push deltas.
 ¹D7-Á      # Push original array, and 7 - [Array] shifted right once.
      +     # Add original to the 7 - [Array] shifted right.
       «    # Concat both.
        P   # Product, if either contain a zero, results in 0, meaning false.

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.
Magische Kraken-Urne
quelle
1
@Emigna dachte nicht, dass es wichtig ist, aber behoben!
Magic Octopus Urn
1
Ich wollte eine Antwort mit Deltas posten, habe aber nicht darüber nachgedacht Á. Nett!
Osable
1
Sie können 2 Bytes speichern, indem Sie die Definition von Wahrheits- / Falschwerten mit verwenden ¥¹D7-Á+«P. Es ergibt 0, wenn das Array eine 0 enthält, oder einen anderen Wert.
Osable
1
@Osable SMAART! Mega kluger Mann, gute Arbeit.
Magic Octopus Urn
6

R 39 37 32 31 Bytes

all(q<-diff(x<-scan()),2*x+q-7)

Probieren 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ückgabe TRUEoder FALSE.

5 Bytes dank Jarko Dubbeldam und ein weiterer Dank an JayCe.

rturnbull
quelle
Durch Speichern der Unterschiede in einer Variablen qund anschließendes Testen 2*x+q-7werden c(0,x)!=c(7-x,0)einige Bytes gespart. Wenn x1 + x2 = 7dann 2*x1 + diff(x1,x2) = 7. Überprüfung 2*x+q - 7prüft dann explizit !=0.
JAD
@ JarkoDubbeldam Tolle Beobachtung, danke! Ich habe die Lösung aktualisiert.
Rturnbull
@ JayCe Danke, ich habe die Antwort jetzt aktualisiert.
Rturnbull
5

05AB1E , 10 Bytes

$ü+7ʹüÊ*P

Verwendet die CP-1252- Codierung. Probieren Sie es online!

Adnan
quelle
1
Argh !, warum habe ich nicht gedacht Ê: P Schön!
Emigna
Hmm, also 1*[] = []doch product(1, []) = 1. Das ist gut zu wissen.
Emigna
@Emigna Eigentlich ist das ein Bug. Das Produkt []sollte 1.
Adnan
Ja, ich hätte mir gewünscht, dass es schon mehrmals so funktioniert hätte. Hier spielt auch die Reihenfolge der Operationen eine Rolle. )1*, )1s*und )1Psind alle []während )1sPist 1.
Emigna
1
@Emigna Ahh, das liegt daran, dass das Produkt von []einen Fehler gibt und verworfen wird. Deshalb gibt es 1. Ich werde versuchen, es zu beheben, wenn ich nach Hause komme.
Adnan
5

R, 49 44 Bytes

!any(rle(x<-scan())$l-1,ts(x)==7-lag(ts(x)))

Liest 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

Billywob
quelle
Sie können kombinieren all(x)&all(y)in ein all(x,y)paar Bytes zu speichern. Sie können auch Schalter rle(x)$l==1auf rle(x)$l-1, die dann eine Menge aller zurückkehren , FALSEwenn xgültig ist; dann schalte das später !=auf ein ==und das allauf !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.)
rturnbull
4

JavaScript (ES6), 43 - 40 Byte

Rückgabe 0/ true.

f=([k,...a],n=0)=>!k||k-n&&7-k-n&&f(a,k)

Testfälle

Arnauld
quelle
Leider beträgt der einfache Port der Retina-Antwort nur 38 Bytes.
Neil
@Neil Ich denke, es ist tatsächlich 37 mittest()
Arnauld
Entschuldigung, ich habe versehentlich eine neue Zeile in den Bytezähler eingefügt.
Neil
4

Perl 6 , 22 Bytes

Regex verwenden:

{!/(.)<{"$0|"~7-$0}>/}

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 (z 5|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:

{all ([!=] 7-.[1],|$_ for .[1..*]Z$_)}

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.
smls
quelle
4

Python, 38 Bytes

f=lambda h,*t:t==()or 7>h^t[0]>0<f(*t)

Eine rekursive Funktion, die Argumente wie annimmt f(1,2,3) .

Dies nutzt das Entpacken von Argumenten, um die erste Zahl hund den Rest in das Tupel zu extrahieren t. Wenn tleer, 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.

xnor
quelle
4

Ruby, 34 Bytes

->s{!s[/[16]{2}|[25]{2}|[34]{2}/]}
GB
quelle
2
Sie könnten #[]stattdessen zwei Bytes mit der Zeichenfolgenmethode abschneiden :->s{!s[/[16]{2}|[25]{2}|[34]{2}/]}
Alexis Andersen,
Ich wusste nicht, dass Sie es mit Regex verwenden können, danke.
GB
4

JavaScript 61 43 Bytes

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

f=a=>a.reduce((i,j)=>i>6|i==j|i+j==7?9:j)<7

C #, 99 67 65 Bytes

Übernimmt die Eingabe als int-Array a

// new solution using linq
bool A(int[]a){return a.Aggregate((i,j)=>i>6|i==j|i+j==7?9:j)<7;}
// old solution using for loop
bool A(int[]a){for(int i=1;i<a.Length;)if(a[i]==a[i-1]|a[i-1]+a[i++]==7)return false;return true;}

Erläuterung:

// method that returns a boolean taking an integer array as a parameter
bool A(int[] a) 
{
    // aggregate loops over a collection, 
    // returning the output of the lambda 
    // as the first argument of the next iteration
    return a.Aggregate((i, j) => i > 6 // if the first arg (i) > than 6
    | i == j      // or i and j match
    | i + j == 7  // or i + j = 7
    ? 9   // return 9 as the output (and therefore the next i value)
    : j   // otherwise return j as the output (and therefore the next i value)
    ) 
    // if the output is ever set to 9 then it will be carried through to the end
    < 7; // return the output is less than 7 (not 9)
}
Erresen
quelle
Ich denke , diese Bedürfnisse in einer Funktion eingewickelt werden, oder vielleicht ein Lambda (nicht C # haben die?) Auch könnten Sie ein paar Bytes durch Rücksendung speichern 0oder 1anstelle von falseodertrue
DJMcMayhem
oh, ok - erster Beitrag zum Code Golf. Ich werde bearbeiten ...
Erresen
Kein Problem. Übrigens, willkommen auf der Seite! :)
DJMcMayhem
@DJMcMayhem Korrigiere mich, wenn ich falsch liege, aber da die Ausgabeanforderung wahr / falsch ist, sind die Ausgabeoptionen sprachabhängig. Dr 1/0 sind nicht wahr / falsch in c #
JustinM - wieder einzusetzen Monica
@Phaeze Du hast Recht, dass sie nicht wahr / falsch sind, sondern die Standard-IO-Regeln meta.codegolf.stackexchange.com/questions/2447/… Sie mit Exit-Codes ausgeben können und dass Funktionen auf die gleiche Weise wie ausgeben können Programme. Bei Bedarf wechsle ich wieder zu Booleanern, aber es kostet mich ein paar Bissen
Erresen
3

> <> (Fisch) 47 Bytes

0:i:1+?!v\!
   0n;n1< >
!?-{:-"0"/^
!? -{-$7:/^

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.

Blaugrüner Pelikan
quelle
3

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

(())                # push a 1 to get this loop started
{{}                 # loop through all pairs, or until 2 are equal
(({}<>)<>[({})])    # pop t, push t on the other stack, and t - s on this one
}{}                 # end loop and pop one more time
([])                # push the height of the stack
{                   # if the height isn't 0 (there were equal numbers)...
{{}}<>              # pop everything from this stack and switch
}                   # end if
{{}                 # for every pair on the stack: pop the height and...
({}({})<>)<>        # push t + s on the other stack leaving s on this one
([][()])            # push the height - 1
}                   # end loop when there is only 1 number left
{}(<{}>)<>          # pop t, pop s, push 0 and switch stacks
(([]))              # push the height twice
{                   # loop through every pair
{}{}                # pop the height and what was t - 7
({}[(()()()){}()])  # push t - 7
{<>}<>              # if t is not 0 switch stacks and come come back
                    # if t is 0 (ie, there was a pair that added to 7) just switch once
([][()])            # push height - 1
}                   # end loop
({}{})              # push t + s (either 0 + 0 or 0 + -7)
Riley
quelle
3

MATLAB, 30 Bytes

@(a)all(diff(a)&movsum(a,2)-7)
rahnema1
quelle
3

PHP, 63 Bytes

for($d=$argv[$i=1];$c=$argv[++$i];$d=$c)$d-$c&&$d+$c-7?:die(1);

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

for($d=($s=$argv[1])[0];$c=$s[++$i];$d=$c)$d-$c&&$d+$c-7?:die(1);
Titus
quelle
3

PowerShell , 57 44 41 Byte

( Durchgestrichen 44 ist immer noch regulär 44 )

0-notin($args|%{7-$_-$l-and$l-ne($l=$_)})

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 $argsziffernweise. Jede Ziffer, überprüfen wir , dass die $last Ziffer -not equal der aktuellen Ziffer $_, und das 7-$_-$list eine Zahl von Null (was truthy). Diese Booleschen Ergebnisse werden in Parens eingekapselt und unter Gegenprüfung in den rechten Operanden des -notinOperators eingespeist 0. Mit anderen Worten, wenn Falseirgendwo in der Schleife ein Wert vorhanden ist , -notinwird 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 -andin PowerShell ausführlich sind. Naja.

AdmBorkBork
quelle
3

Verarbeitung, 93 92 90 Bytes

Geändert || zu | : 1 Byte gespeichert dank @ClaytonRamsey

Begonnen rückwärts zu zählen: 2 Bytes gespart dank @IsmaelMiguel

int b(int[]s){for(int i=s.length;--i>0;)if(s[i-1]==s[i]|s[i-1]==7-s[i])return 0;return 1;}

Nimmt die Eingabe als Array von Ints, die Ausgabe 1als true oder0 falsch aus.

Ungolfed

int Q104044(int[]s){
  for(int i=s.length;--i>0;)
    if(s[i-1]==s[i]|s[i-1]==7-s[i])
      return 0;
  return 1;
}
Kritixi Lithos
quelle
Normalerweise erlaubt Java | anstelle von || Wenn Sie ein Byte speichern möchten.
Clayton Ramsey
@ClaytonRamsey Ich weiß nicht, warum ich nicht daran gedacht habe, danke!
Kritixi Lithos
Ich habe einen anderen gefunden. Sie könnten die Verwendung von Retouren mit dem tertiären Betreiber
Clayton Ramsey,
@ClaytonRamsey Das return 0steht in der if-Anweisung, während dies return 1nicht der Fall ist. Ich sehe nicht, wie das möglich ist, wenn Sie keine andere Idee haben
Kritixi Lithos
2
Golfed 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.
Ismael Miguel
3

C 47 44 Bytes

F(char*s){return!s[1]||(*s^s[1])%7&&F(s+1);}

Nimmt eine Folge von Ziffern (oder ein nullterminiertes Array von Bytes)

Erläuterung

F(char*s){

gemäß dem Standardrückgabetyp intwird impliziert. (4 Bytes sparen)

return Bedingungslose Rückgabe, da dies eine rekursive Funktion ist

Verwenden 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 falsch

F(s+1)) Überprüfen Sie den Rest der Zeichenfolge auf die gleiche Weise

dieser verwirrende Ausdruck

*s ist das erste Zeichen s[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])%7ist Null für fehlerhafte Eingaben und andernfalls ungleich Null, also falsch, wenn diese beiden Zeichen fehlerhaft sind, und andernfalls wahr

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

Jasen
quelle
1
Über dein !((*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.
Nmjcman101
2

Python, 71 Bytes

f=lambda s:len(s)<2or(s[0]!=s[1]and int(s[0])!=7-int(s[1]))and f(s[1:])

Verwendet einen rekursiven Ansatz.

Erläuterung:

f=lambda s:                                                              # Define a function which takes an argument, s
           len(s)<2 or                                                   # Return True if s is just one character
                      (s[0]!=s[1]                                        # If the first two characters matches or...
                                 and int(s[0])!=7-int(s[1])              # the first character is 7 - the next character, then return False
                                                           )and f(s[1:]) # Else, recurse with s without the first character
Loovjo
quelle
Sagen wir, die Eingabe ist eine Liste von Ints, und dann brauchen Sie die Casts nicht.
Jasen,
2

MATL , 9 Bytes

dG2YCs7-h

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

d     % Take input implicitly. Consecutive differences
G     % Push input again
2YC   % Overlapping blocks of length 2, arranged as columns of a matrix
s     % Sum of each column
7-    % Subtract 7, element-wise
h     % Concatenate horizontally. Implicitly display
Luis Mendo
quelle
Ist es möglich / beabsichtigt, einige neue MATLAB-Funktionen zu MATL hinzuzufügen?
rahnema1
@ rahnema1 Ja, es gibt einige Funktionsnamen, die derzeit nicht verwendet werden. Ich neige jedoch dazu, selektiv zu sein und nur diejenigen hinzuzufügen, von denen ich denke, dass sie häufig verwendet werden. Wenn Sie Vorschläge haben, können wir diese im MATL-Chatroom diskutieren :-)
Luis Mendo
@ rahnema1 Wenn du daran denkst movsum, gibt es schon conv2(was beinhaltet conv); siehe Y+undZ+
Luis Mendo
2

C # (mit Linq) 90 81 73 71 69 68 Bytes

using System.Linq;n=>n.Aggregate((p,c)=>p<9|c==p|c==103-p?'\b':c)>9;

Erläuterung:

using System.Linq;           //Obligatory import
n=>n.Aggregate((p,c)=>       //p serves as both previous character in chain and error flag
    p<9                      //8 is the error flag, if true input is already invalid            
        |c==p            
            |c==103-p        //103 comes from 55(7) + 48(0)
                ?'\b'       //'\b' because it has a single digit code (8)
                    :c)      //valid so set previous character, this catches the first digit case as well
                        >8;  //as long as the output char is not a backspace input is valid
JustinM - Setzen Sie Monica wieder ein
quelle
2

C, 81 Bytes, war 85 Bytes

int F(int *A,int L){int s=1;while(--L)s&=A[L]!=A[L-1]&A[L]!=(7-A[L-1]);return s;}

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.

user230118
quelle
int Ist zu Beginn optional, können Sie 4 Bytes einsparen.
Jasen
int s=1;kann wie s=1;für ein anderes 4.
nmjcman101
2

Haskell, 37 Bytes

f(a:b:c)=a+b/=7&&a/=b&&f(b:c)
f _=1<2

Anwendungsbeispiel: f [1,5,2]-> False.

Einfache Rekursion. Basisfall: Einzelelementliste, die zurückgibt True. Rekursive Fall: lassen aund bdie ersten beiden Elemente der Eingabeliste und werden cden Rest. Alle folgenden Bedingungen müssen erfüllt sein:a+b/=7 , a/=bund der rekursive Aufruf mit agesunken.

nimi
quelle
2

JavaScript, 40 Bytes

f=i=>i.reduce((a,b)=>a&&a-b&&a+b-7&&b,9)

&&Nutzt die JavaScript-Funktion, die den letzten analysierten Wert zurückgibt (entweder den falschen oder den letzten Ausdruck). 0wird 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.

JackW
quelle
1

Groovy, 61 Bytes

{i=0;!(true in it.tail().collect{x->x in [7-it[i],it[i++]]})}
Magische Kraken-Urne
quelle
1

Python 2, 58 Bytes

lambda x:all(x[i]!=x[i+1]!=7-x[i]for i in range(len(x)-1))
Noodle9
quelle
1

Batch, 102 Bytes

@set s=%1
@set/an=0%s:~0,2%,r=n%%9*(n%%7)
@if %r%==0 exit/b
@if %n% gtr 6 %0 %s:~1%
@echo 1

Ungolfed:

@echo off
rem grab the input string
set s=%1
:loop
rem convert the first two digits as octal
set /a n = 0%s:~0,2%
rem check for divisibility by 9 (011...066)
set /a r = n %% 9
rem exit with no (falsy) output if no remainder
if %r% == 0 exit/b
rem check for divisibility by 7 (016...061)
set /a r = n %% 7
rem exit with no (falsy) output if no remainder
if %r% == 0 exit/b
rem remove first digit
set s=%s:~1%
rem loop back if there were at least two digits
if %n% gtr 6 goto loop
rem truthy output
echo 1
Neil
quelle