Dies ist eine Herausforderung, bei der zwei Personen, 1 und 2, um ein Amt kandidieren. Die Menschen in der Welt von 1 und 2 stimmen deterministisch auf bestimmte Weise ab, so dass die Kandidaten die Ergebnisse vor der Wahl herausfinden können.
HINWEIS: Dies bezieht sich nicht auf externe Wahlen oder andere politische Ereignisse.
Zwei Leute kandidieren. Wir werden diese Leute 1 und 2 nennen. Da beide wissen wollen, ob sie die Wahl gewinnen werden, entscheiden sie sich, ihr Wissen über Leute und einen Code zu nutzen, um herauszufinden, was das Ergebnis sein wird. Um die Staatsausgaben so gering wie möglich zu halten, muss der Kodex so kurz wie möglich sein.
Ihre Aufgabe: Geben Sie anhand einer bestimmten Anzahl von Personen aus, wer die Wahl gewinnt.
In der lustigen und aufregenden Welt von 1 und 2 gibt es fünf Arten von Menschen:
A
: Leute, die definitiv für 1 stimmen werden.B
: Leute, die definitiv für 2 stimmen werden.X
: Menschen, die für die Person zu ihrer Linken stimmen, stimmen für. Befindet sich keine Person zu ihrer Linken, stimmen sie für denjenigen, für den die Person zu ihrer Rechten stimmen wird. Wenn nicht klar ist, für wen die Person zu ihrem Recht stimmt, stimmen sie nicht ab.Y
: Die Leute wählen das Gegenteil der Person zu ihrer Linken. Befindet sich keine Person zu ihrer Linken, stimmen sie entgegengesetzt zu der Person, die sich zu ihrer Rechten befindet. Wenn nicht klar ist, für wen die Person zu ihrem Recht stimmt, stimmen sie nicht ab.N
: Leute, die nicht wählen.
Dies wird von links nach rechts ausgewertet.
Beispiel:
Wer "evaluiert" wird, wird aus Gründen der Übersichtlichkeit in Kleinbuchstaben angegeben.
Input: `XXAYAN`
xX Votes for whoever their friend is voting for. Their friend has not decided yet, so it is unclear, so they do not vote.
Xx Person to left is voting "none" so votes "none."
a Votes for 1
Ay Since person on left is voting for 1, votes for 2.
a Votes for 1
n Does not vote
Abschließende Umfrage:
2 Personen haben für 1 gestimmt
1 Personen haben für 2 gestimmt
3 Personen haben nicht abgestimmt
1 hat die meisten Stimmen, also gewinnt 1!
Testfälle:
Sie können andere Zeichen oder Werte als Eingabe und Ausgabe verwenden, sofern sie unterschiedlich sind. (Zum Beispiel: Zahlen anstelle von Buchstaben, verschiedene Buchstaben, Kleinbuchstaben, wahr / falsch oder positiv / negativ (für die Ausgabe) usw.)
Input -> Output
"AAAA" -> 1
"BBBB" -> 2
"BBAXY" -> 2
"BAXYBNXBAYXBN" -> 2
"XXAYAN" -> 1
"AAAABXXXX" -> 2
"AXNXXXXAYB" -> 1
"NANNY" -> 1
"XA" -> 1
"YAB" -> 2
"XY" -> anything (do not need to handle test cases with no victor)
"AB" -> anything (do not need to handle test cases with no victor)
quelle
none
das Gegenteil von anzugebennone
, wenn das VerhaltenNY
in den Kommentaren korrekt ist.XA
,XB
,YA
undYB
.Antworten:
Perl 5,
5680726553 Bytes+26 Bytes, um den Fall X oder Y an erster Stelle und A oder B an zweiter Stelle zu behandeln. Ausgabe ist,
1
wenn 1 leer gewinnt (falscher Wert in Perl), ansonsten.TIO
Die Verwendung von
P
undS
anstelle vonX
und dasY
Ermöglichen der Verwendung von xor für Zeichen würde weitere Bytes einsparenverwendet eine Verzweigungsrücksetzgruppe
(?|
..|
..)
, so dass$1
$2
auf die entsprechende Gruppe in der Verzweigung verwiesen wird. Verwenden von\0
und\3
anstelle vonX
undY
72 Bytes
65 Bytes
53 Bytes
quelle
X
undY
am Anfang der Zeichenfolge. Versuchen SieXBA
undYAB
.Java 8,
153141135131129 BytesVerwendet ein Integer-Array als Eingabe für
A=1, B=2, N=3, X=4, Y=5
und gibt eine positive Ganzzahl (>= 1
) aus, wenn A gewinnt, eine negative Ganzzahl (<= -1
), wenn B gewinnt oder0
wenn es ein Unentschieden ist.-18 Bytes dank @ OlivierGrégoire .
Probieren Sie es online aus.
Erläuterung:
quelle
i=0;for(int n:a)i+=n<2?1:n<3?-1:0;return i>0;
spart ein paar Bytes Bytes.i=0;for(int n:a)i+=n>2?0:3-n*2;return i>0;
ist es noch kürzer.System.out.println(java.util.Arrays.toString(a));
nach der Schleife hinzufügen , können Sie sehen, dass sie sich erwartungsgemäß geändert hat (imo). Welche Art von Testfall führt Ihrer Meinung nach zu einem falschen Ergebnis und aufgrund welchen Teils des Codes?Haskell,
60504859 BytesVerwendet
1
fürA
,-1
fürB
,0
fürN
,2
fürX
und4
fürY
. Gibt zurück,True
wennA
gewinnt, sonstFalse
.Probieren Sie es online!
Auf dem rekursiven Weg in der Eingabeliste fügen wir
1
für jede Stimme fürA
,-1
für jede Stimme fürB
und0
für "keine Stimme" hinzu.l
ist die letzte Abstimmung,v
die nächste. Wennv=1
,-1
oder0
(oderv<2
), addieren wir es einfach zur Summe. Wennv
"gleich stimmen" ist (X
in der Herausforderung,2
für meine Lösung), behalten wir und fügen hinzul
((3-2)*l
=l
). Wennv
"Gegenstimmen" (Y
in der Herausforderung4
für meine Lösung) ist, negieren wir zuerstl
((3-4)*l
=-l
) und fügen es dann hinzu. Basisfall ist die leere Liste, mit der die Summe beginnt0
. Die Rekursion beginnt mitl
set torem s 2
wheres
ist das zweite Element der Eingabeliste (x!!1
).rem s 2
Karten1
und-1
sich selbst, alle anderen Werte an0
. Fixe Stimmen ignorierenl
sowieso [*] undX
oderY
bekommen den richtigen Nachbarn, wenn es sich um eine fixe Stimme handelt. Wenn die Gesamtsumme positiv ist,A
gewinnt.[*] Dies macht Singleton-Listen mit festen Stimmen wie
[1]
Arbeit, weil aufgrund von Haskells Faulheit der Zugriff auf das zweite Element nie ausgewertet wird. Eingaben wie[2]
Fehler, müssen aber nicht berücksichtigt werden.quelle
JavaScript (ES6),
78 7573 BytesProbieren Sie es online!
quelle
05AB1E ,
34333230 BytesVerwendet ein Integer-Array als Eingabe für
A=-1, B=1, N=0, X=2, Y=3
und gibt eine negative Ganzzahl (<= -1
) aus, wenn A gewinnt, eine positive Ganzzahl (>= 1
), wenn B gewinnt oder0
wenn es ein Unentschieden ist.Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Retina 0.8.2 , 70 Bytes
Probieren Sie es online! Link enthält Testfälle. Ausgänge
0
für einen Gleichstand. Erläuterung:Griff
Y
Wähler rechts von Personen mit bestimmten Stimmen.Behandeln Sie die
X
Wähler rechts von Personen mit bestimmten Stimmen und kehren Sie dann zurück, bis alles möglichY
und möglich istX
Stimmen Stimmen festgelegt sind.Behandeln Sie einen
X
Erstwähler neben einer beschlossenen Abstimmung und auch eine InitialeY
Erstwähler neben einer abgegebenen Stimme. Da dieser Wähler entgegen der beschlossenen Stimme abstimmt, können wir in diesem Fall einfach beide Stimmen streichen.Löschen Sie alle verbleibenden nicht stimmberechtigten oder unentschiedenen Stimmen und streichen Sie alle Paare entgegengesetzter entschiedener Stimmen aus. Wiederholen, bis alle möglichen Stimmen gelöscht sind. Bei Stimmengleichheit bleibt nichts übrig, ansonsten sind alle übrigen Stimmen gleich.
1
Wird ausgegeben, wenn Stimmen vorhanden sind, aber2
wenn sieB
Stimmen sind.quelle
JavaScript (Node.js) , 42 Byte
Probieren Sie es online!
Dank Shaggy 1 Byte sparen.
quelle
0
,1
und3
anstelle von1
und2
?3
ist auch in JS wahr. Ich denke immer an0
/1
als falsch / wahr. Und da wir keine eindeutigen Ausgaben mehr benötigen, sind0
= 1 Siege und>= 1
= 2 Siege ebenfalls in Ordnung. Also +1 von mir.Python
32,125121117 Bytes(Danke an Jonathan Frech)
Tabulator-Einrückung verwenden
Eingabe: Liste von
int
s mit 'A' = 1, 'B' = 0, 'X' = 4, 'N' = 3, 'Y' = - 1, also "AAAA"[1, 1, 1, 1]
und "XXAYAN"[4, 4, 1, -1, 1, 3]
.[{'A': 1, 'B': 0, 'X': 4, 'N': 3, 'Y': -1}[c] for c in s]
konvertiert die Zeichenketten in das benötigte Eingabeformat.Sie können es online ausprobieren! (Danke an Jonathan Frech für den Vorschlag)
quelle
(i, i-1)[i>0]
sollte man gleichwertig seini-(i>0)
.if
könnte Ihr s wahrscheinlich werdenx[i]+=(v>3)*n+abs(n-1)*(v<0)
. Sie können dann Einrückungen einsparen, indem Sie die jetzt nicht zusammengesetzte Anweisung (mit;
) in dieselbe Zeile wie die verschiebenfor
.Perl 5, 54 Bytes
Probieren Sie es online!
Verwendungen
A
für dieA
,B
für dieB
,N
für dieN
,\0
fürX
und\3
für Y (die letzten beiden Zeichen literal Steuer wird). Der Trick ist, dassA
bitweises x oder\3
gleichB
ist und umgekehrt.quelle
Javascript (ES6) - 133 Byte
Übernimmt eine Zeichenfolge mit dem im OP angegebenen Format und gibt 1 zurück, wenn Kandidat 1 gewonnen hat, und 2, wenn nicht (ich gebe es zu, ich bin sogar voreingenommen).
quelle
Python 2 ,
9573 BytesProbieren Sie es online!
Es war eine Fehlerbehebung erforderlich, die zusätzliche Bytes hinzufügte, aber durch die Konvertierung in Lambda dank @Stephen auf 95 reduziert wurde
quelle