Intro
Jedes Jahr veranstaltet Dyalog Ltd. einen Studentenwettbewerb. Die Herausforderung besteht darin, guten APL-Code zu schreiben . Dies ist eine sprachunabhängige Code-Golf- Ausgabe des diesjährigen achten Problems.
Ich habe die ausdrückliche Erlaubnis, diese Herausforderung hier vom ursprünglichen Autor des Wettbewerbs zu posten. Sie können dies jederzeit überprüfen, indem Sie dem angegebenen Link folgen und den Autor kontaktieren.
Problem
Schalten Sie bei einer Booleschen * Liste alle Wahrheiten nach der ersten Wahrheit aus.
Keine Wahrheiten? Kein Problem! Senden Sie einfach die Liste unverändert zurück.
Beispiele
[falsy,truthy,falsy,truthy,falsy,falsy,truthy]
→ [falsy,truthy,falsy,falsy,falsy,falsy,falsy]
[]
→ []
[falsy,falsy,falsy,falsy]
→ [falsy,falsy,falsy,falsy]
* Alle deine Wahrheiten müssen identisch sein, und alle deine Fälschungen müssen identisch sein. Dies schließt die Ausgabe ein.
Antworten:
Python 2 , 35 Bytes
Probieren Sie es online! Eingabe und Ausgabe sind Zeilen mit Wahr / Falsch.
Basierend auf Dennis 'Lösung . Definiert die Variable neu
True
, dieFalse
nach dem Auftreten einerTrue
Eingabe vorhanden sein soll. Auf diese Weise werden alle weiteren Eingaben vonTrue
ausgewertetFalse
und als solche gedruckt.Die Neudefinition ist
True&=b<1
, dhTrue = True & (b<1)
. Wenn die Eingabeb
istTrue
, dann(b<1)
ist False (seitTrue==1
), soTrue
wirdFalse
.quelle
True, False = False, True
.APL , 2 Bytes
Wertet die Funktion "Scannen mit kleiner als" aus. Probieren Sie es online!
Erläuterung
In APL
\
reduziert der Operator (Scan) jedes nicht leere Präfix eines Arrays mithilfe der bereitgestellten Funktion von rechts. Wenn das Array beispielsweise angegeben wird0 1 0
, berechnet es0
(Präfix der Länge 1),0<1
(Präfix der Länge 2) und0<(1<0)
(Präfix der Länge 2) und fügt die Ergebnisse in ein neues Array ein. Die Klammern stehen rechts. Das Reduzieren von<
von rechts ergibt1
genau, wann das letzte Element des Arrays ist1
und wann der Rest ist0
, also wird das Präfix, das ganz links1
steht, auf1
und die anderen auf reduziert0
.quelle
Aceto ,
1917 Bytes nicht konkurrierendNeue Version (17 Bytes):
Diese neue Version nimmt die Zeichen einzeln auf und wird am besten mit der
-F
Option ausgeführt. Es funktioniert ähnlich, aber nicht identisch mit der vorherigen Lösung:Alte Antwort (19 Bytes):
(Nicht konkurrierend, da ich zwei Fehler im Interpreter beheben musste)
Dies ist die erste Aceto-Antwort, die zeigt, was sie relativ gut kann, würde ich sagen. Die "Listen" sind Eingabeströme mit einer Eingabe pro Zeile, "1" für "wahr" und "0" für "falsch", wobei eine leere Zeichenfolge das Ende der Liste kennzeichnet.
Aceto-Programme laufen auf einer Hilbert-Kurve, die links unten beginnt und rechts unten endet. Zuerst
r
lesen wir eine Zeichenkette,d
duplizieren sie und negieren sie (!
), indem wir leere Zeichenketten in True umwandeln , alles andere in False. Dann gibt es einen bedingten horizontalen Spiegel (|
): Wenn das oberste Element auf dem Stapel wahr ist, spiegeln Sie es horizontal. Dies passiert, wenn die Zeichenfolge leer war. Wenn wir das Spiegeln machen, landen wir auf demX
, was den Dolmetscher umbringt.Andernfalls konvertieren wir die verbleibende Kopie auf dem Stapel in eine
i
nteger-Zahl und führen eine weitere bedingte horizontale Spiegelung durch: Diesmal spiegeln wir, da 1 wahr und 0 falsch ist, wenn wir den (ersten) wahren Wert sehen. Wenn wir nicht spiegeln (wir haben also eine 0 gesehen),p
drucken wir, was sich auf dem Stapel befindet (da der Stapel leer ist, eine Null) und springen zumO
Rigin der Kurve, wo wir begonnen haben, und starten den gesamten Prozess erneut.Wenn wir eine 1 sahen, spiegeln wir und landen auf der
u
, was die Richtung umkehrt, in die wir uns auf der Hilbert-Kurve bewegen.1p
druckt eine 1 und jetzt gehen wir auf dasselbe, wasO
wir gegangen wären, wenn wir eine 0 gesehen hätten, aber da wir uns im "umgekehrten Modus" befinden, ist unser Ursprung unten rechts , also springen wir dorthin.Jetzt
r
lesen wir eine andere Zeichenkette und negieren sie. Wenn die Zeichenfolge leer war und daher das oberste Stapelelement wahr ist,`
wird der nächste Befehl ( ) nicht ignoriertX
, wodurch wir beendet werden.Andernfalls (wenn die Zeichenfolge nicht leer war), werden wir die maskieren
X
und ignorieren. In diesem Fall gehen wir nach links (<
),p
rint 0 (weil der Stapel leer ist) und springen zurück zumO
rigin.quelle
Java8,
2419 BytesHoffe das ist legal; Ich habe den Eindruck, dass die Eingabe / Ausgabe in der Sprache nicht als wahr / falsch bewertet werden muss. Nimmt eine lange als Eingabe und gibt eine als Ausgabe, wobei Einsen wahr und Nullen falsch in der binären Darstellung sind. Zum Beispiel ist die Binärzahl 00101 5 und würde die Binärzahl 00100 zurückgeben, die 4 ist.
Fünf Bytes dank @puhlen
quelle
Long::highestOneBit
Dies ergibt das identische Ergebnis mit einer kürzeren Syntaxjava.lang
Paket wird standardmäßig importiert. Aus der Sprachspezifikation "Eine Kompilierungseinheit hat automatisch Zugriff auf alle in ihrem Paket deklarierten Typen und importiert auch automatisch alle öffentlichen Typen, die im vordefinierten Paket java.lang deklariert sind."Netzhaut , 6 Bytes
Probieren Sie es online!
Die Eingabe ist eine Liste von
0
s (für False) und1
s (für True).Stimmt mit allen
1
überein und ersetzt sie mit Ausnahme der ersten (1>
) durch a0
.quelle
V , 7 Bytes
Probieren Sie es online!
Meine erste V Einreichung! \O/
Wie es funktioniert
quelle
r0
mit<C-x>
denjenigen zu verringern und ein Byte speichern.Haskell , 25 Bytes
Anonyme Funktion, die eine Liste von
Bool
s aufnimmt und zurückgibt .Verwenden Sie als
(foldr(\x l->x:map(x<)l)[])[False,True,False,False]
.Probieren Sie es online!
Wie es funktioniert
x
ist das Element, das der Unterliste vorangestellt werden solll
.False
weniger als vergleichtTrue
, somap(x<)l
wird sich alleTrue
s inl
in ,False
wennx
istTrue
.quelle
Gelee , 4 Bytes
Probieren Sie es online!
Hier ist ein anderer Algorithmus als bei den meisten anderen Golf-Sprachlösungen (obwohl ich nach dem Veröffentlichen festgestellt habe, dass die R-Lösung auch diesen Algorithmus verwendet) und mit dem aktuellen Jelly-Rekordhalter verknüpft.
Erläuterung
Solange alle Elemente links von einem Element 0 sind, entspricht die kumulative Summe bis zu einem Element dem Element selbst. Rechts von der ersten 1 unterscheiden sich die beiden (da wir jetzt die Summe der Elemente ungleich Null links hinzufügen). So
+\=
gibt uns eine Liste mit 1 (dh true) bis einschließlich dem ersten truthy Elemente. Schließlich gibt uns das logische UND mit der ursprünglichen Liste eine 1 nur für das erste wahrheitsgemäße Element.quelle
JavaScript (ES6),
3326 BytesI / O ist in Arrays von 0s und 1s.
quelle
05AB1E , 6 Bytes
Code:
Erläuterung:
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
quelle
1k>sƶ-_
ist eine andere, schlimmer. Dielift
Idee könnte jedoch Potenzial haben.Turing Maschinensimulator , 39 Bytes
Probieren Sie es online!
quelle
Brainfuck , 55 Bytes
Probieren Sie es online!
quelle
Gelee , 4 Bytes
Ein Port meiner 05AB1E Antwort.
Erklärung (Argument α ):
Probieren Sie es online!
quelle
R , 24 Bytes
Probieren Sie es online!
Beispiel:
Für die Eingabe
FALSE TRUE TRUE FALSE
cumsum(T<-scan(,F))==T
zurückkehrtTRUE TRUE FALSE FALSE
. Das F im Scan stellt die logische Eingabe sicher.FALSE TRUE TRUE FALSE
undTRUE TRUE FALSE FALSE
istFALSE TRUE FALSE FALSE
. Eine Single&
führt einen elementweisen Vergleich durch.quelle
Oktave, 23 Bytes
Probieren Sie es online!
Erster Unterschied des kumulativen Maximums der Liste.
quelle
J , 3 Bytes
Definiert ein monadisches Verb. Dies ist eine belanglose Portierung meiner APL-Antwort . Probieren Sie es online!
quelle
Python, 58 Bytes
Wenn
x[i]
false ist, ist die Ausgabe false. Andernfalls wird angegeben, ob das Element das erste Vorkommen in dem Array von sich selbst ist.quelle
PHP, 37 Bytes
quelle
Perl 5, 20 Bytes
Wahrheit ist
1
und Falschheit ist''
(eine leere Zeichenfolge).Erläuterung:
map
Durchläuft Elemente der Liste@_
, die an die Unterroutine übergebenen Argumente, setzt jedes Element lokal auf $ _ und gibt ein Array der Rückgabewerte zurück, die es aus jedem Element berechnet.$_&&!$x++
Ausgänge$_
wenn$_
ist Falsey und!$x++
wenn es truthy. (Beachten Sie, dass && kurzgeschlossen!$x++
ist und erst ausgeführt wird, wenn der erste Wahrheitswert erreicht ist.) Gibt$x++
zurück0
(was falsch ist), wenn es zum ersten Mal ausgeführt wird, und erhöht sich dann jedes Mal (und bleibt somit wahr). Die!
negiert$x++
, und so kehrt truthy sie das erste Mal auftritt und Falsey danach.quelle
sub{...}
).Pyth - 9 Bytes
Probieren Sie es hier aus
quelle
m&!~|Z
.Python 2 ,
4536 BytesEingabe und Ausgabe sind ein Boolescher Wert ( Wahr oder Falsch ) pro Zeile.
Probieren Sie es online!
quelle
C #, 77 Bytes
Kompiliert zu a
Func<bool[], bool[]>
. Eigentlich nichts Schlaues, nur eine einfache Lösung.quelle
sed ,
16 bis19 Bytes1518-Byte-Quellcode + 1 Byte für -r Flag (oder -E Flag für BSD sed).Probieren Sie es online!
Edit: Danke Riley für den Hinweis auf einen Fehler.
quelle
Gelee , 4 Bytes
Probieren Sie es online!
Wie?
Dies tut, was im wahrsten Sinne des Wortes gefragt wurde:
quelle
c (mit eingebauten gcc), 40
Ein etwas anderer Ansatz:
Dies kann für ungültig erklärt werden - in diesem Fall werde ich dies gerne als nicht konkurrierend markieren.
Eingabe- und Ausgabe- "Arrays" sind 32-Bit-Ganzzahlen ohne Vorzeichen - dies begrenzt die Größe der Eingabeliste auf genau 32 - dies kann ein Disqualifizierer sein. Wenn der Eingang kürzer als 32 Bit ist, kann er am Ende mit Null-Bits aufgefüllt werden.
Probieren Sie es online aus .
quelle
Batch,
8573 BytesÜbernimmt Eingaben als Befehlszeilenargumente. Zum Beispiel:
1.bat 0 1 0 1 0 0 1
Vorherige Version
quelle
Brain-Flak , 230 Bytes
Ich werde es bald erklären, aber meine Mutter hat mir Bratkartoffeln gekochtProbieren Sie es online!
Besonderen Dank
Besonderer Dank geht an Wheat Wizard und Riley, die mir mit Code eine Menge geholfen haben!
quelle
Python 3,
696664605453 BytesNimmt eine Reihe von
false
s undtrue
s. Dies ist ein Listenverständnis vonfalse
s, es sei denn, der Wert der aktuellen Iteration isttrue
und es ist der erstetrue
in der Eingabe.Dies scheint ein wenig lang zu sein (und es ist mein erster Lambda). Wenn Sie also einen Weg finden, Golf zu spielen, wären Sie sehr dankbar!
quelle
0 for
0for
.Brain-Flak ,
146144 BytesProbieren Sie es online!
quelle
Perl 5 , 12 Bytes
10 Byte Code + 2 für
-pl
.Probieren Sie es online!
quelle