Voici ce que nous appellerons un bol de soupe à l'alphabet - une forme approximativement circulaire d'ascii-art avec les 26 lettres majuscules anglaises (AZ) disposées dans le sens des aiguilles d'une montre pour former le périmètre:
XYZABC
VW DE
U F
T G
S H
RQ JI
PONMLK
Ecrivez un programme qui prend une lettre, un AZ, et sort ce même bol de soupe à l'alphabet "pivoté", pour ainsi dire, de sorte que la lettre d'entrée apparaisse là où le A
fait dans l'exemple ci-dessus et le reste de l'alphabet tourne complètement autour dans le sens des aiguilles d'une montre.
La sortie pour l'entrée A
serait donc ce même bol original de soupe à l'alphabet.
Et la sortie pour l'entrée B
serait celle-ci:
YZABCD
WX EF
V G
U H
T I
SR KJ
QPONML
De même, le résultat pour H
serait:
EFGHIJ
CD KL
B M
A N
Z O
YX QP
WVUTSR
Ou pour Z
:
WXYZAB
UV CD
T E
S F
R G
QP IH
ONMLKJ
Cela doit fonctionner pour les 26 lettres, de A à Z.
Détails:
- Vous pouvez supposer que la seule entrée sera une seule lettre, de A à Z.
- Si cela vous convient, vous pouvez utiliser une lettre minuscule az pour entrée et / ou sortie, vous pouvez même mélanger des combinaisons de lettres minuscules et majuscules.
- L'ordre alphabet doit tourner dans le sens des aiguilles d'une montre et non dans le sens contraire.
- Vous devez utiliser des espaces, pas autre chose, pour mettre en retrait et remplir le bol à soupe.
- Il peut y avoir des nouvelles lignes ou des espaces dans la sortie tant que le bol de soupe est bien disposé.
- Notez que la forme du bol est large de 12 caractères sur 7 pour le rendre approximativement circulaire en tant que texte. Vos bols doivent avoir la même forme.
C'est du code golf donc le code le plus court gagne!
Réponses:
05AB1E , 21 octets
Définit un programmeF: AlphabeticChar → Chaîne
Code:
Essayez-le en ligne!
Panne:
Explication:
La toile (
Λ
) dans ce contexte particulier fonctionne comme une fonction avec la signature suivante:Le est dans cette situation un nombre définissant les directions. Dans le code, ce nombre est représenté sous la forme d' une version compressée du grand nombre . Les directions sont notées de la manière suivante:pattern 22323445656666676700121222232344565666667670012122
•1못*Ć,ãiDΣ•
Cela signifie que le grand nombre représente le modèle de directions suivant:
Avec ce contexte de signature, le canevas parcourt la liste et écrit les caractères de dans la direction actuelle.pattern length filler
Le est spécifié dans le code par (au début du code). Pour le , nous avons besoin d’une version pivotée de l’alphabet telle qu’elle commence par l’entrée donnée. Cela se fait avec le code suivant ( essayez-le ici ):length 2 filler
En pseudocode, cela serait exécuté par la fonction canvas:
Enfin, vous pouvez voir que l'argument de remplissage est 'tourné' fois à droite, ce qui signifie que le canevas va parcourir la liste suivante (cyclée et donc infinie):length−1
Ce qui donne la forme désirée de l'alphabet soupe ascii-art.
la source
AA¹k._
peut être alternativementA¹¡RJ«
, mais c'est le même nombre d'octets.•1못*Ć,ãiDΣ•
peut être alternativement•õÕ₆qηµñ–†f•·
, mais c'est le même nombre d'octets. Et bien. Bonne réponse!Perl 6 , 100 octets
Essayez-le en ligne!
Remplace toutes les lettres de la chaîne par leurs équivalents décalés, tout en remplaçant les chiffres par le nombre d'espaces qu'ils représentent plus un.
Explication
la source
Ruby , 107 octets
Essayez-le en ligne!
Amélioration de la syntaxe
"i".to_c
->1i
(suggéré par la Jordanie)Système de coordonnées modifié pour que 0 degrés soit à droite au lieu de haut. Cela permet
0.5
->6
Multiplicateurs ajustés de
j
etk
pour la brièvetéPlutôt que d’imprimer la sortie
puts a
, concaténez des éléments de tableau et renvoyez une chaînea*$/
Ruby , 119 octets
Utilise un nombre complexe élevé au pouvoir de mapper sur une ellipse. Un tour complet est 26, donc chaque quadrant est 6,5.
Cette approche repose sur le résultat requis, qui ressemble à une ellipse, suffisamment pour qu’un mappage valide puisse être réalisé.
Essayez-le en ligne!
la source
Charbon de bois , 33 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Explication:
Trace un chemin.
Décrivez le bol. Chacun se
7
développe à↙←
.Déplacer un caractère à la fois (cette API chevauche la fin de chaque ligne avec la suivante).
Dessinez en utilisant l'alphabet doublé, mais en partant de la position du caractère saisi.
la source
MATL , 49 octets
Quel bordel. Mais c'était amusant d'écrire. Il y a même un arctangent impliqué.
Essayez-le en ligne!
Explication
Le code
crée un tableau de nombres et les convertit en binaire. Cela donne la matrice zéro-un
qui est le quadrant supérieur gauche d'une matrice spécifiant les positions des lettres.
reflète ce quadrant verticalement sans répéter la dernière ligne, et horizontalement la dernière colonne pour produire la matrice complète:
Nous avons maintenant un masque avec les positions. Le code
convertit ceci en char, car le résultat final sera une matrice de caractères. Le caractère 0 est affiché sous forme d'espace et les entrées non nulles seront écrites avec les lettres appropriées.
pousse la chaîne
'abc···xyz'
qui contient les 26 lettres. Cette chaîne doit être déplacée de manière circulaire conformément à l'entrée. Pour faire ça,lit la lettre d'entrée, ajoute 7 à son code ASCII et annule le résultat. Pour l'entrée,
'a'
cela donne −104, ce qui est un multiple de 26, donc un déplacement circulaire de ce montant ne fera rien. Si l'entrée est,b
cela donne -105, ce qui décale la chaîne d'un pas vers la gauche pour produire'bcd···yza'
; etc.L'étape suivante consiste à définir l'ordre dans lequel la chaîne décalée sera écrite dans les entrées non nulles de la matrice. À cette fin,
crée une copie de la matrice et pousse deux vecteurs contenant les positions de ligne et de colonne basées sur 1 du nonzer. ensuite
soustrait 7 de ce dernier, amène le premier au sommet, en soustrait 4 et le nie. Les 7 et 4 spécifient une origine de coordonnées, de sorte que les angles des vecteurs de position des entrées non nulles par rapport à cette origine définissent l'ordre souhaité.
calcule l'arctangent modulo 2 * pi à deux arguments pour produire ces angles. Maintenant, le plus petit angle, qui est 0, correspond à l'entrée où la première lettre doit être insérée, et le reste avance dans le sens anti-horaire.
réorganise les lettres dans la chaîne en fonction de ces angles, afin que le résultat soit correct lorsque les lettres sont écrites dans les entrées non nulles de la matrice dans l’ordre ordre principal des colonnes (bas, puis en regard). Ceci est fait par
Par exemple, si l'entrée est
'a'
la chaîne n'a pas été déplacée de manière circulaire:Le réarrangement selon les angles transforme cela en
donc cela
'u'
ira correctement à la première entrée non nulle (en ordre de colonne, ordre majeur), qui est (3,1) en notation matricielle;'t'
ira à (4,1),'s'
à (5,1);'v'
à (2,2) etc:la source
Python 2 , 129 octets
Essayez-le en ligne!
la source
R ,
139122 octets-17 octets grâce à Giuseppe
Explication:
Construit une boîte vide d'espaces
est un ensemble d'indices pour les positions de lettres correspondant à:
TIO
la source
intToUtf8
donc ce sont des octets superflus, mais si vous utilisez*
à la place derep
, vous pouvez obtenir une sauvegarde de 2 octets et atteindre 125 octets-32
, pour 122 octets . Vous pouvez les générer vous-même en utilisantcat(intToUtf8(bytes))
.intToUtf8
, trop de versions de la fonction ouvertes en même temps, je suppose. Belle enregistre tous roundthough, merciJavaScript (Node.js) ,
121119 octets2 octets sauvés grâce à @tsh
Essayez-le en ligne!
Comment?
Ce code permetx c
Buffer
d’extraire les codes ASCII de la lettre type et de la lettre et de les reconvertir en lettre cible.Exemple avec etc= x =x=
"H"
"B"
la source
APL + WIN, 72 octets
Invites pour le personnage
Essayez-le en ligne! Coutesy de Dyalog Classic
la source
R ,
218197 octets-21 octets grâce à Giuseppe
Essayez-le en ligne!
Ungolfed:
Crée un vecteur de lettre pivoté et utilise
cat
pour remplir le bord du bol avec ce vecteur.la source
which
et d'utiliserl>=t
directement l'index, qui valait 12 octets.[
avec~
. C'est une excellente réponse; Je passais environ 250 octets lors de mes premières tentatives avec une approche beaucoup plus complexe.Java 11, 134 octets
Essayez-le en ligne.
Version de 136 octets avec le potentiel d'être joué au golf?
Essayez-le en ligne.
Explication (de la première réponse)
la source
i-47
\n
). Donc, que j'utilise non imprimables et 3x\n
aveci
ou chiffres-1 aveci-47
, les deux sont identiques 134. Et malheureusement, je ne peux pas avoir d’imprimable0
, sinon j’aurais pu utiliser 2,0,5,9 à la place eti+1
économiser 1 octet au total.Wolfram Language (Mathematica) , 258 octets
Essayez-le en ligne!
la source
Haskell, 127 octets
Essayez-le en ligne!
Chaque caractère de la chaîne codée est décodé par fonction
?
dans une chaîne:la source
Kotlin ,
148146145 octetsSuppression des parenthèses supplémentaires pour -2
Chaîne brute remplacée pour -1
Essayez-le en ligne!
la source
C # (compilateur interactif Visual C #) ,
126118 octetsSauvegardé 8 octets grâce à @quelqu'un. Oui, c'est en fait son nom d'utilisateur.
Essayez-le en ligne!
la source
Requête TSQL, 238 octets
Le lien de test pour cette réponse a cassé les sauts de ligne et exclu les espaces. J'ai remplacé les espaces par des points et remplacé car (13) par car (13) + car (10) afin d'afficher un résultat lisible.
Essayez-le en ligne
Ungolfed:
la source
PHP ,
236229226 octetsEssayez-le en ligne!
Pré-golf:
Explication:
En utilisant,
ord
nous convertissons en un entier compris entre 0 et 255. A est égal à 65 et Z à 90.En utilisant cette connaissance, nous prenons l'entrée et la réduisons de 65 pour obtenir une valeur d'ajustement.
Nous parcourons ensuite tous les personnages, appelons-
ord
les, réduisons-les de 65, augmentons-les de notre valeur d'ajustement. En utilisant modulo, nous rediffusons à 0 s'ils dépassent 26.Nous les augmentons ensuite de 65 et les convertissons en lettres avec
chr
.Malheureusement, php: // stdin ne peut être interogé qu’une fois. Nous devons donc passer l’entrée à la fonction dans notre boucle, nous empêchant de sauvegarder des octets
use($a)
et de devoir déclarer une variable en dehors de la fonction nous empêche d’utiliser proprement la<?=
méthode echo - nous devons tout emballer dans un ternaire géant.la source
C (GCC) 286 octets
Pas exactement le golf le plus court, mais ça marche
Essayez-le en ligne
la source
Rouge , 139 octets
Essayez-le en ligne!
Une solution vraiment naïve.
la source
Perl 5
-p
, 110 octetsEssayez-le en ligne!
la source
Javascript (V8), 316 octets
Essayez-le en ligne
Première fois que vous essayez le code de golf. Apprécier les conseils / commentaires.
Code original avant de minifier:
la source
APL (Dyalog Classic) , 50 octets
Essayez-le en ligne!
la source
C (gcc) ,
200198197 octets-3 octets grâce à ceilingcat.
Essayez-le en ligne!
la source
PHP , 131 octets
Essayez-le en ligne!
la source