Basit mi yoksa zor mu?


21

Yapmanız zor olan şey için, bazı kelimelerin basit bir şekilde açıklanıp açıklanmadığını öğrenen bir bilgisayarın yapması gereken bir şey yapmalısınız. Bir şey, yalnızca en çok kullanılan on kelimeyi kullanırsa basit bir şekilde açıklanır. Değilse, zor bir şekilde açıklanmıştır. Bu tam bir bilgisayar olayı ya da bir bilgisayarın olayı olabilir (tam program veya işlev)

Bir bilgisayarın okuması gereken, içinde her 10 kelime olan bir boşluk bulunan on kelimenin tümünü içeren bir şey var. Bilgisayarın okuyacağı şeyin adına 'en çok kullanılan.txt' adı verilir. Bu şeyi bilgisayar yerinden alabilirsin .

Bilgisayarı kullanan kişi bazı kelimeler girecektir. (Bu, STDIN'den, işlev argümanlarından veya komut satırı argümanlarından olabilir) Kelimeler basitse bilgisayar, doğru, zorsa doğru olmayan bir şey söylemelidir. ( truthy-falsy ) Bilgisayarın yapması için en kısa şeyi yapan kişi en iyisidir. Her insanın bildiği şeyler kötüdür. ( standart boşluklar uygulanır )


Bilgisayarın nasıl çalıştığını bilmek için daha fazla şey:

  • Kelimelerin BÜYÜK veya az olması önemli değil.

  • Kelimenin ne anlama geldiğini anlamayı kolaylaştıran resimler (noktalama işaretleri) önemli değildir. Öyleyse bilgisayarı kullanan kişi "yapma" diyorsa, "yapma" kelimesinden farklı bir kelime değildir. Sayılar ve diğer resimler de önemli değil. Yani kişi "HE $$ ll9o" diyorsa, bilgisayar "merhaba" gibi okumalıdır.

  • Sözcükler arasındaki kısa çizgiler (kısa çizgiler) boşluklarla aynı şekilde çalışır. Yani "beşe beşinci" kelimesi "beşe beşinci" kelimesiyle aynıdır.


Bu gibi kelimeler hakkında bilmek daha fazla şey:

https://xkcd.com/1133/

http://splasho.com/upgoer5/#


7
Bu yüzden, bilgisayardaki kullanıcının kelimelerini, büyük sözcükteki tüm kelimelerin büyük sözcükteki olup olmadığını görmek için büyük kelimeye mi kontrol edin?
Geobits

24
Belki de sadece benim, ama bunu okumayı zor buldum.
Alex A.

8
Basit konuşmada bir özet vermek, ardından "gerçek" İngilizce'de gerçek bir özellik vermek daha iyi olabilir.
Geobits

2
Sözlüğün bir dosyadan okunması gerekiyor mu? Bu düpedüz birkaç dili hariç tutabilir.
Dennis,

1
Programda zor kullanılan her kelime için bir ceza
Beta Decay

Yanıtlar:


6

CJam, 41 bayt

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

Bu, most used.txtCJam göreceli yolları işleyemediğinden, kök dizinde olan oldukça açık olmayan varsayımı yapar .

Alternatif olarak, aşağıdaki web tabanlı çözümlere sahibiz (78 ve 29 bayt):

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

Bunu CJam'da yapmanın "uygun" yolu, her iki girişi de STDIN'den (ilk satırdaki giriş, ikinci sözlükten gelen) 18 baytta mümkün olacak şekilde okumak olacaktır:

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

CJam yorumlayıcısında son sürümü deneyebilirsiniz . (kalıcı bağlantı Chrome'da test edilmiştir)

Örnekler

$ 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
Drive url'deki tinyurl kodunu kısaltmak için kullanabilirsiniz
DeadChex

1
@MIWright Anladım. Bu ve dosyayı Pastebin'e yüklemek 12 bayt kurtardı. Teşekkürler!
Dennis,

7

R, 106 bayt

Zorluğu anlayıp anlayamadığından emin değil çünkü okuması zor.

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

Bu, bir dizgeyi kabul eden ve gerçek gibi veya gerçek olmayan bir şey döndüren bir bilgisayar öğesinin adsız bir bölümünü oluşturur.

Ungolfed + açıklama:

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))
}

İlham olayı için Dennis'e teşekkür ederim.


2
Gibi bir şey part-of-a-computer-thing(s){...}bonus puan değerinde olmalıdır.
Dennis,

@Dennis: Bu nasıl? :)
Alex A.

Çok daha iyi!
Dennis

3

Python 3, 148 bayt

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

Çıkışlar TrueveFalse

Örnekler

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

Bu don'tdoğru bir girişi işleyecek mi?
Alex A.

@AlexA. Döner True. Bu doğru mu?
Beta Decay,

most used.txtYeni çizgilerle ayrılmanızın bir nedeni var mı? Bunun nasıl çalıştığından% 100 emin değilim, ancak dosyadaki her bir kelimeye ayırmaya çalıştığınızı hayal ediyorum?
DeadChex

@DeadChex Verilen metin dosyası ile ayrılan nedir? Bir SSL hatası atmaya devam ettiği için erişemiyorum.
Beta Decay,

1
Soru, “Her bilgisayarın arasında bir boşluk bulunan on yüz kelimenin tümünü okuyabilecek bir bilgisayarın okuyabileceği bir şey var” diye
yazıyor

2

Pyth, 35 bayt

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

Testler, yukarıdaki dosyanın bulunduğu yer common.pyth

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

Açıklama:

!-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 bayt

Dosyanın geçerli dizinde olduğunu varsayar.

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

Çevrimiçi deneyin!

İlk satır, normalleştirici ve dizgelerin listesine ayırma yardımcı fonksiyonunu tanımlar, s :

s←s ,  aşağıdaki işlevin
819⌶ küçük harfli
' '(sonucudur, sol argüman olarak bir boşlukla birlikte…  sol argümanın  PCRE yerine  kullanılan  argümanların birleşmesine  eşit  olduğu her öğeden önce kesilen  argümanların
1↓¨ her birine bir tane bırakın boşluk → boşluk, sözcük dışı karakter → hiçbir şey
,
⊂⍨

=
,
)
'[- ]' '\W'⎕R' ' ''

∧/(... ) o her doğrudur
s normalize ve bölünmüş
 metin girişi
 üyeleridir
s normalize ve bölünmüş
 birinci elemanın
⎕NGET'most used.txt' dosyasının (içerik, yeni satır tarzı, kodlama)


0

JavaScript (ES7), 161 bayt

(Soru ES7 spesifikasyonunu önceden belirlediği için yarışmaz)

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,"")))))

Çalışan bir Snippet oluşturmak için kullanabileceğim dosyanın bir kopyası çevrimiçi olan var mı?


Sanırım çıkarmadan 22 byte, çıkarmadan then7 byte kaydedebilirsiniz alert.
Titus,

Ayrıntılı bilgi verebilir misiniz @Titus? Bunun her adımı bir söz verir, bu nedenle thens, çözüldüklerinde sonraki kodu çalıştırmaları gerekir.
Shaggy

ES7'ye aşina değilim; yanlış yönde düşünüyordum. Ancak girişi listede olmayan tüm kelimelere indirgerseniz, daha kısa bir şeyle karşılaşabilirsiniz. PHP'nin JS'yi neredeyse% 40 oranında yenebileceğinden şüpheliyim.
Titus,

Evet, orada kesinlikle iyileştirme yapılacak bir yer var; Bu benim son meydan okumaydı ve beynim vardı bu yüzden yarın tekrar ziyaret etmek için elimden geleni yaptım. Ne yazık ki, sadece bir dosyanın içeriğine ulaşmak için gereken sözler zinciri, JS'yi PHP'nin beğenisine karşı bu zorluklarda dezavantajlı hale getiriyor ancak yine de XHR kullanmanın alternatifinden daha iyi.
Shaggy

0

PHP, 101 bayt

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

STDIN'den girdi alır tek satır Sözlük varsayar
ile çıkışları 1falsy için (hata), 0truthy için (Tamam). İle koş -R.

Girdiyi sözcük olmayan karakterlere göre ayır, sonuçtaki dizi (sözcükler)
arasında dolaş : Kelime sözlüğündeyse devam et; Başka exit(1).
örtük exit(0).

veya basitçe söylemek gerekirse:

birbiri ardına bir kelime: Eğer kelime en çok kullanılan kelimelerdeyse, devam et; aksi halde geri dön 1. geri dön 0.

ve: En çok kullanılan kelimelerin önünde ve sonunda birer boşluk varsa, iki puan kazanabilirim.


-1

Java, 248 bayt

İfade ile bir argüman olarak geçti.

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);}

giriş çıkış:

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

Aralıklı ve sekmeli:

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);
}

İhtiyacı olanı ithal etmenin ne demek istediğini kastediyorsun ?
Beta Decay

@Beta, bazı fonksiyonlar kullanırım ki, eğer bu fonksiyonu bir programa koyacak olsaydın (yani java.io.*ve java.util.*),
pythons

3
Peki, bu ithalatları bayt sayınıza eklemelisiniz. Python'daki içe aktarma ifadelerini hariç tutamazsınız, bu yüzden Java'da hariç tutamazsınız
Beta Decay

@BetaDecay Programı tweaked, daha fazla ithalat gerekli
DeadChex
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.