Wir haben einige neue Sheriff- Moderatoren in der Stadt, Mego und DJMcMayhem . Wir brauchen eine Herausforderung, um sie für ihre neuen Positionen angemessen zu ehren.
als Maus über die Profile : Die Benutzer-IDs lauten und . Wenn Sie ziffernweise subtrahieren, werden Sie etwas ziemlich Aufregendes bemerken (natürlich unter Berücksichtigung der absoluten Unterschiede):45941
3|1|7|1|6
4|5|9|4|1
-+-+-+-+- (-)
1|4|2|3|5
Die vom obigen Algorithmus generierte Zahl ist . Diese Ganzzahl hat etwas Besonderes: Sie besteht nur aus aufeinanderfolgenden Ziffern, die in aufsteigender Reihenfolge sortiert sind, aber genau eine der Ziffern ist nicht richtig platziert - .4
Wir werden ein Paar positiver Ganzzahlen als DJMcMego-Paar bezeichnen, wenn die ziffernweisen absoluten Differenzen aufeinanderfolgende Ganzzahlen sind, die in aufsteigender Reihenfolge sortiert sind, von denen jedoch genau eine nicht dort ist, wo sie hingehören. Das heißt, es ist möglich, genau eine Ziffer des Ergebnisses der ziffernweisen Subtraktion an eine andere Position zu verschieben, so dass die erhaltene Ganzzahl nur aufeinanderfolgende Ziffern aufweist, die in aufsteigender Reihenfolge sortiert sind.
In unserem obigen Beispiel ist das Paar ein DJMcMego- Paar, denn wenn zwischen und verschoben wird , ist das Ergebnis , was die Kriterien erfüllt. Beachten Sie, dass die Ziffern der resultierenden Nummer nicht bei , sondern nur fortlaufend sein sollten. Wenn einer sich nicht sicher ist, welche Entscheidung er treffen soll, kann er sich immer auf die Hilfe des anderen verlassen, um die Dinge zu regeln.4 3 5 12345 1
Ihre Aufgabe ist es, einen Wahrheits- / Falschwert auszugeben, abhängig davon, ob es sich bei einem als Eingabe angegebenen Paar positiver Ganzzahlen um ein DJMcMego-Paar handelt.
Es wird garantiert, dass und dieselbe Anzahl von Ziffern haben, immer mindestens 4.b
Sie können die Ganzzahlen in jedem vernünftigen Format verwenden (z. B. native Ganzzahlen, Zeichenfolgen, Ziffernlisten usw.).
Sie können in jeder Programmiersprache antreten und über jede Standardmethode Eingaben und Ausgaben vornehmen. Beachten Sie jedoch, dass diese Lücken standardmäßig verboten sind. Dies ist Codegolf , daher gewinnt die kürzeste Übermittlung (in Bytes) für jede Sprache .
Testfälle
a, b -> Output
31716, 45941 -> Truthy
12354, 11111 -> Truthy
56798, 22222 -> Truthy
23564, 11111 -> Truthy
1759, 2435 -> Truthy
12345, 11111 -> Falsy
3333, 2101 -> Falsy
22354, 22222 -> Falsy
31717, 45941 -> Falsy
14325, 11111 -> Falsy
89789, 78865 -> Falsy
14954, 61713 -> Falsy
25631, 11114 -> Falsy
Oder in einem anderen Format .
quelle
25631, 11114
als Beispiel hinzufügen . Die Unterschiede sind,14523
die einige der aktuellen ProgrammeAntworten:
05AB1E , 18 Bytes
Probieren Sie es online!
quelle
1
die einzige wahrheitsgemäße Zahl in 05AB1E ist. Hätte Herr Xcoder mich nicht darüber informiert, hätte ich die Gültigkeit dieser Lösung in Frage gestellt. Können Sie auch eine Erklärung hinzufügen, wenn Sie Zeit haben?C (gcc) ,
259258254253250248233 Bytesfor(...;l++)b*=B[l]==-~B[l-1];
auffor(...;b*=B[l]==-~B[~-l++]);
(höchstwahrscheinlich unter Berufung auf undefiniertes Verhalten, da zuerst ausgewertet undB[l]
anschließend-~B[~-l++]
).Dreifünf Bytes gespeichert .Probieren Sie es online!
Erläuterung (248-Byte-Version)
Probieren Sie es online!
quelle
j=0
wie im 41. Zeichenj
den Wert verlassen , der0
nach mehreren Aufrufen nicht unbedingt der Fall ist. Eine Funktion sollte jedoch beliebig oft aufrufbar sein und trotzdem die Herausforderung lösen ( relevanter Metapost ).j
vor der Schleife den Wert Null definieren und so ein Byte speichern.f(char*A,char*B){
-> rasierenf(A,B)char*A,*B;{
.JavaScript (ES6), 130 Byte
Übernimmt die Eingabe als zwei Ziffernfelder in der aktuellen Syntax
(a)(b)
. Gibt einen Booleschen Wert zurück.Probieren Sie es online!
quelle
SWI-Prolog, 157 Bytes
Nicht sehr kurz, aber das Problem schien für deklarative Prädikate, variable Bindung und Rekursion, dh Prolog, besonders gut geeignet zu sein :)
Rufen Sie an mit zB
n([3,1,7,1,6],[4,5,9,4,1]).
Erläuterung: Verschieben Sie ein Element in beiden Listen an eine neue Position (mithilfe des integrierten SWI-Prolog
nth0
) und überprüfen Sie, ob die Unterschiede der neuen Listen aufeinanderfolgend sind.quelle
J , 27 Bytes
−8 Bytes dank FrownyFrog
Probieren Sie es online!
Anfangslösung:
J , 35 Bytes
Probieren Sie es online!
Erläuterung
Übernimmt Ziffernlisten als Eingabe
|@-
Findet den absoluten Unterschied zwischen den Ziffern der Listen1=1#.0<2-/\]
Prüft, ob nur eine Ziffer falsch ist. Zuerst finde ich die Unterschiede zwischen allen Paaren benachbarter Ziffern und überprüfe, ob nur eines davon positiv ist.*
Multiplizieren Sie das Ergebnis des obigen Tests (1 oder 0) mit dem folgenden Test:1=[:*/2-/\\:~
Sind alle Ziffern aufeinanderfolgend? Ich sortiere die Liste nach unten, nehme die Differenzen für alle Paare benachbarter Ziffern, multipliziere sie und überprüfe, ob sie gleich 1 sindquelle
25634 11111
(wie bei vielen anderen Einsendungen)Jelly , 14 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Japt , 18 Bytes
Nimmt Eingaben als zweistellige Arrays, Ausgaben
0
fürtrue
oder eine andere Zahl für anfalse
.Probieren Sie es aus oder überprüfen Sie alle Testfälle
Erläuterung
Und um diesen Prozess an einigen weiteren Testfällen durchzugehen:
quelle
25634 11111
(wie bei vielen anderen Einsendungen)Perl,
121118 BytesTest in Bash:
quelle
25634 11111
(wie bei vielen anderen Einsendungen)Java 8 ,
245227223194188 BytesVielen Dank an Kevin für das Speichern von ~ 29 Bytes
Nochmals vielen Dank an Kevin für weitere 6 Bytes
Befolgte dasselbe Muster, das Galen für seine J-Antwort aufgestellt hatte.
Probieren Sie es online!
quelle
z->{int l=z.length/2,c[]=new int[l],i=0,j=0,d[];for(;i<l;)c[i]=Math.abs(z[i]-z[i+++l]);java.util.Arrays.sort(d=c.clone());for(i=0;i<l-1;j+=d[i+1]-d[i++]!=1?1:0)j+=c[i]-c[i+1]>0?1:0;return j==1;}
Ich habe dasint
undint[]
am Anfang kombiniert ; verwendetl=z.length/2
einmal und wiederverwendenl
statt 4 - mal; geändertif(...)j++
in,j+=...?1:0
so dass sie in die Schlaufen eingefügt werden können und die Klammern und das zweite Semikolon entfernt werden können; entferne dasi++
und mache++
direkt am letzteni
in der Schleife; etc.z->{int l=z.length/2,c[]=new int[l],i=0,j=0;for(;i<l;)c[i]=Math.abs(z[i]-z[i+++l]);java.util.Arrays.sort(z=c.clone());for(i=0;i<l-1;j+=z[i]-z[i-1]!=1?1:0)j+=c[i]-c[++i]>0?1:0;return j==1;}
. Die nicht mehr benötigtend[]
Eingaben wurden entfernt und wiederverwendetz
. Geändertj+=c[i]-c[i+1]?1:0;
undj+=d[i+1]-d[i++]!=1?1:0
zuj+=c[i]-c[++i]?1:0;
undj+=z[i]-z[i-1]?1:0
. +1 von mir. Gute Antwort! :)25634 11111
(wie bei vielen anderen Einsendungen)Netzhaut , 102 Bytes
Probieren Sie es online! Link enthält Testfälle. Gibt die Anzahl der Wege zurück, auf denen Ziffern verschoben werden können, um eine aufsteigende Reihenfolge zu erreichen. Dies ist 2 für einen direkten Tausch, da in diesem Fall eine Ziffer an der anderen vorbei verschoben werden kann. Erläuterung:
Koppeln Sie die Ziffern.
In Unary konvertieren.
Nehmen Sie den Unterschied, aber addieren Sie dann 1, da die Arbeit mit Null in Retina schwierig ist.
Listen Sie alle Ziffernfolgen auf, die durch Verschieben genau einer Ziffer erhalten werden.
Überprüfen Sie, ob aufeinanderfolgende Ziffern vorhanden sind.
quelle
Perl 5 , -F
878483 BytesZählung nach alter Art: 86 Bytes (
+3
für-F
)Geben Sie die Zahlen als 2 Zeilen auf STDIN an, die letzte Zeile ohne abschließenden Zeilenumbruch.
Druckt die Differenzzeichenfolge bis zu zweimal für wahr, nichts für falsch
Die lange
A0123456789
Saite ist echt nervig.Probieren Sie es online!
Ich bin mir sicher, ob dies
79
als gültig gilt:Es stürzt bei einem gültigen Paar ab, sodass Sie einen Exit-Code ungleich Null erhalten. Es macht nichts, wenn es kein Paar ist, und wird mit Exit-Code 0 beendet. Ich weiß, dass die Rückgabe des Ergebnisses über Exit-Code zulässig ist, aber sind sie richtig wahr und falsch oder tatsächlich umgekehrt (denn die Shell
0
ist wahr)?quelle
Ruby ,
124 113 9995 BytesProbieren Sie es online!
quelle
25634 11111
(wie bei vielen anderen Einsendungen)+1
:-)Pyt ,
20 bis18 BytesProbieren Sie es online!
Erläuterung:
quelle
25634 11111
(wie bei vielen anderen Einsendungen)Add ++ , 105 Bytes
Probieren Sie es online!
Definiert eine Lambda-Funktion, die zwei Ziffernlisten als Eingabe verwendet. Gibt für DJMcMego-Paare eine positive ganze Zahl aus, die durch 24 1 teilbar ist, andernfalls 0 .
1: Wenn dies zu restriktiv ist, wird auch eine positive Ganzzahl für DJMcMego-Paare und ansonsten 0 ausgegeben
Wie es funktioniert
Hier führen wir 4 Überprüfungen durch, um festzustellen, ob die Eingabe gültig ist. Die Teile des Codes, die diese Prüfungen durchführen, sind
Hier nehmen wir die Liste der absoluten Ziffernunterschiede und zählen dann die Anzahl der überlappenden Paare, die in absteigender Reihenfolge sortiert sind. Jedes DJMcMego-Paar ergibt ein Ergebnis von 1 , aber diesbezüglich sind sie nicht eindeutig. Wir speichern auch die absoluten Ziffernunterschiede der Eingänge, um später Bytes zu sparen. Dieses Array wird durchgehend mit A bezeichnet .
Als nächstes nehmen wir die elementweisen Unterschiede zwischen A und A sortiert, bevor wir behaupten, dass mindestens einer dieser Unterschiede negativ ist.
Drittens prüfen wir, ob das Paar [1, 2] in den Vorwärtsinkrementen von A enthalten ist . Dies prüft, ob an mindestens einer Position von A sortiert ist, was ein Kriterium für DJMcMego-Paare ist.
Bei unserer letzten Überprüfung wird angenommen, dass das zweite Element von A niemals 0 ist . Damit ein Paar, X und Y , ein DJMcMego-Paar ist, können wir davon ausgehen, dass ihr A immer eindeutig ist, da ein Array mit Duplikaten niemals durch Austauschen eines einzelnen Werts mit einem anderen konsekutiv gemacht werden kann.
Schließlich überprüfen wir , dass die ersten drei dieser Tests zurück 1 , und dass der vierte Wert zurückgegeben x , so daß x ≠ 0
Ein schrittweises Durchlaufen des Codes ist wie folgt
quelle
R ,
110 10684 BytesProbieren Sie es online!
@ JayCe mit einer lächerlichen 22-Byte-Speicherung!
Das Arbeitspferd ist hier
adist
, das einen "verallgemeinerten Levenshtein-Bearbeitungsabstand" zwischen zwei Saiten angibt. Standardmäßig ist der Abstand die Anzahl der minimalen Einfügungen, Löschungen und Ersetzungen, die erforderlich sind, um eine Zeichenfolge in eine andere umzuwandeln. Aberadist
Sie können Dinge wie gewünscht gewichten. Deshalb habe ich jede Ersetzung gewichtet, um 9 zur Distanz anstatt 1 hinzuzufügen. Dadurch wird der Algorithmus effektiv gezwungen, nur nach Einfügungen und Löschungen zu suchen.Dieser Code akzeptiert Vektoren von ganzen Zahlen, berechnet die absoluten elementweisen Differenzen und übersetzt das Ergebnis so, dass es bei 1 beginnt und es aufruft
w
.Dann wird der benutzerdefinierte gewichtete Levenshtein-Abstand zwischen dem
w
Einfügen einer Zeichenfolge und der Zeichenfolge"1234..."
(tatsächlich utf-8"\001\002\003\004...
",adist
aber egal.) Mit der gleichen Anzahl von Zeichen wie berechnetw
.Die Zeichenfolge kann nur dann genau eine Stelle haben, wenn Sie eine Löschung und eine Einfügung mit einem Abstand von 2 vornehmen.
quelle
paste0
kann nur sein,paste
da es nur einen Eingang gibt.p=intToUtf8
?w=z-min(z)+1)adist(p(1:max(w))
mit ,w=z-min(z))adist(p(0:max(w))
aber es funktioniert nicht , daintToUtf8(\000)
NULL ist.JavaScript,
137136135134132123 BytesNimmt Eingaben als zwei Ziffernfelder in der aktuellen Syntax, Ausgaben
0
fürtrue
und jede andere Zahl fürfalse
.Testfälle
quelle
[...u].sort(y=0)
ist ungültiges Javascript, das Argument für die Sortierung muss eine Funktion sein25634 11111
(wie bei vielen anderen Einsendungen)" - Ton HospelPython 2 ,
116119106 BytesVielen Dank an Herrn Xcoder für den
116->84
Schnitt, aber ich habe festgestellt, dass ich die Kriterien für die "fortlaufende Nummer" verpasst habe. Zu diesem Zweck werden 26 Bytes hinzugefügt :(Danach noch -1 Danke Mr. Xcoder und -13 Danke ovs
Probieren Sie es online!
Das folgende behebt das
25634 - 11111
Problem, aber mit doppelter Länge (211206145142B) ... Golfen ...Probieren Sie es online!
Und Glückwunsch an neue Moderatoren :)
Erläuterung:
Erzeugt die Liste der absoluten Differenzen der Ziffern.
Berechnet den Versatz von der richtigen Position.
Wenn die Sequenz nicht kontinuierlich ist, ist die Versatzsumme "normalerweise" nicht 0. Aber selbst wenn sie gleich 0 ist, werden sie von den nächsten ausgeblendet.
Nur 0 oder 1 haben einen absoluten Versatz größer als 1 (der mit der falschen Position und 0 ist in dem Fall wie
1,2,3,5,4
)Blockiert den Fall, wenn sich alle Zahlen an der richtigen Position befinden
quelle
m([3,3,3,3],[2,1,0,1])
(kehrt zurückTrue
) Tio25634 11111
(wie bei vielen anderen Einsendungen)Haskell ,
182163162132 BytesÜbernimmt die Eingabe als Ziffernliste. Mit der Hilfsfunktion
p
, mit der eine Liste auf alle möglichen Arten in zwei Teile aufgeteilt werden kann, wird ein Element herausgenommen und erneut an einer anderen Stelle eingefügt.Probieren Sie es online!
quelle