Mój współpracownik i ja pracujemy nad starszym oprogramowaniem, którego czasem nienawidzimy. Za każdym razem, gdy go uruchamiasz, wszędzie pojawiają się potwierdzenia debugowania i nigdy nie jest to gwarancją, że coś zadziała. Motywacja do tej rundy golfa kodu pochodzi od mojego współpracownika mówiącego o naszym oprogramowaniu .
„To tak, jakbyś za każdym razem uruchamiał ten program, zgadzasz się na niektóre warunki usługi, które mówią, że co 17 bitów na dysku twardym zmieni się w 1”
Cel: Napisz program, który utworzy dokładną kopię pliku i zamieni każdy 17-bitowy plik tekstowy w 1
- NIE możesz zmienić KAŻDEJ części pliku na 1. tzn. Twój program musi wykazywać pewną inteligencję, że celuje tylko co 17 bitów
- NIE możesz pisać do oryginalnego pliku w jakikolwiek sposób
- Zwycięzca jest najmniejszym przedstawieniu programu na koniec miesiąca
Baw się dobrze z tym! Udać się!
code-golf
np. Wygrywa najkrótszy kod w bajtach.code-challenge
Potrzebuje dobrze określony system punktacji. 2. Przekształcanie co 18 bitów dysku twardego w 1 jest możliwe tylko poprzez bezpośrednie zapisywanie na dysku. Nie można tego osiągnąć, tworząc i / lub modyfikując pliki. 3. W ten sposób cały dysk stanie się bezużyteczny, więc zgodne z nim rozwiązanie będzie destrukcyjne. Nie wiem, jak dobrze społeczność otrzyma prośbę o napisanie złośliwego oprogramowania ...:/
Odpowiedzi:
CJam, 22 bajty
Wypróbuj online.
Dotyka co 17 bitów, licząc od ostatniego.
Użyłem STDIN i STDOUT, ponieważ CJam nie ma plików I / O. Jeśli nie jest to dozwolone, program może zostać zawinięty w skrypt Bash kosztem 24 dodatkowych bajtów:
Jak to działa
źródło
Perl 59
Podstawienie wyrażenia regularnego na ciągach bitów:
stosowanie:
źródło
b
i pomiędzyB
nimipack
C 125
Przyjmuje liczby całkowite big-endian i 16-bitowe .
Działa poprzez zastosowanie bitowego-LUB na co dwa bajty.
Plik wejściowy to
y
, wyjście toz
.Nie golfił
źródło
00000000 00000001 00000000 00000000 10000000 00000000
zatema
w niektórych punktach powinno wynosić zero. Maszyna musi używać big endian (w przeciwnym razie miałbyś00000000 10000000
zamiast tego10000000 00000000
, co dałoby niewłaściwą wartość).c = __builtin_bswap16(c);
poprawiło to.Python 2, 112 bajtów
Ustawia to co 17 bit big-endian, zaczynając od 17 od początku. Nie używa bibliotek. Działa poprzez konwersję pliku wejściowego na gigantyczną
n
-bitową liczbę całkowitą i bitowe ORowanie za pomocą2**n/(2**17 - 1) == 0b10000000000000000100000000000000001…
.źródło
C - 139
Odczytuje z pliku o nazwie „i”, wyprowadza do pliku o nazwie „o”.
Z podziałami linii:
Zlicza bity wejściowe, a następnie używa pływającej maski bitowej do ustawiania co siedemnaście bitów.
źródło
Java - 247
Używa
BitSet
prostej pętli zamiast ręcznej obsługi / maskowania bajtów. Oczywiście, ponieważ jest to Java, płyta kotła stanowi połowę programu, więc nie jest dokładnie krótka.Nadal nie ostatni! :RE
Wersja bez przewijania:
źródło
Python - 98 bajtów
Przeczytaj od i, napisz do o. Wykorzystuje bibliotekę bitarray https://pypi.python.org/pypi/bitarray
bez golfa
źródło
a[::17]=1
?from bitarray import*
ia=bitarray()
.Kobra - 308
Za każdym razem, gdy wykonuję jedno z tych wyzwań „manipulowania poszczególnymi kawałkami czegoś”, żałuję, że ani Cobra, ani standardowa biblioteka .NET nie miały
binary string => integer
konwertera.źródło
JavaScript (+ HTML5), 282
Prawdopodobnie nie najkrótszy, ale przyjazny dla użytkownika: D
Jest to przeglądarka internetowa, ale wydaje się, że Chrome jest jedynym, który pozwala na to, gdy plik HTML jest plikiem lokalnym (= dostęp za pomocą
file://...
). W przypadku innych przeglądarek musisz umieścić go na serwerze WWW.Plik wyjściowy należy zapisać w domyślnym katalogu pobierania, być może z monitem o plik (w zależności od konfiguracji).
Wersja bez golfa:
źródło
Python 3 - 187 bajtów
Wczytuje
i
i zapisuje doo
.Kod:
Nie golfowany:
źródło
Python 3 - 103 znaków
Przejdź
f
do ścieżki pliku, który chcesz przeczytać, io
ścieżki pliku, w którym chcesz zapisać.źródło