Dans certains pays, il existe des recommandations ou des lois sur la manière de créer des corridors d'urgence dans les rues à plusieurs voies par direction. (Dans ce qui suit, nous ne considérons que les voies qui vont dans la direction que nous empruntons.) Voici les règles en vigueur en Allemagne:
- S'il n'y a qu'une seule voie, tout le monde doit conduire à droite de manière à ce que les véhicules de secours puissent passer à gauche.
- S'il y a deux voies ou plus, les voitures de la voie la plus à gauche doivent rouler à gauche et tous les autres doivent se déplacer à droite.
Défi
Etant donné le nombre N>0
de voies régulières, affichez la disposition des voies lorsqu'un corridor d'urgence est formé à l'aide d'une chaîne de N+1
caractères ASCII. Vous pouvez utiliser deux caractères quelconques du code ASCII 33
jusqu'à 126
, un pour indiquer le couloir d'urgence et un pour désigner les voitures. Les espaces finaux ou suivants, les sauts de ligne, etc. sont autorisés.
Exemples
Ici, nous utilisons E
le couloir d’urgence et C
les voitures.
N Output
1 EC
2 CEC
3 CECC
4 CECCC
5 CECCCC
6 CECCCCC
etc
C
etE
, mais il y a tellement de bonnes approches possibles pour ce défi! Utiliser des opérations mathématiques pourC=1
/E=2
ouC=2
/E=3
comme le fait la meilleure réponse; en utilisantC=0
/E=1
avec10^(n-1)
; utiliserC=0
/E=.
par format décimal0.0
; utiliserC=1
/E=-
utiliser-1
; etc. etc. Autant de possibilités uniques pour un défi qui semblait si précis au premier abord. Dommage que je ne peux que +1 une fois. ;)Réponses:
Python 2,
2926 octetsExemple:
la source
10**n*97/30-1/n*9
sauve un autre octet, donnantf(5) == 323333
etc.Python 3,
3533 octetsEdit: déposer
f=
pour sauvegarder 2 octets, grâce au rappel de @dylnan .Essayez-le en ligne!
Pour le visualiser:
Sortie:
Essayez 🚔 en ligne!
Python 3, 40 octets
Une solution simple:
Essayez-le en ligne!
la source
lambda N:
C (gcc) , 32 octets
Essayez-le en ligne!
Usages
0
et.
personnages:la source
Japt,
54 octetsUtilisations
q
pour les voitures et+
pour le couloir.L'essayer
Merci à Oliver qui a joué au golf 4 octets en même temps que moi.
Explication
Une solution courte mais une explication délicate!
La chose la plus simple en premier: la
ç
méthode, lorsqu'elle est appliquée à un entier, répète son argument de chaîne ce nombre de fois. Lai
méthode prend 2 arguments (s
&n
) et insères
à l'indexn
de la chaîne à laquelle elle est appliquée.En développant les 2 raccourcis unicode utilisés, on obtient ce
çq i+1
qui, une fois transpilé en JS, devientU.ç("q").i("+",1)
, où seU
trouve l’entrée. Nous répétons donc lesq
U
temps, puis nous insérons un+
index 1.L'astuce finale est que, grâce au wrapping d'index de Japt, when
U=1
,i
l'insertion de l'+
index0
, quelle que soit la valeur pour laquelle vous l'insérez , sera inséréen
.la source
ç0 iQ1
pour 6 octets, mais ce serait mieux si vous l'utilisiez.ç¬iÅ
pour 4 octets;) Je n'ai jamais autant abusé de Japt.Ä
lieu deÅ
:)R, 50 octets
-11 merci à Giuseppe!
Sorties 1 pour le couloir d'urgence et 2 pour les voies normales
Ma tentative, 61 octets
Rien de spécial à voir ici, mais inscrivons R sur le tableau de bord =)
Usage:
la source
Haskell ,
383432 octetsEssayez-le en ligne!
la source
Python 2,
302928 octetsImprimer
3
au lieu deC
et.
au lieu deE
.Explication:
Essayez-le en ligne.
Python 2,
3332312928 octetsImprime
1
au lieu deC
et-
au lieu deE
.-2 octets grâce à @ovs .
-1 octet grâce à @xnor .
Explication:
Essayez-le en ligne.
la source
10/3
seul échoue à 17 ansn=16
si votre entier intégré 64 bits est suffisant, ou dans ce casn=16
lorsque la valeur décimale peut » Tenir plus de 15 chiffres décimaux par défaut est suffisant. (La même chose s'applique à beaucoup d'autres réponses utilisant des langages avec des tailles de nombres arbitraires, comme Java, C # .NET, etc.)Pyth,
1098 octetsUtilisations
0
pour désigner le couloir d’urgence et"
.Essayez-le ici
Explication
la source
brainfuck , 42 octets
Essayez-le en ligne!
Prend les entrées en tant que code de caractères et les sorties en tant
V
que voies normales et voiesW
dégagées. (Pour tester facilement, je recommande de remplacer le,
avec un certain nombre de+
s)Comment ça marche:
la source
Octave (MATLAB *),
31 30 28 2722 octetsEssayez-le en ligne!
Le programme fonctionne comme suit:
L'astuce utilisée ici consiste à vérifier le tableau de départ de
0:n
avec un contrôle si l'entrée est supérieure à 1. Le résultat est que, pourn>1
le point de départ, il est converti en tableau logique de[0 1 (0 ...)]
tandis que pourn==1
le point de départ est inversé[1 0]
, ce qui permet l'inversion nécessaire.Le reste ne fait que convertir la graine en chaîne avec suffisamment de voitures ajoutées.
(*) Le lien TIO inclut dans les commentaires de pied de page une solution alternative pour le même nombre d'octets qui fonctionne dans MATLAB ainsi qu'Octave, mais il en résulte une séquence de "0" et "1" plutôt que "E" et " C '. Pour être complet, le remplaçant est:
Enregistré 1 octet en utilisant
n==1~=0:1
plutôt que0:1~=(n<2)
.~=
a priorité sur<
, d’où les crochets originaux, mais c’est ce qui semble~=
et qui==
sont traités par ordre d’apparition. Ainsi, en comparant avec 1, nous pouvons enregistrer un octet.2 octets enregistrés en modifiant l'emplacement où la négation
2:n
est effectuée. Cela enregistre une paire de crochets. Nous devons également changer le~=
à==
pour tenir compte du fait que cela sera annulé plus tard.Enregistré 1 octet en utilisant à
<
nouveau. Il s'avère que cela<
a la même priorité==
qu'après tout. Placer le<
calcul avant le==
garantit l’ordre correct d’exécution.5 octets enregistrés en ne créant pas deux tableaux distincts. Vous ferez plutôt confiance au fait que la comparaison XNOR convertira une plage unique en logiques.
la source
Gelée ,
11 à9 octetsEssayez-le en ligne!
Programme complet.
Utilise
0
au lieu deC
.la source
C (gcc), 39 octets
Essayez-le en ligne!
Emprunté et adapté l'astuce printf de la réponse d' ErikF .
la source
Python 3, 32 octets
Essayez-le en ligne!
Utilise une expression de chaîne de caractères f pour formater
'E'
ou être'CE'
complétée à droite avec'C'
une largeur den+1
.la source
Brain-Flak ,
100 à66 octetsEssayez-le en ligne!
Utilise
"
comme voie d'urgence et!
comme voie normale.la source
C #, 34 octets
Essayez-le en ligne!
la source
05AB1E , 7 octets
Essayez-le en ligne!
0 est C et 1 est E.
Explication
la source
$<×TìsiR
C'était comme ça que je pensais.1I
pouvez jouer au golf$
.APL (Dyalog Unicode) ,
21 1716 octetsEssayez-le en ligne!
Merci à Erik pour la sauvegarde de 4 octets et à Adám pour un octet supplémentaire.
Comment?
la source
(⍵>1)
n'a pas besoin d'être entre parenthèses. Et vous pouvez enregistrer 4 octets avec une fonction tacite:(⊢×1<⊢)⌽'E',⍴∘'C'
.(-≠∘1)⌽'E',⍴∘'C'
ou=∘1⌽¯1⌽'E',⍴∘'C'
.'CE'[1(≠=∘⍳+)⎕]
Haskell ,
353332 octets2 octets enregistrés grâce à Angs, 1 octet enregistré grâce à Lynn
Essayez-le en ligne!
Haskell ,
323029 octetsCeci est zéro indexé donc il ne relève pas le défi
Essayez-le en ligne!
Haskell , 30 octets
Cela ne fonctionne pas car la sortie doit être une chaîne
Essayez-le en ligne!
Ici, nous utilisons des chiffres au lieu de chaînes,
2
pour le couloir d'urgence,1
pour les voitures. Nous pouvons ajouter un1
à la fin en multipliant par 10 et en ajoutant1
. C'est moins cher car nous n'avons pas à payer tous les octets pour la concaténation et les littéraux de chaîne.Ce serait moins coûteux à utiliser
0
au lieu de,1
mais nous avons besoin de zéros non significatifs, qui finissent par être éliminés.la source
((blah)!!)
peut devenir(!!)$blah
de sauvegarder un octet dans vos deux premières réponses.Python 3 ,
3029 octetsEssayez-le en ligne!
OK, il y a déjà beaucoup de réponses en Python, mais je pense que c'est le premier byter de moins de 30 ans parmi ceux qui utilisent encore les caractères "E" et "C" plutôt que des chiffres.
la source
JavaScript (Node.js) , 28 octets
Essayez-le en ligne!
la source
APL (Dyalog Unicode) , 16 octets
Essayez-le en ligne!
la source
Stax , 7 octets
Exécuter et déboguer
Ceci utilise les caractères "0" et "1". Cela fonctionne car lorsque vous faites pivoter un tableau de taille 1, il ne change pas.
Déballé, non golfé et commenté, cela ressemble à ceci.
Exécuter celui-ci
la source
JavaScript (Node.js) , 19 octets
Essayez-le en ligne!
la source
Perl 5
-p
,272019 octetsEssayez-le en ligne!
Enregistré un octet en utilisant
1
pour les voitures etE
pour le couloir d'urgence.la source
Gelée , 6 octets
Affiche les voies réservées aux voitures à 0 et la voie d’urgence à 1 .
Essayez-le en ligne!
Comment ça marche
la source
Espace blanc ,
141104103 octetsLettres
S
(espace),T
(tabulation) etN
(nouvelle ligne) ajoutées uniquement en surbrillance.[..._some_action]
ajouté comme explication seulement.Imprime
1
au lieu deC
et-
au lieu deE
.-1 octet grâce à @JoKing en suggérant l'utilisation de
1
et à la-1
place de0
et1
.Explication en pseudo-code:
Exemple fonctionne:
Contribution:
1
Essayez-le en ligne (avec des espaces bruts, des onglets et des nouvelles lignes uniquement).
Arrêts avec erreur: sortie non définie.
Contribution:
4
Essayez-le en ligne (avec des espaces bruts, des onglets et des nouvelles lignes uniquement).
Arrêts avec erreur: sortie non définie.
la source
-
abusant de l'impression-1
?push_0
;print_as_integer
;push_1
;print_as_integer
àpush_-1
;print_as_integer
, mais en échange les deuxpush_0
;print_as_integer
sont remplacés parpush_45
;print_as_character
, oùpush_0
=SSSN
, etpush_45
=SSSTSTTSTN
. Etpush_45
il faut aussi ajouter un élément supplémentaire, car pour l’entrée,n=1
j’imprime maintenant le duplicata que0
j’avais déjà sur la pile, je n’ai donc pas eu à repousser0
car il0
était déjà sur la pile.-
comme remplacer1
et1
remplacer0
. Vous éviteriez alors de devoir appuyer sur 45, et autant que je sache, cela permettrait d'économiser sur l'impression d'un nombre dans la première moitié du conditionnel, mais augmenterait légèrement les coûts en appuyant sur 1 au lieu de 0. Check my Gol> <> answer for un exemple de la sortie que je veux direprint_-1
au lieu d'imprimer0
et1
, mais un supplémentprint_-1
est nécessaire en dehors de la boucle. EDIT: été capable de le réduire à 103 octets en changeantsubtract_1
;if_0_jump_to_ONE
;push_-1
;print_integer
àsubtract_2
;if_negative_jump_to_ONE
;print_integer
, car -1 est déjà sur la pile alors. Alors merci pour -1 octet. :)AutoHotkey 32 octets
Remplace la lettre "C" par "EC" à moins que le montant de C> 1, puis envoie "CEC" et quitte l'application.
C => EC
CC => CEC quitte alors le programme. Tous les autres C seront entrés après la sortie du programme.
la source
APL + WIN,
2016 octets4 octets économisés grâce à Adám
Invites pour l'entier n:
1 pour le couloir d'urgence o pour les voitures.
la source
(-2≠⍴n)⌽n←1⎕/⍕10
J , 11 octets
Essayez-le en ligne!
Basé sur le commentaire de ngn .
🚘 et 🚔:
1&<,~/@A.'🚔',~'🚘'$~,&4
la source
MathGolf ,
7 à6 octetsEssayez-le en ligne.
Sortie
1
pourE
et0
pourC
.Explication:
la source