Zakończ zakładki kontra wojna kosmiczna
Dyskutowano więc o tym, czy do wcięcia / formatowania kodu należy używać tabulatorów lub spacji. Czy możesz pomóc uniwersytetowi rozwiązać spór, przechodząc do niezwykle szalonej, unikalnej metody formatowania.
Twoim zadaniem jest napisanie pełnego programu lub funkcji, która rozłoży wszystkie tabulatory na cztery spacje. A następnie zamienia ciąg n wiodących spacji na „/ (n - dwie gwiazdki tutaj) /”. Otrzymasz dane wejściowe w wielu wierszach w dowolnym rozsądnym formacie (tablica pojedynczych ciągów dla każdej nowej linii. Tablica kolumnowa itp.)
Przykładowe dane bezwstydnie skradzione . Zwróć uwagę, że ponieważ tabulatory są automatycznie rozszerzane do czterech spacji w SE, reprezentuję je jako znak „^”, ale musisz również obsługiwać tabulatory (punkt kodowy 0x09). Wszystkie znaki „^” reprezentują tabelę.
Calculate the value 256 and test if it's zero
If the interpreter errors on overflow this is where it'll happen
++++++++[>++++++++<-]>[<++++>-]
+<[>-<
Not zero so multiply by 256 again to get 65536
[>++++<-]>[<++++++++>-]<[>++++++++<-]
+>[>
# Print "32"
++++++++++[>+++++<-]>+.-.[-]<
<[-]<->] <[>>
# Print "16"
+++++++[>+++++++<-]>.+++++.[-]<
<<-]] >[>
# Print "8"
++++++++[>+++++++<-]>.[-]<
<-]<
# Print " bit cells\n"
+++++++++++[>+++>+++++++++>+++++++++>+<<<<-]>-.>-.+++++++.+++++++++++.<.
>>.++.+++++++..<-.>>-
Clean up used cells.
[[-]<]l
^this is preceded by a tab
^^two tabs
^^^three tabs etcetera!
Próbka wyjściowa
Calculate the value 256 and test if it's zero
If the interpreter errors on overflow this is where it'll happen
++++++++[>++++++++<-]>[<++++>-]
+<[>-<
/**/Not zero so multiply by 256 again to get 65536
/**/[>++++<-]>[<++++++++>-]<[>++++++++<-]
/**/+>[>
/******/# Print "32"
/******/++++++++++[>+++++<-]>+.-.[-]<
/**/<[-]<->] <[>>
/******/# Print "16"
/******/+++++++[>+++++++<-]>.+++++.[-]<
<<-]] >[>
/**/# Print "8"
/**/++++++++[>+++++++<-]>.[-]<
<-]<
# Print " bit cells\n"
+++++++++++[>+++>+++++++++>+++++++++>+<<<<-]>-.>-.+++++++.+++++++++++.<.
>>.++.+++++++..<-.>>-
Clean up used cells.
[[-]<]l
/**/this is preceded by a tab
/******/two tabs
/**********/three tabs etcetera!
Ponieważ uniwersytet potrzebuje miejsca do pobrania zarówno Vima, jak i Emacsa, masz bardzo mało miejsca na swój kod. Dlatego jest to golf golfowy i wygrywa najkrótszy kod. Możesz założyć, że dane wejściowe są dobrze uformowane, a linie z mniej niż czterema spacjami (po zastąpieniu tabulatorami) mogą powodować niezdefiniowane zachowanie.
Zrzeczenie się
Ta „doskonała” strategia formatowania powstała dzięki uprzejmości Geobits i została odtworzona za jego zgodą. Podczas tworzenia tego wyzwania żaden programista nie został poszkodowany.
/*
, czy też można to uznać za „dobrze sformułowany wkład”? Plik źródłowy C ++ byłby lepszym testem, ponieważ jego komentarz wielowierszowy /* */
prawdopodobnie złamałby niektóre odpowiedzi, które zamieniają pierwsze i ostatnie z wiodących spacji na /
, a następnie kontynuują wypełnianie spacjami *
.
/* */
kod C ++, ale tym razem na początku wiersza. Zgodnie ze specyfikacją należy go pozostawić bez zmian. Tutaj pułapka jest, i już zauważyła błędne odpowiedzi, że wyrażenie regularne, takie jak powiedzmy /\** /
użyte do wypełnienia tych spacji między // gwiazdkami, zamieniłoby linię /***/
. Widziałem także tę konwersję /*//*/
. Zakładam, że oba są nieprawidłowe.