Écrivez le programme le plus court qui prend un seul entier comme entrée et imprime un abaque Suanpan
Testcases
Contribution:
314159
Sortie:
|\======================================/|
|| (__) (__) (__) (__) (__) (__) ||
|| (__) (__) (__) (__) || || ||
|| || || || || || || ||
|| || || || || (__) (__) ||
|<======================================>|
|| (__) (__) (__) (__) || (__) ||
|| (__) || (__) || || (__) ||
|| (__) || (__) || || (__) ||
|| || || (__) || || (__) ||
|| || || || || || || ||
|| || || || || (__) || ||
|| || (__) || (__) (__) || ||
|| || (__) || (__) (__) || ||
|| (__) (__) || (__) (__) || ||
|| (__) (__) (__) (__) (__) (__) ||
|/======================================\|
Contribution:
6302715408
Sortie:
|\==============================================================/|
|| (__) (__) (__) (__) (__) (__) (__) (__) (__) (__) ||
|| || (__) (__) (__) || (__) || (__) (__) || ||
|| || || || || || || || || || || ||
|| (__) || || || (__) || (__) || || (__) ||
|<==============================================================>|
|| (__) (__) || (__) (__) (__) || (__) || (__) ||
|| || (__) || (__) (__) || || (__) || (__) ||
|| || (__) || || || || || (__) || (__) ||
|| || || || || || || || (__) || || ||
|| || || || || || || || || || || ||
|| || || (__) || || || (__) || (__) || ||
|| (__) || (__) || || (__) (__) || (__) || ||
|| (__) || (__) (__) (__) (__) (__) || (__) || ||
|| (__) (__) (__) (__) (__) (__) (__) || (__) (__) ||
|| (__) (__) (__) (__) (__) (__) (__) (__) (__) (__) ||
|/==============================================================\|
Réponses:
J,
126124121 121119116115113105116115 115112 caractèresPrend l'entrée du clavier. Exemple:
L'astuce principale ici est l'abus de la boxe de J en redéfinissant les personnages qu'il utilise. Il utilise un paramètre global -
9!:7
- pour ce faire. Il y a peut-être de la place pour jouer au golf, mais pour être honnête, j'étais simplement heureux de faire fonctionner quelque chose qui devrait compenser ma dernière tentative à cette question .Convient à un tweet avec suffisamment de caractères pour dire 'Gaz a fait ça' :-).
Edit: 3 caractères d'économies sont dus à l'emprunt
2 6$' || (__)'
de la réponse de Jesse Millikan .Édition supplémentaire: perdu 11 personnages ajoutant des espaces supplémentaires de chaque côté que je n'avais pas remarqué n'étaient pas présents.
Explication:
Le code est divisé en trois sections principales:
1) Configuration
C'est lui-même en deux parties.
9!:7'\=/<=>/=\|='
redéfinit les caractères que J utilisera pour afficher les cases. La boxe de J ressemble normalement à ceci:mais après avoir redéfini cela ressemble à ceci:
(s=:[,.~,.)
définit un verbe que je vais utiliser quelques fois plus tard. Cela s'avère être le meilleur endroit pour le déclarer. Il prend un caractère à gauche et un tableau de caractères à droite et prend en sandwich le tableau entre les caractères. Par exemple:La finale
[
sert juste à séparer la configuration de la partie suivante.2) Entrée et représentation
".,.1!:1[1
prend l'entrée du clavier et la sépare en chiffres individuels:((i.5)</5|])
crée une représentation des zéros et des uns de la partie inférieure de l'abaque:|:@(1,.<&5)
crée une représentation des zéros et des uns de la partie supérieure de l'abaque:Ces deux parties sont regroupées en utilisant
;
:Ensuite, les boîtes sont placées les unes sur les autres pour former la base de l'abaque, donnant:
3) Sortie
&.>
signifie que ce qui suit fonctionnera successivement sur les deux boîtiers.(,-.)
c'est un crochet qui annulera l'entrée puis l'ajoutera à la fin de l'original:Cela fait vraiment partie de la représentation, mais pour le golf, il est préférable de l'avoir dans cette section. Appliqué à l'entrée précédente:
[:,.(_6[\' || (__)'){~
Les zéros et les uns sont maintenant utilisés pour sélectionner une chaîne pour représenter une perle ou son absence:Mais maintenant, comme Howard me l'a fait remarquer, il y a un espace court de chaque côté des perles. Nous utilisons donc le
s
verbe prédéfini pour prendre en sandwich le contenu de chaque boîte entre deux colonnes d'espaces:Cela fait, tout ce qui reste est de le convertir en une chaîne en utilisant
":
afin que nous puissions le prendre en sandwich entre deux colonnes de|
:la source
Ruby 1.9, 154 caractères
Suppose que l'entrée n'est pas terminée par une nouvelle ligne.
Fait amusant: en raison de la façon dont je transforme les chiffres d'entrée en nombres (
$&.hex
est un octet plus court que$&.to_i
), cet abaque fonctionne en fait avec des chiffres hexadécimaux jusqu'àe
:Car
0xf
, une troisième perle apparaît comme par magie dans la moitié supérieure.Lorsque vous autorisez des indicateurs supplémentaires lors de l'appel de script, cela peut être raccourci à 152 octets (code de 149 octets + 3 octets d'indicateurs d'invocation supplémentaires):
Courez avec
ruby -n suanpan.rb
.la source
Perl (151 caractères)
(
168163158157156154 154)Explication
Édite
\n
s en caractères de nouvelle ligne réels. Je ne peux pas croire que je n'y ai pas pensé plus tôt!la source
Windows PowerShell, 191
Histoire:
$l
.%
qui fait des nombres à partir des chiffres.$r
et$b
. Et$a
est également obsolète. Tel quel$l
.$OFS
si je n'en ai besoin qu'une seule fois.$f
.-join
car nous pouvons réellement utiliser l'espace supplémentaire à bon escient.la source
Haskell, 243 caractères
Pas particulièrement intelligent. Je suis sûr que cela peut être raccourci d'une manière ou d'une autre ...
la source
interact
z x|x=" (__) "|0<1=" || "
.Delphi, 348
Cette version construit une chaîne à écrire une seule fois; Les chiffres sont gérés par une fonction distincte qui fonctionne via une
digit modulo m >= value
construction (annulée si valeur <0).Delphi, 565Premier essai :
Cela utilise 3 tableaux; une pour les 7 chaînes qui pourraient être discernées, une pour les lignes de sortie et une pour mapper les 7 chaînes à 11 colonnes (10 chiffres et 1 colonne initiale).la source
GolfScript, 139 caractères
Pas encore beaucoup joué au golf, mais il s'inscrit dans un tweet (avec seulement ASCII). Essayez-le ici .
la source
J, 225
Réussit deux tests donnés, devrait fonctionner jusqu'à au moins plusieurs centaines de chiffres.
Tout d'abord: oui, oui, le fossoyage. Deuxièmement: c'est juste d'une longueur embarrassante. Tant pis. Je n'ai pas encore décidé de jouer au golf plus loin ou de me recroqueviller en position fœtale et de pleurer. (Ou les deux!)
Voici un peu d'explication au lieu d'un programme plus court:
la source
C,
277274 caractèresVous savez, il me semble que nous n'avons tout simplement pas assez de solutions ici qui tirent vraiment parti du préprocesseur C. C'est en partie parce que ceux-ci
#define
occupent en fait un peu d'espace. Mais encore, il y a tellement de potentiel. Je ressens le besoin de combler cette lacune.C'est mieux.
la source
Mathematica 281
Exemple
la source
C, 548
Première version, juste un peu de golf jusqu'à présent.
la source
Scala (489 caractères)
Vraiment une tentative merdique vraiment.
la source
Sclipting , 77 caractères
La prime fait référence aux tweets et Twitter compte les caractères (pas les octets). :)
J'ai écrit il y a quelques années (lorsque ce défi a été publié), mais je ne l'ai jamais publié parce que j'ai inventé Sclipting après la première publication de ce défi. Si vous pensez que cela le rend inéligible, je comprends.
Explication
la source
Python,
309301288 caractèresVersion compacte:
Version claire:
Notez que pour la compactification, les variables ont été renommées en une seule lettre et les compréhensions de liste ont été remplacées par des générateurs qui ne nécessitent pas de crochets supplémentaires.
la source