Programmazione con un tasto maiusc sporadico


39

C'è qualcosa che non va nella tua tastiera. La Shiftchiave ha una propria mente. Ogni volta che digiti un personaggio non hai idea se verrà spostato o meno (anche se è 50-50). Oltre ai tasti caratteri standard, nulla sulla tastiera è funzionale. Non c'è mouse o altri mezzi di input.

In qualche modo sai che l'unico modo per sistemare le cose è scrivere un programma che emetta Dear Computer, please stop giving me shift!su stdout. Fortunatamente il tuo IDE è aperto e sei in grado di eseguire un programma, ma ovviamente durante la digitazione non saprai quali personaggi verranno spostati.

Quale sequenza di pressioni di tasti useresti per scrivere un programma che abbia le migliori possibilità possibili di lavorare al primo tentativo?

Dettagli

Stai usando una tastiera QWERTY standard , quindi puoi premere 50 tasti caratteri.

Versioni non modificate (solo 47):

`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./

Versioni spostate (solo 47):

~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?

Gli ultimi 3 tasti sono Enter, Tabe Space, che sono gli stessi spostati e non spostati.

Una sequenza di N di questi caratteri ha 2 N - (conteggio dei caratteri degli spazi bianchi) in cui potrebbe essere stata emessa se li avessi digitati con la tastiera difettosa. Ad esempio, la digitazione A Space mpotrebbe aver prodotto a mo A mo a Mo A M.

Scrivi a questi personaggi un programma e osserva tutte le possibili combinazioni di turni di 2 N - (conteggio dei caratteri di spazi bianchi) . Più combinazioni producono Dear Computer, please stop giving me shift!meglio. Il tuo punteggio è il numero di combinazioni di lavoro (programmi validi) diviso per il numero totale di combinazioni. Vince il punteggio più alto.

Gli appunti

  • Per programmi validi, la stampa precisa Dear Computer, please stop giving me shift!e nient'altro su stdout dovrebbe essere l'unico effetto collaterale.
  • I programmi validi non devono ricevere input.
  • I programmi non validi possono fare qualsiasi cosa.
  • I commenti possono essere utilizzati ovunque.
  • Le risposte agli spazi bianchi non possono vincere perché ottenere un punteggio del 100% è (relativamente) banale. Puoi comunque inviare una soluzione di Whitespace per divertimento.
  • Il programma deve contenere al massimo 1024 caratteri.

Aggiornamento: modificato Stop giving me shift!per Dear Computer, please stop giving me shift!consentire risposte più complesse. Le risposte esistenti possono rimanere come sono, se lo si desidera.


2
+1, è una grande sfida, ma vorrei che ci avessi dato una stringa di output più lunga. Ho pensato a diversi trucchi intelligenti, ma tutti prendono più di 18 caratteri in tutte le lingue che conosco.
Nathaniel,

2
@Calvin'sHobbies ma ... che dire delle risposte attuali?
John Dvorak,

1
@ Calvin'sHobbies Non lo è! E la limitazione 1024 lo impedisce anche molto bene. Alla luce di tutto ciò, voterò perché ciò chiuda in modo poco chiaro. Si prega di non modificare le specifiche che danno svantaggio alla maggior parte delle risposte
Ottimizzatore

1
@ Calvin'sHobbies Peccato che ci sia il limite di 1024 caratteri. Avrò bisogno di ripensare la mia risposta ...
Justin,

1
@Optimizer Almeno non vinceranno.
jimmy23013,

Risposte:


46

Applescript, 2 0 (100%)

Credo di poter ottenere un punteggio perfetto qui:

  • Applescript Editor (il mio IDE) converte automaticamente tutte le parole chiave in lettere minuscole al momento della compilazione / esecuzione
  • Inoltre, i nomi delle variabili e dei gestori definiti sono case insensitive - Per esempio, se un gestore myFuncè definito, quindi l'IDE convertirà automaticamente MYFUNC, myfunc, MyFuNc, ecc riferimenti amyFunc
  • Ho usato solo caratteri alfabetici, spazi e nuove righe, quindi non devo preoccuparmi di numeri spostati e caratteri di punteggiatura.

Ecco qui:

global f
on j at a
set end of a to j
end
on c at a
j at a
j at a
end
on k at a
repeat with q in system info
j at a
end
end
on w at a
set d to count a
j at a
return string id d
end
on z at a
set end of f to a
end
set h to space
set y to h as list
k at y
k at y
set x to w at y
c at y
c at y
c at y
c at y
c at y
set q to w at y
k at y
c at y
c at y
copy y to b
c at y
set s to w at y
set d to w at y
set f to d as list
k at b
k at b
set a to w at b
c at b
j at b
set e to w at b
set y to w at b
set g to w at b
set d to w at b
set i to w at b
c at b
set l to w at b
set m to w at b
set n to w at b
set o to w at b
set p to w at b
j at b
set r to w at b
z at e
z at a
z at r
z at h
z at s
set s to w at b
set t to w at b
set u to w at b
set v to w at b
z at o
z at m
z at p
z at u
z at t
z at e
z at r
z at q
z at h
z at p
z at l
z at e
z at a
z at s
z at e
z at h
z at s
z at t
z at o
z at p
z at h
z at g
z at i
z at v
z at i
z at n
z at g
z at h
z at m
z at e
z at h
z at s
z at d
z at i
z at y
z at t
z at x
f as text

Grazie all'aiuto di @kernigh e @paradigmsort, questo è ora di 1020 byte, appena sotto il limite di 1024 byte!

Spiegazione:

  • I caratteri per la stringa di output vengono generati utilizzando string id <n>, che restituisce il carattere corrispondente al valore ASCIIn
  • Poiché stiamo evitando le cifre, ognuna ndeve essere generata con mezzi più fondamentali. In particolare, generiamo ciascuno ncontando un elenco e quindi aggiungendo un altro elemento a tale elenco. Il repeat with q in system infoci permette di fare questo 16 volte, come system infosempre restituisce una lista di 16 articoli.
  • Usando una tecnica simile, aggiungiamo ogni carattere della stringa finale a sua volta a un elenco.
  • Infine, l'ultimo elenco viene forzato texte stampato.

Produzione:

Utilizzando l' osascriptinterprete, ma l'Editor di applescript funziona altrettanto bene:

$ # Interpret as-is:
$ osascript dearcase.scpt
Dear Computer, please stop giving me shift!
$ 
$ # Interpret all lower case:
$ tr A-Z a-z < dearcase.scpt | osascript
Dear Computer, please stop giving me shift!
$ 
$ # Interpret all upper case:
$ tr a-z A-Z < dearcase.scpt | osascript
Dear Computer, please stop giving me shift!
$
$ # Interpret random case for each letter:
$ while read; do for ((i=0;i<${#REPLY};i++)); do c="${REPLY:i:1}"; if ((RANDOM%2)); then printf "%s" "$(tr a-z A-Z <<< "$c")"; else printf "%s" "$(tr A-Z a-z <<< "$c")"; fi; done; echo; done < dearcase.scpt | osascript
Dear Computer, please stop giving me shift!
$ 

2
Molto molto bello! Spero che tu riesca a portarlo a 1024. Ti dispiace spiegare un po 'il codice?
Calvin's Hobbies,

2
@ Calvin'sHobbies Applescript dovrebbe essere una delle lingue più leggibili - non lo capisci davvero? ;-) Proverò ad aggiungere una spiegazione tra un po '...
Digital Trauma,

2
Si prega di pubblicare la versione golf, senza rientri e senza nome end name. Così sed -e 's/^ *//' -e 's/^end.*/end/' dearcase.scpt | wc -ccom'è , devo usarlo per contarlo. Inoltre, si può scendere 1044-1037 cambiando count of aa count a, e l'eliminazione logda log f as text. Provo con un vecchio sistema OS X 10.4, in cui il logcomando ha un risultato vuoto; osascriptstampa solo il risultato, non il registro eventi, quindi non ottengo output se non lo elimino log.
kernigh,

3
Cambiando c per chiamare j due volte anziché tre volte e aggiornando i siti di chiamata in base alle esigenze, si risparmiano 7 caratteri e si arriva al di sotto del limite.
paradigmsort,

3
# Interpret all upper case: $ tr A-Z a-z- Gli arg sono al contrario, giusto?
Izkata,

16

PHP, 2 ^ -12

echo ucwords(strtolower('Dear Computer, ')).strtolower('please stop giving me shift!');

PHP essendo PHP, la capitalizzazione di echo, ucwordse strtolowernon contano. Le chiamate a ucwordse strtolowerassicurano che il caso delle stringhe non cambierà l'output.

Pertanto, gli unici caratteri che non possono essere modificati sono ((,)).(!);(10 caratteri).

Ogni coppia di citazioni ha anche una probabilità del 50% di essere valido ( ''e ""sono valide, ma '"e "'non sono), quindi ogni aggiunta un'altra potenza di due.


2
@ edc65 mette in ucwordsmaiuscolo la prima lettera di ogni parola
es1024,

1
un buon IDE aggiungerà le virgolette di chiusura corrette per te (finirai sempre ''o con ""le parentesi di chiusura, quindi anche se hai ancora una probabilità del 50% per (, )dovrebbe essere automatico.
WOUNDEDStevenJones

sparare, non è possibile utilizzare alcun tipo di tasti di navigazione (frecce), quindi anche se il tuo IDE ha completato correttamente lo stesso, dovresti digitare di nuovo lo stesso carattere oppure inserirà il nuovo (sbagliato), in questo modo: strtolower("Dear Computer, '"0)...
WOUNDEDStevenJones,

1
@WOUNDEDStevenJones Credo che fare affidamento sulle funzionalità IDE sia considerato un imbroglio.
Ingo Bürk,

1
Che dire <?all'inizio del programma?
Michael Mior,

5

Nota: in realtà si tratta di 3 risposte in una. Non ho visto il punto di dividerlo in risposte multiple quando sono traduzioni letterali l'una dell'altra. Se dovessero essere divisi, fammelo sapere e me ne occuperò io.

Dopo aver riletto le specifiche, mi rendo conto che in realtà non è valido. Ogni risposta è lunga> 4000 caratteri. Ma lo lascerò comunque qui, a causa del diverso metodo.

Python 2, 2 ** - 41

print''.join(map(chr,map(len,'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              '.split(' '))))

Solo per fornire un diverso stile di soluzione. Codifica il valore ASCII di ciascun personaggio in schede, suddiviso in spazi. Il numero di schede è il numero per il valore ASCII.

Questa è una soluzione identica in

Pyth, 2 ** - 11

j""mCldc"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               "d

Un'altra soluzione identica - tranne gli spazi sostituiti con le nuove righe - in

Golfscript, 2 ** - 8

'                                                                                                                                                                                                                                                                               









































                                                                                                                                    'n/{,}%+

Forse la codifica in binario avrebbe funzionato per GolfScript. TAB come 1, SPAZIO come 0 o viceversa.
Giustino,

3
Non sono l'unico che vede la maggior parte della risposta GolfScript come spazio bianco, vero?
Pharap,

1
@Pharap Questo è il trucco. Sono un sacco di schede separate da nuove righe. Se vai fino in fondo e scorri verso destra, vedrai dove finisce la stringa e fa la magia per convertirla in ascii.
Giustino,


4

Spazio bianco (645 byte, 2 ^ 0 probabilità)

Poiché questo programma utilizza solo schede, spazi e newline (che non sono influenzati dallo spostamento), offre un tasso di successo del 100%.

             





















































































  

Esecuzione del programma


1
Ma nota che questo è fuori concorso secondo le regole.
Ingo Bürk,

3

CJam, 2 -9 possibilità, 739 byte

"                         
(lines of space characters)
                                        "N/2fb:c

Base64:

IiAJICAgIAkgCQkgICAJICAKICAgCSAJCSAgIAkJCQkgCQoJCQkJIAkgIAkJIAkJICAJCiAJICAg
IAkgCQkgICAgCSAKICAgCSAJCSAgCSAgICAgIAogCQkJCSAJICAJCSAJIAkJCgkJCSAJICAJCSAJ
CSAJCQkKIAkgCQkgIAkgICAgIAkgCQoJIAkJICAJICAgIAkgICAgCgkgIAkJIAkJCQkgIAkJIAkK
CQkgCSAgCQkgCQkJIAkgIAogICAJIAkJICAgCQkJCSAJCiAJICAgIAkgCQkgICAgCSAKIAkJCQkg
CSAgCQkgCQkgIAogICAJIAkJICAJICAgICAgCgkgCQkgIAkgICAgCSAgICAKCSAgCSAgICAJIAkg
CQkgIAogICAJIAkJICAgCQkJCSAJCgkJCQkgCSAgCQkgCQkgIAkKICAgIAkgCQkgICAJCSAJCQog
ICAJIAkJICAgCQkJCSAJCiAgIAkgCQkgIAkgICAgICAKICAgIAkgCQkgICAJCSAJCQoJCSAJICAJ
CSAJCQkgCSAgCgkJCSAJICAJCSAJCSAJCQkKCSAJCSAgCSAgICAJICAgIAogICAJIAkJICAJICAg
ICAgCgkgCSAgCQkgCQkJIAkJCQkKICAJCSAJCQkJIAkgICAgCQogCQkgIAkgICAgCSAgCQkgCiAg
CQkgCQkJCSAJICAgIAkKICAJICAgIAkgCSAJCQkJIAoJIAkgIAkJIAkJCSAJCQkJCiAgIAkgCQkg
IAkgICAgICAKIAkgCQkgIAkgICAgIAkgCQogICAJIAkJICAgCQkJCSAJCiAgIAkgCQkgIAkgICAg
ICAKICAgIAkgCQkgICAJCSAJCQogCQkgCQkJCSAJICAJICAgCiAgCQkgCQkJCSAJICAgIAkKCQkg
CQkJCSAJICAJIAkJIAoJCSAJICAJCSAJCQkgCSAgCgkJIAkJCQkgCSAgCQkgIAkiTi8yZmI6Yw==

Basato sull'idea di Optimizer e della risposta di Quincunx.


3

Python 2, 2 possibilità 2-20

print'S'+'top giving me shift!'.lower()

print, S , +, !, E .lower()devono essere tutti la versione corretta; sono 18 caratteri. Le due virgolette per le stringhe devono anche allinearsi, il che rende altre due potenze di due.

Per uno qualsiasi dei top giving me shift, se viene convertito nella versione maiuscola, lo convertiamo in minuscolo e funziona correttamente.

Sfortunatamente, non posso usare l'astuzia di Python capitalize(), perché richiede un personaggio in più.


Se aiuta, la frase ora è più lunga (ma normalmente non è maiuscola).
Calvin's Hobbies,

@ Calvin'sHobbies L'ho visto. Non aiuta; fa male.
Giustino,

2

VisualBasic.net 2 ^ -18

Caratteri critici:. ("DearC" + ",!". ())

Sub Main
  console.write("Dear C"+"omputer, please stop giving me shift!".tolower())
End Sub

Testato in LINQPad, Lingua = "Programma VB"


Penso che Visual Studio corregga automaticamente l'involucro per te.
Pharap,

@Pharap ma l'involucro esterno tra virgolette non è il problema ... VS non correggerà un '(' spostato in '9'
edc65,

1
In tal caso, qualcosa di più utile: è possibile sbarazzarsi del caso potenziale di ottenere >, invece di .cambiando Console.Write(string)per Write(string)e scambiare (string).ToLower()fuori per LCase(string).
Pharap,

1

Pyth, 2 ** - 15

+"S"$"top giving me shift!".lower()

Non riesco a trovare la versione di Pyth lower(), quindi prenderò in prestito da Python. I caratteri che non possono essere scambiati sono +"S"$, !e .lower(), per un totale di 14 caratteri. Le virgolette dopo il $must devono corrispondere, aggiungendo un altro potere di 2.


Pyth non ha un lower()- non si stava abituando abbastanza. Probabilmente dovrei aggiungerlo di nuovo.
isaacg

1

Rant, 2-21

[caps:first][?[caps:word][?[caps:lower]Dear Computer][caps:lower], please stop giving me shift!]

Una serie di metapattern e caps chiamate una formattazione corretta. I nomi e gli argomenti delle funzioni non fanno distinzione tra maiuscole e minuscole.

Versione online


1

CJam, 2 -13 possibilità

Secondo la stringa aggiornata ( 696 byte).

"   




















































































             "N/:,2/Kfb:c

Solo ora ""N/:,2/Kfb:csono a rischio.

Provalo online qui e poiché questo editor di testo sta divorando tutti gli spazi, ecco l' essenza con il codice corretto.


1

VB.NET, 2 ^ -12 2 ^ -11

2 -12

Module All
  Sub Main 
    Console.WriteLine StrConv("Dear Computer, ", vbTuesday) & "please stop giving me shift!".ToLower
  End Sub
End Module

2 -11

Imports System.Console

Module All
  Sub Main 
    Write StrConv("Dear Computer, ", vbTuesday)
    WriteLine "please stop giving me shift!".ToLower
  End Sub
End Module

0

Ho pensato alla mia risposta prima di arrivare ai '50 caratteri tra cui solo la regola Enter, Tab, Space '. Quindi il mio non è valido.

Sembra avere linguaggi di programmazione senza distinzione tra maiuscole e minuscole è la chiave qui. In alternativa, se si potesse usare una tastiera QWERTY standard reale (inclusi Blocco maiuscole, altro Maiusc, Backspace e Periodo tastierino numerico) ci sarebbero solo 2 possibilità del 50% che comporterebbe solo 2 ulteriori pressioni di tasti per guasto. La mia risposta non valida per un'applicazione console C # che indica la pressione dei tasti effettivi:

HoldShift(C CpsLockOn onsole)

NumPadPeriod

HoldShift(
CpsLockOff W CpsLockOn rite(" 
CpsLockOff D CpsLockOn ear space
CpsLockOff C CpsLockOn omputer
)

, (repeat with Backspace until correct)

HoldShift( please stop giving me shift!"))

; (repeat with Backspace until correct)

76 presse minime con solo 2 occorrenze del 50% necessarie


0

Excel, 2-11

=PROPER("Dear Computer, ")&LOWER("please stop giving me shift!")

Caso di PROPERe LOWERnon importa. Immissione di una formula che inizia con +gli inserimenti richiesti automaticamente =. Così solo (, ", ,, ), &, !può rompere.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.