Le 10.000 parole più comuni


9

Questa domanda è scritta perché "Thing Explainer" è divertente da leggere e mi ha dato un'idea.

Scrivi "cose ​​che fanno fare al computer cose" che legge / prende un insieme di lettere, numeri e cose del genere "#%|?e ritorna True / 1se tutte le parole fanno parte di questo insieme .

Se tutte le parole non fanno parte di quell'insieme, restituisci le parole che non facevano parte di esso.


Questo sito Web può essere considerato corretto in tutti i casi. Le regole sono scritte per seguire le specifiche su quel sito.


Esempi:

Verità :

Il codice dovrebbe restituire un valore di verità se l'intero testo sopra la prima riga orizzontale viene incollato come input.

Le seguenti righe dovrebbero restituire un valore di verità (l'input è separato da ###)

This returns "Hello, World!"
###
tHiS rEtUrNs TrUe...
###
Thing Explainer is a book written by a man.
The man writes books with simple words.
###
This set of stuff "#!^{>7( must return true

Falsey :

Negli esempi seguenti, input e output sono separati da ***. Diversi casi di test sono separati da ###.

This code doesn't return "Hello, World!"
***
code
###
tHiS rEtUrN"s false...
***
s
false

Regole più dettagliate:

  • È possibile utilizzare questo per testare il vostro codice.
  • Le non lettere sono interpretate come spazi dal codice, ad eccezione di parole come 'wasn't'. Le parole con apostrofi che restituiscono truesono incluse nell'elenco
    • Ad esempio: foo123bardovrebbe tornare fooe bar, poiché non fanno parte dell'elenco, e 123possono essere interpretati come spazi
  • L'input conterrà solo punti di codice ASCII stampabili [10, 32-126].
  • Le parole possono contenere lettere maiuscole miste. Vedi il secondo caso di test.
  • L'elenco delle parole
    • dovrebbe essere preso come input (STDIN, argomento della funzione o equivalente)
    • può essere modificato (le parole possono essere separate da una nuova riga, virgola ecc. e puoi ordinare l'elenco)
    • Si noti che non è possibile utilizzare questo elenco (non è identico)
  • L'output può essere in qualsiasi formato che ti piace
  • L'output può essere maiuscolo, minuscolo o misto (opzionale)
  • Non ci devono essere simboli nell'output

Per la cronaca, Jonathan Allan ha trovato uno strano caso angolare: l'implementazione su XKCD in realtà ignorerà qualsiasi lettera dopo un apostrofo fino al successivo non [AZ] [az] ['] - per esempio find's found, ed find'qazxswedc found'entrambi non restituiscono nulla, mentre find'qazx.swedc foundrestituisce swedc.

È possibile scegliere se non si desidera restituire nulla find'qazxswedc found'o restituire qazxswedc. Tornare qazx, swedcper find'qazx.swedcè anche OK.



Non sono sicuro che sia un inganno però. La tua sfida è leggermente diversa, dal momento che è necessario restituire le parole non semplici. E, a tuo favore, in realtà hai una normale specifica scritta in inglese di tutti i giorni. codegolf.stackexchange.com/questions/53323/…
James,

Per una lingua tipicamente statica che non è in grado di esprimere un tipo restituito Booleano Array<String>, sarebbe consentito restituire un array / elenco vuoto?
CAD97,

@ CAD97 per il caso in cui tutte le parole sono semplici? È possibile selezionare il modo in cui si desidera visualizzare il valore di verità, può essere un numero intero / stringa 1. Un'uscita vuota non è consentita.
Stewie Griffin,

Sono confuso dalla nuova spiegazione delle regole per l' find'qazxswedcinput. Siamo o non dovremmo dividerci in apostrofi? Ad esempio, isn'trestituisce true(è nell'elenco), ma isnrestituisce isn, poiché non è nell'elenco. Da quella logica, sono andato con "non dividere sugli apostrofi" e così find'qazxswedc foundritorna find'qazxswedc.
AdmBorkBork,

Risposte:


2

PowerShell v3 +, 105 92 byte

param($a,$b)$x=@();-split($b-replace"[^a-zA-Z']",' ')|%{if($_-notin$a){$x+=$_}};($x,1)[!$x]

Accetta semplici parole come $ae simili $b. Aiuta $x. Prendi ogni parola $be elimina eventuali lettere non cattive, quindi controlla ognuna |{...}. Se quella parola non è presente $a, la aggiungiamo a $x. Alla fine, scegliamo $xo 1no $x. Questo viene inviato, o wordso 1.

Alcune parole da provare

PS C:\Tools\Scripts\golfing> ('This returns "Hello, World!"','tHiS rEtUrNs TrUe...','Thing Explainer is a book written by a man.
The man writes books with simple words.','This set of stuff "¤!^¤>7\ must return true'|%{"$_";(.\ten-hundred-most-common-words.ps1 (gc .\ten-hundred-most-common-words.txt) $_)})-join"`n###`n"
This returns "Hello, World!"
###
1
###
tHiS rEtUrNs TrUe...
###
1
###
Thing Explainer is a book written by a man.
The man writes books with simple words.
###
1
###
This set of stuff "¤!^¤>7\ must return true
###
1

PS C:\Tools\Scripts\golfing> ("This code doesn't returns Hello, World!",'tHiS rEtUrN"s false...'|%{"$_`n***`n"+(.\ten-hundred-most-common-words.ps1 (gc .\ten-hundred-most-common-words.txt) $_)})-join"`n###`n"
This code doesn't returns Hello, World!
***
code
###
tHiS rEtUrN"s false...
***
s false

2

Python, 93 byte

import re
lambda w,s:[w for w in re.sub("[^'\w]|\d|_",' ',w).split()if w.lower()not in s]or 1

Tutti i casi di test sono su ideone

La preelaborazione dell'elenco deve essere suddivisa |e inserita in un set(che immagino vada bene se è consentito il pre-ordinamento). Inserisci le parole come we il set come s.

Se ciò non è consentito, diventa 98 ​​byte con not in sdiventando not in set(s).

Potremmo preelaborare per avere anche tutte le permutazioni di caratteri maiuscoli e minuscoli e salvare 8 byte, ma penso che potrebbe andare troppo lontano (sarebbe un set enorme).

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.