Si vous prenez une feuille de papier millimétré et tracez une ligne inclinée qui va des m
unités à droite et des n
unités vers le haut, vous traversez des lignes de quadrillage n-1
horizontales et m-1
verticales dans une certaine séquence. Écrivez le code pour sortir cette séquence.
Par exemple, m=5
et n=3
donne:
Peut-être liés: Génération de rythmes euclidiens , pavages de Fibonacci , FizzBuzz
Entrée: deux entiers positifs m,n
relativement premiers
Sortie: renvoyez ou imprimez les croisements sous la forme d'une séquence de deux jetons distincts. Par exemple, il peut s'agir d'une chaîne de H
et V
, d'une liste de True
et False
, ou 0
de et et 1
imprimée sur des lignes distinctes. Il peut y avoir un séparateur entre les jetons tant qu'il est toujours le même, et non, disons, un nombre variable d'espaces.
Cas de test:
Le premier cas de test donne une sortie vide ou aucune sortie.
1 1
1 2 H
2 1 V
1 3 HH
3 2 VHV
3 5 HVHHVH
5 3 VHVVHV
10 3 VVVHVVVHVVV
4 11 HHVHHHVHHHVHH
19 17 VHVHVHVHVHVHVHVHVVHVHVHVHVHVHVHVHV
39 100 HHVHHHVHHVHHHVHHVHHHVHHVHHHVHHHVHHVHHHVHHVHHHVHHVHHHVHHHVHHVHHHVHHVHHHVHHVHHHVHHVHHHVHHHVHHVHHHVHHVHHHVHHVHHHVHHHVHHVHHHVHHVHHHVHHVHHHVHH
Au format (m,n,output_as_list_of_0s_and_1s)
:
(1, 1, [])
(1, 2, [0])
(2, 1, [1])
(1, 3, [0, 0])
(3, 2, [1, 0, 1])
(3, 5, [0, 1, 0, 0, 1, 0])
(5, 3, [1, 0, 1, 1, 0, 1])
(10, 3, [1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1])
(4, 11, [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0])
(19, 17, [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1])
(39, 100, [0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0])
Réponses:
Rubis, 92; Autruche 0.7.0 , 38
La sortie pour les deux utilise 1 et 0 (ex.
101101
).Voici une explication de l'autruche:
Et une explication du fonctionnement de l'ensemble, en utilisant le code Ruby comme guide:
la source
Python, 53
Cela utilise la sortie de liste True / False. Rien de spécial ici.
la source
Pyth -
3224 octetsPrend l'entrée via stdin au format
[m,n]
. Imprime le résultat sur stdout sous la forme d'une liste de 0 et de 1, où 0 = V et 1 = H.Testez-le en ligne
Explication:
la source
eM
est le même quemed
.@"VH"
car vous êtes autorisé à imprimer0
et à la1
place deV
etH
.J
. Voici ce que j'ai jusqu'à présent à 25 octets: pyth.herokuapp.com/…jk
car la sortie peut être une liste.Code machine IA-32, 26 octets
Hexdump du code:
Je suis parti du code C suivant:
Il écrit la sortie dans le tampon fourni. Il ne renvoie pas la longueur de la sortie, mais ce n'est pas vraiment nécessaire: la longueur de sortie est toujours
m + n - 2
:Pour convertir le code C en code machine, j'ai d'abord fait quelques ajustements, pour
if/else
vider l' une des branches, et comparer avec0
au lieu den
:À partir d'ici, l'écriture du code d'assemblage en ligne est simple:
la source
t
la "distance àbuzz
". Si la distance est au moinsn
, allezfizz
, sinon allezbuzz
; mettre à jour la distance; répéter jusqu'à 0.Python - 125 octets
Utilise un algorithme très simple, incrémente simplement les coordonnées et détecte quand il traverse les lignes et s'imprime. Cherche à traduire en Pyth.
Cette boucle while vérifie le nombre d'
l
ines puis vérifie si l'une des valeurs a dépassé une frontière int en soustrayant.Prend l'entrée comme
39, 100
de stdin et imprime commeHHVHHHVHHVHHHVHHVHHHVHHVHHHVHHHVHHVHHHVHHVHHHVHHVHHHVHHHVHHVHHHVHHVHHHVHHVHHHVHHVHHHVHHHVHHVHHHVHHVHHHVHHVHHHVHHHVHHVHHHVHHVHHHVHHVHHHVHH
pour stdout sur une ligne.la source
CJam, 15 octets
Essayez-le ici.
Il imprime
01
pour V et10
pour H.Explication
La ligne diagonale croise une ligne horizontale pour chaque 1 / n de toute la ligne diagonale et traverse une ligne verticale pour chaque 1 / m.
la source
TI-BASIC, 32
Simple. Utilise une séquence de
0
et1
, séparés par des sauts de ligne. Les avantages de TI-BASIC sont lagcd(
multiplication implicite et à deux octets , mais ses inconvénients sont la boucle For, y compris la valeur finale et les 5 octets dépensés pour l'entrée.la source
Python, 47
Comme l'algorithme d'anatolyg , mais vérifié directement avec les modules.
la source
Haskell, 78 octets
Exemple d'utilisation:
Comment ça marche: faites une liste des valeurs x de tous les croisements verticaux
(x,0)
pourx
dans [1,2, ..., m-1] (0
indique vertical) et ajoutez la liste des valeurs x de tous les croisements horizontaux(y*m/n,1)
poury
dans [1,2, ..., n-1] (1
indique horizontal). Triez et prenez les deuxièmes éléments des paires.Curse of the day: encore une fois, je dois dépenser 17 octets sur le
import
carsort
est dansData.List
et non dans la bibliothèque standard.la source
KDB (Q), 44 octets
Explication
Trouver tout x valeurs de l'axe des points d'intersection et triez-les. Si le mod 1 est nul son "V", non nul est "H".
Tester
la source
CJam,
2624 octetsEssayez-le en ligne
Très simple, à peu près une implémentation directe d'un algorithme de type Bresenham.
Explication:
Le dernier
01
doit être sauté parce que la boucle est allée jusqu'au point final, qui ne fait pas partie de la sortie souhaitée. Notez que nous ne pouvons pas simplement réduire le nombre de boucles de 1. Sinon, carN > M
, tous les0
s de la dernière itération seront manquants, alors que nous devons seulement nous débarrasser du tout dernier0
.la source
>
pour;W<
.1
au-dessus de la pile, je ferais aussi bien de l'utiliser de manière productive.