Sarı bir tahtaya iki yol saptı (bölüm 2)


25

Bu serinin ikincisi, üçüncüsü sarı ahşabın içinde dağılmış iki yoldur (bölüm 3)

Bu, önceki bir maden mücadelesi olan sarı ahşaptan (bölüm 1) ayrılan İki yoldan oluşuyor . Oldukça iyi karşılandı ama aynı zamanda oldukça önemsizdi (52 byte'lık bir Java cevabı!) Bu yüzden daha karmaşık bir şey yaptım ...

İlham

Bu meydan okuma Robert Frost'un ünlü şiiri, "Alınmamış Yol" dan ilham aldı:

İki yol sarı bir tahtaya saptı,
Ve üzgünüm ikisini de seyahat edemedi
Ve bir gezgin olarak, uzun süre durdum
Ve elimden
geldiğince aşağı baktım ;

... 2 paragraf kesilmiş ...

Bunu bir iç
çekimle söyleyeceğim Bir yerde
yaşlanıp yaşlanacağım, bundan dolayı: Tahtaya iki yol ayrıldı ve ben -
daha az seyahat ettiğim birini aldım,
Ve bu her şeyi değiştirdi.

Sondan ikinci satıra dikkat edin I took the one less traveled by,. Amacınız string girişinizde en az seyahat ettiğiniz yolu bulmak. Birbirinden farklı olan 2 değerden birini, daha az gidilen yollara gitmek için hangi yöne çevirmeniz gerektiğini bildirmeniz gerekir. Yol çatallaşınca (altıgen izleri sayılara dönüşür) kesiştesiniz. Oradan, rakamlardan oluşan 2 yol olacaktır. Rakamları en düşük toplamı olan yol, alınmayan yol olacaktır. Alınmayan yolun daha büyük bir yola ancak daha düşük bir yol toplamına sahip olabileceğini unutmayın. İşte alınmamış yol için "sol" veya "sağ" yazan bir programdan bazı örnekler / test durumları:

 1     2
  1   2
   1 2
    #
    #
    #
left (3 < 6)


 1     2
  2   2
   1 1
    #
    #
    #
left (4 < 5)


 12    2
  11  2
   1 1
    #
    #
    #
right (6 > 5)


 99   989
  99  89
  99 99
  99 99
    #
    #
    #
   # 
left (72 < 79)


1111 1110
 001 111
  11 11
  11 11
    #
   ##
  ##
 ##  
left (9 < 10) (Note: 1111 is interpreted as 1+1+1+1=4, not 1111=1111)


1       1
 0     1
  1   1
  1   1
  1   1
  1   1
   1 1 
    #
    #
    #
     #
      #
left (6 < 7)


1   1 
 0   1  
  1   1
  1   1
  1   1
  1   1
   1 1 
    #
    #
    #
     #
      #
left (6 < 7)

Düşünülecek ve hatırlanacak şeyler

  • Her zaman 2 yol olacak. Ne fazla ne az.
  • Bir seferde STDIN'den bir satır, LF karakterleri içeren bir dize veya değişmez ters eğik çizgi ve bir n içeren bir dize girişi alabilirsiniz. Başka bir şekilde giriş yapmanız gerekiyorsa, yorumlarda onay isteyin.
  • Geçersiz giriş veya bağlı yollar hakkında endişelenmenize gerek yok. Bunlar hiçbir zaman programınıza / işlevinize girilmez.
  • Giriş, dilinizin dize sınırından daha az genişlikte veya yükseklikte herhangi bir uzunlukta olabilir.
  • #Aynı satırda asla bir ve bir sayı olmayacak .
  • Yoldaki tüm rakamlar 0 ila 9 arasındaki pozitif tam sayılardır.
  • İzleyen bir yeni satır ile giriş veya çıkış yapılabilir.
  • Örnek için aşağıdaki JS ES6 cevabıma bakın .
  • 2 yol arasında her zaman en az 1 boşluk olacaktır.
  • 2 yol, her harita için her zaman aynı yüksekliğe sahip olacaktır, ancak diğer haritalarda farklı olabilir.
  • Belirli bir test durumuyla karıştıysanız, lütfen bana söyleyin.
  • 1111, 1111 = 1111 değil, 1 + 1 + 1 + 1 = 4 olarak yorumlanır. Harita, rastgele uzunluktaki sayılar değil, tek basamaklı sayılar dizisidir.
  • Bu , yani bayt cinsinden en kısa cevap kazanır!
  • Standart boşluklar yasaktır

Bu meydan okuma hakkında herhangi bir sorunuz varsa, yorumlarda bana sorun ve iyi şanslar!


Hey, tüm cevapları ve bayt sayısını $("div > h1").map(function(){return $(this).text()}).get().join("\n");konsolunuza yapıştırarak görebilirsiniz !
programcı5000

1
İşte beyaz boşluk kaldırılmış ve üstü çizili çarpıtılmış cevapları görmezden gelen alternatif bir sürümlet answers = $('div > h1').map(function(){return $(this).clone().children(':not(a)').remove().end().text().replace(/\s+/g,' ').trim()}).get();answers.splice(0, 1);answers.join('\n');
David Archibald

2
A # altıgen değil ...
user253751

1
" ama aynı zamanda oldukça önemsizdi (52 byte'lık bir Java cevabı!) " 43 byte. ;)
Kevin Cruijssen

Yine mi kapanıyor? Senin sorunun ne?
Matthew Roh

Yanıtlar:


2

05AB1E , 21 15 bayt

Sol için 0 , sağ için 1 çıkışlar .

|vy#õK€SO})øO`›

Çevrimiçi deneyin!

açıklama

|v                # for each line in input
  y#              # split on spaces
    õK            # remove empty strings
      €S          # split each string into a list of chars
        O         # sum each sublist
         }        # end loop
          )ø      # wrap stack in a list and zip
            O     # sum each sublist (side of the tree)
             `›   # compare left to right

11

Retina , 28 bayt

\d
$*
%r`1\G
-
Os`.
+`-1

1+

Çevrimiçi deneyin!

0Sola ve 1sağa yazdırır . Hiçbir çizgide iz bırakmayan boşluk olmadığını varsayar.

açıklama

\d
$*

Her basamağı Nbir sayıya dönüştürün N.

%r`1\G
-

Her bir satır ( %), \Gbaştan sona ( r) arka arkaya gelenleri ( ) eşleştirin ve her birini değiştirin -(yani sağ dalı -s'ye çevirin ).

Os`.

Tüm karakterleri sıralayın, böylece hepsi -doğrudan tümünün önünde olur 1.

+`-1

Bir çift -ve tekrar tekrar iptal edin 1.

1+

En az bir tane eşleştirmeyi deneyin 1(öyleyse, soldaki yolda daha fazla ağırlık vardı).



7

Çip , 216 bayt

 EZ,Z~.
E~]x-.|
F].>vm'
Ax]}#----------------.
Bx]}#---------------.|z.
Cx]}#------------.,Z|##' E
Dx]}#---------.,Z|`@@('A~^~t
 E.>#------.,Z|`@@-('
A~S`#v--.,Z|`@@-('
*f,--<,Z|`@@-('
e |,Z|`@@-('
,Z|`@@-('
>@@-('
a

Çevrimiçi deneyin!

1. bölümün cevabından biraz daha büyük ...

genel bakış

Chip, gerçek devreden ilham alan bir 2D dilidir ve bir bayt akışındaki her bir baytın bileşen bitleriyle ilgilidir.

Bu çözüm, gördüğü basamakların akan toplamını tutar, girdi boşluk işaretini her boşlukta karşılaştığında çevirir, sonra ilkini sonlandırır #. Yani, giriş için

 11   12
  2   2
   1 1
    #
    #
    #

Anlaştık 1 + 1 - 1 - 2 + 2 - 2 + 1 - 1 = -1. Sonucu işaret çıktı olarak verilir, negatif bir sayı sonucu üretir 1ve pozitif 0.

Bu nedenle, çıktının 1sol yolun daha az alındığı ve 0sağ anlamına gelir.

açıklama

Yüksek düzeyde, bu nasıl çalışır:

İle ana diyagonal @Elemanlar akümülatör, çıkış aaltta karar verilir . (Sekiz çift @sekiz bit anlamına gelir, ancak en yüksek bit işarettir, bu nedenle bu çözüm +127 veya -128 maksimum farkı kaldırabilir. Yarı yolda taşma, tamamlamadan geri döndüğümüz sürece tamamdır.)

Gibi başlayan dört satır Ax]}#-- ... girişi okumak ve bir rakam olması durumunda, bunu (varsa) olumsuzlamak ve değeri ekleyicilere aktarmaktır.

İlk üç satır bir rakama mı yoksa bir boşluk aralığına mı bakacağımıza karar verir ve rakamların ihmal edilmesi gerekip gerekmediğini takip eder.

Girdilerin altında kalan ve sondaki sağdaki öğeler kalan sonlandırma koşulunu ele alır ve çıktıyı ASCII'ye eşler (böylece karakterleri '0'veya '1'değerleri yerine 0x0ya da değerleri alırız ya da 0x1. dahil ettik.)


2
Kodun birbirinden farklı iki yol gibi görünmesini seviyorum.
Laikoni

@Laikoni Fark etmemiştim, bu çok havalı :)
Phlarx

4

JavaScript (ES6), 55 bayt

x=>x.replace(/\d(?=.*( )|)/g,(d,s)=>t-=s?d:-d,t=0)&&t<0

Sondaki her satıra boşluklar ve çıkışlar vardır varsayar trueiçin right, falseiçin left. İşin püf noktası girdideki her rakamla eşleşmektir ve aynı satırda ondan sonra bir boşluk varsa, toplamdan çıkarın; Aksi takdirde, toplamı ekleyin. Son toplam 0'dan küçükse, doğru yol daha az seyahat eden yoldur ve bunun tersi de geçerlidir.

Denemek:

f=x=>x.replace(/\d(?=.*( )|)/g,(d,s)=>t-=s?d:-d,t=0)&&t<0
<textarea placeholder = "paste in a map here..." oninput = "document.querySelector('div').innerText = f(this.value)"></textarea>
<div></div>


Başına bir x=ifade koymanız gerekir , çünkü ifadelere izin verilmiyor, sadece değişken ve tüm programlar olarak saklanan fonksiyonlar var.
programcı5000

@ programmer5000 Neden? Varsayılanları geçersiz kılmak biraz garip görünüyor ve bu sorunun söz konusu olduğunu göstermiyor gibi görünüyor.
Buğday Sihirbazı


4

Python 3 , 85 94 bayt

import re
g=lambda s,i:sum(map(int,''.join(re.findall('\d+',s)[i::2])))
lambda s:g(s,0)>g(s,1)

Çevrimiçi deneyin!

Küfürler! Sorunu yeterince yakın okumadım. Bir düzeltme ( ''.join()) eklendi, ancak 9 bayt.


Çok yakın! İyi yakala, teşekkürler!
Datastream


2

Retina , 180 bayt

Bayt sayısı, ISO 8859-1 kodlamasını varsayar.

^(?=( *(0|(1|(?<3>2|(?<3>3|(?<3>4|(?<3>5|(?<3>6|(?<3>7|(?<3>8|(?<3>9))))))))))+.+¶)+)(.+ (0|(?<-3>1|(?<-3>2|(?<-3>3|(?<-3>4|(?<-3>5|(?<-3>6|(?<-3>7|(?<-3>8|(?<-3>9))))))))))+¶)+ *#

Çevrimiçi deneyin!

Yalnızca regex çözümü de deneyebileceğimi düşündüm (yukarıdakiler yalnızca kullanım dışında, doğru yolun alınması gereken girdilerle eşleşen düz bir .NET regex'idir). için bir kısaltma olarak \n).

Can sıkıcı derecede tekrarlayan bir şey, ancak olası her basamağı ayrı ayrı ele almanız gerektiğinde olan budur.

Çözüm, dengeleme gruplarının oldukça yalındır bir uygulamasıdır : ilk önce her bir rakam için Nyakalayıcıları yığının üzerine iterek sol daldaki haneleri 3toplarız N. Daha sonra , sağ daldaki her hane için #istif süresinden çıkarken, ulaşmaya çalışırız . Bu, yalnızca sol daldaki hane sayısı sağ daldaki sayıdan büyükse mümkündür (boş bir yığından çıkamazsınız).3 NN


.NET regex'lerine aşina değilim, ancak bir karakter kümesi yapamazsınız: [0-9]tüm rakamlarla eşleşecek \dmi?
programcı5000

@ programmer5000 Elbette, ama sonra onları toplamak için kaç tane yakalamam gerektiğini belirlemek için aralarında ayrım yapamıyorum.
Martin Ender

2

JavaScript (ES6), 106 104 bayt

s=b=>(b=b.split`\n`,c=0,d=0,b.forEach(a=>{a=a.match(/\d+/g)||[],c+=+(a[0]?a[0]:0),d+=+(a[1]?a[1]:0)}),c<d)

s=b=>(b=b.split("\n"),c=0,d=0,b.forEach(a=>{a=a.match(/\d+/g)||[],c+=+(a[0]?a[0]:0),d+=+(a[1]?a[1]:0)}),c<d)

struealınmayan yol solda ise dönen bir fonksiyondur . Ungolfed:

var proc = function(str){
    str = str.split("\n");
    var left = 0;
    var right = 0;
    str.forEach(item=>{
        var match = item.match(/\d+/g) || [];
        console.log(match);
        left += +(match[0] ? match[0] : 0);
        right += +(match[1] ? match[1] : 0);
    });
    return left < right;
};

s=b=>(b=b.split`\n`,c=0,d=0,b.forEach(a=>{a=a.match(/\d+/g)||[],c+=+(a[0]?a[0]:0),d+=+(a[1]?a[1]:0)}),c<d)
<textarea placeholder = "paste in a map here..." oninput = "document.querySelector('div').innerText = s(this.value)"></textarea>
<div></div>


Umarım birileri bundan daha iyi bir puan alabilir ...
programmer5000

Mücadele kabul edildi @ programmer5000
David Archibald

@DavidArchibald birisi zaten yaptı, ancak yeni bir cevap için minnettar olurum. Serinin üçüncü ile ilgileniyor musunuz ?
programcı5000

emin. 3 olduğunun farkında değildim
David Archibald

2

Güç kalkanı , 80 bayt

$args-split'\s|#'-ne''|%{$a+=(($i=[char[]]$_-join'+'|iex),-$i)[($x=!$x)]};$a-gt0

Çevrimiçi deneyin!

(Sadece Python cevapları altında gıcırtı.: D)

TrueSol yol için çıktılar veFalse sağ yol için .

Girdiyi `n, "değişmez bir ters eğik çizgi ve bir n" içeren bir dize " nin PowerShell eşdeğeri olan veya bir değişmez satırlı dize olarak eşdeğer bir dize olarak alır. Daha sonra -splitbu girdiyi \s(yeni satırlar da dahil olmak üzere) açarız #ve tüm boş sonuçları filtreleriz -ne'', bu yüzden sadece bir rakam hanesiyle kalırız. Bunlar bir döngüye beslenir |%{...}.

Her yinelemede önce mevcut elemanı alırız , onu $_bir chardizi olarak atarız, -joinbir artı işaretiyle birlikte kullanırız +ve onu iex(kısa Invoke-Expressionve buna benzer eval) yönlendiririz. Bu depolanır, $iböylece yolun bu belirli parçasındaki rakamları doğru şekilde toplarız. Sonra onu ve negatifini bir dizinin iki elemanı olarak kullanırız.($i, -$i) , bir Boolean değerini ileri geri çevirerek dizine eklenen . Anlamı, bu döngü boyunca ilk yineleme, ilk sol yol öbeği, içine dizin -$i; bir dahaki sefere alacağız $i; ve bunun gibi. Bunlar birikmiş$a ile +=.

Sonunda, olup olmadığını değerlendiriyoruz $a olduğunu -greater than 0. Eğer öyleyse, o zaman sağ yol daha büyük bir toplamı, aksi takdirde sol yol daha büyük bir toplamı vardı. Bu Boolean sonucu boru hattında bırakılır ve çıktı kesindir.


2

CJam , 19 18 bayt

qN/Sf%z{'1*:~:+}/>

Çevrimiçi deneyin!

Baskılar 0 sol için ve1 sağa .

açıklama

q      e# Read all input.
N/     e# Split into lines.
Sf%    e# Split each line around runs of spaces.
z      e# Transpose to group each branch.
       e# Note that each branch will have the same number of digit segments
       e# now but the first branch will also have all the #s at the end in
       e# separate segments.
{      e# For each branch...
  '1*  e#   Join the segments into a single string with 1s as separators.
       e#   This will add the same number of 1s between digit segments in
       e#   both branches (which won't affect their relative sum) and it 
       e#   will also insert a 1 before each # in the first branch.
  :~   e#   Evaluate each character. The digit characters are simply turned
       e#   into their values, but # is the exponentiation operator in CJam.
       e#   This is why we inserted those additional 1s, because 1# is a no-op.
  :+   e#   Sum the digits in the branch.
}/
>      e# Check whether the left branch's sum is greater than the right one's.

1

Mathematica, 80 77 bayt

Martin Ender'e 3 bayt kaydettiği için teşekkürler!

#<#2&@@Total@Partition[Tr/@ToExpression[Characters@StringSplit@#/."#"->0],2]&

Girdi olarak newline ayrılmış bir dize alarak ve doğru yolu Truealmak için sol yolu almaya dönen saf işlev False. Lanet olası uzun Mathematica komut isimleri; bu 10 belirteç gibidir.


0

Pip , 19 18 bayt

LR+XDax:-x+$+$0SGx

Girdiyi komut satırında tek bir dize olarak alır (gerçek bir komut satırında çalıştırılırsa yeni satırlardan alıntı yapılması ve kaçması gerekir). -1Sol 1için çıkışlar , sağ için.Çevrimiçi deneyin!

açıklama

Rakamların akışları üzerinde döngüler, rakam toplamlarını bir topluluğa eklemek. Her seferinde taksitin işareti değiştirilir, sonuçta soldaki değerler negatif ve sağdaki değerler pozitifdir. Sonra son taksinin ( -1veya 1) işaretini basarız .

                    a is 1st cmdline arg; XD is regex `\d`; x is "" (implicit)
                    Note that "" in a math context is treated as 0
  +XD               Apply regex + to XD (resulting in `\d+`)
LR   a              Loop over matches of that regex in a:
             $0      Regex match variable containing the full match
           $+        Sum digits by folding on +
      x:-x+          Swap the sign of the tally and add this sum
               SGx  After the loop, print the sign of the tally

0

Haskell , 64 bayt

g=sum.map fromEnum
f(a:b:r)|a>"#"=g a-g b+f r|1<3=0
(>0).f.words

Çevrimiçi deneyin! Kullanım: Anonim işlev (>0).f.words, yeni satırlarla ayrılmış bir dizgeyi argüman olarak alır ve Falsesola ve Truesağa döndürür .

Açıklama:

Bir girdi verilen

 99   989
  99  89
  99 99
    #
    #
   # 

dizesi olduğunu " 99 989\n 99 89\n 99 99\n #\n #\n #", daha sonra wordstüm yeni satır ve boşlukları şeritler ve kalan dizeleri listesini döndürür: ["99","989","99","89","99","99","#","#","#"]. İşlev f, ilk iki öğeyi ave bbu listeden alır ve a"#" dizesiyle karşılaştırarak bir sayı dizisi olup olmadığını kontrol eder . (Char Çünkü '#'haneli karakter tüm küçüktür '0', '1'... bir rakam ile başlayan her dize daha sözlük sırasında büyük olacaktır "#".) İşlevi gkendi ASCII karakter koduna Dizgedeki her kömürü haritalar ve bunların toplamını döndürür. In böylece, negatif ve hidayetine aksi olumlu olacak sonuç sıfırdan büyükse kontrol eder eğer.f biz uygulamak giçin ave bve bilgi işlem g a - g bsol yolu eksi sağ birinin değerinin değeridir, ve bir özyinelemeli görüşmesine ekleyinfAşağıdaki satırları işlemek için. Eğer sol yol daha fazla hareket ederse, sonuçf(>0)


0

Python 3 , 84 bayt

Mevcut tüm Python başvuruları fonksiyonlar olduğundan, tam bir programa katkıda bulunacağımı düşündüm.

x=0
try:
 while 1:
  for n in input().split():x=-x+sum(map(int,n))
except:print(x>0)

Aksi takdirde Truesol yol daha az hareket ederse yazdırır False. Çevrimiçi deneyin!

Her giriş satırı için, bu boşluk beyaza bölünür, sonuçta elde edilen her bir öğenin basamağını toplar ve her adımda takma izini çevirirken bunu bir takma ekler. Girdi çizgisini okumaya devam eder, bir #noktaya isabet edinceye kadar , bu noktada map(int,n)bir istisna ortaya çıkar Trueve tally pozitifse ve Falseaksi takdirde basarsak döngüden çıkarız .


0

Toplu iş, 169 bayt

@echo off
set/as=0
:l
set/pr=
if not %r: =%==# call:c - %r%&goto l
cmd/cset/a"s>>9
exit/b
:c
call:r + %3
:r
set/as%1=%2%%10,d=%2/10
if %d% gtr 0 call:r %1 %d%

0Sola -1doğru yazdırır . Not: Birini bulana kadar satırları okur ve sol ve sağ basamaklar sağ basamakları ekler ve sol basamakları çıkarır. Sonunda işaret işareti çıkarmak için sonuç kaydırılır.# , sonra okumayı durdurur. Yol toplamlarındaki fark 511 ile sınırlıdır (daha büyük farklılıkları desteklemek için 1 bayt ekleyin). Her yolun her satırında en fazla 9 basamak (herhangi bir sayıda satırı destekler). Açıklama: Eklenecek basamakları işlemek için alt rutin ve ardından ilk iki parametreyi işlemek için aşağıya düşer. Bu, anlamına gelird rutin iki parametre alır: ekleme veya çıkarma ve rakam (lar). Son haneyi modulo ile 10, kalan haneleri 10'a bölerek ayıklar ve kalan haneler varken özyinelemeli olarak çağırır. alt yordamın parametreleri ile .c rutin üç parametre alır: eklemek veya çıkarmak, eklenecek veya çıkartılacak basamaklar ve eklenecek diğer basamaklar. Çağırırdc-


0

Oktav, 46 bayt

@(a)diff((a(:)-48)'*(bwlabel(a>35)(:)==1:2))<0

Çevrimiçi deneyin! 2D karakter dizisini agirdi olarak alan bir işlev .

Açıklama:

a=

    1   1  
     0   1 
      1   1
      1   1
      1   1
      1   1
       1 1 
        #  
        #  
        #  
         # 
          #

a > 35                   %convert the matrix to a binary matrix
                         %where there is a number corresponing
                         %element of the binary matrix is 1.

*   *  
 *   * 
  *   *
  *   *
  *   *
  *   *
   * * 

bwlabel(a>35)            %label each connected component. 


1   2  
 1   2 
  1   2
  1   2
  1   2
  1   2
   1 2 

B=bwlabel(a>35)(:)==1:2  % a binary `[n ,2]` matrix created 
                         % each column related to one of labels

A=(a(:)-48)'             % convert array of characters to array of numbers 

A * B                    % matrix multiplication that computes 
                         % the sum of numbers under each label

diff(A*B)<0              % check if the left is grater than the right

0

Java 7, 219 216 bayt

boolean c(String s){int l=0,r=0;for(String x:s.split("\n")){l+=f(x,0);r+=f(x,1);}return l>r;}int f(String x,int i){if(x.contains("#"))return 0;int n=0;for(int c:x.trim().split("\\s+")[i].getBytes())n+=c-48;return n;}

Bu sefer 52 bayttan biraz daha uzun . ;)
Ve yine falsesağa ve truesola döner .

Açıklama:

boolean c(String s){              // Method with String parameter and boolean return-type
  int l=0, r=0;                   //  Right and left counters
  for(String x : s.split("\n")){  //  Loop over de lines
    l += f(x,0);                  //   Add all left digits to the left-counter
    r += f(x,1);                  //   Add all right digits to the right-counter
  }                               //  End of loop
  return l>r;                     //  Return whether the left-counter is larger than the right-counter
}                                 // End of method

int f(String x, int i){           // Separate method with String and integer parameters, and int return-type
  if(x.contains("#"))             //  If the current line contains "#"
    return 0;                     //   Simply return 0
  int n=0;                        //  Counter
  for(int c :                     //  Loop over the digits by
              x.trim()            //    first removing leading and trailing whitespaces
              .split("\\s+")      //    then split them right in the middle
              [i]                 //    then pick either the left or right side based on the int index parameter
              .getBytes())        //    and convert that String to a byte-array
    n += c-48;                    //   For each of those digit-characters: add it to the counter
                                  //  End of loop (implicit / single-line body)
  return n;                       //  Return the counter
}                                 // End of separate method

Test kodu:

Burada dene.

class M{
  boolean c(String s){int l=0,r=0;for(String x:s.split("\n")){l+=f(x,0);r+=f(x,1);}return l>r;}int f(String x,int i){if(x.contains("#"))return 0;int n=0;for(int c:x.trim().split("\\s+")[i].getBytes())n+=c-48;return n;}

  public static void main(String[] a){
    M m = new M();
    System.out.println(m.c(" 1     2\n  1   2\n   1 2\n    #\n    #\n    #"));
    System.out.println(m.c(" 1     2\n  2   2\n   1 1\n    #\n    #\n    #"));
    System.out.println(m.c(" 12    2\n  11  2\n   1 1\n    #\n    #\n    #"));
    System.out.println(m.c(" 99   989\n  99  89\n  99 99\n  99 99\n    #\n    #\n    #\n   # "));
    System.out.println(m.c("1111 1110\n 001 111\n  11 11\n  11 11\n    #\n   ##\n  ##\n ##  "));
    System.out.println(m.c("1       1\n 0     1\n  1   1\n  1   1\n  1   1\n  1   1\n   1 1 \n    #\n    #\n    #\n     #\n      #"));
    System.out.println(m.c("1   1 \n 0   1 \n  1   1\n  1   1\n  1   1\n  1   1\n   1 1 \n    #\n    #\n    #\n     #\n      #"));
  }
}

Çıktı:

false
false
true
false
false
false
false
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.