Językiem, który jest bardzo przydatny w ograniczonym źródle i innych tego typu wyzwaniach, jest Unary , pochodna od pieprzenia mózgu, w której programy są napisane tylko jedną postacią. Twoim zadaniem jest napisanie programu do konwersji programów z pieprzenia mózgu na jednoargumentowy oraz programu odwrotnego do tego, oba programy w tym samym języku. Twój wynik będzie sumą długości dwóch programów.
Jak przekonwertować z pieprzenia mózgu na jednoosobowe?
- Najpierw przekonwertuj kod pierdolony w binarny zgodnie z poniższą tabelą:
- Teraz połącz kod w jeden gigantyczny numer binarny w kolejności kodu.
- Wstaw
1
ciąg a do ciągu, aby zapewnić unikalną liczbę binarną. - Konwertuj z liczby binarnej na liczbę jednoargumentową za pomocą dowolnego znaku.
- Np .:
+.
byłoby000000000000000000000000000000000000000000000000000000000000000000000000000000000000
(84 zer).
Brainfuck -> Unary Specs
- Ponieważ powstałe programy będą niemożliwie ogromne, nie drukuj rzeczywistego programu, a jedynie długość wynikowego programu.
- Weź program pieprzenia mózgu jako ciąg znaków przez stdin, funkcję arg itp. I wypisz długość.
- Program zawsze będzie ważny i będzie zawierał tylko 8 znaków.
Unary -> Brainfuck Specs
- Będziesz musiał zaimplementować odwrotność powyższego algorytmu.
- Ponownie, ze względu na ogromne rozmiary, o których mowa, dane wejściowe będą liczbą opisującą długość kodu Unary.
- Te same zasady we / wy jak zawsze.
- Program zawsze będzie ważny i będzie zawierał tylko 8 znaków.
Przypadki testowe
- Hello World -
++++++[>++++++++++++<-]>.>++++++++++[>++++++++++<-]>+.+++++++..+++.>++++[>+++++++++++<-]>.<+++[>----<-]>.<<<<<+++[>+++++<-]>.>>.+++.------.--------.>>+.
=239234107117088762456728667968602154633390994619022073954825877681363348343524058579165785448174718768772358485472231582844556848101441556
- Fibonacciego -
++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++>++++++++++++++++>>+<<[>>>>++++++++++<<[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>[<+>-]>[-]>>>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]>>[++++++++++++++++++++++++++++++++++++++++++++++++.[-]]<[++++++++++++++++++++++++++++++++++++++++++++++++.[-]]<<<++++++++++++++++++++++++++++++++++++++++++++++++.[-]<<<<<<<.>.>>[>>+<<-]>[>+<<+>-]>[<+>-]<<<-]<<++...
=13067995222095367150854793937817629722033205198624522624687536186118993888926522550140580142585590431635487113180955099384652678100247403485397450658564826143160529351955621991895221530908461364045400531236124980271740502887704217664044858614821622360156740992393765239123681327824577149595724956207165558106099868913919959549896553103116795519592552089266360725543244154867904980260
To jest golf golfowy, więc wygrywa najniższy wynik w bajtach!
Ktoś czeka na rozwiązanie w Unary? ; P
code-golf
brainfuck
base-conversion
compiler
Maltysen
źródło
źródło
10101010101010
, kiedy powinny być1010010010010
Odpowiedzi:
Pyth, 17 + 17 = 34 bajty
BF -> Unary, 17 bajtów
Unary -> BF, 17 bajtów
źródło
pieprzenie mózgu ,
563 335 318 316296 +529 373 366336 = 632 bajtówPonieważ w oczywisty sposób brakowało rozwiązania w pokrewnym języku, oto rozwiązanie w pieprzeniu mózgu i Golunar. Nie mogłem opublikować odpowiedzi jednoznacznie, ponieważ wymagałoby to kilka fantastycznych razy więcej pamięci niż atomów we wszechświecie ^^
Procedura „wstecz” nie sprawdza, czy kod Golunar / Unary jest prawidłowy. Jeśli liczba bitów mod 3! = 1, to przejdzie do nieskończonej pętli drukującej wiele „>”.
Dzięki Nitrodon za pomoc w uzyskaniu poniżej 300 znaków dla bf do unarnego kodu
pieprzyć mózg do jednego
Wypróbuj online!
i z powrotem
Wypróbuj online!
Golunar / unary-digits,
509 303 288 286268 +478 337 331304 = 572 bajtówpieprzyć mózg do jednego
i z powrotem
Kody źródłowe
pieprzyć mózg do jednego
i z powrotem
źródło
Python 2,
80796355 +8664 = 119 bajtówPodziękowania dla Sp3000 za jego liczne sugestie, pozwalające zaoszczędzić wiele bajtów.
Brainfuck to Unary,
78776153 + 2 = 55 bajtówDodano dwa bajty do uwzględnienia otaczających danych na wejściu.
Unary to Brainfuck,
8664 bajtówSprawdź to na ideone tutaj.
źródło
CJam, 35 bajtów
Brainfuck to Unary, 17 bajtów
Wypróbuj online.
Jak to działa
Unary to Brainfuck, 18 bajtów
Wypróbuj online.
Jak to działa
źródło
Bash + coreutils, 39 + 47 = 86
b2u.sh
:u2b.sh
:Wyjście testowe:
źródło
tr -dc 0-9
(a w golfie kodowym można założyć, że?
jest w porządku bezJapt , 13 + 13 = 26 bajtów
Brainfuck to Unary
Spróbuj!
Wyjaśnienie:
Unary dla Brainfuck
Spróbuj!
Wyjaśnienie:
Notatki
Nie mogę znaleźć meta postu, ale jeśli moja pamięć służy poprawnie, odpowiedzi mogą ograniczać operacje we / wy do liczb obsługiwanych przez ich język, o ile implementują algorytm, który działałby, gdyby język zaczął obsługiwać większe liczby. Tak jest w tym przypadku, ponieważ zdolność Japt do traktowania łańcucha jako „bazy
n
przy użyciu tychn
znaków dla cyfr” może wykorzystywać tylkonumber
typ danych po drugiej stronie operacji, a zatem przypadki testowe nie będą działać poprawnie; wyjście pierwszego programu i wejście drugiego programie zmusić ilość jednego, który może być przedstawiony w postacinumber
, zamiast rzeczywistego numeru. Dla liczb, które mogą być doskonale reprezentowane przez Japt'snumber
typ danych te programy będą działać zgodnie z potrzebami, a jeślinumber
typ danych zmieni się, aby obsługiwać większe liczby, wówczas te programy również zaczną obsługiwać te liczby.źródło
05AB1E , 33 (17 + 16) bajtów
Brainfuck do Unary-length:
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
Unary-length do Brainfuck
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
Dart , 77 + 142 = 219 bajtów
Wypróbuj online!
źródło
C (gcc) , 254 bajty
Wypróbuj online!
Określa kierunek, w którym należy podążać na podstawie input (
i
), zapisuje wynik w przekazywanym buforze (o
). Zauważ, że niektóre kompilatory pozwalają na zapis 4 bajtów w oparciu o zdefiniowaną w implementacji kolejność o ++. W takich przypadkach dostarczone rozwiązanie obetnie dodatkowy znak z konwersji Unary-> BF io[1]
wszystkie można zastąpić,*o
aby przywrócić zachowanie.źródło
#include <string.h>
stopki zamiast nagłówka, aby pokazać, że działa bez tego importu. Czy również C ++ nie byłby krótszy z powodu przeciążenia operatora? : Psi
naui
może*i>47&*i<58
->*i%48<10
?mpz_init_set_str
->mpz_set_str