Cramming The Gramming - Twelve Task Tweet


42

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 \nzamiast 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 9034318powinno skutkować 984331(a nie 1033489).

2893984powinien zostać 2348899.

0001000powinien zostać 1000000.

0000020powinien 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<fpowinny ustąpić the quick brown fox.

op<<l>>t<<<lam>>>>>>imi<<<><>>>zer<<<<<<<<<<<<<<<<<<>>><>mpowinien dać llammoptimizer.

e< <c<b<apowinien 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 Tmają 4, 3, 3, 3, 2, 2 linie odpowiednio.

np. GEOBITSma 4 + 3 + 2 = 9 linii część liter FILTHE (dla .E..IT.), więc wyjście powinno być 9.

ABCDEFGHIJKLMNOPQRSTUVWXYZpowinien wyjść 17.

ABCDGJKMNOPQRSUVWXYZpowinien wyjść 0.

FILTHYLINESINLETTERSpowinien 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 .Atam 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
0staje Alex A.,
1staje Alex .A xelA,
2staje Alex Alex A. xelA,
3staje Alex Alex .A xelA xelA,
4staje Alex Alex Alex A. xelA xelA,
5staje 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 5jest wprowadzony, każdy obrót jest prawidłowym wyjściem, ponieważ 5nie można go obrócić do góry.

np. kiedy 3jest 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. 19306128mogą 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, 12jeśli wejście jest

 _ _
| | |
|_ _|

Wyjście, 3jeśli wejście jest

 _ _
| |_|
|_ _|

Wyjście, 6jeśli wejście jest

 _ _
| | |
|_|_|

Wyjście, 9jeś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 Xlitych 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 Xprostopadle lub ukośnie, w tym poza zewnętrzną siatką wejściowąo . Zasadniczo owokół 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.Xpowinno 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 ., Xi 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+1ró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.


7
Będę pod wrażeniem, jeśli komukolwiek uda się rozwiązać wszystko w mniej niż 140 bajtach, nawet przy CJam / Pyth
Fatalize

9
Mam zaszczyt być w .a ni eb ot deronoh ma I ... twoim wyzwaniem. : P
Alex A.,

czy zadania mogą kończyć się błędem po wydrukowaniu wyniku na wydruku?
torcado,

1
Jak powinniśmy liczyć bajty od imports? Powiedzmy, że piszę 5 funkcji, w których 2 potrzebują tego samego modułu (np. import Math), Czy jest to liczone dwukrotnie?
nimi

@nimi Będzie to niestety policzone dwukrotnie. Chociaż możesz napisać jeden program do wszystkich zadań, a zatem potrzebujesz tylko jednego importu.
Calvin's Hobbies

Odpowiedzi:


10

Pyth, 9 zadań w 136 bajtach

Zadanie 1: 7 bajtów

<-F_SQ0

Demonstracja

Sortuj w porządku malejącym ( _SQ), złóż odejmowanie nad nimi ( a-b-c), sprawdź, czy wynik jest ujemny.

Zadanie 2: 14 bajtów

sho.a-sN^T6.pz

Demonstracja

Utwórz wszystkie permutacje łańcuchowe ( .pz), posortuj je ( o) na podstawie wartości bezwzględnej różnicy ( .a-) między liczbą ( sN) a milionem ( ^T6).

Weź pierwszy taki ciąg ( h) i przekonwertuj go na liczbę. ( s).

Zadanie 4: 19 bajtów

s/L+\EPP*3"EFHILT"z

Demonstracja

Replikuj "EFHILT"trzy razy ( *3), usuń trailing LT( PP) i dodaj E( +\E). Odwzoruj każdą literę w danych wejściowych na ich wygląd liczony w tym ciągu. ( /L ... z). Suma. ( s).

Zadanie 5: 16 bajtów

u+"Alex "_GhQ".A

Demonstracja

Zaczynając od "A.", odwróć i dodaj an "Alex "do początku, wpisz + 1 razy.

Zadanie 7: 13 bajtów

}Y-RTsMM./sMz

Przekształć ciąg wejściowy na listę liczb jednocyfrowych ( sMz). Utwórz wszystkie partycje ( ./). Zsumuj każdy element każdej partycji ( sMM). Usuń wszystkie 10s z każdej listy podrzędnej ( -RT). Sprawdź, czy to opróżniło którąś z podlist, sprawdzając, czy pusta lista znajduje się na ogólnej liście ( }Y).

Zadanie 8: 11 bajtów

*3h%%CQC\Ç4

Demonstracja

Modulo magia. Konwertuj na liczbę ( CQ), weź mod 199 ( C\Ç= 199) i weź mod 4. Następnie dodaj 1 i pomnóż przez 3.

Zadanie 9: 21 bajtów

J+Xz"<{[()]}>")_zJ_JJ

Demonstracja

Najpierw generujemy pierwszy wiersz, który składa się z danych wejściowych przetłumaczonych na znaki lustrzane ( Xz"<{[()]}>")), następnie odwrócone dane wejściowe ( + ... _z) i zapisujemy je w J. Następnie wydrukuj tę linię, jej odwrotność i tę linię ponownie ( J_JJ).

Zadanie 11: 22 bajty

+J"SATOR
AREPO
TEN"t_J

Demonstracja

Wystarczy wydrukować ciąg i jego odwrócenie, ale nie powielać centrum N.

Zadanie 12: 13 bajtów

++G*19\3srd\

Demonstracja

Na końcu kodu znajduje się niewidoczny DEL( 7F) znak.

To drukuje

abcdefghijklmnopqrstuvwxyz3333333333333333333 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

który ma sumę znaków 11321. Składa się z Galfabetu, 19 3s i wszystkich drukowalnych znaków ASCII.


28

CJam, 8 9 zadań w 140 bajtach

Po pierwsze, oto skrypt, za pomocą którego możesz posortować swoje rozwiązania i powiedzieć, które pasują do tweeta:

{\s\Se[oSo}:F;
qN/ee{W=,}${)_,_T+:T140>X*_{0:X;}*'=@11+*N+*o\~)YF_,ZFTZFoNo}/

Po prostu wklej 12 rozwiązań do wejścia, po jednym w każdym wierszu. Uruchom tutaj. Pierwsza kolumna to numer zadania, druga jego rozmiar (w znakach - musisz to naprawić samodzielnie, jeśli różni się od liczby bajtów), trzecia to łączny rozmiar. Programy pasujące do tweeta są oddzielone od reszty linią ===.

Dla mnie wynik wygląda następująco:

 1   7   7 q~$~\->
 8  10  17 qDbJ%5/)3*
12  12  29 ',32>_51>'d
 7  13  42 Aq{~-Ace|}/N&
 2  15  57 qe!{~1e6-z}$0=~
 4  19  76 q"FIHEELT"3*H<fe=:+
 5  20  96 ".A"q~){" xelA"+W%}*
 9  22 118 q_{_')>+)}%W%+_W%N@N3$
11  22 140 "SATOR\AREPO\TEN"_W%1>
====================================
 6  25 165 9,:)s3/zq~))3mdg*{W%z}*N*
 3  43 208 LLq{_'=-z({+}{'=>_)$\[{)@+\}{\(@\+}]=&}?}/\
10  45 253 0XW]_m*qN/{'.f+W%z}4*f{\~@m>fm>N*}(\{8f^.e>}/

Oto zadania, które mogę obecnie zmieścić w tweecie.

Zadanie 1 - Czy trzy liczby mogą tworzyć trójkąt? - 8 7 bajtów

Dzięki jimmy23013 za oszczędność 1 bajtu.

q~$~\->

Zestaw testowy.

Dane wejściowe powinny być listą w stylu CJam.

Jest to dość proste: sprawdź, czy największa strona jest krótsza niż suma pozostałych dwóch. Lub równoważnie sprawdź, czy najkrótsza strona jest dłuższa niż różnica dwóch pozostałych:

q~  e# Read and eval input.
$~  e# Sort the values and dump them on the stack.
\-  e# Subtract the middle value from largest.
>   e# Check if the smallest value is greater than that.

Zadanie 2 - Najbliżej miliona - 15 bajtów

qe!{~1e6-z}$0=~

Zestaw testowy.

Prosta brutalna siła:

q        e# Read input.
e!       e# Get all permutations.
{        e# Sort by...
  ~      e#   Evaluate the permutation to get its numerical value X.
  1e6-z  e#   abs(X - 1,000,000)
}$
0=       e# Pick the first element (which minimises the difference)
~        e# Evaluate it to get rid of the leading zeroes.

Zadanie 4 - FILTHE Letters - 21 19 bajtów

Dzięki jimmy23013 za oszczędność 2 bajtów.

q"FIHEELT"3*H<fe=:+

Zestaw testowy.

Chodzi o to, aby utworzyć ciąg znaków, który zawiera każdą z liter FILTHE jeden raz dla każdej z ich ortogonalnych linii. Odbywa się to poprzez zabawną manipulację ciągiem znaków:

q          e# Read the input.
"FIHEELT"  e# Push this string. It first contains the 3-line letters, then the 2-line 
           e# letters, where we include 'E' twice to make it count for 4.
3*         e# Repeat 3 times: "FIHEELTFIHEELTFIHEELT"
H<         e# Truncate to 17 characters: "FIHEELTFIHEELTFIH". This is chosen such that
           e# it discards the third repetition of the 2-line letters.
fe=        e# For each character in the input, count its occurrences in this new string.
:+         e# Sum them all up.

Zadanie 5 - Alex Recursive A. - 27 20 bajtów

".A"q~){" xelA"+W%}*

Zestaw testowy.

Wdrożenie podstacji A.i .Abezpośrednio jest zdecydowanie za drogie. Zamiast tego zauważamy, że musimy obsłużyć tylko jedną sprawę, jeśli za każdym razem odwrócimy ciąg. Ponadto dodawanie Alex(i spacja) za każdym razem jest równoważne rozszerzaniu początkowego. Możemy zapisać kolejny bajt, dodając odwrotność przed odwróceniem łańcucha:

".A"        e# Start with ".A" (the -1st iteration if you like).
q~)         e# Read input, eval, increment (so the following block is run at least once.)
{           e# Repeat this block that many times...
  " xelA"+  e#   Append " xelA".
  W%        e#   Reverse the string.
}*

Zadanie 7 - Dzielenie cyfr na dziesiątki - 18 16 13 bajtów

Aq{~-Ace|}/N&

Zestaw testowy. (Z nawiasami wokół każdego wyjścia.)

Niezupełnie przyjazny dla użytkownika: prawdziwa wartość to pojedynczy znak nowej linii, wartość fałsz to pusty ciąg znaków.

Podstawowa idea jest prosta: dodaj cyfry do bieżącej sumy, którą resetujemy za każdym razem, gdy osiągnie dokładnie 10. Suma musi wynosić zero na końcu danych wejściowych. Na początek okazuje się, że jest on krótszy do sumy przy 10 i odejmuje cyfry, resetując sumę za każdym razem, gdy osiągniemy 0. Jednak musimy upewnić się, że nie zwrócimy czegoś prawdziwego, gdy wszystkie dane wejściowe są zerami. Najkrótszym sposobem, jaki to zrobiłem, było zresetowanie sumy do znaku o kodzie 10 (linefeed), a następnie sprawdzenie na końcu, czy rzeczywiście mamy ten znak na stosie, a nie cyfrę 10. To działa, ponieważ zarówno liczba całkowita zero, jak i znak zero (bajt zerowy) są fałszywe:

A     e# Push a 10, the initial running total.
q{    e# For each character in the input...
  ~-  e#   Evaluate the character to get the digit and subtract it from the total.
  Ac  e#   Push a linefeed character.
  e|  e#   Logical OR of the running total and the linefeed character (using
      e#   short-circuiting).
}/
N&    e# Take the set intersection with the string containing a linefeed character.
      e# If the total is still a number of any character other than the linefeed,
      e# this will yield an empty string. Otherwise, the string will remain unchanged
      e# and the linefeed will be printed.

Zadanie 8 - Zegar kwadratowy - 10 bajtów

qDbJ%5/)3*

Zestaw testowy.

To tylko trochę losowej magii modulo w kodach znaków, która dzieje się z haszowaniem do prawidłowych wartości. Jestem dość przekonany, że możliwe jest coś krótszego, ale jest to najkrótszy czas (programowo) dla tego rodzaju struktury:

q   e# Read the input.
Db  e# Treat the character codes of the string as digits in base 13. This maps the
    e# four inputs to the values: 2023940117708546863
    e#                            2023940113755405840
    e#                            2023940781838850791
    e#                            2023940113755390292
J%  e# Take the result modulo 19. This gives [2, 5, 12, 18], respectively.
5/  e# Divide by 5 (rounding down). [0, 1, 2, 3], respectively.
)   e# Increment. [1, 2, 3, 4], respectively.
3*  e# Multiply by 3. [3, 6, 9, 12], respectively.

Zadanie 9 - Sztuka wspornika - 23 22 bajty

Dzięki Sp3000 za oszczędność 1 bajtu.

q_{_')>+)}%W%+_W%N@N3$

Zestaw testowy.

Dość bezpośredni. Mapowanie między lewym i prawym nawiasami odbywa się przez dodanie 2 (lub 1 w nawiasach):

q_      e# Read input and duplicate.
{       e# Map this block onto each character...
  _')>  e#   Duplicate and check if it's not a parenthesis.
  +     e#   Add the result, leaving parentheses unchanged and incrementing the
        e#   other bracket types.
  )     e#   Increment again.
}%
W%+     e# Reverse and add to the original, giving the middle line.
_W%     e# Duplicate and reverse, giving the first line.
N@      e# Push a linefeed, pull up the middle line.
N3$     e# Push another linefeed, copy the first line.

Zadanie 11 - Plac Sator - 22 bajty

"SATOR
AREPO
TEN"_W%1>

Sprawdź to tutaj.

Prawdopodobnie najbardziej nudne rozwiązanie ze wszystkich. Pcha pierwszą połowę łańcucha, a następnie odwraca ją:

"SATOR
AREPO
TEN"    e# Push everything up to the centre of the square.
_W%     e# Duplicate and reverse.
1>      e# Discard the "N", because we don't want that twice.

Zadanie 12 - Prime Tweet - 13 12 bajtów

',32>_51>'d

Sprawdź to tutaj. (Z wyjściem diagnostycznym dla wyniku.)

Po 'tym jest nadruk <DEL>(0x7F), który SE usuwa. Do wklejania kopii użyj tej wersji:

'~),32>_51>'d

Wydrukowany ciąg to

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~STUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~d

Oznacza to, że zawiera jeden ciąg wszystkich znaków, a następnie kolejny ciąg od Sdo ~, a następnie jeden d. Suma kodów znaków to 12203. Znalazłem to przez trochę prób i błędów.

'~),32>  e# Push a string with all printable characters.
_51>     e# Duplicate this and discard the first 51 of them.
'd       e# Push a "d".

1
q~$~\-> q"FIHEELT"3*H<fe=:+.
jimmy23013,

@ jimmy23013 Ohhhh, ciągle zapominam, że mamy e=te dni.
Martin Ender

Miałem nadzieję, że uzyskam wystarczającą liczbę odpowiedzi, aby coś opublikować, zanim zauważysz, jak zrobić # 5 w 20 znakach.
Peter Taylor

19

Pyth, 9 zadań w 138 bajtach

Zajęło to sporo czasu.

Myślę, że 9 zadań to limit dla Pytha. Dołączenie następnego najkrótszego programu (Plac Sator) daje 160 bajtów. Gra w golfa 20 bajtów jest mało prawdopodobna. Są 2 lub 3 zadania, które są trochę brzydkie i mogą być skrócone, ale ogólnie jestem całkiem zadowolony z rozwiązań.

Zadanie 1 - Czy trzy liczby tworzą trójkąt ?, 8 bajtów

>FsMc2SQ

Wypróbuj online: Regular Input lub Test Suite

Zadanie 2 - Najbliżej miliona, 14 bajtów

ho.a-^T6NsM.pz

Wypróbuj online: Regular Input lub Test Suite

Zadanie 4 - FILTHE Letters, 20 bajtów

s*Vtsmmdd5/Lz"TLIHFE

Wypróbuj online: Regular Input lub Test Suite

Zadanie 5 - Alex Recursive A., 16 bajtów

u+"Alex "_GhQ".A

Wypróbuj online: Regular Input lub Test Suite

Zadanie 6 - Obrót Numpad, 20 bajtów

jeo}zhN.uC_N3_c3jkS9

Wypróbuj online: Regular Input lub Test Suite

Zadanie 7 - Dzielenie cyfr na dziesiątki, 15 bajtów

qTu+WnGTvHG-zZZ

Wypróbuj online: Regular Input lub Test Suite

Zadanie 8 - Zegar kwadratowy, 12 bajtów

*3%%Cz1978 5

Wypróbuj online: Regular Input lub Test Suite

Zadanie 9 - Sztuka nawiasów, 20 bajtów

V3_WtN+z_Xz"[<({})>]

Wypróbuj online: Regular Input lub Test Suite

Zadanie 12 - Prime Tweet, 13 bajtów

++*d44srd\\&

Wypróbuj online: Regularne wprowadzanie


2
Połączenie naszych zgłoszeń daje 133 bajty.
isaacg

9

TI-BASIC, 11 12 zadań w 728 830 bajtach

Zadanie 1 na 7 bajtów

:2max(Ans)`<`sum(Ans

Dane wejściowe to lista w Ans.

Zadanie 2 na 92 110 bajtów

:seq(expr(sub(Ans,I,1)),I,1,7→L₁
:SortA(L₁
:min(7,1+sum(not(L₁
:{L₁(1)+sum(seq(L₁(I))₁₀^(I-8),I,2,7)),L₁(Ans)+sum(seq((I`>`Ans)L₁(I)₁₀^(1-I),I,2,7
:ᴇ6Ans(1+(0`>`min(ΔList(abs(1-Ans

Monity o listę cyfr Dane wejściowe to ciąg znaków Ans.

Zadanie 3 za 119 bajtów

:Input Str1
:"  →Str2
:For(I,1,length(Str1
:sub(Str1,I,1→Str3
:inString("`<>`",Ans
:If Ans:Then
:max(0,min(L,C+2Ans-3→C
:Else
:C+1→C
:L+1→L
:sub(Str2,1,C)+Str3+sub(Str2,C+1,L-C+1→Str2
:End
:End
:sub(Str2,2,L

Monituje o ciąg. Zakłada, że ​​C i L są niezdefiniowane lub 0.

Zadanie 4 w 35 bajtach

:sum(int(2seq(inString("TLIHFE",sub(Ans,I,1))^.4,I,1,length(Ans

Dane wejściowe to ciąg znaków Ans.

Zadanie 5 w 63 bajtach

:Ans/2→C
:sub("A.A",1+2fPart(C),2
:For(I,0,C
 :"Alex "+Ans
 :If I≠C
  :Ans+" xelA
:End
:Ans

Dane wejściowe to liczba w Ans.

Zadanie 6 w 66 bajtach

: 𝑖 ^ ((Ans <7) (Ans-3 (Ans >3: For (Y, ⁻1,1: Disp sum (seq ((5-real (AnsX + Ans𝑖Y)) -3imag (AnsX + Ans𝑖Y)) ₁₀ ^ ( X + 1), X, ⁻1,1: End

Dane wejściowe to liczba w Ans.

Zadanie 7 w 36 43 bajtach

:Input <strike>L₁</strike>Str1
:.5
:For(I,1,<strike>dim(L₁</strike>length(Str1
 :Ans+<strike>L₁(I</strike>expr(sub(Str1,I,1
 :If 10=int(Ans
  :0
:End
:not(Ans

Monituje o łańcuch cyfr .

Zadanie 8 w 29 bajtach

:18fPart(sum(seq(I(sub(Ans,I,1)=" ")/6,I,1,15

Dane wejściowe to ciąg znaków Ans.

Zadanie 9 w 83 bajtach

:For(I,1,16,2
 :If I<8
  :Ans+sub("`)}]>`",inString("`({[<`",sub(Ans,4,1)),1
 :sub(Ans,I,1)+Ans
:End
:For(I,⁻1,1
 :Disp sub(Ans,9-8abs(I),8
:End

Dane wejściowe to ciąg znaków Ans.

Zadanie 10 w 159 bajtach

:1→X
:Input Str1
:2+length(Str1→L
:"X
:While 2+L`>`length(Ans
 :Ans+Ans→Str2
:End
:Ans→Str3
:While 1
 :"XX
 :Ans+Str1+Ans→Str1
 :For(I,1,L
  :Ans+sub("0X.",2expr(sub(Str2,I+1,1))+not(expr(sub(Ans,I,3)+sub(Str2,I,3)+sub(Str3,I,3))),1
 :End
 :Disp sub(Ans,L+3,L
 :Str2→Str3
 :Str1→Str2
 :Input Str1
:End

Używa X0.zamiast .Xoodpowiednio (przepraszam, nic nie pasuje). Monity o wprowadzenie linii po linii. Musisz wprowadzić dwa wiersze Xs, aby zobaczyć wszystkie dane wyjściowe, a następnie 2nd + Quit, aby wyjść.

Zadanie 11 w 39 bajtach

:Disp "SATOR
:Disp "AREPO
:Disp "TENET
:Disp "OPERA
:Disp "ROTAS

Zadanie 12 w 77 bajtach

: Ans + "tvm_I% LinReg (ax + b) DS <(getKeyconj (1-PropZTest (dayOfWk (Manual-Fit C / YANOVA (* row) (HorizRegEQUnarchive [J]! # $ &'', .234567890:; = >? @GBQX \^) _`qw {|} ~

Lub jako hex:

72702ABB21FFDBADBB25BB3EEF06EF16
6331BB5917746201BB695C092DBBD2BB
D3BBD4AEAE2B3A323334353637383930
3EBBD66A6CAFBBD147425158BBD7F0BB
D9BBD5BBC1BBC708BBD809BBCF

Wejście jest ciągiem zawierającym "w Ans.

W TI-BASIC jest to faktycznie niemożliwe. Możliwe jest szesnastkowe edytowanie podstawowego programu i użycie pewnych 2-bajtowych tokenów, aby uzyskać wszystkie drukowane znaki ascii w kodzie źródłowym, ale nie o to chodzi. Problem polega na tym, że nie ma sposobu na zapisanie "znaku w łańcuchu w czystym języku podstawowym na czystym kalkulatorze bez wkładu programu (to samo dotyczy znaku, ale nie jest to drukowane ascii). Możliwe jest jednak wprowadzenie "równania spoza podstawowego, po czym można użyć podstawowego do konwersji równania na ciąg znaków i wyświetlenia tego ciągu. Poza tym na ekranie jest wystarczająca ilość miejsca dla 128 znaków jednocześnie.


7

Perl, 4 zadania w 117 bajtach

Spróbujmy prawdziwego języka;)

Jeszcze się nie poddałem, może nawet uda się wycisnąć 5 zadań w 140 bajtach, choć mało prawdopodobne!

* Zadanie 1: 30 + 1 = 31 bajtów

@F=sort@F;say$F[0]+$F[1]>$F[2]

Stosowanie: perl -aM5.010 entry.pl input.txt

* Zadanie 4: 32 + 1 = 33 bajty

y/ELTFHI/4223/;s/./+$&/g;$_=eval

Stosowanie: perl -p entry.pl input.txt

Zadanie 5: 54 bajty

say"Alex "x($_/2+1).qw(A. .A)[$_%2]." xelA"x(--$_/2+1)

-2b dzięki Dom Hastings

Stosowanie: echo 4 | perl -M5.010 entry.pl

Zadanie 7: 37 + 2 = 39 bajtów

($i+=$_)>10&&exit,$i%=10for@F;$_=!$i;

Stosowanie: perl -pF entry.pl input.txt

* Zadanie 8: 21 + 2 = 23 bajty

$_=y/|_ 
/14/dr/64%14

To trochę trudne. Rozpoczęte przez zastąpienie każdego |z xa każda _z yprzestrzeni następnie zastąpienie produkować unikalny ciąg dwie cyfry dla każdej sieci ( yyxxyxxyyx, yyxxyxxyyxyyxxxxyxyx, yyxxxxyxyxyyxyxxxyyx, yyxyxxxyyxyyxxxxyyx, yyxxxxyyx). Następnie napisałem program do brutalnego wykorzystywania wartości xi yoperacji matematycznych, które można wykonać na liczbach wytworzonych po podstawieniu, xi ydają wynik 3,6,9,12 dla każdej liczby. W końcu x=1, y=4a operacja była magia /64%14.

Stosowanie: perl -0p entry.pl input.txt

Zadanie 11: 34 bajty

say"SATOR
AREPO
TENET
OPERA
ROTAS"

Stosowanie: perl -M5.010 entry.pl

* Zadanie 12: 30 bajtów

say d.pack"C*",32..126,83..126

Stosowanie: perl -M5.010 entry.pl

Oświadczenie: -M5.010 jest uważane za „bezpłatne”


Czy Ruby jest mniej realne niż Perl? ;)
Martin Ender

9
Kiedy widzę odpowiedzi (które wyglądają jak hałas), nie kwalifikowałbym Perla jako prawdziwego języka;)
Fatalize

1
Dobra robota! Myślę, że możesz zaoszczędzić 2 bajty qw(A. .A)[$_%2]zamiast ("A.",".A")[$_%2]w zadaniu 5, i jestem pewien, że możesz uzyskać kolejne kilka bajtów ...
Dom Hastings

6

Ruby, 4 zadania w 280 bajtach (niekonkurencyjne)

To tylko próba, będę wykonywać zadania później (i mam nadzieję, że te już istniejące).

Zadanie 1

a=gets.split.map &:to_i;p a.all?{|e|e<a.inject(:+)-e}

Zadanie 2

p gets.chars.permutation.map{|a|a.join.to_i}.min_by{|x|(x-1e6).abs}

Zadanie 4

n,b='EFHILT',0;gets.chars.map{|c|b+=n[c]==p ? 0:[4,3,3,3,2,2][n.index c]};p b

Zadanie 5

a='Alex A.';gets.to_i.times{|i|i%2<1 ? a.sub!('A.','.A xelA'):a.sub!('.A',a)};$><<a

6

TI-BASIC, 12 zadań w 994 bajtach

Pobierz wszystko jako plik grupy TI ( .8xg )

(Dodano tagi spoilera na żądanie).

Zadanie 1 - Czy trzy liczby mogą tworzyć trójkąt? - 7 bajtów

Pobierz jako plik programu TI-83 + ( .8xp )

:2max(Ans)<sum(Ans

Zadanie 2 - Najbliżej miliona - 114 bajtów

Pobierz jako plik programu TI-83 + ( .8xp )

:int(10fPart(Ans\10^(\-cumSum(binomcdf(6,0→X
:"sum(\L\X\10^(\cumSum(not(binompdf(6,0→\Y1\
:SortD(\L\X
:\Y1\→X
:sum(not(\L\X
:If Ans
:Then
:If max(\L\X=1
:X+\E\6-\10^(\6-Ans→X
:SortA(\L\X
:augment(ΔList(cumSum(\L\X)),{0→X
:End
:{X,\Y1\
:Ans(1+(0>min(ΔList(abs(\E\6-Ans

Zadanie 3 - Prosty symulator klawiatury - 131 127 bajtów

Pobierz jako plik programu TI-83 + ( .8xp )

:Input Str1
:DelVar X1→Y
:"..→Str2
:For(Z,1,length(Str1
:sub(Str1,Z,1→Str3
:(Ans=">")-(Ans="<
:If Ans
:Then
:max(1,min(Y+Ans,X+1→Y
:Else
:sub(Str2,1,Y)+Str3+sub(Str2,Y+1,X-Y+2→Str2
:X+1→X
:Y+1→Y
:End
:End
:sub(Str2,2,X

Zadanie 4 - FILTHE Letters - 34 bajty

Pobierz jako plik programu TI-83 + ( .8xp )

:sum(int(\³√(\12seq(inString("TLIHFE",sub(Ans,X,1)),X,1,length(Ans

Zadanie 5 - Alex Recursive A. - 107 bajtów

Pobierz jako plik programu TI-83 + ( .8xp )

:Input X
:".A..
:For(X,0,X
:Ans→Str1
:5int(.5X+.5
:sub(Str1,1,Ans+1)+sub(".A xelAlex A.",6gcd(X,2)-5,7)+sub(Str1,Ans+4,5X-Ans+1
:End
:sub(Ans,2,5X+2

Zadanie 6 - Obrót Numpad - 86 bajtów

Pobierz jako plik programu TI-83 + ( .8xp )

:.3Ans+2(Ans=6→X
:[[9,6,3][8,5,2][7,4,1
:For(X,0,X
:rowSwap(Ans\^T\),1,3
:End
:Ans
:*row+(10,*row+(10,Ans\^T\,1,2),2,3
:For(X,1,3
:Disp Ans(3,X
:End

Zadanie 7 - Dzielenie cyfr na dziesiątki - 77 bajtów

Pobierz jako plik programu TI-83 + ( .8xp )

:Ans+"0
:seq(expr(sub(Ans,X,1)),X,1,length(Ans
:augment(Ans,{10not(not(max(Ans→X
:1→X
:Repeat Ans≥dim(\L\X
:Ans+1
:If 10=sum(\L\X,X,Ans
:Ans+1→X
:End
:X=Ans

Zadanie 8 - Zegar kwadratowy - 35 bajtów

Pobierz jako plik programu TI-83 + ( .8xp )

:12-3max(seq(X(sub(Ans,6gcd(X,2)+X,1)≠" "),X,1,3

Zadanie 9 - Sztuka wspornika - 86 bajtów

Pobierz jako plik programu TI-83 + ( .8xp )

:Input Str1
:For(X,1,4
:For(Y,0,1
:abs(X-9not(Y→Z
:"()[]{}<>
:sub(Ans,inString(Ans,sub(Str1,X,1))+Y,1
:Output(1,Z,Ans
:Output(2,9-Z,Ans
:Output(3,Z,Ans
:End
:End

Zadanie 10 - Zminimalizuj - 218 bajtów

Pobierz jako plik programu TI-83 + ( .8xp )

:".
:For(A,0,\E\9
:Input Str1
:Ans+Str1→Str2
:If Str1≠".
:End
:length(Ans→X
:round(A\^-1\(Ans-2→B
:seq(expr(sub(Str2,A,1)),A,2,X-1→B
:πAns→C
:"augment(Ans,augment(Ans,\L\B))+augment(Ans,augment(\L\C,Ans))+augment(\L\B,augment(Ans,Ans→X
:seq(0,A,1,B
:\L\X→A
:For(C,0,A+1
:seq(\L\A(A+BC),A,1,B→C
:int(Ans→B
:{0
:1+not(\L\X)+not(fPart(\L\X→B
:".
:For(X,1,B+2
:Ans+sub("120",\L\B(X),1
:End
:Disp sub(Ans,2,B+2
:End

Wprowadzono następujące podstawienia: 0= ., 1= X, 2=o

Aby wprowadzić dane (po uruchomieniu programu), wpisz jeden wiersz na raz, naciskając klawisz Enter przy każdym podziale wiersza, aż do wypisania ostatniego wiersza. Następnie naciśnij klawisz Enter, wpisz jedną kropkę, a następnie naciśnij klawisz Enter ponownie, aby przesłać cały ciąg.

Zadanie 11 - Plac Sator - 38 bajtów

Pobierz jako plik programu TI-83 + ( .8xp )

:Disp "SATOR","AREPO","TENET","OPERA
:"ROTAS

Zadanie 12 - Prime Tweet - 151 bajtów

Pobierz jako plik programu TI-83 + ( .8xp )

:Ans+"!#$%&'()*+,-./01234567889:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
:For(X,1,45
:Ans+" 
:End
:Ans

Anspowinien zawierać podwójny cytat, wykonywany przez wpisanie jednego bezpośrednio w \Y1\edytorze równań i uruchamianie Equ►String(\Y1\,Str1:Str1z ekranu głównego.

Długość wyjściowa wynosi 140. 8 pojawia się dwa razy, a razem z innymi znakami ASCII występuje 45 spacji, z których każdy pojawia się raz. Wynosi to (33 + 34 + ... + 126) + 56 + 32 × 45 = 8969, liczba pierwsza Sophie Germain.


Poprosiłem OP, i można liczyć token podobny sin(jak wyświetlanie s, i, n, i (w zadaniu 12
lirtosiast

0

Python 3, 1 zadanie, 268 bajtów, niekonkurencyjny

Próbowałem Zadanie nr 2 w Python 3.5.2. Jestem nowy w golfie i Pythonie

import itertools
def f2(l):
    n=1000000
    l=list(itertools.permutations(l))
    j = len(l)
    m=[None]*j
    while j>0:
        j -= 1
        m[j]= int(''.join(str(i) for i in l[j]))
        l[j]=abs(n-m[j])
    l.sort()
    k=n-l[0]
    return(n+l[0],k)[k in m]

Witamy w PPCG. W Pythonie 3 możesz umieścić niektóre swoje wypowiedzi w jednym wierszu, na przykład możesz napisać x=10;print(x)To pomogłoby niektórym z wciętych sekcji.
George
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.