Twój szef właśnie wysłał Ci e-mailem listę 12 zadań programistycznych, które musi wykonać jak najszybciej. Zadania są dość proste, ale twój szef, będący młodym potentatem oprogramowania, którego karmią serwisy społecznościowe, nalega, aby twoje rozwiązania były w stanie zmieścić się w jednym tweecie z Twittera .
Oznacza to, że masz tylko 140 bajtów kodu do rozwiązania wszystkich zadań, średnio 11,67 bajtów na zadanie. (Tak, Twitter liczy znaki, ale twój szef specjalnie powiedział bajty.)
Zdajesz sobie sprawę, że nie ma sposobu na rozwiązanie wszystkich 12 zadań w 140 bajtach, ale podejrzewasz, że twój szef nie przetestuje wszystkich twoich rozwiązań. Więc przystępujesz do rozwiązywania jak największej liczby zadań, całkowicie pomijając niektóre z nich. Twoje nastawienie jest takie, że nie ma znaczenia, który podzbiór zadań wykonasz, liczy się tylko to, aby ten podzbiór był jak największy .
Ile zadań możesz wykonać?
Wyzwanie
Napisz do 12 różnych programów, z których każdy dokładnie rozwiązuje jedno z 12 zadań wymienionych poniżej. Łączna suma długości tych programów nie może przekraczać 140 bajtów
Alternatywnie możesz napisać pojedynczy program o długości nieprzekraczającej 140 bajtów, który przyjmuje liczbę całkowitą od 1 do 12 i (najlepiej) przystępuje do rozwiązania odpowiedniego zadania, w razie potrzeby przyjmując więcej danych wejściowych. Nie wszystkie zadania muszą działać, ale tylko te, które liczą się do twojego wyniku. Zadania, które nie działają, mogą zawierać błędy lub wykonywać inne czynności.
W obu przypadkach „program” może w rzeczywistości być funkcją, która przyjmuje dane wejściowe jako argumenty lub monituje je i wypisuje lub zwraca dane wyjściowe. Na przykład możesz napisać 140-bajtową funkcję, która wygląda f(taskNumber, taskInput)
, lub możesz napisać osobne fragmenty kodu dla każdego zadania, niektóre jako funkcje, a niektóre jako pełnoprawne programy.
Inne szczegóły:
Cały kod musi być napisany w tym samym języku.
Jak zwykle, dane wejściowe powinny pochodzić z stdin, wiersza poleceń, argumentu funkcji lub z innego, co jest zwykle używane w twoim języku. Dane wyjściowe są drukowane na standardowe wyjście lub najbliższą alternatywę dla twojego języka lub zwracane odpowiednim typem.
Rozsądna ilość formatowania wejściowego jest w porządku; np. cudzysłowy wokół ciągów lub
\n
zamiast rzeczywistych znaków nowej linii.Dane wyjściowe powinny być dokładnie takie, jak są wymagane, bez zbędnego formatowania ani białych znaków. Wyjątkiem jest opcjonalny pojedynczy znak nowej linii.
Kod działający tylko w środowisku REPL nie stanowi programu ani funkcji.
Nie możesz pisać wielu programów, które rozwiązują wiele zadań. Jest to albo jeden program, który (idealnie) rozwiązuje wszystkie zadania, albo (idealnie) 12 programów, z których każdy rozwiązuje jedno zadanie.
Publikowanie rozwiązania zadania, które nie zostało napisane lub tylko nieznacznie zmodyfikowane, jest niedozwolone bez podania źródła oryginalnego autora, a najlepiej uzyskania pozwolenia. Jeśli twoja odpowiedź składa się przede wszystkim z najkrótszych rozwiązań spośród wszystkich pozostałych odpowiedzi, powinna to być wiki społeczności.
Punktacja
Zgłoszenie, które zakończy większość zadań, jest zwycięzcą. Jeśli dwa zgłoszenia zostaną powiązane, wygrywa ten, który ma najmniej bajtów. Jeśli liczba bajtów jest powiązana, wygrywa wcześniejsze przesłanie. Odpowiedzi wiki społeczności nie mogą wygrać.
Powiedz nam, jakie zadania wykonałeś, a nie tylko ile!
Handicap dla osób niebędących golfistami:
Prawdopodobnie w tym wyzwaniu dominują języki gry w golfa . Wiele języków może mieć problemy z rozwiązaniem nawet jednego lub dwóch zadań w obrębie 140 bajtów. Dlatego możesz przesłać odpowiedź niekonkurencyjną, jeżeli limit wynosi 3 tweety, tj. 420 bajtów. Wszystkie pozostałe zasady pozostają takie same.
Zadania
Zadanie 1 - Czy trzy liczby mogą tworzyć trójkąt?
Weź trzy dodatnie liczby całkowite i wyślij wartość prawdy / fałszu wskazującą, czy trzy linie o tych długościach mogą tworzyć trójkąt . Nie możesz zakładać, że liczby są w określonej kolejności.
Prawdziwe przykłady (jeden na linię):
20 82 63
1 1 1
2 3 4
1 2 2
Przykłady Falsy:
6 4 10
171 5 4
1 1 2
1 2 3
Zadanie 2 - najbliżej miliona
Biorąc pod uwagę ciąg dokładnie 7 cyfr dziesiętnych (0–9), zmień ich kolejność, aby uzyskać liczbę możliwie najbliższą milionowi. To znaczy abs(1000000 - rearrangedNumber)
należy je zminimalizować.
Wydrukuj lub zwróć wynikową liczbę jako liczbę całkowitą, a nie ciąg znaków (więc nie powinno być początkowych zer, chyba że jest to norma dla twojego języka).
np. wejście 9034318
powinno skutkować 984331
(a nie 1033489
).
2893984
powinien zostać 2348899
.
0001000
powinien zostać 1000000
.
0000020
powinien zostać 200000
.
Zadanie 3 - Prosty symulator klawiatury
Weź ciąg małych liter (az), spacji i nawiasów kątowych <>
. Odczytywany od lewej do prawej, ten ciąg reprezentuje klawisze, które były naciskane na standardowej klawiaturze, gdy otwarty był początkowo pusty edytor tekstu. Litery i spacja odpowiadają ich zwykłym klawiszom, ale <
odpowiadają lewemu klawiszowi strzałki i >
prawemu klawiszowi strzałki, które po naciśnięciu przesuwają kursor .
<
przesuwa kursor o jeden znak w lewo lub nic nie robi, jeśli kursor znajduje się na początku ciągu.
>
przesuwa kursor o jeden znak w prawo lub nic nie robi, jeśli kursor znajduje się na końcu ciągu.
Wypisuje ciąg znaków, który byłby w edytorze tekstu po naciśnięciu wszystkich klawiszy ciągu wejściowego. Wyprowadzanie kodów specjalnych w celu przesunięcia kursora jest niedozwolone.
Na wejściu zawsze będzie co najmniej jeden znak bez strzałki.
np. dane wejściowe ui<<q>>ck <<<<<<the<<<<>>> >>>>>>>>brown x<o<f
powinny ustąpić the quick brown fox
.
op<<l>>t<<<lam>>>>>>imi<<<><>>>zer<<<<<<<<<<<<<<<<<<>>><>m
powinien dać llammoptimizer
.
e< <c<b<a
powinien dać abc e
.
<<<>><><<><toast>><<>><><<>><
powinien dać toast
.
Zadanie 4 - FILTHE Letters
W wielu czcionek, 6 z wielkich liter alfabetu angielskiego składają się wyłącznie z linii poziomych i pionowych: E
, F
, H
, I
, L
, i T
. Nazwiemy je literami FILTHE.
Weź ciąg wielkich liter (AZ) i policz liczbę wierszy w literach FILTHE, wyprowadzając wynikową liczbę całkowitą.
E
, F
, H
, I
, L
, I T
mają 4, 3, 3, 3, 2, 2 linie odpowiednio.
np. GEOBITS
ma 4 + 3 + 2 = 9 linii część liter FILTHE (dla .E..IT.
), więc wyjście powinno być 9
.
ABCDEFGHIJKLMNOPQRSTUVWXYZ
powinien wyjść 17
.
ABCDGJKMNOPQRSUVWXYZ
powinien wyjść 0
.
FILTHYLINESINLETTERS
powinien wyjść 39
.
Zadanie 5 - Alex Recursive A.
Nasz moderator Alex A. ma dość tajemniczy inicjał „A”.
Teraz nie jestem pewien, ale myślę, że A.
oznacza .A xelA
. Jestem też całkiem pewien, że .A
tam jest podstępnie Alex A.
.
Tak więc, aby uzyskać pełne imię Alexa, musimy rozwinąć A.
„i .A
”:
Alex A. -> Alex [A.] -> Alex [.A xelA] -> Alex .A xelA -> Alex [.A] xelA -> Alex [Alex A.] xelA -> Alex Alex A. xelA -> etc.
Niech twój program przyjmie nieujemną liczbę całkowitą i rozwinie ją Alex A.
wiele razy, generując wynikowy ciąg.
Więc
0
staje Alex A.
,
1
staje Alex .A xelA
,
2
staje Alex Alex A. xelA
,
3
staje Alex Alex .A xelA xelA
,
4
staje Alex Alex Alex A. xelA xelA
,
5
staje się Alex Alex Alex .A xelA xelA xelA
,
i tak dalej.
(Zrobiłem to, ponieważ czułem się źle, że nieumyślnie zostawiłem Alexa poza moim wyzwaniem modowym .
Zadanie 6 - Obrót klawiaturą numeryczną
Weź liczbę całkowitą od 1 do 9 włącznie (możesz wziąć to jako ciąg). Wyjmij kwadrat 3 × 3 cyfr
789
456
123
obrócone o 90 °, tak aby cyfra wejściowa pojawiła się w dowolnym miejscu w górnym rzędzie. Kiedy 5
jest wprowadzony, każdy obrót jest prawidłowym wyjściem, ponieważ 5
nie można go obrócić do góry.
np. kiedy 3
jest wprowadzane, oba
963
852
741
i
321
654
987
są prawidłowymi danymi wyjściowymi.
Dla wejścia 4
, tylko
147
258
369
jest prawidłowym wyjściem.
Zadanie 7 - Dzielenie cyfr na dziesiątki
Weź niepusty ciąg cyfr dziesiętnych (0–9) i wyślij prawdziwą wartość, jeśli można ją podzielić na ciągłe sekcje, w których wszystkie cyfry w każdej sekcji sumują się dokładnie do 10. Jeśli nie jest to możliwe, wypisz wartość fałszowania.
np. 19306128
mogą być podzielone jak 19|3061|28
, wszystkie sekcje sumujące się do 10 (1 + 9, 3 + 0 + 6 + 1, 2 + 8), więc należy podać prawdziwą wartość.
Prawdziwe przykłady (jeden na linię):
19306128
073
730
0028115111043021333109010
2222255
Przykłady Falsy:
6810410
9218
12341
5222225
000
Zadanie 8 - Zegar kwadratowy
Weź sznurek wielowierszowy o stałej wielkości.
Wyjście, 12
jeśli wejście jest
_ _
| | |
|_ _|
Wyjście, 3
jeśli wejście jest
_ _
| |_|
|_ _|
Wyjście, 6
jeśli wejście jest
_ _
| | |
|_|_|
Wyjście, 9
jeśli wejście jest
_ _
|_| |
|_ _|
Nie ma innych przypadków wprowadzania danych.
Zadanie 9 - Art. Wspornik
Weź w ciąg 4 bajtów zawierających po jednym z każdego z lewej nawiasach (
, [
, {
, i <
w dowolnej kolejności.
Dodaj odpowiednie prawe nawiasy, aby łańcuch miał 8 bajtów i miał pionową linię symetrii. np . [<({
staje się [<({})>]
.
Następnie odwróć każdy nawias w tym ciągu. np . [<({})>]
staje się ]>)}{(<[
.
Wypisz oryginalny 8-bajtowy ciąg nawiasów z odwróconą wersją powyżej i poniżej w osobnych wierszach.
Tak więc końcowy wynik dla danych wejściowych [<({
byłby
]>)}{(<[
[<({})>]
]>)}{(<[
Podobnie wyjście <({[
powinno być
>)}][{(<
<({[]})>
>)}][{(<
Dane wejściowe (<<[
są nieprawidłowe, ponieważ {
brakuje i istnieje dodatkowe <
.
Zadanie 10 - Zepsuć
Weź prostokątną siatkę tekstu (co najmniej 1 × 1) złożoną z .
pustych przestrzeni i X
litych kafelków. Komórki poza granicami siatki są uważane za puste. Możesz założyć, że każdy z 4 rzędów krawędzi siatki i kolumny będą zawierać co najmniej jeden X
.
np. poprawnym wejściem może być:
XXX.....X.....
X..X...X.X....
XXX.....X....X
Wyjście kolejnej prostokątnej siatki tekstu, w którym staje się każda pusta komórka sąsiadująca X
prostopadle lub ukośnie, w tym poza zewnętrzną siatką wejściowąo
. Zasadniczo o
wokół wszystkich porcji pełnych płytek rysowany jest obwódek . Nowa siatka nie powinna być większa niż powinna.
Tak więc wynikiem powyższego przykładu byłoby:
ooooo...ooo.....
oXXXoo.ooXoo....
oXooXo.oXoXo.ooo
oXXXoo.ooXoo.oXo
ooooo...ooo..ooo
Podobnie, wyjście danych wejściowych XXX..X.X
powinno być
oooooooooo
oXXXooXoXo
oooooooooo
i produkcja
oooooooooo.
oXXXooXoXo.
oooooooooo.
byłoby niepoprawne, ponieważ pusta skrajna prawa kolumna nie jest potrzebna.
Można używać 3 różne druku ASCII znaków w miejsce .
, X
i o
.
Zadanie 11 - Plac Sator
Wyjście Sator Kwadrat :
SATOR
AREPO
TENET
OPERA
ROTAS
Każda z liter może być mała lub wielka, więc
SatOR
aRePO
tenet
OPERa
RoTaS
jest również prawidłowym wyjściem.
Brak danych wejściowych.
Zadanie 12 - Prime Tweet
Nie przyjmuj danych wejściowych, ale wypisz 140-bajtowy ciąg znaków ASCII, który zawiera co najmniej jeden z 95 drukowanych znaków ASCII. (Więc 45 znaków będzie duplikatami).
Suma kodów znaków wszystkich 140 bajtów w tym ciągu musi być liczbą pierwszą Sophie Germain , tj. Liczbą pierwszą p
, która 2p+1
również jest liczbą pierwszą. Kod znaków dla spacji to 32, 33 dla !
, 34 dla "
i tak dalej do 126 dla ~
. Suma może być obliczona w Pythonie jako sum(map(ord, myString))
.
Przykładowy wynik to:
! "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~STUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~d
Suma kodów znaków to liczba pierwsza 12203, której odpowiadająca bezpieczna liczba pierwsza to 24407.
import
s? Powiedzmy, że piszę 5 funkcji, w których 2 potrzebują tego samego modułu (np. import Math
), Czy jest to liczone dwukrotnie?