Herausforderung
Bestimmen Sie anhand einer gegebenen Liste, ob das Gruppieren der Liste in Reihen von auf- und absteigenden Elementen zu einer Liste von Listen gleicher Größe führt.
Mit anderen Worten, "Wendepunkte" der Liste sind gleichmäßig verteilt.
Beispiel
Hier ist ein Beispiel: 0, 3, 7, 5, 2, 3, 6
0, 3, 7
erhöht, 7, 5, 2
verringert und 2, 3, 6
erhöht. Deshalb ist das wahr.
Ein anderes Beispiel: 1, 4, 6, 8, 5, 3, 5, 7, 9
1, 4, 6, 8
erhöht, 8, 5, 3
verringert und 3, 5, 7, 9
erhöht. Deshalb ist das falsch.
Regeln und Spezifikationen
- Keine benachbarten Elemente werden gleich sein
- Es kann davon ausgegangen werden, dass alle Nummern innerhalb des angemessenen Nummernbereichs Ihrer Sprache liegen
- Sie können davon ausgehen, dass alle Zahlen Ganzzahlen sind, wenn dies Ihnen beim Golfspielen hilft
- Das ist Code-Golf , also gewinnt die kürzeste Antwort
- Eingabe als Liste in einer angemessenen Darstellung und Ausgabe als wahrer / falscher Wert. Die beiden Werte müssen konsistent sein.
Testfälle
Input -> Output
1, 3, 5, 8, 6, 4, 2, 3, 5, 7, 6, 4, 2, 5, 7, 9, 6, 4, 2 -> True
1, 3, 5, 7, 6, 4, 5, 7, 9, 8, 6, 4, 2, 3, 5 -> False
2, 3, 6, 4, 2, 3, 7, 5, 3, 4, 6 -> True
3, 6, 4, 8, 5, 7, 3, 5, 2 -> True
8 -> True
1, 3, 5, 7 -> True
4, 5, 7, 6, 8, 9 -> False
6, 4, 2, 3, 5, 4, 2 -> True
8, 5, 3, 2, 4, 6, 5, 3, 2, 5, 7 -> False
Hinweis : Es kann sein, dass Sie nicht davon ausgehen, dass alle Zahlen einstellig sind (es sei denn, Ihre gesamte Sprache kann damit umgehen). Die Testfälle spiegeln dies wider, nur weil es für mich einfacher ist, die Fälle auf diese Weise einzugeben: P Hier sind einige Testfälle mit Zahlen außerhalb dieses Bereichs:
1, 5, 10, 19, 15, 13, 8, 13, 18, 23, 19, 18, 14 -> True
15, 14, 17, 16, 19, 18 -> True
12, 16, 19, 15, 18, 19 -> False
quelle
1, 2, 3, 2
eine gültige Eingabe, und wenn ja, wahr oder falsch? In diesem Beispiel würde der nächste Wert, der eine 1 ist, es wahr machen, aber eine 3 würde es falsch machen.Antworten:
MATL ,
109 BytesProbieren Sie es online!
Dank Luis Mendo ein Byte gespart!
Erläuterung:
Angenommen, die Eingabe lautet
[0, 3, 7, 5, 2, 3, 6]
:quelle
Gelee , 6 Bytes
Probieren Sie es online!
Dank Adnan 1 Byte gespart !
Wie es funktioniert
Während Golf spielen, entdeckte ich ein paar coole, mehr Alternativen:
IṠŒgL€E
,IṠŒrṪ€E
(Anwendungen lauflängen kodieren statt).quelle
IṠŒgḂE
sollte ein Byte speichernA
(absoluter Wert) ersetzenḂ
oder gibt es einen Trick, den ich nicht versteheḂ
?Oktave ,
5450 BytesProbieren Sie es online!
Erläuterung
quelle
Wolfram Language (Mathematica) , 38 Byte
Probieren Sie es online!
Erläuterung
quelle
Equal@@(1^Split@Sign@Differences@#)&
ist 2 Byte kürzer undEqual@@Im@Split@Sign@Differences@#&
1 Byte kürzer.Arg
stattdessen einSign
weiteres Byte.05AB1E ,
87 BytesProbieren Sie es online!
-1 danke an Adnan.
quelle
¥0.SγaË
sollte ein Byte speicherna
kann ich nicht in den Dokumenten finden.is_letter(a)
???C (GCC) ,
143140138136135132 Bytesr
zum Speichern des Rückgabewerts der Funktion, anstatt mit zu beendenreturn
.int A[]
aufint*A
(mit einem Zeiger anstelle eines Arrays).f(int*A,int a)
zuf(A,a)int*A;
.if(d!=...
zuif(d-...
.;j++...j+1
zu;...++j
.Probieren Sie es online!
Definiert eine Funktion,
f
die jedes Element in der Liste außer dem letzten betrachtet und die Beziehung dieses Elements zum nächsten Element in der Liste bestimmt. Die Anzahl aufeinanderfolgender gleicher Vergleiche wird gespeichert, wenn die Beziehung zum ersten Mal umgedreht wird. Alle Läufe nach dem ersten Lauf, deren Länge von der gespeicherten Länge abweicht, führen zu einer falschen Ausgabe. Am Ende wird die Beziehung des vorletzten Elements zum letzten Element so betrachtet, dass sie mit dem Rest der Liste übereinstimmt.quelle
f(A,a)int*A;
anstelle von verwendenf(int*A,int a)
.Pyth , 11 Bytes
Probieren Sie es hier aus.
quelle
Python 2 ,
10710510397969491 BytesProbieren Sie es online!
Python 3 ,
10210097 BytesProbieren Sie es online!
quelle
{...}
stattdessen verwendenset(...)
, um 3 Bytes zu speichernSchale , 7 Bytes
Probieren Sie es online!
Wie das geht
Einige süße Alternativen:
quelle
JavaScript (ES6), 81 Byte
Das scheint zu lang. Vermutlich fehlt mir hier etwas ... Rückgabe entweder
true
oderundefined
.Sucht nach einer Periode 0 <p <a.Länge, so dass alle Richtungsänderungen bei jedem p- Element auftreten.
Testfälle
Code-Snippet anzeigen
quelle
Python 2 , 96 Bytes
Probieren Sie es online! Ausgabe über Exit-Code: crash (1) ist falsch, clean exit (0) ist wahr.
Python 2 , 106 Bytes
Probieren Sie es online!
quelle
(...)[:l]<d
das Gegenteil von sein kann(...)[:l]==d
.Haskell ,
797877 BytesProbieren Sie es online!
Eine Liste gegeben
s
,zipWith(<)s$tail s
Tests für jedes Element , ob er kleiner ist als sein Nachfolger, zBs=[2,3,6,4,2,3,7,5,3]
Ausbeuten[True,True,False,False,True,True,False,False]
. Danngroup
läuft die gleichen Elemente zusammen:[[True,True],[False,False],[True,True],[False,False]]
. Um zu überprüfen , ob alle diese Listen die gleiche Länge haben, ersetzen ihre Elemente mit1
( siehe diesen Tipp ) nachgebend[[1,1],[1,1],[1,1],[1,1]]
und prüfen , ob alle Elemente in den Schwanzt
dieser Liste den Kopf gleichh
:all(==h)t
.Dieser Ansatz funktioniert nicht für Singleton - Listen, sondern weil die immer wahr sind, können wir sie in ihrem eigenen Fall behandeln:
g[_]=1<3
.quelle
R , 57 Bytes
Probieren Sie es online!
quelle
Japt , 15 Bytes
Probieren Sie es online!
Erläuterung
quelle
R, 36 Bytes
diff
berechnet die aufeinanderfolgenden Differenzen undsign
zerquetscht diese dann auf ± 1.rle
Dann codiert sie die Lauflänge. Alle Elemente davonrle
sollten gleich sein, dh der Vektor hat die Standardabweichung Null.!
erzeugt dann die richtige logische Ausgabe.quelle
Haskell (Lambdabot), 59 Bytes
Basierend auf der Antwort von @ Laikoni
quelle
g_=1<3
.Java (OpenJDK 8) ,
437302256188 BytesProbieren Sie es online!
quelle
Clojure, 70 Bytes
Gibt
1
als wahr undnil
(AKA null) als falsch zurück.quelle
Java (OpenJDK 8) , 135 Byte
Probieren Sie es online!
Erklärungen
quelle
Python 2 ,
11099 Bytes-11 Bytes dank @Lynn
Probieren Sie es online!
quelle
exec"d=map(cmp,d[:-1],d[1:]);"*2
Ruby , 57 Bytes
Probieren Sie es online!
quelle