En utilisant le moins de caractères Unicode, écrivez une fonction qui accepte trois paramètres:
- Nombre total de dominos
n
e domino affecté- Direction de renversement du domino affecté (
0
ouL
pour gauche1
ouR
pour droite)
Une fois qu'un domino est renversé, il doit également renverser les dominos restants dans la même direction.
Vous devez sortir les dominos en |
représentant un domino debout \
et en /
représentant un domino renversé respectivement à gauche et à droite.
Exemples
10, 5, 1
devrait revenir ||||//////
6, 3, 0
devrait revenir\\\|||
if(third_parameter)
au lieu deif(third_paramter=='l')
Réponses:
Rubis, 38 (46) caractères
Cette fonction prend la direction sous forme d'entier (
1
pour droite,0
pour gauche). Une fonction qui prend une chaîne a 8 caractères de plus:Exemples d'utilisation:
la source
Haskell, 70
en supposant qu'il y a un type Direction , qui a des constructeurs R et L .
la source
J -
3226 carJ ne peut pas gérer plus de deux arguments sans utiliser une liste, et il ne peut pas gérer des listes non homogènes sans boxe. Donc, avoir l'entrée comme une liste de trois entiers est idéal. L'ordre des paramètres est l'inverse de celui standard: 0 pour la gauche ou 1 pour la droite, puis la position, puis le nombre total de dominos. La raison en est que J finira par les parcourir de droite à gauche.
Voici ce qui se passe.
F`G/
appliqué à une listex,y,z
sera évaluéx F (y G z)
.y G z
construit les deux façons possibles dont les dominos auraient pu basculer, puisF
utilisex
pour sélectionner lequel des deux utiliser.Vous trouverez ci-dessous un va-et-vient avec le J REPL qui explique comment la fonction est construite ensemble: des lignes en retrait sont entrées dans le REPL, et les réponses sont alignées avec la marge de gauche. Rappelons que J évalue strictement de droite à gauche sauf s'il y a des parens:
Au détriment de quelques caractères, nous pouvons faire de la commande la commande standard: il suffit d'ajouter
@|.
à la fin de la fonction:L'adaptation de cela pour fonctionner avec un argument de chaîne pour la direction serait cependant beaucoup plus coûteuse.
la source
/
aussi la façon dont vous créez deux sorties et sélectionnez celle souhaitée. Je suppose que j'ai l'impression que cela n'a pas la reconnaissance qu'il mérite.PowerShell, 66
Probablement la même idée que tout le monde avait.
la source
Golfscript (44
53)Mon tout premier programme Golfscript. Cela m'a pris beaucoup plus de temps que prévu et peut probablement être fait de manière plus intelligente et plus concise (je suis sûr que quelqu'un le prouvera :)):
Un exemple d'entrée est
10 5 0
.Non golfé:
la source
d
d'être0
/1
au lieu de'l'
/'r'
ce qui vous donne un code plus court. Sinon, si vous stockezd'l'=
dans une variable oyu peut l'utiliser à la place de la deuxième comparaison avecd
. Dans le terme,x i j
vous pouvez enregistrer les deux espaces blancs si vous utilisez un nom de variable non alphanumérique à la place dei
.'l'
/'r'
car à l'époque je ne voyais pas encore que nous étions libres d'utiliser des entiers. L'astuce non alphanumérique est lisse, merci! Peut-être que je mettrai à jour la réponse plus tard.GolfScript,
2823 caractèresArguments en haut de la pile, essayez en ligne :
la source
Python - 45
52Cela nécessite
1
pour la droite et0
pour la gauche.Voici une version qui prend
r
etl
correctement, à 58 :Quelques exemples d'utilisation ...
la source
JS (ES6) -
7974726562merci à @nderscore!
Le 3ème param est un booléen (0: gauche / 1: droite)
la source
d=(a,b,c)=>"\\"[r="repeat"](!c&&a-b+1)+"|"[r](--b)+"/"[r](c&&a-b)
[r='repeat'][r]
15 caractères..repeat.repeat
14 caractèresPython2 / 3 - 54
Cette dernière règle ajoutée était plutôt sympa (le 0/1 au lieu de 'l' / 'r'). Rendu le mien plus petit que la solution python existante. 0 est à gauche, 1 est à droite
la source
Haskell , 42 octets
Essayez-le en ligne!
Prend des entrées comme
(%) n k b
pour lesn
dominos,k
'th domino renversé, directionb
.Recherche le personnage à chaque position
c
allant de1
àn
en utilisant une expression arithmétique pour calculer l'indice de caractère 0, 1 ou 2.Cas de test pris à partir d' ici .
Haskell , 44 octets
Essayez-le en ligne!
Une stratégie intéressante qui s'est avérée un peu plus longue. Génère la chaîne
"\\|/"<*[1..n]
avecn
des copies consécutives de chaque symbole, puis prend une tranche den
caractères contigus avec une position de départ déterminée arithmétiquement.la source
Python 2.7,
68 65 61 5958 caractèresUtiliser
d=1
pour gauche etd=0
pour droiteRemarque: Merci à @TheRare pour l'avoir encore joué.
la source
d and'\\'...or'/'...
?('\\'...,'/'...)[d]
f=lambda a,p,d:('|'*(p-1)+'/'*(a-p+1),'\\'*p+'|'*(a-p))[d]
Also, I don't think your code works when falling left.
Pourriez-vous donner un cas de test à prouver?Javascript, 46 caractères
On dirait que tricher pour faire 0 = l et 1 = r mais c'est le cas. Rétréci avec un peu de récursivité.
edit: manqué un personnage évident
la source
JavaScript (ES6) 61
63Edit C'était buggy - honte à moi.
Pas si différent de @xem, mais je l'ai trouvé moi-même et c'est plus court. Le paramètre d est 0/1 pour gauche / droite
Tester dans la console Firefox
Sortie
la source
--p
?Perl,
6765 personnagesAttribuez les trois premiers paramètres (total, position, direction sous forme d'entier [0 gauche, 1 droite]). Les extras vont dans l'éther. Soustrayez 1 de la position si nous nous dirigeons vers la droite afin que le domino en position X soit également inversé.
la source
$p--if$d
par$p-=$d
pour perdre deux personnages :)Haskell , 57 octets
4 octets économisés grâce à cette astuce
Essayez-le en ligne!
Haskell ,
69616058 octetsEssayez-le en ligne!
Pas une réponse très complexe, mais elle bat les deux réponses Haskell existantes.
la source
R ,
75686157 octetsUne fonction anonyme. Je posterai une explication plus complète s'il y a un intérêt.
Essayez-le en ligne!
la source
Haskell , 51 octets
a
= nombre de dominos,b
= indice 1 de celui touché,c
= direction (à0
gauche et à1
droite).Essayez-le en ligne!
la source
(a#b)c= ...
.PHP - 64
Une boucle simple, et faisant écho au personnage.
Génère un
Notice: Undefined variable: i
, voici une autre version silencieux l'erreur (65 caractères):Et une version sans erreur (69 caractères):
Autres fonctions en PHP:
sprintf
/printf
rembourrageremplissage via
str_pad
/str_repeat
fonctionsen utilisant les fonctions
printf
etstr_repeat
la source
Scala 75 caractères
la source
CJam - 20
Le code principal est sur la deuxième ligne, la première ligne est juste pour obtenir les paramètres de l'entrée standard (sinon vous devez mettre les paramètres dans le code).
Essayez-le sur http://cjam.aditsu.net/
Exemples:
Explication:
:X
stocke le dernier paramètre (direction 0/1) dans la variable X-
soustrait X de la position de renversement, obtenir la longueur de la première séquence de caractères (appelons-le L)_
fait une copie de L"\|"X=
obtient le caractère à utiliser en premier:\
pour X = 0 et|
pour X = 1*
répète que le caractère Lo
imprime la chaîne, la supprimant de la pile-
soustrait L du nombre de dominos, obtenant la longueur de la deuxième séquence de caractères (appelons-le R),"|/"X=
obtient le caractère utiliser ensuite:|
pour X = 0 et/
pour X = 1*
répète ce caractère R foisla source
Lisp commun
Cela ne gagnera pas dans un golf de code, mais cela met en évidence la directive de format de justification de Common Lisp:
L'arithmétique n'est pas mauvaise:
n
c'est le nombre total de dominos;p
est la position du premier domino renversé;d
est soit0
ou1
, représentant gauche et droite (comme autorisé dans les commentaires), et est utilisé comme index dansx
;x
est une chaîne de\
,|
et/
. La chaîne de format utilise deux directives de justification (imbriquées), chacune autorisant un caractère de remplissage. Ainsi:la source
PHP, 89 caractères
Tout simplement parce que j'aime PHP.
EDIT: Le code suivant fait de même.
la source
($i+1>$p)
. 2) La réécriture de votre expression ternaire$d?($i+1<$p?'|':'/'):$i+1>$p?'|':'\\'
permet d' économiser 3 autres octets. Ou supprimez==0
et inversez simplement les directions. 3) Avec$i++<$a
vous pouvez supprimer$i++
de la condition de publication et utiliser$i
au lieu de$i+1
(-6 octets). 4)$i=0
n'est pas nécessaire; mais vous devrez supprimer les notifications (option--n
) si vous la supprimez (-4 octets).J ,
23 2119 octetsEssayez-le en ligne!
L'entrée est une liste d'entiers dans l'ordre standard.
la source
05AB1E , 19 octets
J'ai toujours l'impression que c'est un peu long, mais ça marche .. Et mieux que la solution initiale de 23 octets que j'avais avec la construction if-else, que j'ai rapidement abandonnée ..
L'ordre d'entrée est le même que dans le défi: longueur totale, index,
1
/0
pour gauche / droite respectivement.Essayez-le en ligne ou vérifiez les deux cas de test .
Explication:
la source
C ++ 181
la source
return 0
partir explicitementmain
.C(n)>>k>>p
serait-il court-circuitéC(n)C(k)C(p)
? Et si la définition de P () pouvait stringifier l'argument, cela ne sauverait-il pas les caractères pour toutes les guillemets? Et lorsque vous comparez p à 'l' et 'r': 0 et 1 seraient plus courts - spécifiquement> 0 au lieu de == 'r' et <1 au lieu de == 'l' (en supposant que vous êtes d'accord en utilisant des nombres au lieu de r / l - sinon <'r' est toujours plus court que == 'l' et> 'l' est toujours plus court que == 'r')PHP -
105,97, 96Exemples de résultats:
la source
Javascript,
8185 caractèresC'était la première fois que j'essayais du codegolf, c'était amusant merci :)
la source
JavaScript - 85 caractères
1 = gauche, 0 = droite
la source
Clojure, 81 caractères
la source
vb.net (~ 75c)
la source