Banach – Tarski Paradoksu


16

Banach-Tarski paradoksu, 3 boyutlu uzayda bir top verildiğinde, topu sınırlı sayıda nokta alt kümesine ayırabileceğinizi belirtir. Bu ayrık nokta setleri daha sonra ilk topun iki kopyasını üretmek için yeniden birleştirilebilir. O zaman, teorik olarak, iki özdeş topa sahip olursunuz.

Yeniden montaj işlemi, sadece yukarıda belirtilen nokta altkümelerinin hareket ettirilmesinden ve boşluk şeklinin değiştirilmeden döndürülmesinden oluşur. Bu, en az beş ayrık alt kümeyle yapılabilir.

Ayrık kümelerin tanım gereği ortak bir öğesi yoktur. Burada Ave Bilk topa herhangi iki nokta alt kümeleri arasında, yaygın olarak kullanılır Ave Bboş bir kümesidir. Bu aşağıdaki denklemde gösterilmiştir.

LaTeX temsili

Aşağıdaki ayrık kümeler için ortak üyeler boş bir küme oluşturur.

LaTeX temsili


Meydan okuma

Bir giriş ASCII "top" alabilir ve yinelenen bir "top" çıktısı alabileceğiniz bir program yazın.


Giriş

İşte örnek bir giriş topu:

      ##########      
   ###@%$*.&.%%!###   
  ##!$,%&?,?*?.*@!##  
 ##&**!,$%$@@?@*@&&## 
#@&$?@!%$*%,.?@?.@&@,#
#,..,.$&*?!$$@%%,**&&#
 ##.!?@*.%?!*&$!%&?## 
  ##!&?$?&.!,?!&!%##  
   ###,@$*&@*,%*###   
      ##########      

Her küre pound işareti ile (belirtilmiştir #tezler karakterlerden herhangi birlikte) ve dolgulu: .,?*&$@!%. Her giriş 22x10 karakter olacaktır (genişliğe göre yükseklik).


Kopya Oluşturma

İlk olarak, topun içindeki her noktaya içindeki indeksine göre numaralı bir nokta verilir .,?*&$@!%. Yukarıdaki örnek, bir kez numaralandırılmıştır:

      ##########      
   ###7964151998###   
  ##86295323431478##  
 ##5448269677374755## 
#75637896492137317572#
#21121654386679924455#
 ##1837419384568953## 
  ##85363518238589##  
   ###2764574294###   
      ##########      

Daha sonra, her nokta bir yukarı kaydırılır (dokuz bire gider):

      ##########      
   ###8175262119###   
  ##97316434542589##  
 ##6559371788485866## 
#86748917513248428683#
#32232765497781135566#
 ##2948521495679164## 
  ##96474629349691##  
   ###3875685315###   
      ##########      

Son olarak, her yeni nokta değeri karşılık gelen karakterine geri dönüştürülür:

      ##########      
   ###!.@&,$,..%###   
  ##%@?.$*?*&*,&!%##  
 ##$&&%?@.@!!*!&!$$## 
#!$@*!%.@&.?,*!*,!$!?#
#?,,?,@$&*%@@!..?&&$$#
 ##,%*!&,.*%&$@%.$*## 
  ##%$*@*$,%?*%$%.##  
   ###?!@&$!&?.&###   
      ##########      

Çıktı

Bu iki top daha sonra bu formda (ekvatorlarda dört boşlukla ayrılmış) yan yana çıkarılır:

      ##########                ##########      
   ###@%$*.&.%%!###          ###!.@&,$,..%###   
  ##!$,%&?,?*?.*@!##        ##%@?.$*?*&*,&!%##  
 ##&**!,$%$@@?@*@&&##      ##$&&%?@.@!!*!&!$$## 
#@&$?@!%$*%,.?@?.@&@,#    #!$@*!%.@&.?,*!*,!$!?#
#,..,.$&*?!$$@%%,**&&#    #?,,?,@$&*%@@!..?&&$$#
 ##.!?@*.%?!*&$!%&?##      ##,%*!&,.*%&$@%.$*## 
  ##!&?$?&.!,?!&!%##        ##%$*@*$,%?*%$%.##  
   ###,@$*&@*,%*###          ###?!@&$!&?.&###   
      ##########                ##########      

Not: Nokta değerlerinin ve sonraki karakterlerin kaydırılması, nokta alt kümelerini (karakter gruplamaları) yeniden birleştirmek için gerçekleştirilen dönüşlerin simgesidir.


Bitişik olması gerekiyor mu? üst üste verilebilir mi?
Mhmd

Bitişik olmalılar. İki 22x10 blok yatay olarak 4 boşlukla ayrılmalıdır. @Mhmd
Zach Gates

Programınızda işlevlere izin verilir. Program kendi başına yürütmelidir (bir kullanıcı girişi ile). @ETHproductions
Zach Gates

Her iki top da döndürülmemeli mi? Teoremi anladığım gibi, orijinal kalmaz, ancak iki yeni top alırsınız.
Paŭlo Ebermann

Evet, ancak bu düzenlemeyi yapma şansım olmadan önce bir yanıt gönderildi ve herhangi bir çözümü geçersiz kılmak istemedim. @ PaŭloEbermann
Zach Gates

Yanıtlar:


7

Pyth, 21 bayt

#++Jw*4d.rJ".,?*&$@!%

Çevrimiçi deneyin: Gösteri

Sonunda için bir kullanım çantası .r.

açıklama

#++Jw*4d.rJ".,?*&$@!%
#                       infinite loop
   Jw                   read a string from input and store it in J
     *4d                4 spaces
        .rJ".,?*&$@!%   rotate the chars of J using this char order
 ++                     combine the 3 strings (J, spaces, rotated) and print

Daha fazla giriş olmadığında sonsuz döngü kırılır.


7

Yakut, 65

10.times{b=gets;puts b.chop.tr(',?*&$@!%.','.,?*&$@!%')+'    '+b}

Stdin yerine bir dosyadan girdi alındığında harika çalışır:

ruby banach.rb < ball.txt

Öte yandan, topları elle stdin'e yazmak istiyorsanız ve çıktının sonunda olmasını istiyorsanız, bu 67 baytlık sürümü deneyin:

puts (0..9).map{b=gets;b.chop.tr(',?*&$@!%.','.,?*&$@!%')+'    '+b}

6

Matlab, 120

Matlab, dizeleri işlemek için en büyük dil değildir. \nher zaman iki karakter olarak kabul edilir, bu oldukça can sıkıcıdır ve sadece satır kesilmiş (satır kesilmiş?) bir dizeden bir matris yapamazsınız, bunu manuel olarak yapmanız gerekir. En azından her satırın aynı uzunluğa sahip olması nedeniyle boyut / dolgu ile ilgilenmek zorunda kalmadım.

a='.,?*&$@!%.';b=input('');b(b>90)=[];b=reshape(b',22,10)';c=b;for k=1:9;c(b==a(k))=a(k+1);end;disp([b,ones(10,4)*32,c])

Örnek Giriş:

'      ##########      \n   ###@%$*.&.%%!###   \n  ##!$,%&?,?*?.*@!##  \n ##&**!,$%$@@?@*@&&## \n#@&$?@!%$*%,.?@?.@&@,#\n#,..,.$&*?!$$@%%,**&&#\n ##.!?@*.%?!*&$!%&?## \n  ##!&?$?&.!,?!&!%##  \n   ###,@$*&@*,%*###   \n      ##########      '

Örnek çıktı:

      ##########                ##########      
   ###@%$*.&.%%!###          ###!.@&,$,..%###   
  ##!$,%&?,?*?.*@!##        ##%@?.$*?*&*,&!%##  
 ##&**!,$%$@@?@*@&&##      ##$&&%?@.@!!*!&!$$## 
#@&$?@!%$*%,.?@?.@&@,#    #!$@*!%.@&.?,*!*,!$!?#
#,..,.$&*?!$$@%%,**&&#    #?,,?,@$&*%@@!..?&&$$#
 ##.!?@*.%?!*&$!%&?##      ##,%*!&,.*%&$@%.$*## 
  ##!&?$?&.!,?!&!%##        ##%$*@*$,%?*%$%.##  
   ###,@$*&@*,%*###          ###?!@&$!&?.&###   
      ##########                ##########      

Not: Eğer girişi bu şekilde kabul edebilirsem:

['      ##########      ','   ###@%$*.&.%%!###   ','  ##!$,%&?,?*?.*@!##  ',' ##&**!,$%$@@?@*@&&## \n#@&$?@!%$*%,.?@?.@&@,#','#,..,.$&*?!$$@%%,**&&#',' ##.!?@*.%?!*&$!%&?## ','  ##!&?$?&.!,?!&!%##  ','   ###,@$*&@*,%*###   ','      ##########      ']

Sadece 88 karaktere ihtiyacım var:

a='.,?*&$@!%.';b=input('');c=b;for k=1:9;c(b==a(k))=a(k+1);end;disp([b,ones(10,4)*32,c])

4

Ruby, 102

IO.readlines(?a).map(&:chomp).each{|x|puts"#{x+' '*x.count(' ')+?\s*4+x.tr('.,?*&$@!%',',?*&$@!%.')}"}

Temel olarak, sadece trgirdi çağırıyor



4

CJam, 28 bayt

qN/{_".,?*&$@!%"_(+erS4*\N}%

Çevrimiçi deneyin

Açıklama:

qN/     Get input and split into lines.
{       Start loop over lines.
  _       Copy, since we need to output original.
  ".,?*&$@!%"
          List of characters, in order.
  _       Copy list of characters.
  (+      Rotate the list by popping first character and appending it.
  er      Transliterate.
  S4*     Create 4 spaces.
  \       Swap spaces between original and transliteration.
  N       Add newline.
}%      End of loop over lines.

4

Python 3,5, 96 89 88 bayt

s='.,?*&$@!%.  ##';i=1
while i:i=input();print(i,'  ',''.join(s[s.find(y)+1]for y in i))

Python 3.3, 103 96 95 bayt

s='.,?*&$@!%.  ##'
for i in input().split('\n'):print(i,'  ',''.join(s[s.find(y)+1]for y in i))

açıklama

Yolu nedeniyle Python 3.3 ve 3.5 ayrı olarak listelenir input()kolları yeni satırlar IDLE içinde değişti. Bu 8 bayt tasarruf oldu, bu da serin.

Yürütme ile ilgili not: IDLE kullanın. Bir terminal kullanırsanız, 3.3 için çözüm 3.5 ile aynıdır, ancak her ikisi de girişi çıkışla birlikte bırakır.

sPython'un negatif indekslemesinden yararlanmak için sembol dizesini ters çevirdim. Sonra girişteki her satır için, iki boşluk ve her sembolün bulunduğu satır önceki sembolüyle değiştirilir. Sadece iki boşluk koymamın sebebi ,bunun yerine kullandığım +, bu da basılı çıktıya boşluk ekliyor. Bu ,' ',bana bir bayt kurtardı +' '*4+.

Beni kurtardığın için teşekkürler 7 8 bayt. Boşlukları ve karmaları koymama izin s.findvermek s.rfindiçin değiştim s, böylece bir kontrol yapma ihtiyacını ortadan kaldırdım y in s. Ayrıca, bir alan kurtarıldı. DÜZENLEME: olarak değiştirildi, s.findçünkü artık varlığı bir dizin dışı sınır hatası hakkında endişelenmeden ##izin veriyor +1.


Nasıl input()değiştiğini açıklar mısın? 3.4 ve 3.5 belgeleri arasında herhangi bir fark bulamıyorum .
Kevin

Giriş dizesindeki yeni satırlar, tabiri caizse, girişi sonlandırır ve giriş kodunuzu yeniden çağırır. Python 3.3'te, yeni satırlar bozulmadan geçirilir. Değişiklik 3.3 ve 3.4 arasında olmalıdır.
El'endia Starman

Hayır, 3.3 doküman da aynı. Sanırım bu, muhtemelen bir sürüm yumrudan bir readline değişikliği. Readline olmadan derlerseniz, herhangi bir fark görmeyebilirsiniz.
Kevin

IDLE kullanıyorum, bu yüzden hatalı da olabilir. Bir terminalden çalıştırmayı deneyeceğim.
El'endia Starman

@Kevin: Ne kadar ilginç. Komut satırından, giriş çıkışla araya eklenmiş olmasına rağmen 3.5'te düzgün çalışır . 3.3 için, ilk satırsonundan hemen sonra kesiliyor. Metnin tamamını kopyaladım.
El'endia Starman

3

Retina , 45 39 bayt

.+
$0  ; $0
T`.,?*&$@!%;`,?*&$@!%. `;.*

Kodu tek bir dosyadan çalıştırmak için -sbayrağı kullanın .

Birinci aşama ayrılmış her satır, çoğaltır " ; ", elde etmek için

      ##########        ;       ##########
   ###@%$*.&.%%!###     ;    ###@%$*.&.%%!###
  ##!$,%&?,?*?.*@!##    ;   ##!$,%&?,?*?.*@!##
 ##&**!,$%$@@?@*@&&##   ;  ##&**!,$%$@@?@*@&&##
#@&$?@!%$*%,.?@?.@&@,#  ; #@&$?@!%$*%,.?@?.@&@,#
#,..,.$&*?!$$@%%,**&&#  ; #,..,.$&*?!$$@%%,**&&#
 ##.!?@*.%?!*&$!%&?##   ;  ##.!?@*.%?!*&$!%&?##
  ##!&?$?&.!,?!&!%##    ;   ##!&?$?&.!,?!&!%##
   ###,@$*&@*,%*###     ;    ###,@$*&@*,%*###
      ##########        ;       ##########

Daha sonra ikinci aşama sadece maçlarda bulunan karakterleri etkiler ;.*, yani her satırın sadece ikinci yarısı. Bu karakterler daha sonra aşağıdaki yazışmalarla çevrilir

.,?*&$@!%;
,?*&$@!%. 

İlk 9 çift, top ve son çift karakterleri "artırır", noktalı virgül başka bir alana dönüştürür.


2

Python 2, 77 bayt

while 1:r=raw_input();print r,'  ',r.translate(' % #@.$   & ? , '*3+'!*'*104)

2

Perl, 59 bayt

-pBir dosyaya kaydedilmesi gerektiğinden 56 bayt kodu artı 3 bayt .

chop($s=$_);$l=',?*&$@!%';eval"y/.$l/$l./";$_="$s    $_"

Örnek kullanım:

$perl -p ball.pl <<< '      ##########      
>    ###@%$*.&.%%!###   
>   ##!$,%&?,?*?.*@!##  
>  ##&**!,$%$@@?@*@&&## 
> #@&$?@!%$*%,.?@?.@&@,#
> #,..,.$&*?!$$@%%,**&&#
>  ##.!?@*.%?!*&$!%&?## 
>   ##!&?$?&.!,?!&!%##  
>    ###,@$*&@*,%*###   
>       ##########      
> '
      ##########                ##########      
   ###@%$*.&.%%!###          ###!.@&,$,..%###   
  ##!$,%&?,?*?.*@!##        ##%@?.$*?*&*,&!%##  
 ##&**!,$%$@@?@*@&&##      ##$&&%?@.@!!*!&!$$## 
#@&$?@!%$*%,.?@?.@&@,#    #!$@*!%.@&.?,*!*,!$!?#
#,..,.$&*?!$$@%%,**&&#    #?,,?,@$&*%@@!..?&&$$#
 ##.!?@*.%?!*&$!%&?##      ##,%*!&,.*%&$@%.$*## 
  ##!&?$?&.!,?!&!%##        ##%$*@*$,%?*%$%.##  
   ###,@$*&@*,%*###          ###?!@&$!&?.&###   
      ##########                ##########      

1

05AB1E (eski) , 21 bayt

|ʒD4ú".,?*&$@!%"DÀ‡«,

05AB1E'nin eski sürümünü kullanır, çünkü filtreyi yazdırmak için bir foreach olarak ʒörtük yolarak kullanmak mümkünyken, yeni sürümde, vaçık olan her bir for-döngüsü her bir ybayt daha uzun olmalıdır.

Çevrimiçi deneyin.

Açıklama:

|                      # Get the input-lines as list
 ʒ                     # For-each over the lines to print using the filter-builtin:
  D                    #  Duplicate the current line
   4ú                  #  Prepend 4 spaces to this copy
     ".,?*&$@!%"       #  Push this string
                DÀ     #  Duplicate it, and rotate its copy once towards the left
                      #  Transliterate the space-prepended string with these two strings
                   «   #  Append it to the original duplicated line
                    ,  #  And print with trailing newlines

Ayrıca 05AB1E (kredi yeni sürümünde çalışır Burada bir versiyon @Grimy ):

05AB1E , 21 bayt

TFD?4ú".,?*&$@!%"DÀ‡,

Çevrimiçi deneyin.

Açıklama:

TF                     # Loop 10 times:
  D                    #  Duplicate the (implicit) input-line
   ?                   #  Pop and print the copy without trailing newline
    4ú                 #  Prepend 4 spaces to the input-line
      ".,?*&$@!%"      #  Push this string
                 DÀ    #  Duplicate it, and rotate its copy once towards the left
                      #  Transliterate the space-prepended string with these two strings
                    ,  #  And print with trailing newlines

1
Eski olmayan 21: TFD?4ú".,?*&$@!%"DÀ‡,(girişin tam olarak 10 satır olması garanti edilir).
Grimmy

1
@ Grimy de ekleyecek. Ayrıca genişlik 26 karakter ₂jolduğu için güzel (aynı bayt olmasına rağmen) bir alternatif olduğu bulundu . :)
Kevin Cruijssen
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.