Wejście:
Pobieramy dwa dane wejściowe:
- Dane wejściowe
b
o dwóch różnych wartościach:Left
iRight
. † - I dodatnia liczba całkowita
n
.
Wynik:
Na podstawie danych Lewo / Prawo wyprowadzamy jedną z następujących dwóch sekwencji w zakresie 1-n
(w sekwencjach poniżej wyświetlanych jest pierwszych 125 pozycji):
Left:
1, 6, 7, 56, 57, 62, 63, 960, 961, 966, 967, 1016, 1017, 1022, 1023, 31744, 31745, 31750, 31751, 31800, 31801, 31806, 31807, 32704, 32705, 32710, 32711, 32760, 32761, 32766, 32767, 2064384, 2064385, 2064390, 2064391, 2064440, 2064441, 2064446, 2064447, 2065344, 2065345, 2065350, 2065351, 2065400, 2065401, 2065406, 2065407, 2096128, 2096129, 2096134, 2096135, 2096184, 2096185, 2096190, 2096191, 2097088, 2097089, 2097094, 2097095, 2097144, 2097145, 2097150, 2097151, 266338304, 266338305, 266338310, 266338311, 266338360, 266338361, 266338366, 266338367, 266339264, 266339265, 266339270, 266339271, 266339320, 266339321, 266339326, 266339327, 266370048, 266370049, 266370054, 266370055, 266370104, 266370105, 266370110, 266370111, 266371008, 266371009, 266371014, 266371015, 266371064, 266371065, 266371070, 266371071, 268402688, 268402689, 268402694, 268402695, 268402744, 268402745, 268402750, 268402751, 268403648, 268403649, 268403654, 268403655, 268403704, 268403705, 268403710, 268403711, 268434432, 268434433, 268434438, 268434439, 268434488, 268434489, 268434494, 268434495, 268435392, 268435393, 268435398, 268435399, 268435448, 268435449
Right:
1, 4, 7, 32, 39, 56, 63, 512, 527, 624, 639, 896, 911, 1008, 1023, 16384, 16415, 16864, 16895, 19968, 19999, 20448, 20479, 28672, 28703, 29152, 29183, 32256, 32287, 32736, 32767, 1048576, 1048639, 1050560, 1050623, 1079296, 1079359, 1081280, 1081343, 1277952, 1278015, 1279936, 1279999, 1308672, 1308735, 1310656, 1310719, 1835008, 1835071, 1836992, 1837055, 1865728, 1865791, 1867712, 1867775, 2064384, 2064447, 2066368, 2066431, 2095104, 2095167, 2097088, 2097151, 134217728, 134217855, 134225792, 134225919, 134471680, 134471807, 134479744, 134479871, 138149888, 138150015, 138157952, 138158079, 138403840, 138403967, 138411904, 138412031, 163577856, 163577983, 163585920, 163586047, 163831808, 163831935, 163839872, 163839999, 167510016, 167510143, 167518080, 167518207, 167763968, 167764095, 167772032, 167772159, 234881024, 234881151, 234889088, 234889215, 235134976, 235135103, 235143040, 235143167, 238813184, 238813311, 238821248, 238821375, 239067136, 239067263, 239075200, 239075327, 264241152, 264241279, 264249216, 264249343, 264495104, 264495231, 264503168, 264503295, 268173312, 268173439, 268181376, 268181503, 268427264, 268427391
W jaki sposób generowane są te sekwencje?
Domyślna sekwencja od 1 do n=10
będzie następująca:
As integer:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
As binary:
1 10 11 100 101 110 111 1000 1001 1010
Kiedy rozciągniemy w lewo, plik binarny stanie się tak:
1, 110, 111, 111000, 111001, 111110, 111111, 1111000000, 1111000001, 1111000110
Dlaczego? Ostatni bit jest używany raz; ostatnia jest używana dwukrotnie; przedostatni jest używany trzy razy; itp.
So `1010` will become (spaces added as clarification): `1111 000 11 0`
A te nowe rozciągnięte w lewo ciągi binarne są konwertowane z powrotem na liczby całkowite:
1, 6, 7, 56, 57, 62, 63, 960, 961, 966
Jeśli chodzi o rozciągnięty w prawo, pierwszy bit jest używany raz; drugi raz; trzeci trzy razy; itp. Jak to:
As binary:
1, 100, 111, 100000, 100111, 111000, 111111, 1000000000, 1000001111, 1001110000
As integer:
1, 4, 7, 32, 39, 56, 63, 512, 527, 624
Zasady konkursu:
- † Możesz wziąć dowolne dwie różne wartości, ale określ, której z nich używasz. Więc to może być
1/0
,true/false
,null/undefined
,"left"/"right"
, itd. n
jest zawsze większy niż 0.- Powinieneś obsługiwać maksymalną wartość wyjściową co najmniej domyślnej liczby całkowitej twojego języka (która jest 32-bitowa dla większości języków).
- Format wyjściowy jest elastyczny. Można wydrukować lub zwrócić jako tablicę / listę. Może być ze spacją, przecinkiem, rurką i tym podobne jako separator. Twoja decyzja. (Ponownie, proszę podać, czego użyłeś).
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i zwracanymi typami, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem swojego kodu.
- W razie potrzeby dodaj również wyjaśnienie.
n < 128
, aby wyniki pasowały do 32-bitowych liczb całkowitych?Odpowiedzi:
Galaretka , 9 bajtów
Wypróbuj online!
-1
na lewo,1
na prawo.źródło
Python 2 ,
10296 bajtów-1 dla lewej, 1 dla prawej
Wypróbuj online!
źródło
05AB1E ,
1413 bajtówZaoszczędzono 1 bajt dzięki Erikowi Outgolfer
1
na lewo.0
(lub cokolwiek innego) na prawo.Wypróbuj online!
Wyjaśnienie
źródło
ε
dla -1:LbεIiRƶRëƶ}JC
ë
. Porusza się w sprawieif
w aplikacji w tej sprawie :)Łuska , 13 bajtów
To dużo kropkowanych liter ...
Najpierw trwa
b
(0
dla lewej i1
prawej)n
. Wypróbuj online!Wyjaśnienie
źródło
b
bezpośrednio take lub ṫ, oszczędzając ci trzy bajty :)b
a moim rozwiązaniem będzie po prostuI
...Japt ,
191817 bajtów0
dla „lewo”,1
dla „prawo”. (Może faktycznie przyjąć dowolne wartości falsey lub prawdy zamiast tych 2).Sprawdź to
Wyjaśnienie
Domniemane wprowadzanie liczb całkowitych
U
iV
.Utwórz tablicę liczb całkowitych od 1 do
U
włącznie.Przekaż każdą z funkcji.
Konwertuj bieżącą liczbę całkowitą na ciąg binarny
Odwzoruj ciąg znaków, przepuszczając każdy znak przez funkcję, gdzie
E
jest bieżący indeks iF
pełny ciąg.Powtórz obecny znak
©
jest logiczne ORAZ (&&
) iª
logiczne LUB||
, więc sprawdzamy, czyV
jest to prawda (niezerowa), czy nie.Jeśli
V
to prawda, toX
się powtarzaY+1
.Jeśli
V
jest falsey, toX
jest powtarzaneY
odejmowane od (n
) długości (l
)Z
razy.Konwertuj z powrotem na liczbę całkowitą podstawową 10.
Wynikowa tablica wynikowa niejawnie.
źródło
Gaia , 15 bajtów
Używa
-1
lewej i1
prawej.Wypróbuj online!
Wyjaśnienie
źródło
Proton , 79 bajtów
0
jest po lewej,1
ma rację.Wypróbuj online!
Bez golfa
źródło
C # (.NET Core) ,
192187 + 23 bajty-5 bajtów dzięki TheLethalCoder
Liczba bajtów obejmuje również:
Wypróbuj online!
Dane wejściowe:
left
istrue
,right
isfalse
Wyjaśnienie:
źródło
using System.Linq;
krótszy niżnamespace System.Linq{}
, czy coś mi tu brakuje? Dawno temu programowałem w .NET tbh ..Math
iConvert
oba są wSystem
przestrzeni nazw, więc wybórnamespace System.Linq
jest najkrótszy - pozwala na użycie obuSystem
iSystem.Linq
klas.Dyalog APL, 23 bajty
left is
1
right is0
(przekazany jako lewy argument funkcji)⍳
jest generatorem indeksu{
...}¨
zastosuj funkcję w nawiasach klamrowych do każdego elementu po prawej stronieb←2⊥⍣¯1⊢⍵
b jest ⍵ zakodowany jako binarny (używając odwrotności dekodowania, aby uzyskać minimalną liczbę bitów wymaganą do przedstawienia⍵
w bazie 2)⍳≢b
generuj indeksy dla wektora b (≢b
jest długością b)⌽⍣⍺
⍺
czasy odwrotne (stosowane tutaj warunkowo dla rozciągania w lewo lub w prawo)b/⍨
b replikowane przez (replikuje bity zgodnie z indeksem (odwrotnym))2⊥
dekodować z podstawy 2TryAPL online
źródło
JavaScript (ES6), 131 bajtów
Jest to znacznie dłużej niż odpowiedź Kudłatego , ale chciałem spróbować podejścia czysto bitowego.
Ze względu na 32-bitowy limit bitowych operacji JS działa to tylko dla n <128 .
Pobiera dane wejściowe w składni curry
(n)(r)
, gdzie r jest fałszem dla lewej / prawdy dla prawej.Sformatowane i skomentowane
Próbny
Pokaż fragment kodu
źródło
JavaScript (ES6), 113 bajtów
Och, to po prostu za długo! Tak się dzieje, gdy spędzasz dzień, pisząc „prawdziwy” JavaScript, dzieciaki; zapomniałeś, jak prawidłowo grać w golfa!
Wykorzystuje dowolne wartości zgodne z prawdą lub falsey
b
,false
będąc „lewym” itrue
„prawym”.Spróbuj
źródło
Galaretka , 11 bajtów
Wypróbuj online!
Argument nr 1:
n
Argument nr 2:
1
dla lewej,0
dla prawej.źródło
Siatkówka , 111 bajtów
Wypróbuj online! Staje się liczbę i albo
L
lubR
jako przyrostek (lub w oddzielnej linii). Wyjaśnienie:Konwertuj z dziesiętnego na jednoargumentowy i licz od 1 do
n
.Konwertuj z unarnego na binarny.
Zawiń każdy bit
R
iL
znaki zgodnie z ich pozycją w linii.Zamień odpowiednie znaki
R
lubL
odpowiednie cyfry obok siebie.Usuń pozostałe znaki i przekonwertuj z binarnego na dziesiętny.
źródło
1
don
. Nie tylkon
numer.JavaScript (ES6),
130127 bajtów3 bajty, dzięki Kevin
Na pewno nie znam wystarczającej ilości ES6 dla tej strony, ale próbowałem! Zapętlaj każdą liczbę i każdą reprezentację binarną dla tej liczby, powtarzając każdy znak, tyle razy, ile potrzeba.
źródło
d=>n=>
), podobnie jak pozostałe dwie odpowiedzi JS ES6. Myślę też, że możesz zapisać kolejne 2 bajty, zmieniająck=-1,l=b.length;while(++k<l)s+=b[k].repeat(d?k+1:l-k);
nak=0,l=b.length;while(k<l)s+=b[k++].repeat(d?k:l+~k);
(zaczynająck=0
zamiast-1
, a ten,l-k-1
który jest wtedy wymagany, jest skróconyl+~k
). Czy nawiasy są również(i).toString(2)
wymagane?+~k
Wygląda to powinno działać, ale nie mogę zrozumieć to, staje się coraz szalony. Dzięki za inne wskazówki!l+~k
jest błędne, ponieważ nie jestl-k-1
alel-k+1
.. Mam złe. Można nadal golf jeden bajt zaczynająck
na zero, ale:k=0,l=b.length;while(k<l)s+=b[k++].repeat(d?k:l-k+1);
.Rubinowy, 98 bajtów
źródło
a{r ?a:a.reverse}
??
,r?
zostałyby zinterpretowane jako nazwa metody.Java 8, 136 bajtów
Lambda (curry) od
Boolean
do konsumentaInteger
. Parametr boolowski wskazuje, czy rozciągnąć w lewo (wartościtrue
,false
). Wyjście jest drukowane na standardowe wyjście, oddzielone znakami nowej linii, z końcowym znakiem nowej linii.Niegolfowana lambda
Wypróbuj online
Granice
Ponieważ są zgromadzone w
int
s, wyjścia są ograniczone do 31 bitów. W rezultacie dane wejściowe są ograniczone do 7 bitów, więc maksymalne wejście obsługiwane przez program wynosi 127.Wyjaśnienie
To rozwiązanie tworzy każdą rozciągniętą liczbę za pomocą operacji bitowych. Zewnętrzna pętla iteruje
i
liczby, które mają być rozciągnięte, od 1 do n iterację , i drukuje rozciągniętą wartość po każdej iteracji.Wewnętrzna
while
pętla zwiększas
liczbę bitów do wewnątrzi
, a kolejnefor
iterując
po każdej pozycji bitu. W obrębie tej pętlid
liczy się liczba powtórzeń bieżącego bitu, która zależy od wejścial
. Na każdym krokuo
przesuwa się w lewo, a odpowiedni fragmenti
jest maskowany i wprowadzany OR.źródło