Défi
Étant donné deux chaînes dans n'importe quel format d'E / S par défaut, procédez comme suit:
REMARQUE: le défi fera référence à la première chaîne en tant que "données" et la seconde en tant que "programme".
- Changez le programme en une chaîne infinie qui est juste le programme répété à l'infini (par exemple
10
->1010101010...
). Le défi appellera cela le "programme infini" Pendant que les données ne sont pas vides, procédez comme suit lors de la boucle sur le programme infini:
une. Si la commande actuelle est "0", supprimez le bit le plus à gauche dans les données. Si les données sont vides, "0" ne fait rien.
b. Si la commande en cours est "1", ajoutez le caractère suivant du programme aux données si le bit le plus à gauche des données est un.
c. Si les données ne sont pas vides maintenant, sortez les données.
Cas de test
Les données sont le côté gauche de l'entrée et le programme est le côté droit.
100, 0 --> 00, 0
1111, 1 --> 11111, 111111, 1111111, ...
10, 011 --> 0, 0, 0
1110, 011 --> 110, 1101, 11010, 1010...
Remarques
- Les données et le programme ne comprendront que 0 et 1
- Pour les données / programmes qui ne s'arrêtent pas, votre programme n'a pas besoin de s'arrêter.
- Les données et le programme ne seront pas vides dans l'entrée.
- Vous pouvez avoir plusieurs nouvelles lignes de fin et de début
- Les échappatoires standard sont interdites
- Vous pouvez utiliser n'importe quel format d'E / S pratique
Comme toujours avec le code-golf , le code le plus court gagne !
la source
100
passe à10
cmd0
, dont la définition est «supprimer le bit le plus à gauche des données». ne serait pas le plus à gauche peu100
être1
?Réponses:
Haskell,
777162 octetsEssayez-le en ligne!
Edit: -9 octets grâce à @xnor.
la source
f:[e,f++take d q]!!p#q
.C # (Visual C # Interactive Compiler) , 82 octets
Essayez-le en ligne!
la source
0
, et 49 est la valeur ASCII de1
List
etSkip
, ou quelque chose comme çaJ , 65 octets
Essayez-le en ligne!
Je pourrai jouer au golf plus tard. Notez que
5
la fin serait l'infini_
dans le programme réel, mais je l'ai laissé là pour faciliter l'exécution des exemples sans interruption.la source
Python 3 , 74 octets
Essayez-le en ligne!
Arguments::
d
donnéesp
,: programme.la source
05AB1E ,
2421 octetsPrend le programme comme première entrée et les données comme deuxième entrée.
Essayez-le en ligne.
Explication:
la source
Rubis ,
6259 octetsEssayez-le en ligne!
Comment
c
et des donnéesd
, appelez-lesa
etb
. Remisea
à la fin dec
.b
au début ded
ifa==1
. Cela peut être raccourci[b]*a
c
à la fin ded
ifa==1 and b==1
. Cela peut être raccourcic[0,a*b]
.la source
Python 2 ,
9682 octetsEssayez-le en ligne!
Voler un peu de la réponse d'Emodiment of Ignorance ...
Un générateur qui utilise des listes de 1 et de 0 pour les entrées / sorties.
la source
Gelée , 40 octets
Essayez-le en ligne!
J'ai supposé que les nouvelles lignes de fin étaient correctes. Je suis également allé avec une liste de deux listes de zéros et de uns en entrée et en sortie sur stdout.
la source
Python 1 , 75 octets
Essayez-le en ligne!
la source
[]
au lieu d'une nouvelle ligne sur, par exemple, les données[1,0,0]
, le programme[0]
.C ++ (gcc) , 178 octets
Essayez-le en ligne!
la source
C ++ (gcc) ,
294289272 octets-22 octets grâce à @ceilingcat
Essayez-le en ligne!
Algorithme assez simple. Copie les données dans une file d'attente et boucle à plusieurs reprises dans le programme. Sur un "0", il supprime le premier élément de la file d'attente (le premier "bit"). Sur un 1, il ajoute le "bit" suivant du programme aux données si le premier "bit" des données est 1. Puis il parcourt les données, les imprimant "bit" par "bit", et finalement imprime un espace pour séparer les entrées de données successives.
la source
c[1]
! Actualisé.