Einführung
Ein normales Schachbrett enthält 8 x 8 = 64 Felder:
Sie können sehen, dass es insgesamt 12 weiße Stücke gibt . Schwarz und Weiß haben immer die gleiche Stückzahl. Wenn sich mehr Steine auf dem Brett befinden, würden die Steine benachbart sein, was für diese Herausforderung nicht zulässig ist. Zur Verdeutlichung hier einige Beispiele:
Das kleinstmögliche Brett für diese Herausforderung ist 3 x 3 :
Sie können sehen, dass die maximale Stückzahl 2 beträgt . Wenn also N = 3 ist , müssen Sie 2 ausgeben . Wenn die Eingabe N = 4 ist , erhalten wir Folgendes:
Sie können sehen, dass der maximale Betrag auch 2 ist. Für N = 4 sollte die Ausgabe 2 sein . Für N = 5 sollte die Ausgabe gleich 5 sein :
Beispiele
STDIN: 3
STDOUT: 2
STDIN: 4
STDOUT: 2
STDIN: 5
STDOUT: 5
STDIN: 6
STDOUT: 6
STDIN: 8
STDOUT: 12
Regeln
- Ihr Beitrag muss ein Programm oder eine Funktion sein, die eine ganze Zahl annimmt und die Anzahl der Teile auf der Tafel ausgibt oder zurückgibt
- Sie können davon ausgehen, dass die Eingabe eine nicht negative Ganzzahl> 2 ist
- Das ist Code-Golf , also gewinnt das Programm mit der geringsten Anzahl von Bytes!
- Beachten Sie, dass das Quadrat unten links auf der Tafel immer dunkel ist. Stücke werden nur auf dunkle Quadrate gelegt
- Sie müssen eine volle Reihe mit Stücken besetzen
code-golf
game
grid
board-game
Adnan
quelle
quelle
Antworten:
Par , 8 Bytes
Pro Zeichen wird ein Byte verwendet.
Erläuterung
quelle
Hexagony , 19 Bytes
Probieren Sie es online aus.
Erläuterung
Dies ist immer noch die gleiche Berechnung, die ich in meinen CJam - und Labyrinth - Antworten verwendet habe, aber aufgrund des ... speziellen ... Speichermodells von Hexagony ist es etwas schwieriger, die Berechnung in 19 Byte zu zerlegen (so dass sie in ein passt) Seitenlänge 3 Sechseck).
Wie meine Labyrinth-Antwort endet dies mit einem Division-durch-0-Fehler.
Hier ist der entfaltete Code:
Wie gesagt der Code ist ganz linear. Sie können den ausgeführten Pfad in der Reihenfolge Grau-Lila-Grün-Rot-Blau zusammensetzen. Der Weg geht tatsächlich noch ein Stück weiter, bis er
:
auf der linken Seite trifft . Entfernen der/
(die nur Steuerfluss umleiten), ist das gesamte Programm linear abgewickelt:Die Frage ist also, wie es funktioniert. Der Speicher von Hexagony ist das Liniendiagramm eines Hex-Gitters, wobei jede Kante des Gitters einen ganzzahligen Wert enthält (anfangs Null). Der Speicherzeiger (MP) befindet sich immer auf einer Kante und zeigt in eine bestimmte Richtung entlang dieser Kante. Arithmetische Operationen werden an den beiden Rändern allgemein angewendet spitz auf und in dem Rand der gespeicherten MP eingeschaltet ist.
Für dieses Programm verwenden wir die drei mit A , B , C gekennzeichneten Kanten , wobei der MP wie folgt beginnt:
So funktioniert das:
quelle
{
springt die IP2
in die linke Ecke. Nach dem)
in der rechten Ecke springt die IP'
in die linke untere Ecke. Dann durchquert die IP die Zeilen 2 und 4 auf seltsame Weise zyklisch.LabVIEW,
2820 LabVIEW-Grundelementequelle
CJam, 10 Bytes
Teste es hier.
Erläuterung
quelle
Labyrinth , 11 Bytes
Woohoo, nur ein Byte hinter CJam .
Probieren Sie es online aus.
Es ist im Wesentlichen dasselbe:
Zu diesem Zeitpunkt wird das Programm jedoch noch nicht beendet. Stattdessen hat der Befehlszeiger eine Sackgasse erreicht und dreht sich um. Nun wird aber
/
versucht zu berechnen,0/0
was mit einem Fehler endet .quelle
Im Ernst , 8 Bytes
Im Ernst, hat das Handy
½
(float dividieren durch 2) undK
(Decke), so dass wir nicht vor der Division eine hinzufügen müssen.Probieren Sie es hier mit Erklärung.
quelle
Python 2,
2221 BytesIch trenne zuerst in zwei Fällen, ungerade N und gerade N.
Mit ungeraden N können wir (N - 1) / 2 Reihen füllen, die durchschnittlich N / 2 Teile enthalten. Da die erste Reihe immer mehr Teile hat, sollten wir dieses Ergebnis begrenzen. Wenn also N ungerade ist, haben wir ceil ((N-1) / 2 * N / 2) Stücke.
Mit geradem N können wir N / 2 - 1 oder Boden ((N - 1) / 2) Zeilen füllen, wobei jede Zeile N / 2 Teile enthält.
Wir können diese beiden Ausdrücke nach ceil (floor ((N-1) / 2) * N / 2) kombinieren. Da ceil (x / 2) = floor ((x + 1) / 2) wir verwenden können Teilung Bodenbelag:
((N - 1) // 2 * N + 1) // 2
.quelle
JavaScript,
37-35BytesErläuterung
Verwendet eine ähnliche Technik wie die übrigen Antworten. Dies ist der ungolfed Algorithmus:
quelle
dc, 12
Testausgang:
quelle
Pyth, 9 Bytes
Gleicher Algorithmus wie meine Python 2-Antwort.
quelle
Japt ,
1614 BytesProbieren Sie es online!
Wie es funktioniert
Ziemlich einfach:
Ich wünschte, es gäbe eine Möglichkeit zu berücksichtigen, dass die beiden Hälften des Codes so ähnlich sind. Vorschläge willkommen!
Alte Version (16 Bytes):
quelle
Java,
230,15552Golf gespielt:
Ungolfed:
Programmausgabe:
quelle
throws Exception
ist zulässig.Scanner
Klasse für die Eingabe verwenden. Das würde dir ein paar Bytes sparen, denke ich. (DieBufferedReader
/InputStreamReader
Combo ist im allgemeinen Sprachgebrauch vielleicht besser, aber dies ist Codegolf und eignet sichScanner
gut für einfache Eingaben.)Zilog ez80 Maschinencode, 9 Bytes
In hex:
In Montage:
Eingang ist im Register
h
und Ausgang ist inl
.Der Zilog ez80 ist ein 8-Bit-Prozessor mit einem 8-Bit-Akkumulator und 24-Bit-Registern. Im Gegensatz zum z80 verfügt er über einen
mlt
(8-Bit-Multiplikations-) Befehl, der im 16-Bit-Modus die High- und Low-Bytes eines Registerpaars hier multiplizierthl
und wieder speicherthl
.Dies funktioniert nur für Werte, für die das doppelte Ergebnis in 8 Bits passt. das heißt, n ≤ 23.
quelle
TI-BASIC, 13 Bytes
Die implizite Multiplikation von TI-BASIC hilft, hat aber keine Ganzzahldivision.
⁻int(⁻X
ist eine kürzere Form von ceil (x).quelle
VBA, 46
Rufen Sie mit? F (x) oder = f (A1) in einer Formel auf
quelle
Pyth,
171413 Bytes-3 Bytes dank Ypnypn ! Die Nummern des Operators * wurden neu angeordnet, um 1 Byte zu sparen.
Erläuterung:
Wenn n gerade ist, können wir n / 2-1 Reihen mit n / 2 Teilen belegen, was insgesamt n * (n / 2-1) / 2 Teilen ergibt. Dieser Ausdruck entspricht (n * (n / 2-1) +1) / 2
Wenn n ungerade ist, können wir herausfinden, wie doppelt so viele Teile aussehen würden, doppelt so viele Teile werden n-1 Reihen umfassen, und wenn ich ein Teil wegnehme, können wir die n-1 Reihen in (n- 1) / 2 Gruppen von 2 Reihen, so dass jede Gruppe n Teile hat, daher lautet der Ausdruck für diesen Fall (n * (n / 2) +1) / 2
Nachdem beide Ausdrücke sehr ähnlich sind, können wir den Code schreiben.
Ich habe zum ersten Mal eine Golfsprache verwendet.
quelle
Javascript, 33 Bytes
Wenn eine ES6-Funktion erlaubt ist, dann 18 Bytes:
quelle
MATLAB,
3725 BytesIch glaube, das sollte funktionieren, gilt für alle Testfälle.
Es funktioniert auch auf Octave . Sie können es hier online versuchen .
Für den alten Code habe ich das Programm zu diesem Arbeitsbereich in einer Datei mit dem Namen hinzugefügt
checkerboard.m
. Sie können es ausführen, indem Sie einfachcheckerboard
an der Eingabeaufforderung eingeben. Wenn es gestartet wird, geben Sie an der Eingabeaufforderung die erforderliche Größe ein. Das Ergebnis wird gedruckt.Geben Sie für den neuen Code einfach den hier angegebenen Code in die Eingabeaufforderung ein und rufen Sie die anonyme Funktion als auf
ans(n)
.quelle
Retina , 18 Bytes
Ein- und Ausgang ist unär .
Probieren Sie es online!
Die neueste Version von Retina (neuer als diese Herausforderung) kann dezimale E / A für vier zusätzliche Bytes verarbeiten:
Probieren Sie es online!
Mit einer unären Eingabe und einer dezimalen Ausgabe können wir 16 Bytes ausführen, aber das scheint ein bisschen lang zu sein:
Erläuterung
Immer noch derselbe Ansatz wie bei jedem anderen, aber Regex-Ersetzung für eine unäre Darstellung der Zahl.
Dies berechnet
n*((n-1)/2)
. Wir tun dies, indem wir zwei Zeichen gleichzeitig abgleichen (Division durch zwei) und sie durch die gesamte Zeichenfolge ersetzen (Multiplikation durchn
). Das Dekrementieren vonn
erfolgt durch Überspringen des restlichen Strings, wenn nur noch ein oder zwei Zeichen übrig sind.Dies ist eine ganzzahlige Division durch 2, aufgerundet. Wir ersetzen einfach zwei Zeichen durch eins (Division durch 2), lassen jedoch zu, dass die letzte Übereinstimmung nur aus einem Zeichen besteht (Aufrundung).
quelle
Python 3, 39 Bytes
Dies ist ein wenig aufgebläht, aber ich bin nicht sicher, ob ich noch viel weiter Golf spielen könnte. Ein Link zum Testen.
quelle
Prolog,
3938 BytesCode:
Erläuterung:
Beispiel:
Probieren Sie es hier online aus
Bearbeiten: 1 Byte gespeichert, indem Ceil / 2 durch + 1 // 2 ersetzt wird
quelle
Mumps, 17 Bytes
Vielen Dank an Emigna für die einfache Erklärung des Algorithmus. Dies nutzt den "Mangel" von Mumps 'Mathematik, dass Operationen ausschließlich von links nach rechts ausgeführt werden (nicht PEMDAS), sodass keine Klammern erforderlich sind. :-)
Die Ausgabe sieht jedoch etwas seltsam aus, da Caches Ensemble (die Mumps-Umgebung, auf die ich Zugriff habe) die Wagenrückläufe nicht automatisch ausgibt, selbst wenn die Eingabetaste gedrückt wird. Wenn es schöner sein soll, fügen Sie 4 Zeichen für die Zeilenumbrüche vor / nach dem Transport hinzu:
Vielen Dank!
quelle
Bash, 32 Bytes
quelle
Pyke, 8 Bytes, nicht konkurrierend
dup, dec, half, mult, inc, half
Probieren Sie es hier aus!
quelle
Batch, 30 Bytes
38 Bytes, wenn die Eingabe über stdin erforderlich ist:
quelle