Wyzwanie
Biorąc pod uwagę dwa ciągi w dowolnym domyślnym formacie we / wy, wykonaj następujące czynności:
UWAGA: Wyzwanie będzie odnosić się do pierwszego ciągu jako „danych”, a drugi do „programu”.
- Zmień program na ciąg nieskończony, który jest po prostu programem powtarzanym w nieskończoność (np.
10
->1010101010...
). Wyzwanie będzie się nazywać tym „nieskończonym programem” Gdy dane nie są puste, wykonaj następujące czynności, zapętlając nieskończony program:
za. Jeśli bieżącym poleceniem jest „0”, usuń lewy bit z danych. Jeśli dane są puste, „0” nic nie robi.
b. Jeśli bieżącym poleceniem jest „1”, dołącz następny znak w programie do danych, jeśli najbardziej lewy bit w danych to jeden.
do. Jeśli dane nie są teraz puste, wyślij dane.
Przypadki testowe
Dane są po lewej stronie wejścia, a program po prawej stronie.
100, 0 --> 00, 0
1111, 1 --> 11111, 111111, 1111111, ...
10, 011 --> 0, 0, 0
1110, 011 --> 110, 1101, 11010, 1010...
Notatki
- Dane i program będą się składały tylko z zer i jedynek
- W przypadku danych / programów, które się nie zatrzymują, Twój program nie musi się zatrzymywać.
- Dane i program nie będą puste na wejściu.
- Możesz mieć wiele końcowych i wiodących nowych linii
- Standardowe luki są zabronione
- Możesz użyć dowolnego wygodnego formatu we / wy
Jak zawsze z kodem-golf , najkrótszych wygrywa kodu !
code-golf
interpreter
MilkyWay90
źródło
źródło
100
przechodzi do10
cmd0
, którego definicja to „usuń najbardziej lewy bit z danych”. nie skrajny lewy bit100
być1
?Odpowiedzi:
Haskell,
777162 bajtówWypróbuj online!
Edycja: -9 bajtów dzięki @xnor.
źródło
f:[e,f++take d q]!!p#q
.C # (interaktywny kompilator Visual C #) , 82 bajty
Wypróbuj online!
źródło
0
, a 49 to wartość ASCII1
List
iSkip
, lub czegoś takiegoJ , 65 bajtów
Wypróbuj online!
Mogę zagrać w golfa później. Zauważ, że
5
na końcu byłaby nieskończoność_
w rzeczywistym programie, ale zostawiłem go tam, aby ułatwić uruchamianie nieprzerwanych przykładów.źródło
Python 3 , 74 bajty
Wypróbuj online!
Argumenty::
d
dane ,:p
program.źródło
05AB1E ,
2421 bajtówPobiera program jako pierwsze wejście, a dane jako drugie wejście. Wejście.
Wypróbuj online.
Wyjaśnienie:
źródło
Rubin ,
6259 bajtówWypróbuj online!
W jaki sposób
c
i danychd
, zadzwoń do nicha
ib
. Odłóża
na koniecc
.b
na początkud
ifa==1
. Można to skrócić[b]*a
c
na końcud
ifa==1 and b==1
. Można to skrócićc[0,a*b]
.źródło
Python 2 ,
9682 bajtówWypróbuj online!
Kradnąc trochę od odpowiedzi Emodiment of Ignorance ...
Generator, który korzysta z list 1 i 0 jako danych wejściowych / wyjściowych.
źródło
Galaretka , 40 bajtów
Wypróbuj online!
Zakładam, że końcowe znaki nowej linii są w porządku. Mam również listę dwóch zer i jedynek jako danych wejściowych i wyjściowych na standardowe wyjście.
źródło
Python 1 , 75 bajtów
Wypróbuj online!
źródło
[]
zamiast nowej linii np. Danych[1,0,0]
, programu[0]
.C ++ (gcc) , 178 bajtów
Wypróbuj online!
źródło
C ++ (gcc) ,
294289272 bajtów-22 bajty dzięki @ceilingcat
Wypróbuj online!
Algorytm dość prosty. Kopiuje dane do kolejki i wielokrotnie zapętla się przez program. Na „0” usuwa pierwszy element w kolejce (pierwszy „bit”). Na 1 dodaje kolejny „bit” programu do danych, jeśli pierwszy „bit” danych ma wartość 1. Następnie przechodzi przez dane, drukując je „bit” po „bit”, i na koniec drukuje spacja do oddzielania kolejnych wpisów danych.
źródło
c[1]
! Zaktualizowano