Apakah itu sederhana atau sulit?


21

Untuk hal sulit yang harus Anda lakukan, Anda harus membuat sesuatu untuk komputer untuk melakukan yang mengetahui jika beberapa kata dijelaskan dengan cara yang sederhana. Sesuatu dijelaskan dengan cara sederhana jika hanya menggunakan sepuluh ratus kata yang paling sering digunakan. Jika tidak, itu dijelaskan dengan cara yang sulit. Ini bisa menjadi hal komputer penuh atau bagian dari hal komputer. (program atau fungsi lengkap)

Ada sesuatu yang bisa dibaca komputer yang memiliki semua dari seratus kata di dalamnya dengan spasi di antara setiap kata. Nama benda untuk dibaca komputer disebut 'most used.txt'. Anda dapat mengambil benda ini dari tempat komputer ini .

Orang yang menggunakan komputer akan memasukkan beberapa kata. (Ini bisa dari STDIN, argumen fungsi atau argumen baris perintah) Komputer harus mengatakan sesuatu seperti true jika kata-katanya sederhana dan sesuatu seperti tidak benar jika sulit. ( truthy-falsy ) Orang yang membuat hal tersingkat untuk dilakukan komputer adalah yang terbaik. Hal-hal yang diketahui setiap orang adalah buruk adalah buruk. ( celah standar berlaku )


Lebih banyak hal yang perlu diketahui tentang cara kerja komputer:

  • Tidak masalah apakah kata-katanya BESAR atau kecil.

  • Gambar-gambar yang membuat makna kata lebih mudah diketahui (tanda baca) tidak masalah. Jadi, jika orang yang menggunakan komputer mengatakan "jangan" itu bukan kata yang berbeda dari kata "jangan". Angka dan gambar lain juga tidak masalah. Jadi jika orang tersebut mengatakan "HE $$ ll9o" komputer harus membacanya seperti "halo"

  • Garis kecil antara kata-kata (tanda hubung) bekerja dengan cara yang sama seperti spasi. Jadi kata "up-goer-five" sama dengan kata "up goer lima".


Lebih banyak hal yang perlu diketahui tentang membuat kata-kata seperti ini:

https://xkcd.com/1133/

http://splasho.com/upgoer5/#


7
Jadi, periksa kata-kata pengguna benda komputer ke kata besar untuk melihat apakah semua kata dalam kata kecil itu ada di kata besar?
Geobits

24
Mungkin hanya saya, tetapi saya merasa ini sangat sulit dibaca.
Alex A.

8
Mungkin lebih baik untuk memberikan sinopsis dalam pembicaraan sederhana, diikuti dengan spesifikasi aktual dalam bahasa Inggris "nyata".
Geobits

2
Apakah kamus harus dibaca dari file? Itu mungkin benar-benar mengecualikan beberapa bahasa.
Dennis

1
Anda seharusnya mendapat penalti untuk setiap kata yang digunakan yang sulit dalam program
Beta Decay

Jawaban:


6

CJam, 41 byte

q"file:///most used.txt"g]{el_euS--S%}/-!

Ini membuat asumsi yang agak najis yang most used.txtada di direktori root, karena CJam tidak dapat menangani jalur relatif.

Atau, kami memiliki solusi berbasis web berikut (78 dan 29 byte):

q"https://docs.google.com/uc?id=0B2sM8IORrbL3RVpJWTZNUy1rOFU"g]{el_euS--S%}/-!
q"j.mp/-o_O"g]{el_euS--S%}/-!

Cara "tepat" untuk melakukan ini dalam CJam adalah membaca kedua input dari STDIN (input pada baris pertama, kamus pada baris kedua), yang dimungkinkan dalam 18 byte:

qN%{el_euS--S%}/-!

Anda dapat mencoba versi terakhir dalam juru bahasa CJam . (permalink diuji di Chrome)

Contohnya

$ cjam <(echo 'q"file:///most used.txt"g]{el_euS--S%}/-!') <<< 'ten hundred'; echo
1
$ cjam <(echo 'q"file:///most used.txt"g]{el_euS--S%}/-!') <<< 'thousand'; echo
0

2
Anda bisa menggunakan tinyurl di url Drive untuk membuatnya lebih pendek
DeadChex

1
@MIWright Menemukannya. Itu dan mengunggah file ke Pastebin disimpan 12 byte. Terima kasih!
Dennis

7

R, 106 byte

Tidak yakin apakah mengerti tantangan karena kesulitan membaca.

function(s){u=toupper;all(strsplit(gsub("[^A-Z -']","",u(s)),"[ -]")[[1]]%in%u(scan("most used.txt","")))}

Ini menciptakan bagian komputer yang tidak disebutkan namanya yang menerima string dan mengembalikan sesuatu seperti benar atau seperti tidak benar.

Penjelasan + tidak dikumpulkan:

partOfAComputerThing <- function(s) {
    # Remove everything but letters, spaces, dashes, and single quotes
    s <- gsub("[^A-Z -']", "", toupper(s))

    # Split s into a vector on spaces/dashes
    v <- strsplit(s, "[ -]")[[1]]

    # Read the file of words (assumed to reside in the current directory)
    m <- scan("most used.txt", "")

    # Determine if all words in the input are in the file
    all(v %in% toupper(m))
}

Terima kasih untuk hal inspirasi bagi Dennis.


2
Sesuatu seperti part-of-a-computer-thing(s){...}seharusnya bernilai poin bonus.
Dennis

@ Dennis: Bagaimana ini? :)
Alex A.

Jauh lebih baik!
Dennis

3

Python 3, 148 byte

import re
print(all(i in open("most used.txt").read().lower().split(' ')for i in re.sub("[^a-z ']+","",input().replace("-"," ").lower()).split(" ")))

Output TruedanFalse

Contohnya

Input:  Don't
Output: True

Input:  The poison air he's breathing has a dirty smell of dying
Output: False

Input:  Who let the dogs out?
Output: False

Apakah ini akan menangani input don'tdengan benar?
Alex A.

@AlexA. Ia kembali True. Apakah itu benar?
Beta Decay

Adakah alasan Anda berpisah most used.txtdengan baris baru? Saya tidak 100% yakin tentang cara kerjanya, tetapi saya membayangkan Anda mencoba untuk membaginya menjadi setiap kata dalam file?
DeadChex

@DeadChex Apa file teks yang disediakan dipisahkan oleh? Saya tidak dapat mengaksesnya karena terus melempar kesalahan SSL.
Beta Decay

1
Pertanyaannya menyatakan "Ada sesuatu untuk dibaca komputer yang memiliki semua dari sepuluh ratus kata di dalamnya dengan spasi di antara setiap kata"
DeadChex

2

Pyth, 35 byte

!-Fm@LGcrXd\-bZ),zs'"most used.txt

Tes, di mana di atas adalah file common.pyth

$ pyth common.pyth <<< 'I can write this way too-hell99#0O.'
True
$ pyth common.pyth <<< 'But I get confused easily.'
False

Penjelasan:

!-Fm@LGcrXd\-bZ),zs'"most used.txt
   m            ,zs'"most used.txt    Map over input and input file:
         Xd\-b                        Replace hyphens with newlines.
        r     Z                       Cast to lower case.
       c       )                      Split on whitespace.
    @LG                               Remove non-alphabetic characters.
 -F                                   Setwise difference - remove anything in
                                      the text file from the input.
!                                     Logical negation.

0

APL (Dyalog) , 69 byte

Mengasumsikan bahwa file tersebut ada di direktori saat ini.

s819' '(1↓¨,⊂⍨⊣=,)'[- ]' '\W'R' ' ''
∧/(s⍞)∊s⊃⎕NGET'most used.txt'

Cobalah online!

Baris pertama mendefinisikan fungsi pembantu normalisasi dan pemisahan menjadi string, s :

s←s adalah  hasil
819⌶ huruf kecil
' '(dari fungsi berikut, dengan spasi sebagai argumen kiri ...
1↓¨ jatuhkan satu dari setiap
, rangkaian argumen yang
⊂⍨ dipotong sebelum setiap elemen di mana
 argumen kiri
= sama dengan
, gabungan argumen yang
) diterapkan
'[- ]' '\W'⎕R' ' '' pada dash pengganti PCRE / space → space, non-word-char → tidak ada

∧/(... ) apakah benar bahwa  input teks yang
s dinormalisasi dan dipisah  adalah anggota  elemen pertama yang  dinormalisasi dan dipecah  (konten, pengodean, gaya baris baru) dari file


s

⎕NGET'most used.txt'


0

JavaScript (ES7), 161 byte

(Non-bersaing sebagai pertanyaan sebelum tanggal spesifikasi ES7)

s=>fetch("most used.txt").then(t=>t.text()).then(d=>alert(s.split(/[ -]/g).every(l=>d.split` `.map(w=>w.replace(/[\.']/,"")).includes(l.replace(/[^a-z]/g,"")))))

Adakah yang mendapat salinan file daring yang dapat saya gunakan untuk membuat Cuplikan yang berfungsi?


Saya kira Anda dapat menyimpan 22 byte dengan menghapus thendan 7 byte dengan menghapus alert.
Titus

Bisakah Anda menguraikan, @Titus? Setiap langkah dari ini mengembalikan janji sehingga thendiminta untuk mengeksekusi kode berikutnya ketika mereka menyelesaikan.
Shaggy

Saya tidak begitu terbiasa dengan ES7; berpikir ke arah yang salah. Tapi mungkin Anda bisa membuat sesuatu yang lebih pendek jika Anda mengurangi input untuk semua kata yang tidak ada dalam daftar? Saya ragu bahwa PHP benar-benar dapat mengalahkan JS hampir 40%.
Titus

Oh, ya, pasti ada ruang untuk perbaikan di sana; ini adalah tantangan terakhir saya hari itu dan saya sakit otak jadi saya memposting apa yang sejauh ini harus saya kunjungi kembali besok. Sayangnya, rantai janji yang diperlukan hanya untuk mendapatkan isi file membuat JS berada pada posisi yang kurang menguntungkan dalam tantangan ini terhadap orang-orang seperti PHP tetapi itu masih lebih baik daripada alternatif menggunakan XHR.
Shaggy

0

PHP, 101 byte

foreach(preg_split("#[^\w']+#",$argn)as$w)preg_match("#\b$w\b#i",end(file("most used.txt")))?:die(1);

mengambil input dari STDIN, menganggap kamus baris tunggal
keluar dengan 1(kesalahan) untuk falsy, 0(ok) untuk kebenaran. Jalankan dengan -R.

Membagi input dengan karakter non-kata, loop melalui array yang dihasilkan (kata-kata):
Jika kata ada di kamus, lanjutkan; lain exit(1).
tersirat exit(0).

atau, cukup cantumkan:

satu kata demi satu: Jika kata itu dalam kata-kata yang paling sering digunakan, lanjutkan; lain kembali 1. kembali 0.

dan: Saya bisa menghemat dua poin jika kata-kata yang paling sering digunakan masing-masing memiliki spasi di depan dan di akhir.


-1

Java, 248 byte

Dengan Frasa disahkan sebagai argumen.

void g(String s) throws Exception{String c=new java.util.Scanner(new java.io.File("most used.txt")).useDelimiter("\\Z").next(),x="false";for(String l:s.split(" "))if(c.contains(l.toLowerCase().replaceAll("![a-z]","")))x="true";System.out.print(x);}

input output:

g("was he")         --> "true"
g("was h!e")         --> "true"
g("delicious cake") --> "false"

Spasi dan tab:

void g(String s) throws Exception{
    String c=new java.util.Scanner(new java.io.File("most used.txt")).useDelimiter("\\Z").next()
      ,x="false";
    for(String l:s.split(" "))
      if(c.contains(l.toLowerCase().replaceAll("![a-z]","")))
          x="true";
    System.out.print(x);
}

Apa maksud Anda terserah Anda untuk mengimpor apa yang dibutuhkan ?
Beta Decay

@ Beta Saya menggunakan beberapa kelas utilitas Java yang, jika Anda meletakkan fungsi ini dalam program Anda harus mengimpor (yaitu java.io.* dan java.util.*), seperti pernyataan impor ular sanca
DeadChex

3
Yah Anda harus memasukkan impor ini dalam hitungan byte Anda. Anda tidak diizinkan untuk mengecualikan pernyataan impor dengan Python, jadi Anda tidak bisa mengecualikannya di Jawa
Beta Decay

@BetaDecay Tweak program, tidak ada lagi impor yang diperlukan
DeadChex
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.