(Tytuł dzięki dzięki @ChasBrown)
Tło
To wyzwanie jest inspirowane pytaniem, które niedawno zamieściłem na Puzzling Stack Exchange . Jeśli jesteś zainteresowany pierwotnym pytaniem, skorzystaj z linku. Jeśli nie, to nie zanudzę cię szczegółami tutaj.
Fakty
Każdy standardowy drukowany znak ASCII ma wartość dziesiętną od 32 do 126 włącznie. Można je przekonwertować na odpowiadające im liczby binarne z zakresu od 100000 do 1111110 włącznie. Gdy zsumujesz bity tych liczb binarnych, zawsze uzyskasz liczbę całkowitą od 1 do 6 włącznie.
Wyzwanie
Biorąc pod uwagę liczbę całkowitą od 1 do 6 włącznie jako dane wejściowe, napisz program lub funkcję, która wyświetli w dowolnym akceptowalnym formacie wszystkie standardowe znaki ASCII do wydruku, w których suma bitów ich wartości binarnej jest równa całkowitej liczbie wejściowej.
Przykłady / przypadki testowe
1 -> ' @'
2 -> '!"$(0ABDHP`'
3 -> '#%&)*,1248CEFIJLQRTXabdhp'
4 -> ''+-.3569:<GKMNSUVYZ\cefijlqrtx'
5 -> '/7;=>OW[]^gkmnsuvyz|'
6 -> '?_ow{}~'
Implementacja referencji bez golfisty w Pythonie jest dostępna tutaj (TIO) .
Zasady
- Załóżmy, że wejście zawsze będzie liczbą całkowitą (lub ciągiem reprezentującym liczbę całkowitą) od 1 do 6 włącznie.
- Możesz napisać program do wyświetlania wyników lub funkcję do ich zwrócenia.
- Dane wyjściowe mogą być w dowolnym rozsądnym formacie, ale muszą być spójne dla wszystkich danych wejściowych . Jeśli zdecydujesz się wyprowadzać cytowany ciąg, wówczas dla wszystkich danych wejściowych należy zastosować ten sam typ cudzysłowów.
- Standardowe luki zabronione jak zwykle.
- To jest kod golfowy, więc wygrywa najkrótszy kod w każdym języku.
63
Vs?
)?'
domyślnie używa pojedynczych cudzysłowów ( ) do reprezentacji ciągu znaków, ale używa podwójnych cudzysłowów ("
), jeśli ciąg zawiera pojedynczy cudzysłów i nie zawiera podwójnych cudzysłowów . Nie chodzi o to, że ten konkretny przypadek będzie miał duże znaczenie, ponieważ prawdopodobnie lepiej jest zwrócić rzeczywisty ciąg zamiast jego reprezentacji, a mimo to możesz używać pojedynczych cudzysłowów w takim ciągu do wprowadzania danych, ale myślę, że warto o tym wspomnieć.« »
)? : DOdpowiedzi:
Zestaw 8088, IBM PC DOS,
353029 bajtówKod maszynowy:
Wymienianie kolejno:
Samodzielny program wykonywalny DOS na PC, numer wejściowy z wiersza poleceń. Dane wyjściowe są wyświetlane w oknie konsoli.
Pobierz i przetestuj ABCT.COM (AsciiBitCounT).
źródło
Zespół CP-1610 ( Intellivision ), 20 DECLE 1 = 25 bajtów
PobieraN. w R0 i wskaźnik do bufora wyjściowego w R4 . Zapisuje wszystkie pasujące znaki w buforze i oznacza koniec wyników wartością NUL .
Wyjście dla N = 2
Uwaga: Nawias otwierający przypomina czcionkę otwierającą nawias kwadratowy w czcionce Intellivision. Obie postacie są jednak różne.
zrzut ekranu z jzIntv
1. Kod operacyjny CP-1610 jest kodowany za pomocą 10-bitowej wartości, zwanej „DECLE”. Ta procedura ma długość 20 DECLE, zaczynając od 4819 USD, a kończąc na 482 USD (w zestawie).
źródło
Python 2 , 62 bajty
Wypróbuj online!
źródło
sum(map(int,bin(i)[2:]))==n
możnabin(i).count('1')==n
zapisać 7 bajtów.05AB1E , 8 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Perl 6 ,
4134 bajtówWypróbuj online!
Anonimowy blok kodu, który pobiera liczbę i zwraca ciąg poprawnych znaków.
Wyjaśnienie:
Można udowodnić, że dla dowolnej liczbyn bazie b , n ≡ cyfra ( n )( modb - 1 ) (wskazówka: pamiętaj, żeb( modb - 1 ) = 1 ).
Możemy użyć tego, aby uzyskać cyfrę naszej liczby binarnej, parsując ją jako liczbę dziesiętną i modulując przez 9, co jest ważne, ponieważ zakres liczb, których używamy, ma mniej niż 9 bitów. Pomaga to automatyczne rzutowanie ciągu binarnego przez Perl 6 na liczbę dziesiętną, gdy jest używane w kontekście numerycznym.
źródło
Galaretka , 8 bajtów
Wypróbuj online!
źródło
JavaScript (Node.js) , 60 bajtów
Używanie sztuczki modulo Jo Kinga
Wypróbuj online!
JavaScript (Node.js) ,
7069 bajtówWypróbuj online!
Skomentował
źródło
Brachylog , 7 bajtów
Wypróbuj online!
Predykat, który działa jak generator , pobiera dane wejściowe przez zmienną wyjściową i generuje każdy znak poprzez zmienną wejściową. Ponieważ Brachylog.
źródło
Japt , 9 bajtów
Wypróbuj lub przetestuj wszystkie dane wejściowe
źródło
Excel (2016 lub nowszy), 76 bajtów
Pobiera dane wejściowe z A1, wyniki w dowolnej komórce, w której umieścisz tę formułę. Jest to formuła tablicowa, więc musisz nacisnąć Ctrl+ Shift+, Enteraby ją wprowadzić. „2016 lub nowszy” to dlatego, że potrzebuje
CONCAT
funkcji (przestarzałeCONCATENATE
nie przyjmuje tablicy jako argumentu).źródło
C (biblioteka standardowa),
7467 bajtówUżywanie tylko standardowych funkcji bibliotecznych. Podziękowania dla @gastropner za poprawę z 74 do 67 bajtów.
Wypróbuj online!
źródło
f(1)
skrzynce (ponieważ++i
pomija je).R ,
7768 bajtówPodejdź używając pętli for
-9 bajtów dzięki Giuseppe
Wypróbuj online!
Poprzednio:
R ,
78 6966 bajtów-12 bajtów dzięki Giuseppe
Przekształca liczby od 32 do 126 w macierz bitów, a następnie sumuje w wierszach, aby znaleźć, które pasują do liczby wejściowej.
Wypróbuj online!
źródło
intToBits(x)>0
zamiastas.single
|0
i dostałem błąd i po prostu założyłem, że operatory logiczne nie będą działać.sapply
zamiastmatrix
Java 10,
9897947067 bajtów-24 bajty dzięki NahuelFouilleul .
Wypróbuj online.
Wyjaśnienie:
Zawiera niedrukowalny znak o wartości Unicode
127
.źródło
n.bitCount
. :)Java 8,
13171 bajtów-60 bajtów dzięki wszystkim w komentarzach
Zwraca punkt
java.util.stream.IntStream
kodowyWypróbuj online!
Korzystanie z HashSet, 135 bajtów. Zwraca a
Set<Object>
:Wypróbuj online!
źródło
Long.toBinaryString(i)
może byćLong.toString(i,2);
C # (interaktywny kompilator Visual C #) , 86 bajtów
Dzięki @ExpiredData za pomysł na wykorzystanie
Sum()
! Kiedy wrócę do komputera,"0123456"
zastąpię ciąg napisami, których nie można drukować, oszczędzając trzy bajty.Wypróbuj online!
źródło
Sum()
!Dyalog APL Extended,
2422 bajtówWypróbuj online!
-2 bajty dzięki ngn
Alternatywne 22 bajty w zwykłym APL Dyalog przez ngn:
Wypróbuj online!
źródło
(
expr)∘=
->⎕=
expr⎕ucs 32+⍸⎕=32↓+/↑,⍳7⍴2
(←io ← 0)Python 2 , 69 bajtów
Wypróbuj online!
źródło
Gaia , 10 bajtów
Wypróbuj online!
źródło
J ,
3127 bajtów-4 bajty dzięki Galenowi
Wypróbuj online!
Oryginalna odpowiedź
Wypróbuj online!
2#:@i.@^8:
tworzy liczby binarne od 0 do 255 (2 ^ 8
jest 256)1#.
sumuje każdy]=
tworzy maskę binarną pokazującą, gdzie suma jest równa oryginalnej wartości wejścioweja.#~ mask
używa tej maski binarnej do filtrowania pełnego alfabetu ascii J.a.
&(95{.32}.])
ale zanim to zrobisz, weź tylko elementy 32 ... 126 z alfabetu i maskiźródło
[:u:32+[:I.]=1#.32#:@+i.@95
dla 27 bajtówi.@95
Perl 5
-a
,5043 bajtów@NahuelFouilleul oszczędza 7 bajtów
Wypróbuj online!
źródło
"@F"
zamiast$F[0]
%9
trick @JoKingK (ngn / k) , 20 bajtów
Rozwiązanie:
Wypróbuj online!
Wyjaśnienie:
Ocena od prawej do lewej:
źródło
Zestaw 6502 (NES), 22 bajty
Kod maszynowy:
Montaż:
Pełny program . Testowany z FCEUX 2.2.3, powinien działać na dowolnym standardowym emulatorze NES.
Zainspirowany odpowiedzią Ryana Russella. Dane wejściowe podane pod adresem procesora 60 USD. Wysyła do pamięci jednostki przetwarzania obrazu konsoli.
źródło
Wolfram Language (Mathematica) , 70 bajtów
Wypróbuj online!
źródło
PowerShell , 83 bajty
Wypróbuj online!
Pobiera dane wejściowe
$n
, konstruuje zakres od32
do126
i wyciąga te liczby, w których|?{}
: liczba,convert
edToString
w bazie2
; konwersjat
oCharArray
;group
ed do0
s i1
s; biorąc[1]
indeks tej grupy; biorąc to.count
i sprawdzając, czy jest to-eq
zgodne z naszym$n
umberem wejściowym . Liczby te są następnie rzutowane jakochar
tablice i pozostawiane w kolejce. Wynik jest niejawny, z nowymi liniami między elementami.źródło
Rubinowy , 48 bajtów
Wypróbuj online!
źródło
Węgiel drzewny , 10 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
źródło
PHP , 72 bajty
Wypróbuj online!
źródło
count_chars(decbin($x),1)[49]
może byćdecbin($x)%9
Czerwony , 92 bajty
Wypróbuj online!
źródło
Oktawa z pakietem komunikacyjnym, 32 bajty
Wypróbuj online!
źródło
Współczynnik , 94 bajty
Wypróbuj online!
źródło