Défi:
Écrivez un programme qui produit la sortie suivante:
. E .. I ... S .... H
...- V
..- U ..-. F
..--
.- A .-. R .-.. L
.-.-
.-- W .--. P
.--- J
- T -. N -.. D -... B
-..- X
-.- K -.-. C
-.-- Y
-- M --. G --.. Z
--.- Q
--- O ---.
----
Il s'agit d'un tableau formaté des codes Morse des lettres de A à Z. Chaque colonne est séparée par trois espaces.
Il y a quatre emplacements manquants, qui sont utilisés par les jeux de caractères internationaux. Votre programme doit y écrire un espace.
La sortie doit être constituée d'espaces ASCII, de points, de tirets, de lettres majuscules et de nouvelles lignes (LF ou CRLF) uniquement.
Votre programme n'accepte aucune entrée.
Voici un exemple de programme Python qui produit la sortie souhaitée:
b = "."
out = []
last = 0
ch = "EISHVUF ARL WPJTNDBXKCYMGZQO "
cx = 0
while b:
if last >= len(b):
print(" ".join(out))
out = [" ", " ", " ", " "][0:len(b) - 1]
out.append(b + " " + ch[cx])
cx += 1
last = len(b)
if len(b) < 4:
b += "."
elif b[-1] == ".":
b = b[0:-1] + "-"
else:
i = len(b) - 1
while b[i] == "-":
i -= 1
if i < 0:
break
if i < 0:
break
b = b[0:i] + "-"
print(" ".join(out))
Il s'agit de code-golf , donc la réponse la plus courte en octets l'emporte.
Réponses:
Gelée , 85 octets
Un programme complet d'impression de la feuille de triche.
Essayez-le en ligne!
Comment?
Remarque: je pense qu'il peut y avoir un moyen de réduire cela en formant une liste qui formate correctement en utilisant l'atome de la grille
G
, mais je ne peux pas tout à fait savoir comment.la source
Python 3.6,
201197193187 octetsUtilise un peu de formatage, de déballage et de magie A000918 .
la source
f'{i//k:0{j}b}'.replace(*'0.').replace(*'1-')
est la même longueur que''.join('.-'[int(x)]for x in f'{i//k:0{j}b}')
Rétine , 125 octets
Essayez-le en ligne! Devrait être de 121 octets mais j'étais trop paresseux pour gérer les espaces blancs au début et à la fin. Explication:
Les lettres dont le code commence par
.
et-
respectivement sont préchargées. (Il est théoriquement possible d'éviter de précharger le.-
mais cela économise les octets de cette façon.) Les_
s sont utilisés à la place des espaces car ils sont considérés comme des lettres, ce qui les rend plus faciles à faire correspondre ci-dessous.Ici, nous divisons chaque ligne en cinq morceaux:
.
)-
)Les pièces sont ensuite remontées sur deux lignes:
.
suffixe, la première moitié des lettres restantes-
suffixe, la seconde moitié des lettres restantesLes nouvelles lignes suivent le même format que la ligne existante, juste avec un préfixe Morse supplémentaire et la moitié du nombre de lettres restant à traiter. Cette opération est ensuite répétée jusqu'à ce que chaque ligne ne comporte qu'une seule lettre.
Les
_
s sont ensuite reconvertis en espaces.la source
JavaScript (ES6),
154147145 octetsla source
PHP, 208 octets
Essayez-le en ligne!
PHP, 229 octets
Essayez-le en ligne!
la source
Perl 5,
158156 octetsla source
PHP,
184 183181 octetsCourez avec
-nr
ou essayez-le en ligne .panne
-7 octets avec espaces de début: remplacer
ltrim("$r\n")
par"$r\n"
et28
par31
.171 (= -10) octets avec espaces de fin :
ventilation essayer en ligne
la source
for(;$y<16;$y++,print str_pad(ltrim("$r\n"),28," ",0))for($r="",$c="03231323"[$y&7];$c++<4;)$r.=strtr(sprintf(" %0${c}b ",$y>>4-$c),10,"-.")."EISHVUF ARL WPJTNDBXKCYMGZQO "[$i++];
devrait économiser 2 octets.----
ne correspond pas au reste."EISHVUF ARL WPJTNDBXKCYMGZQO "
devrait avoir 2 espaces à la fin.APL (Dyalog) , 92 octets
Besoins
⎕IO←0
par défaut sur de nombreux systèmes.Essayez-le en ligne!
{
...}¨'
...'
appliquer la fonction anonyme qui suit à chacune des chaînes:⍪⍵
transformer l'argument en une colonne' ',
ajouter un espace (sur chaque ligne)'.-'[
…],
Ajoutez la chaîne après son indexation avec:≢⍵
la longueur de l'argument⍳
les indices de cela (0, 1, 2,…, longueur -1)2⊥⍣¯1
anti-base-2 (utilise autant de bits que nécessaire)⍉
transposer (d'une représentation dans chaque colonne à une dans chaque ligne)(
…)⍀
Développer par (insérer des lignes vides comme indiqué par des zéros dans):≢⍵
la longueur de l'argument16÷
diviser seize par cela1↑⍨
(over) prendre à partir d'un (fait une liste d'un suivi de 1 à n zéros)16⍴
recycler ce modèle jusqu'à ce qu'il ait seize éléments' ',
ajouter un espace⍕
format (la liste des tables en une seule table, en remplissant chacune avec un espace de chaque côté)¯1⌽
pivoter d'un pas vers la droite (déplaçant ainsi l'espace de fuite vers l'avant)0 3↓
supprimer zéro lignes et trois colonnes (supprimant ainsi les trois espaces de tête)la source
16÷⍨
apparaît dans votre code?SOGL ,
106105102 octetsSi les espaces en avance sont autorisés,
10299 octets141 octets, compression
je voulais juste voir à quel point SOGL pouvait faire avec la compression (enfin, il y a plus que la compression, mais c'est 97% de chaînes compressées)
la source
JavaScript (205 octets)
la source
Rubis,
144 143141 octetsNon golfé
la source
Pyth , 106 octets
Testez-le en ligne!
Explication
En quelques mots, ce que je fais ici, c'est de générer le tableau colonne par colonne puis de transposer le tableau avant de l'imprimer. On remarque que dans une colonne, les codes morse des lettres peuvent être représentés comme des chaînes binaires (à remplacer
.
par0
et-
par1
) lors du comptage de zéro à l'index de la dernière lettre de la colonne.L'algorithme repose sur une fonction à partir de laquelle je donne un exemple exécuté ci-dessous (pour la deuxième colonne):
Explication du code
J'ai coupé le code en deux. La première partie est la fonction décrite ci-dessus, la deuxième partie est la façon dont j'utilise la fonction:
(1) : Dans le tableau morse, dans la première colonne, il y a sept lignes après chaque ligne contenant une lettre ("E" et "T"). Dans la deuxième colonne, c'est trois lignes. Puis un (troisième colonne), puis zéro (dernière colonne). C'est
16 / n - 1
oùn
est le nombre de lettres dans la colonne (qui estN
dans le code ci-dessus). C'est quoi le code à la ligne (1) :D'accord, nous avons maintenant une fonction utile
h
qui génère essentiellement une colonne de tableau à partir d'une séquence de caractères. Utilisons-le (notez les deux espaces de fin dans le code ci-dessous):Le code peut encore être raccourci; peut-être que j'y reviendrai plus tard.
la source
C,
199195 octetsVivre sur coliru (avec #include pour éviter le message d'avertissement.)
MISE À JOUR : Quatre caractères enregistrés en déplaçant la "déclaration" de l'
m
extérieur de la fonction, comme suggéré par @zacharyTUtilise ce qui semble être une stratégie standard: conserver les lettres dans un arbre binaire encodé en tableau, de sorte que les enfants de l'élément
i
sont2*i
et2*i+1
. Cet arbre est enraciné à 2 plutôt qu'à 1 parce que l'arithmétique a fonctionné un peu plus court, je pense. Tout le reste est au golf.Non golfé:
la source
int m
pour être enm;
dehors de la fonction?Bubblegum , 133 octets
Comprimé en tant que flux LZMA.
la source
C, 291 octets
Essayez en ligne
Comment ça marche
J'ai d'abord analysé la chaîne en C, en comptant les espaces inférieurs à 26, je les ai donc encodés en minuscules
a, b, .. z
avec ce petit programmeEnsuite, j'ai écrit un analyseur pour cet encodage, où
/
est une nouvelle ligne, et une lettre minuscule représente dest[i] - 'a'
espacesla source
Bash (avec utilitaires), 254 octets
la source
Dyalog APL, 159 octets (non concurrent)
la source
⎕IO←0
(par défaut sur de nombreux systèmes) et en utilisant⍨
(commute) .JavaScript (ES7),
242240238 octetsEssayez-le en ligne!
–2 octets grâce à Zachary .
la source
a!='0'
poura!=0
.join('')
par.join<insert backtick here><insert backtick here>
? (en<insert backtick here>
cours de remplacement par de vrais coups de pied)a!='0'
àa!=0
, cela devrait fonctionner.''
affaire.