Biorąc pod uwagę ciąg wejściowy zawierający tylko litery i cyfry, napisz program lub funkcję, która wypisze możliwe do wydrukowania znaki ASCII (Heks 20-7E), które odpowiadają wartości ciągu w podstawach 8, 10 i 16 (tam, gdzie to możliwe). Znaki muszą być pisane w kolejności rosnącej, zgodnie z podstawami, z którymi się korespondują (najpierw podstawa 8 itp.). Dane wyjściowe mogą być w formacie tablicowym (jak [& . F]
) lub być oddzielone spacjami lub znakami nowej linii (końcowy znak nowej linii jest opcjonalny), podobnie jak próbki.
Jeśli nie można utworzyć możliwego do wydrukowania znaku ASCII, program nie może mieć żadnych danych wyjściowych.
Próbki
31
==> 1
47
==> ' / G
69
==> E i
7A
==> z
100
==> @ d
156
==> n
189
==> <empty>
potaTO
==> <empty>
5G
==> <empty>
19
==> <empty>
To jest golf golfowy , więc wygrywa odpowiedź z najmniejszą liczbą bajtów. Obowiązują standardowe zasady.
źródło
map
ifilter
, tablice są bardzo przydatne.'0'+b+...
kiedyb
zawsze będzie ciągiem?0+b+...
MATL , 23
2428bajtów1 bajt off dzięki @David
Wypróbuj online!
źródło
D
jest to konieczne, prawda? Dobra robota przy tworzeniu wektora, zrobiłem prawie to samo co ty, ale nie mogłem skrócić wektora[8,10,16]
.D
w tym przypadku konieczne jest opróżnienie stosu. Ale masz rację, to nie jest! Dzięki!' ':'~'
jako predefiniowany literał do następnego wydania!32:126m
to dobry pomysł!!Python 3,
8482 bajtówźródło
Pyth,
23212018 bajtówDane wyjściowe jako tablica.
\x80
Między odwrotnym ukośnikiem a literą C jest literał , który zastąpiłem literą•
.Wypróbuj tutaj .
źródło
Jolf, 26 bajtów
Wypróbuj tutaj! Zestaw testowy
Wyjaśnienie
źródło
Bash + narzędzia GNU + ascii , 36
Nie jestem pewien, czy korzystanie z
ascii
narzędzia jest dozwolone. Dane wejściowe są traktowane jako parametr wiersza polecenia.ascii
może być zainstalowany na Ubuntu zsudo apt-get install ascii
.źródło
JavaScript ES6, 89 znaków
Test:
źródło
Lua, 147 bajtów
Nie sądzę, żebym mógł grać w golfa o wiele bardziej, przetestowałem wiele sposobów, aby to zrobić, a tutaj jest najkrótszy. Nawet użycie starego kompilatora, który zawiera przestarzałą funkcję
table.foreach(table,function)
, nie goli niektórych bajtów.Ten program przyjmuje ciąg jako argument i wypisuje konkatenację wartości tabeli oddzielonych spacjami.
Bez golfa i wyjaśnienia
Jeśli zastanawiasz się, dlaczego istnieje zestaw zmiennych, ale nie jest używany w kodzie golfowym (zmienna
_
w pętli for), oto dlaczego:Masz 2 sposoby na iterację po tablicy w Lua, albo w stylu for:
lub w stylu foreach:
Potrzebowałem wartości zawartych w tabeli,
{8,10,16}
ponieważ są to różne podstawy, nad którymi muszę iterować. Ale funkcje z wielokrotnym zwrotem nie pozwalają wybrać, który z nich rzeczywiście chcesz zwrócić, wykonują polecenie. Abyvalue
ustawić zmienną , muszę również złapać wartośćkey
: to nazywamy manekinem_
.źródło
C (funkcja), 76
Ideone.
źródło
j*=j,j/=6
jest bardziej wyraźnie napisany jakoj=j*j/6
j*=j/6
ale to nie działało z powodu utraty precyzji podczas podziału liczb całkowitychj<20,
przecinek operator odrzuca cały efekt tego.JavaScript ES6,
8988 bajtówZaoszczędzono 1 bajt dzięki Neilowi!
Zwraca tablicę. Jeśli nie jest to w porządku, działa to na dodatkowe 8 bajtów, wyświetlając możliwe dopasowania.
Pokaż fragment kodu
źródło
47
.Number()
wymaga,0o
aleeval
jest z tego zadowolony0
. Przepraszam za zamieszanie.R, 84 bajtów
służy
strtoi
do konwersji do każdej z baz, a następnie do postaci, jeśli znajduje się w odpowiednim zakresie. Można zaoszczędzić 4 bajty, usuwając,cat
jeśli zezwolimy na domyślny druk znaków (zawinięty w""
)źródło