ค้นหาตัวเลขและคำนวณผลลัพธ์


22

วัตถุประสงค์

รับรายการป้อนข้อมูลของ6ตัวเลขที่แตกต่างกันพบว่าหมายเลข 3 a, bและcดังกล่าวว่าa × b = cมีaมี 2 หลัก, bมี 1 บาทและcมี 3 หลัก ด้วยวิธีที่ชัดเจนยิ่งขึ้นโปรแกรมของคุณต้องจัดเรียงตัวเลข 6 หลักเหล่านั้นในกล่องของภาพนี้:

ป้อนคำอธิบายรูปภาพที่นี่

หากมีมากกว่าหนึ่งวิธีแก้ปัญหาคุณสามารถส่งออกได้เลย

อินพุต

6 หลักที่แตกต่างกัน คุณอาจนำไปใช้ในวิธีที่เหมาะสมสำหรับภาษาของคุณ

เอาท์พุต

หมายเลข 3 a, และb cรูปแบบผลลัพธ์ค่อนข้างฟรีตราบใดที่หมายเลข 3 ถูกคั่นและพิมพ์ในลำดับเดียวกันเสมอ (แต่ไม่จำเป็นต้องเรียงตามลำดับa, b, c)

กรณีทดสอบ

1, 2, 3, 4, 5, 6 -> 54,3,162  
2, 3, 4, 5, 6, 7 -> 57,6,342 or 52,7,364

เกณฑ์การให้คะแนน

รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ


1
นั่นเป็นสิ่งแรกที่ฉันคิดว่าเมื่อฉันเห็นความท้าทายเช่นกัน @Dada ... ฉันขอแนะนำให้วางลงในกล่องทรายเพื่อรับข้อเสนอแนะก่อนโพสต์ :-)
Stewie Griffin

1
อินพุตรับประกันถึงผลลัพธ์ในการแก้ไขหรือไม่?
AdmBorkBork

1
ฉันได้แก้ไขข้อความของการท้าทายของคุณแล้วเล็กน้อยเพื่อให้ชัดเจน (ในความคิดของฉัน) ตรวจสอบให้แน่ใจว่าฉันไม่ได้เปลี่ยนเป้าหมายของการท้าทาย
ลดขนาด

1
ฉันยังคิดว่าความท้าทายต้องการชื่อที่ชัดเจนกว่านี้ แต่ตอนนี้ฉันไม่มีความคิด
ลดขนาด

1
ควรป้อนข้อมูลของ0,1,2,3,4,5ผลลัพธ์ใน13,4,052; ไม่มีทางออก หรือพฤติกรรมใด ๆ ก็โอเค?
Jonathan Allan

คำตอบ:


8

Brachylog (2), 10 ไบต์

p~c₃o.k×~t

ลองออนไลน์!

ช้าเกินไปที่จะทำงานในระยะเวลาที่เหมาะสม (ล่าม Brachylog ใช้เวลานานในการทำการคูณกับสตริงว่าง, ตัวเลข 4 หลัก, ตัวเลขติดลบ ฯลฯ โดยใช้ตัวแก้ไขข้อ จำกัด ที่ช้ามาก) ลิงก์ TIO ใช้อินพุตที่มีเพียง 3 หลักเท่านั้น (โปรแกรมนี้สามารถจัดการอินพุตที่มีตัวเลขใดก็ได้) นี่คือฟังก์ชั่นที่มีการป้อนข้อมูลเป็นตัวเลขที่ประกอบด้วยตัวเลขทั้งหมดที่ต้องการ (เช่น234567) - การขาดการซ้ำซ้อนในอินพุตหมายความว่าคุณสามารถใส่จุดใดก็ได้0ในตอนท้ายเพื่อหลีกเลี่ยงศูนย์นำหน้า - และผลลัพธ์เป็นรายการใน คำสั่งซื้อ[b, a, c](เช่น[6, 57, 342])

คำอธิบาย

p~c₃o.k×~t
p           Permute the digits of the input
 ~c₃        Split them into three groups
    o       Sort the three groups
     .      to produce the output, which must have the following property:
      k     all but the last group
       ×    when multiplied together
        ~t  produces the last group

ดังนั้นความต้องการในกลุ่มที่ 2, 1 และ 3 หลักไปที่ไหน เรารู้ว่ามี 6 หลักในอินพุตและกลุ่มเรียงตามลำดับ ขนาดที่เป็นไปได้เท่านั้นที่พวกเขาสามารถมีได้คือ [1, 1, 4], [1, 2, 3] หรือ [2, 2, 2] กรณีแรกเป็นไปไม่ได้ (คุณไม่สามารถคูณตัวเลข 1 หลักสองตัวเพื่อสร้างตัวเลข 4 หลักได้เนื่องจาก 9 × 9 เป็นเพียง 81) เช่นเดียวกับกรณีสุดท้าย (คุณไม่สามารถคูณสองตัวเลขสองหลักเพื่อ สร้างตัวเลข 2 หลักในขณะที่แม้กระทั่ง 10 × 10 ผลิต 100) ดังนั้นค่าส่งคืน[b, a, c]จะต้องมีความยาว 1, 2 และ 3 หลักตามลำดับดังนั้นa2 หลักbคือ 1 หลักและc3 หลักตามที่ร้องขอ


2
ดี ... ฉันยอมแพ้
ทำให้เสียชีวิต

8

JavaScript (ES6), 90 88 ไบต์

รับอินพุตเป็นอาร์เรย์ 6 หลัก ส่งคืนสตริงที่อธิบายถึงวิธีแก้ปัญหาที่เป็นไปได้ (เช่น'54*3==162') หรือออกด้วยข้อผิดพลาด 'เรียกซ้ำมากเกินไป' หาก (และเฉพาะในกรณีที่) ไม่มีวิธีแก้ปัญหา

f=(a,k=1)=>eval(s='01*2==345'.replace(/\d/g,n=>a[n],a.sort(_=>(k=k*2%3779)&2)))?s:f(a,k)

มันทำงานอย่างไร

นี่คืออัลกอริทึมที่กำหนดไว้ล่วงหน้า

กำหนดช่วงเวลาP=2และQ=3779ได้รับเลือกในลักษณะที่(k = k * P % Q) & 2รับประกันการจัดเรียงกลับเพื่อสร้างการเรียงสับเปลี่ยนที่เป็นไปได้ทั้งหมด 720 รายการของอาร์เรย์อินพุตเมื่อเวลาผ่านไป แม่นยำมากขึ้นการเรียงสับเปลี่ยนทั้งหมดได้รับการคุ้มครองหลังจาก 2798 ประเภท - ซึ่งควรอยู่ภายในขีด จำกัด การเรียกซ้ำของเบราว์เซอร์ทั้งหมด

เราฉีดแต่ละการเปลี่ยนแปลงในการแสดงออก01*2==345โดยการแมปตัวเลขไปยังรายการที่เกี่ยวข้องในอาร์เรย์

เราประเมินการแสดงออกนี้และทำการโทรซ้ำจนกระทั่งมันเป็นจริง

ทดสอบ


สมมติว่ารูปแบบเอาต์พุตยังคงใช้ได้ใช้-แทน==(และย้อนกลับ?:) เพื่อบันทึกไบต์
Neil

1
@ Neil ที่จริงฉันทำข้อเสนอแนะเดียวกันกับเหาะ ฉันอาจจะเล่นกอล์ฟมากกว่านี้ แต่ฉันต้องยอมรับว่าฉันชอบรูปแบบเอาต์พุตปัจจุบัน
Arnauld

คุณถ่อมตัวเพื่อหา 3379 หรือคุณใช้การคิดเชิงคณิตศาสตร์หรือไม่? ถ้าเป็นเช่นนั้นคุณสามารถหาวิธีได้หรือไม่ :)
Yytsi

@TuukkaX ไม่มีอะไรแฟนซีที่นี่จริงๆ ฉันแค่เพิ่มมันเกณฑ์ของฉันคือ 1) ตัวเลขน้อยที่สุดเท่าที่จะเป็นไปได้สำหรับ P และ Q และ 2) เรียงลำดับซ้ำน้อยที่สุดเท่าที่จะทำได้
Arnauld

6

Brachylogขนาด 17 ไบต์

p~c[Ċ,I,Ṫ]cᵐ.k×~t

ลองออนไลน์!

คำอธิบาย

p                   Try a permutation of the Input
 ~c[Ċ,I,Ṫ]          Deconcatenate it; the result must be a list of the form [[_,_],_,[_,_,_]]
          cᵐ.       Output is the list of integers you get when mapping concatenate on the
                      previous list
             k×~t   The first two ints of the Output, when multiplied, result in the third
                      int of the Output

3

05AB1E , 15 13 ไบต์

บันทึกสองไบต์ด้วยEmigna !

œJvy3L£Â`*Qi,

ใช้การเข้ารหัสCP-1252 ลองออนไลน์!

คำอธิบาย:

œ                 # Get all permutations of the input
 J                # Join them to get the numbers
  vy              # For each element in the list..
    3L            #   Push the list [1, 2, 3]
      £           #   Pops a and pushes [a[0:1], a[1:3], a[3:6]]
       Â`         #   Bifurcate and flatten
         *        #   Multiply the top two elements in the stack
          Qi      #   If equal to the third element..
            ,     #     Print the array

คุณสามารถแทนที่213Sด้วย3Lเนื่องจากใบสั่งไม่จำเป็นต้องเป็น2,1,3ไปตามข้อกำหนด
Emigna

ดีใจที่รู้ว่า£vectorulatively สะสม ... ถ้านั่นเป็นวิธีที่ถูกต้องที่จะบอกว่า
Magic Octopus Urn

3

Bash + coreutils, 70

for((b=1;b;));{
a=`shuf -ze $@`
b=${a:0:2}*${a:2:1}-${a:3:3}
}
echo $b

ไม่มีวิธีง่ายๆในการสร้างพีชคณิตทั้งหมด แทนที่จะสุ่มสร้างพีชคณิตและคำนวณจนกว่าเราจะหาอันที่ดี

เอาต์พุตอยู่ในรูปแบบA*B-C- นั่นคือนิพจน์ที่จะประเมินเป็นศูนย์เมื่อเรามีการเปลี่ยนแปลงที่ถูกต้อง

ลองมันออนไลน์



2

Python 2 , 105 ไบต์

lambda s:[(x[0],x[1:3],x[3:])for x in permutations(s)if eval('%s*%s%s==%s%s%s'%x)]
from itertools import*

ลองออนไลน์!

โซลูชัน 88 ไบต์พร้อมเอาต์พุตที่ยืดหยุ่นมากขึ้น

lambda s:[x for x in permutations(s)if eval('%s*%s%s==%s%s%s'%x)]
from itertools import*

ลองออนไลน์!
โดยที่ผลลัพธ์จะเป็น ['6', '5', '7', '3', '4', '2'] แทน '6', '57', '342'


2
คุณไม่ได้อยู่importที่จุดสูงสุด ... ส่ายหัว
mbomb007

@ mbomb007 ต้องทำงานกับ TIO ¯ \ _ (ツ) _ / ¯
Rod

คุณเป็นคนแรกที่ฉันเห็นว่าใครเป็นคนใส่f=หัว มันไม่ใช่เรื่องใหญ่
mbomb007

2

PHP, 110 ไบต์

มันจะไปถึงที่นั่น ... ในที่สุด ...

<?$v=$argv;unset($v[0]);do shuffle($v)&[$a,$b,$c,$d,$e,$f]=$v;while("$a$b"*$c!="$d$e$f");echo"$a$b $c $d$e$f";

Ungolfed:

<?
$v=$argv;
unset($v[0]);
do
  shuffle($v);
  [$a,$b,$c,$d,$e,$f]=$v;
while("$a$b"*$c!="$d$e$f");
echo"$a$b $c $d$e$f";


1

ES6 (Javascript) 85, 82, 79 ไบต์

ยอมรับอาร์เรย์ของตัวเลข (สตริง) ส่งคืนอาร์เรย์ 3 องค์ประกอบ[A,B,C]=> C=A*B

แข็งแรงเล่นกอล์ฟ

R=(w,[a,b,c,d,e,f]=w)=>f*(d+=e)^(a+=b+c)?R(w.sort(_=>Math.random()-.5)):[a,d,f]

การแก้ไข:

  • บันทึกอีก 3 ไบต์โดยการนำกลับมาใช้ใหม่dและaและกำจัด==(ขอบคุณ @Arnauld!)
  • บันทึก 3 ไบต์โดยใช้การมอบหมายการทำลายโครงสร้าง

ลองมัน !

R=(w,[a,b,c,d,e,f]=w)=>f*(d+=e)^(a+=b+c)?R(w.sort(_=>Math.random()-.5)):[a,d,f];

function generate(A) {
   console.log(R([...A]));
}
<input type="text" id="A" value="123456"/><button onclick="generate(A.value)">GENERATE</button>


คุณสามารถรับประกันได้ว่าการเรียงลำดับแบบสุ่มของคุณจะครอบคลุมการเรียงสับเปลี่ยนทั้งหมดหรือไม่
Neil

@ Neil หากคุณกำลังมองหาหลักฐานที่เป็นทางการที่เข้มงวดฉันไม่คิดว่าฉันจะให้คุณได้ แต่อย่างใดอย่างหนึ่งสังเกตุว่ามันส่งผลให้มีการกระจายตัวของพีชคณิตที่สม่ำเสมอ
zeppelin

1

Pip , 18 ไบต์

โค้ดขนาด 17 ไบต์, +1 สำหรับการ-Sตั้งค่าสถานะ

$/_=1FI_^@3,5MPMa

รับอินพุตเป็นสตริงของตัวเลขผ่านอาร์กิวเมนต์บรรทัดรับคำสั่ง เอาต์พุตอยู่ในลำดับ c, b, a ลองออนไลน์!

รหัสนี้จะแสดงผลโซลูชั่นทั้งหมดหากมีหลายรายการ หากจำเป็นต้องมีเอาต์พุตเพียงโซลูชันเดียวให้เพิ่มสามไบต์และปิดโปรแกรม(...0)การแก้ปัญหาแล้วเพิ่มสามไบต์และห่อโปรแกรมใน

คำอธิบาย

                   a is 1st cmdline arg (implicit)
              PMa  Compute all permutations of a
             M     To each, map this function:
          3,5       Range(3,5)--contains values 3 and 4
       _^@          Split the function argument at those indices
                    This transforms a string like 342657 into a list [342; 6; 57]
     FI            Now filter the list of split permutations on this function:
$/_                 Fold on division: takes 1st element and divides it by the rest
   =1               Compare the quotient with 1
                    This keeps only the permutations where the first number is the product
                    of the other two
                   Autoprint the list (implicit), with each sublist on a separate line
                   and space-separated (-S flag)

1

Ruby, 60 ไบต์

->x{x.permutation{|a|(eval a="%d%d*%d==%d%d%d"%a)&&puts(a)}}

พิมพ์วิธีแก้ปัญหาทั้งหมดเป็น "a * b == c"

ตัวอย่าง:

->x{x.permutation{|a|(eval a="%d%d*%d==%d%d%d"%a)&&puts(a)}}[[1,2,3,4,5,6]]
54*3==162

->x{x.permutation{|a|(eval a="%d%d*%d==%d%d%d"%a)&&puts(a)}}[[2,3,4,5,6,7]]
52*7==364
57*6==342

1

แบตช์ 305 ไบต์

@echo off
set/pd=
for /l %%i in (0,1,719)do set n=%%i&call:c
exit/b
:c
set t=%d%
set s=
for /l %%j in (6,-1,1)do set/ap=n%%%%j,n/=%%j&call:l
set s=%s:~0,2%*%s:~2,1%-%s:~3%
set/an=%s%
if %n%==0 echo %s%
exit/b
:l
call set u=%%t:~%p%%%
call set s=%%s%%%%u:~,1%%
call set t=%%t:~,%p%%%%%u:~1%%

รับอินพุตบน STDIN เป็นสตริง[1-9]{6}และเอาต์พุตโซลูชันทั้งหมดในdd*d-dddรูปแบบ แบทช์ไม่ดีในการจัดการสตริงดังนั้นการสร้างพีชคณิต 720 พีชคณิตเล็กน้อย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.