introduction
Un damier normal contient 8 x 8 = 64 carrés:
Vous pouvez voir qu'au total, il y a 12 pièces blanches . Le noir et le blanc ont toujours la même quantité de pièces. S'il y a plus de pièces sur le plateau, les pièces seraient voisines, ce qui n'est pas autorisé pour ce défi. Pour clarifier les choses, voici quelques exemples:
La planche la plus petite possible pour ce défi est 3 x 3 :
Vous pouvez voir que le nombre maximum de pièces est égal à 2 . Donc, lorsque N = 3 , vous devez sortir 2 . Si l'entrée est N = 4 , nous obtenons ce qui suit:
Vous pouvez voir que le montant maximum est également 2. Donc, pour N = 4 , la sortie doit être 2 . Pour N = 5 , la sortie doit être égale à 5 :
Exemples
STDIN: 3
STDOUT: 2
STDIN: 4
STDOUT: 2
STDIN: 5
STDOUT: 5
STDIN: 6
STDOUT: 6
STDIN: 8
STDOUT: 12
Règles
- Votre soumission doit être un programme, une fonction, etc. qui prend un entier et génère ou renvoie le nombre de pièces sur le tableau
- Vous pouvez supposer en toute sécurité que l'entrée est un entier non négatif> 2
- C'est du code-golf , donc le programme avec le moins d'octets gagne!
- Notez que le carré en bas à gauche du tableau est toujours sombre. Les pièces ne sont placées que sur des carrés sombres
- Vous devez occuper une rangée complète avec des morceaux
code-golf
game
grid
board-game
Adnan
la source
la source
Réponses:
Par , 8 octets
Un octet est utilisé par caractère.
Explication
la source
Hexagonie , 19 octets
Essayez-le en ligne.
Explication
C'est toujours le même calcul que celui que j'ai utilisé dans mes réponses CJam et Labyrinth, mais en raison du modèle de mémoire ... spécial ... d'Hexagony, il est un peu plus difficile de compresser le calcul en 19 octets (pour qu'il tienne dans un côté 3 hexagone).
Comme ma réponse Labyrinth, cela se termine par une erreur de division par 0.
Voici le code déplié:
Comme je l'ai dit, le code est entièrement linéaire. Vous pouvez reconstituer le chemin exécuté dans l'ordre gris-violet-vert-rouge-bleu. Le chemin continue en fait un peu plus loin jusqu'à ce qu'il atteigne
:
la gauche. En supprimant le/
(qui ne redirige que le flux de contrôle), l'ensemble du programme déroulé linéairement est:La question est donc de savoir comment cela fonctionne. La mémoire de l'hexagonie est le graphique linéaire d'une grille hexadécimale, où chaque bord de la grille contient une valeur entière (initialement zéro). Le pointeur de mémoire (MP) est toujours sur un bord et pointe dans une certaine direction le long de ce bord. Les opérations arithmétiques sont généralement appliqués sur les deux bords pointus à et stockées dans le bord de la MP est en marche.
Pour ce programme, nous utiliserons les trois bords étiquetés A , B , C , le MP commençant comme indiqué ici:
Voici donc comment cela fonctionne:
la source
{
, l'IP saute2
dans le coin gauche. Après le)
dans le coin droit, l'IP saute'
dans le coin inférieur gauche. Ensuite, l'IP traverse les lignes 2 et 4 d'une manière cyclique étrange.LabVIEW,
2820 primitives LabVIEWla source
CJam, 10 octets
Testez-le ici.
Explication
la source
Labyrinthe , 11 octets
Woohoo, un seul octet derrière CJam .
Essayez-le en ligne.
C'est essentiellement la même chose:
Cependant, à ce stade, le programme ne se termine pas encore. Au lieu de cela, le pointeur d'instruction a atteint une impasse et se retourne. Mais
/
essaie maintenant de calculer0/0
ce qui se termine par une erreur .la source
Sérieusement , 8 octets
A sérieusement la maniabilité
½
(float diviser par 2), etK
(plafond), donc nous n'avons pas besoin d'en ajouter un avant la division.Essayez-le ici avec explication.
la source
Python 2,
2221 octetsJe sépare d'abord dans deux cas, N impair et même N.
Avec un N impair, nous pouvons remplir (N - 1) / 2 lignes, contenant en moyenne N / 2 pièces. Puisque la première rangée a toujours plus de pièces, nous devrions plafonner ce résultat. Ainsi, lorsque N est impair, nous avons des pièces de plafond ((N-1) / 2 * N / 2).
Avec même N, nous pouvons remplir N / 2 - 1, ou les rangées de plancher ((N - 1) / 2), chaque ligne contenant N / 2 pièces.
Nous pouvons combiner ces deux expressions par ceil (floor ((N-1) / 2) * N / 2). Depuis Ceil (x / 2) = étage ((x + 1) / 2) , nous pouvons utiliser la division revêtement de sol:
((N - 1) // 2 * N + 1) // 2
.la source
JavaScript,
3735 octetsExplication
Utilise une technique similaire au reste des réponses. Voici l'algorithme non golfé:
la source
dc, 12
Sortie de test:
la source
Pyth, 9 octets
Même algorithme que ma réponse Python 2.
la source
Japt ,
1614 octetsEssayez-le en ligne!
Comment ça fonctionne
Assez simple:
Je souhaite qu'il y ait un moyen de tenir compte du fait que les deux moitiés du code sont si similaires. Suggestions bienvenues!
Ancienne version (16 octets):
la source
Java,
23015552Golfé:
Non golfé:
Sortie du programme:
la source
throws Exception
est autorisé.Scanner
classe pour l'entrée. Cela vous ferait économiser un tas d'octets je pense. (Le comboBufferedReader
/InputStreamReader
peut être meilleur en utilisation générale, mais c'est du golf de code, etScanner
fonctionne très bien pour une entrée simple.)Code machine Zilog ez80, 9 octets
En hex:
En montage:
L'entrée est dans le registre
h
et la sortie est dansl
.Le Zilog ez80 est un processeur 8 bits avec un accumulateur 8 bits et des registres 24 bits. Contrairement au z80, il a un
mlt
instruction (multiplication sur 8 bits) qui, en mode 16 bits, multiplie les octets haut et bas d'une paire de registres, icihl
, et les stocke à nouveauhl
.Cela ne fonctionne que pour les valeurs pour lesquelles le résultat deux fois tient sur 8 bits; c'est-à-dire, n≤23.
la source
TI-BASIC, 13 octets
La multiplication implicite de TI-BASIC aide, mais elle n'a pas de division entière.
⁻int(⁻X
est une forme de plafond plus courte (x).la source
vba, 46
Appelez avec? F (x), ou = f (A1) dans une formule
la source
Pyth,
171413 octets-3 octets grâce à Ypnypn ! Réorganisé les numéros de l'opérateur * pour enregistrer 1 octet.
Explication:
Lorsque n est pair, nous pouvons occuper n / 2-1 rangées avec n / 2 pièces, soit un total de n * (n / 2-1) / 2 pièces. Cette expression est équivalente à (n * (n / 2-1) +1) / 2
Lorsque n est impair, nous pouvons trouver à quoi ressemblerait deux fois le nombre de pièces, deux fois le nombre de pièces s'étendra sur n-1 lignes, et si j'en retire une pièce, nous pouvons diviser les n-1 lignes en (n- 1) / 2 groupes de 2 rangées de sorte que chaque groupe a n morceaux, donc l'expression pour ce cas est (n * (n / 2) +1) / 2
Maintenant que les deux expressions sont assez similaires, nous pouvons écrire le code.
Ma première fois en utilisant une langue de golf.
la source
Javascript, 33 octets
Si une fonction ES6 est autorisée, alors 18 octets:
la source
MATLAB,
3725 octetsJe crois que cela devrait fonctionner, pour tous les cas de test.
Il fonctionne également sur Octave . Vous pouvez essayer en ligne ici .
Pour l'ancien code, j'ai ajouté le programme à cet espace de travail dans un fichier nommé
checkerboard.m
. Vous pouvez l'exécuter en entrant simplementcheckerboard
à l'invite, puis lorsqu'il démarre, entrez la taille requise à l'invite. Le résultat sera imprimé.Pour le nouveau code, entrez simplement le code affiché ici dans l'invite, puis appelez la fonction anonyme sous
ans(n)
.la source
Rétine , 18 octets
L'entrée et la sortie sont unaires .
Essayez-le en ligne!
La dernière version de Retina (plus récente que ce défi) pouvait gérer les E / S décimales pour quatre octets supplémentaires:
Essayez-le en ligne!
Avec une entrée unaire et une sortie décimale, nous pouvons faire 16 octets, mais cela semble un peu exagéré:
Explication
Toujours la même approche que n'importe qui d'autre, mais en utilisant le remplacement d'expression régulière sur une représentation unaire du nombre.
Cela calcule
n*((n-1)/2)
. Nous faisons cela en faisant correspondre deux caractères à la fois (division par deux) et en les remplaçant par la chaîne entière (multiplication parn
). La décrémentation den
se fait en ignorant le reste de la chaîne, s'il ne reste qu'un ou deux caractères.Il s'agit d'une division entière par 2, arrondie. Nous remplaçons simplement deux caractères par un (division par 2), mais permettons au dernier match de se composer d'un seul caractère (arrondi).
la source
Python 3, 39 octets
C'est un peu gonflé, mais je ne suis pas sûr de pouvoir jouer au golf beaucoup plus loin. Un lien pour les tests.
la source
Prolog,
3938 octetsCode:
Explication:
Exemple:
Essayez-le en ligne ici
Edit: enregistré 1 octet en remplaçant ceil / 2 par + 1 // 2
la source
Oreillons, 17 octets
Merci à Emigna pour l'explication simple de l'algorithme. Cela exploite la "déficience" mathématique de Mumps, car les opérations sont exécutées strictement de gauche à droite (pas PEMDAS), de sorte qu'aucune parenthèse n'est requise. :-)
La sortie semble un peu étrange, cependant, car l'Ensemble de Cache (l'environnement Mumps auquel j'ai accès) ne génère pas automatiquement de retours de chariot même lorsqu'il est pressé en entrée. Si vous le voulez plus joli, ajoutez 4 caractères pour les retours pré / post chariot:
Merci!
la source
Bash, 32 octets
la source
Pyke, 8 octets, sans concurrence
dup, dec, moitié, mult, inc, moitié
Essayez-le ici!
la source
Lot, 30 octets
38 octets si une entrée sur stdin est requise:
la source