Le décompte est un système de comptage simple qui fonctionne en base 5. Il existe différents systèmes de décompte utilisés dans le monde, mais celui qui est utilisé dans la plupart des pays anglophones est peut-être le plus simple - compter les unités en marquant des lignes verticales, puis pour chaque 5ème marque met une ligne horizontale à travers la collection précédente de quatre. Cela regroupe les marques de pointage par groupes de 5 (et les rend plus faciles à compter rapidement).
Vous allez écrire un programme qui affiche les marques de pointage jusqu'à une valeur donnée. Mais compter sur seulement la base 5 est ennuyeux! Par conséquent, votre programme devrait également pouvoir afficher des décomptes dans différentes bases.
Contribution
L'entrée sera soit une ou deux valeurs entières non négatives séparées par une virgule (par exemple 9
ou 8,4
). Le premier nombre est la valeur qui devrait être affichée par le décompte. La deuxième valeur est la base du décompte. Si la deuxième valeur n'est pas donnée, utilisez la base 5 .
Production
La sortie sera la valeur entrée représentée sous forme de marques de pointage ASCII. Voici quelques exemples par rapport auxquels vous pouvez tester votre programme - votre sortie doit correspondre exactement à ceux-ci!
Entrée: 12
ou12,5
| | | | | | | | | |
-+-+-+-+- -+-+-+-+- | |
| | | | | | | | | |
Contribution: 7,3
| | | | |
-+-+- -+-+- |
| | | | |
Contribution: 4,2
| |
-+- -+-
| |
Entrée: 6,1
ou 6,10
(remarquez les espaces de tête)
| | | | | |
| | | | | |
| | | | | |
Notez également que la base 1 est censée être incohérente - seules les lignes verticales doivent être utilisées.
Si l'une des valeurs entrées est 0, il ne devrait y avoir aucune sortie (et votre programme devrait se terminer normalement).
Règles
- Il s'agit de code-golf , donc la mise en œuvre correcte la plus courte (en octets) gagne.
- L'entrée / sortie peut se faire sur tout support approprié (par exemple stdin / stdout, fichier ...).
- L'entrée peut prendre la forme de plusieurs arguments de ligne de commande ou être séparée par des espaces, etc. si elle convient mieux à votre langue cible.
- Les retours à la ligne de fin sont autorisés dans la sortie. Les espaces de fin ne le sont pas. Cette règle ne s'applique que lorsqu'il y a une sortie (c'est-à-dire pas lorsque la valeur entrée est 0).
- Votre code doit être par défaut à la base 5 lorsqu'aucune base n'est entrée.
6,1
ressembler davantage à cela-+- -+- -+- -+- -+- -+-
?-+-
représenterait deux, car il y a une ligne verticale et un score horizontal à travers. La base 1 n'aurait que des lignes verticales. @AndoDaan modifié.--- --- --- --- --- ---
. Par souci de cohérence avec les autres bases, vous devez placer une frappe horizontale à traversb-1
les lignes verticales. S'il est censé être incohérent, vous devez l'indiquer explicitement.Réponses:
CJam 103 85 72 caractères
Essayez-le sur http://cjam.aditsu.net/ .
original
Fonctionne en définissant un ensemble de comptages avec des espaces, des lignes et un l pour les espaces qui doivent rester des espaces. Profite ensuite de la fonction er (tranliteration) pour faire la deuxième ligne. La partie la plus inefficace concerne les cas spéciaux 1 et 0. Éditera comme je l'améliore. Astuce J'ai pris trop de temps à réaliser: comme la deuxième entrée étant 1 est identique à l'infini ou la première entrée +1, le redéfinir quand il est égal à 1 économise beaucoup de travail.
le plus amélioré jusqu'à présent avec une virgule délimitée
le plus amélioré jusqu'à présent avec une entrée délimitée par l'espace
Naturellement, CJam est vraiment conçu pour une entrée délimitée par l'espace. Placer l'entrée à 20 3 au lieu de 20,3 est un énorme avantage.
la source
Python 2 -
111 108 119 144 140 140 136 135134 - Essayez-leOk, essayons:
Edit: j'ai oublié qu'il ne devrait pas y avoir de sortie si
n==0
oub==0
. Cela me coûte 11 caractères. :(Edit: Ok, après avoir corrigé le deuxième problème mentionné dans les commentaires, ma solution a essentiellement convergé vers celle de BeetDemGuise.
la source
b
devrait être 5 dans ce cas). Je vais être plus clair dans la question. Edit: oh, tant pis, vous l'avez corrigé comme je l'ai fait ce commentaire!n/b
au lieu den//b
?Frapper,
239 228 199 189188Voici ma tentative, ça pourrait être beaucoup joué au golf.
Remarque: la deuxième ligne ne soustrait pas 5 de 2, elle définit une valeur par défaut si
$2
est vide!la source
{1..$n}
au lieu de`seq $n`
?h=8;echo {1..$h}
sorties{1..8}
Python -
171143Le programme est assez simple:
t,b
. Si cela échoue, attribuez simplement les valeurs correctes.1
, changez sa valeur en quelque chose qui peut gérer facilement toutes les lignes verticales (t+1
).t
etb
sont différents de zéro.EDIT 1: utilisez la
input
fonction au lieu deraw_input
jouer.EDIT 2: Merci à Falko d'avoir signalé un petit bug avec ma vérification non nulle. Maintenant, notre code est fondamentalement identique, moins quelques noms de variables et une petite logique.
EDIT 3: Grâce à la façon dont Python compare les séquences et les différents types , nous pouvons comparer
i
à unlist
pour obtenir une version plus courte de notretry...except
bloc.Voici la version non golfée:
la source
t&b
c'estFalse
pour 10,5. Sinon, nos solutions convergent! ;)i
est scalaire ou une liste. Ensuite, nous pourrions laisser tomber letry ... except
monstre.list
est toujours supérieur à un int. De plus, leslist
s sont comparés dans l'ordre lexicographique. Donc, si nous comparons,[0]<i
cela retournera toujoursFalse
sii
est un nombre etTrue
sii
est une liste (avec un premier élément non nul).Java, 343
Moins golfé:
la source
i
unlong
afin de ne pas avoir à le déclarer séparément. Un peu plus en faisanti++%b>0
dans vos boucles au lieu de l'incrémenter séparément (eti++<n%b
dans la troisième boucle). Un autre en utilisantb=b<2?(int)2e9:b
.Perl -
167165156non golfé
la source
C - 193
Je suis vraiment désolé. Traiter le cas spécial pour 1 était un peu un mauvais hack donc je suppose que cela pourrait être joué plus avec une meilleure approche. En outre, ce code inclut une nouvelle ligne au début de la sortie, donc si cela n'est pas autorisé, faites-le moi savoir.
Bien sûr, des définitions très laides aident toujours :)
Le nombre de caractères comprend uniquement les espaces nécessaires et les nouvelles lignes.
la source
printf
parputs
et en remplaçantreturn
par un opérateur ternaire.puts
est qu'il ajoute une nouvelle ligne à chaque fois :(. Et pour l'opérateur ternaire, il n'est pas possible d'ajouter desreturn
s ou desfor
s dedans!. Votre commentaire m'a donné l'idée de sauvegarder quelques caractères de plus très facilement en enlevant lereturn
bien. Merci!C # 271 octets
Pas le plus court, je ne pouvais pas jouer au golf en raison de la nécessité d'accepter 0 comme entrée.
Code formaté:
la source
Lua -
219203 octetsJe suis allé faire les copies d de b copies de "|", puis j'ai ajouté r copies de "|" à la fin. J'ai l'impression que j'aurais peut-être dû aller avec le 'tally up' les "|" à la chaîne un à la fois.
non golfé:
Échantillon:
la source
JavaScript (193)
Cela pourrait être trop complexe.
Version commentée
la source
Python -
127123122 122Juste se faufiler avec une version python légèrement plus courte.
edit: Correction de 0 qui n'imprimait rien et qui rebondissait, finissait par la même longueur
la source
C (207 caractères)
La nouvelle ligne juste avant
exit
est uniquement pour la lisibilité.scanf
usage sans vergogne volé à Allbeert. Notez que cette solution ne se compile pas avec gcc car elle essaie d'imposer un prototype inexistant pourexit
. Compilez avec un compilateur C fonctionnel commetcc
. En outre, cette fonction peut ou non fonctionner sur les plates-formes 64 bits. Utilisez avec précaution.Voici l'implémentation non golfée d'origine sur laquelle elle est basée:
la source
Python 2 ,
134126123 123114 octetsEssayez-le en ligne!
Vieille question que je connais mais amusante à essayer quand même. Chance d'essayer quelques trucs que j'ai appris depuis mon arrivée.
la source