Votre tâche consiste à prendre une chaîne d'entrée de caractères ascii et à sortir la chaîne sous la forme d'une série de mots verticaux séparés par des espaces. Un exemple est illustré ci-dessous:
Étant donné la chaîne:
Hello, World! My name is Foo.
la sortie doit être:
H W M n i F
e o y a s o
l r m o
l l e .
o d
, !
10 points bonus seront attribués si votre programme gère correctement les chaînes qui doivent entourer le terminal, que nous définirons à 80 caractères.
50 points si votre programme peut aussi faire l'inverse!
code-golf
string
printable-ascii
Foo Barrigno
la source
la source
Réponses:
J, 15
Usage:
la source
Javascript -
228172145126Mon premier code golf :)
la source
"Input ?"
n'affecte pas vraiment le comportement du programme, supprimez-le également.length
lieu de le demander deux fois, quelques accolades inutiles, des points-virgules inutiles.A=prompt().split(" "),B="";for(y=0;y<(l=A.length);y++){for(i=0;i<l;i++)if(A[i][y])B+=A[i][y];else B+="_";B+="\n"}alert(B)
. (Dans la méta-question sur les normes JavaScript pour les entrées-sorties, l'opinion généralement acceptée était que le fait de s'appuyer sur la sortie implicite de REPL ne devait pas être considéré comme correct.)if(A[i][y]){B+=A[i][y];}else{B+=" ";}
=>B+=(x=A[i][y])?x:" "
APL, 22
Explication
Exemple
la source
Rubis,
9187Hourra, j'ai battu Perl! :RÉ
Rubis, 150 - 50 bonus = 100
Il détecte simplement les nouvelles lignes et applique une gestion spéciale si elles sont détectées.
Exécutez-le comme
la source
Javascript
184149123Avec l'exemple de chaîne défini:
Vous pouvez copier la deuxième instruction sur la console de votre navigateur.
Non minifié:
Lien JsFiddle: http://jsfiddle.net/FzMvK/
Mon premier post de golf à code: P
la source
float:right
pour inverser?Perl - 92
97Fait le travail d'une manière assez simple.
la source
while
tel qu'utilisé ici est également un modificateur d'instruction.do{}while()
boucle?do
lui-même n'a rien d'autre, juste un bloc. C'estwhile
une chose distincte.K, 33
Exemple d'entrée et de sortie:
la source
"
censés être là?{-1@" "/:',:''x@'/:!max@#:'x:" "\:x;}
(37 caractères), ce qui produirait la sortie sans"
Python:
Une ligne de code pour traiter la piqûre:
la source
Python 2.7,
108103Je suis sûr que cela peut être joué plus, mais voici une première solution en python.
Améliorations:
la source
i=m
et descendez à 0, vous pouvez raser 3 autres caractères pour un 100 pair.F #, 187
la source
Rubis, 63
L'algorithme est très simple; seulement joué au golf. Le code fait 61 octets de long, plus 2 octets pour les
-na
options dont il a besoin pour fonctionner. Deruby -h
:Exemple d'exécution:
la source
Python 2.7 -
137112 octetsQuelqu'un d'autre l'a déjà fait mieux, mais je ferais aussi bien de vomir. Ajoute des espaces à chaque mot dans l'entrée jusqu'à ce qu'il ait la même longueur que le plus long (pour éviter les erreurs d'index pour la partie suivante), puis imprime lac
e lettre de chaque mot tout enc
allant de 0 à la longueur de chaque chaîne.J'ai trouvé une bien meilleure façon de le faire et j'ai supprimé 25 octets. Plutôt que de remplir les chaînes avec des espaces pour éviter l'erreur d'index, je gère l'erreur directement! Chaque fois à sa place il n'y a rien à imprimer, imprimer un seul espace avec
try:print w[c],
,except:print' ',
. Je me suis également souvenu que je n'avais pas besoin d'espace entre une instruction print et un littéral de chaîne, ce qui permettait d'économiser un octet.Notez que Python 2 vous permet de mélanger les tabulations et les espaces et les considère comme des niveaux d'indentation distincts. L'interpréteur Markdown de SE remplace un caractère de tabulation par quatre espaces, mais chaque ligne de ce programme, à l'exception du premier, a exactement un octet d'indentation.
Le formatage était assez facile, car les
print 'something',
impressions'something '
plutôt que'something\n'
. Je l'ai fait pour chaque personnage et j'ai utilisé uneprint
instruction vide pour obtenir la nouvelle ligne là où j'en avais besoin.la source
C,
1111109590 octetsCette solution utilise des codes de contrôle VT-100 pour déplacer le curseur sur le terminal
la
^[
séquence est un espace réservé pour le seul caractère ASCII ESC, qui ne peut pas être affiché ici.^[7
enregistre la position actuelle du pointeur^[8
restaure la position du curseur à la position enregistrée^[[2C
se déplace de 2 pas vers la droite^[[B
se déplace d'un pas vers le basmodifier 1: le
^[[D
code (1 étape à gauche) VT-100 a été remplacé par un retour arrière (montré comme^H
ici, mais n'est qu'un caractère ASCII); a également oublié l'instruction "séparé par des espaces", maintenant corrigémodifier 2:
7 caractères enregistrés en utilisant une
for
boucle au lieu dewhile
et32
au lieu de' '
:8 caractères de plus enregistrés en appelant un de moins
printf
: l'?:
opérateur ternaire est désormais utilisé dans lesprintf
paramètresmodifier 3:
Débarrassé de la variable locale
s
, travaillant directement avecargv
akav
. C'est totalement hideux. Mais j'ai sauvé 4 caractères. Également remplacé==
par^
et donc changé les?:
opérandes, pour économiser 1 caractère de plus.Usage
Version sans golf (première version)
Version sans golf (dernière version)
la source
J'ai répondu à cette question il y a longtemps. En fait, c'était l'une de mes premières contributions au site. Je l'ai récemment revu et j'étais un peu gêné. 112 octets?! Inacceptable. Je lui ai donc donné un autre coup:
Python 3 - 92 octets
Dans les 109 jours qui ont suivi la publication de cette première réponse, j'aime penser que j'ai parcouru un long chemin. Même quelque chose comme l'utilisation de Python 3 sur 2.7 1 ne me serait pas venu à l'esprit. Avec ce code descendu à moins de 100 octets, mon âme peut enfin se reposer et je peux passer à l'au-delà.
Explication
Cela obtient une ligne
stdin
et crée une liste en la divisant en caractères d'espacement. Les seuls espaces susceptibles d'être dans l'entrée sont les espaces, donc cette ligne obtient une liste de mots.Prenons la deuxième ligne de l'intérieur:
map
prend une fonction et un itérable comme arguments. Il applique la fonction à chaque élément de l'itérable et renvoie un nouvel itérable des résultats. Ici, je crée un itérable avec les longueurs de chaque mot d'entrée.max
obtient la valeur maximale d'un itérable. Cela nous donne le mot le plus long dans l'entrée.Une compréhension de liste est similaire à
map
. Il fait quelque chose à chaque élément d'un itérable et renvoie une liste des résultats. Pour chaque mot dans l'entrée, je faisthat_word.ljust(
du code)
.ljust
est l'abréviation de "gauche justifier". Il prend un entier comme argument et ajoute des espaces à la chaîne jusqu'à ce qu'il soit aussi long.Ceci est une astuce intéressante. Dans ce contexte,
*
signifie "décompressez cet itérable comme arguments multiples". De cette façon,zip
peut être utilisé pour transposer une matrice (par exemplezip(*[(1,2),(3,4)])
->[(1,3),(2,4)]
). La seule restriction est que toutes les lignes de la matrice doivent avoir la même longueur, ou les éléments de toutes les lignes, mais les plus courts sont coupés pour correspondre.Nous savons déjà ce que
map
ça fait. La seule nouveauté ici estjoin
, qui prend un itérable de chaînes et en fait une chaîne unique en utilisant le délimiteur auquel il est attaché. Par exemple,'a'.join(['I', 'can', 'play', 'the', 'saxophone'])
2 devientIacanaplayatheasaxophone
.Cela
join
prend un tas de chaînes et les sépare par des sauts de ligne. Il ne reste plus qu'àprint
fairestdout
et c'est fait!Tous ensemble maintenant:
Trouver la longueur du mot le plus long de l'entrée, ajouter des espaces à chaque mot jusqu'à ce qu'ils soient de la même longueur, transposer avec l' astuce
zip(*
3 , utiliserjoin
pour séparer chaque caractère d'une ligne avec des espaces,join
encore une fois pour séparer chaque ligne avec une nouvelle ligne, et imprimez! Pas mal pour la seule ligne qui ne gère pas les entrées dans un programme de 92 octets.1. Les caractères supplémentaires dépensés sur
print()
les parenthèses sont compensés par les 4 caractères que je laisse tomber deraw_input()
->input()
.2. Je ne peux pas jouer du saxophone.
3
)
.. Je vous en prie.la source
print("\n".join(...))
pour*map(print,...),
. Essayez-le en ligne!05AB1E , score
8-20-21 (3029 octets - 50 Bonus):Essayez-le en ligne (entrée régulière sur une seule ligne).
Essayez-le en ligne (entrée inversée sur plusieurs lignes).
Explication:
Réponse originale de 8 octets:
Essayez-le en ligne.
Explication:
la source
Mathematica 49
De toute évidence, Mathematica n'est pas le meilleur pour celui-ci:
la source
Javascript, 141
Échantillon
la source
GolfScript [41 octets]
Comment ça fonctionne:
Vous pouvez voir la démo en ligne ici .
PS: Ceci est mon premier code GolfScript jamais, alors ne me jugez pas strictement;)
la source
R, 116
la source
Bash + coreutils, 54
Production:
la source
$()
construction est désormais la méthode courante de substitution de commandes.APL: 18
Explication:
a ← '', placez un espace devant la chaîne et attribuez à un
'' = trouver des espaces, produit un booléen
1 ↓ ¨a⊂⍨ faire des sous-chaînes en commençant là où le booléen a 1 et déposer le premier élément de chaque (donc l'espace)
⍉ ↑ Créer une matrice à partir des sous-chaînes résultantes et l'inverser le long de la diagonale
la source
R , 81 octets
Enregistrez un octet en stockant une nouvelle ligne sous
e
, qui peut être utilisée dans les deuxscan
appels, l'appel de comparaison etcat
.Essayez-le en ligne!
la source
K (oK) , 26 octets
Solution:
Essayez-le en ligne!
Explication:
la source
Python 2.7 -
119106Prise 1 - 166. L'inversion des listes était nécessaire pour faire fonctionner la pop dans l'ordre que je voulais, mais cela semblait inutile. Et quand j'ai essayé de combiner en une seule compréhension pour le plaisir, la pop a foiré les choses.
Prenez 2 - 119. J'ai donc changé pour l'indexation de liste simple. Cela semble toujours maladroit, en particulier le rembourrage des espaces et de nouvelles lignes.
Take 3 - merci à @grc
la source
[len(l)for l in w]
peut être raccourci versmap(len,w)
,.split(' ')
vers.split()
et.join([...])
vers.join(...)
.v.pop(0)
pour faire apparaître le premier élément au lieu de le dernier?Python 3, 124
la source
Haskell, 112
Golfé:
Expliqué:
Exemple:
la source
JavaScript, 139 (156 avec sortie console.log)
Je pense que c'est aussi golfique que possible. Je viens de diviser, de trouver le plus grand mot et de transposer en conséquence, en ajoutant des espaces si le caractère n'existe pas dans les mots plus courts. Plus que la réponse JavaScript soumise précédemment, mais cette réponse ne semble pas fonctionner?
la source
Japt
-R
, 5 octetsEssayez-le
Explication
la source
Pyth, 8 octets
Essayez-le en ligne!
Assez simple. Prend les entrées entre guillemets, c.-à-d.
"Hello World"
la source
C
tronque à la longueur de l'entrée la plus courte, donc cela ne fonctionne pas . Voici une solution rapide qui fait également 8 octets.APL (NARS), 79 caractères, 158 octets
tester:
Les anciennes fonctions ont une sortie non parfaite:
la source