Je m'attendais à publier quelque chose de plus complexe comme mon premier casse-tête dans PCG, mais une question particulière, euh ... sur les devoirs sur Stack Overflow m'a inspiré à poster ceci. Ils veulent:
imprimez le modèle suivant pour tout mot donné contenant un nombre impair de lettres:
P M R A O R G O R R A P M
Notez que les lettres sont un écart de chevalier dans le motif que vous devez imprimer. Ainsi, toutes les autres colonnes sont vides. - (Merci xnor de l' avoir signalé.)
Règles
- L'utilisation de C ++ est interdite. Comme je peux y lier cette question.
- Vous pouvez utiliser
stdout
, ou tout moyen de sortie rapide d'une chaîne (par exemplealert()
en JavaScript). - Comme toujours, le code le plus court l'emporte.
Réponses:
Pyth , 22
Tester:
Explication:
la source
~
bit ne soit pas en Pyth. Ensuite, nous pourrions passert-lzd
à+lz~d
- encore 5 caractères.Vz
est une astuce intéressante: je ne savais pas que celaU<string>
donnaitrange(len(<string>))
.APL (
37353427)Il prend la saisie du clavier, comme ceci:
la source
Python
2-94 90 8988Contribution:
Sortie:
la source
i in[j,L+~j]
.L+~j
.+~
truc ...for i in R:print" ".join([s[j]," "][j!=i!=L+~j]for j in R)
pour enregistrer un personnage? (Je n'ai pas accès à Python 2 pour tester.)Python 3:75 caractères
Pour la ligne
i
, nous commençons par une liste d'espaces et définissons les entréesi
de l'avant et de l'arrière pour qu'elles soient égales aux lettres de la chaîne d'entrée. Ensuite, nous imprimons le résultat.Les chaînes Python sont immuables, il
a
doit donc s'agir d'une liste de caractères à la place. La listea
doit être initialisée à l'intérieur de la boucle ou les modifications seront reportées entre les boucles. Nous utilisonsprint(*a)
pour imprimer chaque caractère de la liste, séparés par des espaces, ce qui nécessite Python 3.Les lignes de sortie sont symétriques, donc nous pouvons avoir un
i
compte à rebours plutôt que vers le haut en utilisant une boucle while.Il fonctionne également pour un nombre pair de lettres.
la source
VlzJ*]dlz=@JN@zN=@Jt_N@_zNjdJ
ce qui est de 29 octets ... Je suppose que je vais devoir essayer autre chose pour battre APL. De plus, +1 pour la preuve que Python 3 peutlen("raw_input()") + len("print ") > len("input()") + len("print()")
.input()
est également valable en python 2 (il agit juste un peu différemment), donc à moins que l'entrée pour le défi ne soit assez stricte, python 2 gagnera généralement.print" ".join(a)
votre code est plus court (82) que le mien.CJam,
2725 octetsEssayez-le en ligne.
Exemple d'exécution
Comme l'exemple dans la réponse, chaque ligne a un espace de fin.
Comment ça marche
la source
Java - 168
Une simple boucle imbriquée, il n'y a rien de vraiment spécial ici.
Avec des sauts de ligne:
la source
Pure Bash, 94 octets
la source
t%l
calculs. Enregistrez-le lors de la première utilisation dans une variable,((x=t%l))
puis utilisez la variable pour la réduire à 94 caractères.x=t%l
ety=t/l
c'était plus long ... je n'ai pas eu l'idée de n'utiliser que xRubis, 64
Explication
String
.n
au total):n
espaces.i
th etn-i
th (~i
, merci xnor) par les caractèresi
th etn-i
th de l'entrée.la source
-i-1
comme complément de bits~i
.gets.size.times{|x|u=?\s*~/$/;u[x]=$_[x];u[~x]=$_[~x];puts u}
(suppose que l'entrée n'est pas terminée par une nouvelle ligne, par exempleecho -n CODE-GOLF
). On peut alors faire un usage supplémentaire de.chars
pour sauvegarder un autre personnage:x=0;gets.chars{|r|u=?\s*~/$/;u[x]=r;u[~x]=$_[-x+=1];puts u}
JavaScript (E6) 101
95129136modifier espacement des lettres incorrect. Fixé.
Édition Plus simple et plus courte en utilisant des boucles classiques
Pour une fonction, sortie via popup.
Version précédente utilisant .map
Test dans la console FireFox / FireBug
Sortie
la source
Befunge-93,
6871Vous pouvez le tester ici . Il y aura une boîte de dialogue d'entrée à chaque passage
~
; entrez votre mot un caractère à la fois (cela dit que l'entrée est «klunky» après tout), en terminant par un espace.Il n'imprimera pas sur la console; ce ne serait pas Befunge sans un soupçon d'auto-modification, après tout! Au lieu de cela, il modifiera sa propre grille pour afficher le message. Une fois terminé, la grille ressemblera à ceci:
(Notez le noble sacrifice de la cellule à (0,0), une fois que nous savons que le pointeur n'y ira plus, dans le but de stocker une donnée.)
Il fonctionne également avec des entrées de même longueur. Notez que, puisque Befunge-93 est limité à une grille 80x25, la taille d'entrée est limitée à 21 caractères si vous l'exécutez dans un interpréteur Befunge-93. L'exécuter en tant que Befunge-98 devrait supprimer cette limite.
Modifier - Maintenant, cela fonctionne plus dans le sens de la sortie prévue, au détriment de seulement trois caractères de longueur.
la source
Javascript 102
84 85Edit: a dû fixer l'espacement. Plus si petit.
la source
function(s)
puisque tu ne récrères pas?CJam,
3836353432 octetsTestez-le ici.Ceci lit le mot d'entrée de STDIN. Il fonctionne également pour un nombre pair de caractères. Cela imprime une colonne d'espaces de fin, mais je ne vois rien dans les règles contre cela.
Explication
Le contenu de la pile est imprimé automatiquement à la fin du programme.
la source
l:I,,_f{f{_2$=@2$+I,(=|\I=S?S}N}
sur une serviette que↑{∊2↑¨⍵↑¨I}¨↓(+∨⌽)∘.=⍨⍳⍴I←⍞
... gloussementC, 105
deux façons légèrement différentes de le faire.
Si vous souhaitez ajouter des espaces supplémentaires, remplacez-les
putchar(
parprintf(" %c",
5 caractères supplémentaires.la source
J -
3630 octets:Edit: 6 caractères plus courts, les crédits vont à @algorithmshark .
par exemple:
Bonus: fonctionne également avec des chaînes de longueur égale:
la source
Prolog - 240 octets
Invocation:
Lisible:
la source
Canevas , 5 octets
Essayez-le ici!
Explication:
la source
R ,
99989389 octetsEssayez-le en ligne!
La ligne 1 lit la chaîne d'entrée, la divise en caractères, stocke sa longueur et crée une matrice avec le mot sur sa diagonale principale - les lettres du mot sont superposées sur une matrice d'identité (et répétées par défaut pour correspondre à sa longueur) et uniquement celles qui correspondent Les 1 sont conservés, les autres étant remplacés par des espaces.
La ligne 2 imprime une matrice formée d'éléments de la matrice diagonale ou de sa version à miroir horizontal, selon la valeur la plus élevée.
−2 + 1 = −1 octet grâce à JayCe
−4 octets grâce à Giuseppe
la source
pmax
et intégrant quelques affectations supplémentaires.C # (
214212)(Certainement mal) Version golf:
Version non-golfée:
Tous les conseils, astuces, astuces ou remarques sont les bienvenus, car c'est ma première tentative chez CodeGolf. Je voulais juste l'essayer, même si je sais que ma longueur d'octet C # ne sera même pas proche de doubler les meilleures solutions;)
Et comment comptez-vous vos octets? Je viens de publier ce qui précède dans une fenêtre de surveillance rapide et je l'ai fait
.Length
. Je pourrais écrire un petit programme pour compter les octets pour moi, mais je parie qu'il existe un moyen plus simple que je ne connais pas encore.la source
for(;i < l;i++)
.JavaScript (ES6) -
185177175170 octetsMettez ceci dans la console Firefox et exécutez comme
f('PROGRAM')
:f("CODE-GOLF")
:la source
Mathematica, 149 octets
Entrée passée en paramètre à la fonction; renvoie la chaîne de sortie. Il y a une nouvelle ligne à la fin de la sortie.
Explication: Nous créons une matrice diagonale avec la chaîne, puis nous en créons une copie retournée verticalement en utilisant
Reverse@#
pour inverser les lignes. Ensuite, nous avons une troisième matrice de mêmes dimensions contenant seulement 32 (espace ascii). Nous utilisonsMapThread
pour prendre le max élément par élément de ces 3 matrices. Enfin, nous avons desRiffle
espaces dans chaque ligne,Append
une nouvelle ligne à la fin etFlatten
le résultat.la source
C , 119
Cela pourrait ne pas être compilé en C ++, donc j'espère que je n'ai pas violé les règles :)
la source
i=0
etj=0
n'est pas nécessaire, car les variables globales sont initialisées à zéro. 3. Vous pouvez utiliser à lamain(l,v)char**v;
place demain(int l,char**v)
. 4. Si vous mettezi
à jour en tant quei+=puts("")
, vous pouvez vous débarrasser des crochets de la boucle extérieure.Perl - 90
Il pourrait être possible d'en extraire d'autres caractères:
89
+1
pour-n
.Courir avec:
Sortie:
la source
T-SQL: 180
Prendre l'entrée de la variable @i
Cela place des caractères simples dans / décrémentant du début et de la fin dans une chaîne d'espaces.
Résultat du test
la source
PowerShell
11810297Les sorties:
la source
Gelée , 11 octets
Essayez-le en ligne!
la source
JavaScript (Node.js) , 81 octets
EDIT : -1 Merci Joe King. Je n'ai pas vu que le TIO donne de la pâte directe préformatée pour CG.
Essayez-le en ligne!
la source
-i-1
peut être+~i
C # 208
la source
t+=i==j?s[i]:i==n-j-1?s[n-i-1]:"";
.GolfScript 46 ( DEMO )
la source
Peu importe combien de temps, il doit toujours y avoir une réponse dans ...
Java -
289234 octetsUngolfed:
Le résultat, mal fait, est:
Ajout de l'Merde, je suis vraiment nul.import java.util.Scanner
intérieur du code parce que je ne me souviens jamais si les importations comptent pour le nombre d'octets ...la source
from math import floor as f
qui est un peu tricheuseSystem.out.print
appels en un seul, en utilisant quelques opérateurs ternaires.System.out.print
appel à la fin.C # (192/170)
Ou, en tant que "Main () uniquement":
la source