var QUESTION_ID=84050,OVERRIDE_USER=31343;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"http://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
Réponses:
Befunge , 165
227octetsPas autant d'espaces qu'avant, mais il reste des lacunes. Le principe est le même que dans la solution précédente, mais la disposition est différente. Cette fois, pour vérifier si les deux nombres sont égaux à 1, je prends simplement leur produit et vérifie si le résultat est supérieur à 1.
Ancienne solution (227 octets)
Il serait peut-être possible de jouer au golf plus souvent. Il suffit de regarder tout cet espace!
Voici ma mauvaise tentative d'explication sous forme d'image MSPaint: Le code coule dans le sens de la flèche.
la source
V ,
43, 40, 3836 octetsUne des plus longues réponses V que j'ai jamais écrites ...
Essayez-le en ligne!
Comme il contient des caractères unicode et non imprimables, voici un hexdump réversible:
Ce défi consiste à manipuler du texte, donc parfait pour V! D'un autre côté, V est terrible en conditions et en mathématiques, donc le résultat différent pour (1, 1) l'a vraiment foiré ... :(
Explication:
Nous avons maintenant des lignes de «hauteur» de o avec des espaces entre elles.
Version non concurrente (31 octets):
Essayez-le en ligne!
Cette version utilise plusieurs fonctionnalités qui sont plus récentes que ce défi d'être plus courtes de 5 octets!
Deuxième explication:
qui est "Supprimer la ligne et la coller n fois" est remplacé par
ÀÄ
"Répéter cette ligne n fois". (-2 octets)qui était "Remplacer le premier match de cette regex; Annuler" a été remplacé par
Ce qui est juste "Rechercher une correspondance de cette expression rationnelle" (-1 octet)
Enfin,
Ò
n’est qu’un synonyme simple pourVr
lequel "Remplace chaque caractère de cette ligne par un" x "". (-2 octets)la source
32code machine x86 little-endian 16 bits,575451 octets3 octets de moins grâce à @ninjalj.
Fortement réécrit le code et ont réussi à raser 3 autres octets
En hex
Entrée: BX = largeur, SI = hauteur, DI pointe vers la mémoire tampon qui reçoit le résultat sous forme de chaîne terminée par une valeur NULL avec des lignes séparées par "\ n"
Démontage:
la source
Python 2,
757372 octetsRetourne une chaîne, avec une condition pour gérer le bloc 1,1.
Merci à Lynn et Chepner pour deux octets
la source
lambda x,y:('_'*x*2+'___\n'+
etc. enregistre un octet.x*'__'
au lieu de2*x*'_'
.<function <lambda> at 0x......>
. Comment puis-je tester cela?f=lambda x:x+1; print(f(9))
CJam, 34 ans
Essayez-le en ligne
Explication:
la source
Ruby,
5956 octetsFonction anonyme, renvoie une chaîne multiligne. Essayez-le en ligne!
-3 octets grâce à l'emprunt d'un tour de @ El'endiaStarman
la source
Java,
318312297294260258 octetsSauvegardé 15 octets grâce à cliffroot !
Cela fonctionne avec des arguments en ligne de commande.
UngolfedSous une forme lisible par l'homme:Oui, il est encore difficile de comprendre ce qui se passe même lorsque le programme n'est pas joué. Donc, voici une explication étape par étape:
Les deux premiers arguments de la ligne de commande, que nous utiliserons pour obtenir des dimensions, peuvent être utilisés dans le programme en tant que
A[0]
etA[1]
(respectivement).b
est le nombre de colonnes,B
est le nombre de lignes etC
est une variable dédiée à une utilisation dans lesfor
boucles.c
est la pièce de Lego. Nous y ajouterons des lignes puis l’imprimerons à la fin.Si la pièce à imprimer est 1x1, les deux
b
(nombre de colonnes) etB
(nombre de lignes) doivent être inférieurs à 2. Nous définissons donc simplementc
une seuleo
, puis passons à la déclaration qui correspond àSystem.out.print
la pièce si tel est le cas.Ici, nous annexons des
(integerValueOfA[0] * 2) + 3
underscores àc
. C'est la rangée la plus haute au-dessus de tous les trous.C'est la boucle où nous construisons la pièce une rangée à la fois. Ce qui se passe à l'intérieur est impossible à expliquer sans exemples. Disons que la pièce est 4x4:
.
Ici, nous ajoutons des
(integerValueOfA[0] * 2) + 3
traits d'union à la pièce. C'est la rangée tout en bas, en dessous de tous les trous.Le morceau 4x4 que j'ai utilisé pour expliquer la
for
boucle où le morceau est réellement construit ressemble maintenant à ceci:Et finalement, nous imprimons la pièce!
la source
C
variable defor
bouclesint b=Byte.valueOf(A[0]),B=Byte.valueOf(A[1]),C
. Dans toutes vos boucles for, il semble également que vous puissiez utiliser lesC-->0;
chèques, ce qui en fait une 298, pastebin.com/uj42JueLfor
boucles pour quelques octets enregistrés - pastebin.com/dhNCpi6nif(b==1&B==1)
ce qui vous permet d’économiser plus de 20 octets.System.out.print('o');return;
, vous pouvez définirc='o'
et placer la logique pour différentes briques du bloc else. avoir ensuite une seule instruction d'impression et aucun retour vous permet de sauvegarder des octets supplémentairesMinkolang 0.15 ,
585756 octetsOui c'est vrai. Je hors joué au golf
unà deux petits puants octets ...Essayez-le ici!
Explication
Ok, ce sont deux réécritures significatives de l'explication pour deux octets sauvegardés. Je ne pense pas que je peux ou vais jouer au golf plus que celui-ci. : P
la source
brainfuck, 391 octets
Je sais que cela peut être joué plus souvent, mais à ce stade, je suis content que cela fonctionne. Je continuerai à travailler pour le réduire.
L'entrée doit être donnée sous forme de deux chiffres seulement. Comme dans,
(8, 2)
vous entrez simplement82
.Essayez-le en ligne!
Panne:
Commencez par insérer les caractères nécessaires dans la bande:
(newline)| o_-
Ensuite, collectez l'entrée dans deux cellules et soustrayez 48 de chacune (pour obtenir la valeur numérique et non le caractère numérique)
Ensuite, vérifiez le cas particulier de
(1, 1)
(Notez que cela ne concerne que la vérification de 109 octets du code). Comme si ceif
n’était pas assez difficile à faire en brainfuck, nous avons un imbriquéif
:Voici la structure pour vérifier si une cellule x est zéro ou non nulle:
Cependant, dans un imbriqué
if
, nous avons besoin de 4 cellules temporaires.Nous arrivons maintenant à l'impression réelle des caractères:
Imprimer la barre du haut et une nouvelle ligne:
Imprimer un
|
, un rang deo
', un autre|
et un saut de ligne plusieurs fois de la même hauteur:Et imprimez la barre du bas (pas de nouvelle ligne nécessaire ici):
la source
Retina , 52 octets
Le nombre d'octets suppose un codage ISO 8859-1. Notez que la sixième ligne est supposée contenir un seul espace.
Essayez-le en ligne!
L'entrée est unaire, en utilisant
1
comme chiffre unaire, l'espace comme séparateur et la hauteur suivie de la largeur.Explication
Toutes les étapes de ce programme sont des substitutions nues, parfois avec un modificateur de regex régulier (pas de répétition ni de boucles, pas d'autres types d'étapes). Il n'utilise même pas les fonctionnalités de substitution spécifiques à Retina, à l'exception de l'
¶
alias habituel pour les sauts de ligne.Le but de ceci est de "multiplier" les deux entrées. Notre objectif est de créer des
h+2
lignes avecw
1
s chacune (h+2
afin que nous puissions transformer le haut et le bas en_
et-
plus tard). L'\G
ancre nécessite que le match commence là où le dernier s'est arrêté. Autrement dit, si nous ne parvenons jamais à faire correspondre un caractère de la chaîne, les autres caractères ne correspondront pas non plus. Nous utilisons cela pour ne faire correspondre que le1
s inh
, mais pasw
parce que la regex ne permet pas de faire correspondre l'espace qui les sépare. Cependant, nous faisons aussi l'1
option, afin d'obtenir une correspondance vide supplémentaire à la fin deh
. C'est desh+1
allumettes. Chacune de celles-ci est remplacée par l'entrée entière ($_
) suivie d'un saut de ligne.w
elle-même reste intacte, ce qui nous donne lah+2
nd copie. Disons que l'entrée était11 1111
, alors nous avons maintenant:C'est plutôt bien. Nous avons quelques trucs en plus, mais les
h+2
copiesw
sont là.Notez qu'il y a un espace à la fin de la première ligne. Cela supprime ces préfixes des lignes afin que nous n'ayons que le
w
s après.Eh bien, cela ne fonctionne pas vraiment avec le formatage de SE ... la première ligne est vide et la deuxième ligne est supposée contenir un seul espace. Cela insère des espaces dans toutes les positions possibles, c'est-à-dire au début et à la fin de chaque ligne et entre chaque paire de
1
s:Nous allons les transformer en
o
s plus tardCeci enveloppe simplement chaque ligne dans une paire de
|
:Maintenant on s'occupe du haut et du bas:
Il est temps
\G
de briller à nouveau. Cela correspond à chaque caractère de la première ligne et le transforme en_
.Même chose, mais en raison du
r
modificateur (mode de droite à gauche), cela correspond aux caractères de la dernière ligne et les transforme en-
. Alors maintenant nous avons:Il ne reste plus que deux choses à faire maintenant: transformez-les
1
eno
s, et si l'entrée était1 1
alors, transformez le tout eno
place. Nous pouvons gérer les deux avec une seule étape:s
est le mode simple ligne ordinaire (c’est-à-dire qu’il fait.
correspondre les sauts de ligne). Si la saisie a été effectuée,1 1
le résultat aura une taille minimale de 17 caractères, ce qui nous permet de le faire correspondre^.{17}$
et de le remplacero
. Sinon, si cela échoue, nous allons simplement faire correspondre tous les1
s et les remplacer paro
.la source
Jolf, 36 octets
Jolf, 24 octets, sans compétition
Eh bien, j'ai fait une meilleure boîte intégrée.
Jolf,
3837 octetsDes choses simples, vraiment. Sauvegardé un octet en notant que
!Ζ
(zeta mathématique, ou la déviance de stand) n’est que 0 lorsque les deux arguments valent 1, et est sinon falsey (dans notre cas).la source
05AB1E , 33 octets
Code:
Explication:
Utilise le codage CP-1252 . Essayez-le en ligne! .
la source
JavaScript (ES6),
8986 octetsEdit: 3 octets enregistrés grâce à @Shaggy.
la source
repeat
.Python 2, 71 octets
la source
Befunge, 144 octets
J'aurais préféré commenter cet article, mais je n'ai pas encore la réputation, alors je pose moi-même une réponse, qui fonctionne de la même manière, mais qui est légèrement plus compacte.
vous pouvez tester le code ici
la source
Reng v.4, 82 octets, sans compétition
J'ai mis en place un correctif qui corrige les fonctions écrasées par eux-mêmes (veuillez ne pas demander, mes données sont hantées)
Prend les entrées sous forme de nombres joints par des espaces, comme
4 2
. Essayez-le ici!la source
I pushed a bug fix that fixes functions being overwritten by themselves
... Eh bien, c'est un bug intéressant à avoirPowerShell v2 +, 76 octets
Prend les entrées, puis vérifie une
if
déclaration. Étant donné que les valeurs non nulles sont truthy dans PowerShell, tant au moins un$x
et$y
ne sont pas égaux1
, leif
sera vrai.À l'intérieur du
if
, il y a une série de multiplications de chaînes. Premièrement, nous construisons notre chaîne de caractères de soulignement, en conservant$z
pour plus tard. Cela est placé sur le pipeline. Ensuite, nous construisons notre chaîne de côtés et de chevilles (multipliée par les chevilles$x
), les$y
temps réalisés et concaténons cela avec nos$z
temps de tirets . Cette chaîne est ensuite placée sur le pipeline et nousexit
. Le pipeline est vidé et l'impression est implicite. Notez que nous obtenons gratuitement la nouvelle ligne entre les traits de soulignement et la première ligne de chevilles, car le.ToString()
séparateur par défaut pour la sortie de tableau est`n
(et nous produisons un tableau de chaînes).Si la valeur
if
est false, nous sommes dans le1 1
cas spécial , nous nous mettons donc seuls"o"
sur le pipeline et sortons, avec une nouvelle impression implicite.Exemples
la source
Bash,
186,163,156,148,131, 130 octetsRemarque: Si vous avez vraiment besoin que le lego ait des traits d'union pour la dernière ligne, remplacez le dernier printf par
et ajoutez deux octets.
la source
(($x+$y==2))&&echo o||{ printf _%.0s $(seq -1 $x);echo;for((i=0;i<$y;i++));do printf \|;for((j=0;j<$x;j++));do printf o;done;echo \|;done;printf =%.0s $(seq -1 $x);echo;}
()
, vous n'avez pas besoin du mot-cléfunction
pour déclarer une fonction. Il y a une autrefor
syntaxe en utilisant des accolades, par exemple:for((j=$1;j--;));{ printf o;}
. Comme indiqué dans l'exemple précédent, vous pouvez enregistrer certains caractères en décrémentant et en testantfor
la deuxième expression de. Vous pouvez utiliser des backticks au lieu de$(cmd)
.(($x+$y==2))&&echo o||{ printf _%.0s `seq -1 $x`;echo;for((i=$y;i--;)){ printf \|;for((j=$x;j--;)){ printf o;};echo \|;};printf =%.0s `seq -1 $x`;echo;}
(($something))
de((something))
partout. (a$1
toujours besoin du signe dollar pour le1
Perl 5 -
8477 octets84 octets
77 octets. Avec l'aide de Dom Hastings
la source
warn
dans un programme de golf, mais je me suis rendu compte que vous l'utilisiez parce qu'il est plus court queprint
. Agréable!-E
au lieu de-e
, en activant toutes les extensions. Je suis nouveau à cet endroit, donc je ne sais pas exactement où il est spécifié comment compter les scores.warn
), vous n'avez pas besoin de guillemets"o"
(vous pouvez utilisez un mot simple pour un autre -2), si vous insérez dans le calcul,$w
vous devez enregistrer un autre octet ('_'x($w=3+2*$x)
vs.$w=3+2*$x;
...'_'x$w
) et, enfin, vous pouvez modifier le\n
pour un saut de ligne littéral. J'espère que ça t'as aidé!C,
202191 octetsMerci à @Lince Assassino d' avoir économisé 11 octets!
Ungolfed:
la source
p(char*A){printf(A);}
#define p printf
Cannelle, 32 octets
Non en compétition. Essayez-le en ligne. La saisie doit être exactement sous la forme,
[width,height]
sans espace entre la virgule et la hauteur.Explication
La chaîne décompresse à ceci:
La première
l
étape mappe[1,1]
suro
(le cas particulier) et tout le reste sur la chaîneLe backtick signale alors le début d'une deuxième étape; au lieu de sortir cette chaîne, CG découpe le backtick et l'exécute. Le
p
mode répète ensuite tous les caractères à l'intérieur du premier paramètre de largeur (largeur) tildes, puis à nouveau les caractères à l'intérieur du deuxième paramètre (hauteur) des signes de pourcentage. Donc pour[4,2]
cela se transforme en ceci:et ensuite dans:
la source
Lot,
172170 octetsEdit: 2 octets sauvés grâce à
@ CᴏɴᴏʀO'Bʀɪᴇɴ@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ.Je peux économiser 7 octets si je peux supposer que l’expansion différée est activée.
la source
%%o%%
au lieu de%o%
?%o%
serait remplacé par la valeur d'origine deo
chaque fois, de sorte queo
cela ne serait jamais égal" o"
.%%o%%
passe comme argument decall
of%o%
, qui utilise ensuite la valeur actuelle deo
.do set o=%o% o
?%o%
est développé avant que lafor
boucle ne soit analysée. La boucle est donc lue, cefor /l %i in (1,1,8) do call set o= o
qui est évidemment inutile.do set o=%%o%% o
alors (-5)?Vim, 56 frappes
Cela ressemble à une tâche d'édition de texte, alors Vim est le choix évident! Je prends l'entrée comme un fichier texte avec deux entiers séparés par des espaces et la réponse dans le même fichier. Aussi, je vous déteste pour avoir le cas spécial 1x1 ... Quoi qu'il en soit:
et s'il n'y avait pas eu le cas spécial, 35 frappes
Une ventilation pour les personnes sensées:
Supprimer les numéros de la mémoire tampon dans @a et @b (caractère espace gardé)
Remplacez l'espace par "o" et si c'est le cas, sauvegardez et quittez
Effacer la ligne et écrire les bords du bloc lego
Insérer @ beaucoup de "o" pour obtenir une partie intermédiaire finie
Tirez ligne et faites @b copies supplémentaires (une de trop)
Nous sommes en haut de la mémoire tampon, remplaçons la ligne supplémentaire par des traits de soulignement
Aller au bas de la mémoire tampon, tirer la ligne que nous avons tirée plus tôt
Remplacer la ligne par des tirets, enregistrer et quitter
la source
Pyth, 38 octets
Suite de tests.
la source
Haskell, 76 octets
Exemple d'utilisation:
3 # 2
vous donne une chaîne multiligne pour une brique 3 par 2.Ungolfed:
la source
unlines
, mais ce n’est pas le cas.Groovy,
107,98,70, 64Essai:
la source
Befunge,
114113108101 octetsJe sais qu'il existe déjà un certain nombre de solutions Befunge, mais j'étais assez certain qu'elles pourraient être améliorées en adoptant une approche différente de la présentation du code. Je pense que cette réponse peut également être utilisée, mais elle est déjà un peu plus petite que l’une des entrées précédentes.
Essayez-le en ligne!
la source
:<|
est nécessaire?APL, 46 octets
La garde:
⍵≡1 1:'o'
pour le cas particulier. Sinon,'o '⍴⍨1 2×⌽⍵
construit le contenu. Et le reste n'est que la boxe.la source
C #, 198 octets
rapide et sale
Je devais écrire une fonction qui multiplie les chaînes
non golfé (pour suggestions)
la source
string s(string m,int u){return string.Join("",new int[u].Select(n => m));}
: le .ToArray () est redondant et la chaîne [] peut également être un int []. Mais au lieu de string.Inscrivez-vous à agrégé:string s(string m, int u){return new int[u].Aggregate("",(t,i)=>t+m);}
void f(int x,int y){Func<char,int,string>s=(c,i)=>new string(c,i);int l=x*2+3;Console.Write((y&x)==1?"o":s('_',l)+"\n"+s('y',y).Replace("y","| "+s('x', x)+"|\n").Replace("x","o ")+s('-',l));}
Octave,
979586 octetsJ'ai utilisé la méthode de @atlasologist en Python pour tester
(1, 1)
:(...,'o')[x<2>y]
Merci à @ Luis Mendo pour la sauvegarde de 7 octets:
a=ones(1,w*2+3)*'_'
àa=~(1:w*2+3)+95
eta./a*'-'
à~a+45
Merci à @pajonk pour la sauvegarde de 2 octets:
f=
la source
a./a*'-'
pouvez-vous utiliser~~a*'-'
? Ou même~a+45
?f=
)