Il tuo capo ti ha appena inviato per e-mail un elenco di 12 attività di programmazione che deve svolgere il prima possibile. I compiti sono abbastanza semplici ma il tuo capo, essendo un giovane magnate del software allattato dai social network, insiste affinché le tue soluzioni possano adattarsi a un singolo tweet di Twitter .
Ciò significa che hai solo 140 byte di codice per risolvere tutte le attività, una media di 11,67 byte per attività. (Sì, Twitter conta i personaggi ma il tuo capo ha detto specificamente i byte.)
Ti rendi conto che non c'è modo di risolvere tutti i 12 compiti in 140 byte, ma sospetti che il tuo capo non testerà effettivamente tutte le tue soluzioni. Quindi si procede a risolvere quante più attività possibile, saltandone completamente alcune. La tua mentalità è che non importa quale sottoinsieme delle attività che completi, importa solo che il sottoinsieme è il più grande possibile .
Quante attività puoi completare?
Sfida
Scrivi fino a 12 programmi diversi, ognuno dei quali risolve accuratamente una delle 12 attività elencate di seguito. La somma cumulativa delle lunghezze di questi programmi non può superare 140 byte
In alternativa, è possibile scrivere un singolo programma lungo non più di 140 byte che impiega un numero intero compreso tra 1 e 12 e (idealmente) procede per risolvere l'attività corrispondente, prendendo più input se necessario. Non tutte le attività devono funzionare, ma solo quelle che contano ai fini del punteggio. Le attività che non funzionano possono eseguire errori o fare qualsiasi altra cosa.
In entrambi i casi, un "programma" può in effetti essere una funzione che accetta l'input come argomento o lo richiede e stampa o restituisce l'output. Quindi, ad esempio, potresti scrivere una funzione di 140 byte che assomigli f(taskNumber, taskInput)
o potresti scrivere frammenti di codice separati per ogni attività, alcuni come funzioni e altri come programmi completi.
Altri dettagli:
Tutto il codice deve essere scritto nella stessa lingua.
Come al solito, l'input dovrebbe provenire da stdin, dalla riga di comando, da un argomento di funzione o da qualsiasi altra cosa consueta per la tua lingua. L'output viene stampato su stdout o l'alternativa più vicina alla tua lingua o restituito in un tipo appropriato.
Una ragionevole quantità di formattazione di input va bene; ad es. virgolette attorno alle stringhe o
\n
anziché alle nuove righe effettive.L'output dovrebbe essere esattamente ciò che viene richiesto senza formattazione o spazi bianchi estranei. L'eccezione è una nuova riga finale singola facoltativa.
Il codice che viene eseguito solo in un ambiente REPL non costituisce un programma o una funzione.
Non è possibile scrivere più programmi che risolvono più attività. O è un programma che (idealmente) risolve tutti i compiti o (idealmente) 12 programmi che risolvono ciascuno un singolo compito.
Non è consentita la pubblicazione di una soluzione di attività che non è stata scritta o modificata solo leggermente senza dare l'attribuzione all'autore originale e ottenere idealmente anche l'autorizzazione. Se la tua risposta compone principalmente le soluzioni più brevi da tutte le altre risposte, dovrebbe essere una wiki della comunità.
punteggio
La proposta che completa la maggior parte delle attività è il vincitore. Se due invii vincolano, vince quello con il minor numero di byte. Se i conteggi dei byte sono collegati, l'invio precedente vince. Le risposte alle wiki della community non possono vincere.
Assicurati di dirci quali attività hai risolto, non solo quante!
Handicap per i non golfisti:
È probabile che questa sfida sarà dominata dalle lingue del golf . Molte lingue potrebbero avere difficoltà a risolvere anche una o due attività entro 140 byte. Pertanto è possibile inviare una risposta non competitiva in cui il limite è di 3 tweet, ovvero 420 byte. Tutte le altre regole rimangono le stesse.
Compiti
Compito 1: tre numeri possono formare un triangolo?
Prendi tre numeri interi positivi e genera un valore di verità / falsità che indica se tre linee con quelle lunghezze potrebbero formare un triangolo . Non puoi presumere che i numeri arrivino in un ordine particolare.
Esempi di verità (uno per riga):
20 82 63
1 1 1
2 3 4
1 2 2
Esempi di falsi:
6 4 10
171 5 4
1 1 2
1 2 3
Compito 2: il più vicino a un milione
Data una stringa di esattamente 7 cifre decimali (0-9), riorganizzale per ottenere un numero il più vicino possibile a un milione. Cioè, abs(1000000 - rearrangedNumber)
dovrebbe essere ridotto al minimo.
Stampa o restituisci il numero risultante come numero intero, non come stringa (quindi non dovrebbero esserci zero iniziali a meno che non sia la norma per la tua lingua).
es. un input di 9034318
dovrebbe risultare 984331
(e non 1033489
).
2893984
dovrebbe diventare 2348899
.
0001000
dovrebbe diventare 1000000
.
0000020
dovrebbe diventare 200000
.
Task 3 - Simple Keyboard Simulator
Prendi una stringa di lettere minuscole (az), spazi e parentesi angolari <>
. Leggi da sinistra a destra, questa stringa rappresenta i tasti che sono stati premuti su una tastiera standard mentre era aperto un editor di testo inizialmente vuoto. Le lettere e lo spazio corrispondono ai loro tasti normali ma <
corrispondono al tasto freccia sinistra e >
al tasto freccia destra, entrambi i quali muovono il cursore quando vengono premuti.
<
sposta il cursore di un carattere a sinistra o non fa nulla se il cursore si trova all'inizio della stringa.
>
sposta il cursore di un carattere a destra o non fa nulla se il cursore si trova alla fine della stringa.
Emette la stringa che sarebbe nell'editor di testo dopo aver premuto tutti i tasti nella stringa di input. Non è consentito emettere codici di escape per spostare il cursore.
Ci sarà sempre almeno un carattere chiave non freccia nell'input.
ad esempio, l'input ui<<q>>ck <<<<<<the<<<<>>> >>>>>>>>brown x<o<f
dovrebbe cedere the quick brown fox
.
op<<l>>t<<<lam>>>>>>imi<<<><>>>zer<<<<<<<<<<<<<<<<<<>>><>m
dovrebbe dare llammoptimizer
.
e< <c<b<a
dovrebbe dare abc e
.
<<<>><><<><toast>><<>><><<>><
dovrebbe dare toast
.
Attività 4 - Lettere FILTHE
In molti font, 6 delle maiuscole lettere alfabeto inglese costituiti interamente da linee orizzontali e verticali: E
, F
, H
, I
, L
, e T
. Chiameremo queste le lettere FILTHE.
Prendi una stringa di lettere maiuscole (AZ) e conta il numero di righe nelle lettere FILTHE, producendo il numero intero risultante.
E
, F
, H
, I
, L
, E T
hanno 4, 3, 3, 3, 2, e 2 linee rispettivamente.
ad esempio GEOBITS
ha 4 + 3 + 2 = 9 righe parte delle lettere FILTHE (per .E..IT.
), quindi l'output dovrebbe essere 9
.
ABCDEFGHIJKLMNOPQRSTUVWXYZ
dovrebbe produrre 17
.
ABCDGJKMNOPQRSUVWXYZ
dovrebbe produrre 0
.
FILTHYLINESINLETTERS
dovrebbe produrre 39
.
Compito 5 - Alex ricorsivo A.
Il nostro moderatore Alex A. ha un'iniziale abbastanza misteriosa, "A".
Ora non ne sono certo, ma penso che lo A.
sia .A xelA
. E sono anche abbastanza sicuro che .A
lì ci sia di soppiatto Alex A.
.
Quindi, per ottenere il nome completo di Alex, dobbiamo espandere A.
'e .A
':
Alex A. -> Alex [A.] -> Alex [.A xelA] -> Alex .A xelA -> Alex [.A] xelA -> Alex [Alex A.] xelA -> Alex Alex A. xelA -> etc.
Chiedi al tuo programma di assumere un numero intero non negativo ed espanderlo Alex A.
molte volte, producendo la stringa risultante.
Così
0
diventa Alex A.
,
1
diventa Alex .A xelA
,
2
diventa Alex Alex A. xelA
,
3
diventa Alex Alex .A xelA xelA
,
4
diventa Alex Alex Alex A. xelA xelA
,
5
diventa Alex Alex Alex .A xelA xelA xelA
,
e così via.
(L'ho fatto perché mi sono sentito male per aver inavvertitamente lasciato Alex fuori dalla mia sfida tributo alla mod .: P)
Attività 6 - Rotazione del tastierino numerico
Prendi un numero intero compreso tra 1 e 9 incluso (puoi prenderlo come una stringa). Stampa il quadrato di 3 × 3 cifre
789
456
123
ruotato con incrementi di 90 ° in modo tale che la cifra in ingresso appaia ovunque nella riga superiore. Quando 5
viene immesso, qualsiasi rotazione è valida poiché non 5
può essere ruotata verso l'alto.
ad es. quando 3
viene immesso, entrambi
963
852
741
e
321
654
987
sono uscite valide.
Per l'ingresso 4
, solo
147
258
369
è un output valido.
Attività 7 - Dividere le cifre in decine
Prendi una stringa non vuota di cifre decimali (0-9) e genera un valore veritiero se può essere suddiviso in sezioni contigue in cui tutte le cifre in ciascuna sezione vengono sommate esattamente a 10. Se ciò non è possibile, genera un valore errato.
ad esempio 19306128
può essere suddiviso come 19|3061|28
, le sezioni tutte sommando a 10 (1 + 9, 3 + 0 + 6 + 1, 2 + 8), quindi dovrebbe essere emesso un valore di verità.
Esempi di verità (uno per riga):
19306128
073
730
0028115111043021333109010
2222255
Esempi di falsi:
6810410
9218
12341
5222225
000
Task 8 - Orologio quadrato
Accetta una stringa multilinea di dimensioni coerenti.
Uscita 12
se l'ingresso è
_ _
| | |
|_ _|
Uscita 3
se l'ingresso è
_ _
| |_|
|_ _|
Uscita 6
se l'ingresso è
_ _
| | |
|_|_|
Uscita 9
se l'ingresso è
_ _
|_| |
|_ _|
Non ci sono altri casi di input.
Compito 9 - Staffa Art
Prendere in una stringa di 4 byte contenente uno di ciascuno delle staffe a sinistra (
, [
, {
, e <
in qualsiasi ordine.
Aggiungi le parentesi destra corrispondenti in modo che la stringa sia lunga 8 byte e abbia una linea verticale di simmetria. ad esempio [<({
diventa [<({})>]
.
Quindi invertire ogni parentesi in questa stringa. ad esempio [<({})>]
diventa ]>)}{(<[
.
Emette la stringa di parentesi originale da 8 byte con la versione invertita sopra e sotto su righe separate.
Quindi l'output finale per l'input [<({
sarebbe
]>)}{(<[
[<({})>]
]>)}{(<[
Allo stesso modo, l'output per <({[
dovrebbe essere
>)}][{(<
<({[]})>
>)}][{(<
L'input (<<[
non è valido perché {
manca e c'è un extra <
.
Compito 10 - Perimiterizzare
Prendi una griglia rettangolare di testo (1 × 1 al minimo) fatta di .
"s" che rappresentano uno spazio vuoto e X
di s che rappresentano le tessere solide. Le celle oltre i limiti della griglia sono considerate vuote. Puoi presumere che ciascuna delle 4 righe e colonne del bordo griglia ne contenga almeno una X
.
ad esempio un input valido potrebbe essere:
XXX.....X.....
X..X...X.X....
XXX.....X....X
Stampa un'altra griglia rettangolare di testo in cui ogni cella vuota che confina con una X
ortogonale o diagonale, comprese quelle esterne alla griglia di input , diventa o
. Quindi essenzialmente un perimetro di o
è disegnato attorno a tutte le porzioni di piastrelle solide. La nuova griglia non dovrebbe essere più grande di quanto deve essere.
Quindi l'output dell'esempio sopra sarebbe:
ooooo...ooo.....
oXXXoo.ooXoo....
oXooXo.oXoXo.ooo
oXXXoo.ooXoo.oXo
ooooo...ooo..ooo
Allo stesso modo, l'output di input XXX..X.X
dovrebbe essere
oooooooooo
oXXXooXoXo
oooooooooo
e in uscita
oooooooooo.
oXXXooXoXo.
oooooooooo.
sarebbe non valido poiché la colonna vuota più a destra non è necessaria.
È possibile utilizzare qualsiasi 3 distinte ASCII stampabili caratteri al posto di .
, X
e o
.
Task 11 - Sator Square
Uscita Sator Square :
SATOR
AREPO
TENET
OPERA
ROTAS
Una qualsiasi delle lettere può essere minuscola o maiuscola, quindi
SatOR
aRePO
tenet
OPERa
RoTaS
è anche un output valido.
Non ci sono input.
Task 12 - Prime Tweet
Non accettare input ma emette una stringa ASCII stampabile a 140 byte che contiene almeno uno di ciascuno dei 95 caratteri ASCII stampabili. (Quindi 45 caratteri saranno duplicati.)
La somma dei codici carattere di tutti i 140 byte in questa stringa deve essere un numero primo di Sophie Germain , ovvero un numero primo p
tale che 2p+1
sia anche primo. Il codice carattere per lo spazio è 32, 33 per !
, 34 per "
e così via fino a 126 per ~
. La somma potrebbe essere calcolata in Python come sum(map(ord, myString))
.
Un esempio di output è:
! "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~STUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~d
La somma del codice carattere è il primo 12203 il cui primo sicuro primo è 24407.
import
s? Diciamo che scrivo 5 funzioni in cui 2 hanno bisogno dello stesso modulo (es. import Math
), Questo viene contato due volte?