Schreiben Sie ein Programm oder eine Funktion, die eine Zeichenfolge enthält, die nur die Zeichen ^
und enthält v
(Sie können davon ausgehen, dass es keine anderen Zeichen gibt). Von links nach rechts gelesen repräsentiert diese Zeichenfolge die Abfolge der Mausklicks, die ein einzelner Benutzer beim erstmaligen Anzeigen einer Stapelaustausch- Frage oder -Antwort ausgeführt hat.
Jedes Symbol steht^
für einen Klick auf die Schaltfläche " Aufwärts" und jedes Symbolv
für einen Klick auf die Schaltfläche " Abwärts" . (Arbeitsbeispiele finden Sie leicht links.)
Angenommen, es gelten keine Stimmrechtsbeschränkungen, sodass alle Klicks korrekt registriert werden.
Drucken oder zurücksenden:
1
oder+1
wenn der Beitrag am Ende hochgestuft wird.0
wenn der Beitrag nicht abgestimmt wird. (-0
und+0
sind nicht gültig)-1
wenn der Beitrag abgelehnt wird.
Beiträge beginnen mit null Netto-Stimmen des Benutzers und die Schaltflächen ändern die Netto-Stimmen wie folgt:
Net Votes Before Button Pressed Net Votes After
1 ^ 0
1 v -1
0 ^ 1
0 v -1
-1 ^ 1
-1 v 0
Der kürzeste Code in Bytes gewinnt.
Testfälle:
[empty string] -> 0
^^ -> 0
^v -> -1
^ -> 1
v -> -1
v^ -> 1
vv -> 0
^^^ -> 1
vvv -> -1
^^^^ -> 0
vvvv -> 0
^^^^^ -> 1
vvvvv -> -1
^^^^^^ -> 0
vvvvvv -> 0
^^v -> -1
^v^ -> 1
^vv -> 0
vv^ -> 1
v^v -> -1
v^^ -> 0
^vvv^^vv^vv^v^ -> 1
^vvv^^vv^vv^v^^ -> 0
^vvv^^vv^vv^v^^^ -> 1
^vvv^^vv^vv^v^^v -> -1
^vvv^^vv^vv^v^^vv -> 0
^vvv^^vv^vv^v^^vvv -> -1
^vvvvvvvvvvvv -> 0
^^vvvvvvvvvvvv -> 0
^^^vvvvvvvvvvvv -> 0
vvv^^^^^^^^^^^^ -> 0
vv^^^^^^^^^^^^ -> 0
v^^^^^^^^^^^^ -> 0
quelle
^
Kann der Charakter also eine Änderung der Punktzahl von -1, +1 oder +2 verursachen? Bin ich dicht wo? Was ist los?Antworten:
Gol> <> 0.3.11 ,
131211 BytesProbieren Sie es online aus . Auch wenn dies im nächsten Update gut funktionieren wird, habe ich es für alle Fälle als 0.3.11 aufgelistet.
Erläuterung
Beachten Sie, dass bei der ersten Verwendung von
@
eine 0 aus dem unteren Bereich des Stapels gezogen wird, um die Stimmenzahl für die erste Iteration zu initialisierenZur Veranschaulichung mit einer vollständigen Tabelle:
quelle
x86-Maschinencode, 24 Byte
Dies ist eine Funktion, die die Fastcall-Aufrufkonvention verwendet, die eine Zeichenfolge verwendet und eine 8-Bit-Ganzzahl zurückgibt.
Ich habe es mit dem folgenden C-Programm getestet, das für den 32-Bit-Modus kompiliert werden muss.
quelle
JavaScript (ES7),
474644433736 ByteDurchgestrichen 44 ist immer noch regulär 44 :(
Hält eine laufende Summe in
s
. Mit derfor of
Schleife wird jedes Zeichen in der Zeichenfolge durchlaufen unds
basierend auf dem aktuellen Zeichen und dem vorherigen Wert aktualisiert .Bearbeitungen: Golf
~s&&-1
zu!~s-1
. Dieser Ausdruck muss 0 sein, wenn ers
-1 ist, andernfalls -1. 6 Bytes dank @nderscore gespart.So funktioniert der Ausdruck:
quelle
v=>[for(x of v)v=x<"v"?~~v<1:!~v-1]|v
CJam,
1814 BytesAktualisierte Version mit signifikanten Verbesserungen von Dennis:
Probieren Sie es online aus
Erläuterung:
quelle
Befunge 93 - 55 Bytes
52 Zeichen und 3 neue Zeilen.
Auf diesem Interpreter getestet .
Das
j
ist äquidistant von^
undv
in Ascii, so dass es letztendlich verwendet wird, um arithmetische Umrechnungen durchzuführen, anstatt platzraubende Bedingungen.quelle
Brainfuck, 146 Bytes
Dieses Programm nimmt jedes Byte der Eingabe und vergleicht es mit dem letzten. Wenn sie identisch sind, wird die Eingabe verworfen und "0" als "vorherige Eingabe" gespeichert, andernfalls wird sie normal gespeichert.
Wenn das Endergebnis lautet
v
, wird gedruckt-
. Wenn das Endergebnis nicht Null war, wird 1 zu einer leeren Zelle hinzugefügt. Schließlich wird 48 zu dieser Zelle hinzugefügt und gedruckt.quelle
Javascript ES6,
9148 ZeichenErklärung:
undefined
endet mitd
.Prüfung:
Antwortverlauf:
quelle
Python 2, 49
Durchläuft die Update-Funktion
Das nimmt die aktuelle Stimmenzahl
x
und das neue Zeichenc
und gibt die neue Stimmenzahl aus.Die Idee ist, die
cmp
Funktion von Python 2 zu verwenden, die die beiden Argumente vergleicht und-1, 0, 1
für das<, ==, >
jeweilige Element gibt . Das Innerecmp('u',c)
gibt-1
fürv
und1
für^
; jedes Zeichen zwischen ihnen genügt für'u'
. Das Äußere vergleicht dann das mitx
, wascmp(1,x)
für^
undcmp(-1,x)
für gibtv
, welche die richtigen Werte haben.Die direkte Iteration war 3 Zeichen länger (52), wäre jedoch ein Zeichen kürzer (48), wenn die Eingabe
input()
mit Anführungszeichen zulässig wäre.Die beste rekursive Funktion, die ich gefunden habe, war ein Zeichen länger (50)
quelle
Prolog,
159152 BytesCode:
Testen Sie es selbst:
Online-Dolmetscher hier
Beispiel
Bearbeiten: 7 Bytes durch Vereinheitlichen von r-Klauseln mit OR gespeichert.
quelle
CJam, 16 Bytes
Dies stürzt nach dem Drucken von 0 ggf. ab. Der Fehler kann mit dem Java-Interpreter unterdrückt werden. Wenn Sie dies online versuchen , ignorieren Sie alles außer der letzten Ausgabezeile.
Wie es funktioniert
quelle
Python 2,
177 15972 BytesNoch ein bisschen neu in dieser Code-Golf-Sache.
BEARBEITEN: Das falsche Verhalten wurde behoben. BEARBEITEN
2: Vielen Dank an @MorganThrapp, dass Sie viele Bytes gespart haben.
quelle
JavaScript (ES6),
64595852 ByteDies basiert auf der Beobachtung, dass nur der letzte Abschnitt der Wiederholung (von entweder
^
oderv
) das Ergebnis beeinflusst.Vielen Dank an Neil für die 6 Bytes.
quelle
f=v=>(t=/\^*$|v*$/.exec(v)[0]).length*(t<'v'?1:-1)%2
genügen.>
oder<
Operator gezwungen wird . Vielen Dank für die Tipps[0]
die Sie vielleicht verwirrt haben.f=v=>(t=/\^*$|v*$/.exec(v))[0].length*(t<'v'?1:-1)%2
funktioniert aufgrund von Typenzwang mit Array.Haskell, 40 Bytes
quelle
f
als Infix-Funktion definieren%
. Auch ich denke dasv
kann eine sein_
.-1
fürvv
statt für 0?1%_=-1
_%_=0
12 Zeichen ersetzen .Scala, 75 Bytes
Test auf implementierte Funktion.
quelle
APL, 17
Für Interpreter ohne Fork-Notation (wie GNU APL) wäre es
{⍺×⍺≠⍵}/⌽0,2-'^ '⍳⍞
(19). Dies ist wahrscheinlich die langweiligste mögliche Lösung, da sie direkt aus der Definition des Problems hervorgeht.quelle
Ruby,
41-35BytesRegex. Nur der zuletzt gedrückte Knopf ist interessant, prüfen Sie also die Lauflänge. Vergleichen Sie es dann mit
"a"
(oder einem Buchstaben zwischen^
undv
), um1
oder zu erhalten-1
.quelle
C # 6, 18 + 80 = 98 Bytes
Benötigt:
Tatsächliche Funktion:
So funktioniert es: Der Code entfernt zuerst alles vor dem letzten
^^
odervv
. Dieser Inhalt ist nicht relevant, da ein zweimaliger Klick auf denselben Button Ihre Abstimmung immer storniert. Es tut dies durch die Spaltung auf^^
undvv
und das letzte Element nehmen. Wenn dieses Element eine leere Zeichenfolge (.Length<1
) ist, wird die Funktion zurückgegeben,0
da alle Abstimmungen abgebrochen wurden. Wenn die Zeichenfolge nicht leer ist, wird nur das letzte Zeichen der ursprünglichen Zeichenfolge angezeigt: Alle vorherigen Stimmen werden überschrieben. Wenn der Zeichencode kleiner als 95 ist, dann wird es 94 sein^
, so gibt es1
, anders-1
.quelle
Python 2.7,
797588quelle
(-1,(1,0)[n==0])[n>0]
um 10 Byte zu sparen. Auch nicht verwendena=str.count
. Es kostet Sie eigentlich 4 Bytes.Minkolang 0.11 ,
2822 BytesProbieren Sie es hier aus.
Erläuterung
Beachten Sie, dass es
N.
am Ende keine gibt . Das liegt daran, dass ich es am Anfang herumlaufen lassen habe. Wenn die Eingabe leer ist, wird die endgültige Zählung als Ganzzahl ausgegeben und das Programm angehalten.quelle
Pyth, 13 Bytes
quelle
Mathematica, 60 Bytes
quelle
@#&
? Das ist nutzlos (es sei denn,Sequence
s sind beteiligt, aberSequence
s sind nicht beteiligt.Formskript , 26 Byte
Wie es funktioniert:
quelle
C # 6, 18 +
9795 =115113 Byte, keine Zeichenfolgemethoden, übermäßige LINQWirklich verdient, vorausgegangen zu werden
Ich hatte die Idee,
x<95?1:-1
anstellex=='^'?1:-1
von ProgramFOX die Antwort zu verwendenZufälle:
quelle
C:
6766 BytesGolf gespielt:
ungolfed:
quelle
Los, 179 Bytes
Eine extrem naive Lösung.
Ungolfed:
quelle
Perl 5, 41 Bytes
40 Bytes plus 1 für
-p
/(.)\1*$/;
vergleicht den eingegebenen String mit dem regulären Ausdruck/(.)\1*$/
, dh prüft, ob er mit einem einzelnen Zeichen endet, das einige Male ≥ 1 wiederholt wird.Wenn ja,
$&
ist dies die gesamte Wiederholungszeichenfolge und$1
das Zeichen. Andernfalls (dh die Eingabezeichenfolge ist leer) sind diese beiden Variablen die leere Zeichenfolge.$1=~v?-1:1
vergleicht$1
mit dem regulären Ausdruckv
und gibt -1 zurück, wenn er übereinstimmt, und 1, wenn er nicht übereinstimmt.Und multiplizieren Sie diese ± 1 mit
(length$&)%2
der Länge von$&
Modulo 2.quelle
05AB1E ,
141211 BytesPort von @ Sp3000 's Gol> <> Antwort .
HINWEIS : @Grimy hat bereits eine kürzere 8-Byte-Alternative für 05AB1E veröffentlicht. Stellen Sie also sicher, dass Sie ihn unterstützen!
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
05AB1E , 8 Bytes
Probieren Sie es online!
Alternative Lösungen mit der gleichen Länge:
u㤮öÓÆ(
,㤮ögÓÆ(
.quelle
^^ -> 0
CJam,
2724 BytesProbieren Sie es online .
Alles, was ich Dennis 'Antwort entnommen habe, ist
g
(Vorzeichenfunktion).quelle
Rubin, 43
9-i/11
wird mit den ASCII-Codes^
(94) oderv
(118) zu 1 oder -1 bewertetIm Testprogramm:
quelle